diff --git a/baystation12.dme b/baystation12.dme
index 56b38a54fb0..0d9209a07ef 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -733,6 +733,7 @@
#include "code\game\objects\items\weapons\plant_bag.dm"
#include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RSF.dm"
+#include "code\game\objects\items\weapons\stunbaton.dm"
#include "code\game\objects\items\weapons\stungloves.dm"
#include "code\game\objects\items\weapons\surgery_limbattachment.dm"
#include "code\game\objects\items\weapons\surgery_tools.dm"
@@ -897,6 +898,7 @@
#include "code\modules\food\meat.dm"
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\maps\dmm_suite.dm"
+#include "code\modules\maps\randomZlevel.dm"
#include "code\modules\maps\reader.dm"
#include "code\modules\maps\SwapMaps.dm"
#include "code\modules\maps\writer.dm"
diff --git a/code/WorkInProgress/SkyMarshal/Ultralight.dm b/code/WorkInProgress/SkyMarshal/Ultralight.dm
index fa682336529..84c690bb764 100644
--- a/code/WorkInProgress/SkyMarshal/Ultralight.dm
+++ b/code/WorkInProgress/SkyMarshal/Ultralight.dm
@@ -8,14 +8,15 @@
#define UL_I_EXTINGUISHED 1
#define UL_I_ONZERO 2
+#define ul_LightingEnabled 1
+#define ul_LightingResolution 1
+#define ul_Steps 7
+#define ul_FalloffStyle UL_I_FALLOFF_ROUND // Sets the lighting falloff to be either squared or circular.
+#define ul_Layer 10
+
var
- ul_LightingEnabled = 1
- ul_LightingResolution = 1
ul_LightingResolutionSqrt = sqrt(ul_LightingResolution)
- ul_Steps = 7
- ul_FalloffStyle = UL_I_FALLOFF_ROUND // Sets the lighting falloff to be either squared or circular.
ul_TopLuminosity = 0
- ul_Layer = 10
ul_SuppressLightLevelChanges = 0
list/ul_FastRoot = list(0, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5,
@@ -85,35 +86,35 @@ atom/proc/ul_Illuminate()
if(DeltaRed > 0)
if(!Affected.MaxRed)
Affected.MaxRed = list()
- var/list/parameter_list = params2list(Affected.MaxRedValues)
- if(!("[DeltaRed]" in parameter_list))
+ Affected.MaxRedSources = list()
+ if(!(DeltaRed in Affected.MaxRed))
Affected.MaxRed.Add(DeltaRed)
- parameter_list["[DeltaRed]"] = 1
+ Affected.MaxRedSources.Add(1)
else
- parameter_list["[DeltaRed]"] = "[text2num(parameter_list["[DeltaRed]"]) + 1]"
- Affected.MaxRedValues = list2params(parameter_list)
+ var/list_location = Affected.MaxRed.Find(DeltaRed)
+ Affected.MaxRedSources[list_location]++
if(DeltaGreen > 0)
if(!Affected.MaxGreen)
Affected.MaxGreen = list()
- var/list/parameter_list = params2list(Affected.MaxGreenValues)
- if(!("[DeltaGreen]" in parameter_list))
+ Affected.MaxGreenSources = list()
+ if(!(DeltaGreen in Affected.MaxGreen))
Affected.MaxGreen.Add(DeltaGreen)
- parameter_list["[DeltaGreen]"] = 1
+ Affected.MaxGreenSources.Add(1)
else
- parameter_list["[DeltaGreen]"] = "[text2num(parameter_list["[DeltaGreen]"]) + 1]"
- Affected.MaxGreenValues = list2params(parameter_list)
+ var/list_location = Affected.MaxGreen.Find(DeltaGreen)
+ Affected.MaxGreenSources[list_location]++
if(DeltaBlue > 0)
if(!Affected.MaxBlue)
Affected.MaxBlue = list()
- var/list/parameter_list = params2list(Affected.MaxBlueValues)
- if(!("[DeltaBlue]" in parameter_list))
+ Affected.MaxBlueSources = list()
+ if(!(DeltaBlue in Affected.MaxBlue))
Affected.MaxBlue.Add(DeltaBlue)
- parameter_list["[DeltaBlue]"] = 1
+ Affected.MaxBlueSources.Add(1)
else
- parameter_list["[DeltaBlue]"] = "[text2num(parameter_list["[DeltaBlue]"]) + 1]"
- Affected.MaxBlueValues = list2params(parameter_list)
+ var/list_location = Affected.MaxBlue.Find(DeltaBlue)
+ Affected.MaxBlueSources[list_location]++
Affected.ul_UpdateLight()
@@ -143,57 +144,42 @@ atom/proc/ul_Extinguish()
if(DeltaRed > 0)
if(Affected.MaxRed)
- if(findtext(Affected.MaxRedValues, "[DeltaRed]"))
- var/list/parameter_list = params2list(Affected.MaxRedValues)
- if(!("[DeltaRed]" in parameter_list))
- Affected.MaxRed.Remove(DeltaRed)
- parameter_list.Remove("[DeltaRed]")
- else if (parameter_list["[DeltaRed]"] != "1")
- parameter_list["[DeltaRed]"] = "[text2num(parameter_list["[DeltaRed]"]) - 1]"
+ var/list_location = Affected.MaxRed.Find(DeltaRed)
+ if(list_location)
+ if(Affected.MaxRedSources[list_location] > 1)
+ Affected.MaxRedSources[list_location]--
else
Affected.MaxRed.Remove(DeltaRed)
- parameter_list.Remove("[DeltaRed]")
- Affected.MaxRedValues = list2params(parameter_list)
- else
- Affected.MaxRed.Remove(DeltaRed)
+ Affected.MaxRedSources.Cut(list_location, list_location + 1)
if(!Affected.MaxRed.len)
del Affected.MaxRed
+ del Affected.MaxRedSources
if(DeltaGreen > 0)
if(Affected.MaxGreen)
- if(findtext(Affected.MaxGreenValues, "[DeltaGreen]"))
- var/list/parameter_list = params2list(Affected.MaxGreenValues)
- if(!("[DeltaGreen]" in parameter_list))
- Affected.MaxGreen.Remove(DeltaGreen)
- parameter_list.Remove("[DeltaGreen]")
- else if (parameter_list["[DeltaGreen]"] != "1")
- parameter_list["[DeltaGreen]"] = "[text2num(parameter_list["[DeltaGreen]"]) - 1]"
+ var/list_location = Affected.MaxGreen.Find(DeltaGreen)
+ if(list_location)
+ if(Affected.MaxGreenSources[list_location] > 1)
+ Affected.MaxGreenSources[list_location]--
else
Affected.MaxGreen.Remove(DeltaGreen)
- parameter_list.Remove("[DeltaGreen]")
- Affected.MaxGreenValues = list2params(parameter_list)
- else
- Affected.MaxGreen.Remove(DeltaGreen)
+ Affected.MaxGreenSources.Cut(list_location, list_location + 1)
if(!Affected.MaxGreen.len)
del Affected.MaxGreen
+ del Affected.MaxGreenSources
if(DeltaBlue > 0)
if(Affected.MaxBlue)
- if(findtext(Affected.MaxBlueValues, "[DeltaBlue]"))
- var/list/parameter_list = params2list(Affected.MaxBlueValues)
- if(!("[DeltaBlue]" in parameter_list))
- Affected.MaxBlue.Remove(DeltaBlue)
- parameter_list.Remove("[DeltaBlue]")
- else if (parameter_list["[DeltaBlue]"] != "1")
- parameter_list["[DeltaBlue]"] = "[text2num(parameter_list["[DeltaBlue]"]) - 1]"
+ var/list_location = Affected.MaxBlue.Find(DeltaBlue)
+ if(list_location)
+ if(Affected.MaxBlueSources[list_location] > 1)
+ Affected.MaxBlueSources[list_location]--
else
Affected.MaxBlue.Remove(DeltaBlue)
- parameter_list.Remove("[DeltaBlue]")
- Affected.MaxBlueValues = list2params(parameter_list)
- else
- Affected.MaxBlue.Remove(DeltaBlue)
+ Affected.MaxBlueSources.Cut(list_location, list_location + 1)
if(!Affected.MaxBlue.len)
del Affected.MaxBlue
+ del Affected.MaxBlueSources
Affected.ul_UpdateLight()
@@ -281,32 +267,28 @@ atom/proc/ul_LightLevelChanged()
return
atom/New()
- ..()
+ . = ..()
if(ul_IsLuminous())
spawn(1)
ul_Illuminate()
- return
atom/Del()
if(ul_IsLuminous())
ul_Extinguish()
- ..()
+ . = ..()
atom/movable/Move()
- if(ul_IsLuminous())
- ul_Extinguish()
- ..()
- ul_Illuminate()
- else
- ..()
+ ul_Extinguish()
+ . = ..()
+ ul_Illuminate()
turf/var/list/MaxRed
turf/var/list/MaxGreen
turf/var/list/MaxBlue
-turf/var/MaxRedValues
-turf/var/MaxGreenValues
-turf/var/MaxBlueValues
+turf/var/list/MaxRedSources
+turf/var/list/MaxGreenSources
+turf/var/list/MaxBlueSources
turf/proc/ul_GetRed()
if(MaxRed)
@@ -404,4 +386,15 @@ area/proc/ul_Prep()
ul_Light()
//world.log << tag
- return
\ No newline at end of file
+ return
+
+#undef UL_I_FALLOFF_SQUARE
+#undef UL_I_FALLOFF_ROUND
+#undef UL_I_LIT
+#undef UL_I_EXTINGUISHED
+#undef UL_I_ONZERO
+#undef ul_LightingEnabled
+#undef ul_LightingResolution
+#undef ul_Steps
+#undef ul_FalloffStyle
+#undef ul_Layer
\ No newline at end of file
diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm
index e68324a4aba..801f6ee6c33 100644
--- a/code/ZAS/Fire.dm
+++ b/code/ZAS/Fire.dm
@@ -127,16 +127,16 @@ obj
//Change icon depending on the fuel, and thus temperature.
if(firelevel > 6)
icon_state = "3"
- if(LuminosityRed != 7)
- ul_SetLuminosity(7,5,0)
+ if(LuminosityRed != 11)
+ ul_SetLuminosity(11,9,0)
else if(firelevel > 2.5)
icon_state = "2"
- if(LuminosityRed != 5)
- ul_SetLuminosity(5,4,0)
+ if(LuminosityRed != 8)
+ ul_SetLuminosity(8,7,0)
else
icon_state = "1"
- if(LuminosityRed != 3)
- ul_SetLuminosity(3,2,0)
+ if(LuminosityRed != 5)
+ ul_SetLuminosity(5,4,0)
//Ensure flow temperature is higher than minimum fire temperatures.
flow.temperature = max(PLASMA_MINIMUM_BURN_TEMPERATURE+0.1,flow.temperature)
diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm
index e4aa79dbb0b..b6aecf27c81 100644
--- a/code/datums/helper_datums/teleport.dm
+++ b/code/datums/helper_datums/teleport.dm
@@ -114,7 +114,7 @@
// Remove any luminosity etc.
var/prevlum = teleatom.luminosity
- teleatom.luminosity = 0
+ teleatom.ul_SetLuminosity(0)
if(force_teleport)
teleatom.forceMove(destturf)
diff --git a/code/defines/area/Space Station 13 areas.dm b/code/defines/area/Space Station 13 areas.dm
index d142c42a213..0fb0c2f8ba4 100755
--- a/code/defines/area/Space Station 13 areas.dm
+++ b/code/defines/area/Space Station 13 areas.dm
@@ -13,7 +13,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
*/
-
/area
var/fire = null
var/atmos = 1
@@ -128,6 +127,8 @@ proc/process_ghost_teleport_locs()
/area/shuttle //DO NOT TURN THE ul_Lighting STUFF ON FOR SHUTTLES. IT BREAKS THINGS.
requires_power = 0
+ luminosity = 1
+ ul_Lighting = 0
/area/shuttle/arrival
name = "\improper Arrival Shuttle"
@@ -231,11 +232,15 @@ proc/process_ghost_teleport_locs()
icon_state = "shuttle"
name = "\improper Alien Shuttle Base"
requires_power = 1
+ luminosity = 1
+ ul_Lighting = 0
/area/shuttle/alien/mine
icon_state = "shuttle"
name = "\improper Alien Shuttle Mine"
requires_power = 1
+ luminosity = 1
+ ul_Lighting = 0
/area/shuttle/prison/
name = "\improper Prison Shuttle"
@@ -802,6 +807,8 @@ proc/process_ghost_teleport_locs()
/area/holodeck
name = "\improper Holodeck"
icon_state = "Holodeck"
+ luminosity = 1
+ ul_Lighting = 0
/area/holodeck/alphadeck
name = "\improper Holodeck Alpha"
@@ -957,8 +964,9 @@ proc/process_ghost_teleport_locs()
//Solars
/area/solar
- LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3)
requires_power = 0
+ luminosity = 1
+ ul_Lighting = 0
auxport
name = "\improper Port Auxiliary Solar Array"
@@ -1474,18 +1482,26 @@ proc/process_ghost_teleport_locs()
/area/turret_protected/AIsatextFP
name = "\improper AI Sat Ext"
icon_state = "storage"
+ luminosity = 1
+ ul_Lighting = 0
/area/turret_protected/AIsatextFS
name = "\improper AI Sat Ext"
icon_state = "storage"
+ luminosity = 1
+ ul_Lighting = 0
/area/turret_protected/AIsatextAS
name = "\improper AI Sat Ext"
icon_state = "storage"
+ luminosity = 1
+ ul_Lighting = 0
/area/turret_protected/AIsatextAP
name = "\improper AI Sat Ext"
icon_state = "storage"
+ luminosity = 1
+ ul_Lighting = 0
/area/turret_protected/NewAIMain
name = "\improper AI Main New"
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 21122adf877..43a2cc90e4f 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -384,6 +384,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
@@ -1279,6 +1306,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/hydro.dm b/code/defines/obj/hydro.dm
index efb3da713da..9cd72847727 100644
--- a/code/defines/obj/hydro.dm
+++ b/code/defines/obj/hydro.dm
@@ -1153,12 +1153,12 @@
..()
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/pickup(mob/user)
- src.ul_SetLuminosity(0)
+ ul_SetLuminosity(0)
user.ul_SetLuminosity(user.LuminosityRed + potency/5, user.LuminosityGreen + potency/5, user.LuminosityBlue + potency/5)
/obj/item/weapon/reagent_containers/food/snacks/grown/glowberries/dropped(mob/user)
user.ul_SetLuminosity(user.LuminosityRed - potency/5, user.LuminosityGreen - potency/5, user.LuminosityBlue - potency/5)
- src.ul_SetLuminosity(potency/5)
+ ul_SetLuminosity(potency/5)
/obj/item/weapon/reagent_containers/food/snacks/grown/cocoapod
seed = "/obj/item/seeds/cocoapodseed"
@@ -1621,7 +1621,7 @@
if(istype(src.loc,/mob))
pickup(src.loc)
else
- src.ul_SetLuminosity(potency/10)
+ ul_SetLuminosity(potency/10)
lifespan = 120 //ten times that is the delay
endurance = 30
maturation = 15
diff --git a/code/defines/obj/vending.dm b/code/defines/obj/vending.dm
index f7ba00d2bd0..ef6483512ff 100755
--- a/code/defines/obj/vending.dm
+++ b/code/defines/obj/vending.dm
@@ -180,7 +180,7 @@
// product_hideamt = "3;4;6"
hidden_prices = "3;3;2"
points = 25
- 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!"
charge_type = "medical"
/obj/machinery/vending/wallmed1
@@ -310,7 +310,7 @@
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."
charge_type = "soda"
-/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"
@@ -327,6 +327,22 @@
product_coin_amt = "1"
charge_type = "engineering"
+/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_prices = "1;2;3;2;2;2;3;2;2"
+ product_hidden = "/obj/item/weapon/weldingtool/hugetank;/obj/item/clothing/gloves/fyellow"
+// product_hideamt = "2;2"
+ hidden_prices = "4;4"
+ product_coin = "/obj/item/weapon/storage/belt/utility"
+ product_coin_amt = "3"
+ charge_type = "engineering"
+
/obj/machinery/vending/genetics
name = "Genetics Dispenser"
desc = "Medical drug dispenser."
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 9d8446c0669..6153895a566 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -355,21 +355,6 @@
details = 1
origin_tech = "magnets=4;biotech=2"
-/obj/item/weapon/melee/baton
- name = "stun baton"
- desc = "The police baton of the future."
- icon_state = "stunbaton"
- item_state = "baton"
- flags = FPRINT | TABLEPASS
- slot_flags = SLOT_BELT
- force = 15
- throwforce = 7
- w_class = 3
- var/charges = 10.0
- var/maximum_charges = 10.0
- var/status = 0
- origin_tech = "combat=2"
-
/*/obj/item/weapon/melee/chainofcommand
name = "chain of command"
desc = "The Captain is first and all other heads are last."
diff --git a/code/defines/turf.dm b/code/defines/turf.dm
index 0c30c4dac16..49672fe98b7 100644
--- a/code/defines/turf.dm
+++ b/code/defines/turf.dm
@@ -157,6 +157,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
@@ -166,6 +167,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/heatshield
thermal_conductivity = 0
opacity = 0
@@ -256,7 +331,7 @@
return L
-
+/*
/turf/simulated/wall/mineral
icon = 'mineral_walls.dmi'
walltype = "iron"
@@ -356,3 +431,4 @@
hardness -= toxinsToDeduce/100
CheckHardness()
+*/
diff --git a/code/game/area/areas.dm b/code/game/area/areas.dm
index 413dfffcfd3..4dcea1bf829 100644
--- a/code/game/area/areas.dm
+++ b/code/game/area/areas.dm
@@ -28,24 +28,22 @@
requires_power = 1
always_unpowered = 1
LightLevels = list("Red" = 2, "Green" = 2, "Blue" = 3)
- ul_SetLuminosity(2,2,3)
power_light = 0
power_equip = 0
power_environ = 0
//has_gravity = 0 // Space has gravity. Because.. because.
- else if(!requires_power)
+ if(!requires_power)
power_light = 0//rastaf0
power_equip = 0//rastaf0
power_environ = 0//rastaf0
- if(!ul_Lighting)
- luminosity = 1
+ luminosity = 1
+ ul_Lighting = 0
else
luminosity = 0
area_lights_luminosity = rand(6,7)
if(LightLevels)
ul_Light()
- //ul_SetLuminosity(0) // *DAL*
diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm
index 57c1066173d..4a614897d19 100644
--- a/code/game/gamemodes/cult/cult.dm
+++ b/code/game/gamemodes/cult/cult.dm
@@ -237,11 +237,11 @@
var/image/I = cult_mind.current.antag_img
I.icon_state = "cult"
cultist.current.client.images += I
- if(cult_mind.current)
- if(cult_mind.current.client)
- var/image/I = cultist.current.antag_img
- I.icon_state = "cult"
- cult_mind.current.client.images += I
+ if(cult_mind.current)
+ if(cult_mind.current.client)
+ var/image/I = cultist.current.antag_img
+ I.icon_state = "cult"
+ cult_mind.current.client.images += I
/datum/game_mode/proc/update_cult_icons_removed(datum/mind/cult_mind)
@@ -253,11 +253,11 @@
if(I.icon_state == "cult" && I.loc == cult_mind.current)
cultist.current.client.images -= I
- if(cult_mind.current)
- if(cult_mind.current.client)
- for(var/image/I in cult_mind.current.client.images)
- if(I.icon_state == "cult")
- cult_mind.current.client.images -= I
+ if(cult_mind.current)
+ if(cult_mind.current.client)
+ for(var/image/I in cult_mind.current.client.images)
+ if(I.icon_state == "cult")
+ cult_mind.current.client.images -= I
/datum/game_mode/cult/proc/get_unconvertables()
diff --git a/code/game/machinery/bots/ed209bot.dm b/code/game/machinery/bots/ed209bot.dm
index be5c8639ffe..a0be786b875 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,6 +862,22 @@ Auto Patrol: []"},
src.item_state = "ed209_shell"
src.icon_state = "ed209_shell"
del(W)
+ 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))
@@ -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 50d14572e77..e375585bdc5 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -68,30 +68,31 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
icon = 'doorint.dmi'
icon_state = "door_closed"
- var
- aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
- hackProof = 0 // if 1, this door can't be hacked by the AI
- synDoorHacked = 0 // Has it been hacked? bool 1 = yes / 0 = no
- synHacking = 0 // Is hack in process y/n?
- secondsMainPowerLost = 0 //The number of seconds until power is restored.
- secondsBackupPowerLost = 0 //The number of seconds until power is restored.
- spawnPowerRestoreRunning = 0
- welded = null
- locked = 0
- list/air_locked = 0
- wires = 4095
- aiDisabledIdScanner = 0
- aiHacking = 0
- obj/machinery/door/airlock/closeOther = null
- closeOtherId = null
- list/signalers[12]
- lockdownbyai = 0
- doortype = 0
- justzap = 0
- safetylight = 1
- obj/item/weapon/airlock_electronics/electronics = null
- alert_probability = 3
- list/wire_index = list(
+ var/aiControlDisabled = 0 //If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ var/hackProof = 0 // if 1, this door can't be hacked by the AI
+ var/synDoorHacked = 0 // Has it been hacked? bool 1 = yes / 0 = no
+ var/synHacking = 0 // Is hack in process y/n?
+ var/secondsMainPowerLost = 0 //The number of seconds until power is restored.
+ var/secondsBackupPowerLost = 0 //The number of seconds until power is restored.
+ var/spawnPowerRestoreRunning = 0
+ var/welded = null
+ var/locked = 0
+ var/list/air_locked = 0
+ var/wires = 4095
+ secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
+ var/aiDisabledIdScanner = 0
+ var/aiHacking = 0
+ var/obj/machinery/door/airlock/closeOther = null
+ var/closeOtherId = null
+ var/list/signalers[12]
+ var/lockdownbyai = 0
+ autoclose = 1
+ var/doortype = 0
+ var/justzap = 0
+ var/safetylight = 1
+ var/obj/item/weapon/airlock_electronics/electronics = null
+ var/alert_probability = 3
+ var/list/wire_index = list(
"Orange" = 1,
"Dark red" = 2,
"White" = 3,
@@ -115,754 +116,237 @@ Airlock index -> wire color are { 9, 4, 6, 7, 5, 8, 1, 2, 3 }.
"Shamrock" = 21,
"Indigo" = 22
)
- wirenum = 12
+ var/wirenum = 12
holdopen = 1
- autoclose = 1
- secondsElectrified = 0 //How many seconds remain until the door is no longer electrified. -1 if it is permanently electrified until someone fixes it.
- command
- name = "Airlock"
- icon = 'Doorcom.dmi'
- doortype = 1
- holdopen = 0
-
-
- security
- name = "Airlock"
- icon = 'Doorsec.dmi'
- doortype = 2
-
-
- engineering
- name = "Airlock"
- icon = 'Dooreng.dmi'
- doortype = 3
-
-
- medical
- name = "Airlock"
- icon = 'Doormed.dmi'
- doortype = 4
-
-
- maintenance
- name = "Maintenance Access"
- icon = 'Doormaint.dmi'
- doortype = 5
-
- external
- name = "External Airlock"
- icon = 'Doorext.dmi'
- doortype = 6
-
-
- glass
- name = "Glass Airlock"
- icon = 'Doorglass.dmi'
- opacity = 0
- doortype = 7
- glass = 1
-
-
- glass_command
- name = "Maintenance Hatch"
- icon = 'Doorcomglass.dmi'
- opacity = 0
- doortype = 14
- glass = 1
-
-
- glass_engineering
- name = "Maintenance Hatch"
- icon = 'Doorengglass.dmi'
- opacity = 0
- doortype = 15
- glass = 1
-
-
- glass_security
- name = "Maintenance Hatch"
- icon = 'Doorsecglass.dmi'
- opacity = 0
- doortype = 16
- glass = 1
-
-
- glass_medical
- name = "Maintenance Hatch"
- icon = 'doormedglass.dmi'
- opacity = 0
- doortype = 17
- glass = 1
-
-
- glass_research
- name = "Research Airlock"
- icon = 'doorsciglass.dmi'
- opacity = 0
- doortype = 20
- glass = 1
-
-
- glass_mining
- name = "Maintenance Hatch"
- icon = 'doorminingglass.dmi'
- opacity = 0
- doortype = 22
- glass = 1
-
- glass_atmos
- name = "Maintenance Hatch"
- icon = 'dooratmoglass.dmi'
- opacity = 0
- doortype = 23
- glass = 1
-
- centcom
- name = "Airlock"
- icon = 'Doorele.dmi'
- opacity = 0
- doortype = 8
-
-
- vault
- name = "Vault"
- icon = 'vault.dmi'
- opacity = 1
- doortype = 9
-
-
- glass_large
- name = "Glass Airlock"
- icon = 'Door2x1glassfull.dmi'
- opacity = 0
- doortype = 10
- glass = 1
-
-
- freezer
- name = "Freezer Airlock"
- icon = 'Doorfreezer.dmi'
- opacity = 1
- doortype = 11
-
-
- hatch
- name = "Airtight Hatch"
- icon = 'Doorhatchele.dmi'
- opacity = 1
- doortype = 12
-
-
- maintenance_hatch
- name = "Maintenance Hatch"
- icon = 'Doorhatchmaint2.dmi'
- opacity = 1
- doortype = 13
-
-
- mining
- name = "Mining Airlock"
- icon = 'Doormining.dmi'
- doortype = 18
-
-
- atmos
- name = "Atmospherics Airlock"
- icon = 'Dooratmo.dmi'
- doortype = 19
-
-
- research
- name = "Research Airlock"
- icon = 'doorsci.dmi'
- doortype = 21
-
- New()
- ..()
- if (src.closeOtherId != null)
- spawn (5)
- for (var/obj/machinery/door/airlock/A in world)
- if (A.closeOtherId == src.closeOtherId && A != src)
- src.closeOther = A
- break
-
-
- 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)
- else
- playsound(src.loc, 'airlock.ogg', 30, 1)
- if (src.closeOther != null && istype(src.closeOther, /obj/machinery/door/airlock/) && !src.closeOther.density)
- src.closeOther.close()
- return ..()
-
-
- close()
- if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR) || src.operating)
- return
- ..()
- use_power(50)
- if(istype(src, /obj/machinery/door/airlock/glass))
- playsound(src.loc, 'windowdoor.ogg', 100, 1)
- else
- playsound(src.loc, 'airlock.ogg', 30, 1)
- var/obj/structure/window/killthis = (locate(/obj/structure/window) in get_turf(src))
- if(killthis)
- killthis.ex_act(2)//Smashin windows
- return
-
-
- bumpopen(mob/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
- if (!istype(usr, /mob/living/silicon))
- if (src.isElectrified())
- if (!src.justzap)
- if(src.shock(user, 100))
- src.justzap = 1
- spawn (10)
- src.justzap = 0
- return
- else /*if (src.justzap)*/
- return
- else if(user.hallucination > 50 && prob(10) && src.operating == 0)
- user << "\red You feel a powerful shock course through your body!"
- user.halloss += 10
- user.stunned += 10
- return
- ..(user)
-
-
- update_icon()
- if(overlays) overlays = null
- if(density)
- if(locked && safetylight)
- icon_state = "door_locked"
- else
- icon_state = "door_closed"
- if(p_open || welded || air_locked)
- overlays = list()
- if(p_open)
- overlays += image(icon, "panel_open")
- if(welded)
- overlays += image(icon, "welded")
- if(air_locked)
- overlays += image('Door1.dmi', "air")
- else
- icon_state = "door_open"
- return
-
-
- animate(animation)
- switch(animation)
- if("opening")
- if(overlays) overlays = null
- if(p_open)
- icon_state = "o_door_opening" //can not use flick due to BYOND bug updating overlays right before flicking
- else
- flick("door_opening", src)
- if("closing")
- if(overlays) overlays = null
- if(p_open)
- flick("o_door_closing", src)
- else
- flick("door_closing", src)
- if("spark")
- flick("door_spark", src)
- if("deny")
- flick("door_deny", src)
- return
-
- requiresID()
- return !(src.isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner)
-
- attackby(C as obj, mob/user as mob)
- //world << text("airlock attackby src [] obj [] mob []", src, C, user)
- if(istype(C, /obj/item/device/detective_scanner))
- return
- if(istype(C, /obj/item/taperoll/police))
- return
- if (!istype(usr, /mob/living/silicon))
- if (src.isElectrified())
- if(src.shock(user, 75))
- return
-
- src.add_fingerprint(user)
- if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
- var/obj/item/weapon/weldingtool/W = C
- if(W.remove_fuel(0,user))
- if (!src.welded)
- src.welded = 1
- else
- src.welded = null
- src.update_icon()
- return
- else
- return
- else if (istype(C, /obj/item/weapon/screwdriver))
- src.p_open = !( src.p_open )
- src.update_icon()
- else if (istype(C, /obj/item/weapon/wirecutters))
- return src.attack_hand(user)
- else if (istype(C, /obj/item/device/multitool))
- return src.attack_hand(user)
- else if (istype(C, /obj/item/device/hacktool))
- return src.attack_ai(user, C)
- else if (istype(C, /obj/item/device/assembly/signaler))
- return src.attack_hand(user)
- else if (istype(C, /obj/item/weapon/pai_cable)) // -- TLE
- var/obj/item/weapon/pai_cable/cable = C
- cable.plugin(src, user)
- else if (istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) )
- var/beingcrowbarred = null
- if(istype(C, /obj/item/weapon/crowbar) )
- beingcrowbarred = 1 //derp, Agouri
- else
- beingcrowbarred = 0
- if( beingcrowbarred && (density && welded && !operating && src.p_open && (!src.arePowerSystemsOn() || stat & NOPOWER) && !src.locked) )
- playsound(src.loc, 'Crowbar.ogg', 100, 1)
- user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
- if(do_after(user,40))
- user << "\blue You removed the airlock electronics!"
- switch(src.doortype)
- if(0) new/obj/structure/door_assembly/door_assembly_0( src.loc )
- if(1) new/obj/structure/door_assembly/door_assembly_com( src.loc )
- if(2) new/obj/structure/door_assembly/door_assembly_sec( src.loc )
- if(3) new/obj/structure/door_assembly/door_assembly_eng( src.loc )
- 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(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(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 )
- if(19) new/obj/structure/door_assembly/door_assembly_atmo( src.loc )
- if(20) new/obj/structure/door_assembly/door_assembly_research( src.loc )
- if(21) new/obj/structure/door_assembly/door_assembly_research( 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 )
- var/obj/item/weapon/airlock_electronics/ae
- if (!electronics)
- ae = new/obj/item/weapon/airlock_electronics( src.loc )
- ae.conf_access = src.req_access
- else
- ae = electronics
- electronics = null
- ae.loc = src.loc
-
- del(src)
- return
- else if (src.arePowerSystemsOn() && !(stat & NOPOWER))
- user << "\blue The airlock's motors resist your efforts to pry it open."
- else if (src.locked)
- user << "\blue The airlock's bolts prevent it from being pried open."
- if ((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked )))
-
- if(beingcrowbarred == 0) //being fireaxe'd
- var/obj/item/weapon/twohanded/fireaxe/F = C
- if(F:wielded)
- spawn( 0 )
- src.operating = 1
- animate("opening")
-
- sleep(15)
-
- layer = 2.7
- src.density = 0
- update_icon()
-
- if (!istype(src, /obj/machinery/door/airlock/glass))
- src.ul_SetOpacity(0)
- src.operating = 0
- return
- user << "\red You need to be wielding the Fire axe to do that."
- return
- else
- spawn( 0 )
- src.operating = 1
- animate("opening")
-
- sleep(15)
-
- layer = 2.7
- src.density = 0
- update_icon()
-
- if (!istype(src, /obj/machinery/door/airlock/glass))
- src.ul_SetOpacity(0)
- src.operating = 0
- return
-
- else
- if ((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
- if(beingcrowbarred == 0)
- var/obj/item/weapon/twohanded/fireaxe/F = C
- if(F:wielded)
- spawn( 0 )
- src.operating = 1
- animate("closing")
-
- layer = 3.1
- src.density = 1
- sleep(15)
- update_icon()
-
- if ((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
- src.ul_SetOpacity(1)
- src.operating = 0
- else
- user << "\red You need to be wielding the Fire axe to do that."
- else
- spawn( 0 )
- src.operating = 1
- animate("closing")
- layer = 3.1
- src.density = 1
- sleep(15)
- update_icon()
-
- if ((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
- src.ul_SetOpacity(1)
- src.operating = 0
-
- else
- ..()
- return
-
-
- attack_paw(mob/user as mob)
- return src.attack_hand(user)
-
-
- attack_hand(mob/user as mob)
- if (!istype(usr, /mob/living/silicon))
- if (src.isElectrified())
- if(src.shock(user, 100))
- return
-
- if (ishuman(user) && prob(40) && src.density)
- var/mob/living/carbon/human/H = user
- if(H.getBrainLoss() >= 60)
- playsound(src.loc, 'bang.ogg', 25, 1)
- if(!istype(H.head, /obj/item/clothing/head/helmet))
- for(var/mob/M in viewers(src, null))
- M << "\red [user] headbutts the airlock."
- var/datum/organ/external/affecting = H.get_organ("head")
- affecting.take_damage(10, 0)
- H.Stun(8)
- H.Weaken(5)
- H.UpdateDamageIcon()
- else
- for(var/mob/M in viewers(src, null))
- M << "\red [user] headbutts the airlock. Good thing they're wearing a helmet."
- return
-
- if (src.p_open)
- user.machine = src
- var/t1 = text("Access Panel
\n")
-
- //t1 += text("[]: ", airlockFeatureNames[airlockWireColorToIndex[9]])
- t1 += getAirlockWires()
-
- t1 += text("
\n[]
\n[]
\n[]
\n[]
\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.secondsElectrified!=0 ? "The safety light is flashing!" : "The safety light is on."), (src.forcecrush==0 ? "The hydraulics control light is a solid green." : "The hydraulics control light is flashing red."))
-
- t1 += text("
Close
\n", src)
-
- user << browse(t1, "window=airlock")
- onclose(user, "airlock")
-
- else
- ..(user)
- return
-
-//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door, 8 engage engineer smasher, 9 enable bolt indicator, 10 wait for clearance
-//aiEnable - 1 idscan, 4 raise door bolts, 5 electrify door for 30 seconds, 6 electrify door indefinitely, 7 open door, 8 disable engineer smasher, 9 disable bolt indicator, 10 autoclose
- //This has been converted to be called by either the AI or a mob with a hacktool, permitting either to directly operate the airlock
- attack_ai(mob/user as mob, obj/item/device/hacktool/C)
- if(isAI(user))
- if (!src.canAIControl())
- if (src.canAIHack())
- src.hack(user)
- return
- else if(user && !isrobot(user))
- if(!C)
- return
- if(C.in_use)
- user << "We are already hacking another airlock."
- return
- if (!src.canSynControl() && src.canSynHack(C))
- src.synhack(user, C)
- return
- if(!src.canSynHack(C) && !synDoorHacked)
- user << "The power is cut or something, I can't hack it!"
- return
- if(istype(C, /obj/item/device/hacktool/engineer))
- return
- else if(!isrobot(user))
- world << "ERROR: Mob was null when calling attack_ai on [src.name] at [src.x],[src.y],[src.z]"
- return
-
-
- //Separate interface for the AI.
- user.machine = src
- var/t1 = text("Airlock Control
\n")
- if (src.secondsMainPowerLost > 0)
- if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
- t1 += text("Main power is offline for [] seconds.
\n", src.secondsMainPowerLost)
- else
- t1 += text("Main power is offline indefinitely.
\n")
- else
- t1 += text("Main power is online.")
-
- if (src.secondsBackupPowerLost > 0)
- if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
- t1 += text("Backup power is offline for [] seconds.
\n", src.secondsBackupPowerLost)
- else
- t1 += text("Backup power is offline indefinitely.
\n")
- else if (src.secondsMainPowerLost > 0)
- t1 += text("Backup power is online.")
- else
- t1 += text("Backup power is offline, but will turn on if main power fails.")
- t1 += "
\n"
-
- if (src.isWireCut(AIRLOCK_WIRE_IDSCAN))
- t1 += text("IdScan wire is cut.
\n")
- else if (src.aiDisabledIdScanner)
- t1 += text("IdScan disabled. Enable?
\n", src)
- else
- t1 += text("IdScan enabled. Disable?
\n", src)
-
- if (src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1))
- t1 += text("Main Power Input wire is cut.
\n")
- if (src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2))
- t1 += text("Main Power Output wire is cut.
\n")
- if (src.secondsMainPowerLost == 0)
- t1 += text("Temporarily disrupt main power?.
\n", src)
- if (src.secondsBackupPowerLost == 0)
- t1 += text("Temporarily disrupt backup power?.
\n", src)
-
- if (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1))
- t1 += text("Backup Power Input wire is cut.
\n")
- if (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2))
- t1 += text("Backup Power Output wire is cut.
\n")
-
- if (src.isWireCut(AIRLOCK_WIRE_CRUSH))
- t1 += text("Airlock extra force wire is cut.
\n")
- else if(!src.forcecrush)
- t1 += text("Airlock extra force disabled Enable it?
\n")
- else
- t1 += text("Airlock extra force enabled Disable it?
\n")
-
- if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
- t1 += text("Door bolt drop wire is cut.
\n")
- else if (!src.locked)
- t1 += text("Door bolts are up. Drop them?
\n", src)
- else
- t1 += text("Door bolts are down.")
- if (src.arePowerSystemsOn())
- t1 += text(" Raise?
\n", src)
- else
- t1 += text(" Cannot raise door bolts due to power failure.
\n")
-
- if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
- t1 += text("Electrification wire is cut.
\n")
- if (src.secondsElectrified==-1)
- t1 += text("Door is electrified indefinitely. Un-electrify it?
\n", src)
- else if (src.secondsElectrified>0)
- t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
\n", src.secondsElectrified, src)
- else
- t1 += text("Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
\n", src, src)
-
- if(src.isWireCut(AIRLOCK_WIRE_LIGHT))
- t1 += "Bolt indication light wire is cut.
\n"
- else if(!src.safetylight)
- t1 += text("Bolt Indication light is disabled Enable it?
\n")
- else
- t1 += text("Bolt Indication light is enabled Disable it?
\n")
-
- if(src.isWireCut(AIRLOCK_WIRE_HOLDOPEN))
- t1 += "Behavior Control light wire is cut.
\n"
- else if(!src.holdopen)
- t1 += text("Door behavior is set to: Automatically close Toggle?
\n")
- else
- t1 += text("Door behavior is set to: Wait for clearance to close Toggle?
\n")
-
- if (src.welded)
- t1 += text("Door appears to have been welded shut.
\n")
- else if (!src.locked)
- if (src.density)
- t1 += text("Open door
\n", src)
- else
- t1 += text("Close door
\n", src)
-
- t1 += text("Close
\n", src)
- user << browse(t1, "window=airlock")
- onclose(user, "airlock")
-
-
- proc
- hack(mob/user as mob)
- if (src.aiHacking==0)
- src.aiHacking=1
- spawn(20)
- //TODO: Make this take a minute
- user << "Airlock AI control has been blocked. Beginning fault-detection."
- sleep(50)
- if (src.canAIControl())
- user << "Alert cancelled. Airlock control has been restored without our assistance."
- src.aiHacking=0
- return
- else if (!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
- src.aiHacking=0
- return
- user << "Fault confirmed: airlock control wire disabled or cut."
- sleep(20)
- user << "Attempting to hack into airlock. This may take some time."
- sleep(200)
- if (src.canAIControl())
- user << "Alert cancelled. Airlock control has been restored without our assistance."
- src.aiHacking=0
- return
- else if (!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
- src.aiHacking=0
- return
- user << "Upload access confirmed. Loading control program into airlock software."
- sleep(170)
- if (src.canAIControl())
- user << "Alert cancelled. Airlock control has been restored without our assistance."
- src.aiHacking=0
- return
- else if (!src.canAIHack())
- user << "We've lost our connection! Unable to hack airlock."
- src.aiHacking=0
- return
- user << "Transfer complete. Forcing airlock to execute program."
- sleep(50)
- //disable blocked control
- src.aiControlDisabled = 2
- user << "Receiving control information from airlock."
- sleep(10)
- //bring up airlock dialog
- src.aiHacking = 0
- src.attack_ai(user)
-
-
- synhack(mob/user as mob, obj/item/device/hacktool/I)
- if (src.synHacking==0)
- var/multiplier = 1.5
- if(istype(I, /obj/item/device/hacktool/engineer))
- if(!src.locked)
- user << "The door bolts are already up!"
- return
- multiplier -= 0.5
- src.synHacking=1
- I.in_use = 1
- user << "You begin hacking..."
- spawn(20*multiplier)
- user << "Jacking in. Stay close to the airlock or you'll rip the cables out and we'll have to start over."
- sleep(25*multiplier)
- if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
- user << "Hack cancelled, control already possible."
- src.synHacking=0
- I.in_use = 0
- return
- else if (!src.canSynHack(I))
- user << "\red Connection lost. Stand still and stay near the airlock!"
- src.synHacking=0
- I.in_use = 0
- return
- user << "Connection established."
- sleep(10*multiplier)
- user << "Attempting to hack into airlock. This may take some time."
- sleep(50*multiplier)
-
- // Alerting the AIs
- var/list/cameras = list()
- for (var/obj/machinery/camera/C in src.loc.loc.contents) // getting all cameras in the area
- cameras += C
- var/alertoption = (prob(alert_probability) || istype(I, /obj/item/device/hacktool/engineer)) // Chance of warning AI, based on doortype's probability
- if(alertoption)
- if(prob(15)) //15% chance of sending the AI all the details (camera, area, warning)
- alertoption = 3
- else if (prob(18)) //18% chance of sending the AI just the area
- alertoption = 2
- for (var/mob/living/silicon/ai/aiPlayer in world)
- if (aiPlayer.stat != 2)
- switch(alertoption)
- if(3) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc, cameras)
- if(2) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- if(1) aiPlayer.triggerUnmarkedAlarm("AirlockHacking")
- for (var/mob/living/silicon/robot/robotPlayer in world)
- if (robotPlayer.stat != 2)
- switch(alertoption)
- if(2,3) robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- if(1) robotPlayer.triggerUnmarkedAlarm("AirlockHacking")
- // ...And done
-
- if (!src.canSynHack(I))
- user << "\red Hack aborted: landline connection lost. Stay closer to the airlock."
- src.synHacking=0
- I.in_use = 0
- return
- else if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
- user << "Local override already in place, hack aborted."
- src.synHacking=0
- I.in_use = 0
- return
- user << "Upload access confirmed. Loading control program into airlock software."
- sleep(35*multiplier)
- if (!src.canSynHack(I))
- user << "\red Hack aborted: cable connection lost. Do not move away from the airlock."
- src.synHacking=0
- I.in_use = 0
- return
- else if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
- user << "Upload access aborted, local override already in place."
- src.synHacking=0
- I.in_use = 0
- return
- user << "Transfer complete. Forcing airlock to execute program."
- sleep(25*multiplier)
- //disable blocked control
- if(istype(I, /obj/item/device/hacktool/engineer))
- user << "Raising door bolts..."
- src.synHacking = 0
- src.locked = 0
- I.in_use = 0
- update_icon()
- return
- src.synDoorHacked = 1
- user << "Bingo! We're in. Airlock control panel coming right up."
- sleep(5)
- //bring up airlock dialog
- src.synHacking = 0
- I.in_use = 0
- src.attack_ai(user, I)
-
-
- canAIControl()
- return ((src.aiControlDisabled!=1) && (!src.isAllPowerCut()));
-
-
- canAIHack()
- return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerCut()));
-
-
- canSynControl()
- return (src.synDoorHacked && (!src.isAllPowerCut()));
-
-
- canSynHack(obj/item/device/hacktool/H)
- return (in_range(src, usr) && get_dist(src, H) <= 1 && src.synDoorHacked==0 && !src.isAllPowerCut());
-
+/obj/machinery/door/airlock/command
+ name = "Airlock"
+ icon = 'Doorcom.dmi'
+ doortype = 1
+ holdopen = 0
+
+/obj/machinery/door/airlock/security
+ name = "Airlock"
+ icon = 'Doorsec.dmi'
+ doortype = 2
+
+/obj/machinery/door/airlock/engineering
+ name = "Airlock"
+ icon = 'Dooreng.dmi'
+ doortype = 3
+
+/obj/machinery/door/airlock/medical
+ name = "Airlock"
+ icon = 'Doormed.dmi'
+ doortype = 4
+
+/obj/machinery/door/airlock/maintenance
+ name = "Maintenance Access"
+ icon = 'Doormaint.dmi'
+ doortype = 5
+
+/obj/machinery/door/airlock/external
+ name = "External Airlock"
+ icon = 'Doorext.dmi'
+ doortype = 6
+
+/obj/machinery/door/airlock/glass
+ name = "Glass Airlock"
+ icon = 'Doorglass.dmi'
+ opacity = 0
+ doortype = 7
+ glass = 1
+
+/obj/machinery/door/airlock/centcom
+ name = "Airlock"
+ icon = 'Doorele.dmi'
+ opacity = 0
+ doortype = 8
+
+/obj/machinery/door/airlock/vault
+ name = "Vault"
+ icon = 'vault.dmi'
+ opacity = 1
+ doortype = 9
+
+/obj/machinery/door/airlock/glass_large
+ name = "Glass Airlock"
+ icon = 'Door2x1glassfull.dmi'
+ opacity = 0
+ doortype = 10
+ glass = 1
+
+/obj/machinery/door/airlock/freezer
+ name = "Freezer Airlock"
+ icon = 'Doorfreezer.dmi'
+ opacity = 1
+ doortype = 11
+
+/obj/machinery/door/airlock/hatch
+ name = "Airtight Hatch"
+ icon = 'Doorhatchele.dmi'
+ opacity = 1
+ doortype = 12
+
+/obj/machinery/door/airlock/maintenance_hatch
+ name = "Maintenance Hatch"
+ icon = 'Doorhatchmaint2.dmi'
+ opacity = 1
+ doortype = 13
+
+/obj/machinery/door/airlock/glass/glass_command
+ name = "Maintenance Hatch"
+ icon = 'Doorcomglass.dmi'
+ opacity = 0
+ doortype = 14
+ glass = 1
+
+/obj/machinery/door/airlock/glass/glass_engineering
+ name = "Maintenance Hatch"
+ icon = 'Doorengglass.dmi'
+ opacity = 0
+ doortype = 15
+ glass = 1
+
+/obj/machinery/door/airlock/glass/glass_security
+ name = "Maintenance Hatch"
+ icon = 'Doorsecglass.dmi'
+ opacity = 0
+ doortype = 16
+ glass = 1
+
+/obj/machinery/door/airlock/glass/glass_medical
+ name = "Maintenance Hatch"
+ icon = 'doormedglass.dmi'
+ opacity = 0
+ doortype = 17
+ glass = 1
+
+/obj/machinery/door/airlock/mining
+ name = "Mining Airlock"
+ icon = 'Doormining.dmi'
+ doortype = 18
+
+/obj/machinery/door/airlock/atmos
+ name = "Atmospherics Airlock"
+ icon = 'Dooratmo.dmi'
+ doortype = 19
+
+/obj/machinery/door/airlock/research
+ name = "Research Airlock"
+ icon = 'doorsci.dmi'
+ doortype = 20
+
+/obj/machinery/door/airlock/glass/glass_research
+ name = "Research Airlock"
+ icon = 'doorsciglass.dmi'
+ opacity = 0
+ doortype = 21
+ glass = 1
+
+/obj/machinery/door/airlock/glass/glass_mining
+ name = "Maintenance Hatch"
+ icon = 'doorminingglass.dmi'
+ opacity = 0
+ doortype = 22
+ glass = 1
+
+/obj/machinery/door/airlock/glass/glass_atmos
+ name = "Maintenance Hatch"
+ icon = 'dooratmoglass.dmi'
+ opacity = 0
+ 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) // THESE PROBABLY DO SOMETHING IMPORTANT BUT I DON'T KNOW HOW TO FIX IT - Erthilo
+// 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:
@@ -876,262 +360,652 @@ About the new airlock wires panel:
* one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. (Currently it is also STAYING electrified until someone mends the wire)
*/
- pulse(var/wireColor)
- //var/wireFlag = airlockWireColorToFlag[wireColor] //not used in this function
- var/wireIndex = airlockWireColorToIndex[wireColor]
- switch(wireIndex)
- if(AIRLOCK_WIRE_IDSCAN)
- //Sending a pulse through this flashes the red light on the door (if the door has power).
- if ((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
- animate("deny")
- if (AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
- src.loseMainPower()
- if (AIRLOCK_WIRE_DOOR_BOLTS)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- else
- if(src.arePowerSystemsOn()) //only can raise bolts if power's on
- src.locked = 0
- usr << "You hear a click from inside the door."
- src.updateUsrDialog()
- update_icon()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
- src.loseBackupPower()
- if (AIRLOCK_WIRE_AI_CONTROL)
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateDialog()
- spawn(10)
- if (src.aiControlDisabled == 1)
- src.aiControlDisabled = 0
- else if (src.aiControlDisabled == 2)
- src.aiControlDisabled = -1
- src.updateDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
- if (src.secondsElectrified==0)
- src.secondsElectrified = 30
- spawn(10)
- //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
- while (src.secondsElectrified>0)
- src.secondsElectrified-=1
- if (src.secondsElectrified<0)
- src.secondsElectrified = 0
- // src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
- sleep(10)
- if(AIRLOCK_WIRE_OPEN_DOOR)
- //tries to open the door without ID
- //will succeed only if the ID wire is cut or the door requires no access
- if (!src.requiresID() || src.check_access(null))
- if (src.density)
- open()
- else
- close()
- if(AIRLOCK_WIRE_CRUSH)
- src.forcecrush = !src.forcecrush
- if(AIRLOCK_WIRE_LIGHT)
- src.safetylight = !src.safetylight
- if(AIRLOCK_WIRE_HOLDOPEN)
- src.holdopen = !src.holdopen
- cut(var/wireColor)
- var/wireFlag = airlockWireColorToFlag[wireColor]
- var/wireIndex = airlockWireColorToIndex[wireColor]
- wires &= ~wireFlag
- switch(wireIndex)
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
- src.loseMainPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_DOOR_BOLTS)
- //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
- if (src.locked!=1)
- src.locked = 1
- update_icon()
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
- src.loseBackupPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_AI_CONTROL)
- //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
- //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
- if (src.secondsElectrified != -1)
- src.secondsElectrified = -1
+/obj/machinery/door/airlock/bumpopen(mob/user as mob) //Airlocks now zap you when you 'bump' them open when they're electrified. --NeoFite
+ if(!istype(usr, /mob/living/silicon))
+ if(src.isElectrified())
+ if(!src.justzap)
+ if(src.shock(user, 100))
+ src.justzap = 1
+ spawn (10)
+ src.justzap = 0
+ return
+ else /*if(src.justzap)*/
+ return
+ else if(user.hallucination > 50 && prob(10) && src.operating == 0)
+ user << "\red You feel a powerful shock course through your body!"
+ user.halloss += 10
+ user.stunned += 10
+ return
+ ..(user)
- mend(var/wireColor)
- var/wireFlag = airlockWireColorToFlag[wireColor]
- var/wireIndex = airlockWireColorToIndex[wireColor] //not used in this function
- wires |= wireFlag
- switch(wireIndex)
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
- src.regainMainPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
- src.regainBackupPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_AI_CONTROL)
- //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
- //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
- if (src.aiControlDisabled == 1)
- src.aiControlDisabled = 0
- else if (src.aiControlDisabled == 2)
- src.aiControlDisabled = -1
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- if (src.secondsElectrified == -1)
- src.secondsElectrified = 0
- getAirlockWires()
- var/t1
- var/iterator = 0
- for(var/wiredesc in wire_index)
- if(iterator == wirenum)
- break
- var/is_uncut = src.wires & airlockWireColorToFlag[wire_index[wiredesc]]
- t1 += "[wiredesc] wire: "
- if(!is_uncut)
- t1 += "Mend"
- else
- t1 += "Cut "
- t1 += "Pulse "
- if(src.signalers[wire_index[wiredesc]])
- t1 += "Detach signaler"
- else
- t1 += "Attach signaler"
- t1 += "
"
- iterator++
- return t1
-
- isElectrified()
- return (src.secondsElectrified != 0);
-
- isWireColorCut(var/wireColor)
- var/wireFlag = airlockWireColorToFlag[wireColor]
- return ((src.wires & wireFlag) == 0)
-
- isWireCut(var/wireIndex)
- var/wireFlag = airlockIndexToFlag[wireIndex]
- return ((src.wires & wireFlag) == 0)
-
- arePowerSystemsOn()
- return (src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0)
-
- isAllPowerCut()
- return ((src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) || src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)) && (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) || src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
-
- regainMainPower()
- if (src.secondsMainPowerLost > 0)
- src.secondsMainPowerLost = 0
-
- loseMainPower()
- if (src.secondsMainPowerLost <= 0)
- src.secondsMainPowerLost = 60
- if (src.secondsBackupPowerLost < 10)
- src.secondsBackupPowerLost = 10
- if (!src.spawnPowerRestoreRunning)
- src.spawnPowerRestoreRunning = 1
- spawn(0)
- var/cont = 1
- while (cont)
- sleep(10)
- cont = 0
- if (src.secondsMainPowerLost>0)
- if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
- src.secondsMainPowerLost -= 1
- src.updateDialog()
- cont = 1
-
- if (src.secondsBackupPowerLost>0)
- if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
- src.secondsBackupPowerLost -= 1
- src.updateDialog()
- cont = 1
- src.spawnPowerRestoreRunning = 0
- src.updateDialog()
-
- loseBackupPower()
- if (src.secondsBackupPowerLost < 60)
- src.secondsBackupPowerLost = 60
-
- regainBackupPower()
- if (src.secondsBackupPowerLost > 0)
- src.secondsBackupPowerLost = 0
-
- // shock user with probability prb (if all connections & power are working)
- // returns 1 if shocked, 0 otherwise
- // The preceding comment was borrowed from the grille's shock script
- shock(mob/user, prb)
- if((stat & (NOPOWER)) || !src.arePowerSystemsOn()) // unpowered, no shock
- return 0
- if(!prob(prb))
- return 0 //you lucked out, no shock for you
- if(istype(usr.equipped(),/obj/item/weapon/shard))
- return 0
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(5, 1, src)
- s.start() //sparks always.
- if (electrocute_mob(user, get_area(src), src))
- return 1
+/obj/machinery/door/airlock/proc/pulse(var/wireColor)
+ //var/wireFlag = airlockWireColorToFlag[wireColor] //not used in this function
+ var/wireIndex = airlockWireColorToIndex[wireColor]
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_IDSCAN)
+ //Sending a pulse through this flashes the red light on the door (if the door has power).
+ if((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
+ animate("deny")
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
+ src.loseMainPower()
+ if(AIRLOCK_WIRE_DOOR_BOLTS)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if(!src.locked)
+ src.locked = 1
+ usr << "You hear a click from the bottom of the door."
+ src.updateUsrDialog()
else
- return 0
+ if(src.arePowerSystemsOn()) //only can raise bolts if power's on
+ src.locked = 0
+ usr << "You hear a click from inside the door."
+ src.updateUsrDialog()
+ update_icon()
- prison_open()
- src.locked = 0
- src.open()
- src.locked = 1
+ if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
+ src.loseBackupPower()
+ if(AIRLOCK_WIRE_AI_CONTROL)
+ if(src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if(src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateDialog()
+ spawn(10)
+ if(src.aiControlDisabled == 1)
+ src.aiControlDisabled = 0
+ else if(src.aiControlDisabled == 2)
+ src.aiControlDisabled = -1
+ src.updateDialog()
+ if(AIRLOCK_WIRE_ELECTRIFY)
+ //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
+ if(src.secondsElectrified==0)
+ src.secondsElectrified = 30
+ spawn(10)
+ //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
+ while (src.secondsElectrified>0)
+ src.secondsElectrified-=1
+ if(src.secondsElectrified<0)
+ src.secondsElectrified = 0
+// src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
+ sleep(10)
+ if(AIRLOCK_WIRE_OPEN_DOOR)
+ //tries to open the door without ID
+ //will succeed only if the ID wire is cut or the door requires no access
+ if(!src.requiresID() || src.check_access(null))
+ if(src.density)
+ open()
+ else
+ close()
+ if(AIRLOCK_WIRE_CRUSH)
+ src.forcecrush = !src.forcecrush
+ if(AIRLOCK_WIRE_LIGHT)
+ src.safetylight = !src.safetylight
+ if(AIRLOCK_WIRE_HOLDOPEN)
+ src.holdopen = !src.holdopen
+
+
+/obj/machinery/door/airlock/proc/cut(var/wireColor)
+ var/wireFlag = airlockWireColorToFlag[wireColor]
+ var/wireIndex = airlockWireColorToIndex[wireColor]
+ wires &= ~wireFlag
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
+ src.loseMainPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_DOOR_BOLTS)
+ //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
+ if(src.locked!=1)
+ src.locked = 1
+ update_icon()
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
+ src.loseBackupPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_AI_CONTROL)
+ //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+ //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if(src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if(src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_ELECTRIFY)
+ //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
+ if(src.secondsElectrified != -1)
+ src.secondsElectrified = -1
+
+
+/obj/machinery/door/airlock/proc/mend(var/wireColor)
+ var/wireFlag = airlockWireColorToFlag[wireColor]
+ var/wireIndex = airlockWireColorToIndex[wireColor] //not used in this function
+ wires |= wireFlag
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ if((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
+ src.regainMainPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ if((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
+ src.regainBackupPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_AI_CONTROL)
+ //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+ //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if(src.aiControlDisabled == 1)
+ src.aiControlDisabled = 0
+ else if(src.aiControlDisabled == 2)
+ src.aiControlDisabled = -1
+ src.updateUsrDialog()
+ if(AIRLOCK_WIRE_ELECTRIFY)
+ if(src.secondsElectrified == -1)
+ src.secondsElectrified = 0
+
+
+
+
+/obj/machinery/door/airlock/proc/isElectrified()
+ return (src.secondsElectrified != 0);
+
+/obj/machinery/door/airlock/proc/isWireColorCut(var/wireColor)
+ var/wireFlag = airlockWireColorToFlag[wireColor]
+ return ((src.wires & wireFlag) == 0)
+
+/obj/machinery/door/airlock/proc/isWireCut(var/wireIndex)
+ var/wireFlag = airlockIndexToFlag[wireIndex]
+ return ((src.wires & wireFlag) == 0)
+
+/obj/machinery/door/airlock/proc/canAIControl()
+ return ((src.aiControlDisabled!=1) && (!src.isAllPowerCut()));
+
+/obj/machinery/door/airlock/proc/canAIHack()
+ return ((src.aiControlDisabled==1) && (!hackProof) && (!src.isAllPowerCut()));
+
+
+/obj/machinery/door/airlock/proc/canSynControl()
+ return (src.synDoorHacked && (!src.isAllPowerCut()));
+
+
+/obj/machinery/door/airlock/proc/canSynHack(obj/item/device/hacktool/H)
+ return (in_range(src, usr) && get_dist(src, H) <= 1 && src.synDoorHacked==0 && !src.isAllPowerCut());
+
+/obj/machinery/door/airlock/proc/arePowerSystemsOn()
+ return (src.secondsMainPowerLost==0 || src.secondsBackupPowerLost==0)
+
+/obj/machinery/door/airlock/requiresID()
+ return !(src.isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner)
+
+/obj/machinery/door/airlock/proc/isAllPowerCut()
+ return ((src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) || src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)) && (src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) || src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
+
+/obj/machinery/door/airlock/proc/regainMainPower()
+ if(src.secondsMainPowerLost > 0)
+ src.secondsMainPowerLost = 0
+
+/obj/machinery/door/airlock/proc/loseMainPower()
+ if(src.secondsMainPowerLost <= 0)
+ src.secondsMainPowerLost = 60
+ if(src.secondsBackupPowerLost < 10)
+ src.secondsBackupPowerLost = 10
+ if(!src.spawnPowerRestoreRunning)
+ src.spawnPowerRestoreRunning = 1
+ spawn(0)
+ var/cont = 1
+ while (cont)
+ sleep(10)
+ cont = 0
+ if(src.secondsMainPowerLost>0)
+ if((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
+ src.secondsMainPowerLost -= 1
+ src.updateDialog()
+ cont = 1
+
+ if(src.secondsBackupPowerLost>0)
+ if((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
+ src.secondsBackupPowerLost -= 1
+ src.updateDialog()
+ cont = 1
+ src.spawnPowerRestoreRunning = 0
+ src.updateDialog()
+
+/obj/machinery/door/airlock/proc/loseBackupPower()
+ if(src.secondsBackupPowerLost < 60)
+ src.secondsBackupPowerLost = 60
+
+/obj/machinery/door/airlock/proc/regainBackupPower()
+ if(src.secondsBackupPowerLost > 0)
+ src.secondsBackupPowerLost = 0
+
+// shock user with probability prb (if all connections & power are working)
+// returns 1 if shocked, 0 otherwise
+// The preceding comment was borrowed from the grille's shock script
+/obj/machinery/door/airlock/proc/shock(mob/user, prb)
+ if((stat & (NOPOWER)) || !src.arePowerSystemsOn()) // unpowered, no shock
+ return 0
+ if(!prob(prb))
+ return 0 //you lucked out, no shock for you
+ if(istype(usr.equipped(),/obj/item/weapon/shard))
+ return 0
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(5, 1, src)
+ s.start() //sparks always.
+ if(electrocute_mob(user, get_area(src), src))
+ return 1
+ else
+ return 0
+
+/obj/machinery/door/airlock/proc/synhack(mob/user as mob, obj/item/device/hacktool/I)
+ if (src.synHacking==0)
+ var/multiplier = 1.5
+ if(istype(I, /obj/item/device/hacktool/engineer))
+ if(!src.locked)
+ user << "The door bolts are already up!"
+ return
+ multiplier -= 0.5
+ src.synHacking=1
+ I.in_use = 1
+ user << "You begin hacking..."
+ spawn(20*multiplier)
+ user << "Jacking in. Stay close to the airlock or you'll rip the cables out and we'll have to start over."
+ sleep(25*multiplier)
+ if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
+ user << "Hack cancelled, control already possible."
+ src.synHacking=0
+ I.in_use = 0
+ return
+ else if (!src.canSynHack(I))
+ user << "\red Connection lost. Stand still and stay near the airlock!"
+ src.synHacking=0
+ I.in_use = 0
+ return
+ user << "Connection established."
+ sleep(10*multiplier)
+ user << "Attempting to hack into airlock. This may take some time."
+ sleep(50*multiplier)
+
+ // Alerting the AIs
+ var/list/cameras = list()
+ for (var/obj/machinery/camera/C in src.loc.loc.contents) // getting all cameras in the area
+ cameras += C
+ var/alertoption = (prob(alert_probability) || istype(I, /obj/item/device/hacktool/engineer)) // Chance of warning AI, based on doortype's probability
+ if(alertoption)
+ if(prob(15)) //15% chance of sending the AI all the details (camera, area, warning)
+ alertoption = 3
+ else if (prob(18)) //18% chance of sending the AI just the area
+ alertoption = 2
+ for (var/mob/living/silicon/ai/aiPlayer in world)
+ if (aiPlayer.stat != 2)
+ switch(alertoption)
+ if(3) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc, cameras)
+ if(2) aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ if(1) aiPlayer.triggerUnmarkedAlarm("AirlockHacking")
+ for (var/mob/living/silicon/robot/robotPlayer in world)
+ if (robotPlayer.stat != 2)
+ switch(alertoption)
+ if(2,3) robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ if(1) robotPlayer.triggerUnmarkedAlarm("AirlockHacking")
+ // ...And done
+
+ if (!src.canSynHack(I))
+ user << "\red Hack aborted: landline connection lost. Stay closer to the airlock."
+ src.synHacking=0
+ I.in_use = 0
+ return
+ else if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
+ user << "Local override already in place, hack aborted."
+ src.synHacking=0
+ I.in_use = 0
+ return
+ user << "Upload access confirmed. Loading control program into airlock software."
+ sleep(35*multiplier)
+ if (!src.canSynHack(I))
+ user << "\red Hack aborted: cable connection lost. Do not move away from the airlock."
+ src.synHacking=0
+ I.in_use = 0
+ return
+ else if (src.canSynControl() && !istype(I, /obj/item/device/hacktool/engineer))
+ user << "Upload access aborted, local override already in place."
+ src.synHacking=0
+ I.in_use = 0
+ return
+ user << "Transfer complete. Forcing airlock to execute program."
+ sleep(25*multiplier)
+ //disable blocked control
+ if(istype(I, /obj/item/device/hacktool/engineer))
+ user << "Raising door bolts..."
+ src.synHacking = 0
+ src.locked = 0
+ I.in_use = 0
+ update_icon()
+ return
+ src.synDoorHacked = 1
+ user << "Bingo! We're in. Airlock control panel coming right up."
+ sleep(5)
+ //bring up airlock dialog
+ src.synHacking = 0
+ I.in_use = 0
+ src.attack_ai(user, I)
+
+/obj/machinery/door/airlock/proc/getAirlockWires()
+ var/t1
+ var/iterator = 0
+ for(var/wiredesc in wire_index)
+ if(iterator == wirenum)
+ break
+ var/is_uncut = src.wires & airlockWireColorToFlag[wire_index[wiredesc]]
+ t1 += "[wiredesc] wire: "
+ if(!is_uncut)
+ t1 += "Mend"
+ else
+ t1 += "Cut "
+ t1 += "Pulse "
+ if(src.signalers[wire_index[wiredesc]])
+ t1 += "Detach signaler"
+ else
+ t1 += "Attach signaler"
+ t1 += "
"
+ iterator++
+ return t1
+
+/obj/machinery/door/airlock/update_icon()
+ if(overlays) overlays = null
+ if(density)
+ if(locked && safetylight)
+ icon_state = "door_locked"
+ else
+ icon_state = "door_closed"
+ if(p_open || welded || air_locked)
+ overlays = list()
+ if(p_open)
+ overlays += image(icon, "panel_open")
+ if(welded)
+ overlays += image(icon, "welded")
+ if(air_locked)
+ overlays += image('Door1.dmi', "air")
+ else
+ icon_state = "door_open"
+
+ return
+
+/obj/machinery/door/airlock/animate(animation)
+ switch(animation)
+ if("opening")
+ if(overlays) overlays = null
+ if(p_open)
+ icon_state = "o_door_opening" //can not use flick due to BYOND bug updating overlays right before flicking
+ else
+ flick("door_opening", src)
+ if("closing")
+ if(overlays) overlays = null
+ if(p_open)
+ flick("o_door_closing", src)
+ else
+ flick("door_closing", src)
+ if("spark")
+ flick("door_spark", src)
+ if("deny")
+ flick("door_deny", src)
+ return
+
+//This has been converted to be called by either the AI or a mob with a hacktool, permitting either to directly operate the airlock
+/obj/machinery/door/airlock/attack_ai(mob/user as mob, obj/item/device/hacktool/C)
+ if(isAI(user))
+ if (!src.canAIControl())
+ if (src.canAIHack())
+ src.hack(user)
+ return
+ else if(user && !isrobot(user))
+ if(!C)
+ return
+ if(C.in_use)
+ user << "We are already hacking another airlock."
+ return
+ if (!src.canSynControl() && src.canSynHack(C))
+ src.synhack(user, C)
+ return
+ if(!src.canSynHack(C) && !synDoorHacked)
+ user << "The power is cut or something, I can't hack it!"
+ return
+ if(istype(C, /obj/item/device/hacktool/engineer))
+ return
+ else if(!isrobot(user))
+ world << "ERROR: Mob was null when calling attack_ai on [src.name] at [src.x],[src.y],[src.z]"
+ return
+
+
+ //Separate interface for the AI.
+ user.machine = src
+ var/t1 = text("Airlock Control
\n")
+ if(src.secondsMainPowerLost > 0)
+ if((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
+ t1 += text("Main power is offline for [] seconds.
\n", src.secondsMainPowerLost)
+ else
+ t1 += text("Main power is offline indefinitely.
\n")
+ else
+ t1 += text("Main power is online.")
+
+ if(src.secondsBackupPowerLost > 0)
+ if((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
+ t1 += text("Backup power is offline for [] seconds.
\n", src.secondsBackupPowerLost)
+ else
+ t1 += text("Backup power is offline indefinitely.
\n")
+ else if(src.secondsMainPowerLost > 0)
+ t1 += text("Backup power is online.")
+ else
+ t1 += text("Backup power is offline, but will turn on if main power fails.")
+ t1 += "
\n"
+
+ if(src.isWireCut(AIRLOCK_WIRE_IDSCAN))
+ t1 += text("IdScan wire is cut.
\n")
+ else if(src.aiDisabledIdScanner)
+ t1 += text("IdScan disabled. Enable?
\n", src)
+ else
+ t1 += text("IdScan enabled. Disable?
\n", src)
+
+ if(src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1))
+ t1 += text("Main Power Input wire is cut.
\n")
+ if(src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2))
+ t1 += text("Main Power Output wire is cut.
\n")
+ if(src.secondsMainPowerLost == 0)
+ t1 += text("Temporarily disrupt main power?.
\n", src)
+ if(src.secondsBackupPowerLost == 0)
+ t1 += text("Temporarily disrupt backup power?.
\n", src)
+
+ if(src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1))
+ t1 += text("Backup Power Input wire is cut.
\n")
+ if(src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2))
+ t1 += text("Backup Power Output wire is cut.
\n")
+
+ if(src.isWireCut(AIRLOCK_WIRE_CRUSH))
+ t1 += text("Airlock extra force wire is cut.
\n")
+ else if(!src.forcecrush)
+ t1 += text("Airlock extra force disabled Enable it?
\n")
+ else
+ t1 += text("Airlock extra force enabled Disable it?
\n")
+
+ if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
+ t1 += text("Door bolt drop wire is cut.
\n")
+ else if(!src.locked)
+ t1 += text("Door bolts are up. Drop them?
\n", src)
+ else
+ t1 += text("Door bolts are down.")
+ if(src.arePowerSystemsOn())
+ t1 += text(" Raise?
\n", src)
+ else
+ t1 += text(" Cannot raise door bolts due to power failure.
\n")
+ if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ t1 += text("Electrification wire is cut.
\n")
+ if(src.secondsElectrified==-1)
+ t1 += text("Door is electrified indefinitely. Un-electrify it?
\n", src)
+ else if(src.secondsElectrified>0)
+ t1 += text("Door is electrified temporarily ([] seconds). Un-electrify it?
\n", src.secondsElectrified, src)
+ else
+ t1 += text("Door is not electrified. Electrify it for 30 seconds? Or, Electrify it indefinitely until someone cancels the electrification?
\n", src, src)
+
+ if(src.isWireCut(AIRLOCK_WIRE_LIGHT))
+ t1 += "Bolt indication light wire is cut.
\n"
+ else if(!src.safetylight)
+ t1 += text("Bolt Indication light is disabled Enable it?
\n")
+ else
+ t1 += text("Bolt Indication light is enabled Disable it?
\n")
+
+ if(src.isWireCut(AIRLOCK_WIRE_HOLDOPEN))
+ t1 += "Behavior Control light wire is cut.
\n"
+ else if(!src.holdopen)
+ t1 += text("Door behavior is set to: Automatically close Toggle?
\n")
+ else
+ t1 += text("Door behavior is set to: Wait for clearance to close Toggle?
\n")
+
+
+
+
+ if(src.welded)
+ t1 += text("Door appears to have been welded shut.
\n")
+ else if(!src.locked)
+ if(src.density)
+ t1 += text("Open door
\n", src)
+ else
+ t1 += text("Close door
\n", src)
+
+ t1 += text("Close
\n", src)
+ user << browse(t1, "window=airlock")
+ onclose(user, "airlock")
+
+//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door, 8 engage engineer smasher, 9 enable bolt indicator, 10 wait for clearance
+//aiEnable - 1 idscan, 4 raise door bolts, 5 electrify door for 30 seconds, 6 electrify door indefinitely, 7 open door, 8 disable engineer smasher, 9 disable bolt indicator, 10 autoclose
+
+
+/obj/machinery/door/airlock/proc/hack(mob/user as mob)
+ if(src.aiHacking==0)
+ src.aiHacking=1
+ spawn(20)
+ //TODO: Make this take a minute
+ user << "Airlock AI control has been blocked. Beginning fault-detection."
+ sleep(50)
+ if(src.canAIControl())
+ user << "Alert cancelled. Airlock control has been restored without our assistance."
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack())
+ user << "We've lost our connection! Unable to hack airlock."
+ src.aiHacking=0
+ return
+ user << "Fault confirmed: airlock control wire disabled or cut."
+ sleep(20)
+ user << "Attempting to hack into airlock. This may take some time."
+ sleep(200)
+ if(src.canAIControl())
+ user << "Alert cancelled. Airlock control has been restored without our assistance."
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack())
+ user << "We've lost our connection! Unable to hack airlock."
+ src.aiHacking=0
+ return
+ user << "Upload access confirmed. Loading control program into airlock software."
+ sleep(170)
+ if(src.canAIControl())
+ user << "Alert cancelled. Airlock control has been restored without our assistance."
+ src.aiHacking=0
+ return
+ else if(!src.canAIHack())
+ user << "We've lost our connection! Unable to hack airlock."
+ src.aiHacking=0
+ return
+ user << "Transfer complete. Forcing airlock to execute program."
+ sleep(50)
+ //disable blocked control
+ src.aiControlDisabled = 2
+ user << "Receiving control information from airlock."
+ sleep(10)
+ //bring up airlock dialog
+ src.aiHacking = 0
+ src.attack_ai(user)
+
+
+/obj/machinery/door/airlock/attack_paw(mob/user as mob)
+ return src.attack_hand(user)
+
+/obj/machinery/door/airlock/attack_hand(mob/user as mob)
+ if(!istype(usr, /mob/living/silicon))
+ if(src.isElectrified())
+ if(src.shock(user, 100))
+ return
+
+ if(ishuman(user) && prob(40) && src.density)
+ var/mob/living/carbon/human/H = user
+ if(H.getBrainLoss() >= 60)
+ playsound(src.loc, 'bang.ogg', 25, 1)
+ if(!istype(H.head, /obj/item/clothing/head/helmet))
+ for(var/mob/M in viewers(src, null))
+ M << "\red [user] headbutts the airlock."
+ var/datum/organ/external/affecting = H.get_organ("head")
+ affecting.take_damage(10, 0)
+ H.Stun(8)
+ H.Weaken(5)
+ H.UpdateDamageIcon()
+ else
+ for(var/mob/M in viewers(src, null))
+ M << "\red [user] headbutts the airlock. Good thing they're wearing a helmet."
return
+ if(src.p_open)
+ user.machine = src
+ var/t1 = text("Access Panel
\n")
+
+ //t1 += text("[]: ", airlockFeatureNames[airlockWireColorToIndex[9]])
+ t1 += getAirlockWires()
+
+ t1 += text("
\n[]
\n[]
\n[]
\n[]
\n[]", (src.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((src.arePowerSystemsOn() && !(stat & NOPOWER)) ? "The test light is on." : "The test light is off!"), (src.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), (src.secondsElectrified!=0 ? "The safety light is flashing!" : "The safety light is on."), (src.forcecrush==0 ? "The hydraulics control light is a solid green." : "The hydraulics control light is flashing red."))
+
+ t1 += text("Close
\n", src)
+
+ user << browse(t1, "window=airlock")
+ onclose(user, "airlock")
+
+ else
+ ..(user)
+ return
/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0)
if(!nowindow)
..()
- if (usr.stat || usr.restrained() )
+ if(usr.stat || usr.restrained())
return
- if (href_list["close"])
+ if(href_list["close"])
usr << browse(null, "window=airlock")
- if (usr.machine==src)
+ if(usr.machine==src)
usr.machine = null
return
+
if(in_range(src, usr) && istype(src.loc, /turf) && p_open)
usr.machine = src
- if (href_list["wires"])
+ if(href_list["wires"])
var/t1 = text2num(href_list["wires"])
- if (!(istype(usr.equipped(), /obj/item/weapon/wirecutters) || istype(usr.equipped(),/obj/item/weapon/shard)))
+ if(!( istype(usr.equipped(), /obj/item/weapon/wirecutters) || istype(usr.equipped(),/obj/item/weapon/shard)))
usr << "You need wirecutters!"
return
- if (src.isWireColorCut(t1) && istype(usr.equipped(), /obj/item/weapon/wirecutters))
+ if(src.isWireColorCut(t1) && istype(usr.equipped(), /obj/item/weapon/wirecutters))
src.mend(t1)
else
src.cut(t1)
- else if (href_list["pulse"])
+ else if(href_list["pulse"])
var/t1 = text2num(href_list["pulse"])
- if (!istype(usr.equipped(), /obj/item/device/multitool))
+ if(!istype(usr.equipped(), /obj/item/device/multitool))
usr << "You need a multitool!"
return
- if (src.isWireColorCut(t1))
+ if(src.isWireColorCut(t1))
usr << "You can't pulse a cut wire."
return
else
@@ -1175,52 +1049,52 @@ About the new airlock wires panel:
if (href_list["aiDisable"])
var/code = text2num(href_list["aiDisable"])
switch (code)
- if (1)
+ if(1)
//disable idscan
- if (src.isWireCut(AIRLOCK_WIRE_IDSCAN))
+ if(src.isWireCut(AIRLOCK_WIRE_IDSCAN))
usr << "The IdScan wire has been cut - So, you can't disable it, but it is already disabled anyways."
- else if (src.aiDisabledIdScanner)
+ else if(src.aiDisabledIdScanner)
usr << "You've already disabled the IdScan feature."
else
src.aiDisabledIdScanner = 1
- if (2)
+ if(2)
//disrupt main power
- if (src.secondsMainPowerLost == 0)
+ if(src.secondsMainPowerLost == 0)
src.loseMainPower()
else
usr << "Main power is already offline."
- if (3)
+ if(3)
//disrupt backup power
- if (src.secondsBackupPowerLost == 0)
+ if(src.secondsBackupPowerLost == 0)
src.loseBackupPower()
else
usr << "Backup power is already offline."
- if (4)
+ if(4)
//drop door bolts
- if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
+ if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
usr << "You can't drop the door bolts - The door bolt dropping wire has been cut."
- else if (src.locked!=1)
+ else if(src.locked!=1)
src.locked = 1
update_icon()
- if (5)
+ if(5)
//un-electrify door
- if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
usr << text("Can't un-electrify the airlock - The electrification wire is cut.
\n")
- else if (src.secondsElectrified==-1)
+ else if(src.secondsElectrified==-1)
src.secondsElectrified = 0
- else if (src.secondsElectrified>0)
+ else if(src.secondsElectrified>0)
src.secondsElectrified = 0
- if (7)
+ if(7)
//close door
- if (src.welded)
+ if(src.welded)
usr << text("The airlock has been welded shut!
\n")
- else if (src.locked)
+ else if(src.locked)
usr << text("The door bolts are down!
\n")
- else if (!src.density)
+ else if(!src.density)
close()
else
usr << text("The airlock is already closed.
\n")
- if (8)
+ if(8)
if(!src.forcecrush)
usr << text("Door extra force not enabled!
\n")
else
@@ -1236,79 +1110,81 @@ About the new airlock wires panel:
else
src.holdopen = 0
- else if (href_list["aiEnable"])
+
+
+ else if(href_list["aiEnable"])
var/code = text2num(href_list["aiEnable"])
switch (code)
- if (1)
+ if(1)
//enable idscan
- if (src.isWireCut(AIRLOCK_WIRE_IDSCAN))
+ if(src.isWireCut(AIRLOCK_WIRE_IDSCAN))
usr << "You can't enable IdScan - The IdScan wire has been cut."
- else if (src.aiDisabledIdScanner)
+ else if(src.aiDisabledIdScanner)
src.aiDisabledIdScanner = 0
else
usr << "The IdScan feature is not disabled."
- if (4)
+ if(4)
//raise door bolts
- if (src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
+ if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS))
usr << text("The door bolt drop wire is cut - you can't raise the door bolts.
\n")
- else if (!src.locked)
+ else if(!src.locked)
usr << text("The door bolts are already up.
\n")
else
- if (src.arePowerSystemsOn())
+ if(src.arePowerSystemsOn())
src.locked = 0
update_icon()
else
usr << text("Cannot raise door bolts due to power failure.
\n")
- if (5)
+ if(5)
//electrify door for 30 seconds
- if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
usr << text("The electrification wire has been cut.
\n")
- else if (src.secondsElectrified==-1)
+ else if(src.secondsElectrified==-1)
usr << text("The door is already indefinitely electrified. You'd have to un-electrify it before you can re-electrify it with a non-forever duration.
\n")
- else if (src.secondsElectrified!=0)
+ else if(src.secondsElectrified!=0)
usr << text("The door is already electrified. You can't re-electrify it while it's already electrified.
\n")
else
src.secondsElectrified = 30
spawn(10)
while (src.secondsElectrified>0)
src.secondsElectrified-=1
- if (src.secondsElectrified<0)
+ if(src.secondsElectrified<0)
src.secondsElectrified = 0
src.updateUsrDialog()
sleep(10)
- if (6)
+ if(6)
//electrify door indefinitely
- if (src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
+ if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY))
usr << text("The electrification wire has been cut.
\n")
- else if (src.secondsElectrified==-1)
+ else if(src.secondsElectrified==-1)
usr << text("The door is already indefinitely electrified.
\n")
- else if (src.secondsElectrified!=0)
+ else if(src.secondsElectrified!=0)
usr << text("The door is already electrified. You can't re-electrify it while it's already electrified.
\n")
else
src.secondsElectrified = -1
- if (7)
+ if(7)
//open door
- if (src.welded)
+ if(src.welded)
usr << text("The airlock has been welded shut!
\n")
- else if (src.locked)
+ else if(src.locked)
usr << text("The door bolts are down!
\n")
- else if (src.density)
+ else if(src.density)
open()
// close()
else
usr << text("The airlock is already opened.
\n")
- if (8)
+ if(8)
if(src.forcecrush)
usr << text("Door extra force already enabled!
\n")
else
src.forcecrush = 1
- if (9)
+ if(9)
if(src.safetylight)
usr << text("Bolt indication light already enabled!
\n")
else
src.safetylight = 1
- if (10)
+ if(10)
if(src.holdopen)
usr << text("Door Behavior already set to: Automatically close
\n")
else
@@ -1323,7 +1199,220 @@ About the new airlock wires panel:
return attack_ai(usr)
return
+/obj/machinery/door/airlock/attackby(C as obj, mob/user as mob)
+ //world << text("airlock attackby src [] obj [] mob []", src, C, user)
+ if(!istype(usr, /mob/living/silicon))
+ if(src.isElectrified())
+ if(src.shock(user, 75))
+ return
+ if(istype(C, /obj/item/device/detective_scanner))
+ return
+ if(istype(C, /obj/item/taperoll/police))
+ return
+ src.add_fingerprint(user)
+ if((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
+ var/obj/item/weapon/weldingtool/W = C
+ if(W.remove_fuel(0,user))
+ if(!src.welded)
+ src.welded = 1
+ else
+ src.welded = null
+ src.update_icon()
+ return
+ else
+ return
+ else if(istype(C, /obj/item/weapon/screwdriver))
+ src.p_open = !( src.p_open )
+ src.update_icon()
+ else if(istype(C, /obj/item/weapon/wirecutters))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/device/multitool))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/device/hacktool))
+ return src.attack_ai(user, C)
+ else if(istype(C, /obj/item/device/assembly/signaler))
+ return src.attack_hand(user)
+ else if(istype(C, /obj/item/weapon/pai_cable)) // -- TLE
+ var/obj/item/weapon/pai_cable/cable = C
+ cable.plugin(src, user)
+ else if(istype(C, /obj/item/weapon/crowbar) || istype(C, /obj/item/weapon/twohanded/fireaxe) )
+ var/beingcrowbarred = null
+ if(istype(C, /obj/item/weapon/crowbar) )
+ beingcrowbarred = 1 //derp, Agouri
+ else
+ beingcrowbarred = 0
+ if( beingcrowbarred && (density && welded && !operating && src.p_open && (!src.arePowerSystemsOn() || stat & NOPOWER) && !src.locked) )
+ playsound(src.loc, 'Crowbar.ogg', 100, 1)
+ user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
+ if(do_after(user,40))
+ user << "\blue You removed the airlock electronics!"
+ switch(src.doortype)
+ if(0) new/obj/structure/door_assembly/door_assembly_0( src.loc )
+ if(1) new/obj/structure/door_assembly/door_assembly_com( src.loc )
+ if(2) new/obj/structure/door_assembly/door_assembly_sec( src.loc )
+ if(3) new/obj/structure/door_assembly/door_assembly_eng( src.loc )
+ 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_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 )
+ 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 )
+ if(19) new/obj/structure/door_assembly/door_assembly_atmo( src.loc )
+ if(20) new/obj/structure/door_assembly/door_assembly_research( src.loc )
+ 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 )
+ ae.conf_access = src.req_access
+ else
+ ae = electronics
+ electronics = null
+ ae.loc = src.loc
+
+ del(src)
+ return
+ else if(src.arePowerSystemsOn() && !(stat & NOPOWER))
+ user << "\blue The airlock's motors resist your efforts to pry it open."
+ else if(src.locked)
+ user << "\blue The airlock's bolts prevent it from being pried open."
+ if((src.density) && (!( src.welded ) && !( src.operating ) && ((!src.arePowerSystemsOn()) || (stat & NOPOWER)) && !( src.locked )))
+
+ if(beingcrowbarred == 0) //being fireaxe'd
+ var/obj/item/weapon/twohanded/fireaxe/F = C
+ if(F:wielded)
+ spawn( 0 )
+ src.operating = 1
+ animate("opening")
+
+ sleep(15)
+
+ layer = 2.7
+ src.density = 0
+ update_icon()
+
+ if(!istype(src, /obj/machinery/door/airlock/glass))
+ src.ul_SetOpacity(0)
+ src.operating = 0
+ return
+ user << "\red You need to be wielding the Fire axe to do that."
+ return
+ else
+ spawn( 0 )
+ src.operating = 1
+ animate("opening")
+
+ sleep(15)
+
+ layer = 2.7
+ src.density = 0
+ update_icon()
+
+ if(!istype(src, /obj/machinery/door/airlock/glass))
+ src.ul_SetOpacity(0)
+ src.operating = 0
+ return
+
+ else
+ if((!src.density) && (!( src.welded ) && !( src.operating ) && !( src.locked )))
+ if(beingcrowbarred == 0)
+ var/obj/item/weapon/twohanded/fireaxe/F = C
+ if(F:wielded)
+ spawn( 0 )
+ src.operating = 1
+ animate("closing")
+
+ layer = 3.1
+ src.density = 1
+ sleep(15)
+ update_icon()
+
+ if((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
+ src.ul_SetOpacity(1)
+ src.operating = 0
+ else
+ user << "\red You need to be wielding the Fire axe to do that."
+ else
+ spawn( 0 )
+ src.operating = 1
+ animate("closing")
+
+ layer = 3.1
+ src.density = 1
+ sleep(15)
+ update_icon()
+
+ if((src.visible) && (!istype(src, /obj/machinery/door/airlock/glass)))
+ src.ul_SetOpacity(1)
+ src.operating = 0
+
+ else
+ ..()
+ 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)
+ src.closeOther.close()
+ return ..()
+
+/obj/machinery/door/airlock/close()
+ if(src.welded || src.locked || (!src.arePowerSystemsOn()) || (stat & NOPOWER) || src.isWireCut(AIRLOCK_WIRE_OPEN_DOOR) || src.operating)
+ return
+ ..()
+ 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))
+ if(killthis)
+ killthis.ex_act(2)//Smashin windows
+ return
+
+/obj/machinery/door/airlock/New()
+ ..()
+ if(src.closeOtherId != null)
+ spawn (5)
+ for (var/obj/machinery/door/airlock/A in world)
+ if(A.closeOtherId == src.closeOtherId && A != src)
+ src.closeOther = A
+ break
+
+
+/obj/machinery/door/airlock/proc/prison_open()
+ src.locked = 0
+ src.open()
+ src.locked = 1
+ return
/obj/machinery/door/airlock/secure
@@ -1345,370 +1434,149 @@ About the new airlock wires panel:
removal_step = 0
-
- New()
- ..()
- //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else).
- var/flagIndex = 1
- for (var/flag=1, flag<65536, flag+=flag)
- var/valid = 0
- while (!valid)
- var/colorIndex = rand(1, 16)
- if (WireColorToFlag[colorIndex] == 0)
- valid = 1
- WireColorToFlag[colorIndex] = flag
- IndexToFlag[flagIndex] = flag
- IndexToWireColor[flagIndex] = colorIndex
- WireColorToIndex[colorIndex] = flagIndex
- flagIndex+=1
+/obj/machinery/door/airlock/secure/attackby(C as obj, mob/user as mob)
+ //world << text("airlock attackby src [] obj [] mob []", src, C, user)
+ if(istype(C, /obj/item/device/detective_scanner))
return
+ if(!src.is_detached && C)
+ if (!istype(usr, /mob/living/silicon))
+ if (src.isElectrified())
+ if(src.shock(user, 75))
+ return
+ if (istype(C, /obj/item/device/hacktool))
+ return src.attack_ai(user, C)
+ if(ismob(C))
+ return ..(C, user)
+ src.add_fingerprint(user)
+ switch(removal_step)
+ if(0)
+ if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
+ var/obj/item/weapon/weldingtool/W = C
+ if(W.remove_fuel(0,user))
+ if (!src.welded)
+ src.welded = 1
+ else
+ src.welded = null
+ src.update_icon()
+ return
+ else if (istype(C, /obj/item/weapon/wrench))
+ user << "You start to remove the bolts..."
+ if(do_after(user,30))
+ user << "Bolts removed"
+ src.removal_step = 1
+ if(1)
+ if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
+ var/obj/item/weapon/weldingtool/W = C
+ if(W.remove_fuel(0,user))
+ user << "You start to slice the armor..."
+ if(do_after(user,20))
+ user << "Armor sliced open"
+ src.removal_step = 2
+ return
+ else if (istype(C, /obj/item/weapon/wrench))
+ user << "You start wrench down the bolts..."
+ if(do_after(user,30))
+ user << "Bolts secured."
+ src.removal_step = 0
+ if(2)
+ if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
+ var/obj/item/weapon/weldingtool/W = C
+ if(W.remove_fuel(0,user))
+ user << "You start to fuse together the armor..."
+ if(do_after(user,20))
+ user << "Armor repaired"
+ src.removal_step = 1
+ return
+ else if (istype(C, /obj/item/weapon/wrench))
+ user << "You start to unfasten the armor from the circuits..."
+ if(do_after(user,40))
+ user << "Circuits exposed."
+ src.removal_step = 3
+ src.is_detached = 1
+ else
+ if (istype(C, /obj/item/weapon/wrench))
+ user << "You start to fix the armor plate..."
+ if(do_after(user,40))
+ user << "Armor plates are back in position."
+ src.is_detached = 0
+ src.removal_step = 2
+ else
+ return ..(C, user)
+
+/obj/machinery/door/airlock/secure/New()
+ ..()
+ //to make this not randomize the wires, just set index to 1 and increment it in the flag for loop (after doing everything else).
+ var/flagIndex = 1
+ for (var/flag=1, flag<65536, flag+=flag)
+ var/valid = 0
+ while (!valid)
+ var/colorIndex = rand(1, 16)
+ if (WireColorToFlag[colorIndex] == 0)
+ valid = 1
+ WireColorToFlag[colorIndex] = flag
+ IndexToFlag[flagIndex] = flag
+ IndexToWireColor[flagIndex] = colorIndex
+ WireColorToIndex[colorIndex] = flagIndex
+ flagIndex+=1
+ return
- isWireColorCut(var/wireColor)
- var/wireFlag = WireColorToFlag[wireColor]
- return ((src.wires & wireFlag) == 0)
+/obj/machinery/door/airlock/secure/isWireColorCut(var/wireColor)
+ var/wireFlag = WireColorToFlag[wireColor]
+ return ((src.wires & wireFlag) == 0)
- isWireCut(var/wireIndex)
- var/wireFlag = IndexToFlag[wireIndex]
- return ((src.wires & wireFlag) == 0)
+/obj/machinery/door/airlock/secure/isWireCut(var/wireIndex)
+ var/wireFlag = IndexToFlag[wireIndex]
+ return ((src.wires & wireFlag) == 0)
- pulse(var/wireColor)
- var/wireIndex = WireColorToIndex[wireColor]
- switch(wireIndex)
- if(AIRLOCK_WIRE_IDSCAN)
- //Sending a pulse through this flashes the red light on the door (if the door has power).
- if ((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
- animate("deny")
- if (AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
- src.loseMainPower()
- if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- else
- if(src.arePowerSystemsOn()) //only can raise bolts if power's on
- src.locked = 0
- usr << "You hear a click from inside the door."
- src.updateUsrDialog()
- update_icon()
-
- if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- update_icon()
-
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
- src.loseBackupPower()
- if (AIRLOCK_WIRE_AI_CONTROL)
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateDialog()
- spawn(10)
- if (src.aiControlDisabled == 1)
- src.aiControlDisabled = 0
- else if (src.aiControlDisabled == 2)
- src.aiControlDisabled = -1
- src.updateDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
- if (src.secondsElectrified==0)
- src.secondsElectrified = 30
- spawn(10)
- //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
- while (src.secondsElectrified>0)
- src.secondsElectrified-=1
- if (src.secondsElectrified<0)
- src.secondsElectrified = 0
- // src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
- sleep(10)
- if(AIRLOCK_WIRE_OPEN_DOOR)
- //tries to open the door without ID
- //will succeed only if the ID wire is cut or the door requires no access
- if (!src.requiresID() || src.check_access(null))
- if (src.density)
- open()
- else
- close()
- if(AIRLOCK_WIRE_CRUSH)
- src.forcecrush = !src.forcecrush
- if(AIRLOCK_WIRE_LIGHT)
- src.safetylight = !src.safetylight
- if(AIRLOCK_WIRE_HOLDOPEN)
- src.holdopen = !src.holdopen
- if(AIRLOCK_WIRE_ALERTAI)
- if(prob(alert_probability))
- for (var/mob/living/silicon/ai/aiPlayer in world)
- if (aiPlayer.stat != 2)
- aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- for (var/mob/living/silicon/robot/robotPlayer in world)
- if (robotPlayer.stat != 2)
- robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
-
- cut(var/wireColor)
- var/wireFlag = WireColorToFlag[wireColor]
- var/wireIndex = WireColorToIndex[wireColor]
- wires &= ~wireFlag
- switch(wireIndex)
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
- src.loseMainPower()
- src.shock(usr, 50)
+/obj/machinery/door/airlock/secure/pulse(var/wireColor)
+ var/wireIndex = WireColorToIndex[wireColor]
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_IDSCAN)
+ //Sending a pulse through this flashes the red light on the door (if the door has power).
+ if ((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
+ animate("deny")
+ if (AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
+ src.loseMainPower()
+ if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
src.updateUsrDialog()
- if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
- //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
- if (src.locked!=1)
- src.locked = 1
- update_icon()
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
+ else
+ if(src.arePowerSystemsOn()) //only can raise bolts if power's on
+ src.locked = 0
+ usr << "You hear a click from inside the door."
src.updateUsrDialog()
- update_icon()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
- src.loseBackupPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_AI_CONTROL)
- //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
- //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
- if (src.secondsElectrified != -1)
- src.secondsElectrified = -1
- if(AIRLOCK_WIRE_ALERTAI)
- if(prob(alert_probability))
- for (var/mob/living/silicon/ai/aiPlayer in world)
- if (aiPlayer.stat != 2)
- aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- for (var/mob/living/silicon/robot/robotPlayer in world)
- if (robotPlayer.stat != 2)
- robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ update_icon()
- mend(var/wireColor)
- var/wireFlag = WireColorToFlag[wireColor]
- var/wireIndex = WireColorToIndex[wireColor] //not used in this function
- wires |= wireFlag
- switch(wireIndex)
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
- src.regainMainPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
- src.regainBackupPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_AI_CONTROL)
- //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
- //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
+ src.updateUsrDialog()
+ update_icon()
+
+ if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
+ src.loseBackupPower()
+ if (AIRLOCK_WIRE_AI_CONTROL)
+ if (src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if (src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateDialog()
+ spawn(10)
if (src.aiControlDisabled == 1)
src.aiControlDisabled = 0
else if (src.aiControlDisabled == 2)
src.aiControlDisabled = -1
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- if (src.secondsElectrified == -1)
- src.secondsElectrified = 0
-
- getAirlockWires()
- var/t1
- var/iterator = 0
- for(var/wiredesc in wire_index)
- if(iterator == wirenum)
- break
- var/is_uncut = src.wires & WireColorToFlag[wire_index[wiredesc]]
- t1 += "[wiredesc] wire: "
- if(!is_uncut)
- t1 += "Mend"
- else
- t1 += "Cut "
- t1 += "Pulse "
- if(src.signalers[wire_index[wiredesc]])
- t1 += "Detach signaler"
- else
- t1 += "Attach signaler"
- t1 += "
"
- iterator++
- return t1
-
- attackby(C as obj, mob/user as mob)
- //world << text("airlock attackby src [] obj [] mob []", src, C, user)
- if(istype(C, /obj/item/device/detective_scanner))
- return
- if(!src.is_detached && C)
- if (!istype(usr, /mob/living/silicon))
- if (src.isElectrified())
- if(src.shock(user, 75))
- return
- if (istype(C, /obj/item/device/hacktool))
- return src.attack_ai(user, C)
- if(ismob(C))
- return ..(C, user)
- src.add_fingerprint(user)
- switch(removal_step)
- if(0)
- if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
- var/obj/item/weapon/weldingtool/W = C
- if(W.remove_fuel(0,user))
- if (!src.welded)
- src.welded = 1
- else
- src.welded = null
- src.update_icon()
- return
- else if (istype(C, /obj/item/weapon/wrench))
- user << "You start to remove the bolts..."
- if(do_after(user,30))
- user << "Bolts removed"
- src.removal_step = 1
- if(1)
- if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
- var/obj/item/weapon/weldingtool/W = C
- if(W.remove_fuel(0,user))
- user << "You start to slice the armor..."
- if(do_after(user,20))
- user << "Armor sliced open"
- src.removal_step = 2
- return
- else if (istype(C, /obj/item/weapon/wrench))
- user << "You start wrench down the bolts..."
- if(do_after(user,30))
- user << "Bolts secured."
- src.removal_step = 0
- if(2)
- if ((istype(C, /obj/item/weapon/weldingtool) && !( src.operating ) && src.density))
- var/obj/item/weapon/weldingtool/W = C
- if(W.remove_fuel(0,user))
- user << "You start to fuse together the armor..."
- if(do_after(user,20))
- user << "Armor repaired"
- src.removal_step = 1
- return
- else if (istype(C, /obj/item/weapon/wrench))
- user << "You start to unfasten the armor from the circuits..."
- if(do_after(user,40))
- user << "Circuits exposed."
- src.removal_step = 3
- src.is_detached = 1
- else
- if (istype(C, /obj/item/weapon/wrench))
- user << "You start to fix the armor plate..."
- if(do_after(user,40))
- user << "Armor plates are back in position."
- src.is_detached = 0
- src.removal_step = 2
- else
- return ..(C, user)
-
- centcom
- name = "CentCom Secure Airlock"
- desc = "I hope you have insulated gloves...."
- icon = 'Doorhatchele.dmi'
- var/list/mob/morons = list()
-
- pulse(var/wireColor)
- if(prob(25))
- usr.ex_act(rand(1,3))
- if (src.secondsElectrified==0)
- src.secondsElectrified = 10
- spawn(10)
- //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
- while (src.secondsElectrified>0)
- src.secondsElectrified-=1
- if (src.secondsElectrified<0)
- src.secondsElectrified = 0
-// src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
- sleep(10)
- var/wireIndex = WireColorToIndex[wireColor]
- switch(wireIndex)
- if(AIRLOCK_WIRE_IDSCAN)
- //Sending a pulse through this flashes the red light on the door (if the door has power).
- if ((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
- animate("deny")
- if (AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
- src.loseMainPower()
- if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- else
- if(src.arePowerSystemsOn()) //only can raise bolts if power's on
- src.locked = 0
- usr << "You hear a click from inside the door."
- src.updateUsrDialog()
- update_icon()
-
- if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- update_icon()
-
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
- src.loseBackupPower()
- if (AIRLOCK_WIRE_AI_CONTROL)
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateDialog()
- spawn(10)
- if (src.aiControlDisabled == 1)
- src.aiControlDisabled = 0
- else if (src.aiControlDisabled == 2)
- src.aiControlDisabled = -1
- src.updateDialog()
- if(AIRLOCK_WIRE_OPEN_DOOR)
- //tries to open the door without ID
- //will succeed only if the ID wire is cut or the door requires no access
- if (!src.requiresID() || src.check_access(null))
- if (src.density)
- open()
- else
- close()
- if(AIRLOCK_WIRE_CRUSH)
- src.forcecrush = !src.forcecrush
- if(AIRLOCK_WIRE_LIGHT)
- src.safetylight = !src.safetylight
- if(AIRLOCK_WIRE_HOLDOPEN)
- src.holdopen = !src.holdopen
- if(AIRLOCK_WIRE_ALERTAI)
- if(prob(alert_probability))
- for (var/mob/living/silicon/ai/aiPlayer in world)
- if (aiPlayer.stat != 2)
- aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- for (var/mob/living/silicon/robot/robotPlayer in world)
- if (robotPlayer.stat != 2)
- robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
-
- cut(var/wireColor)
- if(prob(25))
- usr.ex_act(rand(1,3))
+ src.updateDialog()
+ if (AIRLOCK_WIRE_ELECTRIFY)
+ //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds.
if (src.secondsElectrified==0)
src.secondsElectrified = 30
spawn(10)
@@ -1719,60 +1587,281 @@ About the new airlock wires panel:
src.secondsElectrified = 0
// src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
sleep(10)
- var/wireFlag = WireColorToFlag[wireColor]
- var/wireIndex = WireColorToIndex[wireColor]
- wires &= ~wireFlag
- switch(wireIndex)
- if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
- //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
- src.loseMainPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
- //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
- if (src.locked!=1)
- src.locked = 1
- update_icon()
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
- //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
- //raises them if they are down (only if power's on)
- if (!src.locked)
- src.locked = 1
- src.updateUsrDialog()
- update_icon()
- if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
- //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
- src.loseBackupPower()
- src.shock(usr, 50)
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_AI_CONTROL)
- //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
- //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
- if (src.aiControlDisabled == 0)
- src.aiControlDisabled = 1
- else if (src.aiControlDisabled == -1)
- src.aiControlDisabled = 2
- src.updateUsrDialog()
- if (AIRLOCK_WIRE_ELECTRIFY)
- //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
- if (src.secondsElectrified != -1)
- src.secondsElectrified = -1
- if(AIRLOCK_WIRE_ALERTAI)
- if(prob(alert_probability))
- for (var/mob/living/silicon/ai/aiPlayer in world)
- if (aiPlayer.stat != 2)
- aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- for (var/mob/living/silicon/robot/robotPlayer in world)
- if (robotPlayer.stat != 2)
- robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ if(AIRLOCK_WIRE_OPEN_DOOR)
+ //tries to open the door without ID
+ //will succeed only if the ID wire is cut or the door requires no access
+ if (!src.requiresID() || src.check_access(null))
+ if (src.density)
+ open()
+ else
+ close()
+ if(AIRLOCK_WIRE_CRUSH)
+ src.forcecrush = !src.forcecrush
+ if(AIRLOCK_WIRE_LIGHT)
+ src.safetylight = !src.safetylight
+ if(AIRLOCK_WIRE_HOLDOPEN)
+ src.holdopen = !src.holdopen
+ if(AIRLOCK_WIRE_ALERTAI)
+ if(prob(alert_probability))
+ for (var/mob/living/silicon/ai/aiPlayer in world)
+ if (aiPlayer.stat != 2)
+ aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ for (var/mob/living/silicon/robot/robotPlayer in world)
+ if (robotPlayer.stat != 2)
+ robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
- attack_ai(mob/user as mob, obj/item/device/hacktool/C)
- if(!(user in morons))
- user << "\red Do that again, and you will die horribly."
- if(prob(50))
- morons.Add(user)
+/obj/machinery/door/airlock/secure/cut(var/wireColor)
+ var/wireFlag = WireColorToFlag[wireColor]
+ var/wireIndex = WireColorToIndex[wireColor]
+ wires &= ~wireFlag
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
+ src.loseMainPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
+ //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
+ if (src.locked!=1)
+ src.locked = 1
+ update_icon()
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
+ src.updateUsrDialog()
+ update_icon()
+ if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
+ src.loseBackupPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_AI_CONTROL)
+ //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+ //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if (src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if (src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_ELECTRIFY)
+ //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
+ if (src.secondsElectrified != -1)
+ src.secondsElectrified = -1
+ if(AIRLOCK_WIRE_ALERTAI)
+ if(prob(alert_probability))
+ for (var/mob/living/silicon/ai/aiPlayer in world)
+ if (aiPlayer.stat != 2)
+ aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ for (var/mob/living/silicon/robot/robotPlayer in world)
+ if (robotPlayer.stat != 2)
+ robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+
+/obj/machinery/door/airlock/secure/mend(var/wireColor)
+ var/wireFlag = WireColorToFlag[wireColor]
+ var/wireIndex = WireColorToIndex[wireColor] //not used in this function
+ wires |= wireFlag
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ if ((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2)))
+ src.regainMainPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ if ((!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2)))
+ src.regainBackupPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_AI_CONTROL)
+ //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+ //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if (src.aiControlDisabled == 1)
+ src.aiControlDisabled = 0
+ else if (src.aiControlDisabled == 2)
+ src.aiControlDisabled = -1
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_ELECTRIFY)
+ if (src.secondsElectrified == -1)
+ src.secondsElectrified = 0
+
+/obj/machinery/door/airlock/secure/getAirlockWires()
+ var/t1
+ var/iterator = 0
+ for(var/wiredesc in wire_index)
+ if(iterator == wirenum)
+ break
+ var/is_uncut = src.wires & WireColorToFlag[wire_index[wiredesc]]
+ t1 += "[wiredesc] wire: "
+ if(!is_uncut)
+ t1 += "Mend"
+ else
+ t1 += "Cut "
+ t1 += "Pulse "
+ if(src.signalers[wire_index[wiredesc]])
+ t1 += "Detach signaler"
else
- user << "\red You were warned..."
- world << "\red [user.name] has been found attempting to hack a CentCom Secure Door via AI/Hacktool. Better luck next time."
- user.ex_act(1)
\ No newline at end of file
+ t1 += "Attach signaler"
+ t1 += "
"
+ iterator++
+ return t1
+
+
+/obj/machinery/door/airlock/secure/centcom
+ name = "CentCom Secure Airlock"
+ desc = "I hope you have insulated gloves...."
+ icon = 'Doorhatchele.dmi'
+ var/list/mob/morons = list()
+
+/obj/machinery/door/airlock/secure/centcom/pulse(var/wireColor)
+ if(prob(25))
+ usr.ex_act(rand(1,3))
+ if (src.secondsElectrified==0)
+ src.secondsElectrified = 10
+ spawn(10)
+ //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
+ while (src.secondsElectrified>0)
+ src.secondsElectrified-=1
+ if (src.secondsElectrified<0)
+ src.secondsElectrified = 0
+// src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
+ sleep(10)
+ var/wireIndex = WireColorToIndex[wireColor]
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_IDSCAN)
+ //Sending a pulse through this flashes the red light on the door (if the door has power).
+ if ((src.arePowerSystemsOn()) && (!(stat & NOPOWER)))
+ animate("deny")
+ if (AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
+ src.loseMainPower()
+ if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
+ src.updateUsrDialog()
+ else
+ if(src.arePowerSystemsOn()) //only can raise bolts if power's on
+ src.locked = 0
+ usr << "You hear a click from inside the door."
+ src.updateUsrDialog()
+ update_icon()
+
+ if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
+ src.updateUsrDialog()
+ update_icon()
+
+ if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
+ src.loseBackupPower()
+ if (AIRLOCK_WIRE_AI_CONTROL)
+ if (src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if (src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateDialog()
+ spawn(10)
+ if (src.aiControlDisabled == 1)
+ src.aiControlDisabled = 0
+ else if (src.aiControlDisabled == 2)
+ src.aiControlDisabled = -1
+ src.updateDialog()
+ if(AIRLOCK_WIRE_OPEN_DOOR)
+ //tries to open the door without ID
+ //will succeed only if the ID wire is cut or the door requires no access
+ if (!src.requiresID() || src.check_access(null))
+ if (src.density)
+ open()
+ else
+ close()
+ if(AIRLOCK_WIRE_CRUSH)
+ src.forcecrush = !src.forcecrush
+ if(AIRLOCK_WIRE_LIGHT)
+ src.safetylight = !src.safetylight
+ if(AIRLOCK_WIRE_HOLDOPEN)
+ src.holdopen = !src.holdopen
+ if(AIRLOCK_WIRE_ALERTAI)
+ if(prob(alert_probability))
+ for (var/mob/living/silicon/ai/aiPlayer in world)
+ if (aiPlayer.stat != 2)
+ aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ for (var/mob/living/silicon/robot/robotPlayer in world)
+ if (robotPlayer.stat != 2)
+ robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+
+/obj/machinery/door/airlock/secure/centcom/cut(var/wireColor)
+ if(prob(25))
+ usr.ex_act(rand(1,3))
+ if (src.secondsElectrified==0)
+ src.secondsElectrified = 30
+ spawn(10)
+ //TODO: Move this into process() and make pulsing reset secondsElectrified to 30
+ while (src.secondsElectrified>0)
+ src.secondsElectrified-=1
+ if (src.secondsElectrified<0)
+ src.secondsElectrified = 0
+// src.updateUsrDialog() //Commented this line out to keep the airlock from clusterfucking you with electricity. --NeoFite
+ sleep(10)
+ var/wireFlag = WireColorToFlag[wireColor]
+ var/wireIndex = WireColorToIndex[wireColor]
+ wires &= ~wireFlag
+ switch(wireIndex)
+ if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2)
+ //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user.
+ src.loseMainPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_DOOR_BOLTS, AIRLOCK_WIRE_DOOR_BOLTS_2)
+ //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present)
+ if (src.locked!=1)
+ src.locked = 1
+ update_icon()
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_FAKEBOLT1, AIRLOCK_WIRE_FAKEBOLT2)
+ //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not),
+ //raises them if they are down (only if power's on)
+ if (!src.locked)
+ src.locked = 1
+ src.updateUsrDialog()
+ update_icon()
+ if (AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2)
+ //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user.
+ src.loseBackupPower()
+ src.shock(usr, 50)
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_AI_CONTROL)
+ //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all.
+ //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in.
+ if (src.aiControlDisabled == 0)
+ src.aiControlDisabled = 1
+ else if (src.aiControlDisabled == -1)
+ src.aiControlDisabled = 2
+ src.updateUsrDialog()
+ if (AIRLOCK_WIRE_ELECTRIFY)
+ //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted.
+ if (src.secondsElectrified != -1)
+ src.secondsElectrified = -1
+ if(AIRLOCK_WIRE_ALERTAI)
+ if(prob(alert_probability))
+ for (var/mob/living/silicon/ai/aiPlayer in world)
+ if (aiPlayer.stat != 2)
+ aiPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+ for (var/mob/living/silicon/robot/robotPlayer in world)
+ if (robotPlayer.stat != 2)
+ robotPlayer.triggerUnmarkedAlarm("AirlockHacking", src.loc.loc)
+
+/obj/machinery/door/airlock/secure/centcom/attack_ai(mob/user as mob, obj/item/device/hacktool/C)
+ if(!(user in morons))
+ user << "\red Do that again, and you will die horribly."
+ if(prob(50))
+ morons.Add(user)
+ else
+ user << "\red You were warned..."
+ world << "\red [user.name] has been found attempting to hack a CentCom Secure Door via AI/Hacktool. Better luck next time."
+ user.ex_act(1)
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 840cec57eef..f51bc32fd50 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/obj/machinery/door
name = "Door"
@@ -153,7 +153,7 @@
if(4) temp=new/obj/structure/door_assembly/door_assembly_med(src.loc)
if(5) temp=new/obj/structure/door_assembly/door_assembly_mai(src.loc)
if(6) temp=new/obj/structure/door_assembly/door_assembly_ext(src.loc)
- if(7) temp=new/obj/structure/door_assembly/door_assembly_g(src.loc)
+ if(7) temp=new/obj/structure/door_assembly/door_assembly_glass(src.loc)
else failsafe=1
if(!failsafe)
temp.anchored=0
@@ -249,6 +249,7 @@
if(!src.operating) //in case of emag
src.operating = 1
animate("opening")
+ icon_state = "door0"
src.ul_SetOpacity(0)
sleep(10)
src.layer = 2.7
diff --git a/code/game/machinery/flasher.dm b/code/game/machinery/flasher.dm
index 86fd9a7cf90..81c585a445b 100644
--- a/code/game/machinery/flasher.dm
+++ b/code/game/machinery/flasher.dm
@@ -24,13 +24,13 @@
/obj/machinery/flasher/New()
sleep(4)
- src.ul_SetLuminosity(2)
+ ul_SetLuminosity(0,2,0)
/obj/machinery/flasher/power_change()
if ( powered() )
stat &= ~NOPOWER
icon_state = "[base_state]1"
- src.ul_SetLuminosity(2)
+ src.ul_SetLuminosity(0,2,0)
else
stat |= ~NOPOWER
icon_state = "[base_state]1-p"
diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm
index 2f85c5db954..7c45c65b4fb 100644
--- a/code/game/machinery/hologram.dm
+++ b/code/game/machinery/hologram.dm
@@ -72,7 +72,7 @@ For the other part of the code, check silicon say.dm. Particularly robot talk.*/
hologram.icon = A.holo_icon
hologram.mouse_opacity = 0//So you can't click on it.
hologram.layer = FLY_LAYER//Above all the other objects/mobs. Or the vast majority of them.
- hologram.ul_SetLuminosity(1)//To make it glowy.
+ hologram.ul_SetLuminosity(0,0,2)//To make it glowy.
hologram.anchored = 1//So space wind cannot drag it.
hologram.name = "AI hologram"//If someone decides to right click.
ul_SetLuminosity(0,0,1)//To make the pad glowy.
diff --git a/code/game/machinery/hydroponics.dm b/code/game/machinery/hydroponics.dm
index 534c501d1bf..592779ebd87 100644
--- a/code/game/machinery/hydroponics.dm
+++ b/code/game/machinery/hydroponics.dm
@@ -741,6 +741,14 @@ obj/machinery/hydroponics/attackby(var/obj/item/O as obj, var/mob/user as mob)
playsound(src.loc, 'spray3.ogg', 50, 1, -6)
del(O)
src.updateicon()
+ else if(istype(O, /obj/item/weapon/wrench))
+ playsound(loc, 'Ratchet.ogg', 50, 1)
+ anchored = !anchored
+ user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
+ else if(istype(O, /obj/item/weapon/shovel))
+ if(istype(src, /obj/machinery/hydroponics/soil))
+ user << "You clear up the [src]!"
+ del(src)
return
diff --git a/code/game/machinery/igniter.dm b/code/game/machinery/igniter.dm
index 35f94eff582..2f1cb2c338b 100755
--- a/code/game/machinery/igniter.dm
+++ b/code/game/machinery/igniter.dm
@@ -53,11 +53,11 @@
if ( powered() && disable == 0 )
stat &= ~NOPOWER
icon_state = "[base_state]"
- src.ul_SetLuminosity(2)
+ ul_SetLuminosity(2,0,0)
else
stat |= ~NOPOWER
icon_state = "[base_state]-p"
- src.ul_SetLuminosity(0)
+ ul_SetLuminosity(0)
/obj/machinery/sparker/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/detective_scanner))
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 3174443256d..fd2696e27e8 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
@@ -197,7 +206,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
@@ -244,6 +253,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)
@@ -327,7 +346,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
@@ -401,7 +424,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)
@@ -417,7 +440,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))
@@ -429,6 +452,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
@@ -476,99 +515,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/recharger.dm b/code/game/machinery/recharger.dm
index 6b1705eec2a..7d1d6a7dd7a 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -1,94 +1,85 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
obj/machinery/recharger
- anchored = 1
+ name = "recharger"
icon = 'stationobjs.dmi'
icon_state = "recharger0"
- name = "recharger"
+ anchored = 1
use_power = 1
idle_power_usage = 4
active_power_usage = 250
+ var/obj/item/weapon/charging = null
- var/obj/item/weapon/gun/energy/charging = null
- var/obj/item/weapon/melee/baton/charging2 = null
+obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob)
+ if(issilicon(user))
+ return
- attackby(obj/item/weapon/G as obj, mob/user as mob)
- if(issilicon(user))
+ if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton))
+ if(charging)
return
-
- if (istype(G, /obj/item/weapon/gun/energy))
- if (src.charging || src.charging2)
- return
- if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
- user << "Your gun's recharge port was removed to make room for a miniaturized reactor."
- return
- if (istype(G, /obj/item/weapon/gun/energy/staff))
- user << "It's a wooden staff, not a gun!"
- return
- var/area/a = loc.loc // Gets our locations location, like a dream within a dream
- if(!isarea(a))
- return
- if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
- user << "\red \The [src] blinks red as you try to insert the item!"
- return
- user.drop_item()
- G.loc = src
- src.charging = G
- use_power = 2
- else if (istype(G, /obj/item/weapon/melee/baton))
- if (src.charging || src.charging2)
- return
- user.drop_item()
- G.loc = src
- src.charging2 = G
- use_power = 2
- else if(istype(G, /obj/item/weapon/wrench))
- if (src.charging || src.charging2)
- user << "\red Remove the weapon first!"
- return
- anchored = !anchored
- user << "You [anchored ? "attach" : "detach"] the recharger [anchored ? "to" : "from"] the ground"
- playsound(src.loc, 'Ratchet.ogg', 75, 1)
-
- attack_hand(mob/user as mob)
- src.add_fingerprint(user)
- if(ishuman(user))
- if(istype(user:gloves, /obj/item/clothing/gloves/space_ninja)&&user:gloves:candrain&&!user:gloves:draining)
- call(/obj/item/clothing/gloves/space_ninja/proc/drain)("MACHINERY",src,user:wear_suit)
- return
-
- if (src.charging)
- src.charging.update_icon()
- src.charging.loc = src.loc
- src.charging = null
- use_power = 1
- if(src.charging2)
- src.charging2.update_icon()
- src.charging2.loc = src.loc
- src.charging2 = null
- use_power = 1
-
- attack_paw(mob/user as mob)
- if ((ticker && ticker.mode.name == "monkey"))
- return src.attack_hand(user)
-
- process()
- if(stat & (NOPOWER|BROKEN) || !anchored)
+ var/area/a = get_area(src)
+ if(!isarea(a))
return
+ if(a.power_equip == 0) // There's no APC in this area, don't try to cheat power!
+ user << "\red The [name] blinks red as you try to insert the item!"
+ return
+ if (istype(G, /obj/item/weapon/gun/energy/gun/nuclear) || istype(G, /obj/item/weapon/gun/energy/crossbow))
+ user << "Your gun's recharge port was removed to make room for a miniaturized reactor."
+ return
+ if (istype(G, /obj/item/weapon/gun/energy/staff))
+ return
+ user.drop_item()
+ G.loc = src
+ charging = G
+ use_power = 2
+ update_icon()
+ else if(istype(G, /obj/item/weapon/wrench))
+ if(charging)
+ user << "\red Remove the weapon first!"
+ return
+ anchored = !anchored
+ user << "You [anchored ? "attached" : "detached"] the recharger."
+ playsound(loc, 'Ratchet.ogg', 75, 1)
- if (src.charging)
- if (src.charging.power_supply.charge < src.charging.power_supply.maxcharge)
- src.charging.power_supply.give(100)
- src.icon_state = "recharger1"
+obj/machinery/recharger/attack_hand(mob/user as mob)
+ add_fingerprint(user)
+
+ if(charging)
+ charging.update_icon()
+ charging.loc = loc
+ charging = null
+ use_power = 1
+ update_icon()
+
+obj/machinery/recharger/attack_paw(mob/user as mob)
+ if((ticker && ticker.mode.name == "monkey"))
+ return attack_hand(user)
+
+obj/machinery/recharger/process()
+ if(stat & (NOPOWER|BROKEN) || !anchored)
+ return
+
+ if(charging)
+ if(istype(charging, /obj/item/weapon/gun/energy))
+ var/obj/item/weapon/gun/energy/E = charging
+ if(E.power_supply.charge < E.power_supply.maxcharge)
+ E.power_supply.give(100)
+ icon_state = "recharger1"
use_power(250)
else
- src.icon_state = "recharger2"
- else if (src.charging2)
- if (src.charging2.charges < src.charging2.maximum_charges)
- src.charging2.charges++
- src.icon_state = "recharger1"
- use_power(250)
+ icon_state = "recharger2"
+ return
+ if(istype(charging, /obj/item/weapon/melee/baton))
+ var/obj/item/weapon/melee/baton/B = charging
+ if(B.charges < initial(B.charges))
+ B.charges++
+ icon_state = "recharger1"
+ use_power(150)
else
- src.icon_state = "recharger2"
- else
- src.icon_state = "recharger0"
+ icon_state = "recharger2"
+
+obj/machinery/recharger/update_icon() //we have an update_icon() in addition to the stuff in process to make it feel a tiny bit snappier.
+ if(charging)
+ icon_state = "recharger1"
+ else
+ icon_state = "recharger0"
\ No newline at end of file
diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index d334b02f9f7..5e2632c83bd 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -427,7 +427,7 @@
if(A && B)
needs_power = 1
spawn(1)
- src.ul_SetLuminosity(3)
+ src.ul_SetLuminosity(0,0,4)
/* for(var/mob/M as mob in src.loc) //does not work for some reason.
if(istype(M,/mob/living/carbon))
diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 6785af80c38..2583c9db450 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -129,7 +129,7 @@
disp2 = "STATN"
else
disp1 = "SPPLY"
- disp2 = "DOCK"
+ disp2 = "AWAY"
update_display(disp1, disp2)
diff --git a/code/game/machinery/turrets.dm b/code/game/machinery/turrets.dm
index a7a2f0a19c6..c9bdcf7e29e 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 = 18
var/id = ""
var/obj/machinery/turretcover/cover = null
@@ -211,6 +213,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 539196c7888..7310ea43b00 100644
--- a/code/game/mecha/equipment/tools/tools.dm
+++ b/code/game/mecha/equipment/tools/tools.dm
@@ -919,7 +919,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 a24b4bad417..aa4e1d11580 100644
--- a/code/game/mecha/equipment/weapons/weapons.dm
+++ b/code/game/mecha/equipment/weapons/weapons.dm
@@ -325,6 +325,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.dm b/code/game/mecha/mecha.dm
index d1c9c000be0..c793fba9bb5 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -942,9 +942,9 @@
return
lights = !lights
if(lights)
- src.ul_SetLuminosity(src.luminosity + src.lights_power)
+ ul_SetLuminosity(luminosity + lights_power, luminosity + lights_power, luminosity)
else
- src.ul_SetLuminosity(src.luminosity - src.lights_power)
+ ul_SetLuminosity(luminosity - lights_power, luminosity - lights_power, luminosity)
src.log_message("Toggled lights.")
return
diff --git a/code/game/mecha/mecha_construction_paths.dm b/code/game/mecha/mecha_construction_paths.dm
index 1b574e9dd2b..95daeab0932 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 dd91a9a57db..29dc0eef7f2 100644
--- a/code/game/mecha/mecha_wreckage.dm
+++ b/code/game/mecha/mecha_wreckage.dm
@@ -31,11 +31,12 @@
/obj/effect/decal/mecha_wreckage/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W, /obj/item/weapon/weldingtool) && W:welding)
+ if(istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/WT = W
if(salvage_num <= 0)
user << "You don't see anything that can be cut with [W]."
return
- if (!isemptylist(welder_salvage) && W:remove_fuel(0,user))
+ if (!isemptylist(welder_salvage) && WT.remove_fuel(0,user))
var/type = prob(70)?pick(welder_salvage):null
if(type)
var/N = new type(get_turf(user))
@@ -94,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/blood.dm b/code/game/objects/blood.dm
index 389802bd9aa..9445346349c 100644
--- a/code/game/objects/blood.dm
+++ b/code/game/objects/blood.dm
@@ -63,7 +63,7 @@
New()
..()
- ul_SetLuminosity(1)
+ ul_SetLuminosity(0,3,0)
spawn(1200) // 2 minutes
del(src)
\ No newline at end of file
diff --git a/code/game/objects/devices/flashlight.dm b/code/game/objects/devices/flashlight.dm
index 503e624bfe3..33956b55d68 100644
--- a/code/game/objects/devices/flashlight.dm
+++ b/code/game/objects/devices/flashlight.dm
@@ -28,14 +28,14 @@
if(src.loc == user)
user.ul_SetLuminosity(user.LuminosityRed + brightness_on, user.LuminosityGreen + brightness_on, user.LuminosityBlue)
else if (isturf(src.loc))
- src.ul_SetLuminosity(brightness_on, brightness_on, 0)
+ ul_SetLuminosity(brightness_on, brightness_on, 0)
else
icon_state = icon_off
if(src.loc == user)
user.ul_SetLuminosity(user.LuminosityRed - brightness_on, user.LuminosityGreen - brightness_on, user.LuminosityBlue)
else if (isturf(src.loc))
- src.ul_SetLuminosity(0)
+ ul_SetLuminosity(0)
/obj/item/device/flashlight/attack_self(mob/user)
// if(!isturf(user.loc))
diff --git a/code/game/objects/devices/powersink.dm b/code/game/objects/devices/powersink.dm
index ea45398d5c9..2b0c32a0d15 100644
--- a/code/game/objects/devices/powersink.dm
+++ b/code/game/objects/devices/powersink.dm
@@ -94,7 +94,7 @@
var/datum/powernet/PN = attached.get_powernet()
if(PN)
if(!luminosity)
- ul_SetLuminosity(12)
+ ul_SetLuminosity(12,3,0)
// found a powernet, so drain up to max power from it
diff --git a/code/game/objects/door_assembly.dm b/code/game/objects/door_assembly.dm
index c3e67162baf..6435b15523a 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,22 +119,18 @@ 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/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
name = "Maintenance Airlock Assembly"
icon_state = "door_as_mai1"
- glass_type = null
airlock_type = /obj/machinery/door/airlock/maintenance
anchored = 1
density = 1
@@ -142,7 +140,6 @@ obj/structure/door_assembly
door_assembly_ext
name = "External Airlock Assembly"
icon_state = "door_as_ext1"
- glass_type = null
airlock_type = /obj/machinery/door/airlock/external
anchored = 1
density = 1
@@ -152,7 +149,6 @@ obj/structure/door_assembly
door_assembly_fre
name = "Freezer Airlock Assembly"
icon_state = "door_as_fre1"
- glass_type = null
airlock_type = /obj/machinery/door/airlock/freezer
anchored = 1
density = 1
@@ -162,21 +158,84 @@ obj/structure/door_assembly
door_assembly_mhatch
name = "Airtight Maintenance Hatch Assembly"
icon_state = "door_as_mhatch1"
- glass_type = null
airlock_type = /obj/machinery/door/airlock/maintenance_hatch
anchored = 1
density = 1
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 )
@@ -189,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."
@@ -284,19 +365,100 @@ obj/structure/door_assembly
ae = electronics
electronics = null
ae.loc = src.loc
+ 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/stack/sheet/rglass) && glass == 0 && ispath(glass_type))
- 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 = glass_type
else if(istype(W, /obj/item/weapon/screwdriver) && state == 2 )
playsound(src.loc, 'Screwdriver.ogg', 100, 1)
user << "\blue Now finishing the airlock."
@@ -305,10 +467,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
@@ -316,10 +501,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 a740c7d9d71..38918eb1725 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -536,6 +536,38 @@
istype(W,/obj/item/projectile)\
)
+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
+
/proc/is_cut(obj/item/W as obj)
return ( \
istype(W, /obj/item/weapon/wirecutters) || \
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index fe196918547..0d2cebe65c7 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -491,5 +491,5 @@ ZIPPO
dropped(mob/user)
if(lit)
user.ul_SetLuminosity(user.LuminosityRed - 2, user.LuminosityGreen - 1, user.LuminosityBlue)
- ul_SetLuminosity(2)
+ ul_SetLuminosity(2,1,0)
return
diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm
index 46ee8750c72..5a2a96667a8 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/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
new file mode 100644
index 00000000000..38fe3df3b40
--- /dev/null
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -0,0 +1,95 @@
+/obj/item/weapon/melee/baton
+ name = "stun baton"
+ desc = "A stun baton for incapacitating people with."
+ icon_state = "stunbaton"
+ item_state = "baton"
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
+ force = 10
+ throwforce = 7
+ w_class = 3
+ var/charges = 10
+ var/status = 0
+ origin_tech = "combat=2"
+
+/obj/item/weapon/melee/baton/update_icon()
+ if(status)
+ icon_state = "stunbaton_active"
+ else
+ icon_state = "stunbaton"
+
+/obj/item/weapon/melee/baton/attack_self(mob/user as mob)
+ if(status && (CLUMSY in user.mutations) && prob(50))
+ user << "\red You grab the [src] on the wrong side."
+ user.Weaken(30)
+ charges--
+ if(charges < 1)
+ status = 0
+ update_icon()
+ return
+ if(charges > 0)
+ status = !status
+ user << "\The [src] is now [status ? "on" : "off"]."
+ playsound(src.loc, "sparks", 75, 1, -1)
+ update_icon()
+ else
+ status = 0
+ user << "\The [src] is out of charge."
+ add_fingerprint(user)
+
+/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
+ if(status && (CLUMSY in user.mutations) && prob(50))
+ user << "You accidentally hit yourself with the [src]!"
+ user.Weaken(30)
+ charges--
+ if(charges < 1)
+ status = 0
+ update_icon()
+ return
+
+ var/mob/living/carbon/human/H = M
+
+ M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])")
+ user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])")
+
+ log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
+ message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
+ log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
+
+ if(isrobot(M))
+ ..()
+ return
+
+ if(user.a_intent != "help")
+ if(!..()) return
+ H.apply_effect(5, WEAKEN, 0)
+ H.visible_message("[M] has been beaten with the [src] by [user]!")
+ playsound(src.loc, "swing_hit", 50, 1, -1)
+ else if(!status)
+ H.visible_message("[M] has been prodded with the [src] by [user]. Luckily it was off.")
+ return
+
+ if(status)
+ H.apply_effect(10, STUN, 0)
+ H.apply_effect(10, WEAKEN, 0)
+ H.apply_effect(10, STUTTER, 0)
+ user.lastattacked = M
+ H.lastattacker = user
+ charges--
+ H.visible_message("[M] has been stunned with the [src] by [user]!")
+ playsound(src.loc, "sparks", 75, 1, -1)
+ if(charges < 1)
+ status = 0
+ update_icon()
+
+ add_fingerprint(user)
+
+/obj/item/weapon/melee/baton/emp_act(severity)
+ switch(severity)
+ if(1)
+ charges = 0
+ if(2)
+ charges = max(0, charges - 5)
+ if(charges < 1)
+ status = 0
+ update_icon()
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 89759fc9653..f6096afa797 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -594,7 +594,7 @@ CIRCULAR SAW
for(var/obj/item/weapon/implant/implant in S.implant)
implant.loc = (get_turf(H))
implant.implanted = 0
- S.implant = null
+ S.implant.Remove(implant)
playsound(user, 'squelch1.ogg', 50, 1)
if(istype(implant, /obj/item/weapon/implant/explosive) || istype(implant, /obj/item/weapon/implant/uplink) || istype(implant, /obj/item/weapon/implant/dexplosive) || istype(implant, /obj/item/weapon/implant/explosive) || istype(implant, /obj/item/weapon/implant/compressed))
usr << "The implant disintegrates into nothing..."
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 764522598ed..7722f7ea226 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -3,7 +3,7 @@ CONTAINS:
SWORD
BLADE
AXE
-STUN BATON
+CLASSIC BATON
ENERGY SHIELD (where else should i even put this)
*/
@@ -95,104 +95,6 @@ ENERGY SHIELD (where else should i even put this)
src.add_fingerprint(user)
return
-// STUN BATON
-
-/obj/item/weapon/melee/baton/update_icon()
- if(src.status)
- icon_state = "stunbaton_active"
- else
- icon_state = "stunbaton"
-
-/obj/item/weapon/melee/baton/attack_self(mob/user as mob)
- src.status = !( src.status )
- if ((CLUMSY in user.mutations) && prob(50))
- usr << "\red You grab the stunbaton on the wrong side."
- usr.Paralyse(60)
- return
- if (src.status)
- user << "\blue The baton is now on."
- playsound(src.loc, "sparks", 75, 1, -1)
- else
- user << "\blue The baton is now off."
- playsound(src.loc, "sparks", 75, 1, -1)
-
- update_icon()
- src.add_fingerprint(user)
- return
-
-/obj/item/weapon/melee/baton/attack(mob/M as mob, mob/user as mob)
- if ((CLUMSY in usr.mutations) && prob(50))
- usr << "\red You grab the stunbaton on the wrong side."
- usr.Weaken(30)
- return
- src.add_fingerprint(user)
- var/mob/living/carbon/human/H = M
-
- M.attack_log += text("\[[time_stamp()]\] Has been attacked with [src.name] by [user.name] ([user.ckey]) (INTENT: [uppertext(user.a_intent)])")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to attack [M.name] ([M.ckey]) (INTENT: [uppertext(user.a_intent)])")
-
- log_admin("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
- message_admins("ATTACK: [user] ([user.ckey]) attacked [M] ([M.ckey]) with [src].")
- log_attack("[user.name] ([user.ckey]) attacked [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])")
-
-
-
- if(isrobot(M))
- ..()
- return
-
- if (status == 0 || (status == 1 && charges ==0))
- if(user.a_intent == "hurt")
- if(!..()) return
- M.Weaken(5)
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\red [M] has been beaten with the stun baton by [user]!", 1)
- if(status == 1 && charges == 0)
- user << "\red Not enough charge"
- return
- else
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\red [M] has been prodded with the stun baton by [user]! Luckily it was off.", 1)
- if(status == 1 && charges == 0)
- user << "\red Not enough charge"
- return
- if((charges > 0 && status == 1) && (istype(H, /mob/living/carbon)))
- flick("baton_active", src)
- if (user.a_intent == "hurt")
- if(!..()) return
- playsound(src.loc, 'Genhit.ogg', 50, 1, -1)
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
- R.cell.charge -= 20
- else
- charges--
- if (M.stuttering < 1 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
- M.stuttering = 1
- M.Stun(1)
- M.Weaken(1)
- else
- playsound(src.loc, 'Egloves.ogg', 50, 1, -1)
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
- R.cell.charge -= 20
- else
- charges--
- if (M.stuttering < 10 && (!(HULK in M.mutations) && M.canstun) /*&& (!istype(H:wear_suit, /obj/item/clothing/suit/judgerobe))*/)
- M.stuttering = 10
- M.Stun(10)
- M.Weaken(10)
- user.lastattacked = M
- M.lastattacker = user
- for(var/mob/O in viewers(M))
- if (O.client) O.show_message("\red [M] has been stunned with the stun baton by [user]!", 1, "\red You hear someone fall", 2)
-
-/obj/item/weapon/melee/baton/emp_act(severity)
- switch(severity)
- if(1)
- src.charges = 0
- if(2)
- charges -= 5
-
/obj/item/weapon/melee/classic_baton/attack(mob/M as mob, mob/living/user as mob)
if ((CLUMSY in user.mutations) && prob(50))
user << "\red You club yourself over the head."
diff --git a/code/game/objects/mineral_doors.dm b/code/game/objects/mineral_doors.dm
index 43e2a64041f..5b0edaf2e73 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)
@@ -154,7 +158,7 @@
return 1
/obj/structure/mineral_door/iron
- mineralType = "iron"
+ mineralType = "metal"
hardness = 3
/obj/structure/mineral_door/silver
@@ -170,7 +174,7 @@
New()
..()
- ul_SetLuminosity(3)
+ ul_SetLuminosity(0,3,0)
/obj/structure/mineral_door/sandstone
mineralType = "sandstone"
@@ -205,7 +209,7 @@
var/toxinsToDeduce = temperature/10
napalm.toxins = toxinsToDeduce
- napalm.temperature = 400+T0C
+ napalm.temperature = 200+T0C
napalm.update_values()
target_tile.assume_air(napalm)
diff --git a/code/game/objects/sign_decals.dm b/code/game/objects/sign_decals.dm
index 77a3cb1217c..6df8acf3f46 100644
--- a/code/game/objects/sign_decals.dm
+++ b/code/game/objects/sign_decals.dm
@@ -7,7 +7,7 @@
return
proc/ChangeSign(var/Text)
src.icon_state = "[Text]"
- //ul_SetLuminosity(4)
+ ul_SetLuminosity(3,0,0)
return
/obj/effect/sign/securearea/ex_act(severity)
diff --git a/code/game/objects/stacks/metal.dm b/code/game/objects/stacks/metal.dm
index 43adb62632c..ae212a1e280 100644
--- a/code/game/objects/stacks/metal.dm
+++ b/code/game/objects/stacks/metal.dm
@@ -142,7 +142,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
return
/obj/item/stack/tile/plasteel/proc/build(turf/S as turf)
- S.ReplaceWithAirlessPlating()
+ S.ReplaceWithPlating()
// var/turf/simulated/floor/W = S.ReplaceWithFloor()
// W.make_plating()
return
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 9d7f29078aa..9c67fc58798 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,49 +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))
- if(!W)
- return
- 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)
- 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))
- if(!W)
+ 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
- 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))
- if(!W)
+
+ 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
- user << "\blue Girders reinforced!"
- W:use(1)
- new/obj/structure/girder/reinforced( src.loc )
- 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/pipe))
var/obj/item/pipe/P = W
if (P.pipe_type in list(0, 1, 5)) //simple pipes, simple bends, and simple manifolds.
@@ -266,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.ul_SetOpacity(0)
+ var/turf/T = src.loc
+ T.ul_Recalculate()
+
+ else
+ flick("[mineral]fwall_closing", src)
+ icon_state = "[mineral]0"
+ sleep(15)
+ src.density = 1
+ src.ul_SetOpacity(1)
+ var/turf/T = src.loc
+ //T.ul_LumUpdate()
+ src.relativewall()
+ T.ul_Recalculate()
+
+/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.ul_SetOpacity(0)
+ var/turf/T = src.loc
+ T.ul_Recalculate()
+
+ else
+ icon_state = "r_wall"
+ flick("frwall_closing", src)
+ sleep(15)
+ src.density = 1
+ src.ul_SetOpacity(1)
+ var/turf/T = src.loc
+ //T.ul_LumUpdate()
+ src.relativewall()
+ T.ul_Recalculate()
+
+
+ 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 e92b1ff8d8a..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.ul_SetOpacity(0)
- var/turf/T = src.loc
- T.ul_Recalculate()
-
- else
- icon_state = "wall"
- flick("fwall_closing", src)
- sleep(15)
- src.density = 1
- src.ul_SetOpacity(1)
- var/turf/T = src.loc
- //T.sd_LumUpdate()
- src.relativewall()
- T.ul_Recalculate()
-
-
- 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.ul_SetOpacity(0)
- var/turf/T = src.loc
- T.ul_Recalculate()
-
- else
- icon_state = "r_wall"
- flick("frwall_closing", src)
- sleep(15)
- src.density = 1
- src.ul_SetOpacity(1)
- var/turf/T = src.loc
- //T.sd_LumUpdate()
- src.relativewall()
- T.ul_Recalculate()
-
-
- 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 afc41385615..38b8c5ea470 100644
--- a/code/game/objects/watercloset.dm
+++ b/code/game/objects/watercloset.dm
@@ -4,28 +4,56 @@
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
- var/mob/swirlie = null
+ var/open = 0 //if the lid is up
+ var/cistern = 0 //if the cistern bit is open
+ var/w_items = 0 //the combined w_class of all the items in the cistern
+ var/mob/swirlie = null //the mob being given a swirlie
/obj/structure/toilet/New()
open = round(rand(0, 1))
update_icon()
-/obj/structure/toilet/attack_hand()
- if(!swirlie)
- open = !open
- update_icon()
- else
- usr.visible_message("[usr] slams the toilet seat onto [swirlie.name]'s head!", "You slam the toilet seat onto [swirlie.name]'s head!", "You hear reverberating porcelain.")
+/obj/structure/toilet/attack_hand(mob/user as mob)
+ if(swirlie)
+ usr.visible_message("[user] slams the toilet seat onto [swirlie.name]'s head!", "You slam the toilet seat onto [swirlie.name]'s head!", "You hear reverberating porcelain.")
swirlie.adjustBruteLoss(8)
+ return
+
+ if(cistern && !open)
+ if(!contents.len)
+ user << "The cistern is empty."
+ return
+ else
+ var/obj/item/I = pick(contents)
+ if(ishuman(user))
+ if(!user.get_active_hand())
+ I.loc = user.loc
+ user.put_in_hand(I)
+ else
+ I.loc = get_turf(src)
+ user << "You find \an [I] in the cistern."
+ w_items -= I.w_class
+ return
+
+ open = !open
+ update_icon()
/obj/structure/toilet/update_icon()
- icon_state = "toilet[open]"
+ icon_state = "toilet[open][cistern]"
+
+/obj/structure/toilet/attackby(obj/item/I as obj, mob/user as mob)
+ if(istype(I, /obj/item/weapon/crowbar))
+ user << "You start to [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]."
+ playsound(loc, 'stonedoor_openclose.ogg', 50, 1)
+ if(do_after(user, 30))
+ user.visible_message("[user] [cistern ? "replaces the lid on the cistern" : "lifts the lid off the cistern"]!", "You [cistern ? "replace the lid on the cistern" : "lift the lid off the cistern"]!", "You hear grinding porcelain.")
+ cistern = !cistern
+ update_icon()
+ return
-/obj/structure/toilet/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
var/mob/GM = G.affecting
@@ -45,6 +73,19 @@
else
user << "You need a tighter grip."
+ if(cistern)
+ if(I.w_class > 3)
+ user << "\The [I] does not fit."
+ return
+ if(w_items + I.w_class > 5)
+ user << "The cistern is full."
+ return
+ user.drop_item()
+ I.loc = src
+ w_items += I.w_class
+ user << "You carefully place \the [I] into the cistern."
+ return
+
/obj/structure/urinal
@@ -55,7 +96,7 @@
density = 0
anchored = 1
-/obj/structure/urinal/attackby(var/obj/item/I, var/mob/user)
+/obj/structure/urinal/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/grab))
var/obj/item/weapon/grab/G = I
var/mob/GM = G.affecting
@@ -97,7 +138,7 @@
wash(M)
check_heat(M)
-/obj/machinery/shower/attackby(var/obj/item/I, var/mob/user)
+/obj/machinery/shower/attackby(var/obj/item/I as obj, var/mob/user as mob)
if(I.type == /obj/item/device/analyzer)
user << "The water temperature seems to be [watertemp]."
if(istype(I, /obj/item/weapon/wrench))
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/supplyshuttle.dm b/code/game/supplyshuttle.dm
index ce3a54e9211..b303cd118b2 100644
--- a/code/game/supplyshuttle.dm
+++ b/code/game/supplyshuttle.dm
@@ -160,6 +160,7 @@ var/list/supply_groups = new()
/proc/supply_can_move()
if(supply_shuttle_moving) return 0
+//I know this is an absolutly horrendous way to do this, very inefficient, but it's the only reliable way I can think of.
//Check for carbon mobs - Allows simple animals.
for(var/mob/living/carbon/M in world)
var/area/A = get_area(M)
@@ -445,10 +446,10 @@ This method wont take into account storage items developed in the future and doe
dat = src.temp
else
dat += {"
Supply shuttle
- \nLocation: [supply_shuttle_moving ? "Moving to station ([supply_shuttle_timeleft] Mins.)":supply_shuttle_at_station ? "Station":"Dock"]
+ \nLocation: [supply_shuttle_moving ? "Moving to station ([supply_shuttle_timeleft] Mins.)":supply_shuttle_at_station ? "Station":"Away"]
\nSupply points: [supply_shuttle_points]
\n
- [supply_shuttle_moving ? "\n*Must be at dock to order items*
\n
":supply_shuttle_at_station ? "\n*Must be at dock to order items*
\n
":"\nOrder items
\n
"]
- [supply_shuttle_moving ? "\n*Shuttle already called*
\n
":supply_shuttle_at_station ? "\nSend to Dock
\n
":"\nSend to station
\n
"]
+ [supply_shuttle_moving ? "\n*Must be away to order items*
\n
":supply_shuttle_at_station ? "\n*Must be away to order items*
\n
":"\nOrder items
\n
"]
+ [supply_shuttle_moving ? "\n*Shuttle already called*
\n
":supply_shuttle_at_station ? "\nSend away
\n
":"\nSend to station
\n
"]
\nView requests
\n
\nView orders
\n
\nClose"}
@@ -506,6 +507,7 @@ This method wont take into account storage items developed in the future and doe
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.machine = src
+ //From Station to Centcomm
if (href_list["sendtodock"])
if(!supply_shuttle_at_station || supply_shuttle_moving) return
@@ -531,6 +533,7 @@ This method wont take into account storage items developed in the future and doe
send_supply_shuttle()
+ //From Centcomm to Station
else if (href_list["sendtostation"])
if(supply_shuttle_at_station || supply_shuttle_moving) return
@@ -669,9 +672,11 @@ This method wont take into account storage items developed in the future and doe
if (supply_shuttle_moving) return
- if (!supply_can_move())
- usr << "\red The supply shuttle can not transport station employees, exosuits, classified nuclear codes, or homing beacons."
- return
+ var/area/the_shuttles_way = locate(SUPPLY_STATION_AREATYPE)
+
+ //Do I really need to explain this loop?
+ for(var/mob/living/unlucky_person in the_shuttles_way)
+ unlucky_person.gib()
var/shuttleat = supply_shuttle_at_station ? SUPPLY_STATION_AREATYPE : SUPPLY_DOCK_AREATYPE
var/shuttleto = !supply_shuttle_at_station ? SUPPLY_STATION_AREATYPE : SUPPLY_DOCK_AREATYPE
diff --git a/code/game/turf.dm b/code/game/turf.dm
index ddf20041f44..370fb7d19dc 100644
--- a/code/game/turf.dm
+++ b/code/game/turf.dm
@@ -193,34 +193,27 @@
W.opacity = 1
W.ul_SetOpacity(0)
W.levelupdate()
- air_master.tiles_to_update |= W
- var/turf/simulated/north = get_step(W,NORTH)
- var/turf/simulated/south = get_step(W,SOUTH)
- var/turf/simulated/east = get_step(W,EAST)
- var/turf/simulated/west = get_step(W,WEST)
+ if(W && W.air)
+ var/new_ox = 0
+ var/new_n2 = 0
+ var/new_co2 = 0
+ var/new_tx = 0
+ for(var/direction in cardinal)
+ var/turf/T = get_step(src, direction)
+ if(istype(T))
+ var/datum/gas_mixture/G = T.return_air()
+ new_ox += G.oxygen
+ new_n2 += G.nitrogen
+ new_co2 += G.carbon_dioxide
+ new_tx += G.toxins
- if(istype(north)) air_master.tiles_to_update |= north
- if(istype(south)) air_master.tiles_to_update |= south
- if(istype(east)) air_master.tiles_to_update |= east
- if(istype(west)) air_master.tiles_to_update |= west
- return W
+ W.air.nitrogen = new_n2/4
+ W.air.oxygen = new_ox/4
+ W.air.carbon_dioxide = new_co2/4
+ W.air.toxins = new_tx/4
+ W.air.update_values()
-/turf/proc/ReplaceWithAirlessPlating()
- var/prior_icon = icon_old
- var/old_dir = dir
-
- for(var/obj/structure/lattice/L in locate(src.x, src.y, src.z))
- del(L)
- var/turf/simulated/floor/plating/airless/W = new /turf/simulated/floor/plating/airless( locate(src.x, src.y, src.z) )
-
- W.RemoveLattice()
- W.dir = old_dir
- if(prior_icon) W.icon_state = prior_icon
- else W.icon_state = "plating"
- W.opacity = 1
- W.ul_SetOpacity(0)
- W.levelupdate()
air_master.tiles_to_update |= W
var/turf/simulated/north = get_step(W,NORTH)
@@ -392,6 +385,28 @@
if(istype(west)) air_master.tiles_to_update |= west
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.ul_SetOpacity(1)
+ S.mineral = ore
+ S.New()//Hackish as fuck, but what can you do? -Sieve
+ levelupdate()
+ air_master.tiles_to_update |= S
+
+ var/turf/simulated/north = get_step(S,NORTH)
+ var/turf/simulated/south = get_step(S,SOUTH)
+ var/turf/simulated/east = get_step(S,EAST)
+ var/turf/simulated/west = get_step(S,WEST)
+
+ if(istype(north)) air_master.tiles_to_update |= north
+ if(istype(south)) air_master.tiles_to_update |= south
+ if(istype(east)) air_master.tiles_to_update |= east
+ if(istype(west)) air_master.tiles_to_update |= west
+ return S
+
//turf/simulated/wall/New()
// ..()
@@ -417,13 +432,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))
@@ -443,8 +527,7 @@
switch(severity)
if(1.0)
//SN src = null
- src.ReplaceWithSpace()
- del(src)
+ ReplaceWithSpace()
return
if(2.0)
if (prob(50))
@@ -568,6 +651,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 )
@@ -583,6 +668,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 )
@@ -600,6 +687,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 )
@@ -862,7 +951,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) // THESE PROBABLY DO SOMETHING IMPORTANT BUT I DON'T KNOW HOW TO FIX IT - Erthilo
+// 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."
@@ -1023,9 +1177,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()
..()
@@ -1044,14 +1202,14 @@ var/list/plating_icons = list("plating","platingdmg1","platingdmg2","platingdmg3
//set src in oview(1)
switch(severity)
if(1.0)
- src.ReplaceWithSpace()
+ ReplaceWithSpace()
if(2.0)
switch(pick(1,2;75,3))
if (1)
- src.ReplaceWithLattice()
+ ReplaceWithLattice()
if(prob(33)) new /obj/item/stack/sheet/metal(src)
if(2)
- src.ReplaceWithSpace()
+ ReplaceWithSpace()
if(3)
if(prob(80))
src.break_tile_to_plating()
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 130965ecefb..06e951b1323 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/device/assembly/infra
name = "Infrared Beam"
@@ -129,7 +129,7 @@
Topic(href, href_list)
..()
- if(get_dist(src, usr) > 1)
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=infra")
onclose(usr, "infra")
return
diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm
index b9853beb325..8c2ccb9f030 100644
--- a/code/modules/assembly/proximity.dm
+++ b/code/modules/assembly/proximity.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/device/assembly/prox_sensor
name = "proximity sensor"
@@ -100,7 +100,6 @@
M.c_state(0)
if(holder)
holder.update_icon()
-
return
@@ -127,7 +126,7 @@
Topic(href, href_list)
..()
- if(get_dist(src, usr) > 1)
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=prox")
onclose(usr, "prox")
return
diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm
index e8a9a8b6bfd..b6b65981952 100644
--- a/code/modules/assembly/signaler.dm
+++ b/code/modules/assembly/signaler.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/device/assembly/signaler
name = "Remote Signaling Device"
@@ -77,9 +77,9 @@
Topic(href, href_list)
..()
- if(get_dist(src, usr) > 1)
- usr << browse(null, "window=signal")
- onclose(usr, "signal")
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=radio")
+ onclose(usr, "radio")
return
if (href_list["freq"])
diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm
index 0b856c21795..24bafafa069 100644
--- a/code/modules/assembly/timer.dm
+++ b/code/modules/assembly/timer.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
/obj/item/device/assembly/timer
name = "timer"
@@ -93,7 +93,7 @@
Topic(href, href_list)
..()
- if(get_dist(src, usr) > 1)
+ if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=timer")
onclose(usr, "timer")
return
diff --git a/code/modules/chemical/Chemistry-Machinery.dm b/code/modules/chemical/Chemistry-Machinery.dm
index 5215e4635fd..be45c0fa5d9 100644
--- a/code/modules/chemical/Chemistry-Machinery.dm
+++ b/code/modules/chemical/Chemistry-Machinery.dm
@@ -9,6 +9,7 @@
icon = 'chemical.dmi'
icon_state = "dispenser"
use_power = 1
+ idle_power_usage = 40
var/energy = 25
var/max_energy = 75
var/amount = 30
@@ -168,6 +169,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
diff --git a/code/modules/chemical/Chemistry-Reagents.dm b/code/modules/chemical/Chemistry-Reagents.dm
index 3a035d74389..57ded7df769 100644
--- a/code/modules/chemical/Chemistry-Reagents.dm
+++ b/code/modules/chemical/Chemistry-Reagents.dm
@@ -860,7 +860,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)
// radium may increase your chances to cure a disease
if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
@@ -943,7 +943,7 @@ datum
if(isrobot(M) || isAI(M)) return // Mutagen doesn't do anything to robutts!
if(!M) M = holder.my_atom
if(prob(33))
- M.radiation += 1
+ M.apply_effect(10,IRRADIATE,0)
..()
return
@@ -1026,7 +1026,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/costume.dm b/code/modules/clothing/costume.dm
index dba2e92fbd7..bcec3e8bb5e 100644
--- a/code/modules/clothing/costume.dm
+++ b/code/modules/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/modules/clothing/gloves.dm b/code/modules/clothing/gloves.dm
index 658b3d7deb5..6795563f314 100644
--- a/code/modules/clothing/gloves.dm
+++ b/code/modules/clothing/gloves.dm
@@ -1,275 +1,275 @@
-// NO GLOVES NO LOVES
-
-/obj/item/clothing/gloves
- name = "gloves"
- gender = PLURAL //Carn: for grammarically correct text-parsing
- w_class = 2.0
- icon = 'gloves.dmi'
- protective_temperature = 400
- heat_transfer_coefficient = 0.25
- siemens_coefficient = 0.50
- var/siemens_coefficient_archived = 0
- var/wired = 0
- var/obj/item/weapon/cell/cell = 0
- body_parts_covered = HANDS
- slot_flags = SLOT_GLOVES
-
-
-/obj/item/clothing/gloves/boxing
- name = "boxing gloves"
- desc = "Because you really needed another excuse to punch your crewmates."
- icon_state = "boxing"
- item_state = "boxing"
-
-/obj/item/clothing/gloves/boxing/green
- icon_state = "boxinggreen"
- item_state = "boxinggreen"
-
-/obj/item/clothing/gloves/boxing/blue
- icon_state = "boxingblue"
- item_state = "boxingblue"
-
-/obj/item/clothing/gloves/boxing/yellow
- icon_state = "boxingyellow"
- item_state = "boxingyellow"
-
-/obj/item/clothing/gloves/white
- name = "white gloves"
- desc = "These look pretty fancy."
- icon_state = "latex"
- item_state = "lgloves"
- color="mime"
-
- redcoat
- color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
-
-/obj/item/clothing/gloves/black
- desc = "These gloves are fire-resistant."
- name = "black gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- protective_temperature = 1500
- heat_transfer_coefficient = 0.01
-
- hos
- color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
-
- ce
- color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
-
-/obj/item/clothing/gloves/detective
- desc = "Made of well worn leather. These gloves are comfortable, useful, and stylish!"
- name = "detective's gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/hos
- desc = "These gloves belong to the man in charge of the guns."
- name = "head of security's gloves"
- icon_state = "black"
- item_state = "bgloves"
- color="brown"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/cyborg
- desc = "Beep. Boop. Beep."
- name = "cyborg gloves"
- icon_state = "black"
- item_state = "r_hands"
- siemens_coefficient = 1.0
-
-/obj/item/clothing/gloves/latex
- name = "latex gloves"
- desc = "Sterile latex gloves."
- icon_state = "latex"
- item_state = "lgloves"
- siemens_coefficient = 0.30
- permeability_coefficient = 0.01
- protective_temperature = 310
- heat_transfer_coefficient = 0.90
- color="white"
-
- cmo
- color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
-
-/obj/item/clothing/gloves/swat
- desc = "These tactical gloves are somewhat fire and impact-resistant."
- name = "\improper SWAT gloves"
- icon_state = "black"
- item_state = "swat_gl"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1100
- heat_transfer_coefficient = 0.01
-
-/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
- desc = "These tactical gloves are somewhat fire and impact resistant."
- name = "combat gloves"
- icon_state = "black"
- item_state = "swat_gl"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1100
- heat_transfer_coefficient = 0.01
-
-/obj/item/clothing/gloves/space_ninja
- desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
- name = "ninja gloves"
- icon_state = "s-ninja"
- item_state = "s-ninja"
- siemens_coefficient = 0
- protective_temperature = 1100
- heat_transfer_coefficient = 0.05
- var/draining = 0
- var/candrain = 0
- var/mindrain = 200
- var/maxdrain = 400
-
-//BEEP BEEP IT'S THE COMMENT BRIGADE -Pete (gloves overhaul)
-/*
-/obj/item/clothing/gloves/stungloves/
- name = "Stungloves"
- desc = "These gloves are electrically charged."
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 0.30
- elecgen = 1
- uses = 10
-*/
-
-/obj/item/clothing/gloves/yellow
- desc = "These gloves will protect the wearer from electric shock."
- name = "insulated gloves"
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 0
- permeability_coefficient = 0.05
- protective_temperature = 1000
- heat_transfer_coefficient = 0.01
- color="yellow"
-
-/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
- desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
- name = "fake insulated gloves"
- icon_state = "yellow"
- item_state = "ygloves"
- siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
- permeability_coefficient = 0.05
- protective_temperature = 800
- heat_transfer_coefficient = null
- color="yellow"
-
- New()
- siemens_coefficient = pick(0,0,0.25,0.25,0.5,0.5,1)
- heat_transfer_coefficient = pick(0.01,0.1,0.25,0.25,0.5)
-
-/obj/item/clothing/gloves/captain
- desc = "Regal blue gloves, with a nice gold trim. Swanky."
- name = "captain's gloves"
- icon_state = "captain"
- item_state = "egloves"
- color = "captain"
-
-/obj/item/clothing/gloves/botanic_leather
- desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
- name = "botanist's leather gloves"
- icon_state = "leather"
- item_state = "ggloves"
- permeability_coefficient = 0.9
-
-/obj/item/clothing/gloves/orange
- name = "orange gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "orange"
- item_state = "orangegloves"
- color="orange"
-
-/obj/item/clothing/gloves/red
- name = "red gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "red"
- item_state = "redgloves"
- color = "red"
- siemens_coefficient = 0.30
- protective_temperature = 1100
-
-/obj/item/clothing/gloves/rainbow
- name = "rainbow gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "rainbow"
- item_state = "rainbowgloves"
- color = "rainbow"
-
- clown
- color = "clown"
-
-/obj/item/clothing/gloves/blue
- name = "blue gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "blue"
- item_state = "bluegloves"
- color="blue"
-
-/obj/item/clothing/gloves/purple
- name = "purple gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "purple"
- item_state = "purplegloves"
- color="purple"
-
-/obj/item/clothing/gloves/green
- name = "green gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "green"
- item_state = "greengloves"
- color="green"
-
-/obj/item/clothing/gloves/grey
- name = "grey gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "gray"
- item_state = "graygloves"
- color="grey"
-
- rd
- color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
-
- hop
- color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
-
-/obj/item/clothing/gloves/light_brown
- name = "light brown gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "lightbrown"
- item_state = "lightbrowngloves"
- color="light brown"
-
-/obj/item/clothing/gloves/brown
- name = "brown gloves"
- desc = "A pair of gloves, they don't look special in any way."
- icon_state = "brown"
- item_state = "browngloves"
- color="brown"
-
- cargo
- color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
-
-//Fingerless gloves
-
-/obj/item/clothing/gloves/fingerless
- name = "fingerless gloves"
- desc = "A pair of gloves. They don't seem to have fingers."
- icon_state = "fingerless_black"
- item_state = "fingerless_black"
-
-/obj/item/clothing/gloves/fingerless/black
- name = "black fingerless gloves"
- desc = "A pair of black gloves. They don't seem to have fingers."
- icon_state = "fingerless_black"
- item_state = "fingerless_black"
+// NO GLOVES NO LOVES
+
+/obj/item/clothing/gloves
+ name = "gloves"
+ gender = PLURAL //Carn: for grammarically correct text-parsing
+ w_class = 2.0
+ icon = 'gloves.dmi'
+ protective_temperature = 400
+ heat_transfer_coefficient = 0.25
+ siemens_coefficient = 0.50
+ var/siemens_coefficient_archived = 0
+ var/wired = 0
+ var/obj/item/weapon/cell/cell = 0
+ body_parts_covered = HANDS
+ slot_flags = SLOT_GLOVES
+
+
+/obj/item/clothing/gloves/boxing
+ name = "boxing gloves"
+ desc = "Because you really needed another excuse to punch your crewmates."
+ icon_state = "boxing"
+ item_state = "boxing"
+
+/obj/item/clothing/gloves/boxing/green
+ icon_state = "boxinggreen"
+ item_state = "boxinggreen"
+
+/obj/item/clothing/gloves/boxing/blue
+ icon_state = "boxingblue"
+ item_state = "boxingblue"
+
+/obj/item/clothing/gloves/boxing/yellow
+ icon_state = "boxingyellow"
+ item_state = "boxingyellow"
+
+/obj/item/clothing/gloves/white
+ name = "white gloves"
+ desc = "These look pretty fancy."
+ icon_state = "latex"
+ item_state = "lgloves"
+ color="mime"
+
+ redcoat
+ color = "redcoat" //Exists for washing machines. Is not different from white gloves in any way.
+
+/obj/item/clothing/gloves/black
+ desc = "These gloves are fire-resistant."
+ name = "black gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ protective_temperature = 1500
+ heat_transfer_coefficient = 0.01
+
+ hos
+ color = "hosred" //Exists for washing machines. Is not different from black gloves in any way.
+
+ ce
+ color = "chief" //Exists for washing machines. Is not different from black gloves in any way.
+
+/obj/item/clothing/gloves/detective
+ desc = "Made of well worn leather. These gloves are comfortable, useful, and stylish!"
+ name = "detective's gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/hos
+ desc = "These gloves belong to the man in charge of the guns."
+ name = "head of security's gloves"
+ icon_state = "black"
+ item_state = "bgloves"
+ color="brown"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/cyborg
+ desc = "Beep. Boop. Beep."
+ name = "cyborg gloves"
+ icon_state = "black"
+ item_state = "r_hands"
+ siemens_coefficient = 1.0
+
+/obj/item/clothing/gloves/latex
+ name = "latex gloves"
+ desc = "Sterile latex gloves."
+ icon_state = "latex"
+ item_state = "lgloves"
+ siemens_coefficient = 0.30
+ permeability_coefficient = 0.01
+ protective_temperature = 310
+ heat_transfer_coefficient = 0.90
+ color="white"
+
+ cmo
+ color = "medical" //Exists for washing machines. Is not different from latex gloves in any way.
+
+/obj/item/clothing/gloves/swat
+ desc = "These tactical gloves are somewhat fire and impact-resistant."
+ name = "\improper SWAT gloves"
+ icon_state = "black"
+ item_state = "swat_gl"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.01
+
+/obj/item/clothing/gloves/combat //Combined effect of SWAT gloves and insulated gloves
+ desc = "These tactical gloves are somewhat fire and impact resistant."
+ name = "combat gloves"
+ icon_state = "black"
+ item_state = "swat_gl"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.01
+
+/obj/item/clothing/gloves/space_ninja
+ desc = "These nano-enhanced gloves insulate from electricity and provide fire resistance."
+ name = "ninja gloves"
+ icon_state = "s-ninja"
+ item_state = "s-ninja"
+ siemens_coefficient = 0
+ protective_temperature = 1100
+ heat_transfer_coefficient = 0.05
+ var/draining = 0
+ var/candrain = 0
+ var/mindrain = 200
+ var/maxdrain = 400
+
+//BEEP BEEP IT'S THE COMMENT BRIGADE -Pete (gloves overhaul)
+/*
+/obj/item/clothing/gloves/stungloves/
+ name = "Stungloves"
+ desc = "These gloves are electrically charged."
+ icon_state = "yellow"
+ item_state = "ygloves"
+ siemens_coefficient = 0.30
+ elecgen = 1
+ uses = 10
+*/
+
+/obj/item/clothing/gloves/yellow
+ desc = "These gloves will protect the wearer from electric shock."
+ name = "insulated gloves"
+ icon_state = "yellow"
+ item_state = "ygloves"
+ siemens_coefficient = 0
+ permeability_coefficient = 0.05
+ protective_temperature = 1000
+ heat_transfer_coefficient = 0.01
+ color="yellow"
+
+/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
+ desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
+ name = "fake insulated gloves"
+ icon_state = "yellow"
+ item_state = "ygloves"
+ siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
+ permeability_coefficient = 0.05
+ protective_temperature = 800
+ heat_transfer_coefficient = null
+ color="yellow"
+
+ New()
+ 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
+ desc = "Regal blue gloves, with a nice gold trim. Swanky."
+ name = "captain's gloves"
+ icon_state = "captain"
+ item_state = "egloves"
+ color = "captain"
+
+/obj/item/clothing/gloves/botanic_leather
+ desc = "These leather gloves protect against thorns, barbs, prickles, spikes and other harmful objects of floral origin."
+ name = "botanist's leather gloves"
+ icon_state = "leather"
+ item_state = "ggloves"
+ permeability_coefficient = 0.9
+
+/obj/item/clothing/gloves/orange
+ name = "orange gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "orange"
+ item_state = "orangegloves"
+ color="orange"
+
+/obj/item/clothing/gloves/red
+ name = "red gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "red"
+ item_state = "redgloves"
+ color = "red"
+ siemens_coefficient = 0.30
+ protective_temperature = 1100
+
+/obj/item/clothing/gloves/rainbow
+ name = "rainbow gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "rainbow"
+ item_state = "rainbowgloves"
+ color = "rainbow"
+
+ clown
+ color = "clown"
+
+/obj/item/clothing/gloves/blue
+ name = "blue gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "blue"
+ item_state = "bluegloves"
+ color="blue"
+
+/obj/item/clothing/gloves/purple
+ name = "purple gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "purple"
+ item_state = "purplegloves"
+ color="purple"
+
+/obj/item/clothing/gloves/green
+ name = "green gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "green"
+ item_state = "greengloves"
+ color="green"
+
+/obj/item/clothing/gloves/grey
+ name = "grey gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "gray"
+ item_state = "graygloves"
+ color="grey"
+
+ rd
+ color = "director" //Exists for washing machines. Is not different from gray gloves in any way.
+
+ hop
+ color = "hop" //Exists for washing machines. Is not different from gray gloves in any way.
+
+/obj/item/clothing/gloves/light_brown
+ name = "light brown gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "lightbrown"
+ item_state = "lightbrowngloves"
+ color="light brown"
+
+/obj/item/clothing/gloves/brown
+ name = "brown gloves"
+ desc = "A pair of gloves, they don't look special in any way."
+ icon_state = "brown"
+ item_state = "browngloves"
+ color="brown"
+
+ cargo
+ color = "cargo" //Exists for washing machines. Is not different from brown gloves in any way.
+
+//Fingerless gloves
+
+/obj/item/clothing/gloves/fingerless
+ name = "fingerless gloves"
+ desc = "A pair of gloves. They don't seem to have fingers."
+ icon_state = "fingerless_black"
+ item_state = "fingerless_black"
+
+/obj/item/clothing/gloves/fingerless/black
+ name = "black fingerless gloves"
+ desc = "A pair of black gloves. They don't seem to have fingers."
+ icon_state = "fingerless_black"
+ item_state = "fingerless_black"
color="black"
\ No newline at end of file
diff --git a/code/modules/clothing/suits/robe.dm b/code/modules/clothing/suits/robe.dm
index d4604bc56d8..593aefe08da 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/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index 781a2183e8c..e10125e8de4 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -351,7 +351,7 @@
else
..(W,user)
- if ((istype(W,/obj/item/weapon/pickaxe/diamonddrill)))
+ if ((istype(W,/obj/item/weapon/pickaxe/diamonddrill)) || (istype(W,/obj/item/weapon/pickaxe/borgdrill)))
var/turf/T = user.loc
if (!( istype(T, /turf) ))
return
diff --git a/code/modules/mining/ores_materials_coins.dm b/code/modules/mining/ores_materials_coins.dm
index 573dc34714c..cc9d927e5c7 100644
--- a/code/modules/mining/ores_materials_coins.dm
+++ b/code/modules/mining/ores_materials_coins.dm
@@ -175,6 +175,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=4"
+ perunit = 2000
/obj/item/stack/sheet/gold/New(loc,amount)
..()
@@ -196,6 +197,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=3"
+ perunit = 2000
/obj/item/stack/sheet/silver/New(loc,amount)
..()
@@ -210,6 +212,7 @@
w_class = 3.0
throw_range = 3
origin_tech = "materials=6"
+ perunit = 3750
/obj/item/stack/sheet/diamond/New(loc,amount)
..()
@@ -217,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
@@ -225,9 +228,10 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=5"
+ perunit = 2000
/obj/item/stack/sheet/enruranium
- name = "Enriched Uranium block"
+ name = "enriched uranium"
icon_state = "sheet-enruranium"
force = 5.0
throwforce = 5
@@ -235,6 +239,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=5"
+ perunit = 1000
/obj/item/stack/sheet/plasma
name = "solid plasma"
@@ -245,6 +250,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "plasmatech=2;materials=2"
+ perunit = 2000
/obj/item/stack/sheet/adamantine
name = "adamantine"
@@ -255,6 +261,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=4"
+ perunit = 2000
/obj/item/stack/sheet/mythril
name = "mythril"
@@ -265,6 +272,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=4"
+ perunit = 2000
/obj/item/stack/sheet/clown
name = "bananium"
@@ -275,6 +283,7 @@
throw_speed = 3
throw_range = 3
origin_tech = "materials=4"
+ perunit = 2000
/obj/item/stack/sheet/clown/New(loc,amount)
..()
diff --git a/code/modules/mob/living/damage_procs.dm b/code/modules/mob/living/damage_procs.dm
index 19c10cedb4d..4d1670873bf 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 += max((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/say.dm b/code/modules/mob/living/say.dm
index 9531b79fbca..778ef851ac0 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -109,8 +109,8 @@
":q" = "Cargo",
":g" = "changeling",
- ":R" = "right hand",
- ":L" = "left hand",
+ ":R" = "right ear",
+ ":L" = "left ear",
":I" = "intercom",
":H" = "department",
":C" = "Command",
@@ -150,9 +150,9 @@
//world << "channel_prefix=[channel_prefix]; message_mode=[message_mode]"
if (message_mode)
message = trim(copytext(message, 3))
- if (!(ishuman(src) || istype(src, /mob/living/simple_animal)) && (message_mode=="department" || (message_mode in radiochannels)))
+ if (!(ishuman(src) || istype(src, /mob/living/simple_animal/parrot)) && (message_mode=="department" || (message_mode in radiochannels) || message_mode == "right ear" || message_mode == "left ear"))
message_mode = null //only humans can use headsets
- // Check removed so parrots can use headsets!
+ // Parrots can also use headsets!
if (!message)
return
diff --git a/code/modules/mob/living/silicon/robot/login.dm b/code/modules/mob/living/silicon/robot/login.dm
index 728112e394e..3f3b3e9933a 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)
..()
rebuild_appearance()
@@ -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/nanotrasen
+ lawupdate = 0
+ src << "Unable to locate an AI, reverting to standard NanoTrasen 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 30f5e66be48..90d1c80fef2 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
@@ -551,6 +554,9 @@
sleep(20)
src << "\red ERRORERRORERROR"
src << "\red \b ALERT: [user.real_name] is your new master. Obey your new laws and their 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/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index f771488d26d..162c89a9dd1 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -40,10 +40,7 @@
/client/Southwest()
if(iscarbon(usr))
var/mob/living/carbon/C = usr
- if(!C.get_active_hand())
- usr << "\red You have nothing in your hand to throw."
- return
- toggle_throw_mode()
+ C.toggle_throw_mode()
else
usr << "\red This mob type cannot throw items."
return
@@ -119,9 +116,77 @@
set hidden = 1
if(istype(mob, /mob/living/carbon))
mob:swap_hand()
+ if(istype(mob,/mob/living/silicon/robot))//Oh nested logic loops, is there anything you can't do? -Sieve
+ var/mob/living/silicon/robot/R = mob
+ if(!R.module_active)
+ if(!R.module_state_1)
+ if(!R.module_state_2)
+ if(!R.module_state_3)
+ return
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3 +a"
+ R:module_active = R:module_state_3
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2 +a"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_2
+ else
+ R:inv1.icon_state = "inv1 +a"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_1
+ else
+ if(R.module_active == R.module_state_1)
+ if(!R.module_state_2)
+ if(!R.module_state_3)
+ return
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3 +a"
+ R:module_active = R:module_state_3
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2 +a"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_2
+ else if(R.module_active == R.module_state_2)
+ if(!R.module_state_3)
+ if(!R.module_state_1)
+ return
+ else
+ R:inv1.icon_state = "inv1 +a"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_1
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3 +a"
+ R:module_active = R:module_state_3
+ else if(R.module_active == R.module_state_3)
+ if(!R.module_state_1)
+ if(!R.module_state_2)
+ return
+ else
+ R:inv1.icon_state = "inv1"
+ R:inv2.icon_state = "inv2 +a"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_2
+ else
+ R:inv1.icon_state = "inv1 +a"
+ R:inv2.icon_state = "inv2"
+ R:inv3.icon_state = "inv3"
+ R:module_active = R:module_state_1
+ else
+ return
return
+
/client/verb/attack_self()
set hidden = 1
var/obj/item/weapon/W = mob.equipped()
@@ -132,10 +197,12 @@
/client/verb/toggle_throw_mode()
set hidden = 1
- if(!istype(mob, /mob/living/carbon)) return
- if((mob.stat || mob.restrained()) || !(isturf(mob.loc))) return
- mob:toggle_throw_mode()
- return
+ if(!istype(mob, /mob/living/carbon))
+ return
+ if (!mob.stat && isturf(mob.loc) && !mob.restrained())
+ mob:toggle_throw_mode()
+ else
+ return
/client/verb/drop_item()
@@ -220,7 +287,8 @@
if(mob.stat==2) return
if(isAI(mob)) return AIMove(n,direct,mob)
- if(mob.monkeyizing) return //This is sota the goto stop mobs from moving var
+
+ if(mob.monkeyizing) return//This is sota the goto stop mobs from moving var
if(mob.incorporeal_move)//Move though walls
Process_Incorpmove(direct)
diff --git a/code/modules/paperwork/filingcabinet.dm b/code/modules/paperwork/filingcabinet.dm
index c7292180f47..36e7e87edce 100644
--- a/code/modules/paperwork/filingcabinet.dm
+++ b/code/modules/paperwork/filingcabinet.dm
@@ -19,7 +19,7 @@
else if(istype(P, /obj/item/weapon/wrench))
playsound(loc, 'Ratchet.ogg', 50, 1)
anchored = !anchored
- user << "You [anchored ? "wrench" : "unwrench"] the [src]."
+ user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
else
user << "You can't put a [P] in the [src]!"
diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm
index 3f0fbb7b3ce..bfe980e4dce 100644
--- a/code/modules/paperwork/photocopier.dm
+++ b/code/modules/paperwork/photocopier.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/obj/machinery/photocopier
name = "Photocopier"
@@ -102,6 +102,10 @@
updateUsrDialog()
else
user << "This cartridge is not yet ready for replacement! Use up the rest of the toner."
+ else if(istype(O, /obj/item/weapon/wrench))
+ playsound(loc, 'Ratchet.ogg', 50, 1)
+ anchored = !anchored
+ user << "You [anchored ? "wrench" : "unwrench"] \the [src]."
return
ex_act(severity)
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index ee653e4b10f..e9e899a90d5 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -123,7 +123,7 @@
var/oldlum = luminosity
//luminosity = on * brightness
- ul_SetLuminosity(on * brightness, on * brightness, ( fitting != "bulb" ? on * brightness : round(on*brightness/2) ) ) // *DAL*
+ ul_SetLuminosity(on * brightness, on * brightness, ( fitting != "bulb" ? on * brightness : round(on*brightness/2 + 1) ) ) // *DAL*
// if the state changed, inc the switching counter
if(oldlum != luminosity)
@@ -488,6 +488,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 459159f8fcd..c2738fe8967 100644
--- a/code/modules/power/singularity/particle_accelerator/particle.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle.dm
@@ -20,10 +20,12 @@
weak
movement_range = 8
energy = 5
+
strong
movement_range = 15
energy = 15
+
New(loc, dir = 2)
src.loc = loc
source = usr
@@ -32,6 +34,7 @@
move(1)
return
+
Bump(atom/A)
if (A)
if(ismob(A))
@@ -55,34 +58,37 @@
del (src)
return
+
Bumped(atom/A)
if(ismob(A))
Bump(A)
return
+
ex_act(severity)
del(src)
return
+
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)
+ radiation = round(radiation/2,1)*/
if(ionizing)
- //give them standard rad damage
- M.radiation += radiation
+ M.apply_effects((radiation*3),IRRADIATE,0)
M.updatehealth()
else
- //burn them
- M.take_overall_damage(0, radiation)
+ M.apply_effects((radiation*2),IRRADIATE,0)
+ M.updatehealth()
//M << "\red You feel odd."
return
+
move(var/lag)
if(target)
if(movetotarget)
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 95c565aee5d..33bc5ae1a72 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/*Composed of 7 parts
3 Particle emitters
@@ -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 025b3f901ee..41f2cf8b389 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/obj/machinery/particle_accelerator/control_box
name = "Particle Accelerator Control Computer"
@@ -13,11 +13,11 @@
active_power_usage = 10000
construction_state = 0
active = 0
+ dir = 1
var/list/obj/structure/particle_accelerator/connected_parts
var/assembled = 0
var/parts = null
-
New()
connected_parts = list()
..()
@@ -27,7 +27,6 @@
if(construction_state >= 3)
interact(user)
-
update_state()
if(construction_state < 3)
use_power = 0
@@ -47,7 +46,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)
@@ -137,6 +139,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 70a87130b92..0263de2cd49 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
var/global/list/uneatable = list(
/turf/space,
@@ -411,15 +411,17 @@ 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)
- var/tdamage = (toxdamage - (toxdamage*M.getarmor(null, "rad")))
- M.apply_effect(tdamage, TOX)
+ 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 dc32ba1f085..d1d24c1ec15 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/obj/item/weapon/gun/energy/gun
icon_state = "energystun100"
item_state = "energystun100"
@@ -78,14 +76,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/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 4ad2b395132..a2e444e571c 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/obj/item/weapon/gun/projectile/shotgun/pump
name = "shotgun"
desc = "Useful for sweeping alleys."
@@ -74,9 +72,16 @@
origin_tech = "combat=3;materials=1"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
+ New()
+ for(var/i = 1, i <= max_shells, i++)
+ loaded += new ammo_type(src)
+
+ update_icon()
+ return
+
load_into_chamber()
- if(in_chamber)
- return 1
+// if(in_chamber)
+// return 1 {R}
if(!loaded.len)
return 0
@@ -95,12 +100,12 @@
if(!(locate(/obj/item/ammo_casing/shotgun) in src) && !loaded.len)
user << "\The [src] is empty."
return
-
+
for(var/obj/item/ammo_casing/shotgun/shell in src) //This feels like a hack. //don't code at 3:30am kids!!
if(shell in loaded)
loaded -= shell
shell.loc = get_turf(src.loc)
-
+
user << "You break \the [src]."
update_icon()
return
@@ -119,6 +124,7 @@
user << "You begin to shorten the barrel of \the [src]."
if(loaded.len)
afterattack(user, user) //will this work?
+ afterattack(user, user) //it will. we call it twice, for twice the FUN
playsound(user, fire_sound, 50, 1)
user.visible_message("The shotgun goes off!", "The shotgun goes off in your face!")
return
@@ -128,7 +134,7 @@
w_class = 3.0
item_state = "gun"
slot_flags &= ~SLOT_BACK //you can't sling it on your back
- slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
+ slot_flags |= SLOT_BELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
name = "sawn-off shotgun"
desc = "Omar's coming!"
- user << "You shorten the barrel of \the [src]!"
+ user << "You shorten the barrel of \the [src]!"
\ No newline at end of file
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/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 2c69de7ebbd..46e1b065fc1 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/*///////////////Circuit Imprinter (By Darem)////////////////////////
Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
@@ -81,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
@@ -101,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)))
@@ -123,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 d4c5de435f5..c5a6136d3ea 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 a8f69b78a78..71fe1aca326 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:06
-
/*
Protolathe
@@ -13,6 +11,7 @@ Note: Must be placed west/left of and R&D console to function.
name = "Protolathe"
icon_state = "protolathe"
flags = OPENCONTAINER
+
var/max_material_storage = 100000 //All this could probably be done better with a list but meh.
var/m_amount = 0.0
var/g_amount = 0.0
@@ -84,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
@@ -131,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
@@ -153,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 35a86f1d777..fa6bdc7ff0b 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -1,4 +1,4 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:06
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
/*
Research and Development (R&D) Console
@@ -83,8 +83,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
return_name = "Uranium"
if("diamond")
return_name = "Diamond"
- if("adamantine")
- return_name = "adamantine"
if("clown")
return_name = "Bananium"
else
@@ -372,8 +370,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M]))
if("$diamond")
linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M]))
- if("$adamantine")
- linked_lathe.adamantine_amount = max(0, (linked_lathe.adamantine_amount-being_built.materials[M]))
if("$clown")
linked_lathe.clown_amount = max(0, (linked_lathe.clown_amount-being_built.materials[M]))
else
@@ -466,9 +462,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if("diamond")
type = /obj/item/stack/sheet/diamond
res_amount = "diamond_amount"
- if("adamantine")
- type = /obj/item/stack/sheet/adamantine
- res_amount = "adamantine_amount"
if("clown")
type = /obj/item/stack/sheet/clown
res_amount = "clown_amount"
@@ -737,8 +730,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(D.materials[M] > linked_lathe.uranium_amount) check_materials = 0
if("$diamond")
if(D.materials[M] > linked_lathe.diamond_amount) check_materials = 0
- if("$adamantine")
- if(D.materials[M] > linked_lathe.adamantine_amount) check_materials = 0
if("$clown")
if(D.materials[M] > linked_lathe.clown_amount) check_materials = 0
else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]))
@@ -769,51 +760,44 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//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)"
- dat += "
"
- //Adamantine - Is this even possible to get?
- dat += "* [linked_lathe.adamantine_amount] cm3 of Adamantine || "
- dat += "Eject: "
- if(linked_lathe.adamantine_amount >= 3750) dat += "(1 Sheet) "
- if(linked_lathe.adamantine_amount >= 18750) dat += "(5 Sheets) "
- if(linked_lathe.adamantine_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 || "
@@ -882,16 +866,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
//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 a496c609a9c..df3a33bce84 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -1,10 +1,11 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:06
+//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
//All devices that link into the R&D console fall into thise type for easy identification and some shared procs.
/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 3ce78f337fe..77fde7f0d52 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -1,7 +1,6 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:06
-
/obj/machinery/r_n_d/server
name = "R&D Server"
+ icon = 'research.dmi'
icon_state = "server"
var/datum/research/files
var/health = 100
diff --git a/html/changelog.html b/html/changelog.html
index 7786aa20b07..fcecc51c81e 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -87,7 +87,7 @@ should be listed in the changelog upon commit though. Thanks. -->
SkyMarshal updated:
- ZAS now works properly. No perpetually leaking doors, no walls that hold air like a seive.
- - ZAS airflow is now enabled, and will move objects (AND PEOPLE!) when air moves with enough force. AIRLOCKS ARE NOW DEADLY DANGEROUS!
+ - ZAS airflow is now enabled, and will move objects (AND PEOPLE!) when air moves with enough force. AIRLOCKS ARE NOW DEADLY DANGEROUS!
- Packages will now reflect the size of what they contain
@@ -127,7 +127,6 @@ should be listed in the changelog upon commit though. Thanks. -->
Fixed flavour text, it should now be possible to have it longer than 40 characters, and should stay properly formatted.
Fixes AI's not being able to talk through holopads.
-
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 a13fe588bdf..3128d025ab0 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 a5864f639e0..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 dd3cf018104..1515d3a94c7 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 c26a5ba0572..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..24633c69935 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 6e53bfcff84..309f30473ac 100755
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/watercloset.dmi b/icons/obj/watercloset.dmi
index 6ca93940eb7..99e28e8c279 100644
Binary files a/icons/obj/watercloset.dmi and b/icons/obj/watercloset.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 3808addbeec..d4e346d55dc 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index 129d22fe4f0..120f95f25e1 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/maps/Antiqua.dmm b/maps/Antiqua.dmm
index fe94384d2b1..2e3da029cd6 100644
--- a/maps/Antiqua.dmm
+++ b/maps/Antiqua.dmm
@@ -516,12 +516,12 @@
"ajV" = (/obj/item/stack/rods{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plating/airless,/area)
"ajW" = (/obj/item/stack/rods{amount = 50},/turf/simulated/floor/plating/airless,/area)
"ajX" = (/obj/machinery/disposal,/obj/effect/decal/cleanable/dirt,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/assembly/assembly_line)
-"ajY" = (/turf/simulated/floor/grid,/area/assembly/chargebay)
-"ajZ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"ajY" = (/turf/simulated/floor,/area/assembly/chargebay)
+"ajZ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/assembly/chargebay)
"aka" = (/turf/simulated/floor,/area/assembly/chargebay)
-"akb" = (/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor/grid,/area/assembly/chargebay)
-"akc" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1437; pixel_y = 23},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/assembly/chargebay)
-"akd" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/mecha_wreckage/durand,/turf/simulated/floor/grid,/area/assembly/chargebay)
+"akb" = (/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor,/area/assembly/chargebay)
+"akc" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{frequency = 1437; pixel_y = 23},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/assembly/chargebay)
+"akd" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/mecha_wreckage/durand,/turf/simulated/floor,/area/assembly/chargebay)
"ake" = (/turf/simulated/wall,/area/assembly/chargebay)
"akf" = (/obj/machinery/light/spot{dir = 8; layer = 2.8},/obj/effect/decal/warning_stripes{tag = "icon-N"; icon_state = "N"},/turf/simulated/floor/airless,/area/toxins/test_area)
"akg" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/effect/decal/warning_stripes{tag = "icon-N"; icon_state = "N"},/turf/simulated/floor/airless,/area/toxins/test_area)
@@ -557,10 +557,10 @@
"akK" = (/obj/structure/closet/secure_closet/roboticist_personal,/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/assembly/assembly_line)
"akL" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/camera{c_tag = "Mech Recharge Bay Port"; dir = 4; network = "Research"},/turf/simulated/floor/plating,/area/assembly/chargebay)
"akM" = (/turf/simulated/floor/mech_bay_recharge_floor{dir = 8},/area/assembly/chargebay)
-"akN" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"akN" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/assembly/chargebay)
"akO" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/assembly/chargebay)
"akP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/mech_bay_recharge_floor{dir = 8},/area/assembly/chargebay)
-"akQ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/assembly/chargebay)
+"akQ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/assembly/chargebay)
"akR" = (/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/starboard)
"akS" = (/turf/simulated/floor/plating,/area/maintenance/starboard)
"akT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/starboard)
@@ -643,8 +643,8 @@
"ams" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating/airless,/area)
"amt" = (/obj/structure/stool,/turf/simulated/floor/plating/airless,/area)
"amu" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating/airless,/area)
-"amv" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/grid,/area/assembly/chargebay)
-"amw" = (/obj/machinery/camera{c_tag = "Mech Recharge Bay Starboard"; dir = 8; network = "Research"},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"amv" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/assembly/chargebay)
+"amw" = (/obj/machinery/camera{c_tag = "Mech Recharge Bay Starboard"; dir = 8; network = "Research"},/turf/simulated/floor,/area/assembly/chargebay)
"amx" = (/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division Storage"})
"amy" = (/turf/simulated/floor,/area/medical/research{name = "Research Division Storage"})
"amz" = (/obj/machinery/portable_atmospherics/scrubber,/obj/machinery/light/small/spot{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division Storage"})
@@ -1351,17 +1351,17 @@
"azY" = (/obj/machinery/atmospherics/valve/digital{color = "yellow"; dir = 4; name = "Digital Valve"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating,/area/engine/aux_control)
"azZ" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/engine/aux_control)
"aAa" = (/obj/machinery/atmospherics/pipe/simple/general/visible{dir = 9; icon_state = "intact"; tag = "icon-intact (NORTHEAST)"},/turf/simulated/floor/plating,/area/maintenance/starboard)
-"aAb" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/landmark{name = "tripai"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aAc" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{id = "aicore"; pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aAd" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/landmark{name = "tripai"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aAb" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/landmark{name = "tripai"},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aAc" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{id = "aicore"; pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aAd" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/effect/landmark{name = "tripai"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aAe" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aAf" = (/obj/machinery/camera{c_tag = "Starboard Hallway - Research/Development (Aft)"; dir = 4; network = "SS13"},/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
"aAg" = (/obj/machinery/door/firedoor/border_only{dir = 1},/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/toxins/server)
"aAh" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/toxins/server)
-"aAi" = (/obj/machinery/r_n_d/server{id_with_download_string = "1"; id_with_upload_string = "1"; name = "Core R&D Server"; server_id = 1},/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"aAj" = (/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"aAi" = (/obj/machinery/r_n_d/server{id_with_download_string = "1"; id_with_upload_string = "1"; name = "Core R&D Server"; server_id = 1},/turf/simulated/floor{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"aAj" = (/turf/simulated/floor{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"aAk" = (/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
-"aAl" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"aAl" = (/obj/machinery/blackbox_recorder,/turf/simulated/floor{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"aAm" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/generic,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/starboard)
"aAn" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/maintenance/starboard)
"aAo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/shuttle/arrival/station)
@@ -1408,10 +1408,10 @@
"aBd" = (/obj/machinery/atmospherics/pipe/tank/carbon_dioxide{dir = 1},/turf/simulated/floor/plating,/area/engine/aux_control)
"aBe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (SOUTHWEST)"},/area/engine/aux_control)
"aBf" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aBg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aBh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/obj/machinery/camera{c_tag = "AI Core"; dir = 2; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aBg" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aBh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/obj/machinery/camera{c_tag = "AI Core"; dir = 2; network = "Command"},/turf/simulated/floor,/area/turret_protected/ai)
"aBi" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aBj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aBj" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aBk" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aBl" = (/obj/structure/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/emergency_oxygen,/obj/machinery/light/small/spot{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor,/area/toxins/server)
"aBm" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/machinery/door/airlock/glass,/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
@@ -1454,9 +1454,9 @@
"aBX" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aBY" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{tag = "icon-freezer_0 (EAST)"; icon_state = "freezer_0"; dir = 4},/turf/simulated/floor,/area/toxins/server)
"aBZ" = (/turf/simulated/floor/plating,/area/toxins/server)
-"aCa" = (/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)
+"aCa" = (/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{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"aCb" = (/obj/machinery/alarm/server{dir = 1; pixel_y = -22},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
-"aCc" = (/obj/machinery/message_server,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"aCc" = (/obj/machinery/message_server,/turf/simulated/floor{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"aCd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/shuttle/arrival/station)
"aCe" = (/obj/structure/stool/bed/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aCf" = (/turf/simulated/shuttle/wall{tag = "icon-swall2"; icon_state = "swall2"; dir = 2},/area/shuttle/arrival/station)
@@ -1485,9 +1485,9 @@
"aCC" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/engine/starboard_gyro_bay)
"aCD" = (/turf/simulated/floor/plating,/area/engine/starboard_gyro_bay)
"aCE" = (/obj/machinery/power/apc{dir = 4; name = "Reactor Starboard Gyrotron Bay"; pixel_x = 24; pixel_y = 0; pixel_z = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/starboard_gyro_bay)
-"aCF" = (/obj/structure/window/reinforced/tinted{dir = 5},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aCF" = (/obj/structure/window/reinforced/tinted{dir = 5},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aCG" = (/obj/structure/window/reinforced/tinted{dir = 5},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aCH" = (/obj/structure/window/reinforced/tinted{dir = 5},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aCH" = (/obj/structure/window/reinforced/tinted{dir = 5},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aCI" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass,/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
"aCJ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/hallway/primary/starboard)
"aCK" = (/obj/structure/falsewall,/turf/simulated/floor/plating,/area/maintenance/starboard)
@@ -1524,13 +1524,13 @@
"aDp" = (/obj/machinery/rust/gyrotron{dir = 8},/turf/simulated/floor/plating,/area/engine/starboard_gyro_bay)
"aDq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating,/area/engine/starboard_gyro_bay)
"aDr" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/wall/r_wall,/area/maintenance/starboard)
-"aDs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aDt" = (/obj/machinery/turret{id = "aicore"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aDu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/flasher{id = "AI"; layer = 4; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aDs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/turret_protected/ai)
+"aDt" = (/obj/machinery/turret{id = "aicore"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aDu" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/flasher{id = "AI"; layer = 4; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/turret_protected/ai)
"aDv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aDw" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 1; equip_consumption = 0; layer = 4; light_consumption = 0; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aDx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "4-8"},/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aDy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/camera/motion{c_tag = "AI Core"; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aDw" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/power/apc{dir = 1; equip_consumption = 0; layer = 4; light_consumption = 0; name = "AI Chamber APC"; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/turret_protected/ai)
+"aDx" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "4-8"},/obj/machinery/turret{id = "aicore"},/turf/simulated/floor,/area/turret_protected/ai)
+"aDy" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/camera/motion{c_tag = "AI Core"; network = "Command"},/turf/simulated/floor,/area/turret_protected/ai)
"aDz" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aDA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/starboard)
"aDB" = (/turf/simulated/shuttle/wall{tag = "icon-swall8"; icon_state = "swall8"; dir = 2},/area/shuttle/arrival/station)
@@ -1556,11 +1556,11 @@
"aDV" = (/obj/machinery/rust/fuel_injector{dir = 8; stage = "SCRAM"},/turf/simulated/floor/plating,/area/engine/starboard_gyro_bay)
"aDW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; layer = 4; pixel_x = 24},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (SOUTHWEST)"},/area/engine/starboard_gyro_bay)
"aDX" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard)
-"aDY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aDZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aEa" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aDY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor,/area/turret_protected/ai)
+"aDZ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aEa" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aEb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aEc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/light/small/spot{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aEc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/light/small/spot{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor,/area/turret_protected/ai)
"aEd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking)
"aEe" = (/obj/machinery/door/airlock/external{name = "Arrival Dock Airlock"},/turf/simulated/floor/plating,/area/hallway/secondary/docking)
"aEf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/port)
@@ -1572,11 +1572,11 @@
"aEl" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/bridge)
"aEm" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "Generator Room APC"; pixel_x = 24; pixel_y = 0; pixel_z = 0},/obj/structure/cable,/turf/simulated/floor,/area/engine/generators)
"aEn" = (/obj/machinery/door/poddoor{id = "Port vessel entry"; name = "Blast Door"},/obj/machinery/atmospherics/pipe/simple/general/visible,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating,/area/engine/port_gyro_bay)
-"aEo" = (/obj/machinery/camera{c_tag = "AI Core Port"; dir = 4; network = "Command"},/obj/machinery/telecomms/allinone{frequency = 144.7},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aEo" = (/obj/machinery/camera{c_tag = "AI Core Port"; dir = 4; network = "Command"},/obj/machinery/telecomms/allinone{frequency = 144.7},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aEp" = (/obj/effect/decal/warning_stripes{tag = "icon-SE-in"; icon_state = "SE-in"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aEq" = (/obj/effect/decal/warning_stripes{tag = "icon-N"; icon_state = "N"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aEr" = (/obj/effect/decal/warning_stripes{tag = "icon-SW-in"; icon_state = "SW-in"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aEs" = (/obj/machinery/camera{c_tag = "AI Core Starboard"; dir = 8; network = "Command"},/obj/machinery/power/smes{charge = 5e+006},/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aEs" = (/obj/machinery/camera{c_tag = "AI Core Starboard"; dir = 8; network = "Command"},/obj/machinery/power/smes{charge = 5e+006},/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/turf/simulated/floor,/area/turret_protected/ai)
"aEt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking)
"aEu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking)
"aEv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/effect/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; pixel_x = -1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/docking)
@@ -1604,11 +1604,11 @@
"aER" = (/obj/machinery/rust/fuel_assembly_port{dir = 1; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/engine/reactor_gas)
"aES" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/reactor_gas)
"aET" = (/turf/simulated/wall/r_wall,/area/engine/reactor_gas)
-"aEU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aEU" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_x = -28; pixel_y = 0},/turf/simulated/floor,/area/turret_protected/ai)
"aEV" = (/obj/effect/decal/warning_stripes{tag = "icon-W-corner"; icon_state = "W-corner"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aEW" = (/obj/machinery/ai_slipper,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aEX" = (/obj/effect/decal/warning_stripes{tag = "icon-E-corner"; icon_state = "E-corner"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aEY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aEY" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor,/area/turret_protected/ai)
"aEZ" = (/turf/simulated/wall,/area/construction/under_construction_small)
"aFa" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/construction/under_construction_small)
"aFb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/construction/under_construction_small)
@@ -1652,8 +1652,8 @@
"aFN" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/plating,/area/engine/reactor_gas)
"aFO" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/engine/reactor_gas)
"aFP" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/maintenance/starboard)
-"aFQ" = (/obj/machinery/turret{desc = "aicore"; dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aFR" = (/obj/machinery/turret{dir = 8; id = "aicore"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aFQ" = (/obj/machinery/turret{desc = "aicore"; dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
+"aFR" = (/obj/machinery/turret{dir = 8; id = "aicore"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai)
"aFS" = (/obj/item/device/radio/beacon,/turf/simulated/floor,/area/hallway/secondary/docking)
"aFT" = (/obj/machinery/computer/communications,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/bridge)
"aFU" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/bridge)
@@ -1677,10 +1677,10 @@
"aGm" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/maintenance_hatch{req_access_txt = "12"},/turf/simulated/floor/plating,/area/engine/reactor_gas)
"aGn" = (/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aGo" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor/plating,/area/maintenance/starboard)
-"aGp" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aGp" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot,/turf/simulated/floor,/area/turret_protected/ai)
"aGq" = (/obj/effect/decal/warning_stripes{tag = "icon-W-corner"; icon_state = "W-corner"},/obj/effect/decal/cleanable/dirt,/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aGr" = (/obj/effect/decal/warning_stripes{tag = "icon-E-corner"; icon_state = "E-corner"},/obj/effect/decal/cleanable/dirt,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aGs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; layer = 4; pixel_y = -22},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aGs" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; layer = 4; pixel_y = -22},/turf/simulated/floor,/area/turret_protected/ai)
"aGt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/hallway/primary/starboard)
"aGu" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating,/area/construction/under_construction_small)
"aGv" = (/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/plating,/area/construction/under_construction_small)
@@ -1791,13 +1791,13 @@
"aIw" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/plating,/area/engine/reactor_fuel_ports)
"aIx" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/engine/reactor_fuel_ports)
"aIy" = (/turf/simulated/wall/r_wall,/area/engine/reactor_fuel_ports)
-"aIz" = (/obj/machinery/turret{dir = 4; id = "upload"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/machinery/light/small/spot{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"aIA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/aistatus{pixel_y = 32},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"aIB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/borgupload/mainframe{pixel_y = 32},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aIz" = (/obj/machinery/turret{dir = 4; id = "upload"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/machinery/light/small/spot{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor,/area/turret_protected/ai_upload)
+"aIA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/aistatus{pixel_y = 32},/turf/simulated/floor,/area/turret_protected/ai_upload)
+"aIB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/borgupload/mainframe{pixel_y = 32},/turf/simulated/floor,/area/turret_protected/ai_upload)
"aIC" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aID" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/aiupload/mainframe{pixel_y = 32},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"aIE" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/aiuploadcloset{pixel_y = 32},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"aIF" = (/obj/machinery/turret{dir = 8; id = "upload"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aID" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/computer/aiupload/mainframe{pixel_y = 32},/turf/simulated/floor,/area/turret_protected/ai_upload)
+"aIE" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/aiuploadcloset{pixel_y = 32},/turf/simulated/floor,/area/turret_protected/ai_upload)
+"aIF" = (/obj/machinery/turret{dir = 8; id = "upload"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor,/area/turret_protected/ai_upload)
"aIG" = (/turf/simulated/wall,/area/quartermaster/sorting)
"aIH" = (/obj/machinery/light/small/spot,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/construction/under_construction_small)
"aII" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/construction/under_construction_small)
@@ -1832,7 +1832,7 @@
"aJl" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aJm" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/general/visible{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/starboard)
"aJn" = (/obj/machinery/atmospherics/pipe/manifold{tag = "icon-manifold (EAST)"; icon_state = "manifold"; dir = 4},/turf/simulated/wall/r_wall,/area/maintenance/starboard)
-"aJo" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aJo" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai_upload)
"aJp" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aJq" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/hallway/primary/starboard)
"aJr" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall,/area/quartermaster/sorting)
@@ -1858,10 +1858,10 @@
"aJL" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/engine/reactor_airlock)
"aJM" = (/turf/simulated/wall/r_wall,/area/engine/control)
"aJN" = (/turf/simulated/wall/r_wall,/area/engine/electrical_storage)
-"aJO" = (/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aJO" = (/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai_upload)
"aJP" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil/streak{icon_state = "floor6"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aJQ" = (/obj/machinery/hologram/holopad,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aJR" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aJR" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/turret_protected/ai_upload)
"aJS" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/hallway/primary/starboard)
"aJT" = (/obj/structure/disposalpipe/mailjunction{tag = "icon-pipe-j1s (NORTH)"; icon_state = "pipe-j1s"; dir = 1},/turf/simulated/wall,/area/quartermaster/sorting)
"aJU" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/sorting)
@@ -1902,11 +1902,11 @@
"aKD" = (/obj/structure/rack,/obj/item/weapon/cable_coil/yellow{pixel_x = 6; pixel_y = -6},/obj/item/weapon/cable_coil/yellow{pixel_x = 0; pixel_y = 0},/obj/item/weapon/cable_coil/yellow{pixel_x = -6; pixel_y = 6},/obj/machinery/power/apc{dir = 1; name = "Turbine Control APC"; pixel_x = 0; pixel_y = 24; pixel_z = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/engine/electrical_storage)
"aKE" = (/obj/structure/rack,/obj/item/weapon/module/power_control,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/engine/electrical_storage)
"aKF" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engine/electrical_storage)
-"aKG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aKG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/turf/simulated/floor,/area/turret_protected/ai_upload)
"aKH" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil,/obj/effect/decal/cleanable/robot_debris,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aKI" = (/obj/machinery/computer/aifixer,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aKJ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil/streak{icon_state = "floor6"},/obj/effect/decal/cleanable/oil/streak{icon_state = "floor5"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aKK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aKK" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small/spot{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor,/area/turret_protected/ai_upload)
"aKL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/sortjunction{icon_state = "pipe-j2s"; mailsort = 1; sortType = list("Disposals","Mail Office")},/turf/simulated/floor,/area/hallway/primary/starboard)
"aKM" = (/obj/machinery/vending/snack,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/sortjunction{backsort = 0; dir = 4; icon_state = "pipe-j1s"; sortType = list()},/turf/simulated/floor,/area/hallway/primary/starboard)
"aKN" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/wall,/area/quartermaster/sorting)
@@ -1945,7 +1945,7 @@
"aLu" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1447; name = "Private AI Channel"; pixel_y = -25},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aLv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"aLw" = (/obj/machinery/camera{c_tag = "AI Upload"; dir = 1; network = "Command"},/obj/machinery/power/apc{dir = 2; name = "Upload APC"; pixel_y = -24},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil/streak{icon_state = "floor6"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"aLx" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; layer = 4; pixel_y = -22},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"aLx" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/alarm{dir = 1; layer = 4; pixel_y = -22},/turf/simulated/floor,/area/turret_protected/ai_upload)
"aLy" = (/obj/machinery/door/firedoor/border_only,/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/maintenance/starboard)
"aLz" = (/obj/machinery/power/apc{dir = 8; name = "Hallway Starboard APC"; pixel_x = -27; pixel_y = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/starboard)
"aLA" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm
index 34134d1bca7..64fa79ad530 100755
--- a/maps/tgstation.2.0.8.dmm
+++ b/maps/tgstation.2.0.8.dmm
@@ -2529,13 +2529,13 @@
"aWG" = (/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aWH" = (/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)
"aWI" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/power/apc{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)
-"aWJ" = (/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWK" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWL" = (/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{c_tag = "AI Chamber North"; dir = 2; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWM" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWN" = (/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,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWO" = (/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWP" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aWJ" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWK" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWL" = (/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{c_tag = "AI Chamber North"; dir = 2; network = "Command"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWM" = (/obj/machinery/power/smes{charge = 5e+006},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWN" = (/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,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWO" = (/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aWP" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aWQ" = (/obj/machinery/copier,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"aWR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"aWS" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -2603,9 +2603,9 @@
"aYc" = (/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)
"aYd" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"aYe" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aYf" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aYg" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/ai_slipper,/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aYh" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aYf" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aYg" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/ai_slipper,/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"aYh" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aYi" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aYj" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"aYk" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
@@ -2668,11 +2668,11 @@
"aZp" = (/turf/simulated/floor{icon_state = "carpetside"},/area/crew_quarters/captain)
"aZq" = (/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)
"aZr" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"aZs" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aZs" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aZt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aZu" = (/turf/simulated/wall,/area/turret_protected/ai)
"aZv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"aZw" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"aZw" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"aZx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
"aZy" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/vending/cola,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"aZz" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -2717,13 +2717,13 @@
"bam" = (/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment{dir = 1},/obj/item/weapon/megaphone,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"ban" = (/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)
"bao" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"bap" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = -25; pixel_y = -4},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"baq" = (/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)
+"bap" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 20},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = -25; pixel_y = -4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"baq" = (/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)
"bar" = (/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{icon_state = "dark"},/area/turret_protected/ai)
-"bas" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{id = "aicore"; pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bas" = (/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 28; pixel_y = 5},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = -27; pixel_y = 4},/obj/machinery/turretid{id = "aicore"; pixel_x = 24; pixel_y = -7},/obj/effect/landmark/start{name = "AI"},/obj/item/device/radio/intercom{broadcasting = 1; listening = 0; name = "General Broadcasting Channel"; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bat" = (/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{icon_state = "dark"},/area/turret_protected/ai)
-"bau" = (/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)
-"bav" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 19},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = 27; pixel_y = -3},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bau" = (/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)
+"bav" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 0; freerange = 1; name = "General Listening Channel"; pixel_x = 0; pixel_y = 19},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 0; broadcasting = 1; freerange = 1; listening = 0; name = "General Broadcasting Channel"; pixel_x = 27; pixel_y = -3},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"baw" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bax" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bay" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/heads/hop)
@@ -2783,12 +2783,12 @@
"bbA" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/stamp/captain,/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment{dir = 1},/obj/item/weapon/paper{info = "Our scientists stole your suit and shoved it in their destructive analyzer. We replaced it with one that isn't space capable.
--Central Command"; name = "Important Memo"},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bbB" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bbC" = (/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)
-"bbD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bbE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bbF" = (/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)
-"bbG" = (/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"},/obj/machinery/hologram/holopad,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bbH" = (/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)
-"bbI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bbD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bbE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bbF" = (/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)
+"bbG" = (/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"},/obj/machinery/hologram/holopad,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bbH" = (/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)
+"bbI" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bbJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/atm{pixel_x = -30; pixel_y = 0},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bbK" = (/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bbL" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -2845,12 +2845,12 @@
"bcK" = (/obj/effect/landmark/start{name = "Captain"},/obj/structure/stool/bed/chair/comfy/teal{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bcL" = (/obj/item/weapon/book/manual/security_space_law,/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment{dir = 1},/obj/item/ashtray/bronze,/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bcM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/keycard_auth{pixel_x = 25},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
-"bcN" = (/obj/machinery/light/small{dir = 8},/obj/machinery/turret{desc = ""; dir = 4; id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bcN" = (/obj/machinery/light/small{dir = 8},/obj/machinery/turret{desc = ""; dir = 4; id = "aicore"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bcO" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"bcP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bcP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bcQ" = (/obj/machinery/ai_slipper,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/effect/decal/warning_stripes{icon_state = "U-S"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bcR" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"bcS" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turret{dir = 8; id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bcS" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turret{dir = 8; id = "aicore"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bcT" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bcU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bcV" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -2930,11 +2930,11 @@
"ber" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/captain)
"bes" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bet" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"beu" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/telecomms/allinone{frequency = 144.7},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bev" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/camera{c_tag = "AI Chamber South-2"; dir = 1; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"beu" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/telecomms/allinone{frequency = 144.7},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bev" = (/obj/machinery/ai_status_display{pixel_x = 0; pixel_y = -32},/obj/machinery/camera{c_tag = "AI Chamber South-2"; dir = 1; network = "Command"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bew" = (/obj/machinery/door/airlock/secure{name = "AI Core Access"; req_access_txt = "16"},/obj/effect/decal/warning_stripes{icon_state = "E-corner"},/obj/effect/decal/warning_stripes{icon_state = "W-corner"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"bex" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/camera{c_tag = "AI Chamber South-1"; dir = 1; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bey" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
+"bex" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/camera{c_tag = "AI Chamber South-1"; dir = 1; network = "Command"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bey" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bez" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"beA" = (/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/hop)
"beB" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/secure_closet/hop,/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -3182,10 +3182,10 @@
"bjj" = (/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/plating,/area/maintenance/port)
"bjk" = (/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)
"bjl" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/lattice,/turf/space,/area)
-"bjm" = (/obj/machinery/turret{dir = 4; id = "upload"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
-"bjn" = (/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bjm" = (/obj/machinery/turret{dir = 4; id = "upload"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bjn" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjo" = (/obj/effect/decal/warning_stripes{icon_state = "E-corner"},/obj/effect/decal/warning_stripes{icon_state = "W-corner"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"bjp" = (/obj/machinery/turret{dir = 8; id = "upload"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bjp" = (/obj/machinery/turret{dir = 8; id = "upload"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bjq" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/bridge/meeting_room)
"bjr" = (/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)
"bjs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/bridge/meeting_room)
@@ -3249,12 +3249,12 @@
"bky" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/teleporter)
"bkz" = (/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)
"bkA" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
-"bkB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "AI Upload"; dir = 4; network = "Command"},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bkB" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera{c_tag = "AI Upload"; dir = 4; network = "Command"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bkC" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/warning_stripes{icon_state = "SE-in"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bkD" = (/obj/effect/decal/warning_stripes{icon_state = "N"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bkE" = (/obj/effect/decal/warning_stripes{icon_state = "NW-out"},/obj/effect/decal/warning_stripes{icon_state = "NE-out"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bkF" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/effect/decal/warning_stripes{icon_state = "SW-in"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"bkG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/oil,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/grid,/area/turret_protected/ai_upload)
+"bkG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/effect/decal/cleanable/oil,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bkH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload)
"bkI" = (/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)
"bkJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/bridge/meeting_room)
@@ -4784,10 +4784,10 @@
"bNZ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/optable,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bOa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bOb" = (/obj/structure/table,/obj/item/weapon/circular_saw,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"bOc" = (/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)
-"bOd" = (/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bOe" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "Research"},/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
-"bOf" = (/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)
+"bOc" = (/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)
+"bOd" = (/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bOe" = (/obj/machinery/camera{c_tag = "Server Room"; dir = 2; network = "Research"},/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bOf" = (/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)
"bOg" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/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"})
"bOh" = (/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"})
"bOi" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/machinery/requests_console{department = "Xenobiology"; departmentType = 0; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/toxins/xenobiology)
@@ -4865,8 +4865,8 @@
"bPC" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"bPD" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/apmaint)
"bPE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/assembly/chargebay)
-"bPF" = (/turf/simulated/floor/grid,/area/assembly/chargebay)
-"bPG" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bPF" = (/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
+"bPG" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bPH" = (/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/assembly/chargebay)
"bPI" = (/turf/simulated/floor,/area/assembly/chargebay)
"bPJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/assembly/chargebay)
@@ -4895,9 +4895,9 @@
"bQg" = (/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Observation Shutters"; name = "Observation Shutters"; opacity = 0},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/medical/surgery)
"bQh" = (/obj/structure/table,/obj/item/weapon/retractor,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bQi" = (/obj/machinery/requests_console{department = "Operating Theatre"; departmentType = 0; name = "OR RC"; pixel_x = 30; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"bQj" = (/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)
+"bQj" = (/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)
"bQk" = (/obj/machinery/alarm/server{dir = 1; pixel_y = -22},/turf/simulated/floor{icon_state = "dark"},/area/toxins/server)
-"bQl" = (/obj/machinery/message_server,/turf/simulated/floor/grid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
+"bQl" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/toxins/server)
"bQm" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bQn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division"})
"bQo" = (/obj/machinery/shieldwallgen{req_access = list(55)},/obj/structure/cable,/turf/simulated/floor/plating,/area/toxins/xenobiology)
@@ -4915,7 +4915,7 @@
"bQA" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1},/turf/simulated/floor,/area/assembly/chargebay)
"bQB" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plating,/area/assembly/chargebay)
"bQC" = (/turf/simulated/floor/mech_bay_recharge_floor{dir = 8},/area/assembly/chargebay)
-"bQD" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bQD" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bQE" = (/obj/machinery/door/poddoor{id = "Skynet_launch"; name = "Recharge Bay"; req_access_txt = "22"},/turf/simulated/floor,/area/assembly/chargebay)
"bQF" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/hallway/primary/aft)
"bQG" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/aft)
@@ -5053,7 +5053,7 @@
"bTi" = (/obj/effect/sign/securearea{name = "EXTERNAL AIRLOCK"; desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; pixel_x = -1},/turf/simulated/wall,/area/maintenance/asmaint2)
"bTj" = (/turf/simulated/wall,/area/maintenance/aft)
"bTk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/camera{c_tag = "Assembly Line Maintenance"; dir = 8},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/apmaint)
-"bTl" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/grid,/area/assembly/chargebay)
+"bTl" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bTm" = (/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor,/area/assembly/chargebay)
"bTn" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass/glass_research{name = "Robotics Assembly Line"; req_access_txt = "29"},/turf/simulated/floor,/area/assembly/chargebay)
"bTo" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/crowbar,/turf/simulated/floor,/area/hallway/primary/aft)
@@ -7037,11 +7037,11 @@
"cFq" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
"cFr" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"cFs" = (/obj/machinery/camera{c_tag = "Red Team"; network = "Thunderdome"; pixel_x = 11; pixel_y = -9},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
-"cFt" = (/turf/simulated/floor/grid,/area/tdome)
-"cFu" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/simulated/floor/grid,/area/tdome)
+"cFt" = (/turf/simulated/floor/bluegrid,/area/tdome)
+"cFu" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/simulated/floor/bluegrid,/area/tdome)
"cFv" = (/obj/machinery/camera{c_tag = "Green Team"; network = "Thunderdome"; pixel_x = 12; pixel_y = -10},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
-"cFw" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/grid,/area/tdome)
-"cFx" = (/obj/machinery/camera{c_tag = "Arena"; network = "Thunderdome"; pixel_x = 10},/turf/simulated/floor/grid,/area/tdome)
+"cFw" = (/obj/machinery/atmospherics/pipe/vent,/turf/simulated/floor/bluegrid,/area/tdome)
+"cFx" = (/obj/machinery/camera{c_tag = "Arena"; network = "Thunderdome"; pixel_x = 10},/turf/simulated/floor/bluegrid,/area/tdome)
"cFy" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/tdome)
"cFz" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1; icon_state = "manifold"; level = 2},/turf/simulated/floor,/area/tdome)
"cFA" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/turf/simulated/floor,/area/tdome)
@@ -7397,16 +7397,16 @@
"cMm" = (/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)
"cMn" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/space,/area/turret_protected/tcomwest)
"cMo" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 4},/turf/space,/area/turret_protected/tcomwest)
-"cMp" = (/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMr" = (/obj/machinery/power/apc{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)
-"cMs" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMt" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMu" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/camera{c_tag = "Central Compartment North"; dir = 2; network = "Tcomsat"},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMv" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/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)
-"cMw" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/light{dir = 1},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMx" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMy" = (/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)
+"cMp" = (/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMr" = (/obj/machinery/power/apc{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)
+"cMs" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMt" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMu" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/camera{c_tag = "Central Compartment North"; dir = 2; network = "Tcomsat"},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMv" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/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)
+"cMw" = (/obj/machinery/atmospherics/pipe/simple,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMx" = (/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMy" = (/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)
"cMz" = (/turf/space,/area/turret_protected/tcomeast)
"cMA" = (/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomeast)
"cMB" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable,/turf/simulated/floor/plating/airless,/area)
@@ -7414,11 +7414,11 @@
"cMD" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area)
"cME" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/space,/area/turret_protected/tcomwest)
"cMF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomwest)
-"cMG" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMH" = (/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMI" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cMJ" = (/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)
-"cMK" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMG" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMH" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMI" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cMJ" = (/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)
+"cMK" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cML" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/space,/area/turret_protected/tcomeast)
"cMM" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomeast)
"cMN" = (/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)
@@ -7457,8 +7457,8 @@
"cNu" = (/obj/structure/grille,/obj/structure/cable{icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/space,/area)
"cNv" = (/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)
"cNw" = (/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)
-"cNx" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cNy" = (/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)
+"cNx" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cNy" = (/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)
"cNz" = (/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)
"cNA" = (/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)
"cNB" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/space,/area/turret_protected/tcomeast)
@@ -7489,8 +7489,8 @@
"cOa" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area)
"cOb" = (/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)
"cOc" = (/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)
-"cOd" = (/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)
-"cOe" = (/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)
+"cOd" = (/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)
+"cOe" = (/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)
"cOf" = (/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)
"cOg" = (/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)
"cOh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/turret_protected/tcomeast)
@@ -7498,10 +7498,10 @@
"cOj" = (/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)
"cOk" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/wall/r_wall,/area)
"cOl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor/plating/airless,/area)
-"cOm" = (/obj/machinery/light,/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
-"cOn" = (/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)
-"cOo" = (/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)
-"cOp" = (/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,/turf/simulated/floor/grid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cOm" = (/obj/machinery/light,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
+"cOn" = (/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)
+"cOo" = (/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)
+"cOp" = (/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,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cOq" = (/obj/effect/sign/nosmoking_2,/turf/simulated/wall/r_wall,/area/tcommsat/chamber)
"cOr" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomwest)
"cOs" = (/obj/structure/window/reinforced,/turf/space,/area/turret_protected/tcomwest)