diff --git a/baystation12.dme b/baystation12.dme
index 29bd3ab3ae..ebdca068e8 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -800,6 +800,7 @@
#include "code\modules\clothing\spacesuits\rig\rig_attackby.dm"
#include "code\modules\clothing\spacesuits\rig\rig_pieces.dm"
#include "code\modules\clothing\spacesuits\rig\rig_verbs.dm"
+#include "code\modules\clothing\spacesuits\rig\rig_wiring.dm"
#include "code\modules\clothing\spacesuits\rig\modules\combat.dm"
#include "code\modules\clothing\spacesuits\rig\modules\computer.dm"
#include "code\modules\clothing\spacesuits\rig\modules\modules.dm"
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 7fc5577fe2..eadc657a9c 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -229,7 +229,7 @@
/mob/living/carbon/human/MiddleClickOn(var/atom/A)
if(back)
- var/obj/item/weapon/storage/rig/rig = back
+ var/obj/item/weapon/rig/rig = back
if(istype(rig) && rig.selected_module)
if(world.time <= next_move) return
next_move = world.time + 8
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index fde5fe2c29..4147c8c5d8 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -294,8 +294,8 @@
tankcheck = list(C.r_hand, C.l_hand, C.back)
// Rigs are a fucking pain since they keep an air tank in nullspace.
- if(istype(C.back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/rig = C.back
+ if(istype(C.back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = C.back
if(rig.air_supply)
from = "in"
nicename |= "hardsuit"
diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm
index e76ec9e4ab..97bb3e2404 100644
--- a/code/game/gamemodes/events/space_ninja.dm
+++ b/code/game/gamemodes/events/space_ninja.dm
@@ -531,7 +531,7 @@ As such, it's hard-coded for now. No reason for it not to be, really.
else
equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform)
- equip_to_slot_or_del(new /obj/item/weapon/storage/rig/light/ninja(src), slot_back)
+ equip_to_slot_or_del(new /obj/item/weapon/rig/light/ninja(src), slot_back)
equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask)
equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt)
equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(src), slot_s_store)
diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm
index c5f8a357c3..949e6bfc77 100644
--- a/code/game/gamemodes/newobjective.dm
+++ b/code/game/gamemodes/newobjective.dm
@@ -1333,7 +1333,7 @@ datum
return 0
var/current_amount
- var/obj/item/weapon/storage/rig/S
+ var/obj/item/weapon/rig/S
if(istype(owner.current,/mob/living/carbon/human))
var/mob/living/carbon/human/H = owner.current
S = H.back
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index a327e3b3aa..452fd347d8 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -614,7 +614,7 @@ datum/objective/download
return 0
var/current_amount
- var/obj/item/weapon/storage/rig/S
+ var/obj/item/weapon/rig/S
if(istype(owner.current,/mob/living/carbon/human))
var/mob/living/carbon/human/H = owner.current
S = H.back
diff --git a/code/game/objects/items/weapons/cards_ids.dm b/code/game/objects/items/weapons/cards_ids.dm
index b1c2ccd218..afd33fdf08 100644
--- a/code/game/objects/items/weapons/cards_ids.dm
+++ b/code/game/objects/items/weapons/cards_ids.dm
@@ -75,7 +75,7 @@
/obj/item/weapon/storage/lockbox,
/obj/item/weapon/storage/secure,
/obj/item/weapon/circuitboard,
- /obj/item/weapon/storage/rig,
+ /obj/item/weapon/rig,
/obj/item/device/eftpos,
/obj/item/device/lightreplacer,
/obj/item/device/taperecorder,
diff --git a/code/game/objects/items/weapons/tanks/jetpack.dm b/code/game/objects/items/weapons/tanks/jetpack.dm
index bc8448eb6e..7b41c1b18b 100644
--- a/code/game/objects/items/weapons/tanks/jetpack.dm
+++ b/code/game/objects/items/weapons/tanks/jetpack.dm
@@ -118,7 +118,7 @@
/obj/item/weapon/tank/jetpack/rig
name = "jetpack"
- var/obj/item/weapon/storage/rig/holder
+ var/obj/item/weapon/rig/holder
/obj/item/weapon/tank/jetpack/rig/examine()
usr << "It's a jetpack. If you can see this, report it on the bug tracker."
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 38da9f04dd..dc242cd23f 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -243,6 +243,64 @@ BLIND // can't see anything
slot_flags = SLOT_HEAD
w_class = 2.0
+ var/light_overlay = "helmet_light"
+ var/brightness_on
+ var/on = 0
+
+/obj/item/clothing/head/New()
+ ..()
+ if(!icon_action_button && brightness_on)
+ icon_action_button = "[icon_state]"
+
+/obj/item/clothing/head/attack_self(mob/user)
+ if(brightness_on)
+
+ if(!isturf(user.loc))
+ user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
+ return
+
+ on = !on
+
+ overlays.Cut()
+ if(on)
+ if(!light_overlay_cache["[light_overlay]_icon"])
+ light_overlay_cache["[light_overlay]_icon"] = image("icon" = 'icons/obj/light_overlays.dmi', "icon_state" = "[light_overlay]")
+ if(!light_overlay_cache["[light_overlay]"])
+ light_overlay_cache["[light_overlay]"] = image("icon" = 'icons/mob/light_overlays.dmi', "icon_state" = "[light_overlay]")
+ overlays |= light_overlay_cache["[light_overlay]_icon"]
+ user.SetLuminosity(user.luminosity + brightness_on)
+ else
+ user.SetLuminosity(user.luminosity - brightness_on)
+
+ if(istype(user,/mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ H.update_inv_head()
+
+ else
+ return ..(user)
+
+/obj/item/clothing/head/proc/update_light(mob/user)
+
+ if(!brightness_on)
+ return
+
+ if(on)
+ if(light_overlay) overlays |= light_overlay
+ user.SetLuminosity(user.luminosity - brightness_on)
+ SetLuminosity(brightness_on)
+
+/obj/item/clothing/head/equipped(mob/user)
+ ..()
+ update_light(user)
+
+/obj/item/clothing/head/pickup(mob/user)
+ ..()
+ update_light(user)
+
+/obj/item/clothing/head/dropped(mob/user)
+ ..()
+ update_light(user)
+
/obj/item/clothing/head/update_clothing_icon()
if (ismob(src.loc))
var/mob/M = src.loc
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index a7c9d2bce6..3fc78b871a 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -4,38 +4,13 @@
icon_state = "hardhat0_yellow"
flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
- var/brightness_on = 4 //luminosity when on
- var/on = 0
+ brightness_on = 4 //luminosity when on
+ light_overlay = "hardhat_light"
item_color = "yellow" //Determines used sprites: hardhat[on]_[color] and hardhat[on]_[color]2 (lying down sprite)
armor = list(melee = 30, bullet = 5, laser = 20,energy = 10, bomb = 20, bio = 10, rad = 20)
flags_inv = 0
- icon_action_button = "action_hardhat"
siemens_coefficient = 0.9
- attack_self(mob/user)
- if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
- return
- on = !on
- icon_state = "hardhat[on]_[item_color]"
- item_state = "hardhat[on]_[item_color]"
-
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
-
- pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
-// user.UpdateLuminosity() //TODO: Carn
- SetLuminosity(0)
-
- dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
-
-
/obj/item/clothing/head/hardhat/orange
icon_state = "hardhat0_orange"
item_state = "hardhat0_orange"
@@ -61,5 +36,4 @@
/obj/item/clothing/head/hardhat/dblue
icon_state = "hardhat0_dblue"
item_state = "hardhat0_dblue"
- item_color = "dblue"
-
+ item_color = "dblue"
\ No newline at end of file
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index af0f5262a3..ba72b92754 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -126,33 +126,10 @@
flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES
- var/brightness_on = 2 //luminosity when on
- var/on = 0
+ brightness_on = 2
+ light_overlay = "helmet_light"
w_class = 3
- attack_self(mob/user)
- if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
- return
- on = !on
- icon_state = "hardhat[on]_[item_color]"
- item_state = "hardhat[on]_[item_color]"
-
- if(on) user.SetLuminosity(user.luminosity + brightness_on)
- else user.SetLuminosity(user.luminosity - brightness_on)
-
- pickup(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(0)
-
- dropped(mob/user)
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
-// user.UpdateLuminosity()
- SetLuminosity(brightness_on)
-
/*
* Kitty ears
*/
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index fbcf3b9bab..9dacf5893b 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -24,6 +24,11 @@
var/mob/integrated_ai // Direct reference to the actual mob held in the suit.
var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI.
+ var/list/ai_interface_verbs = list(
+ //mob/living/proc/hardsuit_interface_ai,
+ //mob/living/proc/hardsuit_host_bioscan,
+ //mob/living/proc/hardsuit_hack
+ )
/obj/item/rig_module/ai_container/accepts_item(var/obj/item/input_device, var/mob/living/user)
@@ -53,6 +58,8 @@
// If the transfer failed we can delete the card.
if(locate(/mob/living/silicon/ai) in card)
ai_card = card
+ integrated_ai = locate(/mob/living/silicon/ai) in card
+ integrated_ai.verbs |= ai_interface_verbs
else
eject_ai()
return 1
@@ -119,7 +126,7 @@
ai_card = null
if(integrated_ai)
- integrated_ai.verbs -= /mob/living/proc/hardsuit_interface_ai
+ integrated_ai.verbs -= ai_interface_verbs
integrated_ai = null
/obj/item/rig_module/ai_container/proc/integrate_ai(var/obj/item/ai,var/mob/user)
@@ -159,7 +166,7 @@
integrated_ai = null
eject_ai()
else
- integrated_ai.verbs |= /mob/living/proc/hardsuit_interface_ai
+ integrated_ai.verbs |= ai_interface_verbs
else
user << "There is no active AI within \the [ai]."
else
diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm
index 132f265745..1da55c57b7 100644
--- a/code/modules/clothing/spacesuits/rig/modules/modules.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm
@@ -15,7 +15,7 @@
icon_state = "module"
matter = list("metal" = 20000, "plastic" = 30000, "glass" = 5000)
- var/obj/item/weapon/storage/rig/holder
+ var/obj/item/weapon/rig/holder
var/module_cooldown = 10
var/next_use = 0
@@ -74,7 +74,7 @@
..()
// Called when the module is installed into a suit.
-/obj/item/rig_module/proc/installed(var/obj/item/weapon/storage/rig/new_holder)
+/obj/item/rig_module/proc/installed(var/obj/item/weapon/rig/new_holder)
holder = new_holder
return
diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm
index 938671cf44..6b3513de1b 100644
--- a/code/modules/clothing/spacesuits/rig/modules/utility.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm
@@ -205,6 +205,7 @@
/obj/item/rig_module/chem_dispenser/combat
+
/obj/item/rig_module/chem_dispenser/injector
name = "mounted chemical injector"
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index a055f527f1..07339a9755 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -6,7 +6,7 @@
* Defines the behavior of hardsuits/rigs/power armour.
*/
-/obj/item/weapon/storage/rig
+/obj/item/weapon/rig
name = "hardsuit control module"
icon = 'icons/obj/rig_modules.dmi'
@@ -22,8 +22,6 @@
max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE
siemens_coefficient = 0
permeability_coefficient = 0
- max_w_class = 3
- max_combined_w_class = 35
// Keeps track of what this rig should spawn with.
var/suit_type = "hardsuit"
@@ -52,16 +50,25 @@
// Rig status vars.
var/open = 0 // Access panel status.
var/locked = 1 // Lock status.
- var/emagged
+ var/subverted
+ var/interface_locked
+ var/control_overridden
+ var/ai_override_enabled
+ var/security_check_enabled
+ var/malfunctioning
+ var/malfunction_delay
+ var/electrified = 0
+
var/sealing // Keeps track of seal status independantly of canremove.
var/offline = 1 // Should we be applying suit maluses?
var/offline_slowdown = 10 // If the suit is deployed and unpowered, it sets slowdown to this.
var/offline_vision_restriction = 1 // 0 - none, 1 - welder vision, 2 - blind. Maybe move this to helmets.
- // Spark system, since we seem to need this a bunch.
+ // Wiring! How exciting.
+ var/datum/wires/rig/wires
var/datum/effect/effect/system/spark_spread/spark_system
-/obj/item/weapon/storage/rig/examine()
+/obj/item/weapon/rig/examine()
..()
if(wearer)
for(var/obj/item/piece in list(helmet,gloves,chest,boots))
@@ -73,9 +80,11 @@
usr << "The maintenance panel is [open ? "open" : "closed"]."
usr << "Hardsuit systems are [offline ? "offline" : "online"]."
-/obj/item/weapon/storage/rig/New()
+/obj/item/weapon/rig/New()
..()
+ wires = new(src)
+
if((!req_access || !req_access.len) && (!req_one_access || !req_one_access.len))
locked = 0
@@ -87,27 +96,27 @@
if(initial_modules && initial_modules.len)
for(var/path in initial_modules)
- var/obj/item/rig_module/module = new path()
+ var/obj/item/rig_module/module = new path(src)
installed_modules += module
module.installed(src)
// Create and initialize our various segments.
if(cell_type)
- cell = new cell_type()
+ cell = new cell_type(src)
if(air_type)
- air_supply = new air_type()
+ air_supply = new air_type(src)
if(glove_type)
- gloves = new glove_type()
- verbs |= /obj/item/weapon/storage/rig/proc/toggle_gauntlets
+ gloves = new glove_type(src)
+ verbs |= /obj/item/weapon/rig/proc/toggle_gauntlets
if(helm_type)
- helmet = new helm_type()
- verbs |= /obj/item/weapon/storage/rig/proc/toggle_helmet
+ helmet = new helm_type(src)
+ verbs |= /obj/item/weapon/rig/proc/toggle_helmet
if(boot_type)
- boots = new boot_type()
- verbs |= /obj/item/weapon/storage/rig/proc/toggle_boots
+ boots = new boot_type(src)
+ verbs |= /obj/item/weapon/rig/proc/toggle_boots
if(chest_type)
- chest = new chest_type()
- verbs |= /obj/item/weapon/storage/rig/proc/toggle_chest
+ chest = new chest_type(src)
+ verbs |= /obj/item/weapon/rig/proc/toggle_chest
for(var/obj/item/piece in list(gloves,helmet,boots,chest))
if(!piece)
@@ -128,7 +137,7 @@
toggle_seals(M,1)
update_icon()
-/obj/item/weapon/storage/rig/Del()
+/obj/item/weapon/rig/Del()
for(var/obj/item/piece in list(gloves,boots,helmet,chest))
var/mob/living/M = piece.loc
if(istype(M))
@@ -137,7 +146,7 @@
processing_objects -= src
..()
-/obj/item/weapon/storage/rig/proc/suit_is_deployed()
+/obj/item/weapon/rig/proc/suit_is_deployed()
if(!istype(wearer) || src.loc != wearer || wearer.back != src)
return 0
if(helm_type && (!helmet || wearer.head != helmet))
@@ -150,7 +159,7 @@
return 0
return 1
-/obj/item/weapon/storage/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant)
+/obj/item/weapon/rig/proc/toggle_seals(var/mob/living/carbon/human/M,var/instant)
if(sealing) return
@@ -272,10 +281,12 @@
piece.flags |= AIRTIGHT
update_icon(1)
-/obj/item/weapon/storage/rig/process()
+/obj/item/weapon/rig/process()
if(!istype(wearer) || loc != wearer || wearer.back != src || canremove || !cell || cell.charge <= 0)
if(!cell || cell.charge <= 0)
+ if(electrified >0)
+ electrified = 0
if(!offline)
if(istype(wearer))
if(!canremove)
@@ -302,10 +313,19 @@
slowdown = offline_slowdown
return
+ if(cell && cell.charge > 0 && electrified > 0)
+ electrified--
+
+ if(malfunction_delay > 0)
+ malfunction_delay--
+ else if(malfunctioning)
+ malfunctioning--
+ malfunction()
+
for(var/obj/item/rig_module/module in installed_modules)
cell.use(module.process()*10)
-/obj/item/weapon/storage/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai)
+/obj/item/weapon/rig/proc/check_power_cost(var/mob/living/user, var/cost, var/use_unconcious, var/obj/item/rig_module/mod, var/user_is_ai)
if(!istype(user))
return 0
@@ -340,7 +360,7 @@
cell.use(cost*10)
return 1
-/obj/item/weapon/storage/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+/obj/item/weapon/rig/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
return
@@ -403,7 +423,7 @@
ui.open()
ui.set_auto_update(1)
-/obj/item/weapon/storage/rig/update_icon(var/update_mob_icon)
+/obj/item/weapon/rig/update_icon(var/update_mob_icon)
//TODO: Maybe consider a cache for this (use mob_icon as blank canvas, use suit icon overlay).
overlays.Cut()
@@ -433,7 +453,7 @@
wearer.update_inv_back()
return
-/obj/item/weapon/storage/rig/Topic(href,href_list)
+/obj/item/weapon/rig/Topic(href,href_list)
if(..())
return 1
@@ -468,7 +488,7 @@
src.add_fingerprint(usr)
return
-/obj/item/weapon/storage/rig/equipped(mob/living/carbon/human/M)
+/obj/item/weapon/rig/equipped(mob/living/carbon/human/M)
..()
if(istype(M) && M.back == src)
@@ -486,7 +506,7 @@
wearer = M
update_icon()
-/obj/item/weapon/storage/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode)
+/obj/item/weapon/rig/proc/toggle_piece(var/piece, var/mob/living/carbon/human/H, var/deploy_mode)
if(sealing)
return
@@ -537,7 +557,7 @@
use_obj.canremove = 1
holder.drop_from_inventory(use_obj)
use_obj.canremove = 0
- use_obj.loc = null
+ use_obj.loc = src
else if (deploy_mode != ONLY_RETRACT)
if(check_slot)
@@ -552,7 +572,7 @@
if(piece == "helmet" && helmet)
helmet.update_light(H)
-/obj/item/weapon/storage/rig/proc/deploy(mob/M,var/sealed)
+/obj/item/weapon/rig/proc/deploy(mob/M,var/sealed)
var/mob/living/carbon/human/H = M
@@ -589,12 +609,27 @@
for(var/piece in list("helmet","gauntlets","chest","boots"))
toggle_piece(piece, H, ONLY_DEPLOY)
-/obj/item/weapon/storage/rig/dropped()
+/obj/item/weapon/rig/dropped()
..()
for(var/piece in list("helmet","gauntlets","chest","boots"))
toggle_piece(piece, wearer, ONLY_RETRACT)
wearer = null
+//Todo
+/obj/item/weapon/rig/proc/malfunction()
+ return 0
+
+/obj/item/weapon/rig/emp_act(severity)
+ malfunctioning += severity*10
+ if(malfunction_delay <= 0)
+ malfunction_delay = 20
+
+/obj/item/weapon/rig/proc/shock(mob/user)
+ if (electrocute_mob(user, cell, src))
+ spark_system.start()
+ return 1
+ return 0
+
#undef ONLY_DEPLOY
#undef ONLY_RETRACT
#undef SEAL_DELAY
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
index 1502aa7b45..a954e9af1e 100644
--- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
@@ -1,7 +1,13 @@
-/obj/item/weapon/storage/rig/attackby(obj/item/W as obj, mob/user as mob)
+/obj/item/weapon/rig/attackby(obj/item/W as obj, mob/user as mob)
if(!istype(user,/mob/living)) return 0
+ if(electrified != 0)
+ if(cell && cell.charge >= 100)
+ cell.use(100)
+ if(shock(user, 100))
+ return
+
// Pass repair items on to the chestpiece.
if(chest && (istype(W,/obj/item/stack/sheet/mineral/plastic) || istype(W,/obj/item/stack/sheet/metal) || istype(W, /obj/item/weapon/weldingtool)))
return chest.attackby(W,user)
@@ -9,7 +15,7 @@
// Lock or unlock the access panel.
if(istype(W, /obj/item/weapon/card) || istype(W, /obj/item/device/pda))
- if(emagged)
+ if(subverted)
locked = 0
user << "It looks like the locking system has been shorted out."
return
@@ -17,7 +23,7 @@
req_access = null
req_one_access = null
locked = 0
- emagged = 1
+ subverted = 1
user << "You short out the access protocol for the suit."
return
@@ -45,6 +51,14 @@
return
if(open)
+
+ // Hacking.
+ if(istype(W,/obj/item/weapon/wirecutters) || istype(W,/obj/item/device/multitool))
+ if(open)
+ wires.Interact(user)
+ else
+ user << "You can't reach the wiring."
+ return
// Air tank.
if(istype(W,/obj/item/weapon/tank)) //Todo, some kind of check for suits without integrated air supplies.
@@ -54,7 +68,7 @@
user.drop_from_inventory(W)
air_supply = W
- W.loc = null
+ W.loc = src
user << "You slot [W] into [src] and tighten the connecting valve."
return
@@ -83,7 +97,7 @@
user << "You install \the [mod] into \the [src]."
user.drop_from_inventory(mod)
installed_modules |= mod
- mod.loc = null
+ mod.loc = src
mod.installed(src)
update_icon()
return 1
@@ -92,7 +106,7 @@
user << "You jack \the [W] into \the [src]'s battery mount."
user.drop_from_inventory(W)
- W.loc = null
+ W.loc = src
src.cell = W
return
@@ -166,4 +180,14 @@
for(var/obj/item/rig_module/module in installed_modules)
if(module.accepts_item(W,user)) //Item is handled in this proc
return
+ ..()
+
+
+/obj/item/weapon/rig/attackby(var/mob/user)
+
+ if(electrified != 0)
+ if(cell && cell.charge >= 100)
+ cell.use(100)
+ if(shock(user, 100))
+ return
..()
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index 65a7e3a231..0251a625eb 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -54,7 +54,7 @@
if(!istype(H) || !H.back)
return 0
- var/obj/item/weapon/storage/rig/suit = H.back
+ var/obj/item/weapon/rig/suit = H.back
if(!suit || !istype(suit) || !suit.installed_modules.len)
return 0
diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
index e898abe7d1..3e3440cfc9 100644
--- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
@@ -1,5 +1,5 @@
// Interface for humans.
-/obj/item/weapon/storage/rig/verb/hardsuit_interface()
+/obj/item/weapon/rig/verb/hardsuit_interface()
set name = "Open Hardsuit Interface"
set desc = "Open the hardsuit system interface."
@@ -9,7 +9,7 @@
if(wearer && wearer.back == src)
ui_interact(usr)
-/obj/item/weapon/storage/rig/verb/toggle_vision()
+/obj/item/weapon/rig/verb/toggle_vision()
set name = "Toggle Visor"
set desc = "Turns your rig visor off or on."
@@ -32,7 +32,7 @@
else
visor.deactivate()
-/obj/item/weapon/storage/rig/proc/toggle_helmet()
+/obj/item/weapon/rig/proc/toggle_helmet()
set name = "Toggle Helmet"
set desc = "Deploys or retracts your helmet."
@@ -41,7 +41,7 @@
toggle_piece("helmet",wearer)
-/obj/item/weapon/storage/rig/proc/toggle_chest()
+/obj/item/weapon/rig/proc/toggle_chest()
set name = "Toggle Chestpiece"
set desc = "Deploys or retracts your chestpiece."
@@ -50,7 +50,7 @@
toggle_piece("chest",wearer)
-/obj/item/weapon/storage/rig/proc/toggle_gauntlets()
+/obj/item/weapon/rig/proc/toggle_gauntlets()
set name = "Toggle Gauntlets"
set desc = "Deploys or retracts your gauntlets."
@@ -59,7 +59,7 @@
toggle_piece("gauntlets",wearer)
-/obj/item/weapon/storage/rig/proc/toggle_boots()
+/obj/item/weapon/rig/proc/toggle_boots()
set name = "Toggle Boots"
set desc = "Deploys or retracts your boots."
@@ -68,7 +68,7 @@
toggle_piece("boots",wearer)
-/obj/item/weapon/storage/rig/verb/deploy_suit()
+/obj/item/weapon/rig/verb/deploy_suit()
set name = "Deploy Hardsuit"
set desc = "Deploys helmet, gloves and boots."
@@ -84,7 +84,7 @@
deploy(wearer)
-/obj/item/weapon/storage/rig/verb/toggle_seals_verb()
+/obj/item/weapon/rig/verb/toggle_seals_verb()
set name = "Toggle Seals"
set desc = "Activates or deactivates your rig seals."
@@ -97,7 +97,7 @@
toggle_seals(wearer)
-/obj/item/weapon/storage/rig/verb/switch_vision_mode()
+/obj/item/weapon/rig/verb/switch_vision_mode()
set name = "Switch Vision Mode"
set desc = "Switches between available vision modes."
@@ -124,7 +124,7 @@
visor.engage()
-/obj/item/weapon/storage/rig/verb/alter_voice()
+/obj/item/weapon/rig/verb/alter_voice()
set name = "Configure Voice Synthesiser"
set desc = "Toggles or configures your voice synthesizer."
@@ -141,7 +141,7 @@
speech.engage()
-/obj/item/weapon/storage/rig/verb/select_module()
+/obj/item/weapon/rig/verb/select_module()
set name = "Select Module"
set desc = "Selects a module as your primary system."
@@ -168,7 +168,7 @@
selected_module = module
usr << "Primary system is now: [selected_module.interface_name]."
-/obj/item/weapon/storage/rig/verb/toggle_module()
+/obj/item/weapon/rig/verb/toggle_module()
set name = "Toggle Module"
set desc = "Toggle a system module."
@@ -199,7 +199,7 @@
usr << "You attempt to activate \the [module.interface_name]."
module.activate()
-/obj/item/weapon/storage/rig/verb/engage_module()
+/obj/item/weapon/rig/verb/engage_module()
set name = "Engage Module"
set desc = "Engages a system module."
diff --git a/code/modules/clothing/spacesuits/rig/rig_wiring.dm b/code/modules/clothing/spacesuits/rig/rig_wiring.dm
new file mode 100644
index 0000000000..aeccc068c3
--- /dev/null
+++ b/code/modules/clothing/spacesuits/rig/rig_wiring.dm
@@ -0,0 +1,51 @@
+/datum/wires/rig
+ random = 1
+ holder_type = /obj/item/weapon/rig
+ wire_count = 5
+
+#define RIG_SECURITY 1
+#define RIG_AI_OVERRIDE 2
+#define RIG_SYSTEM_CONTROL 4
+#define RIG_INTERFACE_LOCK 8
+#define RIG_INTERFACE_SHOCK 16
+/*
+ * Rig security can be snipped to disable ID access checks on rig.
+ * Rig AI override can be pulsed to toggle whether or not the AI can take control of the suit.
+ * System control can be pulsed to toggle some malfunctions.
+ * Interface lock can be pulsed to toggle whether or not the interface can be accessed.
+ */
+
+/datum/wires/rig/UpdateCut(var/index, var/mended)
+
+ var/obj/item/weapon/rig/rig = holder
+ switch(index)
+ if(RIG_SECURITY)
+ if(!mended)
+ rig.req_access = initial(rig.req_access)
+ rig.req_one_access = initial(rig.req_one_access)
+ if(RIG_INTERFACE_SHOCK)
+ rig.electrified = -1
+
+/datum/wires/rig/UpdatePulsed(var/index)
+
+ var/obj/item/weapon/rig/rig = holder
+ switch(index)
+ if(RIG_SECURITY)
+ rig.security_check_enabled = !rig.security_check_enabled
+ if(RIG_AI_OVERRIDE)
+ rig.ai_override_enabled = !rig.ai_override_enabled
+ if(RIG_SYSTEM_CONTROL)
+ rig.malfunctioning += 10
+ if(rig.malfunction_delay <= 0)
+ rig.malfunction_delay = 20
+ if(RIG_INTERFACE_LOCK)
+ rig.interface_locked = !rig.interface_locked
+ if(RIG_INTERFACE_SHOCK)
+ if(rig.electrified != -1)
+ rig.electrified = 30
+
+/datum/wires/rig/CanUse(var/mob/living/L)
+ var/obj/item/weapon/rig/rig = holder
+ if(rig.open)
+ return 1
+ return 0
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/suits/combat.dm b/code/modules/clothing/spacesuits/rig/suits/combat.dm
index 45741dbed5..0ed811e4b4 100644
--- a/code/modules/clothing/spacesuits/rig/suits/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/combat.dm
@@ -1,4 +1,7 @@
-/obj/item/weapon/storage/rig/combat
+/obj/item/clothing/head/helmet/space/rig/combat
+ light_overlay = "helmet_light_green_dual"
+
+/obj/item/weapon/rig/combat
name = "combat hardsuit control module"
desc = "A sleek and dangerous hardsuit for active combat."
icon_state = "security_rig"
@@ -8,6 +11,8 @@
offline_slowdown = 3
offline_vision_restriction = 1
+ helm_type = /obj/item/clothing/head/helmet/space/rig/combat
+
initial_modules = list(
/obj/item/rig_module/mounted,
/obj/item/rig_module/vision/thermal,
@@ -18,7 +23,7 @@
/obj/item/rig_module/chem_dispenser/combat
)
-/obj/item/weapon/storage/rig/combat/merc
+/obj/item/weapon/rig/combat/merc
name = "crimson hardsuit control module"
desc = "A blood-red hardsuit featuring some fairly illegal technology."
icon_state = "merc_rig"
diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm
index 347ca5dea1..02e59490d6 100644
--- a/code/modules/clothing/spacesuits/rig/suits/ert.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm
@@ -1,4 +1,7 @@
-/obj/item/weapon/storage/rig/ert
+/obj/item/clothing/head/helmet/space/rig/ert
+ light_overlay = "helmet_light_dual"
+
+/obj/item/weapon/rig/ert
name = "ERT-C hardsuit control module"
desc = "A suit worn by the commander of a NanoTrasen Emergency Response Team. Has blue highlights. Armoured and space ready."
suit_type = "ERT commander"
@@ -6,6 +9,8 @@
siemens_coefficient = 0.6
offline_slowdown = 3
+ helm_type = /obj/item/clothing/head/helmet/space/rig/ert
+
req_access = list(access_cent_specops)
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
@@ -21,7 +26,7 @@
/obj/item/rig_module/mounted
)
-/obj/item/weapon/storage/rig/ert/engineer
+/obj/item/weapon/rig/ert/engineer
name = "ERT-E suit control module"
desc = "A suit worn by the engineering division of a NanoTrasen Emergency Response Team. Has orange highlights. Armoured and space ready."
suit_type = "ERT engineer"
@@ -35,7 +40,7 @@
/obj/item/rig_module/foam_sprayer
)
-/obj/item/weapon/storage/rig/ert/medical
+/obj/item/weapon/rig/ert/medical
name = "ERT-M suit control module"
desc = "A suit worn by the medical division of a NanoTrasen Emergency Response Team. Has white highlights. Armoured and space ready."
suit_type = "ERT medic"
@@ -48,7 +53,7 @@
/obj/item/rig_module/chem_dispenser/injector
)
-/obj/item/weapon/storage/rig/ert/security
+/obj/item/weapon/rig/ert/security
name = "ERT-S suit control module"
desc = "A suit worn by the security division of a NanoTrasen Emergency Response Team. Has red highlights. Armoured and space ready."
suit_type = "ERT security"
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index cfed2951a4..b94d1701e1 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -1,5 +1,5 @@
// Light rigs are not space-capable, but don't suffer excessive slowdown or sight issues when depowered.
-/obj/item/weapon/storage/rig/light
+/obj/item/weapon/rig/light
name = "light suit control module"
desc = "A lighter, less armoured rig suit."
icon_state = "ninja_rig"
@@ -28,7 +28,7 @@
/obj/item/clothing/head/helmet/space/rig/light
name = "hood"
-/obj/item/weapon/storage/rig/light/hacker
+/obj/item/weapon/rig/light/hacker
name = "cybersuit control module"
suit_type = "cyber"
desc = "An advanced powered armour suit with many cyberwarfare enhancements."
@@ -48,7 +48,7 @@
name = "mask"
flags = FPRINT | TABLEPASS | THICKMATERIAL
-/obj/item/weapon/storage/rig/light/ninja
+/obj/item/weapon/rig/light/ninja
name = "ominous suit control module"
suit_type = "ominous"
desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins."
@@ -76,7 +76,7 @@
..()
-/obj/item/weapon/storage/rig/light/stealth
+/obj/item/weapon/rig/light/stealth
name = "stealth suit control module"
suit_type = "stealth"
desc = "A highly advanced and expensive suit designed for covert operations."
diff --git a/code/modules/clothing/spacesuits/rig/suits/station.dm b/code/modules/clothing/spacesuits/rig/suits/station.dm
index f1b4732f0c..e524afbddf 100644
--- a/code/modules/clothing/spacesuits/rig/suits/station.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/station.dm
@@ -1,4 +1,4 @@
-/obj/item/weapon/storage/rig/industrial
+/obj/item/weapon/rig/industrial
name = "industrial suit control module"
suit_type = "industrial hardsuit"
desc = "A heavy, powerful rig used by construction crews and mining corporations."
@@ -20,7 +20,7 @@
)
//Chief Engineer's rig. This is sort of a halfway point between the old hardsuits (voidsuits) and the rig class.
-/obj/item/weapon/storage/rig/ce
+/obj/item/weapon/rig/ce
name = "advanced voidsuit control module"
suit_type = "advanced voidsuit"
@@ -44,7 +44,7 @@
boot_type = null
glove_type = null
-/obj/item/weapon/storage/rig/hazmat
+/obj/item/weapon/rig/hazmat
name = "AMI control module"
suit_type = "hazmat"
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index b54104872b..d3b354fe52 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -19,12 +19,18 @@
var/obj/machinery/camera/camera
var/list/camera_networks
- var/brightness_on
- var/on = 0
+
+ light_overlay = "helmet_light"
+ brightness_on = 4
+ on = 0
/obj/item/clothing/head/helmet/space/attack_self(mob/user)
if(!camera && camera_networks)
+
+ if(!icon_action_button)
+ icon_action_button = "[icon_state]"
+
camera = new /obj/machinery/camera(src)
camera.network = camera_networks
cameranet.removeCamera(camera)
@@ -32,47 +38,7 @@
user << "\blue User scanned as [camera.c_tag]. Camera activated."
return 1
- else if(brightness_on)
-
- if(!isturf(user.loc))
- user << "You cannot turn the light on while in this [user.loc]" //To prevent some lighting anomalities.
- return
-
- on = !on
- icon_state = "rig[on]-[item_color]"
-
- if(on)
- user.SetLuminosity(user.luminosity + brightness_on)
- else
- user.SetLuminosity(user.luminosity - brightness_on)
-
- if(istype(user,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = user
- H.update_inv_head()
-
- else
- return ..(user)
-
-/obj/item/clothing/head/helmet/space/proc/update_light(mob/user)
-
- if(!brightness_on)
- return
-
- if(on)
- user.SetLuminosity(user.luminosity - brightness_on)
- SetLuminosity(brightness_on)
-
-/obj/item/clothing/head/helmet/space/equipped(mob/user)
..()
- update_light(user)
-
-/obj/item/clothing/head/helmet/space/pickup(mob/user)
- ..()
- update_light(user)
-
-/obj/item/clothing/head/helmet/space/dropped(mob/user)
- ..()
- update_light(user)
/obj/item/clothing/head/helmet/space/examine()
..()
diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm
index 811fbab28a..849b4761ad 100644
--- a/code/modules/clothing/spacesuits/void/merc.dm
+++ b/code/modules/clothing/spacesuits/void/merc.dm
@@ -9,10 +9,7 @@
siemens_coefficient = 0.6
species_restricted = list("exclude","Unathi","Tajara","Skrell","Vox")
camera_networks = list("NUKE")
-
-/obj/item/clothing/head/helmet/space/void/merc/examine(mob/user)
- if(..(user, 1))
- user << "This helmet has a built-in camera. It's [camera ? "" : "in"]active."
+ light_overlay = "helmet_light_green" //todo: species-specific light overlays
/obj/item/clothing/suit/space/void/merc
icon_state = "rig-syndie"
diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm
index dd4094e7ee..f4ef7cb8f8 100644
--- a/code/modules/clothing/spacesuits/void/station.dm
+++ b/code/modules/clothing/spacesuits/void/station.dm
@@ -24,6 +24,7 @@
item_state = "mining_helm"
item_color = "mining"
armor = list(melee = 50, bullet = 5, laser = 20,energy = 5, bomb = 55, bio = 100, rad = 20)
+ light_overlay = "helmet_light_dual"
/obj/item/clothing/suit/space/void/mining
icon_state = "rig-mining"
@@ -58,6 +59,7 @@
item_color = "sec"
armor = list(melee = 60, bullet = 10, laser = 30, energy = 5, bomb = 45, bio = 100, rad = 10)
siemens_coefficient = 0.7
+ light_overlay = "helmet_light_dual"
/obj/item/clothing/suit/space/void/security
icon_state = "rig-sec"
@@ -77,6 +79,7 @@
item_color = "atmos"
armor = list(melee = 40, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 50)
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ light_overlay = "helmet_light_dual"
/obj/item/clothing/suit/space/void/atmos
desc = "A special suit that protects against hazardous, low pressure environments. Has improved thermal protection and minor radiation shielding."
diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm
index 8da38caa92..558b719bea 100644
--- a/code/modules/clothing/spacesuits/void/void.dm
+++ b/code/modules/clothing/spacesuits/void/void.dm
@@ -22,6 +22,8 @@
"Skrell" = 'icons/obj/clothing/species/skrell/hats.dmi',
)
+ light_overlay = "helmet_light"
+
/obj/item/clothing/suit/space/void
name = "voidsuit"
icon_state = "void"
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 32af71292b..76a2e97dd2 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -533,19 +533,23 @@
var/suit_icon // Sets suit icon_state and item_state.
var/helmet_color // Sets item_color.
var/uses = 2 // Uses before the kit deletes itself.
+ var/new_light_overlay
-/obj/item/clothing/head/helmet/space/rig/attackby(var/obj/item/O as obj, mob/user as mob)
+/obj/item/clothing/head/helmet/space/void/attackby(var/obj/item/O as obj, mob/user as mob)
..()
if(istype(O,/obj/item/device/kit/suit/fluff))
var/obj/item/device/kit/suit/fluff/kit = O
- name = "[kit.new_name] hardsuit helmet"
+ name = "[kit.new_name] suit helmet"
desc = kit.new_helmet_desc
icon_state = kit.helmet_icon
item_state = kit.helmet_icon
item_color = kit.helmet_color
+ if(kit.new_light_overlay)
+ light_overlay = kit.new_light_overlay
+
user << "You set about modifying the helmet into [src]."
playsound(user.loc, 'sound/items/Screwdriver.ogg', 50, 1)
@@ -608,6 +612,7 @@
helmet_icon = "rig0-hazardhardsuit"
suit_icon = "rig-hazardhardsuit"
helmet_color = "hazardhardsuit"
+ new_light_overlay = "helmet_light_dual"
//////// Meat Hook - Korom Bhararaya - Matthew951 ////////////////////////
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index bd9433310d..068eef1cac 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -71,8 +71,8 @@
if(P)
stat(null, "Phoron Stored: [P.stored_plasma]/[P.max_plasma]")
- if(back && istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/suit = back
+ if(back && istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/suit = back
var/cell_status = "ERROR"
if(suit.cell) cell_status = "[suit.cell.charge]/[suit.cell.maxcharge]"
stat(null, "Suit charge: [cell_status]")
@@ -681,8 +681,8 @@
if(istype(src.head, /obj/item/clothing/head/welding))
if(!src.head:up)
number += 2
- if(istype(back, /obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/O = back
+ if(istype(back, /obj/item/weapon/rig))
+ var/obj/item/weapon/rig/O = back
if(O.helmet && O.helmet == head && (O.helmet.body_parts_covered & EYES))
number += 2
if(istype(src.head, /obj/item/clothing/head/helmet/space))
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 88cedbe623..8b1f467fde 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -72,8 +72,8 @@
if(back)
if(istype(back,/obj/item/weapon/tank/jetpack))
thrust = back
- else if(istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/rig = back
+ else if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = back
for(var/obj/item/rig_module/maneuvering_jets/module in rig.installed_modules)
thrust = module.jets
break
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 1c795ec349..c9c8733a97 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -424,8 +424,8 @@
if(internal)
var/obj/item/weapon/tank/rig_supply
- if(istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/rig = back
+ if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = back
if(!rig.offline && (rig.air_supply && internal == rig.air_supply))
rig_supply = rig.air_supply
@@ -1186,8 +1186,8 @@
//Eyes
//Check rig first because it's two-check and other checks will override it.
- if(istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/O = back
+ if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/O = back
if(O.offline && O.offline_vision_restriction == 2 && O.helmet && O.helmet == head && (O.helmet.body_parts_covered & EYES))
blinded = 1
@@ -1369,7 +1369,7 @@
var/tmp/glasses_processed = 0
- var/obj/item/weapon/storage/rig/rig = back
+ var/obj/item/weapon/rig/rig = back
if(istype(rig) && rig.visor)
if(rig.visor.vision && rig.visor.active && rig.visor.vision.glasses)
glasses_processed = 1
@@ -1497,8 +1497,8 @@
client.screen |= global_hud.darkMask
masked = 1
- if(!masked && istype(back, /obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/O = back
+ if(!masked && istype(back, /obj/item/weapon/rig))
+ var/obj/item/weapon/rig/O = back
// Ugh, why is this done on a case by case basis? Why is there no flag for causing weldervision?
if(O.offline && O.offline_vision_restriction == 1 && O.helmet && O.helmet == head && (O.helmet.body_parts_covered & EYES))
client.screen |= global_hud.darkMask
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index b386fb8370..503e03365a 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -204,8 +204,8 @@
/mob/living/carbon/human/GetVoice()
var/voice_sub
- if(istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/rig = back
+ if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = back
// todo: fix this shit
if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice)
voice_sub = rig.speech.voice_holder.voice
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index 02e31f096e..de7f86eb8a 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -5,6 +5,7 @@
icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone]
*/
var/global/list/human_icon_cache = list()
+var/global/list/light_overlay_cache = list()
///////////////////////
//UPDATE_ICONS SYSTEM//
@@ -728,6 +729,11 @@ proc/get_damage_icon_part(damage_state, body_part)
bloodsies.color = head.blood_color
standing.overlays += bloodsies
+ if(istype(head,/obj/item/clothing/head))
+ var/obj/item/clothing/head/hat = head
+ if(hat.on && light_overlay_cache["[hat.light_overlay]"])
+ standing.overlays |= light_overlay_cache["[hat.light_overlay]"]
+
overlays_standing[HEAD_LAYER] = standing
else
@@ -820,7 +826,7 @@ proc/get_damage_icon_part(damage_state, body_part)
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
if(back)
back.screen_loc = ui_back //TODO
- var/obj/item/weapon/storage/rig/rig = back
+ var/obj/item/weapon/rig/rig = back
if(back.icon_override)
overlays_standing[BACK_LAYER] = image("icon" = back.icon_override, "icon_state" = "[back.icon_state]")
//If this is a rig and a mob_icon is set, it will take species into account in the rig update_icon() proc.
diff --git a/code/modules/mob/living/carbon/human/whisper.dm b/code/modules/mob/living/carbon/human/whisper.dm
index d17e3e6f20..f456f0eba2 100644
--- a/code/modules/mob/living/carbon/human/whisper.dm
+++ b/code/modules/mob/living/carbon/human/whisper.dm
@@ -62,8 +62,8 @@
//looks like this only appears in whisper. Should it be elsewhere as well? Maybe handle_speech_problems?
var/voice_sub
- if(istype(back,/obj/item/weapon/storage/rig))
- var/obj/item/weapon/storage/rig/rig = back
+ if(istype(back,/obj/item/weapon/rig))
+ var/obj/item/weapon/rig/rig = back
// todo: fix this shit
if(rig.speech && rig.speech.voice_holder && rig.speech.voice_holder.active && rig.speech.voice_holder.voice)
voice_sub = rig.speech.voice_holder.voice
diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm
index 4d388136be..d2a8e35320 100644
--- a/code/modules/mob/living/living_powers.dm
+++ b/code/modules/mob/living/living_powers.dm
@@ -15,20 +15,4 @@
src << text("\blue You are now hiding.")
else
layer = MOB_LAYER
- src << text("\blue You have stopped hiding.")
-
-// Hardsuit interface proc for AI. Defined here so MMIs can also use it.
-/mob/living/proc/hardsuit_interface_ai()
-
- set name = "Open Hardsuit Interface"
- set desc = "Open the hardsuit system interface."
- set category = "Hardsuit"
-
- var/obj/item/rig_module/module = src.loc
-
- if(!istype(module) || !module.holder)
- verbs -= /mob/living/proc/hardsuit_interface_ai
- return 0
-
- if(module.holder.check_power_cost(src, 0, 0, 0, 1))
- ui_interact(src)
\ No newline at end of file
+ src << text("\blue You have stopped hiding.")
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index a7272f7097..9ddfa5c9ff 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -82,7 +82,7 @@ obj/item/weapon/gun/energy/laser/retro
return 1
var/mob/living/carbon/human/H = loc
if(istype(H) && H.back)
- var/obj/item/weapon/storage/rig/suit = H.back
+ var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
in_chamber = new /obj/item/projectile/beam/heavylaser(src)
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index 454e4c0348..9b1203c649 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -40,7 +40,7 @@
return 1
var/mob/living/carbon/human/H = loc
if(istype(H) && H.back)
- var/obj/item/weapon/storage/rig/suit = H.back
+ var/obj/item/weapon/rig/suit = H.back
if(istype(suit) && suit.cell && suit.cell.charge >= 250)
suit.cell.use(250)
var/prog_path = text2path(projectile_type)
diff --git a/code/modules/research/xenoarchaeology/artifact/effect.dm b/code/modules/research/xenoarchaeology/artifact/effect.dm
index 4da22c0a8d..23bb649ac7 100644
--- a/code/modules/research/xenoarchaeology/artifact/effect.dm
+++ b/code/modules/research/xenoarchaeology/artifact/effect.dm
@@ -90,8 +90,8 @@ proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H)
var/protected = 0
//anomaly suits give best protection, but excavation suits are almost as good
- if(istype(H.back,/obj/item/weapon/storage/rig/hazmat))
- var/obj/item/weapon/storage/rig/hazmat/rig = H.back
+ if(istype(H.back,/obj/item/weapon/rig/hazmat))
+ var/obj/item/weapon/rig/hazmat/rig = H.back
if(rig.suit_is_deployed() && !rig.offline)
protected += 1
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 87bde25c5c..bebdca6d5e 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi
new file mode 100644
index 0000000000..9f1232ff95
Binary files /dev/null and b/icons/mob/light_overlays.dmi differ
diff --git a/icons/mob/species/skrell/helmet.dmi b/icons/mob/species/skrell/helmet.dmi
index eb65bda8c0..3d24f5f335 100644
Binary files a/icons/mob/species/skrell/helmet.dmi and b/icons/mob/species/skrell/helmet.dmi differ
diff --git a/icons/mob/species/tajaran/helmet.dmi b/icons/mob/species/tajaran/helmet.dmi
index 81a64acdf4..0851a4576d 100644
Binary files a/icons/mob/species/tajaran/helmet.dmi and b/icons/mob/species/tajaran/helmet.dmi differ
diff --git a/icons/mob/species/unathi/helmet.dmi b/icons/mob/species/unathi/helmet.dmi
index 0f04946724..975a1a5786 100644
Binary files a/icons/mob/species/unathi/helmet.dmi and b/icons/mob/species/unathi/helmet.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index eceb56a0d6..ed91381774 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/light_overlays.dmi b/icons/obj/light_overlays.dmi
new file mode 100644
index 0000000000..c7bb310ce9
Binary files /dev/null and b/icons/obj/light_overlays.dmi differ
diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm
index a90c30dfb5..eb55cb4538 100644
--- a/maps/tgstation2.dmm
+++ b/maps/tgstation2.dmm
@@ -4714,7 +4714,7 @@
"bMH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bMI" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bMJ" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bMK" = (/obj/structure/rack,/obj/item/weapon/storage/rig/hazmat,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bMK" = (/obj/structure/rack,/obj/item/weapon/rig/hazmat,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bML" = (/obj/machinery/computer/area_atmos,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor{icon_state = "bot"},/area/rnd/storage)
"bMM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "warningcorner"; dir = 2},/area/rnd/storage)
"bMN" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/server)
@@ -4855,7 +4855,7 @@
"bPs" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bPt" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bPu" = (/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/medical/medbay3)
-"bPv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/storage/rig/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief)
+"bPv" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/shoes/magboots,/obj/item/clothing/mask/breath,/obj/item/weapon/rig/ce,/turf/simulated/floor{dir = 8; icon_state = "neutralfull"},/area/crew_quarters/heads/chief)
"bPw" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bPx" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bPy" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
@@ -8567,7 +8567,7 @@
"diM" = (/obj/item/weapon/inflatable_duck,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/ferry)
"diN" = (/turf/space/transit/east/shuttlespace_ew11,/area/space)
"diO" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_dock_airlock"; locked = 1; name = "Arrivals Airlock"; req_access_txt = "13"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/evac)
-"diP" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/storage/rig/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"diP" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"diQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access_txt = "13"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
"diR" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "0"; tag_door = "centcom_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
"diS" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_dock"; name = "docking port controller"; pixel_x = 25; pixel_y = 0; req_access_txt = "0"; req_one_access_txt = "13"; tag_door = "centcom_dock_airlock"},/turf/unsimulated/floor{dir = 6; icon_state = "warning"},/area/centcom/evac)
@@ -9647,7 +9647,7 @@
"dDA" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Brig"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"dDB" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/research_outpost/hallway)
"dDC" = (/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "Preparation"; req_access_txt = "150"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"dDD" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/weapon/storage/rig/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"dDD" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"dDE" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"dDF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/research_outpost/hallway)
"dDG" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -11102,7 +11102,7 @@
"efz" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/engi_engine)
"efA" = (/obj/machinery/turretid/stun{ailock = 1; control_area = "\improper Telecoms Foyer"; desc = "A firewall prevents AIs from interacting with this device."; name = "Telecoms Foyer turret control"; pixel_y = 29; req_access = list(61)},/turf/simulated/floor,/area/tcommsat/entrance)
"efB" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech)
-"efC" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/weapon/storage/rig/ert/engineer,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"efC" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/brown_vest,/obj/item/weapon/rig/ert/engineer,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"efD" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating,/area/djstation)
"efE" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air{filled = 0.05},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/mine/production)
"efF" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/turf/simulated/floor/plating,/area/djstation)
@@ -11227,7 +11227,7 @@
"ehU" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/mine/production)
"ehV" = (/obj/structure/rack,/obj/item/clothing/suit/armor/vest/ert/command,/obj/item/clothing/head/helmet/ert/command,/obj/item/weapon/storage/backpack/ert/commander,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
"ehW" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/hydraulic_clamp,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/obj/item/mecha_parts/mecha_equipment/tool/passenger,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
-"ehX" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/storage/rig/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"ehX" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"ehY" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = 32},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"ehZ" = (/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "ASSAULT0"; name = "Launch Bay #0"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom)
"eia" = (/obj/machinery/camera{c_tag = "Assault Armor South"; dir = 1; network = list("ERT")},/turf/unsimulated/floor{icon_state = "loadingarea"; dir = 8},/area/centcom)
@@ -11239,7 +11239,7 @@
"eig" = (/obj/machinery/autolathe{desc = "Your typical Autolathe. It appears to have much more options than your regular one, however..."; hacked = 1; name = "Unlocked Autolathe"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"eih" = (/obj/machinery/chem_dispenser/meds,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"eii" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
-"eij" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/storage/rig/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
+"eij" = (/obj/structure/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"eik" = (/obj/machinery/porta_turret,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"eil" = (/obj/structure/rack,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"eim" = (/obj/structure/table/reinforced,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/obj/item/device/pda/ert,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
@@ -11658,7 +11658,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcFYdmwcJEcJEcJEcJEdmCcFYdmDcJEcJEdmLcFYcFYcFYcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcJncIRcJJcJJcKKcKbcKbcKbcKbcKbcKbcKbcKbcKbcKLcJJcJJcKMcKAcKAcKAcKAcKAcJKcKNcKjcJNcIRcJQcJQcJQcIRcKOcKOcKPcKOcKOcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqL
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYdpicJDdngcFYdmQdiPdiPdvmcJEcFYcFYdoWcJEcJEcKScFYefJefKcFYdmUdmUdmUdmUdmUdmUdmTcLacLbcIPcJncIRcJJcJJcLccLdcLecLecLecLecLecLecLecLfcJIcJJcJJcJKcLgcLhcLicLjcLkcJKcLlcKjcJOcIRcJQcJQcJQcIRcLmcLmcKjcLmcLmcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqL
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacJvcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJwcJRcJycJwcJwcJwcJzcJRcJScJBcJDdpjcFYcIPcFYcFYcFYcJEcFYdmEcJEcJEcJEcKTcFYcKXcLrcMxdmPdmPdmPdmPdmPdmPdmBcIPcIPcIPcIPcIPcJJcJJcLccLvcLwcJJcLxcLycLzcJJcLwcLvcJIcJJcJJcJKcJKcJKcJKcJKcJKcJKcLlcKjcJOcIRcJQcJQcJQcIRcLAcLAcKjcLAcLAcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqL
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYcKqcJDdptcFYdpqdprdzOcFYcJEcFYefCdDDcJEcJEcKUcFYcKXdvmcIPcLHcLIcLIcLIcLJcLIcLKcIPcLLcLLcLLcIPcJJcJJcLMcLNcLOcLPcLQcLRcLScLTcLUcLNcLVcJJcJJcIRcLWcLWcLWcLWcLWcIRcIRcKkcIRcIRcIRcKkcIRcIRcKjcKjcKjcKjcKjcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqL
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacIXcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIPcIYcKqcJDdptcFYdpqdprdzOcFYcJEcFYdDDefCcJEcJEcKUcFYcKXdvmcIPcLHcLIcLIcLIcLJcLIcLKcIPcLLcLLcLLcIPcJJcJJcLMcLNcLOcLPcLQcLRcLScLTcLUcLNcLVcJJcJJcIRcLWcLWcLWcLWcLWcIRcIRcKkcIRcIRcIRcKkcIRcIRcKjcKjcKjcKjcKjcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqL
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEjcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbdFmcGacGbcGbcGbcHrdFmeeBdFAdvmefLcFYefjcJEefMcFYcLXcFYcFYcFYcLYcFYcFYcFYcKXcLrcLZcMacMacMacMacMacMacMacMbcMacMacMacMbcJJcJJcJJcMccJJcJJcMdcJJcMdcJJcJJcMccJJcJJcJJcMecJQcJQcJQcJQcJQcMecJQcJQcJQcJQcJQcJQcJQcMecLAcLAcLAcLAcLAcKFcKGcKGcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqL
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefNcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYcFYefPefOdvmehWcFYehVcLtehXcFYcJEcMhcJEcMicJEcMjehYehYcJEcMkcIPcMlcMmcMmcMncMocMpcMqcIPcMrcMrcMrcIPcJJcJJcKKcMscMtcLPcMucJJcMvcLTcMwcMscKLcJJcJJcMecJQcJQcJQcJQcJQcMecJQcJQcJQcJQcJQcJQcJQcMecLAcLAcLAcLAcLAcIRcKkcKkcIRcIRcIRcIRcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEjcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbcGbehZcGacGbcGbcGbcHrehZeibeiadvmcLreiccLtcJEcJEeidcJEcMycJEcKXcKXcMzcMzcKXcKXcMkcIPcMAcMAcMAcMBcMCcMBcMDcIPcIPcIPcIPcIPcJJcJJcLccLNcMEcJJcMdcJJcMdcJJcMEcLNcJIcJJcJJcIRcMFcMGcMGcMGcMHcIRcIRcMIcIRcIRcIRcKkcIRcIRcIRcMJcMJcMJcIRcIRcJQcJQcJQcMKcJQcMLcIRaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeeJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadqLdqLdqLdqLdqLdqLdqLdqLdqLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa