diff --git a/baystation12.dme b/baystation12.dme
index 766ffdcf4a1..bf03bdb5979 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -511,7 +511,6 @@
#include "code\game\machinery\scanner.dm"
#include "code\game\machinery\seed_extractor.dm"
#include "code\game\machinery\shieldgen.dm"
-#include "code\game\machinery\sink.dm"
#include "code\game\machinery\Sleeper.dm"
#include "code\game\machinery\spaceheater.dm"
#include "code\game\machinery\status_display.dm"
@@ -787,6 +786,7 @@
#include "code\js\byjax.dm"
#include "code\js\menus.dm"
#include "code\modules\admin\admin.dm"
+#include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_memo.dm"
#include "code\modules\admin\admin_verbs.dm"
#include "code\modules\admin\banjob.dm"
@@ -851,6 +851,7 @@
#include "code\modules\clothing\head\hats.dm"
#include "code\modules\clothing\head\helmets.dm"
#include "code\modules\clothing\spacesuits\captain.dm"
+#include "code\modules\clothing\spacesuits\engineer.dm"
#include "code\modules\clothing\spacesuits\miscellaneous.dm"
#include "code\modules\clothing\spacesuits\ninja.dm"
#include "code\modules\clothing\spacesuits\rig.dm"
@@ -1078,6 +1079,7 @@
#include "code\modules\power\singularity\emitter.dm"
#include "code\modules\power\singularity\field_generator.dm"
#include "code\modules\power\singularity\generator.dm"
+#include "code\modules\power\singularity\investigate.dm"
#include "code\modules\power\singularity\singularity.dm"
#include "code\modules\power\singularity\particle_accelerator\particle.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index ae261a85ac1..9795644c3d2 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -312,7 +312,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/temp = null //Temporary storage area for a message offering the option to destroy the radio
var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself.
var/obj/item/device/radio/origradio = null
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
w_class = 2.0
item_state = "radio"
throwforce = 5
diff --git a/code/WorkInProgress/Wrongnumber/weldbackpack.dm b/code/WorkInProgress/Wrongnumber/weldbackpack.dm
index 637ba56d8dd..453e18eb410 100644
--- a/code/WorkInProgress/Wrongnumber/weldbackpack.dm
+++ b/code/WorkInProgress/Wrongnumber/weldbackpack.dm
@@ -1,7 +1,7 @@
/obj/item/weapon/weldpack
name = "Welding kit"
desc = "A heavy-duty, portable welding fluid carrier."
- flags = ONBACK
+ slot_flags = SLOT_BACK
icon = 'storage.dmi'
icon_state = "welderpack"
w_class = 4.0
diff --git a/code/WorkInProgress/virus2/antibodies.dm b/code/WorkInProgress/virus2/antibodies.dm
index 5c12beb9482..6495bb4d04d 100644
--- a/code/WorkInProgress/virus2/antibodies.dm
+++ b/code/WorkInProgress/virus2/antibodies.dm
@@ -44,8 +44,8 @@ var/global/list/ANTIGENS = list("[ANTIGEN_A]" = "A", "[ANTIGEN_B]" = "B", "[ANTI
icon_state = "health"
w_class = 2.0
item_state = "electronic"
- flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
-
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
/obj/item/device/antibody_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
if(! istype(M, /mob/living/carbon) || !M:antibodies)
diff --git a/code/defines/area/Space Station 13 areas.dm b/code/defines/area/Space Station 13 areas.dm
index ac22990acc0..eae208d1efb 100755
--- a/code/defines/area/Space Station 13 areas.dm
+++ b/code/defines/area/Space Station 13 areas.dm
@@ -103,8 +103,6 @@ proc/process_ghost_teleport_locs()
/*-----------------------------------------------------------------------------*/
/area/engine/
- name = "Engineering"
- icon_state = "engine"
/area/turret_protected/
@@ -848,6 +846,8 @@ proc/process_ghost_teleport_locs()
requires_power = 0//This area only covers the batteries and they deal with their own power
engineering
+ name = "Engineering"
+ icon_state = "engine"
engineering_break_room
name = "Engineering Break Room"
@@ -1068,7 +1068,7 @@ proc/process_ghost_teleport_locs()
icon_state = "surgery"
/area/medical/cryo
- name = "Cryo"
+ name = "Cryogenics"
icon_state = "cryo"
/area/medical/exam_room
@@ -1107,14 +1107,14 @@ proc/process_ghost_teleport_locs()
/area/security/armoury
name = "Armoury"
- icon_state = "security"
+ icon_state = "Warden"
/area/security/hos
name = "Head of Security's Office"
icon_state = "security"
/area/security/detectives_office
- name = "Detectives Office"
+ name = "Detective's Office"
icon_state = "detective"
/area/security/range
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 9a03044210b..8deb4de7115 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -423,13 +423,27 @@
var/burning = null
var/hitsound = null
var/w_class = 3.0
- var/protective_temperature = 0 // Placing this here to avoid runtime errors, due to tiny items being allowed on ears and being queried for this variable
flags = FPRINT | TABLEPASS
+ var/slot_flags = 0 //This is used to determine on which slots an item can fit.
pass_flags = PASSTABLE
pressure_resistance = 50
// causeerrorheresoifixthis
var/obj/item/master = null
+ //Since any item can now be a piece of clothing, this has to be put here so all items share it.
+ var/see_face = 1.0
+ var/color = null
+ var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
+ var/protective_temperature = 0
+ var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
+ var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
+ var/permeability_coefficient = 1 // for chemicals/diseases
+ var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
+ var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
+ var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
+ var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ var/list/allowed = null //suit storage stuff.
+
/obj/item/device
icon = 'device.dmi'
@@ -515,7 +529,7 @@
density = 0
anchored = 1.0
layer = 2.3 //under pipes
- // flags = 64.0
+ // flags = CONDUCT
/obj/structure/lattice/New()
..()
diff --git a/code/defines/obj/clothing.dm b/code/defines/obj/clothing.dm
index 56fd9242b93..d41b065923c 100644
--- a/code/defines/obj/clothing.dm
+++ b/code/defines/obj/clothing.dm
@@ -4,19 +4,7 @@
name = "clothing"
// var/obj/item/clothing/master = null
- var/see_face = 1.0
- var/color = null
- var/body_parts_covered = 0 //see setup.dm for appropriate bit flags
-
- var/heat_transfer_coefficient = 1 //0 prevents all transfers, 1 is invisible
- var/gas_transfer_coefficient = 1 // for leaking gas from turf to mask and vice-versa (for masks right now, but at some point, i'd like to include space helmets)
- var/permeability_coefficient = 1 // for chemicals/diseases
- var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
- var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
- var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
-
- var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -28,6 +16,7 @@
/obj/item/clothing/belt
name = "belt"
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
*/
diff --git a/code/defines/obj/hydro.dm b/code/defines/obj/hydro.dm
index 3b44089a338..82d54ac17ef 100644
--- a/code/defines/obj/hydro.dm
+++ b/code/defines/obj/hydro.dm
@@ -1845,7 +1845,8 @@
name = "bottle of Plant-B-Gone"
icon_state = "plantbgone"
item_state = "plantbgone"
- flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
throw_speed = 2
@@ -1859,7 +1860,8 @@
name = "weed-spray"
icon_state = "weedspray"
item_state = "spray"
- flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
throw_speed = 2
@@ -1873,7 +1875,8 @@
name = "pest-spray"
icon_state = "pestspray"
item_state = "spray"
- flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ flags = TABLEPASS | OPENCONTAINER | FPRINT | USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
throw_speed = 2
diff --git a/code/defines/obj/storage.dm b/code/defines/obj/storage.dm
index e7aadffa708..c774527b02b 100644
--- a/code/defines/obj/storage.dm
+++ b/code/defines/obj/storage.dm
@@ -3,7 +3,8 @@
desc = "You wear this on your back and put items into it."
icon_state = "backpack"
w_class = 4.0
- flags = 259.0
+ flags = FPRINT|TABLEPASS
+ slot_flags = SLOT_BACK //ERROOOOO
max_w_class = 3
max_combined_w_class = 21
diff --git a/code/defines/obj/toy.dm b/code/defines/obj/toy.dm
index 985a683c849..5d8b1269635 100644
--- a/code/defines/obj/toy.dm
+++ b/code/defines/obj/toy.dm
@@ -129,7 +129,8 @@
icon = 'gun.dmi'
icon_state = "revolver"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
w_class = 3.0
g_amt = 10
m_amt = 10
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 2fa4a0ac927..8912ee0711b 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -12,7 +12,8 @@
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
icon = 'weapons.dmi'
icon_state = "riot"
- flags = FPRINT | TABLEPASS| CONDUCT| ONBACK
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BACK
force = 5.0
throwforce = 5.0
throw_speed = 1
@@ -31,7 +32,8 @@
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of Nar-Sie's followers."
icon_state = "nullrod"
item_state = "nullrod"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 10
throw_speed = 1
throw_range = 4
@@ -83,7 +85,8 @@
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
icon_state = "sord"
item_state = "sord"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 2
throwforce = 1
w_class = 3*/
@@ -93,7 +96,8 @@
desc = "BLOOD FOR THE BLOOD GOD." //SKULLS FOR THE SKULL THRONE. --SkyMarshal
icon_state = "claymore"
item_state = "claymore"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 40
throwforce = 10
w_class = 3
@@ -321,7 +325,8 @@
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT | OPENCONTAINER
+ flags = FPRINT | TABLEPASS| CONDUCT | OPENCONTAINER
+ slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
throw_range = 20
@@ -342,7 +347,8 @@
desc = "The police baton of the future."
icon_state = "stunbaton"
item_state = "baton"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 15
throwforce = 7
w_class = 3
@@ -356,7 +362,8 @@
desc = "The Captain is first and all other heads are last."
icon_state = "chainofcommand"
item_state = "chainofcommand"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 10
throwforce = 7
w_class = 3
@@ -381,7 +388,7 @@
origin_tech = "combat=3"
/obj/item/weapon/melee/energy/sword
- var/color
+ color
name = "energy sword"
desc = "It cuts AND cooks at the same time!"
icon_state = "sword0"
@@ -471,7 +478,7 @@
w_class = 1.0
throw_speed = 2
throw_range = 10
- var/color = "white"
+ color = "white"
/obj/item/weapon/bedsheet/blue
icon_state = "sheetblue"
@@ -675,6 +682,7 @@
item_state = "card-id"
var/access = list()
var/registered_name = null // The name registered_name on the card
+ slot_flags = SLOT_ID
var/pin = 0
var/money = 0
var/assignment = null
@@ -743,7 +751,8 @@
w_class = 2.0
throw_speed = 3
throw_range = 10
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
/obj/item/weapon/clipboard/notebook
name = "notebook"
@@ -756,7 +765,7 @@
icon = 'power.dmi'
icon_state = "coil_red"
var/amount = MAXCOIL
- var/color = "red"
+ color = "red"
desc = "A coil of power cable."
throwforce = 10
w_class = 2.0
@@ -764,7 +773,8 @@
throw_range = 5
m_amt = 50
g_amt = 20
- flags = TABLEPASS|USEDELAY|FPRINT|CONDUCT | ONBELT
+ flags = TABLEPASS | USEDELAY | FPRINT | CONDUCT
+ slot_flags = SLOT_BELT
item_state = "coil_red"
/obj/item/weapon/cable_coil/cut
@@ -797,7 +807,8 @@
desc = "Used to remove floor tiles."
icon = 'items.dmi'
icon_state = "crowbar"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
item_state = "wrench"
@@ -840,7 +851,7 @@
name = "dummy"
invisibility = 101.0
anchored = 1.0
- flags = 2.0
+ flags = TABLEPASS
/obj/item/weapon/extinguisher
name = "fire extinguisher"
@@ -953,7 +964,8 @@
gender = PLURAL
icon = 'items.dmi'
icon_state = "handcuff"
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
throwforce = 5
w_class = 2.0
throw_speed = 2
@@ -1016,12 +1028,12 @@
throw_range = 15
layer = 4
var/list/stamped
- var/see_face = 1
- var/body_parts_covered = HEAD
- var/heat_transfer_coefficient = 0.99
- var/gas_transfer_coefficient = 1
- var/permeability_coefficient = 0.99
- var/siemens_coefficient = 0.80
+ see_face = 1
+ body_parts_covered = HEAD
+ heat_transfer_coefficient = 0.99
+ gas_transfer_coefficient = 1
+ permeability_coefficient = 0.99
+ siemens_coefficient = 0.80
var/iteration
/obj/item/weapon/directions
@@ -1103,7 +1115,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
name = "pen"
icon = 'paper.dmi'
icon_state = "pen"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
throwforce = 0
w_class = 1.0
throw_speed = 7
@@ -1136,7 +1149,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
name = "banhammer"
icon = 'items.dmi'
icon_state = "toyhammer"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
throwforce = 0
w_class = 1.0
throw_speed = 7
@@ -1144,12 +1158,14 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
/obj/item/weapon/pen/sleepypen
desc = "It's a normal black ink pen with a sharp point."
- flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ slot_flags = SLOT_BELT
origin_tech = "materials=2;biotech=1;syndicate=7"
/obj/item/weapon/pen/paralysis
desc = "It's a normal black ink pen with a sharp point."
- flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ slot_flags = SLOT_BELT
origin_tech = "materials=2;biotech=1;syndicate=5"
/obj/item/weapon/rack_parts
@@ -1173,7 +1189,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
desc = "Used for screwing."
icon = 'items.dmi'
icon_state = "screwdriver"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 5.0
w_class = 1.0
throwforce = 5.0
@@ -1203,7 +1220,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
var/selfdestruct = 0.0
var/traitor_frequency = 0.0
var/obj/item/device/radio/origradio = null
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
item_state = "radio"
throwforce = 5
w_class = 2.0
@@ -1685,7 +1703,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
throw_speed = 7
throw_range = 15
m_amt = 60
- var/color = "cargo"
+ color = "cargo"
/obj/item/weapon/stamp/captain
name = "captain's rubber stamp"
@@ -1742,7 +1760,8 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
w_class = 1
throwforce = 2
var/cigarcount = 6
- flags = ONBELT | TABLEPASS */
+ flags = TABLEPASS
+ slot_flags = SLOT_BELT*/
/obj/item/weapon/mousetrap
@@ -2047,7 +2066,7 @@ eternal248: Found broken and buggy Z-levels 7-12, ended up leading to my discove
desc = "A sachet of flavoring, designed to be used with \"LiquidFood\" rations. The flavor is indeterminable."
icon = 'food_ingredients.dmi'
var/descriptor = "disturbingly beige" //Description shown to onlookers.
- var/color = "beige" //Color the icon should take on when this is applied. Also shown when it is mixed in.
+ color = "beige" //Color the icon should take on when this is applied. Also shown when it is mixed in.
var/newDesc = "It posesses a strange and unidentifiable taste. You try not to think to hard about it." //What gets pegged onto the description.
/obj/item/weapon/flavor/red
diff --git a/code/game/algorithm.dm b/code/game/algorithm.dm
index 2c43670ef38..1d99b589f98 100644
--- a/code/game/algorithm.dm
+++ b/code/game/algorithm.dm
@@ -77,6 +77,135 @@ proc/countJob(rank)
del(W)
return null
+/mob/living/carbon/human/proc/equip_to_appropriate_slot(obj/item/W)
+ if(!W)
+ return
+ if(!ishuman(src))
+ return
+
+ if(W.slot_flags & SLOT_BACK)
+ if(!src.back)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.back = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_ID)
+ if(!src.wear_id)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.wear_id = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_ICLOTHING)
+ if(!src.w_uniform)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.w_uniform = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_OCLOTHING)
+ if(!src.wear_suit)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.wear_suit = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_MASK)
+ if(!src.wear_mask)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.wear_mask = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_HEAD)
+ if(!src.head)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.head = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_FEET)
+ if(!src.shoes)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.shoes = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_GLOVES)
+ if(!src.gloves)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.gloves = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_EARS)
+ if(!src.l_ear)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.l_ear = W
+ update_clothing()
+ else if(!src.r_ear)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.r_ear = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_EYES)
+ if(!src.glasses)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.glasses = W
+ update_clothing()
+ return
+
+ if(W.slot_flags & SLOT_BELT)
+ if(!src.belt)
+ if( src.get_active_hand() == W )
+ src.u_equip(W)
+ src.belt = W
+ update_clothing()
+ return
+
+ //Suit storage
+ var/confirm
+ if (wear_suit)
+ if(wear_suit.allowed)
+ if (istype(W, /obj/item/device/pda) || istype(W, /obj/item/weapon/pen))
+ confirm = 1
+ if (is_type_in_list(W, wear_suit.allowed))
+ confirm = 1
+ if(confirm)
+ src.u_equip(W)
+ src.s_store = W
+ update_clothing()
+ return
+
+ //Pockets
+ if ( !( W.slot_flags & SLOT_DENYPOCKET ) )
+ if(!src.l_store)
+ if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
+ u_equip(W)
+ l_store = W
+ update_clothing()
+ return
+ if(!src.r_store)
+ if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
+ u_equip(W)
+ r_store = W
+ update_clothing()
+ return
+
+
/mob/living/carbon/human/proc/equip_if_possible(obj/item/W, slot, del_on_fail = 1) // since byond doesn't seem to have pointers, this seems like the best way to do this :/
//warning: icky code
var/equipped = 0
diff --git a/code/game/asteroid/device.dm b/code/game/asteroid/device.dm
index 7407f45f672..3472aecdd0e 100644
--- a/code/game/asteroid/device.dm
+++ b/code/game/asteroid/device.dm
@@ -2,7 +2,8 @@
name = "GPS"
icon = 'device.dmi'
icon_state = "pinoff"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
w_class = 2.0
item_state = "electronic"
throw_speed = 4
diff --git a/code/game/atom_procs.dm b/code/game/atom_procs.dm
index b8eddc87a6d..15b56014d13 100644
--- a/code/game/atom_procs.dm
+++ b/code/game/atom_procs.dm
@@ -77,7 +77,7 @@
/atom/proc/add_hiddenprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
- if (!( src.flags ) & 256)
+ if (!( src.flags ) & FPRINT)
return
if (ishuman(M))
var/mob/living/carbon/human/H = M
@@ -102,7 +102,7 @@
/atom/proc/add_fingerprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
- if (!( flags ) & 256)
+ if (!( src.flags ) & FPRINT)
return
//Smudge up dem prints some
for(var/P in fingerprints)
@@ -175,7 +175,7 @@
if (!istype(M.dna, /datum/dna))
M.dna = new /datum/dna(null)
M.check_dna()
- if (!( src.flags ) & 256)
+ if (!( src.flags ) & FPRINT)
return 0
if(!blood_DNA || !istype(blood_DNA, /list)) //if our list of DNA doesn't exist yet (or isn't a list) initialise it.
blood_DNA = list()
@@ -291,7 +291,7 @@
/atom/proc/clean_blood()
- if (!flags & 256)
+ if (!( src.flags ) & FPRINT)
return
if (blood_DNA )
diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm
index 71b46fe5bf5..3e7bc8a0977 100644
--- a/code/game/cellautomata.dm
+++ b/code/game/cellautomata.dm
@@ -85,13 +85,13 @@
src.load_motd()
src.load_rules()
src.load_admins()
+ investigate_reset()
if (config.usealienwhitelist)
load_alienwhitelist()
if (config.usewhitelist)
load_whitelist()
LoadBansjob()
src.update_status()
-
makepowernets()
sun = new /datum/sun()
@@ -196,4 +196,4 @@
/obj/effect/decal/point/point()
set src in oview()
set hidden = 1
- return
+ return
\ No newline at end of file
diff --git a/code/game/chemistry.dm b/code/game/chemistry.dm
index 2b3f5beecad..6f155a79fa7 100644
--- a/code/game/chemistry.dm
+++ b/code/game/chemistry.dm
@@ -11,7 +11,8 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | ONBELT | USEDELAY
+ flags = FPRINT | TABLEPASS | USEDELAY
+ slot_flags = SLOT_BELT
var/datum/effect/effect/system/bad_smoke_spread/smoke
/obj/item/weapon/mustardbomb
@@ -25,7 +26,8 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
var/datum/effect/effect/system/mustard_gas_spread/mustard_gas
/obj/item/weapon/smokebomb/New()
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index 1647eb7047f..a39f70939f9 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -3,11 +3,13 @@
desc = "An arcane weapon wielded by the followers of Nar-Sie"
icon_state = "cultblade"
item_state = "cultblade"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 40
throwforce = 10
+
/obj/item/clothing/head/culthood
name = "cult hood"
icon_state = "culthood"
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index c744d9fd1e3..42ae74c5cae 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -79,7 +79,7 @@
/obj/machinery/nuclearbomb/Topic(href, href_list)
..()
- if (usr.stat || usr.restrained())
+ if (!usr.canmove || usr.stat || usr.restrained())
return
if (!ishuman(usr))
usr << "\red You don't have the dexterity to do this!"
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index fa38c98f625..4c528f5f5ae 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -2,7 +2,8 @@
name = "pinpointer"
icon = 'device.dmi'
icon_state = "pinoff"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
w_class = 2.0
item_state = "electronic"
throw_speed = 4
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 8ace91fde73..802cfd68c1b 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -5,7 +5,8 @@
item_state = "electronic"
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
w_class = 1.0
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm
index 46ae426bc9d..be95effa811 100644
--- a/code/game/jobs/access.dm
+++ b/code/game/jobs/access.dm
@@ -1,84 +1,84 @@
/var/const
- access_security = 1
- access_brig = 2
- access_armory = 3
- access_forensics_lockers= 4
- access_medical = 5
- access_morgue = 6
- access_tox = 7
- access_tox_storage = 8
- access_genetics = 9
- access_engine = 10
- access_engine_equip= 11
- access_maint_tunnels = 12
- access_external_airlocks = 13
- access_emergency_storage = 14
- access_change_ids = 15
- access_ai_upload = 16
- access_teleporter = 17
- access_eva = 18
- access_heads = 19
- access_captain = 20
- access_all_personal_lockers = 21
- access_chapel_office = 22
- access_tech_storage = 23
- access_atmospherics = 24
- access_bar = 25
- access_janitor = 26
- access_crematorium = 27
- access_kitchen = 28
- access_robotics = 29
- access_rd = 30
- access_cargo = 31
- access_construction = 32
- access_chemistry = 33
- access_cargo_bot = 34
- access_hydroponics = 35
- access_manufacturing = 36
- access_library = 37
- access_lawyer = 38
- access_virology = 39
- access_cmo = 40
- access_qm = 41
- access_court = 42
- access_clown = 43
- access_mime = 44
- access_surgery = 45
- access_theatre = 46
- access_research = 47
- access_mining = 48
- access_mining_office = 49 //not in use
- access_mailsorting = 50
- access_mint = 51
- access_mint_vault = 52
- access_heads_vault = 53
- access_mining_station = 54
- access_xenobiology = 55
- access_ce = 56
- access_hop = 57
- access_hos = 58
- access_RC_announce = 59 //Request console announcements
- access_keycard_auth = 60 //Used for events which require at least two people to confirm them
- access_tcomsat = 61 // has access to the entire telecomms satellite / machinery
+/var/const/access_security = 1
+/var/const/access_brig = 2
+/var/const/access_armory = 3
+/var/const/access_forensics_lockers= 4
+/var/const/access_medical = 5
+/var/const/access_morgue = 6
+/var/const/access_tox = 7
+/var/const/access_tox_storage = 8
+/var/const/access_genetics = 9
+/var/const/access_engine = 10
+/var/const/access_engine_equip= 11
+/var/const/access_maint_tunnels = 12
+/var/const/access_external_airlocks = 13
+/var/const/access_emergency_storage = 14
+/var/const/access_change_ids = 15
+/var/const/access_ai_upload = 16
+/var/const/access_teleporter = 17
+/var/const/access_eva = 18
+/var/const/access_heads = 19
+/var/const/access_captain = 20
+/var/const/access_all_personal_lockers = 21
+/var/const/access_chapel_office = 22
+/var/const/access_tech_storage = 23
+/var/const/access_atmospherics = 24
+/var/const/access_bar = 25
+/var/const/access_janitor = 26
+/var/const/access_crematorium = 27
+/var/const/access_kitchen = 28
+/var/const/access_robotics = 29
+/var/const/access_rd = 30
+/var/const/access_cargo = 31
+/var/const/access_construction = 32
+/var/const/access_chemistry = 33
+/var/const/access_cargo_bot = 34
+/var/const/access_hydroponics = 35
+/var/const/access_manufacturing = 36
+/var/const/access_library = 37
+/var/const/access_lawyer = 38
+/var/const/access_virology = 39
+/var/const/access_cmo = 40
+/var/const/access_qm = 41
+/var/const/access_court = 42
+/var/const/access_clown = 43
+/var/const/access_mime = 44
+/var/const/access_surgery = 45
+/var/const/access_theatre = 46
+/var/const/access_research = 47
+/var/const/access_mining = 48
+/var/const/access_mining_office = 49 //not in use
+/var/const/access_mailsorting = 50
+/var/const/access_mint = 51
+/var/const/access_mint_vault = 52
+/var/const/access_heads_vault = 53
+/var/const/access_mining_station = 54
+/var/const/access_xenobiology = 55
+/var/const/access_ce = 56
+/var/const/access_hop = 57
+/var/const/access_hos = 58
+/var/const/access_RC_announce = 59 //Request console announcements
+/var/const/access_keycard_auth = 60 //Used for events which require at least two people to confirm them
+/var/const/access_tcomsat = 61 // has access to the entire telecomms satellite / machinery
//BEGIN CENTCOM ACCESS
/*Should leave plenty of room if we need to add more access levels.
Mostly for admin fun times.*/
- access_cent_general = 101//General facilities.
- access_cent_thunder = 102//Thunderdome.
- access_cent_specops = 103//Special Ops.
- access_cent_medical = 104//Medical/Research
- access_cent_living = 105//Living quarters.
- access_cent_storage = 106//Generic storage areas.
- access_cent_teleporter = 107//Teleporter.
- access_cent_creed = 108//Creed's office.
- access_cent_captain = 109//Captain's office/ID comp/AI.
+/var/const/access_cent_general = 101//General facilities.
+/var/const/access_cent_thunder = 102//Thunderdome.
+/var/const/access_cent_specops = 103//Special Ops.
+/var/const/access_cent_medical = 104//Medical/Research
+/var/const/access_cent_living = 105//Living quarters.
+/var/const/access_cent_storage = 106//Generic storage areas.
+/var/const/access_cent_teleporter = 107//Teleporter.
+/var/const/access_cent_creed = 108//Creed's office.
+/var/const/access_cent_captain = 109//Captain's office/ID comp/AI.
//The Syndicate
- access_syndicate = 150//General Syndicate Access
+/var/const/access_syndicate = 150//General Syndicate Access
//MONEY
- access_crate_cash = 200
+/var/const/access_crate_cash = 200
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
@@ -233,7 +233,7 @@
if("Chef")
return list(access_kitchen)
if("Roboticist")
- return list(access_robotics, access_tech_storage, access_maint_tunnels)
+ return list(access_robotics, access_tech_storage, access_maint_tunnels, access_morgue) //As a job that handles so many corpses, it makes sense for them to have morgue access.
if("Cargo Technician")
return list(access_maint_tunnels, access_cargo, access_cargo_bot, access_mailsorting)
if("Shaft Miner")
diff --git a/code/game/jobs/job/engineering.dm b/code/game/jobs/job/engineering.dm
index c3fbcfa9e6e..c3f09ff8ffb 100644
--- a/code/game/jobs/job/engineering.dm
+++ b/code/game/jobs/job/engineering.dm
@@ -91,7 +91,7 @@
H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/atmospheric_technician(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/black(H), H.slot_shoes)
- H.equip_if_possible(new /obj/item/device/pda/engineering(H), H.slot_l_store)
+ H.equip_if_possible(new /obj/item/device/pda/atmos(H), H.slot_l_store)
H.equip_if_possible(new /obj/item/weapon/storage/belt/utility/atmostech/(H), H.slot_belt)
if(H.backbag == 1)
H.equip_if_possible(new /obj/item/weapon/storage/box/engineer(H), H.slot_r_hand)
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 6c5aea84a7b..a12c54feece 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -87,10 +87,10 @@
if(H.backbag == 2) H.equip_if_possible(new /obj/item/weapon/storage/backpack(H), H.slot_back)
if(H.backbag == 3) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel(H), H.slot_back)
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_chem(H), H.slot_back)
- H.equip_if_possible(new /obj/item/device/radio/headset/headset_medsci(H), H.slot_ears)
+ H.equip_if_possible(new /obj/item/device/radio/headset/headset_med(H), H.slot_ears)
H.equip_if_possible(new /obj/item/clothing/under/rank/chemist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
- H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
+ H.equip_if_possible(new /obj/item/device/pda/chemist(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/chemist(H), H.slot_wear_suit)
return 1
@@ -115,7 +115,7 @@
if(H.backbag == 4) H.equip_if_possible(new /obj/item/weapon/storage/backpack/satchel_gen(H), H.slot_back)
H.equip_if_possible(new /obj/item/clothing/under/rank/geneticist(H), H.slot_w_uniform)
H.equip_if_possible(new /obj/item/clothing/shoes/white(H), H.slot_shoes)
- H.equip_if_possible(new /obj/item/device/pda/medical(H), H.slot_belt)
+ H.equip_if_possible(new /obj/item/device/pda/geneticist(H), H.slot_belt)
H.equip_if_possible(new /obj/item/clothing/suit/storage/labcoat/genetics(H), H.slot_wear_suit)
H.equip_if_possible(new /obj/item/device/flashlight/pen(H), H.slot_s_store)
return 1
diff --git a/code/game/machinery/pipe/pipe_dispenser.dm b/code/game/machinery/pipe/pipe_dispenser.dm
index 20323f858ea..53365eea928 100644
--- a/code/game/machinery/pipe/pipe_dispenser.dm
+++ b/code/game/machinery/pipe/pipe_dispenser.dm
@@ -44,7 +44,7 @@
/obj/machinery/pipedispenser/Topic(href, href_list)
if(..())
return
- if(unwrenched)
+ if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
usr << browse(null, "window=pipedispenser")
return
usr.machine = src
@@ -135,6 +135,9 @@
usr.machine = src
src.add_fingerprint(usr)
if(href_list["dmake"])
+ if(unwrenched || !usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr))
+ usr << browse(null, "window=pipedispenser")
+ return
if(!wait)
var/p_type = text2num(href_list["dmake"])
var/obj/structure/disposalconstruct/C = new (src.loc)
diff --git a/code/game/machinery/sink.dm b/code/game/machinery/sink.dm
deleted file mode 100644
index e89b11828dd..00000000000
--- a/code/game/machinery/sink.dm
+++ /dev/null
@@ -1,151 +0,0 @@
-/obj/machinery/sink
- name = "sink"
- icon = 'device.dmi'
- icon_state = "sink"
- desc = "A sink used for washing one's hands and face."
- anchored = 1
- var/busy = 0 //Something's being washed at the moment
- var/mode = 0 //0 == fill, 1 == pour
-
-
- New()
- ..()
- verbs += /obj/machinery/sink/proc/mode_pour
-
- attack_hand(mob/M as mob)
- if(isrobot(M) || isAI(M))
- return
-
- if(busy)
- M << "\red Someone's already washing something here."
- return
- M << "\blue You start washing up."
-
- busy = 1
- if(do_after(M,40))
- M.clean_blood()
- if(istype(M, /mob/living/carbon))
- var/mob/living/carbon/C = M
- C.clean_blood()
- /*
- if(C.r_hand)
- C.r_hand.clean_blood() // The hand you attack with is empty anyway, the other one should not be washed while doing this.
- if(C.l_hand)
- C.l_hand.clean_blood()
-
- if(C.wear_mask)
- C.wear_mask.clean_blood() //- NOPE, Washing machine -Errorage
- */
- if(istype(M, /mob/living/carbon/human))
- /*if(C:w_uniform)
- C:w_uniform.clean_blood() //- NOPE, Washing machine -Errorage
- if(C:wear_suit)
- C:wear_suit.clean_blood() //- NOPE, Washing machine -Errorage
- if(C:shoes)
- C:shoes.clean_blood()*/ //- NOPE, Washing machine -Errorage
- if(C:gloves)
- C:gloves.clean_blood()
- /*if(C:head)
- C:head.clean_blood()*/ //- NOPE, Washing machine -Errorage
- for(var/mob/V in viewers(src, null))
- V.show_message(text("\blue [M] washes up using \the [src]."))
- busy = 0
-
- proc/mode_pour()
- set name = "Mode -> Pour"
- set category = "Object"
- set src in oview(1)
-
- mode = 1
- verbs -= /obj/machinery/sink/proc/mode_pour
- verbs += /obj/machinery/sink/proc/mode_fill
- usr << "You will now pour reagents down \the [src]."
-
- proc/mode_fill()
- set name = "Mode -> Fill"
- set category = "Object"
- set src in oview(1)
-
- mode = 0
- verbs -= /obj/machinery/sink/proc/mode_fill
- verbs += /obj/machinery/sink/proc/mode_pour
- usr << "You will now fill your container from the faucet."
-
- attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(busy)
- user << "\red Someone's already washing something here."
- return
-
- if (istype(O, /obj/item/weapon/reagent_containers/glass/bucket))
- O:reagents.add_reagent("water", 70)
- user.visible_message( \
- "\blue [user] fills the [O] using the [src].", \
- "\blue You fill the [O] using the [src].")
- return
-
- if (istype(O, /obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks))
- if(!mode)
- // fill
- if(O.reagents.total_volume < O.reagents.maximum_volume)
- O:reagents.add_reagent("water", 10)
- user.visible_message( \
- "\blue [user] fills the [O] using the [src].", \
- "\blue You fill the [O] using the [src].")
- else
- user.visible_message( \
- "\blue [user] spills water out of the overflowing [O] into the [src].", \
- "\blue You spill water out of the overflowing [O] into the [src].")
- else
- // pour
- if(O.reagents.total_volume > 0)
- O.reagents.clear_reagents()
- user.visible_message( \
- "\blue [user] pours the contents of \the [O] into \the [src].", \
- "\blue You pour the contents of \the [O] into \the [src].")
- else
- user << "\The [O] is empty."
- return
- else if (istype(O, /obj/item/weapon/melee/baton))
- var/obj/item/weapon/melee/baton/B = O
- if (B.charges > 0 && B.status == 1)
- flick("baton_active", src)
- user.Stun(10)
- user.stuttering = 10
- user.Weaken(10)
- if(isrobot(user))
- var/mob/living/silicon/robot/R = user
- R.cell.charge -= 20
- else
- B.charges--
- user.visible_message( \
- "[user] was stunned by his wet [O].", \
- "\red You have wet \the [O], it shocks you!")
- return
-
- var/obj/item/I = O
- if(!I || !istype(I,/obj/item)) return
-
- usr << "\blue You start washing up."
-
- busy = 1
- if(do_after(user,40))
- if(!I) return //Item's been destroyed while washing
-
- O.clean_blood()
- user.visible_message( \
- "\blue [user] washes \a [I] using \the [src].", \
- "\blue You wash \a [I] using \the [src].")
- busy = 0
-
- shower
- name = "Shower"
- desc = "This is a shower. Useful for cleaning."
- icon_state = "shower"
-
- kitchen
- name = "Kitchen Sink"
- icon_state = "sink_alt"
-
- kitchen2
- name = "Kitchen Sink"
- icon_state = "sink_alt2"
diff --git a/code/game/objects/alien/resin.dm b/code/game/objects/alien/resin.dm
index fafae271222..18b0e9a6d58 100644
--- a/code/game/objects/alien/resin.dm
+++ b/code/game/objects/alien/resin.dm
@@ -50,7 +50,7 @@
/obj/effect/alien/resin/hitby(AM as mob|obj)
..()
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [src] was hit by [AM]."), 1)
+ O.show_message("\red [src] was hit by [AM].", 1)
var/tforce = 0
if(ismob(AM))
tforce = 10
@@ -64,9 +64,9 @@
/obj/effect/alien/resin/attack_hand()
if ((usr.mutations & HULK))
- usr << text("\blue You easily destroy the [name].")
+ usr << "\blue You easily destroy the [name]."
for(var/mob/O in oviewers(src))
- O.show_message(text("\red [] destroys the [name]!", usr), 1)
+ O.show_message("\red [usr] destroys the [name]!", 1)
health = 0
healthcheck()
return
@@ -77,15 +77,15 @@
/obj/effect/alien/resin/attack_alien()
if (islarva(usr))//Safety check for larva. /N
return
- usr << text("\green You claw at the [name].")
+ usr << "\green You claw at the [name]."
for(var/mob/O in oviewers(src))
- O.show_message(text("\red [] claws at the resin!", usr), 1)
+ O.show_message("\red [usr] claws at the resin!", 1)
playsound(loc, 'attackblob.ogg', 100, 1)
health -= rand(10, 20)
if(health <= 0)
- usr << text("\green You slice the [name] to pieces.")
+ usr << "\green You slice the [name] to pieces."
for(var/mob/O in oviewers(src))
- O.show_message(text("\red [] slices the [name] apart!", usr), 1)
+ O.show_message("\red [usr] slices the [name] apart!", 1)
healthcheck()
return
diff --git a/code/game/objects/closets/extinguisher.dm b/code/game/objects/closets/extinguisher.dm
index 1d503333d7f..82dc7d88aa0 100644
--- a/code/game/objects/closets/extinguisher.dm
+++ b/code/game/objects/closets/extinguisher.dm
@@ -1,4 +1,4 @@
-/obj/structure/closet/extinguisher
+/obj/structure/extinguisher_cabinet
name = "extinguisher cabinet"
desc = "A small wall mounted cabinet designed to hold a fire extinguisher."
icon = 'closet.dmi'
@@ -6,10 +6,11 @@
anchored = 1
density = 0
var/obj/item/weapon/extinguisher/has_extinguisher = new/obj/item/weapon/extinguisher
+ var/opened = 0
-/obj/structure/closet/extinguisher/attackby(var/obj/item/O as obj, var/mob/user as mob)
+/obj/structure/extinguisher_cabinet/attackby(var/obj/item/O as obj, var/mob/user as mob)
if (isrobot(usr))
return
if (istype(O, /obj/item/weapon/extinguisher))
@@ -26,7 +27,7 @@
-/obj/structure/closet/extinguisher/attack_hand(mob/user as mob)
+/obj/structure/extinguisher_cabinet/attack_hand(mob/user as mob)
if(has_extinguisher)
user.put_in_hand(has_extinguisher)
has_extinguisher = null
@@ -38,13 +39,13 @@
-/obj/structure/closet/extinguisher/attack_paw(mob/user as mob)
+/obj/structure/extinguisher_cabinet/attack_paw(mob/user as mob)
attack_hand(user)
return
-/obj/structure/closet/extinguisher/update_icon()
+/obj/structure/extinguisher_cabinet/update_icon()
if(!opened)
icon_state = "extinguisher_closed"
return
diff --git a/code/game/objects/closets/secure/cargo.dm b/code/game/objects/closets/secure/cargo.dm
index a366ebf9ee2..638bc2ffd66 100644
--- a/code/game/objects/closets/secure/cargo.dm
+++ b/code/game/objects/closets/secure/cargo.dm
@@ -15,7 +15,7 @@
new /obj/item/clothing/shoes/black(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/clothing/gloves/black(src)
- new /obj/item/weapon/cartridge/quartermaster(src)
+// new /obj/item/weapon/cartridge/quartermaster(src)
return
/obj/structure/closet/secure_closet/qm_personal
diff --git a/code/game/objects/closets/secure/engineering.dm b/code/game/objects/closets/secure/engineering.dm
index aed317be772..38c567421d3 100644
--- a/code/game/objects/closets/secure/engineering.dm
+++ b/code/game/objects/closets/secure/engineering.dm
@@ -118,7 +118,7 @@
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/storage/belt/utility/full(src)
new /obj/item/weapon/storage/toolbox/mechanical(src)
- new /obj/item/weapon/cartridge/engineering(src)
+// new /obj/item/weapon/cartridge/engineering(src)
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/clothing/suit/hazardvest(src)
new /obj/item/clothing/mask/gas(src)
diff --git a/code/game/objects/closets/secure/medical.dm b/code/game/objects/closets/secure/medical.dm
index 49cb6f466e5..b9829af6ad4 100644
--- a/code/game/objects/closets/secure/medical.dm
+++ b/code/game/objects/closets/secure/medical.dm
@@ -86,7 +86,7 @@
new /obj/item/clothing/under/rank/medical/green(src)
if ("purple")
new /obj/item/clothing/under/rank/medical/purple(src)
- new /obj/item/weapon/cartridge/medical(src)
+// new /obj/item/weapon/cartridge/medical(src)
new /obj/item/device/radio/headset/headset_med(src)
return
diff --git a/code/game/objects/closets/secure/personal.dm b/code/game/objects/closets/secure/personal.dm
index 508a80cabb7..86bc423f0b6 100644
--- a/code/game/objects/closets/secure/personal.dm
+++ b/code/game/objects/closets/secure/personal.dm
@@ -72,7 +72,7 @@
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 3))
- O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
+ O.show_message("\blue The locker has been sliced open by [user] with an energy blade!", 1, "\red You hear metal being sliced and sparks flying.", 2)
else
user << "\red Access Denied"
return
diff --git a/code/game/objects/closets/secure/secure_closets.dm b/code/game/objects/closets/secure/secure_closets.dm
index 35c45401c1b..7abcc6ae059 100644
--- a/code/game/objects/closets/secure/secure_closets.dm
+++ b/code/game/objects/closets/secure/secure_closets.dm
@@ -56,15 +56,15 @@
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 3))
- O.show_message(text("\blue The locker has been sliced open by [] with an energy blade!", user), 1, text("\red You hear metal being sliced and sparks flying."), 2)
+ O.show_message("\blue The locker has been sliced open by [user] with an energy blade!", 1, "\red You hear metal being sliced and sparks flying.", 2)
else
for(var/mob/O in viewers(user, 3))
- O.show_message(text("\blue The locker has been broken by [] with an electromagnetic card!", user), 1, text("You hear a faint electrical spark."), 2)
+ O.show_message("\blue The locker has been broken by [user] with an electromagnetic card!", 1, "You hear a faint electrical spark.", 2)
else if(src.allowed(user))
src.locked = !src.locked
for(var/mob/O in viewers(user, 3))
if((O.client && !( O.blinded )))
- O << text("\blue The locker has been []locked by [].", (src.locked ? null : "un"), user)
+ O << "\blue The locker has been [src.locked ? null : "un"]locked by [user]."
if(src.locked)
src.icon_state = src.icon_locked
else
diff --git a/code/game/objects/closets/secure/security.dm b/code/game/objects/closets/secure/security.dm
index c05e41d40eb..c8129152ed0 100644
--- a/code/game/objects/closets/secure/security.dm
+++ b/code/game/objects/closets/secure/security.dm
@@ -107,7 +107,7 @@
new /obj/item/device/flash(B)
new /obj/item/device/pda/security(src)
new /obj/item/clothing/suit/armor/vest(src)
- new /obj/item/weapon/cartridge/security(src)
+// new /obj/item/weapon/cartridge/security(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/flashbang_kit(src)
new /obj/item/weapon/melee/baton(src)
@@ -140,7 +140,7 @@
new /obj/item/clothing/suit/armor/vest(src)
new /obj/item/clothing/suit/storage/gearharness(src)
new /obj/item/clothing/head/helmet(src)
- new /obj/item/weapon/cartridge/security(src)
+// new /obj/item/weapon/cartridge/security(src)
new /obj/item/device/pda/security(src)
new /obj/item/device/radio/headset/headset_sec(src)
new /obj/item/weapon/storage/belt/security(src)
diff --git a/code/game/objects/devices/PDA/PDA.dm b/code/game/objects/devices/PDA/PDA.dm
index afde626c9ce..9e430951c8b 100755
--- a/code/game/objects/devices/PDA/PDA.dm
+++ b/code/game/objects/devices/PDA/PDA.dm
@@ -8,7 +8,8 @@
icon_state = "pda"
item_state = "electronic"
w_class = 1.0
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_ID | SLOT_BELT
//Main variables
var/owner = null
@@ -134,8 +135,6 @@
/obj/item/device/pda/roboticist
icon_state = "pda-robot"
- desc = "A portable microcomputer by Thinktronic Systems, LTD. This is model is a special edition with a transparent case."
- note = "Congratulations, your station has chosen the Thinktronic 5230 Personal Data Assistant Deluxe Special Turbo Edition!"
/obj/item/device/pda/librarian
icon_state = "pda-libb"
@@ -143,6 +142,16 @@
note = "Congratulations, your station has chosen the Thinktronic 5290 WGW-11 Series E-reader and Personal Data Assistant!"
silent = 1 //Quiet in the library!
+/obj/item/device/pda/atmos
+ icon_state = "pda-atmo"
+
+/obj/item/device/pda/chemist
+ default_cartridge = /obj/item/weapon/cartridge/chemistry
+ icon_state = "pda-chem"
+
+/obj/item/device/pda/geneticist
+ icon_state = "pda-gene"
+
/*
* The Actual PDA
*/
diff --git a/code/game/objects/devices/PDA/cart.dm b/code/game/objects/devices/PDA/cart.dm
index a24ce18dab4..fd23ad3254f 100644
--- a/code/game/objects/devices/PDA/cart.dm
+++ b/code/game/objects/devices/PDA/cart.dm
@@ -41,6 +41,11 @@
icon_state = "cart-m"
access_medical = 1
+ chemistry
+ name = "ChemWhiz Cartridge"
+ icon_state = "cart-chem"
+ access_reagent_scanner = 1
+
security
name = "R.O.B.U.S.T. Cartridge"
icon_state = "cart-s"
@@ -91,7 +96,7 @@
name = "Signal Ace 2"
desc = "Complete with integrated radio signaler!"
icon_state = "cart-tox"
- access_reagent_scanner = 1
+// access_reagent_scanner = 1
New()
..()
@@ -154,7 +159,7 @@
name = "Signal Ace DELUXE"
icon_state = "cart-rd"
access_status_display = 1
- access_reagent_scanner = 1
+// access_reagent_scanner = 1
New()
..()
diff --git a/code/game/objects/devices/aicard.dm b/code/game/objects/devices/aicard.dm
index ea733eab5b7..f81d3e2089e 100644
--- a/code/game/objects/devices/aicard.dm
+++ b/code/game/objects/devices/aicard.dm
@@ -4,7 +4,8 @@
icon_state = "aicard" // aicard-full
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
var/flush = null
origin_tech = "programming=4;materials=4"
diff --git a/code/game/objects/devices/chameleonproj.dm b/code/game/objects/devices/chameleonproj.dm
index 0526ec5ff29..c8e7ff754c0 100644
--- a/code/game/objects/devices/chameleonproj.dm
+++ b/code/game/objects/devices/chameleonproj.dm
@@ -42,7 +42,8 @@
/obj/item/device/chameleon
name = "chameleon-projector"
icon_state = "shield0"
- flags = FPRINT | TABLEPASS| CONDUCT | USEDELAY | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
item_state = "electronic"
throwforce = 5.0
throw_speed = 1
diff --git a/code/game/objects/devices/flashlight.dm b/code/game/objects/devices/flashlight.dm
index 3f3ce72861a..e7101d2bd41 100644
--- a/code/game/objects/devices/flashlight.dm
+++ b/code/game/objects/devices/flashlight.dm
@@ -6,7 +6,8 @@
icon_state = "flight0"
w_class = 2
item_state = "flight"
- flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
m_amt = 50
g_amt = 20
var/on = 0
diff --git a/code/game/objects/devices/paicard.dm b/code/game/objects/devices/paicard.dm
index ff7e2ef5dba..e13b7c605ff 100644
--- a/code/game/objects/devices/paicard.dm
+++ b/code/game/objects/devices/paicard.dm
@@ -4,7 +4,8 @@
icon_state = "pai"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
origin_tech = "programming=2"
var/obj/item/device/radio/radio
var/looking_for_personality = 0
diff --git a/code/game/objects/devices/scanners.dm b/code/game/objects/devices/scanners.dm
index a00f40089b8..9f8398495e2 100644
--- a/code/game/objects/devices/scanners.dm
+++ b/code/game/objects/devices/scanners.dm
@@ -14,7 +14,8 @@ MASS SPECTROMETER
desc = "A terahertz-ray emitter and scanner used to detect underfloor objects such as cables and pipes."
icon_state = "t-ray0"
var/on = 0
- flags = FPRINT|ONBELT|TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
w_class = 2
item_state = "electronic"
m_amt = 150
@@ -67,8 +68,8 @@ MASS SPECTROMETER
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
- flags = FPRINT | TABLEPASS | ONBELT | CONDUCT | USEDELAY
-
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
attackby(obj/item/weapon/f_card/W as obj, mob/user as mob)
..()
@@ -225,7 +226,8 @@ MASS SPECTROMETER
icon_state = "health"
item_state = "analyzer"
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
- flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 1.0
throw_speed = 5
@@ -234,64 +236,64 @@ MASS SPECTROMETER
origin_tech = "magnets=1;biotech=1"
var/mode = 1;
- proc
- analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
- var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
- if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
- user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
- user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
+/obj/item/device/healthanalyzer/proc/analyze_health_less_info(mob/living/carbon/M as mob, mob/user as mob)
+ var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss())))
+ if((M.reagents && M.reagents.has_reagent("zombiepowder")) || (M.changeling && M.changeling.changeling_fakedeath))
+ user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, "dead"), 1)
+ user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", fake_oxy < 50 ? "\red [fake_oxy]" : fake_oxy , M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
+ else
+ user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
+ user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
+ user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
+ user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
+ if(mode == 1 && istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ var/list/damaged = H.get_damaged_organs(1,1)
+ user.show_message("\blue Localized Damage, Brute/Burn:",1)
+ if(length(damaged)>0)
+ for(var/datum/organ/external/org in damaged)
+ user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
+ else
+ user.show_message("\blue \t Limbs are OK.",1)
+
+ if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
+ user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
+ else
+ user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
+ if (M.getCloneLoss())
+ user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
+ for(var/datum/disease/D in M.viruses)
+ if(!D.hidden[SCANNER])
+ user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
+ if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
+ user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
+ if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
+ user.show_message(text("\red Subject is brain dead."), 1)
+ else if (M.getBrainLoss() >= 60)
+ user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
+ else if (M.getBrainLoss() >= 10)
+ user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
+ if (M.virus2 || M.reagents.reagent_list.len > 0)
+ user.show_message(text("\red Unknown substance detected in blood."), 1)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ for(var/name in H.organs)
+ var/datum/organ/external/e = H.organs[name]
+ if(e.broken)
+ user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
+ break
+ if(ishuman(M))
+ if(M:vessel)
+ var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
+ var/blood_percent = blood_volume / 560
+ blood_percent *= 100
+ if(blood_volume <= 448)
+ user.show_message("\red Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
+ else if(blood_volume <= 336)
+ user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
else
- user.show_message(text("\blue Analyzing Results for []:\n\t Overall Status: []", M, (M.stat > 1 ? "dead" : text("[]% healthy", M.health - M.halloss))), 1)
- user.show_message(text("\blue \t Damage Specifics: []-[]-[]-[]", M.getOxyLoss() > 50 ? "\red [M.getOxyLoss()]" : M.getOxyLoss(), M.getToxLoss() > 50 ? "\red [M.getToxLoss()]" : M.getToxLoss(), M.getFireLoss() > 50 ? "\red[M.getFireLoss()]" : M.getFireLoss(), M.getBruteLoss() > 50 ? "\red[M.getBruteLoss()]" : M.getBruteLoss()), 1)
- user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
- user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
- if(mode == 1 && istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- var/list/damaged = H.get_damaged_organs(1,1)
- user.show_message("\blue Localized Damage, Brute/Burn:",1)
- if(length(damaged)>0)
- for(var/datum/organ/external/org in damaged)
- user.show_message(text("\blue \t []: []\blue-[]",capitalize(org.getDisplayName()),(org.brute_dam > 0)?"\red [org.brute_dam]":0,(org.burn_dam > 0)?"\red [org.burn_dam]":0),1)
- else
- user.show_message("\blue \t Limbs are OK.",1)
- if((M.changeling && M.changeling.changeling_fakedeath) || (M.reagents && M.reagents.has_reagent("zombiepowder")))
- user.show_message(text("\blue [] | [] | [] | []", fake_oxy > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
- else
- user.show_message(text("\blue [] | [] | [] | []", M.getOxyLoss() > 50 ? "\red Severe oxygen deprivation detected\blue" : "Subject bloodstream oxygen level normal", M.getToxLoss() > 50 ? "\red Dangerous amount of toxins detected\blue" : "Subject bloodstream toxin level minimal", M.getFireLoss() > 50 ? "\red Severe burn damage detected\blue" : "Subject burn injury status O.K", M.getBruteLoss() > 50 ? "\red Severe anatomical damage detected\blue" : "Subject brute-force injury status O.K"), 1)
- if (M.getCloneLoss())
- user.show_message(text("\red Subject appears to have been imperfectly cloned."), 1)
- for(var/datum/disease/D in M.viruses)
- if(!D.hidden[SCANNER])
- user.show_message(text("\red Warning: [D.form] Detected\nName: [D.name].\nType: [D.spread].\nStage: [D.stage]/[D.max_stages].\nPossible Cure: [D.cure]"))
- if (M.reagents && M.reagents.get_reagent_amount("inaprovaline"))
- user.show_message(text("\blue Bloodstream Analysis located [M.reagents:get_reagent_amount("inaprovaline")] units of rejuvenation chemicals."), 1)
- if (M.getBrainLoss() >= 100 || istype(M, /mob/living/carbon/human) && M:brain_op_stage == 4.0)
- user.show_message(text("\red Subject is brain dead."), 1)
- else if (M.getBrainLoss() >= 60)
- user.show_message(text("\red Severe brain damage detected. Subject likely to have mental retardation."), 1)
- else if (M.getBrainLoss() >= 10)
- user.show_message(text("\red Significant brain damage detected. Subject may have had a concussion."), 1)
- if (M.virus2 || M.reagents.reagent_list.len > 0)
- user.show_message(text("\red Unknown substance detected in blood."), 1)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- for(var/name in H.organs)
- var/datum/organ/external/e = H.organs[name]
- if(e.broken)
- user.show_message(text("\red Bone fractures detected. Advanced scanner required for location."), 1)
- break
- if(ishuman(M))
- if(M:vessel)
- var/blood_volume = round(M:vessel.get_reagent_amount("blood"))
- var/blood_percent = blood_volume / 560
- blood_percent *= 100
- if(blood_volume <= 448)
- user.show_message("\red Warning: Blood Level LOW: [blood_percent]% [blood_volume]cl")
- else if(blood_volume <= 336)
- user.show_message("\red Warning: Blood Level CRITICAL: [blood_percent]% [blood_volume]cl")
- else
- user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
- return
+ user.show_message("\blue Blood Level Normal: [blood_percent]% [blood_volume]cl")
+ return
/obj/item/device/healthanalyzer/attack(mob/M as mob, mob/user as mob)
if ((user.mutations & CLUMSY || user.getBrainLoss() >= 60) && prob(50))
@@ -331,7 +333,8 @@ MASS SPECTROMETER
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
throw_range = 20
diff --git a/code/game/objects/effect_system.dm b/code/game/objects/effect_system.dm
index 1b449b6fc94..639b553821e 100644
--- a/code/game/objects/effect_system.dm
+++ b/code/game/objects/effect_system.dm
@@ -18,7 +18,7 @@ would spawn and follow the beaker, even if it is carried or thrown.
icon = 'effects.dmi'
icon_state = "extinguish"
var/life = 15.0
- flags = 2.0
+ flags = TABLEPASS
mouse_opacity = 0
/obj/effect/effect/smoke
diff --git a/code/game/objects/items/candle.dm b/code/game/objects/items/candle.dm
index 5cda2c423e7..d93e157d767 100644
--- a/code/game/objects/items/candle.dm
+++ b/code/game/objects/items/candle.dm
@@ -95,7 +95,8 @@
w_class = 1
throwforce = 2
var/candlecount = 5
- flags = ONBELT | TABLEPASS
+ flags = TABLEPASS
+ slot_flags = SLOT_BELT
/obj/item/weapon/candlepack/update_icon()
diff --git a/code/game/objects/items/clothing.dm b/code/game/objects/items/clothing.dm
index e52417e67da..7eb200596e4 100644
--- a/code/game/objects/items/clothing.dm
+++ b/code/game/objects/items/clothing.dm
@@ -434,10 +434,10 @@ THERMAL GLASSES
M.disabilities &= ~1
..()
-/obj/item/clothing/head/helmet/space/rig/engspace_helmet/attack_self()
+/obj/item/clothing/head/helmet/space/engineer/attack_self()
toggle()
-/obj/item/clothing/head/helmet/space/rig/engspace_helmet/verb/toggle()
+/obj/item/clothing/head/helmet/space/engineer/verb/toggle()
set category = "Object"
set name = "Toggle Helmet Visor"
if(usr.canmove && usr.stat != 2 && !usr.restrained())
@@ -445,34 +445,13 @@ THERMAL GLASSES
src.up = !src.up
src.see_face = !src.see_face
src.flags |= HEADCOVERSEYES
- icon_state = "engspace_helmet"
+ icon_state = "[initial(icon_state)]"
usr << "You toggle the reflective tint on."
else
src.up = !src.up
src.see_face = !src.see_face
src.flags &= ~HEADCOVERSEYES
- icon_state = "engspace_helmet_clear"
- usr << "You toggle the reflective tint off."
- usr.update_clothing()
-
-/obj/item/clothing/head/helmet/space/rig/cespace_helmet/attack_self()
- toggle()
-
-/obj/item/clothing/head/helmet/space/rig/cespace_helmet/verb/toggle()
- set category = "Object"
- set name = "Toggle Helmet Visor"
- if(usr.canmove && usr.stat != 2 && !usr.restrained())
- if(src.up)
- src.up = !src.up
- src.see_face = !src.see_face
- src.flags |= HEADCOVERSEYES
- icon_state = "cespace_helmet"
- usr << "You toggle the reflective tint on."
- else
- src.up = !src.up
- src.see_face = !src.see_face
- src.flags &= ~HEADCOVERSEYES
- icon_state = "cespace_helmet_clear"
+ icon_state = "[initial(icon_state)]_clear"
usr << "You toggle the reflective tint off."
usr.update_clothing()
diff --git a/code/game/objects/items/robot_parts.dm b/code/game/objects/items/robot_parts.dm
index fcc1df6dd60..169adde5b8e 100644
--- a/code/game/objects/items/robot_parts.dm
+++ b/code/game/objects/items/robot_parts.dm
@@ -3,7 +3,8 @@
icon = 'robot_parts.dmi'
item_state = "buildpipe"
icon_state = "blank"
- flags = FPRINT | ONBELT | TABLEPASS | CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm
index b2f6f24f6c7..627a2a5f849 100644
--- a/code/game/objects/items/trash.dm
+++ b/code/game/objects/items/trash.dm
@@ -61,7 +61,8 @@
desc = "A heavy-duty, no fun allowed trash bag."
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 25; //the number of trash it can carry.
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
w_class = 2.0
/obj/item/weapon/trashbag/update_icon()
@@ -91,6 +92,7 @@
if(contents.len < capacity) //slightly redundant, but it makes it prettier in the chatbox. -Pete
user << "\blue You pick up all the trash."
for(var/obj/item/O in get_turf(W))
+ if(istype(O, /obj/item/weapon/disk/nuclear)) continue //No nuke disks - Nodrak
if(contents.len < capacity)
if(O.w_class <= 2)
contents += O;
@@ -100,6 +102,7 @@
else
user << "\blue The bag is full!"
else
+ if(istype(W, /obj/item/weapon/disk/nuclear)) return //No nuke disks - Nodrak
if(contents.len < capacity)
contents += W;
else
diff --git a/code/game/objects/items/weapons/cameras.dm b/code/game/objects/items/weapons/cameras.dm
index 8acba217c74..0fc1ecb6255 100644
--- a/code/game/objects/items/weapons/cameras.dm
+++ b/code/game/objects/items/weapons/cameras.dm
@@ -42,7 +42,8 @@
icon_state = "camera"
item_state = "electropack"
w_class = 2.0
- flags = 466.0
+ flags = FPRINT | CONDUCT | USEDELAY | TABLEPASS
+ slot_flags = SLOT_BELT
m_amt = 2000
throwforce = 5
throw_speed = 4
@@ -51,7 +52,6 @@
var/pictures_left = 30
var/can_use = 1
-
/obj/item/weapon/photo
name = "photo"
icon = 'items.dmi'
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 899853e205e..d0463e41d72 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -65,7 +65,8 @@ ZIPPO
icon_state = "matchbox"
item_state = "zippo"
w_class = 1
- flags = ONBELT | TABLEPASS
+ flags = TABLEPASS
+ slot_flags = SLOT_BELT
var/matchcount = 10
w_class = 1.0
@@ -122,6 +123,7 @@ ZIPPO
var/lastHolder = null
var/smoketime = 300
var/butt_count = 5 //count of butt sprite variations
+
proc
light(var/flavor_text = "[usr] lights the [name].")
@@ -162,7 +164,6 @@ ZIPPO
processing_objects.Add(src)
-
process()
var/turf/location = get_turf(src)
src.smoketime--
@@ -251,6 +252,7 @@ ZIPPO
var/lastHolder = null
var/smoketime = 100
var/maxsmoketime = 100 //make sure this is equal to your smoketime
+
proc
light(var/flavor_text = "[usr] lights the [name].")
@@ -337,7 +339,8 @@ ZIPPO
item_state = "cigpacket"
w_class = 1
throwforce = 2
- flags = ONBELT | TABLEPASS
+ flags = TABLEPASS
+ slot_flags = SLOT_BELT
var/cigcount = 6
@@ -381,7 +384,8 @@ ZIPPO
var/icon_off = "lighter-g"
w_class = 1
throwforce = 4
- flags = ONBELT | TABLEPASS | CONDUCT
+ flags = TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
var/lit = 0
/obj/item/weapon/lighter/zippo
@@ -409,16 +413,16 @@ ZIPPO
src.item_state = icon_on
if( istype(src,/obj/item/weapon/lighter/zippo) )
for(var/mob/O in viewers(user, null))
- O.show_message(text("\red Without even breaking stride, [] flips open and lights [] in one smooth movement.", user, src), 1)
+ O.show_message(text("\red Without even breaking stride, \the [] flips open and lights \the [] in one smooth movement.", user, src), 1)
else
if(prob(75))
for(var/mob/O in viewers(user, null))
- O.show_message("\red After a few attempts, [user] manages to light [src].", 1)
+ O.show_message("\red After a few attempts, \the [user] manages to light \the [src].", 1)
else
user << "\red You burn yourself while lighting the lighter."
user.adjustFireLoss(5)
for(var/mob/O in viewers(user, null))
- O.show_message("\red After a few attempts, [user] manages to light [src], they however burn their finger in the process.", 1)
+ O.show_message("\red After a few attempts, \the [user] manages to light \the [src], they however burn themself in the process.", 1)
user.total_luminosity += 2
processing_objects.Add(src)
@@ -471,4 +475,4 @@ ZIPPO
if(lit)
user.total_luminosity -= 2
src.sd_SetLuminosity(2)
- return
+ return
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/grenades.dm b/code/game/objects/items/weapons/grenades.dm
index 0782d2206e5..adec04cb2b8 100644
--- a/code/game/objects/items/weapons/grenades.dm
+++ b/code/game/objects/items/weapons/grenades.dm
@@ -16,14 +16,17 @@ FLASHBANG
item_state = "emp"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
origin_tech = "materials=2;magnets=3"
var/active = 0
var/det_time = 50
- proc
- prime()
- clown_check(var/mob/living/user)
+ proc/prime()
+ return
+
+ proc/clown_check(var/mob/living/user)
+ return
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
if (istype(target, /obj/item/weapon/storage)) return ..() // Trying to put it in a full container
@@ -89,16 +92,21 @@ FLASHBANG
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
origin_tech = "materials=2;combat=1"
var/active = 0
var/det_time = 30
var/banglet = 0
- proc
- bang(var/turf/T , var/mob/living/carbon/M)
- prime()
- clown_check(var/mob/living/user)
+ proc/bang(var/turf/T , var/mob/living/carbon/M)
+ return
+
+ proc/prime()
+ return
+
+ proc/clown_check(var/mob/living/user)
+ return
attackby(obj/item/weapon/W as obj, mob/user as mob)
if (isscrewdriver(W))
@@ -227,7 +235,6 @@ FLASHBANG
M << "\red Your ears start to ring!"
prime() // Prime now just handles the two loops that query for people in lockers and people who can see it.
-
var/turf/T = get_turf(src)
if(T)
T.hotspot_expose(700,125)
diff --git a/code/game/objects/items/weapons/implants/implant.dm b/code/game/objects/items/weapons/implants/implant.dm
index 6e404c1a65d..f5422469e2f 100644
--- a/code/game/objects/items/weapons/implants/implant.dm
+++ b/code/game/objects/items/weapons/implants/implant.dm
@@ -7,19 +7,29 @@
icon_state = "implant"
var/implanted = null
var/mob/imp_in = null
- var/color = "b"
+ color = "b"
var/allow_reagents = 0
- proc
- trigger(emote, source as mob)
- activate()
- implanted(source as mob)
- get_data()
- hear(message, source as mob)
+
+ proc/trigger(emote, source as mob)
+ return
+
+ proc/activate()
+ return
+
+ proc/implanted(source as mob)
+ return
+
+ proc/get_data()
+ return
+
+ proc/hear(message, source as mob)
+ return
trigger(emote, source as mob)
return
+
activate()
return
@@ -38,6 +48,7 @@
implanted(source as mob)
return
+
get_data()
return "No information available"
@@ -449,4 +460,4 @@ the implant may become unstable and either pre-maturely inject the subject or si
usr << "You suddenly start seeing body temperatures of whoever is around you."
else
usr << "This implant is not compatible!"
- return*/
+ return*/
\ No newline at end of file
diff --git a/code/game/objects/items/weapons/mops_cleaners.dm b/code/game/objects/items/weapons/mops_cleaners.dm
index 1a32c2c9e1a..6f5e460303a 100644
--- a/code/game/objects/items/weapons/mops_cleaners.dm
+++ b/code/game/objects/items/weapons/mops_cleaners.dm
@@ -6,7 +6,8 @@
name = "space cleaner"
icon_state = "cleaner"
item_state = "cleaner"
- flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
throw_speed = 2
@@ -117,7 +118,8 @@
name = "chem sprayer"
icon_state = "chemsprayer"
item_state = "chemsprayer"
- flags = ONBELT|TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ flags = TABLEPASS|OPENCONTAINER|FPRINT|USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 3.0
throw_speed = 2
@@ -212,7 +214,6 @@
return
- return
//Pepper spray, set up to make the 2 different types
/obj/item/weapon/pepperspray //This is riot control
@@ -221,7 +222,8 @@
name = "pepperspray"
icon_state = "pepperspray"
item_state = "pepperspray"
- flags = ONBELT|TABLEPASS|FPRINT|USEDELAY
+ flags = TABLEPASS | FPRINT | USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
throw_speed = 2
@@ -236,7 +238,8 @@
name = "mace"
icon_state = "pepperspray"
item_state = "pepperspray"
- flags = ONBELT|TABLEPASS|FPRINT|USEDELAY
+ flags = TABLEPASS | FPRINT | USEDELAY
+ slot_flags = SLOT_BELT
throwforce = 3
w_class = 1.0
throw_speed = 2
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index 3e92b39a56a..e41e65e6eee 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -63,14 +63,13 @@ var/global/list/cached_icons = list()
remover
paint_type = "remover"
-
/*
/obj/item/weapon/paint
name = "Paint Can"
desc = "Used to recolor floors and walls. Can not be removed by the janitor."
icon = 'items.dmi'
icon_state = "paint_neutral"
- var/color = "FFFFFF"
+ color = "FFFFFF"
item_state = "paintcan"
w_class = 3.0
diff --git a/code/game/objects/items/weapons/plant_bag.dm b/code/game/objects/items/weapons/plant_bag.dm
index 1cbb6f7903c..4f13ee45e1b 100644
--- a/code/game/objects/items/weapons/plant_bag.dm
+++ b/code/game/objects/items/weapons/plant_bag.dm
@@ -7,7 +7,8 @@
name = "Plant Bag"
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 50; //the number of plant pieces it can carry.
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
w_class = 1
/obj/item/weapon/plantbag/attack_self(mob/user as mob)
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 6beb9841632..7f177066d1e 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -15,7 +15,8 @@ WELDINGTOOOL
desc = "A wrench with common uses. Can be found in your hand."
icon = 'items.dmi'
icon_state = "wrench"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -46,7 +47,8 @@ WELDINGTOOOL
name = "Welding Tool"
icon = 'items.dmi'
icon_state = "welder"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 3.0
throwforce = 5.0
throw_speed = 1
@@ -225,7 +227,6 @@ WELDINGTOOOL
src.damtype = "brute"
src.icon_state = "welder"
src.welding = 0
- return
eyecheck(mob/user as mob)
@@ -314,7 +315,8 @@ WELDINGTOOOL
desc = "This cuts wires."
icon = 'items.dmi'
icon_state = "cutters"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 6.0
throw_speed = 2
throw_range = 9
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index b39e32a55b9..14eff5ba0f0 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -93,7 +93,7 @@
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
force = 5
w_class = 4.0
- flags = ONBACK
+ slot_flags = SLOT_BACK
force_unwielded = 5
force_wielded = 18
diff --git a/code/game/objects/new_year.dm b/code/game/objects/new_year.dm
index 90ed7f10665..4bf649b5542 100644
--- a/code/game/objects/new_year.dm
+++ b/code/game/objects/new_year.dm
@@ -55,7 +55,8 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
/obj/item/weapon/firbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
if (user.equipped() == src)
diff --git a/code/game/objects/radio/electropack.dm b/code/game/objects/radio/electropack.dm
index 209fbea8b53..dd5462fbff5 100644
--- a/code/game/objects/radio/electropack.dm
+++ b/code/game/objects/radio/electropack.dm
@@ -8,7 +8,8 @@
m_amt = 10000
frequency = 1449
w_class = 5.0
- flags = 323
+ flags = FPRINT | CONDUCT | TABLEPASS
+ slot_flags = SLOT_BACK
item_state = "electropack"
/obj/item/device/radio/electropack/examine()
diff --git a/code/game/objects/radio/headset.dm b/code/game/objects/radio/headset.dm
index 582a08e8ae7..7c0217a2db6 100644
--- a/code/game/objects/radio/headset.dm
+++ b/code/game/objects/radio/headset.dm
@@ -8,8 +8,10 @@
g_amt = 0
m_amt = 75
subspace_transmission = 1
- protective_temperature = 0
canhear_range = 1 // can't hear headsets from very far away
+
+ slot_flags = SLOT_EARS
+ protective_temperature = 0
var/translate_binary = 0
var/translate_hive = 0
var/obj/item/device/encryptionkey/keyslot1 = null
@@ -246,4 +248,4 @@
src.name = "broken radio headset"
return
- return
+ return
\ No newline at end of file
diff --git a/code/game/objects/radio/radio.dm b/code/game/objects/radio/radio.dm
index 75b9774a6f2..56cd66eec87 100644
--- a/code/game/objects/radio/radio.dm
+++ b/code/game/objects/radio/radio.dm
@@ -26,7 +26,8 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h
var/subspace_transmission = 0
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
- flags = 450 // hello i'm a fucking idiot why is this 450?? CODE GODS PLEASE EXPLAIN~
+ flags = FPRINT | CONDUCT | TABLEPASS
+ slot_flags = SLOT_BELT
throw_speed = 2
throw_range = 9
w_class = 2
@@ -43,11 +44,11 @@ var/GLOBAL_RADIO_TYPE = 1 // radio type to use
/obj/item/device/radio
var/datum/radio_frequency/radio_connection
var/list/datum/radio_frequency/secure_radio_connections = new
- proc
- set_frequency(new_frequency)
- radio_controller.remove_object(src, frequency)
- frequency = new_frequency
- radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
+
+ proc/set_frequency(new_frequency)
+ radio_controller.remove_object(src, frequency)
+ frequency = new_frequency
+ radio_connection = radio_controller.add_object(src, frequency, RADIO_CHAT)
diff --git a/code/game/objects/storage/backpack.dm b/code/game/objects/storage/backpack.dm
index a6eb10e6fe7..7e5b3ff895f 100644
--- a/code/game/objects/storage/backpack.dm
+++ b/code/game/objects/storage/backpack.dm
@@ -47,6 +47,7 @@
return
/* Remove these comments to re-enable BoH BoH Singuloths.-Hawk.
if(istype(W, /obj/item/weapon/storage/backpack/holding) && !W.crit_fail)
+ investigate_log("has become a singularity. Caused by [user.key]","singulo")
user << "\red The Bluespace interfaces of the two devices catastrophically malfunction!"
del(W)
var/obj/machinery/singularity/singulo = new /obj/machinery/singularity (get_turf(src))
diff --git a/code/game/objects/storage/belt.dm b/code/game/objects/storage/belt.dm
index 11dcc50c2a6..51c168e955b 100644
--- a/code/game/objects/storage/belt.dm
+++ b/code/game/objects/storage/belt.dm
@@ -4,7 +4,8 @@
icon = 'belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
max_w_class = 3
max_combined_w_class = 21
diff --git a/code/game/objects/structures.dm b/code/game/objects/structures.dm
index 6edbbf80491..132fd7e00cc 100644
--- a/code/game/objects/structures.dm
+++ b/code/game/objects/structures.dm
@@ -1,6 +1,27 @@
obj/structure
icon = 'structures.dmi'
+obj/structure/blob_act()
+ if(prob(50))
+ del(src)
+
+obj/structure/ex_act(severity)
+ switch(severity)
+ if(1.0)
+ del(src)
+ return
+ if(2.0)
+ if(prob(50))
+ del(src)
+ return
+ if(3.0)
+ return
+
+obj/structure/meteorhit(obj/O as obj)
+ del(src)
+
+
+
/obj/structure/girder
icon_state = "girder"
anchored = 1
diff --git a/code/game/objects/tables_racks.dm b/code/game/objects/tables_racks.dm
index 5f8343a3c08..7cbe88a9e66 100644
--- a/code/game/objects/tables_racks.dm
+++ b/code/game/objects/tables_racks.dm
@@ -44,10 +44,10 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/attack_paw(mob/user as mob)
if ((usr.mutations & HULK))
- usr << text("\blue You destroy the table.")
+ usr << "\blue You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes the table apart!", usr)
+ O << "\red [user] smashes the table apart!"
if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc )
else if(istype(src, /obj/structure/table/woodentable))
@@ -62,16 +62,16 @@ TABLE AND RACK OBJECT INTERATIONS
user.layer = TURF_LAYER
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("[] hides under the table!", user)
+ O << "[user] hides under the table!"
//Foreach goto(69)
return
/obj/structure/table/attack_alien(mob/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
- usr << text("\green You destroy the table.")
+ usr << "\green You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] slices the table apart!", user)
+ O << "\red [user] slices the table apart!"
if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc )
else if(istype(src, /obj/structure/table/woodentable))
@@ -85,10 +85,10 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/attack_animal(mob/living/simple_animal/user as mob) //Removed code for larva since it doesn't work. Previous code is now a larva ability. /N
if(user.wall_smash)
- usr << text("\red You destroy the table.")
+ usr << "\red You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes the table apart!", user)
+ O << "\red [user] smashes the table apart!"
if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc )
else if(istype(src, /obj/structure/table/woodentable))
@@ -103,11 +103,11 @@ TABLE AND RACK OBJECT INTERATIONS
/obj/structure/table/attack_hand(mob/user as mob)
- if (usr.mutations & HULK)
- usr << text("\blue You destroy the table.")
+ if ((usr.mutations & HULK))
+ usr << "\blue You destroy the table."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes the table apart!", usr)
+ O << "\red [user] smashes the table apart!"
if(istype(src, /obj/structure/table/reinforced))
new /obj/item/weapon/table_parts/reinforced( src.loc )
else if(istype(src, /obj/structure/table/woodentable))
@@ -190,7 +190,7 @@ TABLE AND RACK OBJECT INTERATIONS
G.affecting.Weaken(5)
for(var/mob/O in viewers(world.view, src))
if (O.client)
- O << text("\red [] puts [] on the table.", G.assailant, G.affecting)
+ O << "\red [G.assailant] puts [G.affecting] on the table."
del(W)
return
@@ -214,7 +214,7 @@ TABLE AND RACK OBJECT INTERATIONS
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 4))
- O.show_message(text("\blue The table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2)
+ O.show_message("\blue The table was sliced apart by [user]!", 1, "\red You hear metal coming apart.", 2)
new /obj/item/weapon/table_parts( src.loc )
del(src)
return
@@ -236,7 +236,7 @@ TABLE AND RACK OBJECT INTERATIONS
G.affecting.Weaken(5)
for(var/mob/O in viewers(world.view, src))
if (O.client)
- O << text("\red [] puts [] on the wooden table.", G.assailant, G.affecting)
+ O << "\red [G.assailant] puts [G.affecting] on the wooden table."
del(W)
return
if (istype(W, /obj/item/weapon/wrench))
@@ -256,7 +256,7 @@ TABLE AND RACK OBJECT INTERATIONS
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 4))
- O.show_message(text("\blue The wooden table was sliced apart by []!", user), 1, text("\red You hear wood coming apart."), 2)
+ O.show_message("\blue The wooden table was sliced apart by [user]!", 1, "\red You hear wood coming apart.", 2)
new /obj/item/weapon/table_parts/wood( src.loc )
del(src)
return
@@ -278,7 +278,7 @@ TABLE AND RACK OBJECT INTERATIONS
G.affecting.Weaken(5)
for(var/mob/O in viewers(world.view, src))
if (O.client)
- O << text("\red [] puts [] on the reinforced table.", G.assailant, G.affecting)
+ O << "\red [G.assailant] puts [G.affecting] on the reinforced table."
del(W)
return
@@ -326,7 +326,7 @@ TABLE AND RACK OBJECT INTERATIONS
playsound(src.loc, 'blade1.ogg', 50, 1)
playsound(src.loc, "sparks", 50, 1)
for(var/mob/O in viewers(user, 4))
- O.show_message(text("\blue The reinforced table was sliced apart by []!", user), 1, text("\red You hear metal coming apart."), 2)
+ O.show_message("\blue The reinforced table was sliced apart by [user]!", 1, "\red You hear metal coming apart.", 2)
new /obj/item/weapon/table_parts/reinforced( src.loc )
del(src)
return
diff --git a/code/game/objects/tank.dm b/code/game/objects/tank.dm
index 73b890be9e7..fb711275107 100644
--- a/code/game/objects/tank.dm
+++ b/code/game/objects/tank.dm
@@ -5,7 +5,8 @@
var/datum/gas_mixture/air_contents = null
var/distribute_pressure = ONE_ATMOSPHERE
- flags = FPRINT | TABLEPASS | CONDUCT | ONBACK
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BACK
pressure_resistance = ONE_ATMOSPHERE*5
@@ -34,7 +35,7 @@
set src in usr
..()
if(air_contents.oxygen < 1 && loc==usr)
- usr << text("\red The meter on the [src.name] indicates you are almost out of air!")
+ usr << "\red The meter on the [src.name] indicates you are almost out of air!"
usr << sound('alert.ogg')
@@ -43,6 +44,7 @@
desc = "Contains dangerous plasma. Do not inhale."
icon_state = "plasma"
flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = null //they have no straps!
/obj/item/weapon/tank/blob_act()
if(prob(50))
@@ -282,7 +284,7 @@
else
descriptive = "furiously hot"
- usr << text("\blue \The \icon[][src] feels []", icon, descriptive)
+ usr << "\blue \The \icon[icon][src] feels [descriptive]"
return
diff --git a/code/game/objects/tanks/emergency.dm b/code/game/objects/tanks/emergency.dm
index 71ca3243f12..83a7822b3c9 100644
--- a/code/game/objects/tanks/emergency.dm
+++ b/code/game/objects/tanks/emergency.dm
@@ -2,7 +2,8 @@
name = "emergency oxygen tank"
desc = "Used for emergencies. Contains very little oxygen, so try to conserve it until you actually need it."
icon_state = "emergency"
- flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
w_class = 2.0
force = 4.0
distribute_pressure = ONE_ATMOSPHERE*O2STANDARD
diff --git a/code/game/objects/transfer_valve.dm b/code/game/objects/transfer_valve.dm
index 395e7cd4ecf..3404d4b6498 100644
--- a/code/game/objects/transfer_valve.dm
+++ b/code/game/objects/transfer_valve.dm
@@ -10,195 +10,180 @@
var/valve_open = 0
var/toggle = 1
- proc
- process_activation(var/obj/item/device/D)
+/obj/item/device/transfer_valve/proc/process_activation(var/obj/item/device/D)
- IsAssemblyHolder()
- return 1
+/obj/item/device/transfer_valve/IsAssemblyHolder()
+ return 1
- attackby(obj/item/item, mob/user)
- if(istype(item, /obj/item/weapon/tank))
- if(tank_one && tank_two)
- user << "There are already two tanks attached, remove one first."
- return
+/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user)
+ if(istype(item, /obj/item/weapon/tank))
+ if(tank_one && tank_two)
+ user << "There are already two tanks attached, remove one first."
+ return
- if(!tank_one)
- tank_one = item
- user.drop_item()
- item.loc = src
- user << "You attach the tank to the transfer valve."
- else if(!tank_two)
- tank_two = item
- user.drop_item()
- item.loc = src
- user << "You attach the tank to the transfer valve."
+ if(!tank_one)
+ tank_one = item
+ user.drop_item()
+ item.loc = src
+ user << "You attach the tank to the transfer valve."
+ else if(!tank_two)
+ tank_two = item
+ user.drop_item()
+ item.loc = src
+ user << "You attach the tank to the transfer valve."
- update_icon()
+ update_icon()
//TODO: Have this take an assemblyholder
- else if(isassembly(item))
- var/obj/item/device/assembly/A = item
- if(A.secured)
- user << "The device is secured."
- return
- if(attached_device)
- user << "There is already an device attached to the valve, remove it first."
- return
- user.remove_from_mob(item)
- attached_device = A
- A.loc = src
- user << "You attach the [item] to the valve controls and secure it."
- A.holder = src
- A.toggle_secure()
-
- bombers += "[key_name(user)] attached a [item] to a transfer valve."
- message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
- log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
- attacher = key_name(user)
- return
-
-
- HasProximity(atom/movable/AM as mob|obj)
- if(!attached_device) return
- attached_device.HasProximity(AM)
- return
-
-
- attack_self(mob/user as mob)
- user.machine = src
- var/dat = {" Valve properties:
-
Attachment one: [tank_one] [tank_one ? "Remove" : ""]
-
Attachment two: [tank_two] [tank_two ? "Remove" : ""]
-
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""]
-
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"}
-
- user << browse(dat, "window=trans_valve;size=600x300")
- onclose(user, "trans_valve")
- return
-
- Topic(href, href_list)
- ..()
- if ( usr.stat || usr.restrained() )
+ else if(isassembly(item))
+ var/obj/item/device/assembly/A = item
+ if(A.secured)
+ user << "The device is secured."
return
- if (src.loc == usr)
- if(tank_one && href_list["tankone"])
- split_gases()
- valve_open = 0
- tank_one.loc = get_turf(src)
- tank_one = null
- update_icon()
- else if(tank_two && href_list["tanktwo"])
- split_gases()
- valve_open = 0
- tank_two.loc = get_turf(src)
- tank_two = null
- update_icon()
- else if(href_list["open"])
- toggle_valve()
- else if(attached_device)
- if(href_list["rem_device"])
- attached_device.loc = get_turf(src)
- attached_device:holder = null
- attached_device = null
- update_icon()
- if(href_list["device"])
- attached_device.attack_self(usr)
-
- src.attack_self(usr)
- src.add_fingerprint(usr)
- return
- return
-
- process_activation(var/obj/item/device/D)
- if(toggle)
- toggle = 0
- toggle_valve()
- spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
- toggle = 1
-
- process()
-
- update_icon()
- src.overlays = new/list()
- src.underlays = new/list()
- if(!tank_one && !tank_two && !attached_device)
- icon_state = "valve_1"
- return
- icon_state = "valve"
- var/tank_one_icon = ""
- var/tank_two_icon = ""
- if(tank_one)
- tank_one_icon = tank_one.icon_state
- if(tank_two)
- tank_two_icon = tank_two.icon_state
- if(tank_one)
- var/icon/I = new(src.icon, icon_state = "[tank_one_icon]")
- //var/obj/effect/overlay/tank_one_overlay = new
- //tank_one_overlay.icon = src.icon
- //tank_one_overlay.icon_state = tank_one_icon
- src.underlays += I
- if(tank_two)
- var/icon/J = new(src.icon, icon_state = "[tank_two_icon]")
- //I.Flip(EAST) this breaks the perspective!
- J.Shift(WEST, 13)
- //var/obj/underlay/tank_two_overlay = new
- //tank_two_overlay.icon = I
- src.underlays += J
if(attached_device)
- var/icon/K = new(src.icon, icon_state = "device")
- //var/obj/effect/overlay/device_overlay = new
- //device_overlay.icon = src.icon
- //device_overlay.icon_state = device_icon
- src.overlays += K
- proc
- merge_gases()
- tank_two.air_contents.volume += tank_one.air_contents.volume
- var/datum/gas_mixture/temp
- temp = tank_one.air_contents.remove_ratio(1)
- tank_two.air_contents.merge(temp)
-
- split_gases()
- if (!valve_open || !tank_one || !tank_two)
- return
- var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
- var/datum/gas_mixture/temp
- temp = tank_two.air_contents.remove_ratio(ratio1)
- tank_one.air_contents.merge(temp)
- tank_two.air_contents.volume -= tank_one.air_contents.volume
-
- /*
- Exadv1: I know this isn't how it's going to work, but this was just to check
- it explodes properly when it gets a signal (and it does).
- */
-
- toggle_valve()
- if(valve_open==0 && (tank_one && tank_two))
- valve_open = 1
- var/turf/bombturf = get_turf(src)
- var/bombarea = bombturf.loc.name
- var/log_str = "Bomb valve opened in [bombarea] with device attacher: [attacher]. Last touched by: [src.fingerprintslast]"
- bombers += log_str
- message_admins(log_str)
- log_game(log_str)
- merge_gases()
- spawn(20) // In case one tank bursts
- for (var/i=0,i<5,i++)
- src.update_icon()
- sleep(10)
- src.update_icon()
-
- else if(valve_open==1 && (tank_one && tank_two))
- split_gases()
- valve_open = 0
- src.update_icon()
-
- // 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
- c_state()
+ user << "There is already an device attached to the valve, remove it first."
return
+ user.remove_from_mob(item)
+ attached_device = A
+ A.loc = src
+ user << "You attach the [item] to the valve controls and secure it."
+ A.holder = src
+ A.toggle_secure()
+
+ bombers += "[key_name(user)] attached a [item] to a transfer valve."
+ message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.")
+ log_game("[key_name_admin(user)] attached a [item] to a transfer valve.")
+ attacher = key_name(user)
+ return
+
+
+/obj/item/device/transfer_valve/HasProximity(atom/movable/AM as mob|obj)
+ if(!attached_device) return
+ attached_device.HasProximity(AM)
+ return
+
+
+/obj/item/device/transfer_valve/attack_self(mob/user as mob)
+ user.machine = src
+ var/dat = {" Valve properties:
+
Attachment one: [tank_one] [tank_one ? "Remove" : ""]
+
Attachment two: [tank_two] [tank_two ? "Remove" : ""]
+
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""]
+
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"}
+
+ user << browse(dat, "window=trans_valve;size=600x300")
+ onclose(user, "trans_valve")
+ return
+
+/obj/item/device/transfer_valve/Topic(href, href_list)
+ ..()
+ if ( usr.stat || usr.restrained() )
+ return
+ if (src.loc == usr)
+ if(tank_one && href_list["tankone"])
+ split_gases()
+ valve_open = 0
+ tank_one.loc = get_turf(src)
+ tank_one = null
+ update_icon()
+ else if(tank_two && href_list["tanktwo"])
+ split_gases()
+ valve_open = 0
+ tank_two.loc = get_turf(src)
+ tank_two = null
+ update_icon()
+ else if(href_list["open"])
+ toggle_valve()
+ else if(attached_device)
+ if(href_list["rem_device"])
+ attached_device.loc = get_turf(src)
+ attached_device:holder = null
+ attached_device = null
+ update_icon()
+ if(href_list["device"])
+ attached_device.attack_self(usr)
+
+ src.attack_self(usr)
+ src.add_fingerprint(usr)
+ return
+ return
+
+/obj/item/device/transfer_valve/process_activation(var/obj/item/device/D)
+ if(toggle)
+ toggle = 0
+ toggle_valve()
+ spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever
+ toggle = 1
+
+/obj/item/device/transfer_valve/process()
+ return
+
+/obj/item/device/transfer_valve/update_icon()
+ overlays = null
+ underlays = null
+
+ if(!tank_one && !tank_two && !attached_device)
+ icon_state = "valve_1"
+ return
+ icon_state = "valve"
+
+ if(tank_one)
+ overlays += "[tank_one.icon_state]"
+ if(tank_two)
+ var/icon/J = new(icon, icon_state = "[tank_two.icon_state]")
+ J.Shift(WEST, 13)
+ underlays += J
+ if(attached_device)
+ overlays += "device"
+
+/obj/item/device/transfer_valve/proc/merge_gases()
+ tank_two.air_contents.volume += tank_one.air_contents.volume
+ var/datum/gas_mixture/temp
+ temp = tank_one.air_contents.remove_ratio(1)
+ tank_two.air_contents.merge(temp)
+
+/obj/item/device/transfer_valve/proc/split_gases()
+ if (!valve_open || !tank_one || !tank_two)
+ return
+ var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume
+ var/datum/gas_mixture/temp
+ temp = tank_two.air_contents.remove_ratio(ratio1)
+ tank_one.air_contents.merge(temp)
+ tank_two.air_contents.volume -= tank_one.air_contents.volume
+
+ /*
+ Exadv1: I know this isn't how it's going to work, but this was just to check
+ it explodes properly when it gets a signal (and it does).
+ */
+
+/obj/item/device/transfer_valve/proc/toggle_valve()
+ if(valve_open==0 && (tank_one && tank_two))
+ valve_open = 1
+ var/turf/bombturf = get_turf(src)
+ var/bombarea = bombturf.loc.name
+ var/log_str = "Bomb valve opened in [bombarea] with device attacher: [attacher]. Last touched by: [src.fingerprintslast]"
+ bombers += log_str
+ message_admins(log_str)
+ log_game(log_str)
+ merge_gases()
+ spawn(20) // In case one tank bursts
+ for (var/i=0,i<5,i++)
+ src.update_icon()
+ sleep(10)
+ src.update_icon()
+
+ else if(valve_open==1 && (tank_one && tank_two))
+ split_gases()
+ valve_open = 0
+ src.update_icon()
+
+// 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/
+/obj/structure/falsewall
attack_hand(mob/user as mob)
if(density)
// Open wall
diff --git a/code/game/objects/uplinks.dm b/code/game/objects/uplinks.dm
index 203cbb77bb7..568e5974993 100644
--- a/code/game/objects/uplinks.dm
+++ b/code/game/objects/uplinks.dm
@@ -312,7 +312,8 @@ A list of items and costs is stored under the datum of every game mode, alongsid
var/temp = null //Temporary storage area for a message offering the option to destroy the radio
var/selfdestruct = 0 //Set to 1 while the radio is self destructing itself.
var/obj/item/device/radio/origradio = null
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
w_class = 2.0
item_state = "radio"
throwforce = 5
diff --git a/code/game/objects/watercloset.dm b/code/game/objects/watercloset.dm
index da6d46bdc0a..afc41385615 100644
--- a/code/game/objects/watercloset.dm
+++ b/code/game/objects/watercloset.dm
@@ -1,4 +1,4 @@
-//todo: flushing, flushing heads, showers actually cleaning people
+//todo: toothbrushes, and some sort of "toilet-filthinator" for the hos
/obj/structure/toilet
name = "toilet"
@@ -8,18 +8,43 @@
density = 0
anchored = 1
var/open = 0
+ var/mob/swirlie = null
/obj/structure/toilet/New()
open = round(rand(0, 1))
update_icon()
/obj/structure/toilet/attack_hand()
- open = !open
- update_icon()
+ 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.")
+ swirlie.adjustBruteLoss(8)
/obj/structure/toilet/update_icon()
icon_state = "toilet[open]"
+/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
+ if(ismob(G.affecting))
+ if(G.state>1 && GM.loc == get_turf(src))
+ if(open && !swirlie)
+ user.visible_message("[user] starts to give [GM.name] a swirlie!", "You start to give [GM.name] a swirlie!")
+ swirlie = GM
+ if(do_after(user, 30, 5, 0))
+ user.visible_message("[user] gives [GM.name] a swirlie!", "You give [GM.name] a swirlie!", "You hear a toilet flushing.")
+ if(!GM.internal)
+ GM.adjustOxyLoss(5)
+ swirlie = null
+ else
+ user.visible_message("[user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!")
+ GM.adjustBruteLoss(8)
+ else
+ user << "You need a tighter grip."
+
/obj/structure/urinal
@@ -30,9 +55,20 @@
density = 0
anchored = 1
+/obj/structure/urinal/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
+ if(ismob(G.affecting))
+ if(G.state>1 && GM.loc == get_turf(src))
+ user.visible_message("[user] slams [GM.name] into the [src]!", "You slam [GM.name] into the [src]!")
+ GM.adjustBruteLoss(8)
+ else
+ user << "You need a tighter grip."
-/obj/structure/shower
+
+/obj/machinery/shower
name = "shower"
desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division."
icon = 'watercloset.dmi'
@@ -41,7 +77,9 @@
anchored = 1
var/on = 0
var/obj/effect/mist/mymist = null
- var/ismist = 0 //needs a var so we can make it linger~
+ var/ismist = 0 //needs a var so we can make it linger~
+ var/watertemp = "normal" //freezing, normal, or boiling
+ var/mobpresent = 0 //true if there is a mob on the shower's loc, this is to ease process()
//add heat controls? when emagged, you can freeze to death in it?
@@ -52,22 +90,37 @@
layer = MOB_LAYER + 1
mouse_opacity = 0
-/obj/structure/shower/attack_hand(mob/M as mob)
+/obj/machinery/shower/attack_hand(mob/M as mob)
on = !on
update_icon()
if(on && M.loc == loc)
wash(M)
+ check_heat(M)
-/obj/structure/shower/attackby(mob/M as mob)
- attack_hand(M)
+/obj/machinery/shower/attackby(var/obj/item/I, var/mob/user)
+ if(I.type == /obj/item/device/analyzer)
+ user << "The water temperature seems to be [watertemp]."
+ if(istype(I, /obj/item/weapon/wrench))
+ user << "You begin to adjust the temperature valve with the [I]."
+ if(do_after(user, 50))
+ switch(watertemp)
+ if("normal")
+ watertemp = "freezing"
+ if("freezing")
+ watertemp = "boiling"
+ if("boiling")
+ watertemp = "normal"
+ user.visible_message("[user] adjusts the shower with the [I].", "You adjust the shower with the [I].")
-/obj/structure/shower/update_icon()
- overlays = null
+/obj/machinery/shower/update_icon() //this is terribly unreadable, but basically it makes the shower mist up
+ overlays = null //once it's been on for a while, in addition to handling the water overlay.
if(mymist)
del(mymist)
if(on)
overlays += image('watercloset.dmi', src, "water", MOB_LAYER + 1, dir)
+ if(watertemp == "freezing")
+ return
if(!ismist)
spawn(50)
if(src && on)
@@ -84,13 +137,20 @@
del(mymist)
ismist = 0
-/obj/structure/shower/HasEntered(atom/movable/O as obj|mob)
+/obj/machinery/shower/HasEntered(atom/movable/O)
..()
wash(O)
+ if(ismob(O))
+ mobpresent += 1
+ check_heat(O)
+
+/obj/machinery/shower/Uncrossed(atom/movable/O)
+ if(ismob(O))
+ mobpresent -= 1
+ ..()
//Yes, showers are super powerful as far as washing goes.
-/obj/structure/shower/proc/wash(atom/movable/O as obj|mob)
- ..()
+/obj/machinery/shower/proc/wash(atom/movable/O as obj|mob)
if(!on) return
O.clean_blood()
@@ -108,10 +168,10 @@
var/mob/living/carbon/human/washer = O
if(washer.head)
washer.head.clean_blood()
- if(washer.w_uniform)
- washer.w_uniform.clean_blood()
if(washer.wear_suit)
washer.wear_suit.clean_blood()
+ else if(washer.w_uniform)
+ washer.w_uniform.clean_blood()
if(washer.shoes)
washer.shoes.clean_blood()
if(washer.gloves)
@@ -129,6 +189,26 @@
for(var/obj/effect/overlay/R in tile)
del(R)
+/obj/machinery/shower/process()
+ if(!on || !mobpresent) return
+ for(var/mob/living/carbon/C in loc)
+ check_heat(C)
+
+/obj/machinery/shower/proc/check_heat(mob/M as mob)
+ if(!on || watertemp == "normal") return
+ if(iscarbon(M))
+ var/mob/living/carbon/C = M
+
+ if(watertemp == "freezing")
+ C.bodytemperature = min(100, C.bodytemperature - 80)
+ C << "The water is freezing!"
+ return
+ if(watertemp == "boiling")
+ C.bodytemperature = max(500, C.bodytemperature + 35)
+ C.adjustFireLoss(10)
+ C << "The water is searing!"
+ return
+
/obj/item/weapon/bikehorn/rubberducky
@@ -177,7 +257,7 @@
else
C.clean_blood() //other things that can't wear gloves should just wash the mob.
for(var/mob/V in viewers(src, null))
- V.show_message(text("\blue [M] washes their hands using \the [src]."))
+ V.show_message("\blue [M] washes their hands using \the [src].")
/obj/structure/sink/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(busy)
diff --git a/code/game/objects/weapons.dm b/code/game/objects/weapons.dm
index 24be9eed502..06d523e4128 100644
--- a/code/game/objects/weapons.dm
+++ b/code/game/objects/weapons.dm
@@ -82,7 +82,7 @@
if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey))
for(var/mob/O in viewers(world.view, src.loc))
- O << text("[M] triggered the \icon[] [src]", src)
+ O << "[M] triggered the \icon[src] [src]"
triggered = 1
call(src,triggerproc)(M)
@@ -162,7 +162,7 @@
for(var/mob/O in viewers(user, null))
if(O == user)
continue
- O.show_message(text("\red [user] accidentally sets off the mousetrap, breaking their fingers."), 1)
+ O.show_message("\red [user] accidentally sets off the mousetrap, breaking their fingers.", 1)
return
user << "\blue You disarm the mousetrap."
armed = !armed
@@ -179,7 +179,7 @@
for(var/mob/O in viewers(user, null))
if(O == user)
continue
- O.show_message(text("\red [user] accidentally sets off the mousetrap, breaking their fingers."), 1)
+ O.show_message("\red [user] accidentally sets off the mousetrap, breaking their fingers.", 1)
return
..()
@@ -192,12 +192,12 @@
for(var/mob/O in viewers(H, null))
if(O == H)
continue
- O.show_message(text("\red [H] accidentally steps on the mousetrap."), 1)
+ O.show_message("\red [H] accidentally steps on the mousetrap.", 1)
..()
/obj/item/weapon/mousetrap/hitby(A as mob|obj)
if(!armed)
return ..()
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red The mousetrap is triggered by [A]."), 1)
+ O.show_message("\red The mousetrap is triggered by [A].", 1)
src.triggered(null)
diff --git a/code/game/objects/window.dm b/code/game/objects/window.dm
index 3f10f483bcd..ea12961dda7 100644
--- a/code/game/objects/window.dm
+++ b/code/game/objects/window.dm
@@ -68,7 +68,7 @@
..()
for(var/mob/O in viewers(src, null))
- O.show_message(text("\red [src] was hit by [AM]."), 1)
+ O.show_message("\red [src] was hit by [AM].", 1)
var/tforce = 0
if(ismob(AM))
tforce = 40
@@ -90,12 +90,14 @@
..()
return
+//These all need to be rewritten to use visiblemessage()
+
/obj/structure/window/attack_hand()
if ((usr.mutations & HULK))
- usr << text("\blue You smash through the window.")
+ usr << "\blue You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes through the window!", usr)
+ O << "\red [usr] smashes through the window!"
src.health = 0
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/stack/rods( src.loc)
@@ -112,10 +114,10 @@
/obj/structure/window/attack_paw()
if ((usr.mutations & HULK))
- usr << text("\blue You smash through the window.")
+ usr << "\blue You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes through the window!", usr)
+ O << "\red [usr] smashes through the window!"
src.health = 0
new /obj/item/weapon/shard( src.loc )
if(reinf) new /obj/item/stack/rods( src.loc)
@@ -126,17 +128,17 @@
/obj/structure/window/attack_alien()
if (istype(usr, /mob/living/carbon/alien/larva))//Safety check for larva. /N
return
- usr << text("\green You smash against the window.")
+ usr << "\green You smash against the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes against the window.", usr)
+ O << "\red [usr] smashes against the window."
playsound(src.loc, 'Glasshit.ogg', 100, 1)
src.health -= 15
if(src.health <= 0)
- usr << text("\green You smash through the window.")
+ usr << "\green You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes through the window!", usr)
+ O << "\red [usr] smashes through the window!"
src.health = 0
new /obj/item/weapon/shard(src.loc)
if(reinf)
@@ -150,17 +152,17 @@
/obj/structure/window/attack_animal(mob/living/simple_animal/M as mob)
if (M.melee_damage_upper == 0)
return
- M << text("\green You smash against the window.")
+ M << "\green You smash against the window."
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes against the window.", M)
+ O << "\red [M] smashes against the window."
playsound(src.loc, 'Glasshit.ogg', 100, 1)
src.health -= M.melee_damage_upper
if(src.health <= 0)
- M << text("\green You smash through the window.")
+ M << "\green You smash through the window."
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes through the window!", M)
+ O << "\red [M] smashes through the window!"
src.health = 0
new /obj/item/weapon/shard(src.loc)
if(reinf)
@@ -174,17 +176,17 @@
if(!istype(usr, /mob/living/carbon/metroid/adult))
return
- usr<< text("\green You smash against the window.")
+ usr<< "\green You smash against the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes against the window.", usr)
+ O << "\red [usr] smashes against the window."
playsound(src.loc, 'Glasshit.ogg', 100, 1)
src.health -= rand(10,15)
if(src.health <= 0)
- usr << text("\green You smash through the window.")
+ usr << "\green You smash through the window."
for(var/mob/O in oviewers())
if ((O.client && !( O.blinded )))
- O << text("\red [] smashes through the window!", usr)
+ O << "\red [usr] smashes through the window!"
src.health = 0
new /obj/item/weapon/shard(src.loc)
if(reinf)
diff --git a/code/modules/DetectiveWork/detective_work.dm b/code/modules/DetectiveWork/detective_work.dm
index 1f2b8dd4a3e..bb4cb2e0a2d 100644
--- a/code/modules/DetectiveWork/detective_work.dm
+++ b/code/modules/DetectiveWork/detective_work.dm
@@ -3,10 +3,11 @@
atom/var/list/suit_fibers
atom/proc/add_fibers(mob/living/carbon/human/M)
- if(M.gloves)
- if(M.gloves.transfer_blood) //bloodied gloves transfer blood to touched objects
- if(add_blood(M.gloves.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
- M.gloves.transfer_blood--
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.transfer_blood) //bloodied gloves transfer blood to touched objects
+ if(add_blood(G.bloody_hands_mob)) //only reduces the bloodiness of our gloves if the item wasn't already bloody
+ G.transfer_blood--
else if(M.bloody_hands)
if(add_blood(M.bloody_hands_mob))
M.bloody_hands--
@@ -618,10 +619,11 @@ turf/Exited(mob/living/carbon/human/M)
M.track_blood--
src.add_bloody_footprints(M.track_blood_mob,1,M.dir,get_tracks(M),M.track_blood_type)
else if(istype(M,/mob/living/carbon/human))
- if(M.shoes)
- if(M.shoes.track_blood > 0)
- M.shoes.track_blood--
- src.add_bloody_footprints(M.shoes.track_blood_mob,1,M.dir,M.shoes.name,M.shoes.track_blood_type) // And bloody tracks end here
+ if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes))
+ var/obj/item/clothing/shoes/S = M.shoes
+ if(S.track_blood > 0)
+ S.track_blood--
+ src.add_bloody_footprints(S.track_blood_mob,1,M.dir,S.name,S.track_blood_type) // And bloody tracks end here
. = ..()
turf/Entered(mob/living/carbon/human/M)
if(istype(M,/mob/living) && !istype(M,/mob/living/carbon/metroid))
@@ -636,10 +638,11 @@ turf/Entered(mob/living/carbon/human/M)
M.track_blood--
src.add_bloody_footprints(M.track_blood_mob,0,M.dir,get_tracks(M),M.track_blood_type)
else if(istype(M,/mob/living/carbon/human))
- if(M.shoes && !istype(src,/turf/space))
- if(M.shoes.track_blood > 0)
- M.shoes.track_blood--
- src.add_bloody_footprints(M.shoes.track_blood_mob,0,M.dir,M.shoes.name,M.shoes.track_blood_type)
+ if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes) && !istype(src,/turf/space))
+ var/obj/item/clothing/shoes/S = M.shoes
+ if(S.track_blood > 0)
+ S.track_blood--
+ src.add_bloody_footprints(S.track_blood_mob,0,M.dir,S.name,S.track_blood_type)
for(var/obj/effect/decal/cleanable/B in src)
@@ -654,11 +657,12 @@ turf/Entered(mob/living/carbon/human/M)
track_type = "oil"
if(istype(M,/mob/living/carbon/human))
- if(M.shoes)
- M.shoes.add_blood(B.blood_owner)
- M.shoes.track_blood_mob = B.blood_owner
- M.shoes.track_blood = max(M.shoes.track_blood,8)
- M.shoes.track_blood_type = track_type
+ if(M.shoes && istype(M.shoes,/obj/item/clothing/shoes))
+ var/obj/item/clothing/shoes/S = M.shoes
+ S.add_blood(B.blood_owner)
+ S.track_blood_mob = B.blood_owner
+ S.track_blood = max(S.track_blood,8)
+ S.track_blood_type = track_type
else
M.add_blood(B.blood_owner)
M.track_blood_mob = B.blood_owner
diff --git a/code/modules/admin/admin_investigate.dm b/code/modules/admin/admin_investigate.dm
new file mode 100644
index 00000000000..4f2956cf9bf
--- /dev/null
+++ b/code/modules/admin/admin_investigate.dm
@@ -0,0 +1,43 @@
+//By Carnwennan
+
+//This system was made as an alternative to all the in-game lists and variables used to log stuff in-game.
+//lists and variables are great. However, they have several major flaws:
+//Firstly, they use memory. TGstation has one of the highest memory usage of all the ss13 branches.
+//Secondly, they are usually stored in an object. This means that they aren't centralised. It also means that
+//the data is lost when the object is deleted! This is especially annoying for things like the singulo engine!
+#define INVESTIGATE_DIR "data/investigate/"
+
+//SYSTEM
+/proc/investigate_subject2file(var/subject)
+ switch(subject)
+ if("singulo")
+ return file("[INVESTIGATE_DIR]singulo.html")
+ if("silicon")
+ return file("[INVESTIGATE_DIR]silicon.html")
+ else
+ return
+
+/proc/investigate_reset()
+ if(fdel(INVESTIGATE_DIR)) return 1
+ return 0
+
+/atom/proc/investigate_log(var/message, var/subject)
+ if(!message) return
+ var/F = investigate_subject2file(subject)
+ if(!F) return
+ F << "[time2text(world.timeofday,"hh:mm")] \ref[src] ([x],[y],[z]) || [src] [message]
"
+
+
+
+//ADMINVERBS
+/client/proc/investigate_show( subject in list("singulo","silicon") )
+ set name = "Investigate"
+ set category = "Admin"
+ if(!holder) return
+ var/F = investigate_subject2file(subject)
+ if(!F)
+ src << "Error: admin_investigate: [INVESTIGATE_DIR][subject] is an invalid path or cannot be accessed."
+ return
+ src << browse(F,"window=investigate;size=800x300")
+
+
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 624832c9264..f7eec938d0e 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -105,6 +105,7 @@
//Admin Observer
if (holder.level >= -1)
+ verbs += /client/proc/investigate_show
verbs += /client/proc/cmd_admin_say
verbs += /client/proc/cmd_admin_gib_self
verbs += /client/proc/deadmin_self
@@ -423,10 +424,11 @@
verbs -= /client/proc/deadmin_self
verbs -= /client/proc/jumptocoord
verbs -= /client/proc/everyone_random
- verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
+ verbs -= /client/proc/giveruntimelog //used by coders to retrieve runtime logs
verbs -= /client/proc/getserverlog
verbs -= /client/proc/cinematic //show a cinematic sequence
verbs -= /client/proc/admin_memo
+ verbs -= /client/proc/investigate_show
verbs -= /client/proc/cmd_admin_change_custom_event
verbs -= /client/proc/admin_invis
verbs -= /client/proc/callprocgen
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index 1a0e282d4db..1ea22042b6f 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -62,17 +62,32 @@
var/const/WIRE_RADIO_RECEIVE = 8 //Allows Pulsed(1) to call Activate()
var/const/WIRE_RADIO_PULSE = 16 //Allows Pulse(1) to send a radio message
-
proc/activate() //What the device does when turned on
+ return
+
proc/pulsed(var/radio = 0) //Called when another assembly acts on this one, var/radio will determine where it came from for wire calcs
- pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
+ return
+
+ proc/pulse(var/radio = 0) //Called when this device attempts to act on another device, var/radio determines if it was sent via radio or direct
+ return
+
proc/toggle_secure() //Code that has to happen when the assembly is un\secured goes here
+ return
+
proc/attach_assembly(var/obj/A, var/mob/user) //Called when an assembly is attacked by another
+ return
+
+ proc/process_cooldown() //Called via spawn(10) to have it count down the cooldown var
+ return
+
proc/holder_movement() //Called when the holder is moved
+ return
+
proc/interact(mob/user as mob) //Called when attack_self is called
+ return
- proc/process_cooldown()
+ process_cooldown()
cooldown--
if(cooldown <= 0) return 0
spawn(10)
@@ -88,7 +103,7 @@
return 1
- proc/pulse(var/radio = 0)
+ pulse(var/radio = 0)
if(holder && (wires & WIRE_PULSE))
holder.process_activation(src, 1, 0)
if(holder && (wires & WIRE_PULSE_SPECIAL))
@@ -219,4 +234,4 @@ Desc: If true is an object that can be attached to an assembly holder but is a s
//Remember to have it set its loc somewhere in here
-*/
+*/
\ No newline at end of file
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 51ac5e39337..f499c3c0875 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:05
-
/obj/item/device/assembly_holder
name = "Assembly"
desc = "Holds various devices"//Fix this by adding dynamic desc
@@ -18,10 +16,15 @@
var/obj/item/device/assembly/a_right = null
var/obj/special_assembly = null
- proc
- attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
- attach_special(var/obj/O, var/mob/user)
- process_activation(var/obj/item/device/D)
+ proc/attach(var/obj/item/device/D, var/obj/item/device/D2, var/mob/user)
+ return
+
+ proc/attach_special(var/obj/O, var/mob/user)
+ return
+
+ proc/process_activation(var/obj/item/device/D)
+ return
+
IsAssemblyHolder()
diff --git a/code/modules/chemical/Chemistry-Tools.dm b/code/modules/chemical/Chemistry-Tools.dm
index 8de9d005c49..c2c280619ab 100644
--- a/code/modules/chemical/Chemistry-Tools.dm
+++ b/code/modules/chemical/Chemistry-Tools.dm
@@ -11,9 +11,6 @@
item_state = "flashbang"
w_class = 2.0
force = 2.0
- throw_speed = 4
- throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
var/obj/item/weapon/reagent_containers/glass/beaker_one
var/obj/item/weapon/reagent_containers/glass/beaker_two
var/obj/item/device/assembly/attached_device
@@ -27,6 +24,10 @@
var/list/allowed_containers = list("/obj/item/weapon/reagent_containers/glass/beaker", "/obj/item/weapon/reagent_containers/glass/dispenser", "/obj/item/weapon/reagent_containers/glass/bottle")
var/affected_area = 3
var/mob/attacher = "Unknown"
+ throw_speed = 4
+ throw_range = 20
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
attackby(var/obj/item/weapon/W, var/mob/user)
if(path || !active)
@@ -784,7 +785,7 @@
/obj/structure/table,
/obj/structure/closet/secure_closet,
/obj/structure/closet,
- /obj/machinery/sink,
+ /obj/structure/sink,
/obj/item/weapon/storage,
/obj/machinery/atmospherics/unary/cryo_cell,
/obj/item/weapon/chem_grenade,
@@ -1304,7 +1305,8 @@
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
- flags = FPRINT | ONBELT | TABLEPASS | OPENCONTAINER
+ flags = FPRINT | TABLEPASS | OPENCONTAINER
+ slot_flags = SLOT_BELT
/obj/item/weapon/reagent_containers/hypospray/attack_paw(mob/user as mob)
return src.attack_hand(user)
@@ -1349,9 +1351,9 @@
possible_transfer_amounts = null
flags = FPRINT
var/mode = 1
- var/charge_cost = 100
+ var/charge_cost = 50
var/charge_tick = 0
- var/recharge_time = 10 //Time it takes for shots to recharge (in seconds)
+ var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
New()
..()
@@ -1372,13 +1374,13 @@
if(R && R.cell)
if(mode == 1 && reagents.total_volume < 30) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
- reagents.add_reagent("tricordrazine",10) //And fill hypo with reagent.
+ reagents.add_reagent("tricordrazine",5) //And fill hypo with reagent.
if(mode == 2 && reagents.total_volume < 30)
R.cell.use(charge_cost)
- reagents.add_reagent("inaprovaline", 10)
+ reagents.add_reagent("inaprovaline", 5)
if(mode == 3 && reagents.total_volume < 30)
R.cell.use(charge_cost)
- reagents.add_reagent("spaceacillin", 10)
+ reagents.add_reagent("spaceacillin", 5)
//update_icon()
return 1
@@ -1402,16 +1404,19 @@
playsound(src.loc, 'pop.ogg', 50, 0) //Change the mode
if(mode == 1)
mode = 2
+ charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
reagents.clear_reagents() //Flushes whatever was in the storage previously, so you don't get chems all mixed up.
user << "\blue Synthesizer is now producing 'Inaprovaline'."
return
if(mode == 2)
mode = 3
+ charge_tick = 0
reagents.clear_reagents()
user << "\blue Synthesizer is now producing 'Spaceacillin'."
return
if(mode == 3)
mode = 1
+ charge_tick = 0
reagents.clear_reagents()
user << "\blue Synthesizer is now producing 'Tricordrazine'."
return
diff --git a/code/modules/clothing/ears.dm b/code/modules/clothing/ears.dm
index 05493ff2e10..25c12fd946a 100644
--- a/code/modules/clothing/ears.dm
+++ b/code/modules/clothing/ears.dm
@@ -4,6 +4,7 @@
name = "ears"
w_class = 1.0
throwforce = 2
+ slot_flags = SLOT_EARS
var/twoeared = 0
/obj/item/clothing/ears/attack_hand(mob/user as mob)
diff --git a/code/modules/clothing/gimmick.dm b/code/modules/clothing/gimmick.dm
index 27e5f8579de..0d250a587dd 100644
--- a/code/modules/clothing/gimmick.dm
+++ b/code/modules/clothing/gimmick.dm
@@ -296,7 +296,8 @@
icon = 'weapons.dmi'
icon_state = "baton"
item_state = "classic_baton"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
force = 10
/obj/item/clothing/under/pirate
diff --git a/code/modules/clothing/glasses.dm b/code/modules/clothing/glasses.dm
index b1527b20878..40f5794b05c 100644
--- a/code/modules/clothing/glasses.dm
+++ b/code/modules/clothing/glasses.dm
@@ -5,6 +5,7 @@
icon = 'glasses.dmi'
w_class = 2.0
flags = GLASSESCOVERSEYES
+ slot_flags = SLOT_EYES
var/vision_flags = 0
var/darkness_view = 0//Base human is 2
var/invisa_view = 0
diff --git a/code/modules/clothing/gloves.dm b/code/modules/clothing/gloves.dm
index e2192512d43..670802d16e1 100644
--- a/code/modules/clothing/gloves.dm
+++ b/code/modules/clothing/gloves.dm
@@ -12,6 +12,7 @@
var/wired = 0
var/obj/item/weapon/cell/cell = 0
body_parts_covered = HANDS
+ slot_flags = SLOT_GLOVES
/obj/item/clothing/gloves/boxing
diff --git a/code/modules/clothing/head/hats.dm b/code/modules/clothing/head/hats.dm
index ca94d809f95..8f3e4aaafe2 100644
--- a/code/modules/clothing/head/hats.dm
+++ b/code/modules/clothing/head/hats.dm
@@ -3,7 +3,7 @@
name = "head"
icon = 'hats.dmi'
body_parts_covered = HEAD
- var/list/allowed = list()
+ slot_flags = SLOT_HEAD
/obj/item/clothing/head/cakehat
name = "cake-hat"
@@ -83,8 +83,24 @@
icon_state = "beret"
flags = FPRINT | TABLEPASS
+/obj/item/clothing/head/chaplain_hood
+ name = "chaplain's hood"
+ desc = "It's hood that covers the head. It keeps you warm during the space winters."
+ icon_state = "chaplain_hood"
+ flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
+
+/obj/item/clothing/head/hasturhood
+ name = "hastur's hood"
+ desc = "It's unspeakably stylish"
+ icon_state = "hasturhood"
+ flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
+
+/obj/item/clothing/head/nursehat
+ name = "nurse's hat"
+ desc = "It allows quick identification of trained medical personnel."
+ icon_state = "nursehat"
+ flags = FPRINT|TABLEPASS
-// CHUMP HELMETS: COOKING THEM DESTROYS THE CHUMP HELMET SPAWN.
/obj/item/clothing/head/helmet/cueball
name = "cueball helmet"
@@ -109,6 +125,8 @@
item_state = "helmet"
var/flipped = 0
+
+// CHUMP HELMETS: COOKING THEM DESTROYS THE CHUMP HELMET SPAWN.
/obj/item/clothing/head/syndicatefake
name = "red space-helmet replica"
desc = "A plastic replica of a red space space helmet. This is a toy, it is not made for use in space!"
@@ -118,24 +136,6 @@
flags = FPRINT | TABLEPASS | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
-/obj/item/clothing/head/chaplain_hood
- name = "chaplain's hood"
- desc = "It's hood that covers the head. It keeps you warm during the space winters."
- icon_state = "chaplain_hood"
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
-
-/obj/item/clothing/head/hasturhood
- name = "hastur's hood"
- desc = "It's unspeakably stylish"
- icon_state = "hasturhood"
- flags = FPRINT|TABLEPASS|HEADSPACE|HEADCOVERSEYES|BLOCKHAIR
-
-/obj/item/clothing/head/nursehat
- name = "nurse's hat"
- desc = "It allows quick identification of trained medical personnel."
- icon_state = "nursehat"
- flags = FPRINT|TABLEPASS
-
/obj/item/clothing/head/helmet/cardborg
name = "cardborg helmet"
desc = "A helmet made out of a box."
diff --git a/code/modules/clothing/jumpsuit.dm b/code/modules/clothing/jumpsuit.dm
index 52cd992c82a..97f58f0605e 100644
--- a/code/modules/clothing/jumpsuit.dm
+++ b/code/modules/clothing/jumpsuit.dm
@@ -8,6 +8,7 @@
heat_transfer_coefficient = 0.30
permeability_coefficient = 0.90
flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_ICLOTHING
var/has_sensor = 1//For the crew computer 2 = unable to change mode
var/sensor_mode = 0
/*
diff --git a/code/modules/clothing/mask.dm b/code/modules/clothing/mask.dm
index 1a8fc6d83b4..22180af9dbe 100644
--- a/code/modules/clothing/mask.dm
+++ b/code/modules/clothing/mask.dm
@@ -73,6 +73,7 @@
desc = "A face-covering mask that can be connected to an air supply."
icon_state = "gas_alt"
flags = FPRINT|TABLEPASS|SUITSPACE|MASKCOVERSMOUTH|MASKCOVERSEYES
+ flags_inv = HIDEEARS|HIDEEYES
w_class = 3.0
see_face = 0.0
item_state = "gas_alt"
diff --git a/code/modules/clothing/shoes.dm b/code/modules/clothing/shoes.dm
index 6e0a4a8d683..493cf794cb2 100644
--- a/code/modules/clothing/shoes.dm
+++ b/code/modules/clothing/shoes.dm
@@ -5,6 +5,7 @@
gender = PLURAL //Carn: for grammarically correct text-parsing
body_parts_covered = FEET
+ slot_flags = SLOT_FEET
protective_temperature = 500
heat_transfer_coefficient = 0.10
diff --git a/code/modules/clothing/spacesuits/engineer.dm b/code/modules/clothing/spacesuits/engineer.dm
new file mode 100644
index 00000000000..5ede859031e
--- /dev/null
+++ b/code/modules/clothing/spacesuits/engineer.dm
@@ -0,0 +1,37 @@
+/obj/item/clothing/head/helmet/space/engineer
+ name = "environment suit helmet"
+ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
+ flags = FPRINT | TABLEPASS | HEADSPACE | HEADCOVERSEYES
+ see_face = 0.0
+ flags_inv = HIDEEARS
+ icon_state = "engspace_helmet"
+ item_state = "engspace_helmet"
+ protective_temperature = 5000
+ armor = list(melee = 20, bullet = 5, laser = 10,energy = 5, bomb = 15, bio = 100, rad = 75)
+ var/up = 0
+
+/obj/item/clothing/head/helmet/space/engineer/ce
+ name = "chief engineer's environment suit helmet"
+ desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
+ icon_state = "cespace_helmet"
+ item_state = "cespace_helmet"
+
+/obj/item/clothing/suit/space/engineer
+ name = "environment suit"
+ desc = "An environment suit that protects against hazardous, low pressure environments. Has radiation shielding."
+ icon_state = "engspace_suit"
+ item_state = "engspace_suit"
+ protective_temperature = 5000 //For not dieing near a fire, but still not being great in a full inferno
+ slowdown = 2
+ armor = list(melee = 20, bullet = 5, laser = 10,energy = 5, bomb = 15, bio = 100, rad = 75)
+ allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
+ /obj/item/weapon/screwdriver, /obj/item/weapon/weldingtool, /obj/item/weapon/wirecutters, /obj/item/weapon/wrench, /obj/item/device/multitool, \
+ /obj/item/device/radio, /obj/item/device/analyzer)
+ //yes, you can fit everything and your dog in it.
+ //i figure this might mitigate some of the inevitable bitching about it being a downgrade from the rig.
+
+/obj/item/clothing/suit/space/engineer/ce
+ name = "chief engineer's environment suit"
+ desc = "An environment suit that protects against hazardous, low pressure environments. Has radiation shielding and Chief Engineer colours."
+ icon_state = "cespace_suit"
+ item_state = "cespace_suit"
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm
index 0aa74b947b5..c37bcf0ed34 100644
--- a/code/modules/clothing/spacesuits/rig.dm
+++ b/code/modules/clothing/spacesuits/rig.dm
@@ -15,29 +15,12 @@
item_state = "rig0-mining"
color = "mining"
-
/obj/item/clothing/head/helmet/space/rig/elite
name = "advanced RIG helmet"
icon_state = "rig0-white"
item_state = "rig0-white"
color = "white"
-/obj/item/clothing/head/helmet/space/rig/engspace_helmet
- name = "engineering space helmet"
- desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
- icon_state = "engspace_helmet"
- item_state = "engspace_helmet"
- see_face = 0.0
- var/up = 0
-
-/obj/item/clothing/head/helmet/space/rig/cespace_helmet
- name = "chief engineer's space helmet"
- desc = "A special helmet designed for work in a hazardous, low-pressure environment. Has radiation shielding and a visor that can be toggled on and off."
- icon_state = "cespace_helmet"
- item_state = "cespace_helmet"
- see_face = 0.0
- var/up = 0
-
/obj/item/clothing/head/helmet/space/rig/security
name = "security RIG helmet"
icon_state = "rig0-security"
@@ -63,18 +46,6 @@
name = "advanced RIG suit"
protective_temperature = 10000
-/obj/item/clothing/suit/space/rig/engspace_suit
- name = "engineering space suit"
- icon_state = "engspace_suit"
- item_state = "engspace_suit"
-
-/obj/item/clothing/suit/space/rig/cespace_suit
- name = "chief engineer's space suit"
- desc = "A special suit that protects against hazardous, low pressure environments. Has radiation and fire shielding, and Chief Engineer colours."
- icon_state = "cespace_suit"
- item_state = "cespace_suit"
- protective_temperature = 10000
-
/obj/item/clothing/suit/space/rig/security
name = "security RIG suit"
desc = "A suit specially designed for security to offer minor protection from environmental hazards, and greater protection from human hazards"
diff --git a/code/modules/clothing/suit.dm b/code/modules/clothing/suit.dm
index 55f1cbaaa84..8156dc337d8 100644
--- a/code/modules/clothing/suit.dm
+++ b/code/modules/clothing/suit.dm
@@ -3,5 +3,6 @@
name = "suit"
var/fire_resist = T0C+100
flags = FPRINT | TABLEPASS
- var/list/allowed = list(/obj/item/weapon/tank/emergency_oxygen)
+ allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ slot_flags = SLOT_OCLOTHING
diff --git a/code/modules/flufftext/Hallucination.dm b/code/modules/flufftext/Hallucination.dm
index 8750adbc0c0..ee260eeecbe 100644
--- a/code/modules/flufftext/Hallucination.dm
+++ b/code/modules/flufftext/Hallucination.dm
@@ -37,14 +37,14 @@ mob/living/carbon/proc/handle_hallucinations()
//src << "Traitor Items"
if(!halitem)
halitem = new
- var/list/slots_free = list("1,1","3,1")
- if(l_hand) slots_free -= "1,1"
- if(r_hand) slots_free -= "3,1"
+ var/list/slots_free = list(ui_lhand,ui_rhand)
+ if(l_hand) slots_free -= ui_lhand
+ if(r_hand) slots_free -= ui_rhand
if(istype(src,/mob/living/carbon/human))
var/mob/living/carbon/human/H = src
- if(!H.belt) slots_free += "3,0"
- if(!H.l_store) slots_free += "4,0"
- if(!H.r_store) slots_free += "5,0"
+ if(!H.belt) slots_free += ui_belt
+ if(!H.l_store) slots_free += ui_storage1
+ if(!H.r_store) slots_free += ui_storage2
if(slots_free.len)
halitem.screen_loc = pick(slots_free)
halitem.layer = 50
diff --git a/code/modules/food/food.dm b/code/modules/food/food.dm
index 4baee5736aa..bde691e6e43 100644
--- a/code/modules/food/food.dm
+++ b/code/modules/food/food.dm
@@ -1096,7 +1096,7 @@
reagents.add_reagent("nutriment",12)
afterattack(obj/O as obj, mob/user as mob)
- if(istype(O,/obj/machinery/sink) && !wrapped)
+ if(istype(O,/obj/structure/sink) && !wrapped)
user << "You place [name] under a stream of water..."
loc = get_turf(O)
return Expand()
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index 9b4425c396a..ec578027f4b 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -154,7 +154,8 @@ proc/move_mining_shuttle()
name = "Miner's pickaxe"
icon = 'items.dmi'
icon_state = "pickaxe"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 15.0
throwforce = 4.0
item_state = "pickaxe"
@@ -238,7 +239,8 @@ proc/move_mining_shuttle()
name = "Shovel"
icon = 'items.dmi'
icon_state = "shovel"
- flags = FPRINT | TABLEPASS| CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS| CONDUCT
+ slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
item_state = "shovel"
diff --git a/code/modules/mining/satchel_ore_box.dm b/code/modules/mining/satchel_ore_box.dm
index 581b97a6848..75c99097c54 100644
--- a/code/modules/mining/satchel_ore_box.dm
+++ b/code/modules/mining/satchel_ore_box.dm
@@ -6,7 +6,8 @@
name = "Mining Satchel"
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 50; //the number of ore pieces it can carry.
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
w_class = 1
/obj/item/weapon/satchel/attack_self(mob/user as mob)
diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
index ebd92e8a867..397b68839a5 100644
--- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
+++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm
@@ -601,11 +601,12 @@
..()
- if(M.gloves)
- if(M.gloves.cell)
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.cell)
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
- if(M.gloves.cell.charge >= 2500)
- M.gloves.cell.charge -= 2500
+ if(G.cell.charge >= 2500)
+ G.cell.charge -= 2500
Weaken(5)
if (stuttering < 5)
diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm
index f2825bde7a6..76406ea8a87 100644
--- a/code/modules/mob/living/carbon/alien/larva/larva.dm
+++ b/code/modules/mob/living/carbon/alien/larva/larva.dm
@@ -367,11 +367,12 @@
..()
- if(M.gloves)
- if(M.gloves.cell)
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.cell)
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
- if(M.gloves.cell.charge >= 2500)
- M.gloves.cell.charge -= 2500
+ if(G.cell.charge >= 2500)
+ G.cell.charge -= 2500
Weaken(5)
if (stuttering < 5)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 592346e86c0..27cd8e12686 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -27,19 +27,19 @@
var/list/skills = null
// var/b_type
- var/obj/item/clothing/suit/wear_suit = null
- var/obj/item/clothing/under/w_uniform = null
- var/obj/item/clothing/shoes/shoes = null
- var/obj/item/weapon/belt = null
- var/obj/item/clothing/gloves/gloves = null
- var/obj/item/clothing/glasses/glasses = null
- var/obj/item/clothing/head/head = null
- var/obj/item/clothing/ears/l_ear = null
- var/obj/item/clothing/ears/r_ear = null
+ var/obj/item/wear_suit = null
+ var/obj/item/w_uniform = null
+ var/obj/item/shoes = null
+ var/obj/item/belt = null
+ var/obj/item/gloves = null
+ var/obj/item/glasses = null
+ var/obj/item/head = null
+ var/obj/item/l_ear = null
+ var/obj/item/r_ear = null
var/obj/item/weapon/card/id/wear_id = null
- var/obj/item/weapon/r_store = null
- var/obj/item/weapon/l_store = null
- var/obj/item/weapon/s_store = null
+ var/obj/item/r_store = null
+ var/obj/item/l_store = null
+ var/obj/item/s_store = null
var/icon/stand_icon = null
var/icon/lying_icon = null
@@ -553,7 +553,7 @@
return
if (!istype(W, /obj/item))
return
- if (!( W.flags & ONBACK ))
+ if (!( W.slot_flags & SLOT_BACK ))
return
if(istype(W,/obj/item/weapon/twohanded) && W:wielded)
usr << "Unwield the [initial(W.name)] first!"
@@ -577,7 +577,10 @@
if (emptyHand)
wear_suit.DblClick()
return
- if (!( istype(W, /obj/item/clothing/suit) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_OCLOTHING ))
+ return
return
u_equip(W)
wear_suit = W
@@ -587,7 +590,9 @@
if (emptyHand)
gloves.DblClick()
return
- if (!( istype(W, /obj/item/clothing/gloves) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_GLOVES ))
return
u_equip(W)
gloves = W
@@ -597,7 +602,9 @@
if (emptyHand)
shoes.DblClick()
return
- if (!( istype(W, /obj/item/clothing/shoes) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_FEET ))
return
u_equip(W)
shoes = W
@@ -607,7 +614,9 @@
if (emptyHand)
belt.DblClick()
return
- if (!W || !W.flags || !( W.flags & ONBELT ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_BELT ))
return
u_equip(W)
belt = W
@@ -617,7 +626,9 @@
if (emptyHand)
glasses.DblClick()
return
- if (!( istype(W, /obj/item/clothing/glasses) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_EYES ))
return
u_equip(W)
glasses = W
@@ -627,10 +638,9 @@
if (emptyHand)
head.DblClick()
return
- if (( istype(W, /obj/item/weapon/paper) ))
- u_equip(W)
- head = W
- else if (!( istype(W, /obj/item/clothing/head) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_HEAD ))
return
u_equip(W)
head = W
@@ -682,7 +692,10 @@
if (emptyHand)
w_uniform.DblClick()
return
- if (!( istype(W, /obj/item/clothing/under) ))
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_ICLOTHING ))
+ return
return
u_equip(W)
w_uniform = W
@@ -694,7 +707,9 @@
return
if (!w_uniform)
return
- if (!istype(W, /obj/item/weapon/card/id) && !istype(W, /obj/item/device/pda) )
+ if (!istype(W, /obj/item))
+ return
+ if (!( W.slot_flags & SLOT_ID ))
return
u_equip(W)
wear_id = W
@@ -704,19 +719,25 @@
if (emptyHand)
l_store.DblClick()
return
- if ((!( istype(W, /obj/item) ) || W.w_class > 2 || !( w_uniform )))
+ if (!istype(W, /obj/item))
return
- u_equip(W)
- l_store = W
+ if ( ( W.slot_flags & SLOT_DENYPOCKET ) )
+ return
+ if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
+ u_equip(W)
+ l_store = W
if("storage2")
if (r_store)
if (emptyHand)
r_store.DblClick()
return
- if ((!( istype(W, /obj/item) ) || W.w_class > 2 || !( w_uniform )))
+ if (!istype(W, /obj/item))
return
- u_equip(W)
- r_store = W
+ if ( ( W.slot_flags & SLOT_DENYPOCKET ) )
+ return
+ if ( W.w_class <= 2 || ( W.slot_flags & SLOT_POCKET ) )
+ u_equip(W)
+ r_store = W
if("suit storage")
if (s_store)
if (emptyHand)
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 51ed7966208..b5ced7ef8bb 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -9,11 +9,13 @@
visible_message("\red [M] attempted to touch [src]!")
return 0
- if(M.gloves)
- if(M.gloves.cell)
- if(M.a_intent == "hurt")
- if(M.gloves.cell.charge >= 2500)
- M.gloves.cell.charge -= 2500
+
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.cell)
+ if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
+ if(G.cell.charge >= 2500)
+ G.cell.charge -= 2500
visible_message("\red [src] has been touched with the stun gloves by [M]!")
M.attack_log += text("\[[time_stamp()]\] Stungloved [src.name] ([src.ckey])")
src.attack_log += text("\[[time_stamp()]\] Has been stungloved by [M.name] ([M.ckey])")
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index 83aa059fb88..0f3eaa3e508 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -153,10 +153,11 @@ emp_act
if(H.wear_suit) H.wear_suit.add_blood(src)
else if(H.w_uniform) H.w_uniform.add_blood(src)
if(H.shoes) H.shoes.add_blood(src)
- if (H.gloves)
- H.gloves.add_blood(H)
- H.gloves.transfer_blood = 2
- H.gloves.bloody_hands_mob = H
+ if (H.gloves && istype(H.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = H.gloves
+ G.add_blood(H)
+ G.transfer_blood = 2
+ G.bloody_hands_mob = H
else
H.add_blood(H)
H.bloody_hands = 2
@@ -197,4 +198,4 @@ emp_act
if(src.wear_suit) src.wear_suit.add_blood(src)
if(src.w_uniform) src.w_uniform.add_blood(src)
- UpdateDamageIcon()
\ No newline at end of file
+ UpdateDamageIcon()
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index e3508d6b950..471d28eaf0b 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -1348,8 +1348,20 @@
else
blind.layer = 0
- if ((disabilities & 1 && ((glasses && !glasses.prescription) || !glasses)) || (glasses && glasses.prescription && !(disabilities & 1)))
- client.screen += hud_used.vimpaired
+ if(disabilities & 1)
+ if(!glasses)
+ client.screen += hud_used.vimpaired
+ else if (glasses && istype(glasses,/obj/item/clothing/glasses))
+ var/obj/item/clothing/glasses/G = glasses
+ if(!G.prescription)
+ client.screen += hud_used.vimpaired
+ else
+ client.screen += hud_used.vimpaired
+ else
+ if(glasses && istype(glasses,/obj/item/clothing/glasses))
+ var/obj/item/clothing/glasses/G = glasses
+ if(G.prescription)
+ client.screen += hud_used.vimpaired
if (eye_blurry)
client.screen += hud_used.blurry
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index 3e4a0c3b0b4..fc3ff215c6d 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -384,7 +384,7 @@
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message(text("\red [M.name] has bit [src]!"), 1)
- bruteloss += rand(1, 3)
+ adjustBruteLoss(rand(1, 3))
updatehealth()
return
@@ -463,11 +463,13 @@
- if(M.gloves)
- if(M.gloves.cell)
+
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.cell)
if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
- if(M.gloves.cell.charge >= 2500)
- M.gloves.cell.charge -= 2500
+ if(G.cell.charge >= 2500)
+ G.cell.charge -= 2500
for(var/mob/O in viewers(src, null))
if ((O.client && !( O.blinded )))
O.show_message("\red [src] has been touched with the stun gloves by [M]!", 1, "\red You hear someone fall.", 2)
diff --git a/code/modules/mob/living/carbon/monkey/monkey.dm b/code/modules/mob/living/carbon/monkey/monkey.dm
index 6ac4b83c0b4..f97a0aa2ef1 100644
--- a/code/modules/mob/living/carbon/monkey/monkey.dm
+++ b/code/modules/mob/living/carbon/monkey/monkey.dm
@@ -210,11 +210,13 @@
if (istype(loc, /turf) && istype(loc.loc, /area/start))
M << "No attacking people at spawn, you jackass."
return
- if(M.gloves)
- if(M.gloves.cell)
- if(M.a_intent == "hurt")
- if(M.gloves.cell.charge >= 2500)
- M.gloves.cell.charge -= 2500
+
+ if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves))
+ var/obj/item/clothing/gloves/G = M.gloves
+ if(G.cell)
+ if(M.a_intent == "hurt")//Stungloves. Any contact will stun the alien.
+ if(G.cell.charge >= 2500)
+ G.cell.charge -= 2500
Weaken(5)
if (stuttering < 5)
stuttering = 5
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 382a03930ce..19d219ac77a 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -7,6 +7,7 @@
w_class = 100.0
item_state = "electronic"
flags = FPRINT|TABLEPASS | CONDUCT
+
var/list/modules = list()
var/obj/item/emag = null
var/obj/item/borg/upgrade/jetpack = null
@@ -60,12 +61,12 @@
..()
src.modules += new /obj/item/borg/sight/hud/med(src)
src.modules += new /obj/item/device/healthanalyzer(src)
- src.modules += new /obj/item/weapon/reagent_containers/borghypo
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/large(src)
src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
- src.modules += new /obj/item/weapon/reagent_containers/syringe
- src.modules += new /obj/item/weapon/extinguisher/mini
- src.emag = new /obj/item/weapon/circular_saw
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
+ src.modules += new /obj/item/weapon/extinguisher/mini(src)
+ src.emag = new /obj/item/weapon/circular_saw(src)
return
@@ -143,8 +144,8 @@
New()
..()
src.modules += new /obj/item/weapon/soap/nanotrasen(src)
- src.modules += new /obj/item/weapon/trashbag
- src.modules += new/obj/item/weapon/mop
+ src.modules += new /obj/item/weapon/trashbag(src)
+ src.modules += new/obj/item/weapon/mop(src)
src.emag = new /obj/item/weapon/cleaner(src)
var/datum/reagents/R = new/datum/reagents(1000)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index 5a469ee25e9..c56e123ebdb 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -9,7 +9,8 @@
throw_range = 10
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/paper/toppaper //The topmost piece of paper.
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT
pressure_resistance = 10
/obj/item/weapon/clipboard/New()
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index 7455c7ad675..fac0cc5a842 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -11,278 +11,277 @@
throw_range = 15
layer = 4
pressure_resistance = 1
+ slot_flags = SLOT_HEAD
+ see_face = 1
+ body_parts_covered = HEAD
+ protective_temperature = 0
var/info //What's actually written on the paper.
var/info_links //A different version of the paper which includes html links at fields and EOF
var/stamps //The (text for the) stamps on the paper.
var/fields //Amount of user created fields
var/list/stamped
- var/see_face = 1
- var/body_parts_covered = HEAD
- var/protective_temperature = 0
var/rigged = 0
var/spam_flag = 0
- const/ar/deffont = "Verdana"
- const/ar/signfont = "Times New Roman"
- const/ar/crayonfont = "Comic Sans MS"
+ var/const/deffont = "Verdana"
+ var/const/signfont = "Times New Roman"
+ var/const/crayonfont = "Comic Sans MS"
- New()
- ..()
- src.pixel_y = rand(-8, 8)
- src.pixel_x = rand(-9, 9)
- spawn(2)
- if(src.info)
- src.overlays += "paper_words"
- updateinfolinks()
- return
-
- update_icon()
+/obj/item/weapon/paper/New()
+ ..()
+ src.pixel_y = rand(-8, 8)
+ src.pixel_x = rand(-9, 9)
+ spawn(2)
if(src.info)
src.overlays += "paper_words"
- return
-
- examine()
- set src in oview(1)
-
- // ..() //We don't want them to see the dumb "this is a paper" thing every time.
- if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
- usr << browse("[name][stars(info)][stamps]", "window=[name]")
- onclose(usr, "[name]")
- else
- usr << browse("[name][info][stamps]", "window=[name]")
- onclose(usr, "[name]")
- return
-
- verb/rename()
- set name = "Rename paper"
- set category = "Object"
- set src in usr
-
- if ((usr.mutations & CLUMSY) && prob(50))
- usr << "\red You cut yourself on the paper."
- return
- var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text),1,MAX_NAME_LEN)
- n_name = copytext(n_name, 1, 32)
- if ((loc == usr && usr.stat == 0))
- name = "paper[(n_name ? text("- '[n_name]'") : null)]"
- add_fingerprint(usr)
- return
-
- attack_self(mob/living/user as mob)
- examine()
- if(rigged && (Holiday == "April Fool's Day"))
- if(spam_flag == 0)
- spam_flag = 1
- playsound(src.loc, 'bikehorn.ogg', 50, 1)
- spawn(20)
- spam_flag = 0
- return
-
- attack_ai(var/mob/living/silicon/ai/user as mob)
- var/dist
- if (istype(user) && user.current) //is AI
- dist = get_dist(src, user.current)
- else //cyborg or AI not seeing through a camera
- dist = get_dist(src, user)
- if (dist < 2)
- usr << browse("[name][info][stamps]", "window=[name]")
- onclose(usr, "[name]")
- else
- usr << browse("[name][stars(info)][stamps]", "window=[name]")
- onclose(usr, "[name]")
- return
-
- proc
- addtofield(var/id, var/text, var/links = 0)
- var/locid = 0
- var/laststart = 1
- var/textindex = 1
- while(1) // I know this can cause infinite loops and fuck up the whole server, but the if(istart==0) should be safe as fuck
- var/istart = 0
- if(links)
- istart = findtext(info_links, "", laststart)
- else
- istart = findtext(info, "", laststart)
-
- if(istart==0)
- return // No field found with matching id
-
- laststart = istart+1
- locid++
- if(locid == id)
- var/iend = 1
- if(links)
- iend = findtext(info_links, "", istart)
- else
- iend = findtext(info, "", istart)
-
- //textindex = istart+26
- textindex = iend
- break
-
- if(links)
- var/before = copytext(info_links, 1, textindex)
- var/after = copytext(info_links, textindex)
- info_links = before + text + after
- else
- var/before = copytext(info, 1, textindex)
- var/after = copytext(info, textindex)
- info = before + text + after
- updateinfolinks()
-
updateinfolinks()
- info_links = info
- var/i = 0
- for(i=1,i<=fields,i++)
- addtofield(i, "write", 1)
- info_links = info_links + "write"
-
- parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob, var/iscrayon = 0)
- t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
-
- t = dd_replacetext(t, "\[center\]", "
")
- t = dd_replacetext(t, "\[/center\]", "")
- t = dd_replacetext(t, "\[br\]", "
")
- t = dd_replacetext(t, "\[b\]", "")
- t = dd_replacetext(t, "\[/b\]", "")
- t = dd_replacetext(t, "\[i\]", "")
- t = dd_replacetext(t, "\[/i\]", "")
- t = dd_replacetext(t, "\[u\]", "")
- t = dd_replacetext(t, "\[/u\]", "")
- t = dd_replacetext(t, "\[large\]", "")
- t = dd_replacetext(t, "\[/large\]", "")
- t = dd_replacetext(t, "\[sign\]", "[user.real_name]")
- t = dd_replacetext(t, "\[field\]", "")
-
- if(!iscrayon)
- t = dd_replacetext(t, "\[*\]", "")
- t = dd_replacetext(t, "\[hr\]", "
")
- t = dd_replacetext(t, "\[small\]", "")
- t = dd_replacetext(t, "\[/small\]", "")
- t = dd_replacetext(t, "\[list\]", "")
- t = dd_replacetext(t, "\[/list\]", "
")
-
- t = "[t]"
- else // If it is a crayon, and he still tries to use these, make them empty!
- t = dd_replacetext(t, "\[*\]", "")
- t = dd_replacetext(t, "\[hr\]", "")
- t = dd_replacetext(t, "\[small\]", "")
- t = dd_replacetext(t, "\[/small\]", "")
- t = dd_replacetext(t, "\[list\]", "")
- t = dd_replacetext(t, "\[/list\]", "")
-
- t = "[t]"
-
- //Count the fields
- var/laststart = 1
- while(1)
- var/i = findtext(t, "", laststart)
- if(i==0)
- break
- laststart = i+1
- fields++
-
- return t
-
- openhelp(mob/user as mob)
- user << browse({"Pen Help
-
- Crayon&Pen commands
-
- \[br\] : Creates a linebreak.
- \[center\] - \[/center\] : Centers the text.
- \[b\] - \[/b\] : Makes the text bold.
- \[i\] - \[/i\] : Makes the text italic.
- \[u\] - \[/u\] : Makes the text underlined.
- \[large\] - \[/large\] : Increases the size of the text.
- \[sign\] : Inserts a signature of your name in a foolproof way.
- \[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
-
- Pen exclusive commands
- \[small\] - \[/small\] : Decreases the size of the text.
- \[list\] - \[/list\] : A list.
- \[*\] : A dot used for lists.
- \[hr\] : Adds a horizontal rule.
- "}, "window=paper_help")
-
-
- Topic(href, href_list)
- ..()
- if ((usr.stat || usr.restrained()))
- return
-
- if(href_list["write"])
- var/id = href_list["write"]
- var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as text
-
- var/obj/item/i = usr.equipped() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
- var/iscrayon = 0
- if(!istype(i, /obj/item/weapon/pen))
- if(!istype(i, /obj/item/toy/crayon))
- return
- iscrayon = 1
-
-
- if ((!in_range(src, usr) && src.loc != usr && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != usr && usr.equipped() != i)) // Some check to see if he's allowed to write
- return
-
- t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
-
- if(id!="end")
- addtofield(text2num(id), t) // He wants to edit a field, let him.
- else
- info += t // Oh, he wants to edit to the end of the file, let him.
- updateinfolinks()
-
- usr << browse("[name][info_links][stamps]", "window=[name]") // Update the window
-
- if(!overlays.Find("paper_words"))
- overlays += "paper_words"
-
- attackby(obj/item/weapon/P as obj, mob/user as mob)
- ..()
- var/clown = 0
- if(user.mind && (user.mind.assigned_role == "Clown"))
- clown = 1
-
- if (istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
- usr << browse("[name][info_links][stamps]", "window=[name]")
- //openhelp(user)
- return
- else if(istype(P, /obj/item/weapon/stamp))
- if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
- return
-
- stamps += (stamps=="" ? "
" : "
") + "This paper has been stamped with the [P.name]."
-
- switch(P.type)
- if(/obj/item/weapon/stamp/captain)
- overlays += "paper_stamped_cap"
- if(/obj/item/weapon/stamp/hop)
- overlays += "paper_stamped_hop"
- if(/obj/item/weapon/stamp/hos)
- overlays += "paper_stamped_hos"
- if(/obj/item/weapon/stamp/ce)
- overlays += "paper_stamped_ce"
- if(/obj/item/weapon/stamp/rd)
- overlays += "paper_stamped_rd"
- if(/obj/item/weapon/stamp/cmo)
- overlays += "paper_stamped_cmo"
- if(/obj/item/weapon/stamp/denied)
- overlays += "paper_stamped_denied"
- if(/obj/item/weapon/stamp/clown)
- if (!clown)
- usr << "\red You are totally unable to use the stamp. HONK!"
- return
- else
- overlays += "paper_stamped_clown"
- else
- overlays += "paper_stamped"
- if(!stamped)
- stamped = new
- stamped += P.type
-
- user << "\blue You stamp the paper with your rubber stamp."
- add_fingerprint(user)
return
+
+/obj/item/weapon/paper/update_icon()
+ if(src.info)
+ src.overlays += "paper_words"
+ return
+
+/obj/item/weapon/paper/examine()
+ set src in oview(1)
+
+// ..() //We don't want them to see the dumb "this is a paper" thing every time.
+ if(!(istype(usr, /mob/living/carbon/human) || istype(usr, /mob/dead/observer) || istype(usr, /mob/living/silicon)))
+ usr << browse("[name][stars(info)][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ else
+ usr << browse("[name][info][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ return
+
+/obj/item/weapon/paper/verb/rename()
+ set name = "Rename paper"
+ set category = "Object"
+ set src in usr
+
+ if ((usr.mutations & CLUMSY) && prob(50))
+ usr << "\red You cut yourself on the paper."
+ return
+ var/n_name = copytext(sanitize(input(usr, "What would you like to label the paper?", "Paper Labelling", null) as text),1,MAX_NAME_LEN)
+ if ((loc == usr && usr.stat == 0))
+ name = "paper[(n_name ? text("- '[n_name]'") : null)]"
+ add_fingerprint(usr)
+ return
+
+/obj/item/weapon/paper/attack_self(mob/living/user as mob)
+ examine()
+ if(rigged && (Holiday == "April Fool's Day"))
+ if(spam_flag == 0)
+ spam_flag = 1
+ playsound(src.loc, 'bikehorn.ogg', 50, 1)
+ spawn(20)
+ spam_flag = 0
+ return
+
+/obj/item/weapon/paper/attack_ai(var/mob/living/silicon/ai/user as mob)
+ var/dist
+ if (istype(user) && user.current) //is AI
+ dist = get_dist(src, user.current)
+ else //cyborg or AI not seeing through a camera
+ dist = get_dist(src, user)
+ if (dist < 2)
+ usr << browse("[name][info][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ else
+ usr << browse("[name][stars(info)][stamps]", "window=[name]")
+ onclose(usr, "[name]")
+ return
+
+/obj/item/weapon/paper/proc/addtofield(var/id, var/text, var/links = 0)
+ var/locid = 0
+ var/laststart = 1
+ var/textindex = 1
+ while(1) // I know this can cause infinite loops and fuck up the whole server, but the if(istart==0) should be safe as fuck
+ var/istart = 0
+ if(links)
+ istart = findtext(info_links, "", laststart)
+ else
+ istart = findtext(info, "", laststart)
+
+ if(istart==0)
+ return // No field found with matching id
+
+ laststart = istart+1
+ locid++
+ if(locid == id)
+ var/iend = 1
+ if(links)
+ iend = findtext(info_links, "", istart)
+ else
+ iend = findtext(info, "", istart)
+
+ //textindex = istart+26
+ textindex = iend
+ break
+
+ if(links)
+ var/before = copytext(info_links, 1, textindex)
+ var/after = copytext(info_links, textindex)
+ info_links = before + text + after
+ else
+ var/before = copytext(info, 1, textindex)
+ var/after = copytext(info, textindex)
+ info = before + text + after
+ updateinfolinks()
+
+/obj/item/weapon/paper/proc/updateinfolinks()
+ info_links = info
+ var/i = 0
+ for(i=1,i<=fields,i++)
+ addtofield(i, "write", 1)
+ info_links = info_links + "write"
+
+/obj/item/weapon/paper/proc/parsepencode(var/t, var/obj/item/weapon/pen/P, mob/user as mob, var/iscrayon = 0)
+ t = copytext(sanitize(t),1,MAX_MESSAGE_LEN)
+
+ t = dd_replacetext(t, "\[center\]", "")
+ t = dd_replacetext(t, "\[/center\]", "")
+ t = dd_replacetext(t, "\[br\]", "
")
+ t = dd_replacetext(t, "\[b\]", "")
+ t = dd_replacetext(t, "\[/b\]", "")
+ t = dd_replacetext(t, "\[i\]", "")
+ t = dd_replacetext(t, "\[/i\]", "")
+ t = dd_replacetext(t, "\[u\]", "")
+ t = dd_replacetext(t, "\[/u\]", "")
+ t = dd_replacetext(t, "\[large\]", "")
+ t = dd_replacetext(t, "\[/large\]", "")
+ t = dd_replacetext(t, "\[sign\]", "[user.real_name]")
+ t = dd_replacetext(t, "\[field\]", "")
+
+ if(!iscrayon)
+ t = dd_replacetext(t, "\[*\]", "")
+ t = dd_replacetext(t, "\[hr\]", "
")
+ t = dd_replacetext(t, "\[small\]", "")
+ t = dd_replacetext(t, "\[/small\]", "")
+ t = dd_replacetext(t, "\[list\]", "")
+ t = dd_replacetext(t, "\[/list\]", "
")
+
+ t = "[t]"
+ else // If it is a crayon, and he still tries to use these, make them empty!
+ t = dd_replacetext(t, "\[*\]", "")
+ t = dd_replacetext(t, "\[hr\]", "")
+ t = dd_replacetext(t, "\[small\]", "")
+ t = dd_replacetext(t, "\[/small\]", "")
+ t = dd_replacetext(t, "\[list\]", "")
+ t = dd_replacetext(t, "\[/list\]", "")
+
+ t = "[t]"
+
+ //Count the fields
+ var/laststart = 1
+ while(1)
+ var/i = findtext(t, "", laststart)
+ if(i==0)
+ break
+ laststart = i+1
+ fields++
+
+ return t
+
+/obj/item/weapon/paper/proc/openhelp(mob/user as mob)
+ user << browse({"Pen Help
+
+ Crayon&Pen commands
+
+ \[br\] : Creates a linebreak.
+ \[center\] - \[/center\] : Centers the text.
+ \[b\] - \[/b\] : Makes the text bold.
+ \[i\] - \[/i\] : Makes the text italic.
+ \[u\] - \[/u\] : Makes the text underlined.
+ \[large\] - \[/large\] : Increases the size of the text.
+ \[sign\] : Inserts a signature of your name in a foolproof way.
+ \[field\] : Inserts an invisible field which lets you start type from there. Useful for forms.
+
+ Pen exclusive commands
+ \[small\] - \[/small\] : Decreases the size of the text.
+ \[list\] - \[/list\] : A list.
+ \[*\] : A dot used for lists.
+ \[hr\] : Adds a horizontal rule.
+ "}, "window=paper_help")
+
+
+/obj/item/weapon/paper/Topic(href, href_list)
+ ..()
+ if ((usr.stat || usr.restrained()))
+ return
+
+ if(href_list["write"])
+ var/id = href_list["write"]
+ var/t = strip_html_simple(input(usr, "What text do you wish to add to " + (id=="end" ? "the end of the paper" : "field "+id) + "?", "[name]", null),8192) as text
+
+ var/obj/item/i = usr.equipped() // Check to see if he still got that darn pen, also check if he's using a crayon or pen.
+ var/iscrayon = 0
+ if(!istype(i, /obj/item/weapon/pen))
+ if(!istype(i, /obj/item/toy/crayon))
+ return
+ iscrayon = 1
+
+
+ if ((!in_range(src, usr) && src.loc != usr && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != usr && usr.equipped() != i)) // Some check to see if he's allowed to write
+ return
+
+ t = parsepencode(t, i, usr, iscrayon) // Encode everything from pencode to html
+
+ if(id!="end")
+ addtofield(text2num(id), t) // He wants to edit a field, let him.
+ else
+ info += t // Oh, he wants to edit to the end of the file, let him.
+ updateinfolinks()
+
+ usr << browse("[name][info_links][stamps]", "window=[name]") // Update the window
+
+ if(!overlays.Find("paper_words"))
+ overlays += "paper_words"
+
+/obj/item/weapon/paper/attackby(obj/item/weapon/P as obj, mob/user as mob)
+ ..()
+ var/clown = 0
+ if(user.mind && (user.mind.assigned_role == "Clown"))
+ clown = 1
+
+ if (istype(P, /obj/item/weapon/pen) || istype(P, /obj/item/toy/crayon))
+ usr << browse("[name][info_links][stamps]", "window=[name]")
+ //openhelp(user)
+ return
+ else if(istype(P, /obj/item/weapon/stamp))
+ if ((!in_range(src, usr) && src.loc != user && !( istype(src.loc, /obj/item/weapon/clipboard) ) && src.loc.loc != user && user.equipped() != P))
+ return
+
+ stamps += (stamps=="" ? "
" : "
") + "This paper has been stamped with the [P.name]."
+
+ switch(P.type)
+ if(/obj/item/weapon/stamp/captain)
+ overlays += "paper_stamped_cap"
+ if(/obj/item/weapon/stamp/hop)
+ overlays += "paper_stamped_hop"
+ if(/obj/item/weapon/stamp/hos)
+ overlays += "paper_stamped_hos"
+ if(/obj/item/weapon/stamp/ce)
+ overlays += "paper_stamped_ce"
+ if(/obj/item/weapon/stamp/rd)
+ overlays += "paper_stamped_rd"
+ if(/obj/item/weapon/stamp/cmo)
+ overlays += "paper_stamped_cmo"
+ if(/obj/item/weapon/stamp/denied)
+ overlays += "paper_stamped_denied"
+ if(/obj/item/weapon/stamp/clown)
+ if (!clown)
+ usr << "\red You are totally unable to use the stamp. HONK!"
+ return
+ else
+ overlays += "paper_stamped_clown"
+ else
+ overlays += "paper_stamped"
+ if(!stamped)
+ stamped = new
+ stamped += P.type
+
+ user << "\blue You stamp the paper with your rubber stamp."
+ add_fingerprint(user)
+ return
\ No newline at end of file
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 54f845211c1..c5c50889465 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -3,7 +3,8 @@
name = "pen"
icon = 'bureaucracy.dmi'
icon_state = "pen"
- flags = FPRINT | ONBELT | TABLEPASS
+ flags = FPRINT | TABLEPASS
+ slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 0
w_class = 1.0
throw_speed = 7
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 18a5e9e2feb..60a34babe83 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -10,7 +10,7 @@
throw_speed = 7
throw_range = 15
m_amt = 60
- var/color = "cargo"
+ color = "cargo"
pressure_resistance = 5
/obj/item/weapon/stamp/captain
diff --git a/code/modules/power/antimatter/engine.dm b/code/modules/power/antimatter/engine.dm
index ae54faa10ce..824e3fe0e89 100644
--- a/code/modules/power/antimatter/engine.dm
+++ b/code/modules/power/antimatter/engine.dm
@@ -2,7 +2,7 @@
icon = 'AM_Engine.dmi'
density = 1
anchored = 1.0
- flags = 512.0
+ flags = ON_BORDER
/obj/machinery/power/am_engine/bits
name = "Antimatter Engine"
diff --git a/code/modules/power/singularity/collector.dm b/code/modules/power/singularity/collector.dm
index 82f1f4e3dae..3f66f3aa0e1 100644
--- a/code/modules/power/singularity/collector.dm
+++ b/code/modules/power/singularity/collector.dm
@@ -20,6 +20,7 @@
process()
if(P)
if(P.air_contents.toxins <= 0)
+ investigate_log("out of fuel.","singulo")
P.air_contents.toxins = 0
eject()
else
@@ -33,6 +34,7 @@
toggle_power()
user.visible_message("[user.name] turns the [src.name] [active? "on":"off"].", \
"You turn the [src.name] [active? "on":"off"].")
+ investigate_log("turned [active?"on":"off"] by [user.key]. [P?"Fuel: [round(P.air_contents.toxins/0.29)]%":"It is empty"].","singulo")
return
else
user << "\red The controls are locked!"
@@ -97,48 +99,47 @@
return ..()
- proc
- eject()
- var/obj/item/weapon/tank/plasma/Z = src.P
- if (!Z)
- return
- Z.loc = get_turf(src)
- Z.layer = initial(Z.layer)
- src.P = null
- if(active)
- toggle_power()
- else
- updateicon()
-
- receive_pulse(var/pulse_strength)
- if(P && active)
- var/power_produced = 0
- power_produced = P.air_contents.toxins*pulse_strength*20
- add_avail(power_produced)
- last_power = power_produced
- return
+ proc/eject()
+ locked = 0
+ var/obj/item/weapon/tank/plasma/Z = src.P
+ if (!Z)
return
-
-
- updateicon()
- overlays = null
- if(P)
- overlays += image('singularity.dmi', "ptank")
- if(stat & (NOPOWER|BROKEN))
- return
- if(active)
- overlays += image('singularity.dmi', "on")
-
-
- toggle_power()
- active = !active
- if(active)
- icon_state = "ca_on"
- flick("ca_active", src)
-
- else
- icon_state = "ca"
- flick("ca_deactive", src)
+ Z.loc = get_turf(src)
+ Z.layer = initial(Z.layer)
+ src.P = null
+ if(active)
+ toggle_power()
+ else
updateicon()
- return
+
+ proc/receive_pulse(var/pulse_strength)
+ if(P && active)
+ var/power_produced = 0
+ power_produced = P.air_contents.toxins*pulse_strength*20
+ add_avail(power_produced)
+ last_power = power_produced
+ return
+ return
+
+
+ proc/updateicon()
+ overlays = null
+ if(P)
+ overlays += image('singularity.dmi', "ptank")
+ if(stat & (NOPOWER|BROKEN))
+ return
+ if(active)
+ overlays += image('singularity.dmi', "on")
+
+
+ proc/toggle_power()
+ active = !active
+ if(active)
+ icon_state = "ca_on"
+ flick("ca_active", src)
+ else
+ icon_state = "ca"
+ flick("ca_deactive", src)
+ updateicon()
+ return
diff --git a/code/modules/power/singularity/emitter.dm b/code/modules/power/singularity/emitter.dm
index 19c20412b0e..6a439efe201 100644
--- a/code/modules/power/singularity/emitter.dm
+++ b/code/modules/power/singularity/emitter.dm
@@ -40,6 +40,9 @@
..()
return
+ Del()
+ investigate_log("deleted at ([x],[y],[z])","singulo")
+ ..()
update_icon()
if (active && !(stat & (NOPOWER|BROKEN)))
@@ -56,12 +59,14 @@
src.active = 0
user << "You turn off the [src]."
src.use_power = 1
+ investigate_log("turned off by [user.key]","singulo")
else
src.active = 1
user << "You turn on the [src]."
src.shot_number = 0
src.fire_delay = 100
src.use_power = 2
+ investigate_log("turned on by [user.key]","singulo")
update_icon()
else
user << "\red The controls are locked!"
diff --git a/code/modules/power/singularity/field_generator.dm b/code/modules/power/singularity/field_generator.dm
index 1525d0adfb4..cbf636bbb76 100644
--- a/code/modules/power/singularity/field_generator.dm
+++ b/code/modules/power/singularity/field_generator.dm
@@ -88,6 +88,8 @@ field_generator power level display
"You turn on the [src.name].", \
"You hear heavy droning")
turn_on()
+ investigate_log("activated by [user.key].","singulo")
+
src.add_fingerprint(user)
else
user << "The [src] needs to be firmly secured to the floor first."
@@ -215,6 +217,7 @@ field_generator power level display
for(var/mob/M in viewers(src))
M.show_message("\red The [src.name] shuts down!")
turn_off()
+ investigate_log("ran out of power and deactivated","singulo")
src.power = 0
return 0
diff --git a/code/modules/power/singularity/investigate.dm b/code/modules/power/singularity/investigate.dm
new file mode 100644
index 00000000000..6389f10707c
--- /dev/null
+++ b/code/modules/power/singularity/investigate.dm
@@ -0,0 +1,4 @@
+/area/engine/engineering/poweralert(var/state, var/source)
+ if (state != poweralm)
+ investigate_log("has a power alarm!","singulo")
+ ..()
\ No newline at end of file
diff --git a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
index 811d4ebde5b..95c565aee5d 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_accelerator.dm
@@ -152,6 +152,12 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
return
+ Move()
+ ..()
+ if(master && master.active)
+ master.toggle_power()
+ investigate_log("was moved whilst active; it powered down.","singulo")
+
ex_act(severity)
switch(severity)
if(1.0)
@@ -182,9 +188,7 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
update_icon()
switch(construction_state)
- if(0)
- icon_state="[reference]"
- if(1)
+ if(0,1)
icon_state="[reference]"
if(2)
icon_state="[reference]w"
@@ -376,7 +380,6 @@ So, hopefully this is helpful if any more icons are to be added/changed/wonderin
del(src)
return
-
proc
update_state()
return 0
diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm
index cb8868dc345..025b3f901ee 100644
--- a/code/modules/power/singularity/particle_accelerator/particle_control.dm
+++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm
@@ -49,7 +49,6 @@
if(use_power)
icon_state = "[reference]p"
else
- icon_state = "[reference]c"
switch(construction_state)
if(0)
icon_state = "[reference]"
@@ -57,7 +56,7 @@
icon_state = "[reference]"
if(2)
icon_state = "[reference]w"
- if(3)
+ else
icon_state = "[reference]c"
return
@@ -79,34 +78,34 @@
return
if(href_list["togglep"])
src.toggle_power()
+ investigate_log("turned [active?"ON":"OFF"] by [usr.key]","singulo")
message_admins("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
log_admin("[usr] toggled particle accelerator power to [active ? "on" : "off"].")
- if(href_list["scan"])
+ else if(href_list["scan"])
src.part_scan()
- if(href_list["strengthup"])
- src.strength++
+ else if(href_list["strengthup"])
+ strength++
+ if(strength > 2)
+ strength = 2
+ else
+ investigate_log("increased to [strength] by [usr.key]","singulo")
+ message_admins("[usr] increased particle accelerator power to [strength].")
+ log_admin("[usr] increased particle accelerator power to [strength].")
for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength++
+ part.strength = strength
part.update_icon()
- if(src.strength > 2)
- src.strength = 2
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = 2
- part.update_icon()
- message_admins("[usr] increased particle accelerator power to [strength].")
- log_admin("[usr] increased particle accelerator power to [strength].")
- if(href_list["strengthdown"])
- src.strength--
+
+ else if(href_list["strengthdown"])
+ strength--
+ if(strength < 0)
+ strength = 0
+ else
+ message_admins("[usr] decreased particle accelerator power to [strength].")
+ log_admin("[usr] decreased particle accelerator power to [strength].")
+ investigate_log("decreased to [strength] by [usr.key]","singulo")
for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength--
+ part.strength = strength
part.update_icon()
- if(src.strength < 0)
- src.strength = 0
- for(var/obj/structure/particle_accelerator/part in connected_parts)
- part.strength = 0
- part.update_icon()
- message_admins("[usr] decreased particle accelerator power to [strength].")
- log_admin("[usr] decreased particle accelerator power to [strength].")
src.updateDialog()
src.update_icon()
return
@@ -124,14 +123,15 @@
process()
if(src.active)
+ //a part is missing!
+ if( length(connected_parts) < 6 )
+ investigate_log("lost a connected part; It powered down.","singulo")
+ src.toggle_power()
+ return
+ //emit some particles
for(var/obj/structure/particle_accelerator/particle_emitter/PE in connected_parts)
if(PE)
PE.emit_particle(src.strength)
-// for(var/obj/structure/particle_accelerator/fuel_chamber/PF in connected_parts)
-// PF.doshit()
-// for(var/obj/structure/particle_accelerator/power_box/PB in connected_parts)
-// PB.doshit()
- //finish up putting the fuel run and power use things in here
return
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index bf31dce135b..6db291a24cd 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -42,6 +42,7 @@ var/global/list/uneatable = list(
count = 1
break
if(!count) message_admins("A singulo has been created without containment fields active ([x],[y],[z])",1)
+ investigate_log("was created. [count?"":"No containment fields were active"]","singulo")
src.energy = starting_energy
if(temp)
@@ -184,6 +185,7 @@ var/global/list/uneatable = list(
consume_range = 4
dissipate = 0 //It cant go smaller due to e loss
if(current_size == allowed_size)
+ investigate_log("grew to size [current_size]","singulo")
return 1
else if(current_size < (--temp_allowed_size))
expand(temp_allowed_size)
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index fa4b1988f3c..6e4ffec7ed1 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -294,7 +294,7 @@
output += d
output = max(0, min(SMESMAXOUTPUT, output)) // clamp to range
-
+ investigate_log("input/output; [chargelevel>output?"":""][chargelevel]/[output] | Output-mode: [online?"on":"off"] | Input-mode: [chargemode?"auto":"off"] by [usr.key]","singulo")
src.updateUsrDialog()
else
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 9b7a6715c3a..614249889c4 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -5,7 +5,8 @@
desc = "A bullet casing."
icon = 'ammo.dmi'
icon_state = "s-casing"
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
throwforce = 1
w_class = 1.0
var/caliber = "" //Which kind of guns it can be loaded into
@@ -29,7 +30,8 @@
desc = "A box of ammo"
icon_state = "357"
icon = 'ammo.dmi'
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
item_state = "syringe_kit"
m_amt = 50000
throwforce = 2
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index e6e80ae43de..99e93705c4b 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -4,7 +4,8 @@
icon = 'gun.dmi'
icon_state = "detective"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT | USEDELAY
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BELT
m_amt = 2000
w_class = 3.0
throwforce = 5
@@ -13,19 +14,18 @@
force = 5.0
origin_tech = "combat=1"
- var
- fire_sound = 'Gunshot.ogg'
- tmp/obj/item/projectile/in_chamber = null
- caliber = ""
- silenced = 0
- recoil = 0
- ejectshell = 1
- tmp/list/mob/living/target //List of who yer targeting.
- tmp/lock_time = -100
- tmp/mouthshoot = 0 ///To stop people from suiciding twice... >.>
- automatic = 0 //Used to determine if you can target multiple people.
- tmp/mob/living/last_moved_mob //Used to fire faster at more than one person.
- tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them.
+ var/fire_sound = 'Gunshot.ogg'
+ var/tmp/obj/item/projectile/in_chamber = null
+ var/caliber = ""
+ var/silenced = 0
+ var/recoil = 0
+ var/ejectshell = 1
+ var/tmp/list/mob/living/target //List of who yer targeting.
+ var/tmp/lock_time = -100
+ var/tmp/mouthshoot = 0 ///To stop people from suiciding twice... >.>
+ var/automatic = 0 //Used to determine if you can target multiple people.
+ var/tmp/mob/living/last_moved_mob //Used to fire faster at more than one person.
+ var/tmp/told_cant_shoot = 0 //So that it doesn't spam them with the fact they cannot hit them.
proc/load_into_chamber()
return 0
@@ -165,14 +165,16 @@
if (!istype(targloc) || !istype(curloc))
return
- if(!special_check(user)) return
+ if(!special_check(user))
+ return
if(!load_into_chamber())
user.visible_message("*click click*", "\red *click*")
for(var/mob/K in viewers(usr))
K << 'empty.ogg'
return
- if(!in_chamber) return
+ if(!in_chamber)
+ return
in_chamber.firer = user
in_chamber.def_zone = user.zone_sel.selecting
@@ -191,7 +193,7 @@
playsound(user, fire_sound, 10, 1)
else
playsound(user, fire_sound, 50, 1)
- user.visible_message("\red [user] fires the [src]!", "\red You fire the [src]!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
+ user.visible_message("\red [user] fires \the [src]!", "\red You fire \the [src]!", "\blue You hear a [istype(in_chamber, /obj/item/projectile/beam) ? "laser blast" : "gunshot"]!")
in_chamber.original = targloc
in_chamber.loc = get_turf(user)
@@ -210,7 +212,8 @@
in_chamber.p_y = text2num(mouse_control["icon-y"])
spawn()
- if(in_chamber) in_chamber.fired()
+ if(in_chamber)
+ in_chamber.fired()
sleep(1)
in_chamber = null
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 9fc41c86cee..9a27af99726 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -5,7 +5,8 @@
fire_sound = 'Laser.ogg'
origin_tech = "combat=2;magnets=4"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BACK
charge_cost = 100
projectile_type = "/obj/item/projectile/ion"
@@ -27,7 +28,8 @@ obj/item/weapon/gun/energy/staff
icon_state = "staffofchange"
item_state = "staffofchange"
fire_sound = 'emitter.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BACK
w_class = 4.0
charge_cost = 200
projectile_type = "/obj/item/projectile/change"
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 559ac2ae015..4ad2b395132 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -8,7 +8,8 @@
max_shells = 4
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BACK
caliber = "shotgun"
origin_tech = "combat=4;materials=2"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
@@ -67,7 +68,8 @@
max_shells = 2
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY | ONBACK
+ flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ slot_flags = SLOT_BACK
caliber = "shotgun"
origin_tech = "combat=3;materials=1"
ammo_type = "/obj/item/ammo_casing/shotgun/beanbag"
@@ -125,8 +127,8 @@
item_state = "sawnshotgun"
w_class = 3.0
item_state = "gun"
- flags &= ~ONBACK //you can't sling it on your back
- flags |= ONBELT //but you can wear it on your belt (poorly concealed under a trenchcoat, ideally)
+ 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)
name = "sawn-off shotgun"
desc = "Omar's coming!"
user << "You shorten the barrel of \the [src]!"
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index 9a3afaee3a0..63ef5f4abbf 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -494,96 +494,6 @@
else
return ..()
-//The toilet does not need to pressurized but can only handle small items.
-//You can also choke people by dunking them into the toilet.
-/obj/machinery/disposal/toilet
- name = "toilet"
- desc = "A torque rotation-based, waste disposal unit for small matter."
- icon_state = "toilet"
- density = 0//So you can stand on it.
- mode = 2
-
- attackby(var/obj/item/I, var/mob/user)
- if( !(stat & BROKEN) )
- if(istype(I, /obj/item/weapon/grab))
- var/obj/item/weapon/grab/G = I
- if(istype(G)) // handle grabbed mob
- if(ismob(G.affecting))
- var/mob/GM = G.affecting
- for (var/mob/V in viewers(usr))
- V.show_message("[user] dunks [GM.name] into the toilet!", 3)
- if(do_after(user, 30))
- if(G && G.state>1 && !GM.internal)
- GM.oxyloss += 5
-
- else if(I.w_class < 4)
- user.drop_item()
- I.loc = src
- user << "You place \the [I] into the [src]."
- for(var/mob/M in viewers(src))
- if(M == user)
- continue
- M.show_message("[user.name] places \the [I] into the [src].", 3)
- else
- user << "\red That item cannot be placed into the toilet."
- return
-
- MouseDrop_T(mob/target, mob/user)
- if (!istype(target) || target.buckled || get_dist(user, src) > 1 || get_dist(user, target) > 1 || user.stat || istype(user, /mob/living/silicon/ai))
- return//Damn that list is long
-
- for (var/mob/V in viewers(usr))
- if(target == user && !user.stat)
- V.show_message("[user] sits on the toilet.", 3)
- if(target != user && !user.restrained())
- V.show_message("[user] places [target.name] on the toilet.", 3)
- target.loc = loc
- return
-
- interact(mob/user)
- if(isAI(user) || isrobot(user))
- return
-
- add_fingerprint(user)
- for (var/mob/V in viewers(user))
- V.show_message("[user] eagerly drinks the toilet water!", 3)//Yum yum yum
- return
-
- update()
- overlays = null
- if( !(stat & BROKEN) )
- if(flush)
- overlays += image('disposal.dmi',"toilet-handle",,dir)
- if( !(stat & NOPOWER) )
- overlays += image('disposal.dmi',"toilet-ready",,dir)
- else
- icon_state = "toilet-broken"
- mode = 0
- flush = 0
- return
-
- process()
- if( !((stat & BROKEN)||(stat & NOPOWER)) )// nothing can happen if broken or not powered.
- updateDialog()
- if(!flush&&contents.len)
- flush++
- flush()
- use_power(100)// base power usage
- update()
- return
-
- flush()
- flick("toilet-flush", src)
- var/obj/structure/disposalholder/H = new()
- H.init(src)
- sleep(10)
- playsound(src, 'disposalflush.ogg', 50, 0, 0)
- sleep(30) // To prevent spam.
- H.start(src)
- flush--
- update()
- return
-
// virtual disposal object
// travels through pipes in lieu of actual items
// contents will be items flushed by the disposal
@@ -602,8 +512,8 @@
// initialize a holder from the contents of a disposal unit
proc/init(var/obj/machinery/disposal/D)
- if(!istype(D, /obj/machinery/disposal/toilet))//So it does not drain gas from a toilet which does not function on it.
- gas = D.air_contents// transfer gas resv. into holder object
+ gas = D.air_contents// transfer gas resv. into holder object
+
// now everything inside the disposal gets put into the holder
// note AM since can contain mobs or objs
diff --git a/code/modules/recycling/sortingmachinery.dm b/code/modules/recycling/sortingmachinery.dm
index 91b60d91753..54f5b202676 100755
--- a/code/modules/recycling/sortingmachinery.dm
+++ b/code/modules/recycling/sortingmachinery.dm
@@ -302,7 +302,8 @@
w_class = 1
item_state = "electronic"
- flags = FPRINT | TABLEPASS | ONBELT | CONDUCT
+ flags = FPRINT | TABLEPASS | CONDUCT
+ slot_flags = SLOT_BELT
attack_self(mob/user as mob)
interact(user)
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index 16edac90880..2c69de7ebbd 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -10,6 +10,7 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
flags = OPENCONTAINER
+
var/g_amount = 0
var/gold_amount = 0
var/diamond_amount = 0
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index bb7694a0268..a8f69b78a78 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -175,4 +175,4 @@ Note: Must be placed west/left of and R&D console to function.
stack.use(amount)
busy = 0
src.updateUsrDialog()
- return
+ return
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 32cbbe50dfc..35a86f1d777 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -352,6 +352,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
screen = 0.3
linked_lathe.busy = 1
flick("protolathe_n",linked_lathe)
+ var/key = usr.key //so we don't lose the info during the spawn delay
spawn(16)
use_power(power)
spawn(16)
@@ -380,6 +381,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(being_built.build_path)
var/obj/new_item = new being_built.build_path(src)
+ if( new_item.type == /obj/item/weapon/storage/backpack/holding )
+ new_item.investigate_log("built by [key]","singulo")
new_item.reliability = being_built.reliability
if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0)
if(being_built.locked)
diff --git a/code/setup.dm b/code/setup.dm
index d84a75d05ec..0208423c852 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -109,8 +109,23 @@ var/MAX_EXPLOSION_RANGE = 14
#define SHOES_SLOWDOWN -1.0 // How much shoes slow you down by default. Negative values speed you up
+//ITEM INVENTORY SLOT BITMASKS: (HUMANS ONLY!)
+#define SLOT_OCLOTHING 1
+#define SLOT_ICLOTHING 2
+#define SLOT_GLOVES 4
+#define SLOT_EYES 8
+#define SLOT_EARS 16
+#define SLOT_MASK 32
+#define SLOT_HEAD 64
+#define SLOT_FEET 128
+#define SLOT_ID 256
+#define SLOT_BELT 512
+#define SLOT_BACK 1024
+#define SLOT_POCKET 2048 //this is to allow items with a w_class of 3 or 4 to fit in pockets.
+#define SLOT_DENYPOCKET 4096 //this is to deny items with a w_class of 2 or 1 to fit in pockets.
+
+
//FLAGS BITMASK
-#define ONBACK 1 // can be put in back slot
#define TABLEPASS 2 // can pass by a table or rack
/********************************************************************************
@@ -128,7 +143,6 @@ var/MAX_EXPLOSION_RANGE = 14
#define NODELAY 32768 // 1 second attackby delay skipped (Can be used once every 0.2s). Most objects have a 1s attackby delay, which doesn't require a flag.
#define NOSHIELD 32 // weapon not affected by shield
#define CONDUCT 64 // conducts electricity (metal etc.)
-#define ONBELT 128 // can be put in belt slot
#define FPRINT 256 // takes a fingerprint
#define ON_BORDER 512 // item has priority to check when entering or leaving
@@ -192,35 +206,33 @@ var/MAX_EXPLOSION_RANGE = 14
#define FULL_BODY 2047
//bitflags for mutations
-var/const
- TK =(1<<0)
- COLD_RESISTANCE =(1<<1)
- XRAY =(1<<2)
- HULK =(1<<3)
- CLUMSY =(1<<4)
- FAT =(1<<5)
- HUSK =(1<<6)
- LASER =(1<<7)
- HEAL =(1<<8)
- mNobreath =(1<<9)
- mRemote =(1<<10)
- mRegen =(1<<11)
- mRun =(1<<12)
- mRemotetalk =(1<<13)
- mMorph =(1<<14)
- mBlend =(1<<15)
+var/const/TK =(1<<0)
+var/const/COLD_RESISTANCE =(1<<1)
+var/const/XRAY =(1<<2)
+var/const/HULK =(1<<3)
+var/const/CLUMSY =(1<<4)
+var/const/FAT =(1<<5)
+var/const/HUSK =(1<<6)
+var/const/LASER =(1<<7)
+var/const/HEAL =(1<<8)
+var/const/mNobreath =(1<<9)
+var/const/mRemote =(1<<10)
+var/const/mRegen =(1<<11)
+var/const/mRun =(1<<12)
+var/const/mRemotetalk =(1<<13)
+var/const/mMorph =(1<<14)
+var/const/mBlend =(1<<15)
//the "&" operator cannot go higher than (2^16)-1
- mHallucination =(1<<0)
- mFingerprints =(1<<1)
- mShock =(1<<2)
- mSmallsize =(1<<3)
- NOCLONE =(1<<4)
+var/const/mHallucination =(1<<0)
+var/const/mFingerprints =(1<<1)
+var/const/mShock =(1<<2)
+var/const/mSmallsize =(1<<3)
+var/const/NOCLONE =(1<<4)
//mob/var/stat things
-var/const
- CONSCIOUS = 0
- UNCONSCIOUS = 1
- DEAD = 2
+var/const/CONSCIOUS = 0
+var/const/UNCONSCIOUS = 1
+var/const/DEAD = 2
// channel numbers for power
#define EQUIP 1
@@ -249,12 +261,11 @@ var/const
#define MAX_STACK_AMOUNT_GLASS 50
#define MAX_STACK_AMOUNT_RODS 60
-var/const
- GAS_O2 = 1 << 0
- GAS_N2 = 1 << 1
- GAS_PL = 1 << 2
- GAS_CO2 = 1 << 3
- GAS_N2O = 1 << 4
+var/const/GAS_O2 = 1 << 0
+var/const/GAS_N2 = 1 << 1
+var/const/GAS_PL = 1 << 2
+var/const/GAS_CO2 = 1 << 3
+var/const/GAS_N2O = 1 << 4
var/list/accessable_z_levels = list("3" = 15, "4" = 35, "6" = 50)
diff --git a/code/unused/pda2/pda2.dm b/code/unused/pda2/pda2.dm
index 29d3556292c..7aa1f538f57 100644
--- a/code/unused/pda2/pda2.dm
+++ b/code/unused/pda2/pda2.dm
@@ -34,7 +34,8 @@
icon_state = "pda"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS | ONBELT
+ flags = FPRINT | TABLEPASS
+ slow_flags = SLOT_BELT
var/owner = null
var/default_cartridge = null // Access level defined by cartridge
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 2f077b367e8..310ad8f733a 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 7c834f10c98..79e2ea2368a 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 13f1e39fa05..a2984ea59ae 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/assemblies.dmi b/icons/obj/assemblies.dmi
index aee76f5e3e6..80b959a1157 100644
Binary files a/icons/obj/assemblies.dmi and b/icons/obj/assemblies.dmi differ
diff --git a/icons/obj/atmospherics/mixer.dmi b/icons/obj/atmospherics/mixer.dmi
index f592d73e8be..79b62c87df2 100644
Binary files a/icons/obj/atmospherics/mixer.dmi and b/icons/obj/atmospherics/mixer.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index eb857dd67ee..8eca3452e25 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index b9b08c6120b..63ae8789e0b 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 6521cf5f240..5c1568d50ec 100755
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index 4e51c0ff590..a3dea0e843d 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/maps/tgstation.2.0.8.dmm b/maps/tgstation.2.0.8.dmm
index f44dad511ef..4aed37df9f8 100755
--- a/maps/tgstation.2.0.8.dmm
+++ b/maps/tgstation.2.0.8.dmm
@@ -3,86 +3,86 @@
"aac" = (/turf/space,/area/syndicate_station/two)
"aad" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area)
"aae" = (/obj/structure/lattice,/turf/space,/area)
-"aaf" = (/turf/simulated/wall/r_wall,/area/security/warden{name = "Armory"})
+"aaf" = (/turf/simulated/wall/r_wall,/area/security/armoury)
"aag" = (/obj/structure/grille,/turf/space,/area)
-"aah" = (/turf/simulated/floor/engine/vacuum,/area/security/warden{name = "Armory"})
-"aai" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aaj" = (/obj/machinery/deployable/barrier,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aak" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aal" = (/obj/machinery/flasher/portable,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aam" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aan" = (/obj/structure/closet/bombclosetsecurity,/obj/machinery/camera{c_tag = "Armoury"; dir = 2; network = "Security"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aao" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aap" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aaq" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/light{dir = 1},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aar" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aas" = (/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aat" = (/obj/structure/rack,/obj/item/ammo_casing/shotgun,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aau" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aav" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
+"aah" = (/turf/simulated/floor/engine/vacuum,/area/security/armoury)
+"aai" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aaj" = (/obj/machinery/deployable/barrier,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aak" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aal" = (/obj/machinery/flasher/portable,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aam" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aan" = (/obj/structure/closet/bombclosetsecurity,/obj/machinery/camera{c_tag = "Armoury"; dir = 2; network = "Security"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aao" = (/obj/structure/closet/l3closet/security,/turf/simulated/floor,/area/security/armoury)
+"aap" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aaq" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/light{dir = 1},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aar" = (/obj/structure/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aas" = (/turf/simulated/floor,/area/security/armoury)
+"aat" = (/obj/structure/rack,/obj/item/ammo_casing/shotgun,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aau" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/security/armoury)
+"aav" = (/obj/structure/rack,/obj/item/weapon/gun/energy/laser,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"aaw" = (/turf/simulated/floor/plating/airless,/area)
-"aax" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aay" = (/obj/structure/window/reinforced,/obj/item/weapon/wrench,/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aaz" = (/obj/machinery/door/poddoor{id = "armory"; name = "Armory Blast Door"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
+"aax" = (/obj/machinery/flasher/portable,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aay" = (/obj/structure/window/reinforced,/obj/item/weapon/wrench,/obj/machinery/flasher/portable,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aaz" = (/obj/machinery/door/poddoor{id = "armory"; name = "Armory Blast Door"},/turf/simulated/floor,/area/security/armoury)
"aaA" = (/turf/simulated/wall/r_wall,/area/security/range)
"aaB" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/range)
-"aaC" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aaD" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/warden{name = "Armory"})
-"aaE" = (/obj/structure/rack,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/storage/body_bag_box,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/security/warden{name = "Armory"})
-"aaF" = (/obj/structure/rack,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/handcuff_kit,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaG" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaH" = (/obj/structure/table/reinforced,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaI" = (/obj/machinery/camera{c_tag = "Armoury Secure Section"; dir = 8; network = "Security"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
+"aaC" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aaD" = (/obj/machinery/deployable/barrier,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/armoury)
+"aaE" = (/obj/structure/rack,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/gun/energy/taser,/obj/item/weapon/storage/body_bag_box,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/security/armoury)
+"aaF" = (/obj/structure/rack,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/baton,/obj/item/weapon/storage/handcuff_kit,/turf/simulated/floor,/area/security/armoury)
+"aaG" = (/obj/structure/table/reinforced,/turf/simulated/floor,/area/security/armoury)
+"aaH" = (/obj/structure/table/reinforced,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/obj/item/ammo_casing/shotgun/beanbag,/turf/simulated/floor,/area/security/armoury)
+"aaI" = (/obj/machinery/camera{c_tag = "Armoury Secure Section"; dir = 8; network = "Security"},/turf/simulated/floor,/area/security/armoury)
"aaJ" = (/turf/simulated/floor/plating,/area/security/range)
"aaK" = (/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/security/range)
"aaL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/security/range)
-"aaM" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/reagent_dispensers/peppertank{pixel_x = -30},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/warden{name = "Armory"})
-"aaN" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/warden{name = "Armory"})
-"aaO" = (/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/security/warden{name = "Armory"})
-"aaP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaS" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aaT" = (/obj/machinery/light,/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/item/weapon/storage/trackimp_kit,/obj/item/weapon/storage/chemimp_kit,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaU" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/obj/item/weapon/pepperspray,/obj/item/weapon/pepperspray,/obj/item/weapon/pepperspray,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaV" = (/obj/machinery/power/apc{dir = 4; name = "Armoury APC"; pixel_x = 27; pixel_y = 2},/obj/structure/rack,/obj/item/weapon/storage/flashbang_kit,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaW" = (/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aaX" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"aaY" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aaZ" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"aba" = (/obj/item/clothing/suit/space/rig/security,/obj/item/clothing/head/helmet/space/rig/security,/obj/machinery/light,/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
-"abb" = (/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = -2},/obj/structure/table,/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/warden{name = "Armory"})
+"aaM" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/reagent_dispensers/peppertank{pixel_x = -30},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/armoury)
+"aaN" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/security/armoury)
+"aaO" = (/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/security/armoury)
+"aaP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor,/area/security/armoury)
+"aaQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor,/area/security/armoury)
+"aaR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/security/armoury)
+"aaS" = (/obj/structure/rack,/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/obj/item/clothing/mask/gas{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aaT" = (/obj/machinery/light,/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/item/weapon/storage/trackimp_kit,/obj/item/weapon/storage/chemimp_kit,/obj/item/weapon/storage/lockbox/loyalty,/turf/simulated/floor,/area/security/armoury)
+"aaU" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/obj/item/weapon/pepperspray,/obj/item/weapon/pepperspray,/obj/item/weapon/pepperspray,/turf/simulated/floor,/area/security/armoury)
+"aaV" = (/obj/machinery/power/apc{dir = 4; name = "Armoury APC"; pixel_x = 27; pixel_y = 2},/obj/structure/rack,/obj/item/weapon/storage/flashbang_kit,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/security/armoury)
+"aaW" = (/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/table,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aaX" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor,/area/security/armoury)
+"aaY" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aaZ" = (/obj/structure/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"aba" = (/obj/item/clothing/suit/space/rig/security,/obj/item/clothing/head/helmet/space/rig/security,/obj/machinery/light,/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
+"abb" = (/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = -2},/obj/structure/table,/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/armoury)
"abc" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/security/range)
"abd" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor,/area/security/range)
"abe" = (/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/security/range)
"abf" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced{tag = "icon-reinf_1tilethick"; icon_state = "reinf_1tilethick"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/security/range)
"abg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/camera{c_tag = "Firing Range North"; dir = 8; network = "Security"},/turf/simulated/floor,/area/security/range)
-"abh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/warden{name = "Armory"})
-"abi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"abj" = (/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/warden{name = "Armory"})
-"abk" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/wall/r_wall,/area/security/warden{name = "Armory"})
-"abl" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/wall/r_wall,/area/security/warden{name = "Armory"})
-"abm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/warden{name = "Armory"})
-"abn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/warden{name = "Armory"})
-"abo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/warden{name = "Armory"})
+"abh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/armoury)
+"abi" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor,/area/security/armoury)
+"abj" = (/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/armoury)
+"abk" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/wall/r_wall,/area/security/armoury)
+"abl" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/wall/r_wall,/area/security/armoury)
+"abm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/armoury)
+"abn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/security/armoury)
+"abo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/armoury)
"abp" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s6"; icon_state = "swall_s6"; dir = 2},/area/shuttle/escape_pod3/station)
"abq" = (/obj/structure/shuttle/window{tag = "icon-3"; icon_state = "3"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"abr" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s10"; icon_state = "swall_s10"; dir = 2},/area/shuttle/escape_pod3/station)
"abs" = (/turf/simulated/floor,/area/security/range)
"abt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/target_stake,/obj/machinery/magnetic_module{code = 712; magnetic_field = 2; max_dist = 5; on = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
"abu" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
-"abv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/warden{name = "Armory"})
-"abw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"abx" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/warden{name = "Armory"})
-"aby" = (/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"abz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
-"abA" = (/obj/machinery/camera{c_tag = "North Corridor"; dir = 8; network = "Security"},/turf/simulated/floor,/area/security/warden{name = "Armory"})
+"abv" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/armoury)
+"abw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/security/armoury)
+"abx" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/armoury)
+"aby" = (/obj/machinery/door/airlock/glass/glass_security{name = "Armory"; req_access_txt = "1"},/turf/simulated/floor,/area/security/armoury)
+"abz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/security/armoury)
+"abA" = (/obj/machinery/camera{c_tag = "North Corridor"; dir = 8; network = "Security"},/turf/simulated/floor,/area/security/armoury)
"abB" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/shuttle/escape_pod3/station)
"abC" = (/obj/structure/stool/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"abD" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/security/range)
"abE" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/range)
"abF" = (/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/security/range)
-"abG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/warden{name = "Armory"})
+"abG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/armoury)
"abH" = (/turf/simulated/wall/r_wall,/area/security/hos)
"abI" = (/obj/machinery/door/window{base_state = "right"; dir = 1; icon = 'windoor.dmi'; icon_state = "right"; name = "Head of Security"; req_access_txt = "19"},/turf/simulated/floor,/area/security/hos)
"abJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/wall/r_wall,/area/security/hos)
@@ -112,8 +112,8 @@
"ach" = (/obj/structure/lattice,/obj/structure/lattice,/turf/space,/area)
"aci" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/security/range)
"acj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/security/range)
-"ack" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/warden{name = "Armory"})
-"acl" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/warden{name = "Armory"})
+"ack" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/armoury)
+"acl" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/armoury)
"acm" = (/obj/structure/closet/wardrobe/hos,/turf/simulated/floor{dir = 8; icon_state = "carpetside"},/area/security/hos)
"acn" = (/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
"aco" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/security/hos)
@@ -297,7 +297,7 @@
"afK" = (/obj/structure/table,/obj/structure/bedsheetbin,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/camera{c_tag = "Prison Laundry Room"; dir = 2; network = "Prison"},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Prison Laundry Room"; dir = 6; network = "Security"},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/prison)
"afL" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/wall,/area/prison)
"afM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
-"afN" = (/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
+"afN" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
"afO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/wall/r_wall,/area/prison)
"afP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/wall/r_wall,/area/prison)
"afQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/prison)
@@ -339,7 +339,7 @@
"agA" = (/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
"agB" = (/obj/machinery/door/airlock{name = "Washoom Toilet"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
"agC" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
-"agD" = (/obj/machinery/disposal/toilet{tag = "icon-toilet (WEST)"; icon_state = "toilet"; dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
+"agD" = (/obj/structure/toilet{tag = "icon-toilet (WEST)"; icon_state = "toilet"; dir = 8},/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/prison)
"agE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple{dir = 4},/turf/simulated/wall/r_wall,/area/prison)
"agF" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/prison)
"agG" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/prison)
@@ -565,7 +565,7 @@
"akS" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/crew_quarters/courtroom)
"akT" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/crew_quarters/courtroom)
"akU" = (/obj/machinery/light,/turf/simulated/floor,/area/crew_quarters/courtroom)
-"akV" = (/obj/structure/closet/extinguisher{pixel_x = 5; pixel_y = -32},/turf/simulated/floor,/area/crew_quarters/courtroom)
+"akV" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -32},/turf/simulated/floor,/area/crew_quarters/courtroom)
"akW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor,/area/crew_quarters/courtroom)
"akX" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor,/area/crew_quarters/courtroom)
"akY" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/crew_quarters/courtroom)
@@ -731,9 +731,9 @@
"aoc" = (/obj/machinery/flasher{dir = 4; id = "permflash"; pixel_x = -24; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/prison)
"aod" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/prison)
"aoe" = (/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/prison)
-"aof" = (/obj/structure/closet/extinguisher{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/prison)
+"aof" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/prison)
"aog" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/security/brig)
-"aoh" = (/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/security/brig)
+"aoh" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/security/brig)
"aoi" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "white"},/area/security/brig)
"aoj" = (/turf/simulated/floor{icon_state = "white"},/area/security/brig)
"aok" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{tag = "icon-left (EAST)"; name = "Cell 3"; icon_state = "left"; dir = 4; req_access_txt = "1"; id = "Cell 3"},/turf/simulated/floor,/area/security/brig)
@@ -757,7 +757,7 @@
"aoC" = (/obj/structure/closet/secure_closet/brig,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/prison)
"aoD" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_x = 3; pixel_y = 2},/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_x = 3; pixel_y = -2},/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_x = 3; pixel_y = 6},/obj/machinery/light{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/security/brig)
"aoE" = (/obj/machinery/bot/medbot{name = "Mr Fixit"; on = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/security/brig)
-"aoF" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/security/brig)
+"aoF" = (/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/security/brig)
"aoG" = (/obj/machinery/camera{c_tag = "Medic Station"; dir = 1; network = "Security"},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"; tag = "icon-warnwhite (NORTH)"},/area/security/brig)
"aoH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/camera{c_tag = "Brig South"; dir = 1; network = "Security"},/turf/simulated/floor,/area/security/brig)
"aoI" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
@@ -891,7 +891,7 @@
"arg" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 23},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/crew_quarters)
"arh" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/crew_quarters/fitness)
"ari" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/fitness)
-"arj" = (/obj/machinery/sink{pixel_y = 29},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/fitness)
+"arj" = (/obj/structure/sink{pixel_y = 29},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/fitness)
"ark" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/crew_quarters/fitness)
"arl" = (/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/ointment{pixel_y = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/crew_quarters/fitness)
"arm" = (/obj/machinery/camera{c_tag = "Fitness Room"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/fitness)
@@ -1014,7 +1014,7 @@
"atz" = (/obj/structure/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters)
"atA" = (/obj/machinery/light{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters)
"atB" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters)
-"atC" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters)
+"atC" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters)
"atD" = (/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"atE" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/fitness)
"atF" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/crew_quarters/fitness)
@@ -1042,7 +1042,7 @@
"aub" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fpmaint)
"auc" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore)
"aud" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/fore)
-"aue" = (/obj/structure/closet/extinguisher{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
+"aue" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
"auf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/maintenance/fsmaint)
"aug" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 4; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/sortjunction{dir = 1; icon_state = "pipe-j2s"; sortType = list("Detective's Office","Law Office")},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"auh" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters)
@@ -1257,7 +1257,7 @@
"ayi" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/ai_monitored/storage/eva)
"ayj" = (/obj/machinery/light/small{dir = 8},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/crew_quarters)
"ayk" = (/obj/item/weapon/bedsheet,/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/crew_quarters)
-"ayl" = (/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
+"ayl" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aym" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"ayn" = (/obj/structure/table,/obj/item/clothing/under/suit_jacket/really_black,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters)
"ayo" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters)
@@ -1331,7 +1331,7 @@
"azE" = (/obj/effect/sign/securearea,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"azF" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/airlock/secure{name = "E.V.A."; req_access_txt = "18"},/obj/structure/cable,/turf/simulated/floor,/area/ai_monitored/storage/eva)
"azG" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/crew_quarters)
-"azH" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
+"azH" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"azI" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"azJ" = (/obj/structure/table,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters)
"azK" = (/obj/machinery/light,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters)
@@ -1398,7 +1398,7 @@
"aAT" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
"aAU" = (/obj/machinery/camera{c_tag = "Dormitory South"; c_tag_order = 999; dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters)
"aAV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters)
-"aAW" = (/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold{color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
+"aAW" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/machinery/atmospherics/pipe/manifold{color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aAX" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "Dormitory Bathrooms APC"; pixel_x = 26; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aAY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/toilet)
"aAZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -1583,7 +1583,7 @@
"aEw" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry)
"aEx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/secondary/entry)
"aEy" = (/obj/machinery/camera{c_tag = "Security Checkpoint External"; network = "Arrivals"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry)
-"aEz" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry)
+"aEz" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry)
"aEA" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/hallway/secondary/entry)
"aEB" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
"aEC" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fpmaint2)
@@ -1627,7 +1627,7 @@
"aFo" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central)
"aFp" = (/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/hallway/primary/central)
"aFq" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/hallway/primary/central)
-"aFr" = (/obj/machinery/light/small,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal/toilet,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
+"aFr" = (/obj/machinery/light/small,/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/toilet{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aFs" = (/obj/machinery/light/small,/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aFt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"aFu" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -1749,7 +1749,7 @@
"aHG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/port)
"aHH" = (/obj/machinery/light{dir = 1},/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
"aHI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/port)
-"aHJ" = (/obj/structure/closet/extinguisher{pixel_x = 5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/port)
+"aHJ" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/port)
"aHK" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor,/area/hallway/primary/port)
"aHL" = (/obj/machinery/door/firedoor/border_only{dir = 4},/turf/simulated/floor,/area/hallway/primary/port)
"aHM" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/hallway/primary/port)
@@ -1757,7 +1757,7 @@
"aHO" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
"aHP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
"aHQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/central)
-"aHR" = (/obj/machinery/camera{c_tag = "AI Chamber North"; dir = 2},/obj/structure/closet/extinguisher{pixel_x = 5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/central)
+"aHR" = (/obj/machinery/camera{c_tag = "AI Chamber North"; dir = 2},/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/central)
"aHS" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/primary/central)
"aHT" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/hallway/primary/central)
"aHU" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/central)
@@ -1776,7 +1776,7 @@
"aIh" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/hallway/primary/central)
"aIi" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central)
"aIj" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 1},/area/hallway/primary/central)
-"aIk" = (/obj/machinery/light{dir = 1},/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/central)
+"aIk" = (/obj/machinery/light{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/central)
"aIl" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor,/area/hallway/primary/central)
"aIm" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/turf/simulated/floor,/area/hallway/primary/central)
"aIn" = (/turf/simulated/floor{icon_state = "wood"},/area/library)
@@ -1902,7 +1902,7 @@
"aKD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "wood"},/area/library)
"aKE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "wood"},/area/library)
"aKF" = (/obj/structure/disposalpipe/sortjunction{sortType = list("Library")},/turf/simulated/wall,/area/library)
-"aKG" = (/obj/machinery/power/apc{name = "Hydroponics APC"; dir = 8; pixel_x = -27; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "green"},/area/hydroponics)
+"aKG" = (/obj/machinery/power/apc{name = "Hydroponics APC"; dir = 8; pixel_x = -27; pixel_y = 3},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "green"},/area/hydroponics)
"aKH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{icon_state = "greencorner"; dir = 8},/area/hydroponics)
"aKI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor,/area/hydroponics)
"aKJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/turf/simulated/floor{icon_state = "greencorner"; dir = 2},/area/hydroponics)
@@ -1922,7 +1922,7 @@
"aKX" = (/obj/structure/stool,/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/chapel/main)
"aKY" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
"aKZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/structure/stool,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
-"aLa" = (/obj/structure/closet/extinguisher{pixel_x = 27},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
+"aLa" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/machinery/light,/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"aLb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/chapel/main)
"aLc" = (/turf/simulated/wall,/area/hallway/secondary/exit)
"aLd" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry)
@@ -1944,7 +1944,7 @@
"aLt" = (/obj/effect/landmark{name = "emcloset"},/turf/simulated/floor,/area/hallway/primary/port)
"aLu" = (/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port)
"aLv" = (/obj/machinery/camera{c_tag = "Port Hallway"; dir = 1},/obj/structure/table,/turf/simulated/floor,/area/hallway/primary/port)
-"aLw" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = -32},/turf/simulated/floor,/area/hallway/primary/port)
+"aLw" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -32},/turf/simulated/floor,/area/hallway/primary/port)
"aLx" = (/turf/simulated/wall/r_wall,/area/hallway/primary/port)
"aLy" = (/turf/simulated/wall/r_wall,/area/hallway/primary/central)
"aLz" = (/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central)
@@ -2150,7 +2150,7 @@
"aPr" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/storage/tools)
"aPs" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/closet/secure_closet/chemical,/turf/simulated/floor{icon_state = "white"},/area/storage/tools)
"aPt" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/storage/tools)
-"aPu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/storage/tools)
+"aPu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/storage/tools)
"aPv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/storage/tools)
"aPw" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/hallway/primary/central)
"aPx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/central)
@@ -2434,7 +2434,7 @@
"aUP" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/security/vacantoffice)
"aUQ" = (/obj/machinery/copier,/turf/simulated/floor,/area/security/vacantoffice)
"aUR" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/plating,/area/maintenance/port)
-"aUS" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/disposal/toilet{tag = "icon-toilet (EAST)"; icon_state = "toilet"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
+"aUS" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/light/small{dir = 1},/obj/structure/toilet{tag = "icon-toilet (EAST)"; icon_state = "toilet"; dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aUT" = (/obj/machinery/door/airlock{name = "Unit 1"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aUU" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aUV" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
@@ -2462,8 +2462,8 @@
"aVr" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"aVs" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-2"; tag = "90Curve"},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"aVt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"aVu" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"aVv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/airlock/secure{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/crew_quarters/heads)
+"aVu" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"aVv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/airlock/secure{name = "Heads of Staff"; req_access_txt = "19"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"aVw" = (/turf/simulated/wall,/area/hallway/primary/central)
"aVx" = (/obj/machinery/camera{c_tag = "Bridge Entrance East"; dir = 4; network = "SS13"},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central)
"aVy" = (/obj/machinery/power/apc{name = "Library APC"; dir = 8; pixel_x = -27; pixel_y = -1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor{icon_state = "wood"},/area/library)
@@ -2537,15 +2537,15 @@
"aWO" = (/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)
"aWP" = (/obj/machinery/turret{id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
"aWQ" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aWR" = (/obj/machinery/copier,/turf/simulated/floor,/area/crew_quarters/heads)
-"aWS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
-"aWT" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads)
-"aWU" = (/obj/machinery/light{dir = 1},/obj/structure/table/reinforced,/obj/machinery/keycard_auth{pixel_y = 30},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/crew_quarters/heads)
-"aWV" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor,/area/crew_quarters/heads)
-"aWW" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/crew_quarters/heads)
-"aWX" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor,/area/crew_quarters/heads)
-"aWY" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/crew_quarters/heads)
-"aWZ" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Bridge Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Bridge"},/turf/simulated/floor{icon_state = "bot"},/area/crew_quarters/heads)
+"aWR" = (/obj/machinery/copier,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWT" = (/obj/structure/filingcabinet,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWU" = (/obj/machinery/light{dir = 1},/obj/structure/table/reinforced,/obj/machinery/keycard_auth{pixel_y = 30},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWV" = (/obj/machinery/alarm{pixel_y = 23},/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWW" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWX" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aWY" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Bridge Delivery"; req_access_txt = "19"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/crew_quarters/heads/hop)
+"aWZ" = (/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Bridge Delivery"; req_access_txt = "34"},/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Bridge"},/turf/simulated/floor{icon_state = "bot"},/area/crew_quarters/heads/hop)
"aXa" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/library)
"aXb" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/library)
"aXc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/library)
@@ -2574,7 +2574,7 @@
"aXz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/chapel/main)
"aXA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating,/area/chapel/main)
"aXB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/chapel/main)
-"aXC" = (/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
+"aXC" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
"aXD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aXE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry)
"aXF" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/turf/simulated/floor,/area/hallway/secondary/entry)
@@ -2583,7 +2583,7 @@
"aXI" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/port)
"aXJ" = (/obj/machinery/door/airlock{name = "Unit 2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aXK" = (/obj/structure/disposalpipe/junction,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"aXL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light/small{dir = 4},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
+"aXL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/light/small{dir = 4},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aXM" = (/obj/machinery/portable_atmospherics/pump,/obj/machinery/camera{c_tag = "Locker Room East"; dir = 4; network = "SS13"},/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
"aXN" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/locker)
"aXO" = (/obj/machinery/mineral/input,/turf/simulated/floor{tag = "icon-vault (NORTHWEST)"; icon_state = "vault"; dir = 9},/area/mint)
@@ -2611,12 +2611,12 @@
"aYk" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
"aYl" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aYm" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"aYn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"aYo" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/crew_quarters/heads)
-"aYp" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/crew_quarters/heads)
-"aYq" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/crew_quarters/heads)
-"aYr" = (/turf/simulated/floor,/area/crew_quarters/heads)
-"aYs" = (/obj/structure/closet/wardrobe/hop,/turf/simulated/floor,/area/crew_quarters/heads)
+"aYn" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"aYo" = (/obj/machinery/vending/coffee,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aYp" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/crew_quarters/heads/hop)
+"aYq" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/crew_quarters/heads/hop)
+"aYr" = (/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aYs" = (/obj/structure/closet/wardrobe/hop,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"aYt" = (/obj/machinery/door/firedoor/border_only{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central)
"aYu" = (/obj/machinery/door/firedoor/border_only{dir = 8},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
@@ -2627,7 +2627,7 @@
"aYA" = (/obj/machinery/power/apc{dir = 1; name = "Starboard Hall APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/hallway/primary/starboard)
-"aYD" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/starboard)
+"aYD" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYE" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYF" = (/obj/structure/disposalpipe/sortjunction{backsort = 0; dir = 4; icon_state = "pipe-j2s"; sortType = list()},/turf/simulated/floor,/area/hallway/primary/starboard)
"aYG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/starboard)
@@ -2651,7 +2651,7 @@
"aYY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/port)
"aYZ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/port)
"aZa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"aZb" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
+"aZb" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aZc" = (/obj/machinery/camera{c_tag = "Mint Press"; dir = 4; network = "Command"},/turf/simulated/floor{icon_state = "dark"},/area/mint)
"aZd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mint)
"aZe" = (/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/mint)
@@ -2675,12 +2675,12 @@
"aZw" = (/turf/simulated/wall,/area/turret_protected/ai)
"aZx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"aZy" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"aZz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"aZA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/vending/cola,/turf/simulated/floor,/area/crew_quarters/heads)
-"aZB" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor,/area/crew_quarters/heads)
-"aZC" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/heads)
-"aZD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/stamp/hop,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/crew_quarters/heads)
-"aZE" = (/turf/simulated/wall,/area/crew_quarters/heads)
+"aZz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"aZA" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/vending/cola,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aZB" = (/mob/living/simple_animal/corgi/Ian,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aZC" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/heads/hop)
+"aZD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/stamp/hop,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"aZE" = (/turf/simulated/wall,/area/crew_quarters/heads/hop)
"aZF" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central)
"aZG" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/turf/simulated/floor,/area/hallway/primary/starboard)
"aZH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/starboard)
@@ -2697,7 +2697,7 @@
"aZS" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/port)
"aZT" = (/obj/machinery/door/airlock{name = "Unit 3"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aZU" = (/obj/structure/disposalpipe/junction,/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"aZV" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
+"aZV" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"aZW" = (/obj/item/latexballon{name = "Larry"},/turf/simulated/floor/plating,/area/crew_quarters/locker/locker_toilet)
"aZX" = (/obj/item/latexballon{name = "Moe"},/turf/simulated/floor/plating,/area/crew_quarters/locker/locker_toilet)
"aZY" = (/obj/item/weapon/paper{desc = "Due to spending cutbacks certin organic crewmembers have had to be replaced with synthetic analogs.
We apologise for any inconvenience caused.
Nanotrasen Finance Department"; name = "Spending Cutbacks"},/obj/item/latexballon{name = "Curly"},/turf/simulated/floor/plating,/area/crew_quarters/locker/locker_toilet)
@@ -2725,11 +2725,11 @@
"bau" = (/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)
"bav" = (/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)
"baw" = (/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)
-"bax" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/crew_quarters/heads)
-"bay" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
-"baz" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/heads)
-"baA" = (/obj/machinery/camera{c_tag = "Heads of Staff"; dir = 8; network = "Command"},/obj/structure/table/reinforced,/obj/item/weapon/secstorage/sbriefcase,/obj/item/ashtray/glass,/turf/simulated/floor,/area/crew_quarters/heads)
-"baB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"bax" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bay" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"baz" = (/obj/structure/stool/bed/chair/comfy/teal{dir = 4},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/heads/hop)
+"baA" = (/obj/machinery/camera{c_tag = "Heads of Staff"; dir = 8; network = "Command"},/obj/structure/table/reinforced,/obj/item/weapon/secstorage/sbriefcase,/obj/item/ashtray/glass,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"baB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
"baC" = (/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/central)
"baD" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/central)
"baE" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=Med"; location = "HOP"},/turf/simulated/floor,/area/hallway/primary/central)
@@ -2745,7 +2745,7 @@
"baO" = (/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/hallway/primary/starboard)
"baP" = (/obj/machinery/door/firedoor/border_only{dir = 8},/obj/machinery/door/airlock/glass,/turf/simulated/floor,/area/hallway/secondary/exit)
"baQ" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/light,/turf/simulated/floor,/area/hallway/secondary/exit)
-"baR" = (/obj/structure/closet/extinguisher{pixel_x = 27},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit)
+"baR" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/secondary/exit)
"baS" = (/turf/simulated/wall/r_wall,/area/maintenance/disposal)
"baT" = (/obj/machinery/conveyor{id = "garbage"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
"baU" = (/obj/machinery/conveyor{dir = 8; id = "garbage"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plating,/area/maintenance/disposal)
@@ -2758,7 +2758,7 @@
"bbb" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/wall,/area/maintenance/port)
"bbc" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/locker/locker_toilet)
"bbd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"bbe" = (/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
+"bbe" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bbf" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/maintenance/port)
"bbg" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/port)
"bbh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = list("Locker Room")},/turf/simulated/floor/plating,/area/maintenance/port)
@@ -2789,10 +2789,10 @@
"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)
-"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},/turf/simulated/floor,/area/crew_quarters/heads)
-"bbK" = (/obj/effect/landmark/start{name = "Head of Personnel"},/turf/simulated/floor,/area/crew_quarters/heads)
-"bbL" = (/obj/machinery/computer/card,/turf/simulated/floor,/area/crew_quarters/heads)
-"bbM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads)
+"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},/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)
+"bbM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
"bbN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central)
"bbO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/hallway/primary/central)
"bbP" = (/turf/simulated/wall,/area/crew_quarters/kitchen)
@@ -2852,13 +2852,13 @@
"bcR" = (/obj/machinery/ai_slipper,/obj/structure/cable{tag = "Streight"; 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{tag = "icon-U-S"; icon_state = "U-S"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bcS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = "90Curve"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bcT" = (/obj/machinery/light/small{dir = 4},/obj/machinery/turret{dir = 8; id = "aicore"},/turf/simulated/floor/grid,/area/turret_protected/ai)
-"bcU" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor,/area/crew_quarters/heads)
-"bcV" = (/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)
-"bcW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor,/area/crew_quarters/heads)
-"bcX" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor,/area/crew_quarters/heads)
-"bcY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/heads)
-"bcZ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/crew_quarters/heads)
-"bda" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'windoor.dmi'; icon_state = "right"; name = "Heads of Staff"; req_access_txt = "19"},/obj/machinery/door/window{dir = 4; icon = 'windoor.dmi'; req_access_txt = "0"},/obj/structure/table/reinforced,/obj/structure/noticeboard{pixel_y = -27},/turf/simulated/floor,/area/crew_quarters/heads)
+"bcU" = (/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bcV" = (/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)
+"bcW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bcX" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bcY" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bcZ" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bda" = (/obj/machinery/door/window{base_state = "right"; dir = 8; icon = 'windoor.dmi'; icon_state = "right"; name = "Heads of Staff"; req_access_txt = "19"},/obj/machinery/door/window{dir = 4; icon = 'windoor.dmi'; req_access_txt = "0"},/obj/structure/table/reinforced,/obj/structure/noticeboard{pixel_y = -27},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bdb" = (/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/central)
"bdc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central)
"bdd" = (/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/hallway/primary/central)
@@ -2939,17 +2939,17 @@
"beA" = (/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)
"beB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/grid,/area/turret_protected/ai)
"beC" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
-"beD" = (/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)
-"beE" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/secure_closet/hop,/turf/simulated/floor,/area/crew_quarters/heads)
-"beF" = (/obj/machinery/power/apc{dir = 2; name = "Head of Staff APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor,/area/crew_quarters/heads)
-"beG" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/crew_quarters/heads)
-"beH" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/requests_console{department = "Head of personnel's desk"; departmentType = 5; name = "HOP RC"; pixel_y = -30},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
-"beI" = (/obj/machinery/computer/secure_data,/turf/simulated/floor,/area/crew_quarters/heads)
+"beD" = (/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)
+"beE" = (/obj/structure/disposalpipe/segment,/obj/structure/closet/secure_closet/hop,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"beF" = (/obj/machinery/power/apc{dir = 2; name = "Head of Staff APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"beG" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"beH" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_scrubber{on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/requests_console{department = "Head of personnel's desk"; departmentType = 5; name = "HOP RC"; pixel_y = -30},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"beI" = (/obj/machinery/computer/secure_data,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"beJ" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/hallway/primary/central)
"beK" = (/obj/machinery/power/apc{dir = 8; name = "Kitchen APC"; pixel_x = -25},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"beL" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"beM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"beN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/sink/kitchen2{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
+"beN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"beO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"beP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"beQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = "Streight"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/machinery/door_control{id = "kitchen"; name = "Hallway Shutters"; pixel_x = -1; pixel_y = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
@@ -3032,13 +3032,13 @@
"bgp" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/captain)
"bgq" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/turret_protected/ai)
"bgr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/turretid{id = "upload"; pixel_x = -24; pixel_y = -7},/obj/machinery/turretid{id = "aicore"; pixel_x = -24; pixel_y = 7},/obj/effect/decal/warning_stripes{tag = "icon-E-corner"; icon_state = "E-corner"},/obj/effect/decal/warning_stripes{tag = "icon-W-corner"; icon_state = "W-corner"},/obj/machinery/camera{c_tag = "AI Core Tunnel"; dir = 8; network = "Command"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
-"bgs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"bgt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list("Captain"); dir = 4; icon_state = "pipe-j2s"; sortType = list("HoP Office")},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"bgu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads)
-"bgv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"bgw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"bgx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads)
-"bgy" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/crew_quarters/heads)
+"bgs" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"bgt" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list("Captain"); dir = 4; icon_state = "pipe-j2s"; sortType = list("HoP Office")},/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"bgu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = null; req_access_txt = "19"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bgv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"bgw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"bgx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
+"bgy" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/crew_quarters/heads/hop)
"bgz" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/hallway/primary/central)
"bgA" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/firedoor/border_only,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/central)
"bgB" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
@@ -3196,7 +3196,7 @@
"bjx" = (/obj/structure/rack{dir = 1},/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/tank/emergency_oxygen,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
"bjy" = (/obj/effect/landmark{name = "blobstart"},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 8; icon_state = "manifold-b-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/maintcentral)
"bjz" = (/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/maintenance/maintcentral)
-"bjA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/disposalpipe/segment{dir = 1},/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 1},/turf/simulated/floor,/area/hallway/primary/central)
+"bjA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/disposalpipe/segment{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/turf/simulated/floor,/area/hallway/primary/central)
"bjB" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor,/area/hallway/primary/central)
"bjC" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"bjD" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
@@ -3271,7 +3271,7 @@
"bkU" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/machinery/door/poddoor/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "kitchen2"; name = "Kitchen Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"bkV" = (/obj/structure/table,/obj/item/ashtray/plastic,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
"bkW" = (/obj/structure/table,/obj/item/clothing/head/cakehat,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
-"bkX" = (/obj/structure/closet/extinguisher{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Cafeteria North East"; dir = 8; network = "SS13"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
+"bkX" = (/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/machinery/camera{c_tag = "Cafeteria North East"; dir = 8; network = "SS13"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
"bkY" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/maintcentral)
"bkZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/computer/security/medbay,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bla" = (/obj/effect/landmark/start{name = "Medical Doctor"},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
@@ -3284,7 +3284,7 @@
"blh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/medical/chemistry)
"bli" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/medical/chemistry)
"blj" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/closet/wardrobe/chemistry_white,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"blk" = (/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/obj/machinery/copier,/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
+"blk" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/copier,/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
"bll" = (/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
"blm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
"bln" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{tag = "icon-warnwhite (NORTH)"; icon_state = "warnwhite"; dir = 1},/area/toxins/lab)
@@ -3384,7 +3384,7 @@
"bnd" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/hallway/primary/central)
"bne" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/machinery/camera{c_tag = "Kitchen"; dir = 4; network = "Mess Hall"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"bnf" = (/obj/structure/table,/obj/machinery/blender{pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"bng" = (/obj/structure/closet/extinguisher{pixel_x = -28; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
+"bng" = (/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
"bnh" = (/mob/living/carbon/monkey{name = "Pun Pun"},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
"bni" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
"bnj" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/crew_quarters/cafeteria)
@@ -3584,7 +3584,7 @@
"bqV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/turf/simulated/floor/plating,/area/maintenance/asmaint2)
"bqW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bqX" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
-"bqY" = (/obj/machinery/camera{c_tag = "Cargo Loading Area South"; dir = 1; network = "Cargo"},/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = -31},/turf/simulated/floor,/area/quartermaster/storage)
+"bqY" = (/obj/machinery/camera{c_tag = "Cargo Loading Area South"; dir = 1; network = "Cargo"},/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = -31},/turf/simulated/floor,/area/quartermaster/storage)
"bqZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = "90Curve"},/obj/machinery/firealarm{dir = 2; pixel_y = -24},/turf/simulated/floor,/area/quartermaster/storage)
"bra" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = "Streight"},/obj/machinery/door/firedoor/border_only{dir = 8},/turf/simulated/floor,/area/quartermaster/storage)
"brb" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = "90Curve"},/turf/simulated/floor,/area/quartermaster/storage)
@@ -3629,7 +3629,7 @@
"brO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/structure/disposalpipe/sortjunction{sortType = list("Diner")},/turf/simulated/wall,/area/maintenance/maintcentral)
"brP" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"brQ" = (/obj/machinery/atmospherics/unary/vent_scrubber{on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"brR" = (/obj/machinery/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"brR" = (/obj/structure/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"brS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/manifold{color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"brT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"brU" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "Genetics Outer Shutters"; name = "Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
@@ -3739,7 +3739,7 @@
"btU" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/hallway/primary/aft)
"btV" = (/obj/machinery/camera{c_tag = "Aft Primary Hallway 5"; dir = 2},/turf/simulated/floor,/area/hallway/primary/aft)
"btW" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/hallway/primary/aft)
-"btX" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/aft)
+"btX" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/aft)
"btY" = (/obj/machinery/atm{pixel_y = 30},/turf/simulated/floor,/area/hallway/primary/aft)
"btZ" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor,/area/hallway/primary/aft)
"bua" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/hallway/primary/aft)
@@ -3937,7 +3937,7 @@
"bxK" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/vending/wallmed1{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bxL" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bxM" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bxN" = (/obj/machinery/vending/wallmed1{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bxN" = (/obj/machinery/vending/wallmed1{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/structure/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bxO" = (/obj/machinery/door_control{dir = 8; id = "Genetics Inner Shutters"; name = "Genetics Inner Shutters"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bxP" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bxQ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/genetics)
@@ -3969,7 +3969,7 @@
"byq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/structure/closet/secure_closet/qm_personal,/turf/simulated/floor,/area/quartermaster/qm)
"byr" = (/obj/structure/table,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor,/area/quartermaster/qm)
"bys" = (/obj/machinery/atmospherics/pipe/manifold{dir = 1},/obj/structure/table,/obj/item/weapon/coin/silver,/obj/item/weapon/coin/silver,/obj/machinery/atmospherics/pipe/manifold{color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/quartermaster/qm)
-"byt" = (/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/quartermaster/miningdock)
+"byt" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor,/area/quartermaster/miningdock)
"byu" = (/turf/simulated/floor,/area/quartermaster/miningdock)
"byv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"byw" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/structure/cable,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/security/nuke_storage)
@@ -4011,7 +4011,7 @@
"bzg" = (/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bzh" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair,/obj/effect/landmark/start{name = "Geneticist"},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bzi" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
-"bzj" = (/obj/structure/closet/extinguisher{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
+"bzj" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bzk" = (/obj/machinery/atmospherics/trinary/filter{dir = 1; filter_type = 3; icon_state = "intact_off"; locked = 0; name = "High precision gas extractor"; on = 0},/turf/simulated/floor,/area/toxins/toxinslab)
"bzl" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "bot"},/area/toxins/toxinslab)
"bzm" = (/obj/machinery/atmospherics/portables_connector{dir = 4; name = "Node 1"},/turf/simulated/floor{icon_state = "bot"},/area/toxins/toxinslab)
@@ -4022,7 +4022,7 @@
"bzr" = (/obj/structure/table,/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/weapon/pen,/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"bzs" = (/obj/structure/table,/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
"bzt" = (/obj/structure/table,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "white"},/area/toxins/toxinslab)
-"bzu" = (/obj/structure/closet/extinguisher{pixel_x = -27},/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "Gas pump"; on = 1},/turf/simulated/floor,/area/toxins/mixing)
+"bzu" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "intact_on"; name = "Gas pump"; on = 1},/turf/simulated/floor,/area/toxins/mixing)
"bzv" = (/obj/machinery/atmospherics/pipe/simple/general/visible,/turf/simulated/floor,/area/toxins/mixing)
"bzw" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/toxins/mixing)
"bzx" = (/obj/machinery/atmospherics/trinary/filter{dir = 2; locked = 0},/turf/simulated/floor,/area/toxins/mixing)
@@ -4083,7 +4083,7 @@
"bAA" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{name = "Patient Room 2"; req_access_txt = "5"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bAB" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bAC" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bAD" = (/obj/machinery/door_control{id = "Patient Room 2 Shutters"; name = "Privacy Shutters"; pixel_y = -25},/obj/machinery/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bAD" = (/obj/machinery/door_control{id = "Patient Room 2 Shutters"; name = "Privacy Shutters"; pixel_y = -25},/obj/structure/sink{icon_state = "sink"; dir = 4; pixel_x = 11; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bAE" = (/obj/structure/stool/bed/chair{dir = 8},/obj/machinery/door_control{id = "Patient Room 3 Shutters"; name = "Privacy Shutters"; pixel_y = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bAF" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bAG" = (/obj/machinery/computer/scan_consolenew,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
@@ -4157,7 +4157,7 @@
"bBW" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/medical/cryo)
"bBX" = (/turf/simulated/wall,/area/medical/cryo)
"bBY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bBZ" = (/obj/structure/closet/extinguisher{pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bBZ" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bCa" = (/turf/simulated/wall,/area/medical/surgery)
"bCb" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/disposalpipe/segment{dir = 1},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"})
"bCc" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/toxins/toxinslab)
@@ -4227,7 +4227,7 @@
"bDo" = (/obj/machinery/bodyscanner,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/surgery)
"bDp" = (/obj/machinery/body_scanconsole,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bDq" = (/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Sleeper Room"; dir = 2; network = "Medbay"; pixel_x = 22},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"bDr" = (/obj/machinery/sink{pixel_y = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
+"bDr" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bDs" = (/obj/structure/table,/obj/item/weapon/storage/stma_kit{pixel_x = 0; pixel_y = 0},/obj/machinery/firealarm{dir = 1; pixel_x = 24; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"bDt" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/rd,/obj/item/ashtray/glass,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bDu" = (/obj/item/device/radio/intercom{pixel_y = 25},/obj/structure/table,/obj/item/device/taperecorder,/obj/machinery/light{dir = 1},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
@@ -4772,7 +4772,7 @@
"bNN" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/medical/cmo)
"bNO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/medical/cmo)
"bNP" = (/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},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bNQ" = (/obj/structure/closet/extinguisher{pixel_x = 27},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bNQ" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bNR" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/medical/surgery)
"bNS" = (/obj/machinery/atmospherics/pipe/manifold{color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery)
"bNT" = (/obj/structure/stool/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/medical/surgery)
@@ -4876,7 +4876,7 @@
"bPN" = (/obj/machinery/power/apc{dir = 8; name = "Atmospherics APC"; pixel_x = -24},/obj/structure/cable{d1 = 0; d2 = 2; icon_state = "0-2"},/obj/structure/cable,/turf/simulated/floor,/area/atmos)
"bPO" = (/obj/machinery/atmospherics/unary/heat_reservoir/heater,/turf/simulated/floor,/area/atmos)
"bPP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,/turf/simulated/wall,/area/atmos)
-"bPQ" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 5; icon_state = "intact-c"; level = 2},/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/turf/simulated/floor,/area/atmos)
+"bPQ" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 5; icon_state = "intact-c"; level = 2},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor,/area/atmos)
"bPR" = (/obj/machinery/atmospherics/pipe/simple{color = "cyan"; icon_state = "intact-c"; level = 2},/obj/machinery/atmospherics/pipe/manifold{color = "cyan"; dir = 4; icon_state = "manifold-c"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
"bPS" = (/obj/machinery/atmospherics/binary/passive_gate,/turf/simulated/floor,/area/atmos)
"bPT" = (/obj/machinery/atmospherics/pipe/simple{color = "yellow"; icon_state = "intact-y"; level = 2},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
@@ -5037,14 +5037,14 @@
"bSS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virology)
"bST" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -23; pixel_y = -8; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bSU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bSV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bSV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bSW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology)
"bSX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bSY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bSZ" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/medical/research{name = "Research Division"})
"bTa" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 5},/turf/simulated/floor,/area/medical/research{name = "Research Division"})
"bTb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
-"bTc" = (/obj/structure/closet/extinguisher{pixel_x = 27},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/machinery/camera{c_tag = "Toxins Auxiliary Storage"; dir = 8; network = "Research"; pixel_x = 0; pixel_y = -22},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
+"bTc" = (/obj/structure/extinguisher_cabinet{pixel_x = 27},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/machinery/camera{c_tag = "Toxins Auxiliary Storage"; dir = 8; network = "Research"; pixel_x = 0; pixel_y = -22},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bTd" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
"bTe" = (/mob/living/carbon/metroid,/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
"bTf" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/toxins/xenobiology)
@@ -5077,7 +5077,7 @@
"bTG" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bTH" = (/obj/structure/cable{tag = "Streight"; icon_state = "4-8"; pixel_x = 1; d1 = 4; d2 = 8},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1449; holdopen = 0; icon_state = "door_locked"; id_tag = "virology_airlock_exterior"; locked = 1; name = "Virology Access"; req_access_txt = "39"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bTI" = (/obj/machinery/atmospherics/unary/vent_scrubber,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bTJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bTJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bTK" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/medical/research{name = "Research Division"})
"bTL" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/medical/research{name = "Research Division"})
"bTM" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/medical/research{name = "Research Division"})
@@ -5103,7 +5103,7 @@
"bUg" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=1"; freq = 1400; location = "Atmospherics"},/obj/machinery/door/window{base_state = "left"; dir = 2; icon_state = "left"; name = "Atmos Delivery"; req_access_txt = "34"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/aft)
"bUh" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor,/area/atmos)
"bUi" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/atmos)
-"bUj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact-r (NORTH)"; icon_state = "intact-r"; dir = 1},/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 4; icon_state = "intact-c"; level = 2},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/atmos)
+"bUj" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{tag = "icon-intact-r (NORTH)"; icon_state = "intact-r"; dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/obj/machinery/portable_atmospherics/pump,/obj/machinery/atmospherics/pipe/simple{color = "cyan"; dir = 4; icon_state = "intact-c"; level = 2},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/atmos)
"bUk" = (/obj/machinery/atmospherics/pipe/manifold{color = "cyan"; dir = 4; icon_state = "manifold-c"; initialize_directions = 11; level = 2},/turf/simulated/floor,/area/atmos)
"bUl" = (/obj/machinery/pipedispenser/disposal,/turf/simulated/floor,/area/atmos)
"bUm" = (/obj/structure/table,/turf/simulated/floor,/area/atmos)
@@ -5126,7 +5126,7 @@
"bUD" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bUE" = (/obj/structure/disposalpipe/segment{dir = 1},/obj/machinery/access_button{command = "cycle_exterior"; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = 23; pixel_y = 8; req_access_txt = "39"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bUF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/light,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"bUG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/access_button{command = "cycle_interior"; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -8; pixel_y = -19; req_access_txt = "39"},/obj/machinery/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"bUG" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/access_button{command = "cycle_interior"; master_tag = "virology_airlock_control"; name = "Virology Access Button"; pixel_x = -8; pixel_y = -19; req_access_txt = "39"},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 20},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"bUH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 6},/turf/simulated/wall/r_wall,/area/medical/virology)
"bUI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/medical/virology)
"bUJ" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/wall/r_wall,/area/medical/virology)
@@ -5147,7 +5147,7 @@
"bUY" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/turf/simulated/floor,/area/hallway/primary/aft)
"bUZ" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIE"; location = "AftH"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/turf/simulated/floor,/area/hallway/primary/aft)
"bVa" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "cautioncorner"; dir = 4},/area/hallway/primary/aft)
-"bVb" = (/obj/structure/closet/extinguisher{pixel_x = 0; pixel_y = -27},/turf/simulated/floor,/area/hallway/primary/aft)
+"bVb" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -27},/turf/simulated/floor,/area/hallway/primary/aft)
"bVc" = (/obj/machinery/light/small,/turf/simulated/floor,/area/hallway/primary/aft)
"bVd" = (/turf/simulated/floor{icon_state = "caution"; dir = 4},/area/hallway/primary/aft)
"bVe" = (/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "atmos"; name = "Airlock Window Shield"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics"; req_access_txt = "24"},/turf/simulated/floor,/area/atmos)
@@ -5408,7 +5408,7 @@
"bZZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = "Streight"},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/aft)
"caa" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "yellowcorner"},/area/hallway/primary/aft)
"cab" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall/r_wall,/area/engine/engineering_break_room)
-"cac" = (/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list("Chief Engineer"); dir = 8; icon_state = "pipe-j2s"; sortType = list("Engineering")},/obj/structure/filingcabinet,/obj/structure/closet/extinguisher{pixel_x = -27; pixel_y = 0},/turf/simulated/floor,/area/engine/engineering_break_room)
+"cac" = (/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list("Chief Engineer"); dir = 8; icon_state = "pipe-j2s"; sortType = list("Engineering")},/obj/structure/filingcabinet,/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor,/area/engine/engineering_break_room)
"cad" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/engineering_break_room)
"cae" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/obj/effect/landmark/start{name = "Roboticist"},/obj/structure/disposalpipe/sortjunction{backsort = 1; backType = list(); dir = 8; icon_state = "pipe-j2s"; sortType = list("Engineering")},/turf/simulated/floor,/area/engine/engineering_break_room)
"caf" = (/obj/structure/stool/bed/chair/comfy/black{dir = 1},/obj/effect/landmark/start{name = "Station Engineer"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/engineering_break_room)
@@ -5650,7 +5650,7 @@
"ceH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
"ceI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
"ceJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/aft)
-"ceK" = (/obj/structure/closet/extinguisher{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/engine/engineering)
+"ceK" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor,/area/engine/engineering)
"ceL" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical{pixel_x = -5; pixel_y = -5},/obj/item/weapon/storage/toolbox/electrical{pixel_x = -5; pixel_y = -5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical{pixel_x = -5; pixel_y = -5},/turf/simulated/floor,/area/engine/engineering)
"ceM" = (/obj/machinery/cell_charger,/obj/machinery/camera{c_tag = "SMES Room"; dir = 4; network = "Engineering"},/obj/structure/table/reinforced,/turf/simulated/floor,/area/engine/engineering)
"ceN" = (/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/module/power_control,/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/obj/structure/table/reinforced,/turf/simulated/floor,/area/engine/engineering)
@@ -5666,12 +5666,12 @@
"ceX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/engine/engineering)
"ceY" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/engine/engineering)
"ceZ" = (/obj/structure/table/reinforced,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor,/area/engine/engineering)
-"cfa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/suit/space/rig/engspace_suit,/obj/item/clothing/head/helmet/space/rig/engspace_helmet,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor,/area/engine/engineering)
+"cfa" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/suit/space/engineer,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/item/clothing/head/helmet/space/engineer,/turf/simulated/floor,/area/engine/engineering)
"cfb" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/camera{c_tag = "Tool Storage/CE's Room"; dir = 1; network = "Engineering"; pixel_x = 23},/turf/simulated/floor,/area/engine/engineering)
"cfc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/engine/chiefs_office)
"cfd" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = "90Curve"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8; on = 1; scrub_Toxins = 1},/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/clipboard,/obj/item/weapon/stamp/ce,/obj/item/clothing/glasses/meson,/obj/item/ashtray/glass,/turf/simulated/floor,/area/engine/chiefs_office)
"cfe" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-2"; tag = "90Curve"},/obj/effect/landmark/start{name = "Chief Engineer"},/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor,/area/engine/chiefs_office)
-"cff" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's office"; departmentType = 3; name = "Chief Engineer RC"; pixel_x = 30; pixel_y = 0},/obj/item/clothing/suit/space/rig/cespace_suit,/obj/item/clothing/head/helmet/space/rig/cespace_helmet,/obj/item/clothing/suit/space/rig/elite,/obj/item/clothing/head/helmet/space/rig/elite,/obj/item/clothing/mask/breath,/turf/simulated/floor,/area/engine/chiefs_office)
+"cff" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Engineer's office"; departmentType = 3; name = "Chief Engineer RC"; pixel_x = 30; pixel_y = 0},/obj/item/clothing/suit/space/rig/elite,/obj/item/clothing/head/helmet/space/rig/elite,/obj/item/clothing/mask/breath,/obj/item/clothing/suit/space/engineer/ce,/obj/item/clothing/head/helmet/space/engineer/ce,/turf/simulated/floor,/area/engine/chiefs_office)
"cfg" = (/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"cfh" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"cfi" = (/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/atmos)
@@ -5860,7 +5860,7 @@
"ciJ" = (/obj/structure/particle_accelerator/power_box,/turf/simulated/floor/plating,/area/engine/particle_accelerator)
"ciK" = (/obj/item/weapon/screwdriver,/turf/simulated/floor/plating,/area/engine/particle_accelerator)
"ciL" = (/obj/machinery/pipedispenser,/turf/simulated/floor/plating,/area/engine/engineering)
-"ciM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig/engspace_suit,/obj/item/clothing/head/helmet/space/rig/engspace_helmet,/turf/simulated/floor/plating,/area/engine/engineering)
+"ciM" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/engineer,/obj/item/clothing/head/helmet/space/engineer,/turf/simulated/floor/plating,/area/engine/engineering)
"ciN" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/rig,/obj/item/clothing/head/helmet/space/rig,/turf/simulated/floor/plating,/area/engine/engineering)
"ciO" = (/obj/machinery/emitter,/turf/simulated/floor/plating,/area/engine/engineering)
"ciP" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor/plating,/area/engine/engineering)
@@ -6167,7 +6167,7 @@
"coE" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
"coF" = (/obj/machinery/vending/cola,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
"coG" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
-"coH" = (/obj/structure/closet/extinguisher{pixel_x = 5; pixel_y = 30},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
+"coH" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
"coI" = (/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/centcom/evac)
"coJ" = (/turf/simulated/shuttle/floor,/area/centcom/evac)
"coK" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/shuttle/floor{tag = "icon-floor2"; icon_state = "floor2"},/area/centcom/evac)
@@ -7638,7 +7638,7 @@
"cQT" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/djstation)
"cQU" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/space_heater,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/djstation)
"cQV" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/rack{dir = 4},/obj/item/clothing/under/soviet,/obj/item/clothing/head/ushanka,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/djstation)
-"cQW" = (/obj/machinery/disposal/toilet{tag = "icon-toilet (WEST)"; icon_state = "toilet"; dir = 8},/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor{icon_state = "white"},/area/djstation)
+"cQW" = (/obj/structure/toilet{tag = "icon-toilet (WEST)"; icon_state = "toilet"; dir = 8},/obj/structure/disposalpipe/trunk,/turf/unsimulated/floor{icon_state = "white"},/area/djstation)
"cQX" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/djstation)
"cQY" = (/obj/structure/disposalpipe/segment{dir = 1},/turf/unsimulated/wall{icon_state = ""; tag = "icon-fwall_opening"},/area/djstation)
"cQZ" = (/obj/machinery/door/airlock/external{name = "External Access"; req_access = null; req_access_txt = "0"},/turf/unsimulated/floor,/area/djstation)
@@ -8583,8 +8583,8 @@
"djc" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/west_outpost)
"djd" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/mine/west_outpost)
"dje" = (/obj/structure/disposalpipe/sortjunction{backsort = 0; dir = 4; icon_state = "pipe-j1s"; sortType = list("Mining West")},/turf/simulated/floor/airless{tag = "icon-asteroidwarning (WEST)"; icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
-"djf" = (/obj/machinery/disposal/toilet{tag = "icon-toilet (EAST)"; icon_state = "toilet"; dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters)
-"djg" = (/obj/machinery/sink{pixel_y = 30},/obj/machinery/light/small,/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters)
+"djf" = (/obj/structure/toilet{tag = "icon-toilet (EAST)"; icon_state = "toilet"; dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters)
+"djg" = (/obj/structure/sink{pixel_y = 30},/obj/machinery/light/small,/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters)
"djh" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/mine/living_quarters)
"dji" = (/obj/machinery/atmospherics/pipe/simple,/turf/simulated/floor,/area/mine/lobby)
"djj" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = "Streight"},/turf/simulated/floor,/area/mine/lobby)