diff --git a/baystation12.dme b/baystation12.dme
index f0a68647ed..ae1808a241 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -463,7 +463,6 @@
#include "code\game\objects\objs.dm"
#include "code\game\objects\structures.dm"
#include "code\game\objects\weapons.dm"
-#include "code\game\objects\closets\walllocker.dm"
#include "code\game\objects\effects\aliens.dm"
#include "code\game\objects\effects\bump_teleporter.dm"
#include "code\game\objects\effects\chemsmoke.dm"
@@ -683,6 +682,7 @@
#include "code\game\objects\structures\crates_lockers\closets\malfunction.dm"
#include "code\game\objects\structures\crates_lockers\closets\syndicate.dm"
#include "code\game\objects\structures\crates_lockers\closets\utility_closets.dm"
+#include "code\game\objects\structures\crates_lockers\closets\walllocker.dm"
#include "code\game\objects\structures\crates_lockers\closets\wardrobe.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\bar.dm"
#include "code\game\objects\structures\crates_lockers\closets\secure\cargo.dm"
@@ -832,6 +832,7 @@
#include "code\modules\clothing\spacesuits\rig\modules\computer.dm"
#include "code\modules\clothing\spacesuits\rig\modules\modules.dm"
#include "code\modules\clothing\spacesuits\rig\modules\ninja.dm"
+#include "code\modules\clothing\spacesuits\rig\modules\rig_weapons.dm"
#include "code\modules\clothing\spacesuits\rig\modules\utility.dm"
#include "code\modules\clothing\spacesuits\rig\modules\vision.dm"
#include "code\modules\clothing\spacesuits\rig\suits\alien.dm"
diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm
index aa4473babd..fd933bf94d 100644
--- a/code/ATMOSPHERICS/datum_pipeline.dm
+++ b/code/ATMOSPHERICS/datum_pipeline.dm
@@ -205,9 +205,15 @@ datum/pipeline
var/gas_density = air.total_moles/air.volume
thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*T20C) ), 1)
- //if the h/e pipes radiate less than the AVERAGE_SOLAR_RADIATION, then they will heat up, otherwise they will cool down. It turns out the critical temperature is -26 C
- var/heat_gain = surface*(AVERAGE_SOLAR_RADIATION - STEFAN_BOLTZMANN_CONSTANT*thermal_conductivity*(air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4)
+ // We only get heat from the star on the exposed surface area.
+ // If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase.
+ var/heat_gain = AVERAGE_SOLAR_RADIATION * RADIATOR_EXPOSED_SURFACE_AREA * thermal_conductivity
+
+ // Previously, the temperature would enter equilibrium at 26C or 294K.
+ // Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on.
+ // It currently should stabilise at 85K or -183C.
+ heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4
air.add_thermal_energy(heat_gain)
if(network)
- network.update = 1
\ No newline at end of file
+ network.update = 1
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm
index 0c12ed23a0..9b0103cb8a 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_assembly_port_construction.dm
@@ -6,7 +6,7 @@
icon = 'code/WorkInProgress/Cael_Aislinn/Rust/rust.dmi'
icon_state = "port2"
w_class = 4
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/rust_fuel_assembly_port_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
diff --git a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm
index 3d2e32f971..0db3de8a7c 100644
--- a/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm
+++ b/code/WorkInProgress/Cael_Aislinn/Rust/fuel_compressor_construction.dm
@@ -6,7 +6,7 @@
icon = 'code/WorkInProgress/Cael_Aislinn/Rust/rust.dmi'
icon_state = "fuel_compressor0"
w_class = 4
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/rust_fuel_compressor_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
diff --git a/code/WorkInProgress/Ported/Abi79/uplinks.dm b/code/WorkInProgress/Ported/Abi79/uplinks.dm
index 58d9fa0ace..dc33f9f10d 100644
--- a/code/WorkInProgress/Ported/Abi79/uplinks.dm
+++ b/code/WorkInProgress/Ported/Abi79/uplinks.dm
@@ -317,7 +317,7 @@ 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
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
item_state = "radio"
diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm
index a4d2c31bdc..8791ea1075 100644
--- a/code/WorkInProgress/Ported/policetape.dm
+++ b/code/WorkInProgress/Ported/policetape.dm
@@ -3,7 +3,6 @@
name = "tape roll"
icon = 'icons/policetape.dmi'
icon_state = "rollstart"
- flags = FPRINT
w_class = 2.0
var/turf/start
var/turf/end
@@ -98,8 +97,8 @@
//is_blocked_turf(var/turf/T)
usr << "\blue You finish placing the [src]." //Git Test
-/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob)
- if (istype(A, /obj/machinery/door/airlock))
+/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity)
+ if (proximity && istype(A, /obj/machinery/door/airlock))
var/turf/T = get_turf(A)
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z)
diff --git a/code/WorkInProgress/Sigyn/Softcurity/clothing.dm b/code/WorkInProgress/Sigyn/Softcurity/clothing.dm
index 057c10cb57..e3b5b6238b 100644
--- a/code/WorkInProgress/Sigyn/Softcurity/clothing.dm
+++ b/code/WorkInProgress/Sigyn/Softcurity/clothing.dm
@@ -5,7 +5,7 @@
item_state = "ba_suit"
color = "hosblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/advisor
name = "correctional advisor's jumpsuit"
@@ -14,7 +14,7 @@
item_state = "ba_suit"
color = "wardenblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/under/rank/supervisor
name = "crew supervisor's jumpsuit"
@@ -23,7 +23,7 @@
item_state = "ba_suit"
color = "officerblueclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
/obj/item/clothing/shoes/boots
name = "boots"
diff --git a/code/WorkInProgress/SkyMarshal/officer_stuff.dm b/code/WorkInProgress/SkyMarshal/officer_stuff.dm
index 13cca94a8b..f7483b7dd4 100644
--- a/code/WorkInProgress/SkyMarshal/officer_stuff.dm
+++ b/code/WorkInProgress/SkyMarshal/officer_stuff.dm
@@ -5,13 +5,11 @@
name = "officers beret"
desc = "A black beret adorned with the shield—a silver kite shield with an engraved sword—of the NanoTrasen security forces, announcing to the world that the wearer is a defender of NanoTrasen."
icon_state = "centcomofficerberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/centcom/captain
name = "captains beret"
desc = "A white beret adorned with the shield—a cobalt kite shield with an engraved sword—of the NanoTrasen security forces, worn only by those captaining a vessel of the NanoTrasen Navy."
icon_state = "centcomcaptain"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/shoes/centcom
name = "dress shoes"
diff --git a/code/WorkInProgress/SkyMarshal/traitoritems.dm b/code/WorkInProgress/SkyMarshal/traitoritems.dm
index b42a36685e..43c7641e53 100644
--- a/code/WorkInProgress/SkyMarshal/traitoritems.dm
+++ b/code/WorkInProgress/SkyMarshal/traitoritems.dm
@@ -3,7 +3,6 @@
/obj/item/weapon/stamperaser
name = "eraser"
desc = "It looks like some kind of eraser."
- flags = FPRINT | TABLEPASS
icon = 'icons/obj/items.dmi'
icon_state = "zippo"
item_state = "zippo"
@@ -15,7 +14,6 @@
desc = "It blinks and has an antenna on it. Weird."
icon_state = "t-ray0"
var/on = 0
- flags = FPRINT|TABLEPASS
w_class = 1
var/list/obj/item/device/radio/Old = list()
var/list/obj/item/device/radio/Curr = list()
diff --git a/code/WorkInProgress/Susan/susan_desert_turfs.dm b/code/WorkInProgress/Susan/susan_desert_turfs.dm
index a52f90a4bc..41ea6568ca 100644
--- a/code/WorkInProgress/Susan/susan_desert_turfs.dm
+++ b/code/WorkInProgress/Susan/susan_desert_turfs.dm
@@ -252,7 +252,6 @@ Alien plants should do something if theres a lot of poison
item_state = "wardendnavyclothes"
item_color = "wardendnavyclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/navysecurity
name = "security officer's jumpsuit"
@@ -261,7 +260,6 @@ Alien plants should do something if theres a lot of poison
item_state = "officerdnavyclothes"
item_color = "officerdnavyclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/navyhead_of_security
desc = "It's a jumpsuit worn by those few with the dedication to achieve the position of \"Head of Security\". It has additional armor to protect the wearer."
@@ -270,7 +268,6 @@ Alien plants should do something if theres a lot of poison
item_state = "hosdnavyclothes"
item_color = "hosdnavyclothes"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/armor/hosnavycoat
name = "armored coat"
@@ -283,26 +280,22 @@ Alien plants should do something if theres a lot of poison
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "officerberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/navywarden
name = "warden's beret"
desc = "A beret with a two-colored security insignia emblazoned on it. For wardens that are more inclined towards style than safety."
icon_state = "wardenberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/navyhos
name = "security head's beret"
desc = "A stylish beret bearing a golden insignia that proudly displays the security coat of arms. A commander's must-have."
icon_state = "hosberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/armor/navysecvest
name = "armored coat"
desc = "An armored coat that protects against some damage."
icon_state = "officerdnavyjacket"
item_state = "armor"
- flags = FPRINT | TABLEPASS
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/navywardenvest
@@ -310,7 +303,6 @@ Alien plants should do something if theres a lot of poison
desc = "An armoured jacket with silver rank pips and livery."
icon_state = "wardendnavyjacket"
item_state = "armor"
- flags = FPRINT | TABLEPASS
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
//hostile entities or npcs
diff --git a/code/WorkInProgress/autopsy.dm b/code/WorkInProgress/autopsy.dm
index 95cfa23494..d78c7d4093 100644
--- a/code/WorkInProgress/autopsy.dm
+++ b/code/WorkInProgress/autopsy.dm
@@ -7,7 +7,7 @@
desc = "Extracts information on wounds."
icon = 'icons/obj/autopsy_scanner.dmi'
icon_state = ""
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
var/list/datum/autopsy_data_scanner/wdata = list()
diff --git a/code/WorkInProgress/computer3/computers/camera.dm b/code/WorkInProgress/computer3/computers/camera.dm
index 04a6cd3fb5..9342d2731f 100644
--- a/code/WorkInProgress/computer3/computers/camera.dm
+++ b/code/WorkInProgress/computer3/computers/camera.dm
@@ -141,14 +141,14 @@
if (!computer || computer.z > 6)
return null
+ cameranet.process_sort()
+
var/list/L = list()
for(var/obj/machinery/camera/C in cameranet.cameras)
var/list/temp = C.network & key.networks
if(temp.len)
L.Add(C)
- camera_sort(L)
-
return L
verify_machine(var/obj/machinery/camera/C,var/datum/file/camnet_key/key = null)
if(!istype(C) || !C.can_use())
diff --git a/code/WorkInProgress/computer3/computers/crew.dm b/code/WorkInProgress/computer3/computers/crew.dm
index 170bd92607..836500a344 100644
--- a/code/WorkInProgress/computer3/computers/crew.dm
+++ b/code/WorkInProgress/computer3/computers/crew.dm
@@ -35,7 +35,7 @@
var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]"
var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])"
- log += "
| [H.get_id_name()] | "
+ log += "
| [H.get_authentification_name()] ([H.get_assignment()]) | "
switch(C.sensor_mode)
if(1)
diff --git a/code/WorkInProgress/computer3/lapvend.dm b/code/WorkInProgress/computer3/lapvend.dm
index 36de9e4cfc..72531b5d8e 100644
--- a/code/WorkInProgress/computer3/lapvend.dm
+++ b/code/WorkInProgress/computer3/lapvend.dm
@@ -174,8 +174,9 @@
vendmode = 1
if("cancel")
- relap.loc = src.loc
- relap = null
+ if(relap)
+ relap.loc = src.loc
+ relap = null
vendmode = 0
src.updateUsrDialog()
diff --git a/code/__HELPERS/lists.dm b/code/__HELPERS/lists.dm
index 282224d567..39c1f23d6b 100644
--- a/code/__HELPERS/lists.dm
+++ b/code/__HELPERS/lists.dm
@@ -581,3 +581,6 @@ datum/proc/dd_SortValue()
/obj/machinery/dd_SortValue()
return "[sanitize(name)]"
+
+/obj/machinery/camera/dd_SortValue()
+ return "[c_tag]"
diff --git a/code/__HELPERS/maths.dm b/code/__HELPERS/maths.dm
index a0f4f9cb32..d9bbc18ece 100644
--- a/code/__HELPERS/maths.dm
+++ b/code/__HELPERS/maths.dm
@@ -1,3 +1,5 @@
+#define RAND_F(L, H) (rand()*(H-L) + L)
+
// Credits to Nickr5 for the useful procs I've taken from his library resource.
var/const/E = 2.71828183
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index ac400269b5..6e7e828be3 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -42,15 +42,15 @@
index = findtext(t, char)
return t
-/proc/readd_quotes(var/t)
- var/list/repl_chars = list(""" = "\"")
- for(var/char in repl_chars)
- var/index = findtext(t, char)
- while(index)
- t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+5)
- index = findtext(t, char)
- return t
-
+/proc/readd_quotes(var/t)
+ var/list/repl_chars = list(""" = "\"")
+ for(var/char in repl_chars)
+ var/index = findtext(t, char)
+ while(index)
+ t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+5)
+ index = findtext(t, char)
+ return t
+
//Runs byond's sanitization proc along-side sanitize_simple
/proc/sanitize(var/t,var/list/repl_chars = null)
return html_encode(sanitize_simple(t,repl_chars))
@@ -83,7 +83,7 @@
/proc/stripped_input(var/mob/user, var/message = "", var/title = "", var/default = "", var/max_length=MAX_MESSAGE_LEN)
var/name = input(user, message, title, default)
return strip_html_properly(name, max_length)
-
+
// Used to get a trimmed, properly sanitized input, of max_length
/proc/trim_strip_input(var/mob/user, var/message = "", var/title = "", var/default = "", var/max_length=MAX_MESSAGE_LEN)
return trim(stripped_input(user, message, title, default, max_length))
@@ -326,7 +326,7 @@ proc/TextPreview(var/string,var/len=40)
else
return string
else
- return "[copytext(string, 1, 37)]..."
+ return "[copytext(string, 1, 37)]..."
//This proc strips html properly, but it's not lazy like the other procs.
//This means that it doesn't just remove < and > and call it a day.
@@ -342,7 +342,7 @@ proc/TextPreview(var/string,var/len=40)
input = copytext(input, 1, opentag) + copytext(input, (closetag + 1))
if(max_length)
input = copytext(input,1,max_length)
- return input
+ return sanitize(input)
/proc/trim_strip_html_properly(var/input, var/max_length = MAX_MESSAGE_LEN)
return trim(strip_html_properly(input, max_length))
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 365865543f..a81c6f30fa 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -46,7 +46,11 @@
playsound(loc, hitsound, 50, 1, -1)
return hit
else
- user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!")
+ if(attack_verb.len)
+ user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!")
+ else
+ user.visible_message("[M] has been attacked with [src] by [user]!")
+
if (hitsound)
playsound(loc, hitsound, 50, 1, -1)
switch(damtype)
diff --git a/code/controllers/communications.dm b/code/controllers/communications.dm
index a0d9067038..b4b0eb4393 100644
--- a/code/controllers/communications.dm
+++ b/code/controllers/communications.dm
@@ -307,7 +307,7 @@ var/global/datum/controller/radio/radio_controller
//1 = radio transmission
//2 = subspace transmission
- var/data = list()
+ var/list/data = list()
var/encryption
var/frequency = 0
diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index e666a03653..e3c9ff8c86 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -866,6 +866,7 @@ client
return
var/new_organ = input("Please choose an organ to add.","Organ",null) as null|anything in typesof(/datum/organ/internal)-/datum/organ/internal
+ if(!new_organ) return
if(!M)
usr << "Mob doesn't exist anymore"
diff --git a/code/datums/mind.dm b/code/datums/mind.dm
index a92712af50..5ac4ca53dd 100644
--- a/code/datums/mind.dm
+++ b/code/datums/mind.dm
@@ -119,7 +119,7 @@ datum/mind
"cult",
"wizard",
"changeling",
- "nuclear",
+ "mercenary",
"traitor", // "traitorchan",
"monkey",
"malfunction",
@@ -217,23 +217,23 @@ datum/mind
sections["changeling"] = text
/** NUCLEAR ***/
- text = "nuclear"
- if (ticker.mode.config_tag=="nuclear")
+ text = "mercenary"
+ if (ticker.mode.config_tag=="mercenary")
text = uppertext(text)
text = "[text]: "
if (src in ticker.mode.syndicates)
- text += "OPERATIVE|nanotrasen"
- text += "
To shuttle, undress, dress up."
+ text += "OPERATIVE|nanotrasen"
+ text += "
To shuttle, undress, dress up."
var/code
for (var/obj/machinery/nuclearbomb/bombue in machines)
if (length(bombue.r_code) <= 5 && bombue.r_code != "LOLNO" && bombue.r_code != "ADMIN")
code = bombue.r_code
break
if (code)
- text += " Code is [code]. tell the code."
+ text += " Code is [code]. tell the code."
else
- text += "operative|NANOTRASEN"
- sections["nuclear"] = text
+ text += "operative|NANOTRASEN"
+ sections["mercenary"] = text
/** TRAITOR ***/
text = "traitor"
@@ -382,7 +382,7 @@ datum/mind
if(!def_value)//If it's a custom objective, it will be an empty string.
def_value = "custom"
- var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "nuclear", "capture", "absorb", "custom")
+ var/new_obj_type = input("Select objective type:", "Objective type", def_value) as null|anything in list("assassinate", "debrain", "protect", "prevent", "harm", "brig", "hijack", "escape", "survive", "steal", "download", "mercenary", "capture", "absorb", "custom")
if (!new_obj_type) return
var/datum/objective/new_objective = null
@@ -436,7 +436,7 @@ datum/mind
new_objective = new /datum/objective/survive
new_objective.owner = src
- if ("nuclear")
+ if ("mercenary")
new_objective = new /datum/objective/nuclear
new_objective.owner = src
@@ -748,12 +748,12 @@ datum/mind
current.UpdateAppearance()
domutcheck(current, null)
- else if (href_list["nuclear"])
+ else if (href_list["mercenary"])
var/mob/living/carbon/human/H = current
current.hud_updateflag |= (1 << SPECIALROLE_HUD)
- switch(href_list["nuclear"])
+ switch(href_list["mercenary"])
if("clear")
if(src in ticker.mode.syndicates)
ticker.mode.syndicates -= src
@@ -763,7 +763,7 @@ datum/mind
objectives-=O
current << "\red You have been brainwashed! You are no longer an operative!"
log_admin("[key_name_admin(usr)] has de-merc'd [current].")
- if("nuclear")
+ if("mercenary")
if(!(src in ticker.mode.syndicates))
ticker.mode.syndicates += src
ticker.mode.update_synd_icons_added(src)
diff --git a/code/defines/obj.dm b/code/defines/obj.dm
index 0c971df260..e105d67a5b 100644
--- a/code/defines/obj.dm
+++ b/code/defines/obj.dm
@@ -173,10 +173,11 @@ using /obj/effect/datacore/proc/manifest_inject( ), or manifest_insert( )
*/
var/global/list/PDA_Manifest = list()
+var/global/ManifestJSON
/obj/effect/datacore/proc/get_manifest_json()
if(PDA_Manifest.len)
- return PDA_Manifest
+ return
var/heads[0]
var/sec[0]
var/eng[0]
@@ -247,7 +248,8 @@ var/global/list/PDA_Manifest = list()
"bot" = bot,\
"misc" = misc\
)
- return PDA_Manifest
+ ManifestJSON = list2json(PDA_Manifest)
+ return
@@ -302,7 +304,7 @@ var/global/list/PDA_Manifest = list()
throwforce = 0.0
throw_speed = 1
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
user.drop_item()
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 0921cfabd9..ab7b57cb42 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -3,7 +3,7 @@
desc = "Should anything ever go wrong..."
icon = 'icons/obj/items.dmi'
icon_state = "red_phone"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 3.0
throwforce = 2.0
throw_speed = 1
@@ -22,7 +22,6 @@
anchored = 0.0
var/stored_matter = 0
var/mode = 1
- flags = TABLEPASS
w_class = 3.0
/obj/item/weapon/bananapeel
@@ -92,7 +91,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "cane"
item_state = "stick"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -139,7 +138,7 @@
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "handcuff"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 0
w_class = 3.0
origin_tech = "materials=1"
@@ -198,7 +197,6 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS
attack_verb = list("warned", "cautioned", "smashed")
/obj/item/weapon/caution/cone
@@ -217,7 +215,7 @@
var/traitor_frequency = 0.0
var/mob/currentUser = null
var/obj/item/device/radio/origradio = null
- flags = FPRINT | TABLEPASS | CONDUCT | ONBELT
+ flags = CONDUCT | ONBELT
w_class = 2.0
item_state = "radio"
throw_speed = 4
@@ -235,7 +233,7 @@
var/selfdestruct = 0.0
var/traitor_frequency = 0.0
var/obj/item/device/radio/origradio = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "radio"
throwforce = 5
@@ -255,7 +253,7 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("bludgeoned", "whacked", "disciplined")
/obj/item/weapon/staff/broom
@@ -282,7 +280,7 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
/obj/item/weapon/wire
desc = "This is just a simple piece of regular insulated wire."
@@ -304,7 +302,7 @@
icon_state = "std_module"
w_class = 2.0
item_state = "electronic"
- flags = FPRINT|TABLEPASS|CONDUCT
+ flags = CONDUCT
var/mtype = 1 // 1=electronic 2=hardware
/obj/item/weapon/module/card_reader
@@ -385,7 +383,7 @@
w_class = 1
throwforce = 2
var/cigarcount = 6
- flags = ONBELT | TABLEPASS */
+ flags = ONBELT */
/obj/item/weapon/pai_cable
desc = "A flexible coated cable with a universal jack on one end."
diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm
index 44d79a3893..abf4c97dd3 100644
--- a/code/defines/procs/admin.dm
+++ b/code/defines/procs/admin.dm
@@ -1,7 +1,7 @@
proc/log_and_message_admins(var/message as text)
- log_admin("[usr]([usr.ckey]) " + message)
- message_admins("[usr]([usr.ckey]) " + message)
+ log_admin(usr ? "[usr]([usr.ckey]) [message]" : "EVENT [message]")
+ message_admins(usr ? "[usr]([usr.ckey]) [message]" : "EVENT [message]")
proc/admin_log_and_message_admins(var/message as text)
- log_admin("[key_name(usr)] " + message)
- message_admins("[key_name_admin(usr)] " + message, 1)
\ No newline at end of file
+ log_admin(usr ? "[key_name(usr)] [message]" : "EVENT [message]")
+ message_admins(usr ? "[key_name(usr)] [message]" : "EVENT [message]", 1)
diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm
index 04afb6c63e..be678b8397 100644
--- a/code/defines/procs/hud.dm
+++ b/code/defines/procs/hud.dm
@@ -12,7 +12,7 @@ proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
if(P.Mob.see_invisible < patient.invisibility)
continue
- if(!(local_scanner || hassensorlevel(P, SUIT_SENSOR_VITAL)))
+ if(!(local_scanner || hassensorlevel(patient, SUIT_SENSOR_VITAL)))
continue
P.Client.images += patient.hud_list[HEALTH_HUD]
diff --git a/code/defines/procs/radio.dm b/code/defines/procs/radio.dm
index 0cbd009076..1e0e045928 100644
--- a/code/defines/procs/radio.dm
+++ b/code/defines/procs/radio.dm
@@ -47,7 +47,7 @@
/proc/get_receiver_reception(var/receiver, var/datum/signal/signal)
if(receiver && check_signal(signal))
var/turf/pos = get_turf(receiver)
- if(pos.z in signal.data["level"])
+ if(pos && (pos.z in signal.data["level"]))
return TELECOMMS_RECEPTION_RECEIVER
return TELECOMMS_RECEPTION_NONE
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index c793ecb857..8f7a3556ac 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -349,6 +349,7 @@ var/list/ghostteleportlocs = list()
name = "\improper Centcom"
icon_state = "centcom"
requires_power = 0
+ unlimited_power = 1
/area/centcom/control
name = "\improper Centcom Control"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 30f04da4b1..df288f2cc4 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -1,7 +1,7 @@
/atom
layer = 2
var/level = 2
- var/flags = FPRINT
+ var/flags = 0
var/list/fingerprints
var/list/fingerprintshidden
var/fingerprintslast = null
@@ -195,7 +195,10 @@ its easier to just keep the beam vertical.
f_name = "some "
else
f_name = "a "
- f_name += "blood-stained [name][infix]!"
+ if(blood_color != "#030303")
+ f_name += "blood-stained [name][infix]!"
+ else
+ f_name += "oil-stained [name][infix]."
user << "\icon[src] That's [f_name] [suffix]"
@@ -231,8 +234,6 @@ its easier to just keep the beam vertical.
/atom/proc/add_hiddenprint(mob/living/M as mob)
if(isnull(M)) return
if(isnull(M.key)) return
- if (!( src.flags ) & FPRINT)
- return
if (ishuman(M))
var/mob/living/carbon/human/H = M
if (!istype(H.dna, /datum/dna))
@@ -257,8 +258,6 @@ its easier to just keep the beam vertical.
if(isnull(M)) return
if(isAI(M)) return
if(isnull(M.key)) return
- if (!( src.flags ) & FPRINT)
- return
if (ishuman(M))
//Add the list if it does not exist.
if(!fingerprintshidden)
@@ -383,7 +382,7 @@ its easier to just keep the beam vertical.
//returns 1 if made bloody, returns 0 otherwise
/atom/proc/add_blood(mob/living/carbon/human/M as mob)
- if((flags & NOBLOODY) || !(flags & FPRINT))
+ if(flags & NOBLOODY)
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.
diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm
index f6aa21e14d..51f77c2cc0 100644
--- a/code/game/gamemodes/cult/cult_items.dm
+++ b/code/game/gamemodes/cult/cult_items.dm
@@ -3,7 +3,6 @@
desc = "An arcane weapon wielded by the followers of Nar-Sie"
icon_state = "cultblade"
item_state = "cultblade"
- flags = FPRINT | TABLEPASS
w_class = 4
force = 30
throwforce = 10
@@ -34,7 +33,7 @@
icon_state = "culthood"
desc = "A hood worn by the followers of Nar-Sie."
flags_inv = HIDEFACE
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
body_parts_covered = HEAD|EYES
armor = list(melee = 30, bullet = 10, laser = 5,energy = 5, bomb = 0, bio = 0, rad = 0)
cold_protection = HEAD
@@ -55,7 +54,6 @@
desc = "A set of armored robes worn by the followers of Nar-Sie"
icon_state = "cultrobes"
item_state = "cultrobes"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
@@ -68,7 +66,7 @@
item_state = "magus"
desc = "A helm worn by the followers of Nar-Sie."
flags_inv = HIDEFACE
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
armor = list(melee = 30, bullet = 30, laser = 30,energy = 20, bomb = 0, bio = 0, rad = 0)
siemens_coefficient = 0
@@ -78,7 +76,6 @@
desc = "A set of armored robes worn by the followers of Nar-Sie"
icon_state = "magusred"
item_state = "magusred"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/weapon/book/tome,/obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0)
diff --git a/code/game/gamemodes/cult/ritual.dm b/code/game/gamemodes/cult/ritual.dm
index a3829207fe..e3ac71b77c 100644
--- a/code/game/gamemodes/cult/ritual.dm
+++ b/code/game/gamemodes/cult/ritual.dm
@@ -169,7 +169,6 @@ var/engwords = list("travel", "blood", "join", "hell", "destroy", "technology",
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS
unique = 1
var/notedat = ""
var/tomedat = ""
diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm
index 4a0712c712..9964a37813 100644
--- a/code/game/gamemodes/epidemic/epidemic.dm
+++ b/code/game/gamemodes/epidemic/epidemic.dm
@@ -113,7 +113,7 @@
world.Reboot()
var/datum/disease2/disease/lethal = new
- lethal.makerandom(1)
+ lethal.makerandom(3)
lethal.infectionchance = 5
// the more doctors, the more will be infected
diff --git a/code/game/gamemodes/events/holidays/Christmas.dm b/code/game/gamemodes/events/holidays/Christmas.dm
index ba1c2be13c..7ca6678902 100644
--- a/code/game/gamemodes/events/holidays/Christmas.dm
+++ b/code/game/gamemodes/events/holidays/Christmas.dm
@@ -58,7 +58,6 @@
icon_state = "xmashat"
desc = "A crappy paper hat that you are REQUIRED to wear."
flags_inv = 0
- flags = FPRINT|TABLEPASS
body_parts_covered = 0
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm
index c9bce4aca9..195b9ff5b9 100644
--- a/code/game/gamemodes/events/space_ninja.dm
+++ b/code/game/gamemodes/events/space_ninja.dm
@@ -116,7 +116,7 @@ var/ninja_confirmed_selection = 0
var/commando_list[] = list()//Commandos.
//We want the ninja to appear only in certain modes.
-// var/acceptable_modes_list[] = list("traitor","revolution","cult","wizard","changeling","traitorchan","nuclear","malfunction","monkey") // Commented out for both testing and ninjas
+// var/acceptable_modes_list[] = list("traitor","revolution","cult","wizard","changeling","traitorchan","mercenary","malfunction","monkey") // Commented out for both testing and ninjas
// if(!(current_mode.config_tag in acceptable_modes_list))
// return
diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm
index e90b65a333..fca51edf83 100644
--- a/code/game/gamemodes/game_mode.dm
+++ b/code/game/gamemodes/game_mode.dm
@@ -151,8 +151,6 @@
var/list/area/escape_locations = list(/area/shuttle/escape/centcom, /area/shuttle/escape_pod1/centcom, /area/shuttle/escape_pod2/centcom, /area/shuttle/escape_pod3/centcom, /area/shuttle/escape_pod5/centcom)
- var/pltext = "Player list:"
-
for(var/mob/M in player_list)
if(M.client)
clients++
@@ -187,7 +185,6 @@
text += " ([escaped_total>0 ? escaped_total : "none"] [emergency_shuttle.evac ? "escaped" : "transferred"]) and [ghosts] ghosts.
"
else
text += "There were no survivors ([ghosts] ghosts)."
- text += "
" + pltext //print player list after the general info
world << text
if(clients > 0)
@@ -553,7 +550,7 @@ proc/get_nt_opposed()
var/list/refined_log = new()
for(var/datum/uplink_item/UI in H.purchase_log)
var/obj/I = new UI.path
- refined_log.Add("[H.purchase_log[UI]]x\icon[I][I.name]")
+ refined_log.Add("[H.purchase_log[UI]]x\icon[I][UI.name]")
del(I)
purchases = english_list(refined_log, nothing_text = "")
if(uplink_true)
diff --git a/code/game/gamemodes/mutiny/emergency_authentication_device.dm b/code/game/gamemodes/mutiny/emergency_authentication_device.dm
index bedd67e64c..028c4113cc 100644
--- a/code/game/gamemodes/mutiny/emergency_authentication_device.dm
+++ b/code/game/gamemodes/mutiny/emergency_authentication_device.dm
@@ -11,7 +11,6 @@
var/secondary_key
var/activated = 0
- flags = FPRINT
use_power = 0
New(loc, mode)
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 8fd46fc897..b2e54da0d9 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -11,7 +11,7 @@ var/global/list/turf/synd_spawn = list()
/datum/game_mode/nuclear
name = "mercenary"
- config_tag = "nuclear"
+ config_tag = "mercenary"
required_players = 15
required_players_secret = 25 // 25 players - 5 players to be the nuke ops = 20 players remaining
required_enemies = 1
@@ -175,7 +175,7 @@ var/global/list/turf/synd_spawn = list()
var/obj/item/weapon/paper/P = new
P.info = "The nuclear authorization code is: [nuke_code]"
P.name = "nuclear bomb code"
- if (ticker.mode.config_tag=="nuclear")
+ if (ticker.mode.config_tag=="mercenary")
P.loc = code_spawn.loc
else
var/mob/living/carbon/human/H = synd_mind.current
diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm
index ef78dd4286..e73fbf6880 100644
--- a/code/game/gamemodes/nuclear/nuclearbomb.dm
+++ b/code/game/gamemodes/nuclear/nuclearbomb.dm
@@ -23,7 +23,6 @@ var/bomb_set
var/timing_wire
var/removal_stage = 0 // 0 is no removal, 1 is covers removed, 2 is covers open,
// 3 is sealant open, 4 is unwrenched, 5 is removed from bolts.
- flags = FPRINT
use_power = 0
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 50ae7b9fc1..d26f1a0789 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -2,7 +2,7 @@
name = "pinpointer"
icon = 'icons/obj/device.dmi'
icon_state = "pinoff"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
item_state = "electronic"
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 9c1b30bc89..bea6029b46 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -91,7 +91,7 @@
//REMOTEVIEWBLOCK = getAssignedBlock("REMOTEVIEW", numsToAssign, DNA_HARDER_BOUNDS)
//REGENERATEBLOCK = getAssignedBlock("REGENERATE", numsToAssign, DNA_HARDER_BOUNDS)
//INCREASERUNBLOCK = getAssignedBlock("INCREASERUN", numsToAssign, DNA_HARDER_BOUNDS)
- //REMOTETALKBLOCK = getAssignedBlock("REMOTETALK", numsToAssign, DNA_HARDER_BOUNDS)
+ REMOTETALKBLOCK = getAssignedBlock("REMOTETALK", numsToAssign, DNA_HARDER_BOUNDS)
//MORPHBLOCK = getAssignedBlock("MORPH", numsToAssign, DNA_HARDER_BOUNDS)
//COLDBLOCK = getAssignedBlock("COLD", numsToAssign)
//HALLUCINATIONBLOCK = getAssignedBlock("HALLUCINATION", numsToAssign)
diff --git a/code/game/gamemodes/wizard/artifact.dm b/code/game/gamemodes/wizard/artifact.dm
index 0ce1f94d12..15ac80ced4 100644
--- a/code/game/gamemodes/wizard/artifact.dm
+++ b/code/game/gamemodes/wizard/artifact.dm
@@ -6,7 +6,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "render"
item_state = "render"
- flags = FPRINT | TABLEPASS
force = 15
throwforce = 10
w_class = 3
diff --git a/code/game/gamemodes/wizard/soulstone.dm b/code/game/gamemodes/wizard/soulstone.dm
index 12360194d1..678ce72582 100644
--- a/code/game/gamemodes/wizard/soulstone.dm
+++ b/code/game/gamemodes/wizard/soulstone.dm
@@ -5,7 +5,6 @@
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
slot_flags = SLOT_BELT
origin_tech = "bluespace=4;materials=4"
var/imprinted = "empty"
@@ -88,7 +87,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "construct"
desc = "A wicked machine used by those skilled in magical arts. It is inactive"
- flags = FPRINT | TABLEPASS
/obj/structure/constructshell/attackby(obj/item/O as obj, mob/user as mob)
if(istype(O, /obj/item/device/soulstone))
diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm
index d490e75dc6..716045a721 100644
--- a/code/game/gamemodes/wizard/spellbook.dm
+++ b/code/game/gamemodes/wizard/spellbook.dm
@@ -6,7 +6,6 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS
var/uses = 5
var/temp = null
var/max_uses = 5
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index 3819c2d9d5..13dd8c75e6 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -1005,7 +1005,7 @@ Code shamelessly copied from apc_frame
desc = "Used for building Air Alarms"
icon = 'icons/obj/monitors.dmi'
icon_state = "alarm_bitem"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/alarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
@@ -1340,7 +1340,7 @@ Code shamelessly copied from apc_frame
desc = "Used for building Fire Alarms"
icon = 'icons/obj/monitors.dmi'
icon_state = "fire_bitem"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/firealarm_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/wrench))
diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm
index 3e91d70f6c..4d96320518 100644
--- a/code/game/machinery/atmoalter/canister.dm
+++ b/code/game/machinery/atmoalter/canister.dm
@@ -4,7 +4,7 @@
icon_state = "yellow"
density = 1
var/health = 100.0
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
var/valve_open = 0
var/release_pressure = ONE_ATMOSPHERE
diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm
index 53b95c712c..7b44e443c4 100644
--- a/code/game/machinery/autolathe.dm
+++ b/code/game/machinery/autolathe.dm
@@ -21,10 +21,16 @@
var/datum/wires/autolathe/wires = null
+/obj/machinery/autolathe/proc/update_recipe_list()
+ if(!machine_recipes)
+ machine_recipes = autolathe_recipes
+
/obj/machinery/autolathe/interact(mob/user as mob)
+ update_recipe_list()
+
if(..() || (disabled && !panel_open))
- user << "\red \The [src] is disabled!"
+ user << "\The [src] is disabled!"
return
if (shocked)
@@ -97,7 +103,7 @@
return
if (busy)
- user << "\red \The [src] is busy. Please wait for completion of previous operation."
+ user << "\The [src] is busy. Please wait for completion of previous operation."
return
if(istype(O, /obj/item/weapon/screwdriver))
@@ -157,7 +163,7 @@
mass_per_sheet += eating.matter[material]
if(!filltype)
- user << "\red \The [src] is full. Please remove material from the autolathe in order to insert more."
+ user << "\The [src] is full. Please remove material from the autolathe in order to insert more."
return
else if(filltype == 1)
user << "You fill \the [src] to capacity with \the [eating]."
@@ -189,7 +195,7 @@
add_fingerprint(usr)
if(busy)
- usr << "\red The autolathe is busy. Please wait for completion of previous operation."
+ usr << "The autolathe is busy. Please wait for completion of previous operation."
return
if(href_list["change_category"])
@@ -262,11 +268,6 @@
component_parts += new /obj/item/weapon/stock_parts/console_screen(src)
RefreshParts()
-
-/obj/machinery/autolathe/initialize()
- ..()
- machine_recipes = autolathe_recipes
-
//Updates overall lathe storage size.
/obj/machinery/autolathe/RefreshParts()
..()
diff --git a/code/game/machinery/bees_items.dm b/code/game/machinery/bees_items.dm
index e02a0a1a23..486b46d33c 100644
--- a/code/game/machinery/bees_items.dm
+++ b/code/game/machinery/bees_items.dm
@@ -65,7 +65,6 @@
name = "bottle of BeezEez"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle17"
- flags = FPRINT | TABLEPASS
New()
src.pixel_x = rand(-5.0, 5)
src.pixel_y = rand(-5.0, 5)
diff --git a/code/game/machinery/bots/cleanbot.dm b/code/game/machinery/bots/cleanbot.dm
index b913119a57..30f6dfaa8c 100644
--- a/code/game/machinery/bots/cleanbot.dm
+++ b/code/game/machinery/bots/cleanbot.dm
@@ -9,7 +9,6 @@
throw_speed = 2
throw_range = 5
w_class = 3.0
- flags = TABLEPASS
var/created_name = "Cleanbot"
diff --git a/code/game/machinery/bots/floorbot.dm b/code/game/machinery/bots/floorbot.dm
index 0164199daa..54c8390234 100644
--- a/code/game/machinery/bots/floorbot.dm
+++ b/code/game/machinery/bots/floorbot.dm
@@ -9,7 +9,6 @@
throw_speed = 2
throw_range = 5
w_class = 3.0
- flags = TABLEPASS
var/created_name = "Floorbot"
/obj/item/weapon/toolbox_tiles_sensor
@@ -22,7 +21,6 @@
throw_speed = 2
throw_range = 5
w_class = 3.0
- flags = TABLEPASS
var/created_name = "Floorbot"
//Floorbot
diff --git a/code/game/machinery/bots/medbot.dm b/code/game/machinery/bots/medbot.dm
index 6d3842f879..65a40289d0 100644
--- a/code/game/machinery/bots/medbot.dm
+++ b/code/game/machinery/bots/medbot.dm
@@ -281,9 +281,6 @@
src.speak(message)
src.visible_message("[src] points at [C.name]!")
src.last_newpatient_speak = world.time
- if(declare_treatment)
- var/area/location = get_area(src)
- broadcast_medical_hud_message("[src.name] is treating [C] in [location]", src)
break
else
continue
@@ -438,6 +435,10 @@
src.patient.reagents.add_reagent(reagent_id,src.injection_amount)
visible_message("\red [src] injects [src.patient] with the syringe!")
+ if(declare_treatment)
+ var/area/location = get_area(src)
+ broadcast_medical_hud_message("[src.name] is treating [C] in [location]", src)
+
src.icon_state = "medibot[src.on]"
src.currently_healing = 0
return
diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm
index 8fe3387467..d631ca46df 100644
--- a/code/game/machinery/camera/camera.dm
+++ b/code/game/machinery/camera/camera.dm
@@ -36,6 +36,9 @@
wires = new(src)
assembly = new(src)
assembly.state = 4
+
+ invalidateCameraCache()
+
/* // Use this to look for cameras that have the same c_tag.
for(var/obj/machinery/camera/C in cameranet.cameras)
var/list/tempnetwork = C.network&src.network
@@ -61,6 +64,7 @@
/obj/machinery/camera/emp_act(severity)
if(!isEmpProof())
if(prob(100/severity))
+ invalidateCameraCache()
stat |= EMPED
SetLuminosity(0)
kick_viewers()
@@ -71,7 +75,7 @@
stat &= ~EMPED
cancelCameraAlarm()
update_icon()
-
+ invalidateCameraCache()
..()
/obj/machinery/camera/bullet_act(var/obj/item/projectile/P)
@@ -118,7 +122,7 @@
destroy()
/obj/machinery/camera/attackby(obj/W as obj, mob/living/user as mob)
-
+ invalidateCameraCache()
// DECONSTRUCTION
if(isscrewdriver(W))
//user << "You start to [panel_open ? "close" : "open"] the camera's panel."
@@ -199,6 +203,7 @@
//legacy support, if choice is != 1 then just kick viewers without changing status
kick_viewers()
else
+ invalidateCameraCache()
set_status( !src.status )
if (!(src.status))
visible_message("\red [user] has deactivated [src]!")
@@ -218,6 +223,7 @@
//Used when someone breaks a camera
/obj/machinery/camera/proc/destroy()
+ invalidateCameraCache()
stat |= BROKEN
kick_viewers()
triggerCameraAlarm()
@@ -232,6 +238,7 @@
/obj/machinery/camera/proc/set_status(var/newstatus)
if (status != newstatus)
status = newstatus
+ invalidateCameraCache()
// now disconnect anyone using the camera
//Apparently, this will disconnect anyone even if the camera was re-activated.
//I guess that doesn't matter since they couldn't use it anyway?
diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm
index d55e3bec84..824f1ba90b 100644
--- a/code/game/machinery/camera/tracking.dm
+++ b/code/game/machinery/camera/tracking.dm
@@ -12,15 +12,11 @@
if(src.stat == 2)
return
- var/list/L = list()
- for (var/obj/machinery/camera/C in cameranet.cameras)
- L.Add(C)
-
- camera_sort(L)
+ cameranet.process_sort()
var/list/T = list()
T["Cancel"] = "Cancel"
- for (var/obj/machinery/camera/C in L)
+ for (var/obj/machinery/camera/C in cameranet.cameras)
var/list/tempnetwork = C.network&src.network
if (tempnetwork.len)
T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
@@ -226,7 +222,7 @@ mob/living/proc/near_camera()
// Don't detect mobs on Centcom. Since the wizard den is on Centcomm, we only need this.
if(InvalidPlayerTurf(get_turf(src)))
return TRACKING_TERMINATE
- if(invisibility >= INVISIBILITY_LEVEL_ONE)//cloaked
+ if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked
return TRACKING_TERMINATE
if(digitalcamo)
return TRACKING_TERMINATE
diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm
index abcdb51a51..e6075cb5a9 100644
--- a/code/game/machinery/computer/HolodeckControl.dm
+++ b/code/game/machinery/computer/HolodeckControl.dm
@@ -418,7 +418,6 @@ var/global/list/holodeck_programs = list(
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1.0
- flags = FPRINT
pressure_resistance = 15
@@ -454,7 +453,7 @@ var/global/list/holodeck_programs = list(
throw_range = 5
throwforce = 0
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
+ flags = NOSHIELD | NOBLOODY
var/active = 0
/obj/item/weapon/holo/esword/green
diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm
index c2899d6186..273ee679a9 100644
--- a/code/game/machinery/computer/camera.dm
+++ b/code/game/machinery/computer/camera.dm
@@ -1,5 +1,8 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
+/proc/invalidateCameraCache()
+ for(var/obj/machinery/computer/security/s in world)
+ s.camera_cache = null
/obj/machinery/computer/security
name = "security camera monitor"
@@ -10,6 +13,7 @@
var/list/network = list("SS13")
var/mapping = 0//For the overview file, interesting bit of code.
circuit = /obj/item/weapon/circuitboard/security
+ var/camera_cache = null
attack_ai(var/mob/user as mob)
return attack_hand(user)
@@ -31,29 +35,45 @@
data["current"] = null
- var/list/L = list()
- for (var/obj/machinery/camera/C in cameranet.cameras)
- if(can_access_camera(C))
- L.Add(C)
+ if(isnull(camera_cache))
+ cameranet.process_sort()
- camera_sort(L)
+ var/cameras[0]
+ for(var/obj/machinery/camera/C in cameranet.cameras)
+ if(!can_access_camera(C))
+ continue
- var/cameras[0]
- for(var/obj/machinery/camera/C in L)
- var/cam[0]
- cam["name"] = C.c_tag
- cam["deact"] = !C.can_use()
- cam["camera"] = "\ref[C]"
- cam["x"] = C.x
- cam["y"] = C.y
- cam["z"] = C.z
+ var/cam[0]
+ cam["name"] = sanitize(C.c_tag)
+ cam["deact"] = !C.can_use()
+ cam["camera"] = "\ref[C]"
+ cam["x"] = C.x
+ cam["y"] = C.y
+ cam["z"] = C.z
- cameras[++cameras.len] = cam
+ cameras[++cameras.len] = cam
+
+ if(C == current)
+ data["current"] = cam
+
+ var/list/camera_list = list("cameras" = cameras)
+ camera_cache=list2json(camera_list)
+
+ else
+ if(current)
+ var/cam[0]
+ cam["name"] = current.c_tag
+ cam["deact"] = !current.can_use()
+ cam["camera"] = "\ref[current]"
+ cam["x"] = current.x
+ cam["y"] = current.y
+ cam["z"] = current.z
- if(C == current)
data["current"] = cam
- data["cameras"] = cameras
+
+ if(ui)
+ ui.load_cached_data(camera_cache)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
@@ -64,6 +84,7 @@
// adding a template with the key "mapHeader" replaces the map header content
ui.add_template("mapHeader", "sec_camera_map_header.tmpl")
+ ui.load_cached_data(camera_cache)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index f187957f5b..5285235fbf 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -496,8 +496,14 @@
return
emergency_shuttle.call_transfer()
- log_game("[key_name(user)] has called the shuttle.")
- message_admins("[key_name_admin(user)] has called the shuttle.", 1)
+
+ //delay events in case of an autotransfer
+ if (isnull(user))
+ event_manager.delay_events(EVENT_LEVEL_MODERATE, 9000) //15 minutes
+ event_manager.delay_events(EVENT_LEVEL_MAJOR, 9000)
+
+ log_game("[user? key_name(user) : "Autotransfer"] has called the shuttle.")
+ message_admins("[user? key_name_admin(user) : "Autotransfer"] has called the shuttle.", 1)
return
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8d166b4dae..62e89cf03d 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -876,6 +876,7 @@ About the new airlock wires panel:
src.welded = 1
else
src.welded = null
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
src.update_icon()
return
else
@@ -904,7 +905,7 @@ About the new airlock wires panel:
beingcrowbarred = 1 //derp, Agouri
else
beingcrowbarred = 0
- if( beingcrowbarred && src.p_open && (operating == -1 || (src.locked && welded && !src.arePowerSystemsOn() && BROKEN) || (density && welded && operating != 1 && !src.arePowerSystemsOn() && !src.locked)) )
+ if( beingcrowbarred && src.p_open && (operating < 0 || (!operating && welded && !src.arePowerSystemsOn() && density && (!src.locked || (stat & BROKEN)))) )
playsound(src.loc, 'sound/items/Crowbar.ogg', 100, 1)
user.visible_message("[user] removes the electronics from the airlock assembly.", "You start to remove electronics from the airlock assembly.")
if(do_after(user,40))
@@ -924,7 +925,7 @@ About the new airlock wires panel:
da.created_name = src.name
da.update_state()
- if(operating == -1)
+ if(operating == -1 || (stat & BROKEN))
new /obj/item/weapon/circuitboard/broken(src.loc)
operating = 0
else
diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm
index 482be83b3d..1749fc1b4a 100644
--- a/code/game/machinery/doors/door.dm
+++ b/code/game/machinery/doors/door.dm
@@ -190,7 +190,7 @@
/obj/machinery/door/attackby(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/device/detective_scanner))
return
- if(src.operating || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
+ if(src.operating > 0 || isrobot(user)) return //borgs can't attack doors open because it conflicts with their AI-like interaction with them.
src.add_fingerprint(user)
if(!Adjacent(user))
user = null
@@ -252,13 +252,6 @@
repairing = null
return
- if(src.density && (operable() && istype(I, /obj/item/weapon/card/emag)))
- flick("door_spark", src)
- sleep(6)
- open()
- operating = -1
- return 1
-
//psa to whoever coded this, there are plenty of objects that need to call attack() on doors without bludgeoning them.
if(src.density && istype(I, /obj/item/weapon) && user.a_intent == "hurt" && !istype(I, /obj/item/weapon/card))
var/obj/item/weapon/W = I
@@ -271,6 +264,15 @@
take_damage(W.force)
return
+ if(src.operating) return
+
+ if(src.density && (operable() && istype(I, /obj/item/weapon/card/emag)))
+ flick("door_spark", src)
+ sleep(6)
+ open()
+ operating = -1
+ return 1
+
if(src.allowed(user) && operable())
if(src.density)
open()
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 264fecbc2b..55b392feff 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -186,13 +186,14 @@
add_fingerprint(user)
if(operating)
return//Already doing something.
- if(istype(C, /obj/item/weapon/weldingtool))
+ if(istype(C, /obj/item/weapon/weldingtool) && !repairing)
var/obj/item/weapon/weldingtool/W = C
if(W.remove_fuel(0, user))
blocked = !blocked
user.visible_message("\The [user] [blocked ? "welds" : "unwelds"] \the [src] with \a [W].",\
"You [blocked ? "weld" : "unweld"] \the [src] with \the [W].",\
"You hear something being welded.")
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
update_icon()
return
@@ -203,7 +204,7 @@
update_icon()
return
- if(blocked && istype(C, /obj/item/weapon/crowbar))
+ if(blocked && istype(C, /obj/item/weapon/crowbar) && !repairing)
if(!hatch_open)
user << "You must open the maintenance hatch first!"
else
@@ -215,19 +216,24 @@
user.visible_message("[user] has removed the electronics from \the [src].",
"You have removed the electronics from [src].")
- new/obj/item/weapon/airalarm_electronics(src.loc)
+ if (stat & BROKEN)
+ new /obj/item/weapon/circuitboard/broken(src.loc)
+ else
+ new/obj/item/weapon/airalarm_electronics(src.loc)
+
var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc)
FA.anchored = 1
FA.density = 1
+ FA.wired = 1
FA.update_icon()
del(src)
return
if(blocked)
- user << "\The [src] is welded solid!"
+ user << "\The [src] is welded shut!"
return
- if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/melee/energy/blade) || istype(C,/obj/item/weapon/twohanded/fireaxe))
+ if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/twohanded/fireaxe))
if(operating)
return
@@ -262,6 +268,8 @@
spawn(0)
close()
return
+
+ return ..()
// CHECK PRESSURE
/obj/machinery/door/firedoor/process()
diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm
index 017e758ef3..435a927857 100644
--- a/code/game/machinery/doors/firedoor_assembly.dm
+++ b/code/game/machinery/doors/firedoor_assembly.dm
@@ -5,7 +5,8 @@ obj/structure/firedoor_assembly
icon_state = "door_construction"
anchored = 0
opacity = 0
- density = 0
+ density = 1
+ var/wired = 0
obj/structure/firedoor_assembly/update_icon()
if(anchored)
@@ -14,7 +15,28 @@ obj/structure/firedoor_assembly/update_icon()
icon_state = "door_construction"
obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
- if(istype(C, /obj/item/weapon/airalarm_electronics))
+ if(istype(C, /obj/item/stack/cable_coil) && !wired && anchored)
+ var/obj/item/stack/cable_coil/cable = C
+ if (cable.get_amount() < 1)
+ user << "You need one length of coil to wire \the [src]."
+ return
+ user.visible_message("[user] wires \the [src].", "You start to wire \the [src].")
+ if(do_after(user, 40) && !wired && anchored)
+ if (cable.use(1))
+ wired = 1
+ user << "You wire \the [src]."
+
+ else if(istype(C, /obj/item/weapon/wirecutters) && wired )
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
+ user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].")
+
+ if(do_after(user, 40))
+ if(!src) return
+ user << "You cut the wires!"
+ new/obj/item/stack/cable_coil(src.loc, 1)
+ wired = 0
+
+ else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired)
if(anchored)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] has inserted a circuit into \the [src]!",
@@ -26,7 +48,6 @@ obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
user << "You must secure \the [src] first!"
else if(istype(C, /obj/item/weapon/wrench))
anchored = !anchored
- density = !density
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
user.visible_message("[user] has [anchored ? "" : "un" ]secured \the [src]!",
"You have [anchored ? "" : "un" ]secured \the [src]!")
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 1a3cce2cf9..4d192c5dd9 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -230,6 +230,10 @@ Class Procs:
/mob/living/silicon/ai/canUseTopic(atom/movable/M)
if(stat)
return
+ // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras)
+ // unless it's on the same level as the object it's interacting with.
+ if(!(z == M.z || M.z in config.player_levels))
+ return
//stop AIs from leaving windows open and using then after they lose vision
//apc_override is needed here because AIs use their own APC when powerless
if(cameranet && !cameranet.checkTurfVis(get_turf(M)) && !apc_override)
diff --git a/code/game/machinery/pipe/construction.dm b/code/game/machinery/pipe/construction.dm
index baa5b9f975..024048b6de 100644
--- a/code/game/machinery/pipe/construction.dm
+++ b/code/game/machinery/pipe/construction.dm
@@ -60,7 +60,6 @@ Buildable meters
icon = 'icons/obj/pipe-item.dmi'
icon_state = "simple"
item_state = "buildpipe"
- flags = TABLEPASS|FPRINT
w_class = 3
level = 2
@@ -1133,7 +1132,6 @@ Buildable meters
icon = 'icons/obj/pipe-item.dmi'
icon_state = "meter"
item_state = "buildpipe"
- flags = TABLEPASS|FPRINT
w_class = 4
/obj/item/pipe_meter/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 603fc9fe98..3a0a9abc2a 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -154,6 +154,12 @@
user << "There seems to be a firewall preventing you from accessing this device."
return 0
+ if (get_dist(src, user) > 1 && !issilicon(user))
+ user << "You are too far away."
+ user.unset_machine()
+ user << browse(null, "window=turretid")
+ return 0
+
if(locked && !issilicon(user))
user << "Access denied."
return 0
@@ -175,7 +181,6 @@
Automatic Portable Turret Installation
Status: []
Behaviour controls are [locked ? "locked" : "unlocked"]"},
-
"[on ? "On" : "Off"]" )
if(!locked || issilicon(user))
diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm
index bc65e08eb4..ab4967d04e 100644
--- a/code/game/machinery/spaceheater.dm
+++ b/code/game/machinery/spaceheater.dm
@@ -11,8 +11,6 @@
var/set_temperature = T0C + 50 //K
var/heating_power = 40000
- flags = FPRINT
-
/obj/machinery/space_heater/New()
..()
diff --git a/code/game/machinery/status_display_ai.dm b/code/game/machinery/status_display_ai.dm
index 4077c6d56d..0b7371c1b0 100644
--- a/code/game/machinery/status_display_ai.dm
+++ b/code/game/machinery/status_display_ai.dm
@@ -43,6 +43,7 @@ var/list/ai_status_emotions = list(
if(istype(M, /obj/machinery/ai_status_display))
var/obj/machinery/ai_status_display/AISD = M
AISD.emotion = emote
+ AISD.update()
//if Friend Computer, change ALL displays
else if(istype(M, /obj/machinery/status_display))
@@ -72,6 +73,9 @@ var/list/ai_status_emotions = list(
var/emote = input("Please, select a status!", "AI Status", null, null) in ai_emotions
src.emotion = emote
+/obj/machinery/ai_status_display/process()
+ return
+
/obj/machinery/ai_status_display/proc/update()
if(mode==0) //Blank
overlays.Cut()
@@ -91,3 +95,11 @@ var/list/ai_status_emotions = list(
if(overlays.len)
overlays.Cut()
overlays += image('icons/obj/status_display.dmi', icon_state=picture_state)
+
+/obj/machinery/ai_status_display/power_change()
+ ..()
+ if(stat & NOPOWER)
+ if(overlays.len)
+ overlays.Cut()
+ else
+ update()
diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm
index aacd770d79..97e747c0db 100644
--- a/code/game/machinery/supply_display.dm
+++ b/code/game/machinery/supply_display.dm
@@ -3,7 +3,7 @@
/obj/machinery/status_display/supply_display/update()
if(!..() && mode == STATUS_DISPLAY_CUSTOM)
- message1 = "SUPPLY"
+ message1 = "CARGO"
message2 = ""
var/datum/shuttle/ferry/supply/shuttle = supply_controller.shuttle
diff --git a/code/game/machinery/telecomms/telecomunications.dm b/code/game/machinery/telecomms/telecomunications.dm
index 4d01598311..fe638408fc 100644
--- a/code/game/machinery/telecomms/telecomunications.dm
+++ b/code/game/machinery/telecomms/telecomunications.dm
@@ -64,36 +64,12 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
if(long_range_link == 0 && machine.long_range_link == 0)
continue
// If we're sending a copy, be sure to create the copy for EACH machine and paste the data
- var/datum/signal/copy = new
+ var/datum/signal/copy
if(copysig)
-
+ copy = new
copy.transmission_method = 2
copy.frequency = signal.frequency
- // Copy the main data contents! Workaround for some nasty bug where the actual array memory is copied and not its contents.
- copy.data = list(
-
- "mob" = signal.data["mob"],
- "mobtype" = signal.data["mobtype"],
- "realname" = signal.data["realname"],
- "name" = signal.data["name"],
- "job" = signal.data["job"],
- "key" = signal.data["key"],
- "vmessage" = signal.data["vmessage"],
- "vname" = signal.data["vname"],
- "vmask" = signal.data["vmask"],
- "compression" = signal.data["compression"],
- "message" = signal.data["message"],
- "connection" = signal.data["connection"],
- "radio" = signal.data["radio"],
- "slow" = signal.data["slow"],
- "traffic" = signal.data["traffic"],
- "type" = signal.data["type"],
- "server" = signal.data["server"],
- "reject" = signal.data["reject"],
- "level" = signal.data["level"],
- "verb" = signal.data["verb"],
- "language" = signal.data["language"]
- )
+ copy.data = signal.data.Copy()
// Keep the "original" signal constant
if(!signal.data["original"])
@@ -101,10 +77,6 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
else
copy.data["original"] = signal.data["original"]
- else
- del(copy)
-
-
send_count++
if(machine.is_freq_listening(signal))
machine.traffic++
@@ -232,13 +204,13 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
else if(on)
produce_heat()
delay = initial(delay)
-
-
+
+
/obj/machinery/telecomms/proc/produce_heat()
if (!produces_heat)
return
-
+
if (!use_power)
return
@@ -252,11 +224,11 @@ var/global/list/obj/machinery/telecomms/telecomms_list = list()
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(removed)
-
+
var/heat_produced = idle_power_usage //obviously can't produce more heat than the machine draws from it's power source
if (traffic <= 0)
heat_produced *= 0.30 //if idle, produce less heat.
-
+
removed.add_thermal_energy(heat_produced)
env.merge(removed)
diff --git a/code/game/machinery/teleporter.dm b/code/game/machinery/teleporter.dm
index 04b8c5644a..259638458c 100644
--- a/code/game/machinery/teleporter.dm
+++ b/code/game/machinery/teleporter.dm
@@ -91,7 +91,7 @@
var/turf/T = get_turf(R)
if (!T)
continue
- if(T.z == 2 || T.z > 7)
+ if(!(T.z in config.player_levels))
continue
var/tmpname = T.loc.name
if(areaindex[tmpname])
@@ -118,7 +118,12 @@
areaindex[tmpname] = 1
L[tmpname] = I
- var/desc = input("Please select a location to lock in.", "Locking Computer") in L
+ var/desc = input("Please select a location to lock in.", "Locking Computer") in L|null
+ if(!desc)
+ return
+ if(get_dist(src, usr) > 1 && !issilicon(usr))
+ return
+
src.locked = L[desc]
for(var/mob/O in hearers(src, null))
O.show_message("\blue Locked In", 2)
diff --git a/code/game/machinery/turret_control.dm b/code/game/machinery/turret_control.dm
index ce2a3b73ad..41a98103be 100644
--- a/code/game/machinery/turret_control.dm
+++ b/code/game/machinery/turret_control.dm
@@ -66,15 +66,20 @@
return
/obj/machinery/turretid/proc/can_use(mob/user)
+ if(ailock && issilicon(user))
+ user << "There seems to be a firewall preventing you from accessing this device."
+ return 0
+
if (get_dist(src, user) > 0 && !issilicon(user))
user << "You are too far away."
user.unset_machine()
user << browse(null, "window=turretid")
return 0
- if(ailock && issilicon(user))
- user << "There seems to be a firewall preventing you from accessing this device."
+ if(locked && !issilicon(user))
+ user << "Access denied."
return 0
+
return 1
/obj/machinery/turretid/attackby(obj/item/weapon/W, mob/user)
@@ -124,7 +129,9 @@
if (!istype(loc, /area))
return
var/area/area = loc
- var/dat = ""
+ var/dat = text({"Status: []
+ Behaviour controls are [locked ? "locked" : "unlocked"]"},
+ "[enabled ? "On" : "Off"]" )
if(!locked || issilicon(user))
dat += text({"
diff --git a/code/game/mecha/mecha_parts.dm b/code/game/mecha/mecha_parts.dm
index b9a6ab4e78..c3257bb61b 100644
--- a/code/game/mecha/mecha_parts.dm
+++ b/code/game/mecha/mecha_parts.dm
@@ -9,7 +9,7 @@
icon = 'icons/mecha/mech_construct.dmi'
icon_state = "blank"
w_class = 5
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "programming=2;materials=2"
var/construction_time = 100
var/list/construction_cost = list("metal"=20000,"glass"=5000)
@@ -20,7 +20,7 @@
icon_state = "backbone"
var/datum/construction/construct
construction_cost = list("metal"=20000)
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
attackby(obj/item/W as obj, mob/user as mob)
if(!construct || !construct.action(W, user))
diff --git a/code/game/mecha/working/hoverpod.dm b/code/game/mecha/working/hoverpod.dm
index 5736e00b4f..1c15bb232d 100644
--- a/code/game/mecha/working/hoverpod.dm
+++ b/code/game/mecha/working/hoverpod.dm
@@ -5,7 +5,7 @@
initial_icon = "engineering_pod"
internal_damage_threshold = 80
step_in = 4
- step_energy_drain = 15
+ step_energy_drain = 10
max_temperature = 20000
health = 150
infra_luminosity = 6
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 20dc45099c..ed996e3f1e 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -114,13 +114,19 @@ var/global/list/image/splatter_cache=list()
amount = 2
/obj/effect/decal/cleanable/blood/drip
- name = "drips of blood"
- desc = "It's red."
- gender = PLURAL
- icon = 'icons/effects/drip.dmi'
- icon_state = "1"
- random_icon_states = list("1","2","3","4","5")
- amount = 0
+ name = "drips of blood"
+ desc = "It's red."
+ gender = PLURAL
+ icon = 'icons/effects/drip.dmi'
+ icon_state = "1"
+ random_icon_states = list("1","2","3","4","5")
+ amount = 0
+ var/list/drips = list()
+
+/obj/effect/decal/cleanable/blood/drip/New()
+ ..()
+ spawn(1)
+ drips |= icon_state
/obj/effect/decal/cleanable/blood/writing
icon_state = "tracks"
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index c48d062e9e..32f05901b4 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -70,8 +70,12 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
lighting_controller.processing = 0
+
+
+ var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range
var/powernet_rebuild_was_deferred_already = defer_powernet_rebuild
- if(defer_powernet_rebuild != 2)
+ // Large enough explosion. For performance reasons, powernets will be rebuilt manually
+ if(!defer_powernet_rebuild && (approximate_intensity > 25))
defer_powernet_rebuild = 1
if(heavy_impact_range > 1)
@@ -110,9 +114,9 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
sleep(8)
if(!lighting_controller.processing) lighting_controller.processing = lighting_controller_was_processing
- if(!powernet_rebuild_was_deferred_already)
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
+ if(!powernet_rebuild_was_deferred_already && defer_powernet_rebuild)
+ makepowernets()
+ defer_powernet_rebuild = 0
return 1
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index ddc983a7ba..13081d6abb 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -10,7 +10,6 @@
var/burning = null
var/hitsound = null
var/w_class = 3.0
- flags = FPRINT | TABLEPASS
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
pass_flags = PASSTABLE
pressure_resistance = 5
@@ -35,7 +34,7 @@
var/siemens_coefficient = 1 // for electrical admittance/conductance (electrocution checks and shit)
var/slowdown = 0 // How much clothing is slowing you down. Negative values speeds you up
var/canremove = 1 //Mostly for Ninja code at this point but basically will not allow the item to be removed if set to 0. /N
- var/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
+ var/list/armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
var/list/allowed = null //suit storage stuff.
var/obj/item/device/uplink/hidden/hidden_uplink = null // All items can have an uplink hidden inside, just remember to add the triggers.
var/zoomdevicename = null //name used for message when binoculars/scope is used
@@ -115,12 +114,7 @@
size = "bulky"
if(5.0)
size = "huge"
- else
- //if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking"
- usr << "This is a [blood_DNA ? blood_color != "#030303" ? "bloody " : "oil-stained " : ""]\icon[src][src.name]. It is a [size] item."
- if(src.desc)
- usr << src.desc
- return
+ return ..(user, distance, "", "It is a [size] item.")
/obj/item/attack_hand(mob/user as mob)
if (!user) return
diff --git a/code/game/objects/items/apc_frame.dm b/code/game/objects/items/apc_frame.dm
index 418209d744..a11b326e45 100644
--- a/code/game/objects/items/apc_frame.dm
+++ b/code/game/objects/items/apc_frame.dm
@@ -5,7 +5,7 @@
desc = "Used for repairing or building APCs"
icon = 'icons/obj/apc_repair.dmi'
icon_state = "apc_frame"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/apc_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
..()
diff --git a/code/game/objects/items/bodybag.dm b/code/game/objects/items/bodybag.dm
index b1b46654bc..12267914d8 100644
--- a/code/game/objects/items/bodybag.dm
+++ b/code/game/objects/items/bodybag.dm
@@ -39,7 +39,7 @@
close_sound = 'sound/items/zip.ogg'
var/item_path = /obj/item/bodybag
density = 0
- storage_capacity = (mob_size * 2) - 1
+ storage_capacity = (default_mob_size * 2) - 1
var/contains_body = 0
/obj/structure/closet/body_bag/attackby(W as obj, mob/user as mob)
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index b24bf75ec1..adb07f28fa 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -10,7 +10,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
icon_state = "pda"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_ID | SLOT_BELT
//Main variables
@@ -464,7 +463,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
data["convo_job"] = sanitize(c["job"])
break
if(mode==41)
- data["manifest"] = data_core.get_manifest_json()
+ data_core.get_manifest_json()
if(mode==3)
@@ -535,12 +534,19 @@ var/global/list/obj/item/device/pda/PDAs = list()
nanoUI = data
// update the ui if it exists, returns null if no ui is passed/found
+ if(ui)
+ ui.load_cached_data(ManifestJSON)
+
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+
if (!ui)
// the ui does not exist, so we'll create a new() one
- // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
+ // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "pda.tmpl", title, 520, 400)
// when the ui is first opened this is the data it will use
+
+ ui.load_cached_data(ManifestJSON)
+
ui.set_initial_data(data)
// open the new ui window
ui.open()
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index fc4f555ed4..75122c7ce0 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -4,7 +4,6 @@
icon_state = "aicard" // aicard-full
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/flush = null
origin_tech = "programming=4;materials=4"
diff --git a/code/game/objects/items/devices/binoculars.dm b/code/game/objects/items/devices/binoculars.dm
index 0cafa7679c..b6e0ca1aca 100644
--- a/code/game/objects/items/devices/binoculars.dm
+++ b/code/game/objects/items/devices/binoculars.dm
@@ -4,7 +4,7 @@
desc = "A pair of binoculars."
icon_state = "binoculars"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm
index 978cfdb304..1982fbb4f4 100644
--- a/code/game/objects/items/devices/chameleonproj.dm
+++ b/code/game/objects/items/devices/chameleonproj.dm
@@ -1,7 +1,7 @@
/obj/item/device/chameleon
name = "chameleon projector"
icon_state = "shield0"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "electronic"
throwforce = 5.0
diff --git a/code/game/objects/items/devices/debugger.dm b/code/game/objects/items/devices/debugger.dm
index 3168e00feb..faab1ee054 100644
--- a/code/game/objects/items/devices/debugger.dm
+++ b/code/game/objects/items/devices/debugger.dm
@@ -9,7 +9,7 @@
desc = "Used to debug electronic equipment."
icon = 'icons/obj/hacktool.dmi'
icon_state = "hacktool-g"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm
index 152aa2fa34..6e924ba719 100644
--- a/code/game/objects/items/devices/flash.dm
+++ b/code/game/objects/items/devices/flash.dm
@@ -7,7 +7,7 @@
w_class = 2.0
throw_speed = 4
throw_range = 10
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
origin_tech = "magnets=2;combat=1"
var/times_used = 0 //Number of times it's been used.
diff --git a/code/game/objects/items/devices/flashlight.dm b/code/game/objects/items/devices/flashlight.dm
index 35ff3b720a..0f6d0abb10 100644
--- a/code/game/objects/items/devices/flashlight.dm
+++ b/code/game/objects/items/devices/flashlight.dm
@@ -5,7 +5,7 @@
icon_state = "flashlight"
item_state = "flashlight"
w_class = 2
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
matter = list("metal" = 50,"glass" = 20)
@@ -106,7 +106,7 @@
desc = "A pen-sized light, used by medical staff."
icon_state = "penlight"
item_state = ""
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
brightness_on = 2
w_class = 1
@@ -115,7 +115,7 @@
desc = "A miniature lamp, that might be used by small robots."
icon_state = "penlight"
item_state = ""
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
brightness_on = 2
w_class = 1
@@ -128,7 +128,7 @@
item_state = "lamp"
brightness_on = 5
w_class = 4
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
on = 1
diff --git a/code/game/objects/items/devices/lightreplacer.dm b/code/game/objects/items/devices/lightreplacer.dm
index c6238f2648..7e69ffe17a 100644
--- a/code/game/objects/items/devices/lightreplacer.dm
+++ b/code/game/objects/items/devices/lightreplacer.dm
@@ -47,7 +47,7 @@
icon_state = "lightreplacer0"
item_state = "electronic"
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
origin_tech = "magnets=3;materials=2"
diff --git a/code/game/objects/items/devices/megaphone.dm b/code/game/objects/items/devices/megaphone.dm
index db79c6390b..23cb816263 100644
--- a/code/game/objects/items/devices/megaphone.dm
+++ b/code/game/objects/items/devices/megaphone.dm
@@ -4,7 +4,7 @@
icon_state = "megaphone"
item_state = "radio"
w_class = 2.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
var/spamcheck = 0
var/emagged = 0
diff --git a/code/game/objects/items/devices/multitool.dm b/code/game/objects/items/devices/multitool.dm
index 6378f8823f..1765c32ade 100644
--- a/code/game/objects/items/devices/multitool.dm
+++ b/code/game/objects/items/devices/multitool.dm
@@ -8,7 +8,7 @@
name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
icon_state = "multitool"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index f2df13a2db..0065fab167 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -4,7 +4,6 @@
icon_state = "pai"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
origin_tech = "programming=2"
var/obj/item/device/radio/radio
diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm
index cf92db9a39..8b2469d2dd 100644
--- a/code/game/objects/items/devices/powersink.dm
+++ b/code/game/objects/items/devices/powersink.dm
@@ -6,7 +6,7 @@
icon_state = "powersink0"
item_state = "electronic"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 5
throw_speed = 1
throw_range = 2
diff --git a/code/game/objects/items/devices/radio/electropack.dm b/code/game/objects/items/devices/radio/electropack.dm
index 00666b2e2a..e7f9ec3b9f 100644
--- a/code/game/objects/items/devices/radio/electropack.dm
+++ b/code/game/objects/items/devices/radio/electropack.dm
@@ -4,7 +4,7 @@
icon_state = "electropack0"
item_state = "electropack"
frequency = 1449
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 5.0
diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm
index b28fe2cac1..567dc49bf4 100644
--- a/code/game/objects/items/devices/radio/intercom.dm
+++ b/code/game/objects/items/devices/radio/intercom.dm
@@ -5,7 +5,7 @@
anchored = 1
w_class = 4.0
canhear_range = 2
- flags = FPRINT | CONDUCT | TABLEPASS | NOBLOODY
+ flags = CONDUCT | NOBLOODY
var/number = 0
var/anyai = 1
var/mob/living/silicon/ai/ai = list()
diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm
index bb6f0d91f5..667cb6f115 100644
--- a/code/game/objects/items/devices/radio/radio.dm
+++ b/code/game/objects/items/devices/radio/radio.dm
@@ -20,7 +20,7 @@
var/syndie = 0//Holder to see if it's a syndicate encrpyed radio
var/maxf = 1499
// "Example" = FREQ_LISTENING|FREQ_BROADCASTING
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
slot_flags = SLOT_BELT
throw_speed = 2
throw_range = 9
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 5afc8ebc10..922d5418cb 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -13,7 +13,6 @@ REAGENT SCANNER
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 | TABLEPASS
slot_flags = SLOT_BELT
w_class = 2
item_state = "electronic"
@@ -69,7 +68,7 @@ REAGENT SCANNER
desc = "A hand-held body scanner able to distinguish vital signs of the subject."
icon_state = "health"
item_state = "analyzer"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
@@ -232,7 +231,7 @@ REAGENT SCANNER
icon_state = "atmos"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
@@ -279,7 +278,7 @@ REAGENT SCANNER
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS| CONDUCT | OPENCONTAINER
+ flags = CONDUCT | OPENCONTAINER
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
@@ -353,7 +352,7 @@ REAGENT SCANNER
icon_state = "spectrometer"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
throw_speed = 4
diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm
index f32b5256b5..291053f25d 100644
--- a/code/game/objects/items/devices/suit_cooling.dm
+++ b/code/game/objects/items/devices/suit_cooling.dm
@@ -7,7 +7,7 @@
slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage
//copied from tank.dm
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 5.0
throwforce = 10.0
throw_speed = 1
diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm
index f5e43436b9..dc74f0272c 100644
--- a/code/game/objects/items/devices/taperecorder.dm
+++ b/code/game/objects/items/devices/taperecorder.dm
@@ -15,7 +15,7 @@
var/list/storedinfo = new/list()
var/list/timestamp = new/list()
var/canprint = 1
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
throwforce = 2
throw_speed = 4
throw_range = 20
diff --git a/code/game/objects/items/devices/traitordevices.dm b/code/game/objects/items/devices/traitordevices.dm
index 52e5e220f2..3c2aebd871 100644
--- a/code/game/objects/items/devices/traitordevices.dm
+++ b/code/game/objects/items/devices/traitordevices.dm
@@ -22,7 +22,7 @@ effective or pretty fucking useless.
w_class = 1.0
throw_speed = 4
throw_range = 10
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
item_state = "electronic"
origin_tech = "magnets=3;combat=3;syndicate=3"
diff --git a/code/game/objects/items/devices/whistle.dm b/code/game/objects/items/devices/whistle.dm
index befba4b133..49df9aa31c 100644
--- a/code/game/objects/items/devices/whistle.dm
+++ b/code/game/objects/items/devices/whistle.dm
@@ -4,7 +4,7 @@
icon_state = "voice0"
item_state = "flashbang" //looks exactly like a flash (and nothing like a flashbang)
w_class = 1.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
var/spamcheck = 0
var/emagged = 0
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index 87a6fdc04c..25461eae37 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/robot_parts.dmi'
item_state = "buildpipe"
icon_state = "blank"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = 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/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm
index d2825c82f7..45350a71e9 100644
--- a/code/game/objects/items/stacks/rods.dm
+++ b/code/game/objects/items/stacks/rods.dm
@@ -3,7 +3,7 @@
desc = "Some rods. Can be used for building, or something."
singular_name = "metal rod"
icon_state = "rods"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 3.0
force = 9.0
throwforce = 15.0
diff --git a/code/game/objects/items/stacks/sheets/light.dm b/code/game/objects/items/stacks/sheets/light.dm
index c5df032d64..de96eda5f4 100644
--- a/code/game/objects/items/stacks/sheets/light.dm
+++ b/code/game/objects/items/stacks/sheets/light.dm
@@ -8,7 +8,7 @@
throwforce = 5.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/obj/item/stack/light_w/attackby(var/obj/item/O as obj, var/mob/user as mob)
diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm
index a5336c0797..bd192ec26c 100644
--- a/code/game/objects/items/stacks/sheets/sheet_types.dm
+++ b/code/game/objects/items/stacks/sheets/sheet_types.dm
@@ -82,7 +82,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
icon_state = "sheet-metal"
matter = list("metal" = 3750)
throwforce = 14.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=1"
/obj/item/stack/sheet/metal/cyborg
@@ -91,7 +91,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \
singular_name = "metal sheet"
icon_state = "sheet-metal"
throwforce = 14.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
stacktype = /obj/item/stack/sheet/metal
/obj/item/stack/sheet/metal/New(var/loc, var/amount=null)
@@ -118,7 +118,7 @@ var/global/list/datum/stack_recipe/plasteel_recipes = list ( \
item_state = "sheet-metal"
matter = list("metal" = 7500)
throwforce = 15.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=2"
/obj/item/stack/sheet/plasteel/New(var/loc, var/amount=null)
@@ -197,7 +197,6 @@ var/global/list/datum/stack_recipe/cardboard_recipes = list ( \
desc = "Large sheets of card, like boxes folded flat."
singular_name = "cardboard sheet"
icon_state = "sheet-card"
- flags = FPRINT | TABLEPASS
origin_tech = "materials=1"
/obj/item/stack/sheet/cardboard/New(var/loc, var/amount=null)
diff --git a/code/game/objects/items/stacks/sheets/sheets.dm b/code/game/objects/items/stacks/sheets/sheets.dm
index b140b4e6fd..ed0a9d2a31 100644
--- a/code/game/objects/items/stacks/sheets/sheets.dm
+++ b/code/game/objects/items/stacks/sheets/sheets.dm
@@ -1,6 +1,5 @@
/obj/item/stack/sheet
name = "sheet"
- flags = FPRINT | TABLEPASS
w_class = 3.0
force = 5
throwforce = 5
diff --git a/code/game/objects/items/stacks/tiles/light.dm b/code/game/objects/items/stacks/tiles/light.dm
index f346d216a7..3a14ff1e56 100644
--- a/code/game/objects/items/stacks/tiles/light.dm
+++ b/code/game/objects/items/stacks/tiles/light.dm
@@ -8,7 +8,7 @@
throwforce = 5.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
attack_verb = list("bashed", "battered", "bludgeoned", "thrashed", "smashed")
var/on = 1
diff --git a/code/game/objects/items/stacks/tiles/plasteel.dm b/code/game/objects/items/stacks/tiles/plasteel.dm
index e238a80323..7816c45f53 100644
--- a/code/game/objects/items/stacks/tiles/plasteel.dm
+++ b/code/game/objects/items/stacks/tiles/plasteel.dm
@@ -9,7 +9,7 @@
throwforce = 15.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/obj/item/stack/tile/plasteel/New(var/loc, var/amount=null)
diff --git a/code/game/objects/items/stacks/tiles/tile_types.dm b/code/game/objects/items/stacks/tiles/tile_types.dm
index e0963d08cc..7ad6abdd60 100644
--- a/code/game/objects/items/stacks/tiles/tile_types.dm
+++ b/code/game/objects/items/stacks/tiles/tile_types.dm
@@ -18,7 +18,7 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
origin_tech = "biotech=1"
@@ -35,7 +35,7 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
/*
@@ -51,5 +51,5 @@
throwforce = 1.0
throw_speed = 5
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
max_amount = 60
diff --git a/code/game/objects/items/toys.dm b/code/game/objects/items/toys.dm
index 837824bf39..cee5076a55 100644
--- a/code/game/objects/items/toys.dm
+++ b/code/game/objects/items/toys.dm
@@ -127,7 +127,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "revolver"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 3.0
@@ -183,7 +183,7 @@
desc = "There are 7 caps left! Make sure to recyle the box in an autolathe when it gets empty."
icon = 'icons/obj/ammo.dmi'
icon_state = "357-7"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 1.0
matter = list("metal" = 10,"glass" = 10)
@@ -205,7 +205,6 @@
icon = 'icons/obj/gun.dmi'
icon_state = "crossbow"
item_state = "crossbow"
- flags = FPRINT | TABLEPASS
w_class = 2.0
attack_verb = list("attacked", "struck", "hit")
var/bullets = 5
@@ -299,7 +298,6 @@
desc = "It's nerf or nothing! Ages 8 and up."
icon = 'icons/obj/toy.dmi'
icon_state = "foamdart"
- flags = FPRINT | TABLEPASS
w_class = 1.0
/obj/effect/foam_dart_dummy
@@ -322,7 +320,7 @@
item_state = "sword0"
var/active = 0.0
w_class = 2.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
attack_verb = list("attacked", "struck", "hit")
attack_self(mob/user as mob)
@@ -354,7 +352,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
throwforce = 5
@@ -570,7 +568,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 5
throwforce = 5
@@ -643,6 +641,5 @@
desc = "No bother to sink or swim when you can just float!"
icon_state = "inflatable"
item_state = "inflatable"
- flags = FPRINT | TABLEPASS
icon = 'icons/obj/clothing/belts.dmi'
slot_flags = SLOT_BELT
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index c8fec27bb8..3d29f318ff 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -12,7 +12,7 @@ AI MODULES
icon_state = "std_mod"
item_state = "electronic"
desc = "An AI Module for transmitting encrypted instructions to the AI."
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index 3e5c08539f..37dcbf9f4e 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -7,7 +7,7 @@
opacity = 0
density = 0
anchored = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 10.0
throwforce = 10.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/RSF.dm b/code/game/objects/items/weapons/RSF.dm
index f9f32bbeb1..c92b0bbf35 100644
--- a/code/game/objects/items/weapons/RSF.dm
+++ b/code/game/objects/items/weapons/RSF.dm
@@ -14,7 +14,6 @@ RSF
anchored = 0.0
var/stored_matter = 30
var/mode = 1
- flags = TABLEPASS
w_class = 3.0
/obj/item/weapon/rsf/examine(mob/user)
diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm
index 4d09a26bcf..fb51d83c14 100644
--- a/code/game/objects/items/weapons/cigs_lighters.dm
+++ b/code/game/objects/items/weapons/cigs_lighters.dm
@@ -385,7 +385,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM
var/icon_off = "lighter-g"
w_class = 1
throwforce = 4
- flags = TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
attack_verb = list("burnt", "singed")
diff --git a/code/game/objects/items/weapons/circuitboards/circuitboard.dm b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
index bc44b3d7df..00cc7a6835 100644
--- a/code/game/objects/items/weapons/circuitboards/circuitboard.dm
+++ b/code/game/objects/items/weapons/circuitboards/circuitboard.dm
@@ -13,7 +13,7 @@
density = 0
anchored = 0
w_class = 2.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 5.0
throwforce = 5.0
throw_speed = 3
diff --git a/code/game/objects/items/weapons/cosmetics.dm b/code/game/objects/items/weapons/cosmetics.dm
index 5e6d4d9538..6241bd5051 100644
--- a/code/game/objects/items/weapons/cosmetics.dm
+++ b/code/game/objects/items/weapons/cosmetics.dm
@@ -4,7 +4,6 @@
desc = "A generic brand of lipstick."
icon = 'icons/obj/items.dmi'
icon_state = "lipstick"
- flags = FPRINT | TABLEPASS
w_class = 1.0
var/colour = "red"
var/open = 0
diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm
index f5f4208073..71fb259dcd 100644
--- a/code/game/objects/items/weapons/explosives.dm
+++ b/code/game/objects/items/weapons/explosives.dm
@@ -5,7 +5,7 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "plastic-explosive0"
item_state = "plasticx"
- flags = FPRINT | TABLEPASS | NOBLUDGEON
+ flags = NOBLUDGEON
w_class = 2.0
origin_tech = "syndicate=2"
var/datum/wires/explosive/c4/wires = null
diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm
index f6758e53e6..7264b11fe1 100644
--- a/code/game/objects/items/weapons/extinguisher.dm
+++ b/code/game/objects/items/weapons/extinguisher.dm
@@ -5,7 +5,7 @@
icon_state = "fire_extinguisher0"
item_state = "fire_extinguisher"
hitsound = 'sound/weapons/smash.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 10
w_class = 3.0
throw_speed = 2
@@ -27,7 +27,6 @@
icon_state = "miniFE0"
item_state = "miniFE"
hitsound = null //it is much lighter, after all.
- flags = FPRINT | TABLEPASS
throwforce = 2
w_class = 2.0
force = 3.0
diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm
index 3830f105fd..50508594cf 100644
--- a/code/game/objects/items/weapons/flamethrower.dm
+++ b/code/game/objects/items/weapons/flamethrower.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/flamethrower.dmi'
icon_state = "flamethrowerbase"
item_state = "flamethrower_0"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 3.0
throwforce = 10.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm
index d1fb667e99..f501753807 100644
--- a/code/game/objects/items/weapons/grenades/grenade.dm
+++ b/code/game/objects/items/weapons/grenades/grenade.dm
@@ -7,7 +7,7 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
var/active = 0
var/det_time = 50
diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm
index d518567a5d..139baacb6f 100644
--- a/code/game/objects/items/weapons/grenades/smokebomb.dm
+++ b/code/game/objects/items/weapons/grenades/smokebomb.dm
@@ -5,7 +5,6 @@
icon_state = "flashbang"
det_time = 20
item_state = "flashbang"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/datum/effect/effect/system/smoke_spread/bad/smoke
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index a1ea44daa9..246636890d 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -4,7 +4,7 @@
gender = PLURAL
icon = 'icons/obj/items.dmi'
icon_state = "handcuff"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 5
w_class = 2.0
diff --git a/code/game/objects/items/weapons/hydroponics.dm b/code/game/objects/items/weapons/hydroponics.dm
index f3d5703225..0b492c2659 100644
--- a/code/game/objects/items/weapons/hydroponics.dm
+++ b/code/game/objects/items/weapons/hydroponics.dm
@@ -10,7 +10,6 @@
desc = "A small satchel made for organizing seeds."
var/mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/capacity = 500; //the number of seeds it can carry.
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 1
var/list/item_quants = list()
diff --git a/code/game/objects/items/weapons/kitchen.dm b/code/game/objects/items/weapons/kitchen.dm
index e0bca0c65a..66d8c6d01b 100644
--- a/code/game/objects/items/weapons/kitchen.dm
+++ b/code/game/objects/items/weapons/kitchen.dm
@@ -22,7 +22,7 @@
throwforce = 5.0
throw_speed = 3
throw_range = 5
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
origin_tech = "materials=1"
attack_verb = list("attacked", "stabbed", "poked")
sharp = 0
@@ -61,6 +61,8 @@
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,40), 1)
overlays.Cut()
return
+ else
+ ..()
/obj/item/weapon/kitchen/utensil/fork
name = "fork"
@@ -135,7 +137,7 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "knife"
desc = "A general purpose Chef's Knife made by SpaceCook Incorporated. Guaranteed to stay sharp for years to come."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
sharp = 1
edge = 1
force = 10.0
@@ -167,7 +169,7 @@
icon = 'icons/obj/kitchen.dmi'
icon_state = "butch"
desc = "A huge thing used for chopping and chopping up meat. This includes clowns and clown-by-products."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 15.0
w_class = 2.0
throwforce = 8.0
@@ -244,7 +246,7 @@
throw_speed = 1
throw_range = 5
w_class = 3.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
matter = list("metal" = 3000)
/* // NOPE
var/food_total= 0
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index 0de1036209..1b1d5b04f3 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -5,7 +5,7 @@
var/active_w_class
sharp = 0
edge = 0
- flags = FPRINT | TABLEPASS | NOBLOODY
+ flags = NOBLOODY
/obj/item/weapon/melee/energy/proc/activate(mob/living/user)
anchored = 1
@@ -73,7 +73,7 @@
throw_speed = 1
throw_range = 5
w_class = 3
- flags = FPRINT | CONDUCT | NOSHIELD | TABLEPASS | NOBLOODY
+ flags = CONDUCT | NOSHIELD | NOBLOODY
origin_tech = "magnets=3;combat=4"
attack_verb = list("attacked", "chopped", "cleaved", "torn", "cut")
sharp = 1
@@ -109,7 +109,7 @@
throw_speed = 1
throw_range = 5
w_class = 2
- flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
+ flags = NOSHIELD | NOBLOODY
origin_tech = "magnets=3;syndicate=4"
/obj/item/weapon/melee/energy/sword/dropped(var/mob/user)
@@ -177,7 +177,7 @@
throw_speed = 1
throw_range = 1
w_class = 4.0//So you can't hide it in your pocket or some such.
- flags = FPRINT | TABLEPASS | NOSHIELD | NOBLOODY
+ flags = NOSHIELD | NOBLOODY
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/mob/living/creator
var/datum/effect/effect/system/spark_spread/spark_system
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 36dbc26537..c5efdae1fb 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -3,7 +3,7 @@
desc = "A tool used by great men to placate the frothing masses."
icon_state = "chain"
item_state = "chain"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 10
throwforce = 7
diff --git a/code/game/objects/items/weapons/mop.dm b/code/game/objects/items/weapons/mop.dm
index 017db06a04..fe9945f8f0 100644
--- a/code/game/objects/items/weapons/mop.dm
+++ b/code/game/objects/items/weapons/mop.dm
@@ -8,7 +8,6 @@
throw_speed = 5
throw_range = 10
w_class = 3.0
- flags = FPRINT | TABLEPASS
attack_verb = list("mopped", "bashed", "bludgeoned", "whacked")
var/mopping = 0
var/mopcount = 0
diff --git a/code/game/objects/items/weapons/paint.dm b/code/game/objects/items/weapons/paint.dm
index 2c0e1d812d..fc122c185c 100644
--- a/code/game/objects/items/weapons/paint.dm
+++ b/code/game/objects/items/weapons/paint.dm
@@ -13,7 +13,7 @@ var/global/list/cached_icons = list()
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(10,20,30,50,70)
volume = 70
- flags = FPRINT | OPENCONTAINER
+ flags = OPENCONTAINER
var/paint_type = ""
afterattack(turf/simulated/target, mob/user, proximity)
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index b0b8fbdc04..5cab6b24cb 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -5,7 +5,6 @@
icon_state = "cell"
item_state = "cell"
origin_tech = "powerstorage=1"
- flags = FPRINT|TABLEPASS
force = 5.0
throwforce = 5.0
throw_speed = 3
diff --git a/code/game/objects/items/weapons/scrolls.dm b/code/game/objects/items/weapons/scrolls.dm
index e9aa6f3ca6..1ece5817f9 100644
--- a/code/game/objects/items/weapons/scrolls.dm
+++ b/code/game/objects/items/weapons/scrolls.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/wizard.dmi'
icon_state = "scroll"
var/uses = 4.0
- flags = FPRINT | TABLEPASS
w_class = 2.0
item_state = "paper"
throw_speed = 4
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 2814c6fe4d..65f1abddfb 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -6,7 +6,7 @@
desc = "A shield adept at blocking blunt objects from connecting with the torso of the shield wielder."
icon = 'icons/obj/weapons.dmi'
icon_state = "riot"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
force = 5.0
throwforce = 5.0
@@ -39,7 +39,7 @@
desc = "A shield capable of stopping most projectile and melee attacks. It can be retracted, expanded, and stored anywhere."
icon = 'icons/obj/weapons.dmi'
icon_state = "eshield0" // eshield1 for expanded
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 3.0
throwforce = 5.0
throw_speed = 1
@@ -88,7 +88,7 @@
icon = 'icons/obj/device.dmi'
icon_state = "shield0"
var/active = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
item_state = "electronic"
throwforce = 10.0
throw_speed = 2
diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm
index 0304aac95e..2b38772b86 100644
--- a/code/game/objects/items/weapons/storage/backpack.dm
+++ b/code/game/objects/items/weapons/storage/backpack.dm
@@ -9,7 +9,6 @@
icon_state = "backpack"
item_state = "backpack"
w_class = 4.0
- flags = FPRINT|TABLEPASS
slot_flags = SLOT_BACK //ERROOOOO
max_w_class = 3
max_combined_w_class = 21
diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm
index b2d54be947..88db6abd3e 100644
--- a/code/game/objects/items/weapons/storage/bags.dm
+++ b/code/game/objects/items/weapons/storage/bags.dm
@@ -21,7 +21,6 @@
display_contents_with_number = 0 // UNStABLE AS FuCK, turn on when it stops crashing clients
use_to_pickup = 1
slot_flags = SLOT_BELT
- flags = FPRINT | TABLEPASS
// -----------------------------
// Trash bag
diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm
index 941fdaae3b..0c4a94eb86 100644
--- a/code/game/objects/items/weapons/storage/belt.dm
+++ b/code/game/objects/items/weapons/storage/belt.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/clothing/belts.dmi'
icon_state = "utilitybelt"
item_state = "utility"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
attack_verb = list("whipped", "lashed", "disciplined")
diff --git a/code/game/objects/items/weapons/storage/bible.dm b/code/game/objects/items/weapons/storage/bible.dm
index 0545f85d21..822b986488 100644
--- a/code/game/objects/items/weapons/storage/bible.dm
+++ b/code/game/objects/items/weapons/storage/bible.dm
@@ -5,7 +5,6 @@
throw_speed = 1
throw_range = 5
w_class = 3.0
- flags = FPRINT | TABLEPASS
var/mob/affecting = null
var/deity_name = "Christ"
diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm
index 4b9a7dbe64..ced886bedd 100644
--- a/code/game/objects/items/weapons/storage/boxes.dm
+++ b/code/game/objects/items/weapons/storage/boxes.dm
@@ -444,7 +444,6 @@
item_state = "zippo"
storage_slots = 10
w_class = 1
- flags = TABLEPASS
slot_flags = SLOT_BELT
can_hold = list("/obj/item/weapon/flame/match")
diff --git a/code/game/objects/items/weapons/storage/briefcase.dm b/code/game/objects/items/weapons/storage/briefcase.dm
index 126d60e1e4..f6addee005 100644
--- a/code/game/objects/items/weapons/storage/briefcase.dm
+++ b/code/game/objects/items/weapons/storage/briefcase.dm
@@ -3,7 +3,7 @@
desc = "It's made of AUTHENTIC faux-leather and has a price-tag still attached. Its owner must be a real professional."
icon_state = "briefcase"
item_state = "briefcase"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 8.0
throw_speed = 1
throw_range = 4
diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm
index 64d8e89bb7..2ddc1da1d3 100644
--- a/code/game/objects/items/weapons/storage/fancy.dm
+++ b/code/game/objects/items/weapons/storage/fancy.dm
@@ -69,7 +69,6 @@
item_state = "candlebox5"
storage_slots = 5
throwforce = 2
- flags = TABLEPASS
slot_flags = SLOT_BELT
@@ -133,7 +132,6 @@
item_state = "cigpacket"
w_class = 1
throwforce = 2
- flags = TABLEPASS
slot_flags = SLOT_BELT
storage_slots = 6
can_hold = list("/obj/item/clothing/mask/cigarette")
@@ -190,7 +188,6 @@
icon = 'icons/obj/cigarettes.dmi'
w_class = 1
throwforce = 2
- flags = TABLEPASS
slot_flags = SLOT_BELT
storage_slots = 7
can_hold = list("/obj/item/clothing/mask/cigarette/cigar")
diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm
index b3e94bf4d9..74c47cab05 100644
--- a/code/game/objects/items/weapons/storage/secure.dm
+++ b/code/game/objects/items/weapons/storage/secure.dm
@@ -145,7 +145,6 @@
icon_state = "secure"
item_state = "sec-case"
desc = "A large briefcase with a digital locking system."
- flags = FPRINT | TABLEPASS
force = 8.0
throw_speed = 1
throw_range = 4
@@ -216,7 +215,6 @@
icon_opened = "safe0"
icon_locking = "safeb"
icon_sparking = "safespark"
- flags = FPRINT | TABLEPASS
force = 8.0
w_class = 8.0
max_w_class = 8
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index b6b11af106..a585b96ce2 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
icon_state = "red"
item_state = "toolbox_red"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 5.0
throwforce = 10.0
throw_speed = 1
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index d9d7ec0126..383e21ff4f 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -17,7 +17,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "retractor"
matter = list("metal" = 10000, "glass" = 5000)
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
@@ -30,7 +30,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "hemostat"
matter = list("metal" = 5000, "glass" = 2500)
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
attack_verb = list("attacked", "pinched")
@@ -44,7 +44,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "cautery"
matter = list("metal" = 5000, "glass" = 2500)
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
w_class = 2.0
origin_tech = "materials=1;biotech=1"
attack_verb = list("burnt")
@@ -59,7 +59,7 @@
icon_state = "drill"
hitsound = 'sound/weapons/circsawhit.ogg'
matter = list("metal" = 15000, "glass" = 10000)
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 15.0
w_class = 2.0
origin_tech = "materials=1;biotech=1"
@@ -78,7 +78,7 @@
desc = "Cut, cut, and once more cut."
icon = 'icons/obj/surgery.dmi'
icon_state = "scalpel"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 10.0
sharp = 1
edge = 1
@@ -134,7 +134,7 @@
icon = 'icons/obj/surgery.dmi'
icon_state = "saw3"
hitsound = 'sound/weapons/circsawhit.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 15.0
w_class = 2.0
throwforce = 9.0
diff --git a/code/game/objects/items/weapons/swords_axes_etc.dm b/code/game/objects/items/weapons/swords_axes_etc.dm
index 34516e875f..e7d46bc68e 100644
--- a/code/game/objects/items/weapons/swords_axes_etc.dm
+++ b/code/game/objects/items/weapons/swords_axes_etc.dm
@@ -21,7 +21,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "baton"
item_state = "classic_baton"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 10
@@ -70,7 +69,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "telebaton_0"
item_state = "telebaton_0"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
w_class = 2
force = 3
diff --git a/code/game/objects/items/weapons/table_rack_parts.dm b/code/game/objects/items/weapons/table_rack_parts.dm
index fff0deed5f..2dfc3f4730 100644
--- a/code/game/objects/items/weapons/table_rack_parts.dm
+++ b/code/game/objects/items/weapons/table_rack_parts.dm
@@ -7,7 +7,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "table_parts"
matter = list("metal" = 3750)
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
attack_verb = list("slammed", "bashed", "battered", "bludgeoned", "thrashed", "whacked")
var/build_type = /obj/structure/table
@@ -50,7 +50,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "reinf_tableparts"
matter = list("metal" = 7500)
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
stack_types = list(/obj/item/stack/sheet/metal, /obj/item/stack/rods)
build_type = /obj/structure/table/reinforced
diff --git a/code/game/objects/items/weapons/tanks/tank_types.dm b/code/game/objects/items/weapons/tanks/tank_types.dm
index 23a5690e3f..02d50e0d26 100644
--- a/code/game/objects/items/weapons/tanks/tank_types.dm
+++ b/code/game/objects/items/weapons/tanks/tank_types.dm
@@ -85,7 +85,7 @@
name = "phoron tank"
desc = "Contains dangerous phoron. Do not inhale. Warning: extremely flammable."
icon_state = "phoron"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = null //they have no straps!
@@ -114,7 +114,7 @@
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 | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
force = 4.0
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index f6485f0a16..551e4790dc 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -4,7 +4,7 @@
/obj/item/weapon/tank
name = "tank"
icon = 'icons/obj/tank.dmi'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 3
@@ -117,10 +117,16 @@
ui_interact(user)
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/mob/living/carbon/location = null
+ if(istype(loc, /obj/item/weapon/rig)) // check for tanks in rigs
+ if(istype(loc.loc, /mob/living/carbon))
+ location = loc.loc
+ else if(istype(loc, /mob/living/carbon))
+ location = loc
+
var/using_internal
- if(istype(loc,/mob/living/carbon))
- var/mob/living/carbon/location = loc
+ if(istype(location))
if(location.internal==src)
using_internal = 1
@@ -133,9 +139,20 @@
data["valveOpen"] = using_internal ? 1 : 0
data["maskConnected"] = 0
- if(istype(loc,/mob/living/carbon))
- var/mob/living/carbon/location = loc
- if(location.internal == src)
+
+ if(istype(location))
+ var/mask_check = 0
+
+ if(location.internal == src) // if tank is current internal
+ mask_check = 1
+ else if(src in location) // or if tank is in the mobs possession
+ if(!location.internal) // and they do not have any active internals
+ mask_check = 1
+ else if(istype(src.loc, /obj/item/weapon/rig) && src.loc in location) // or the rig is in the mobs possession
+ if(!location.internal) // and they do not have any active internals
+ mask_check = 1
+
+ if(mask_check)
if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT))
data["maskConnected"] = 1
else if(istype(location, /mob/living/carbon/human))
diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm
index 2d82cacaad..477bce6b32 100644
--- a/code/game/objects/items/weapons/tape.dm
+++ b/code/game/objects/items/weapons/tape.dm
@@ -13,7 +13,7 @@
user.put_in_hands(tape)
*/
-/obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user as mob)
+/obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user)
if(!istype(W, /obj/item/weapon/paper))
return
@@ -30,14 +30,14 @@
w_class = 1
layer = 4
anchored = 1 //it's sticky, no you cant move it
-
+
var/obj/item/weapon/stuck = null
/obj/item/weapon/ducttape/New()
..()
flags |= NOBLUDGEON
-/obj/item/weapon/ducttape/examine(mob/user as mob)
+/obj/item/weapon/ducttape/examine(mob/user)
return stuck.examine(user)
/obj/item/weapon/ducttape/proc/attach(var/obj/item/weapon/W)
@@ -47,7 +47,7 @@
name = W.name + " (taped)"
overlays = W.overlays
-/obj/item/weapon/ducttape/attack_self(mob/user as mob)
+/obj/item/weapon/ducttape/attack_self(mob/user)
if(!stuck)
return
@@ -60,7 +60,7 @@
overlays = null
del(src)
-/obj/item/weapon/ducttape/afterattack(var/A, mob/user as mob, flag, params)
+/obj/item/weapon/ducttape/afterattack(var/A, mob/user, flag, params)
if(!in_range(user, A) || istype(A, /obj/machinery/door) || !stuck)
return
@@ -70,6 +70,9 @@
var/dir_offset = 0
if(target_turf != source_turf)
dir_offset = get_dir(source_turf, target_turf)
+ if(!(dir_offset in cardinal))
+ user << "You cannot reach that from here." // can only place stuck papers in cardinal directions, to
+ return // reduce papers around corners issue.
user.drop_from_inventory(src)
forceMove(source_turf)
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index e04a5f0888..d8c811d2f6 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -16,7 +16,7 @@
var/frequency = 1451
var/broadcasting = null
var/listening = 1.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 2.0
item_state = "electronic"
throw_speed = 4
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 62793f0b2c..14f9ad482a 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -19,7 +19,7 @@
desc = "A wrench with many common uses. Can be usually found in your hand."
icon = 'icons/obj/items.dmi'
icon_state = "wrench"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
@@ -37,7 +37,7 @@
desc = "You can be totally screwwy with this."
icon = 'icons/obj/items.dmi'
icon_state = "screwdriver"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
w_class = 1.0
@@ -96,7 +96,7 @@
desc = "This cuts wires."
icon = 'icons/obj/items.dmi'
icon_state = "cutters"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 6.0
throw_speed = 2
@@ -131,7 +131,7 @@
name = "welding tool"
icon = 'icons/obj/items.dmi'
icon_state = "welder"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
//Amount of OUCH when it's thrown
@@ -433,7 +433,7 @@
desc = "Used to remove floors and to pry open doors."
icon = 'icons/obj/items.dmi'
icon_state = "crowbar"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 5.0
throwforce = 7.0
diff --git a/code/game/objects/items/weapons/twohanded.dm b/code/game/objects/items/weapons/twohanded.dm
index c8e67078b2..2442320524 100644
--- a/code/game/objects/items/weapons/twohanded.dm
+++ b/code/game/objects/items/weapons/twohanded.dm
@@ -156,7 +156,7 @@
force_wielded = 30
wieldsound = 'sound/weapons/saberon.ogg'
unwieldsound = 'sound/weapons/saberoff.ogg'
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
origin_tech = "magnets=3;syndicate=4"
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
sharp = 1
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index a584f3db4b..b18198cbc0 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -3,7 +3,6 @@
name = "banhammer"
icon = 'icons/obj/items.dmi'
icon_state = "toyhammer"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
throwforce = 0
w_class = 2.0
@@ -20,7 +19,6 @@
desc = "A rod of pure obsidian, its very presence disrupts and dampens the powers of paranormal phenomenae."
icon_state = "nullrod"
item_state = "nullrod"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 15
throw_speed = 1
@@ -77,7 +75,6 @@
desc = "This thing is so unspeakably shitty you are having a hard time even holding it."
icon_state = "sord"
item_state = "sord"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
force = 2
throwforce = 1
@@ -99,7 +96,7 @@
desc = "What are you standing around staring at this for? Get to killing!"
icon_state = "claymore"
item_state = "claymore"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 40
throwforce = 10
@@ -124,7 +121,7 @@
desc = "Woefully underpowered in D20"
icon_state = "katana"
item_state = "katana"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT | SLOT_BACK
force = 40
throwforce = 10
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index a929ff7201..d9abac8979 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/closet.dmi'
icon_state = "closed"
density = 1
- flags = FPRINT
var/icon_closed = "closed"
var/icon_opened = "open"
var/opened = 0
@@ -21,7 +20,7 @@
var/store_items = 1
var/store_mobs = 1
- var/const/mob_size = 15
+ var/const/default_mob_size = 15
/obj/structure/closet/initialize()
if(!opened) // if closed, any item at the crate's loc is put in the contents
@@ -121,20 +120,17 @@
/obj/structure/closet/proc/store_mobs(var/stored_units)
var/added_units = 0
- for(var/mob/M in src.loc)
- if(stored_units + added_units + mob_size > storage_capacity)
- break
- if(istype (M, /mob/dead/observer))
- continue
+ for(var/mob/living/M in src.loc)
if(M.buckled || M.pinned.len)
continue
-
+ var/current_mob_size = (M.mob_size ? M.mob_size : default_mob_size)
+ if(stored_units + added_units + current_mob_size > storage_capacity)
+ break
if(M.client)
M.client.perspective = EYE_PERSPECTIVE
M.client.eye = src
-
M.loc = src
- added_units += mob_size
+ added_units += current_mob_size
return added_units
/obj/structure/closet/proc/toggle(mob/user as mob)
@@ -191,7 +187,8 @@
/obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
- src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
+ var/obj/item/weapon/grab/G = W
+ src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
if(istype(W,/obj/item/tk_grab))
return 0
if(istype(W, /obj/item/weapon/weldingtool))
@@ -206,6 +203,8 @@
return
if(isrobot(user))
return
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
usr.drop_item()
if(W)
W.loc = src.loc
diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
index 09810842d4..a3b9f39928 100644
--- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm
@@ -66,12 +66,15 @@
/obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(src.opened)
if(istype(W, /obj/item/weapon/grab))
+ var/obj/item/weapon/grab/G = W
if(src.large)
- src.MouseDrop_T(W:affecting, user) //act like they were dragged onto the closet
+ src.MouseDrop_T(G.affecting, user) //act like they were dragged onto the closet
else
- user << "The locker is too small to stuff [W:affecting] into!"
+ user << "The locker is too small to stuff [G.affecting] into!"
if(isrobot(user))
return
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
user.drop_item()
if(W)
W.loc = src.loc
diff --git a/code/game/objects/closets/walllocker.dm b/code/game/objects/structures/crates_lockers/closets/walllocker.dm
similarity index 100%
rename from code/game/objects/closets/walllocker.dm
rename to code/game/objects/structures/crates_lockers/closets/walllocker.dm
diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm
index 3f6f321129..4c233f24ef 100644
--- a/code/game/objects/structures/crates_lockers/crates.dm
+++ b/code/game/objects/structures/crates_lockers/crates.dm
@@ -70,6 +70,8 @@
if(opened)
if(isrobot(user))
return
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
user.drop_item()
if(W)
W.loc = src.loc
diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm
index e9fdd40966..d2b1f56eb3 100644
--- a/code/game/objects/structures/crates_lockers/largecrate.dm
+++ b/code/game/objects/structures/crates_lockers/largecrate.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/storage.dmi'
icon_state = "densecrate"
density = 1
- flags = FPRINT
/obj/structure/largecrate/attack_hand(mob/user as mob)
user << "You need a crowbar to pry this open!"
diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm
index 9bb1cec396..2b06bcb534 100644
--- a/code/game/objects/structures/grille.dm
+++ b/code/game/objects/structures/grille.dm
@@ -5,7 +5,7 @@
icon_state = "grille"
density = 1
anchored = 1
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
pressure_resistance = 5*ONE_ATMOSPHERE
layer = 2.9
explosion_resistance = 5
diff --git a/code/game/objects/structures/mop_bucket.dm b/code/game/objects/structures/mop_bucket.dm
index 06aae9557b..ec568b8408 100644
--- a/code/game/objects/structures/mop_bucket.dm
+++ b/code/game/objects/structures/mop_bucket.dm
@@ -5,7 +5,7 @@
icon_state = "mopbucket"
density = 1
pressure_resistance = 5
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/amount_per_transfer_from_this = 5 //shit I dunno, adding this so syringes stop runtime erroring. --NeoFite
diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm
index 1f23e10411..a5ad84c20e 100644
--- a/code/game/objects/structures/noticeboard.dm
+++ b/code/game/objects/structures/noticeboard.dm
@@ -3,7 +3,6 @@
desc = "A board for pinning important notices upon."
icon = 'icons/obj/stationobjs.dmi'
icon_state = "nboard00"
- flags = FPRINT
density = 0
anchored = 1
var/notices = 0
diff --git a/code/game/objects/structures/stool_bed_chair_nest/stools.dm b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
index f412467c65..027d382795 100644
--- a/code/game/objects/structures/stool_bed_chair_nest/stools.dm
+++ b/code/game/objects/structures/stool_bed_chair_nest/stools.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/objects.dmi'
icon_state = "stool"
anchored = 1.0
- flags = FPRINT
pressure_resistance = 15
/obj/structure/stool/ex_act(severity)
diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm
index cd55637b35..458c5626bc 100644
--- a/code/game/objects/structures/window.dm
+++ b/code/game/objects/structures/window.dm
@@ -15,25 +15,70 @@
var/basestate
var/shardtype = /obj/item/weapon/shard
var/glasstype = null // Set this in subtypes. Null is assumed strange or otherwise impossible to dismantle, such as for shuttle glass.
-// var/silicate = 0 // number of units of silicate
-// var/icon/silicateIcon = null // the silicated icon
+ var/silicate = 0 // number of units of silicate
+
+/obj/structure/window/examine(mob/user)
+ . = ..(user)
+
+ if(health == maxhealth)
+ user << "It looks fully intact."
+ else
+ var/perc = health / maxhealth
+ if(perc > 0.75)
+ user << "It has a few cracks."
+ else if(perc > 0.5)
+ user << "It looks slightly damaged."
+ else if(perc > 0.25)
+ user << "It looks moderately damaged."
+ else
+ user << "It looks heavily damaged."
+ if(silicate)
+ if (silicate < 30)
+ user << "It has a thin layer of silicate."
+ else if (silicate < 70)
+ user << "It is covered in silicate."
+ else
+ user << "There is a thick layer of silicate covering it."
/obj/structure/window/proc/take_damage(var/damage = 0, var/sound_effect = 1)
- var/initialhealth = src.health
- src.health = max(0, src.health - damage)
- if(src.health <= 0)
- src.shatter()
+ var/initialhealth = health
+
+ if(silicate)
+ damage = damage * (1 - silicate / 200)
+
+ health = max(0, health - damage)
+
+ if(health <= 0)
+ shatter()
else
if(sound_effect)
playsound(loc, 'sound/effects/Glasshit.ogg', 100, 1)
- if(src.health < src.maxhealth / 4 && initialhealth >= src.maxhealth / 4)
+ if(health < maxhealth / 4 && initialhealth >= maxhealth / 4)
visible_message("[src] looks like it's about to shatter!" )
- else if(src.health < src.maxhealth / 2 && initialhealth >= src.maxhealth / 2)
+ else if(health < maxhealth / 2 && initialhealth >= maxhealth / 2)
visible_message("[src] looks seriously damaged!" )
- else if(src.health < src.maxhealth * 3/4 && initialhealth >= src.maxhealth * 3/4)
+ else if(health < maxhealth * 3/4 && initialhealth >= maxhealth * 3/4)
visible_message("Cracks begin to appear in [src]!" )
return
+/obj/structure/window/proc/apply_silicate(var/amount)
+ if(health < maxhealth) // Mend the damage
+ health = min(health + amount * 3, maxhealth)
+ if(health == maxhealth)
+ visible_message("[src] looks fully repaired." )
+ else // Reinforce
+ silicate = min(silicate + amount, 100)
+ updateSilicate()
+
+/obj/structure/window/proc/updateSilicate()
+ if (overlays)
+ overlays.Cut()
+
+ var/image/img = image(src.icon, src.icon_state)
+ img.color = "#ffffff"
+ img.alpha = silicate * 255 / 100
+ overlays += img
+
/obj/structure/window/proc/shatter(var/display_message = 1)
playsound(src, "shatter", 70, 1)
if(display_message)
@@ -251,7 +296,7 @@
update_nearby_tiles(need_rebuild=1) //Compel updates before
set_dir(turn(dir, 90))
-// updateSilicate()
+ updateSilicate()
update_nearby_tiles(need_rebuild=1)
return
@@ -267,27 +312,10 @@
update_nearby_tiles(need_rebuild=1) //Compel updates before
set_dir(turn(dir, 270))
-// updateSilicate()
+ updateSilicate()
update_nearby_tiles(need_rebuild=1)
return
-
-/*
-/obj/structure/window/proc/updateSilicate()
- if(silicateIcon && silicate)
- icon = initial(icon)
-
- var/icon/I = icon(icon,icon_state,dir)
-
- var/r = (silicate / 100) + 1
- var/g = (silicate / 70) + 1
- var/b = (silicate / 50) + 1
- I.SetIntensity(r,g,b)
- icon = I
- silicateIcon = I
-*/
-
-
/obj/structure/window/New(Loc, start_dir=null, constructed=0)
..()
diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm
index 7158a866cf..572ed0ff8d 100644
--- a/code/game/turfs/simulated/walls.dm
+++ b/code/game/turfs/simulated/walls.dm
@@ -125,7 +125,7 @@
/turf/simulated/wall/adjacent_fire_act(turf/simulated/floor/adj_turf, datum/gas_mixture/adj_air, adj_temp, adj_volume)
if(adj_temp > max_temperature)
- take_damage(log(rand(0.9, 1.1) * (adj_temp - max_temperature)))
+ take_damage(log(RAND_F(0.9, 1.1) * (adj_temp - max_temperature)))
return ..()
@@ -273,7 +273,7 @@
user << rotting_touch_message
if(rotting_destroy_touch)
dismantle_wall()
- return 1
+ return 1
if(..()) return 1
@@ -475,6 +475,9 @@
else if(istype(W,/obj/item/weapon/rcd)) //I bitterly resent having to write this. ~Z
return
+
+ else if(istype(W, /obj/item/weapon/reagent_containers))
+ return // They tend to have meaningful afterattack - let them apply it without destroying a rotting wall
else
return attack_hand(user)
diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm
index e06f9ba980..b08363a715 100644
--- a/code/game/turfs/simulated/walls_reinforced.dm
+++ b/code/game/turfs/simulated/walls_reinforced.dm
@@ -5,7 +5,7 @@
opacity = 1
density = 1
- damage_cap = 1000
+ damage_cap = 500
max_temperature = 6000
armor = 0.1 // Only 10% damage from gunfire, it's made from strong alloys and stuff.
@@ -291,7 +291,10 @@
var/obj/item/light_fixture_frame/small/AH = W
AH.try_build(src)
return
-
+
+ else if(istype(W, /obj/item/weapon/reagent_containers))
+ return // They tend to have meaningful afterattack - let them apply it without destroying a rotting wall
+
//Finally, CHECKING FOR FALSE WALLS if it isn't damaged
else if(!d_state)
return attack_hand(user)
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 82a81e5af7..ab3c8dcc80 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -59,7 +59,8 @@
//Do 175 damage divided by the number of damage types applied.
if(damagetype & BRUTELOSS)
- adjustBruteLoss(175/damage_mod)
+ adjustBruteLoss(30/damage_mod) //hack to prevent gibbing
+ adjustOxyLoss(145/damage_mod)
if(damagetype & FIRELOSS)
adjustFireLoss(175/damage_mod)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 9c3acb9c78..fdfb9f0e3e 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -653,6 +653,7 @@ var/global/floorIsLava = 0
Ghost Mode
Make all players retarded
Make all items look like guns
+ Paintball Mode
Japanese Animes Mode
Egalitarian Station Mode
Launch a shuttle
@@ -948,7 +949,7 @@ var/global/floorIsLava = 0
return 2
return 1
if(M.mind in ticker.mode.syndicates)
- if (ticker.mode.config_tag == "nuclear")
+ if (ticker.mode.config_tag == "mercenary")
return 2
return 1
if(M.mind in ticker.mode.wizards)
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 8d9e62cdcf..d20105a67e 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -46,6 +46,7 @@ var/list/admin_verbs_admin = list(
/client/proc/cmd_admin_create_centcom_report,
/client/proc/check_words, /*displays cult-words*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
+ /client/proc/rename_ai, /*properly renames the AI*/
/client/proc/check_antagonists,
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
@@ -282,7 +283,7 @@ var/list/admin_verbs_mentor = list(
if(holder.rights & R_SERVER) verbs += admin_verbs_server
if(holder.rights & R_DEBUG)
verbs += admin_verbs_debug
- if(config.debugparanoid && !check_rights(R_ADMIN))
+ if(config.debugparanoid && !check_rights(R_ADMIN))
verbs.Remove(admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on.
if(holder.rights & R_POSSESS) verbs += admin_verbs_possess
if(holder.rights & R_PERMISSIONS) verbs += admin_verbs_permissions
@@ -308,24 +309,7 @@ var/list/admin_verbs_mentor = list(
admin_verbs_rejuv,
admin_verbs_sounds,
admin_verbs_spawn,
- /*Debug verbs added by "show debug verbs"*/
- /client/proc/Cell,
- /client/proc/do_not_use_these,
- /client/proc/camera_view,
- /client/proc/sec_camera_report,
- /client/proc/intercom_view,
- /client/proc/atmosscan,
- /client/proc/powerdebug,
- /client/proc/count_objects_on_z_level,
- /client/proc/count_objects_all,
- /client/proc/cmd_assume_direct_control,
- /client/proc/jump_to_dead_group,
- /client/proc/startSinglo,
- /client/proc/ticklag,
- /client/proc/cmd_admin_grantfullaccess,
- /client/proc/kaboom,
- /client/proc/splash,
- /client/proc/cmd_admin_areatest
+ debug_verbs
)
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
@@ -608,12 +592,14 @@ var/list/admin_verbs_mentor = list(
var/datum/disease2/disease/D = new /datum/disease2/disease()
- var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
-
- D.makerandom(greater)
- if (!greater)
- D.infectionchance = 1
+ var/severity = 1
+ var/greater = input("Is this a lesser, greater, or badmin disease?", "Give Disease") in list("Lesser", "Greater", "Badmin")
+ switch(greater)
+ if ("Lesser") severity = 1
+ if ("Greater") severity = 2
+ if ("Badmin") severity = 99
+ D.makerandom(severity)
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
@@ -626,8 +612,8 @@ var/list/admin_verbs_mentor = list(
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
- message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
+ log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
+ message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
@@ -706,6 +692,17 @@ var/list/admin_verbs_mentor = list(
if(holder)
src.holder.output_ai_laws()
+/client/proc/rename_ai(mob/living/silicon/ai/AI in world)
+ set name = "Rename AI"
+ set category = "Admin"
+
+ if(holder)
+ var/new_name = trim_strip_input(src, "Enter new AI name. Leave blank or as is to cancel.", "Enter new AI Name", AI.name)
+ if(new_name && new_name != AI.name)
+ admin_log_and_message_admins("has renamed the AI '[AI.name]' to '[new_name]'")
+ AI.SetName(new_name)
+ feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
//---- bs12 verbs ----
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index bb1416dac0..7c2a12e1d5 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2399,6 +2399,16 @@
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
+ if("paintball")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","PB")
+ for(var/species in all_species)
+ var/datum/species/S = all_species[species]
+ S.blood_color = "rainbow"
+ for(var/obj/effect/decal/cleanable/blood/B in world)
+ B.basecolor = "rainbow"
+ B.update_icon()
+ message_admins("[key_name_admin(usr)] activated Paintball mode")
if("eagles")//SCRAW
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","EgL")
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 39a5fa778c..9e5260fbd6 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -1,18 +1,8 @@
-#define AHELP_ADMIN 1
-#define AHELP_MENTOR 2
-#define AHELP_DEV 3
//This is a list of words which are ignored by the parser when comparing message contents for names. MUST BE IN LOWER CASE!
var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","alien","as")
-var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHELP_MENTOR,\
- "Admin - Rule/Gameplay issue" = AHELP_ADMIN,\
- "Dev - Bug report" = AHELP_DEV)
-
-/client/proc/adminhelp_admin(message)
- adminhelp("Admin - Rule/Gameplay issue", message)
-
-/client/verb/adminhelp(selected_type in adminhelp_categories, msg as text)
+/client/verb/adminhelp(msg as text)
set category = "Admin"
set name = "Adminhelp"
@@ -27,18 +17,6 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
adminhelped = 1 //Determines if they get the message to reply by clicking the name.
- /**src.verbs -= /client/verb/adminhelp
-
- spawn(1200)
- src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps
- src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell
- **/
-
- if(!msg || alert("The following message will be sent to staff that administers\n the '[selected_type]' category:\n\n[msg]\n", "Admin Help", "Ok", "Cancel") == "Cancel")
- return
-
- var/selected_upper = uppertext(selected_type)
-
if(src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
@@ -109,62 +87,12 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
var/ai_cl
if(ai_found)
ai_cl = " (CL)"
- var/mentor_msg = "\blue [selected_upper]: [get_options_bar(mob, 0, 0, 1, 0)][ai_cl]: [msg]"
- var/dev_msg = "\blue [selected_upper]: [get_options_bar(mob, 3, 0, 1, 0)][ai_cl]: [msg]"
- msg = "\blue [selected_upper]: [get_options_bar(mob, 2, 1, 1)][ai_cl]: [msg]"
+ var/mentor_msg = "\blue Request for Help: [get_options_bar(mob, 0, 0, 1, 0)][ai_cl]: [msg]"
+ msg = "\blue Request for Help:: [get_options_bar(mob, 2, 1, 1)][ai_cl]: [msg]"
var/admin_number_afk = 0
- var/list/mentorholders = list()
- var/list/debugholders = list()
- var/list/adminholders = list()
for(var/client/X in admins)
- if(R_MENTOR & X.holder.rights && !(R_ADMIN & X.holder.rights)) // we don't want to count admins twice. This list should be JUST mentors
- mentorholders += X
- if(X.is_afk())
- admin_number_afk++
- if(R_DEBUG & X.holder.rights) // Looking for anyone with +Debug which will be admins, developers, and developer mentors
- debugholders += X
- if(!(R_ADMIN & X.holder.rights))
- if(X.is_afk())
- admin_number_afk++
- if(R_ADMIN | R_MOD & X.holder.rights) // just admins here please
- adminholders += X
- if(X.is_afk())
- admin_number_afk++
-
- switch(adminhelp_categories[selected_type])
- if(AHELP_MENTOR)
- if(mentorholders.len)
- for(var/client/X in mentorholders) // Mentors get a message without buttons and no character name
- if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << mentor_msg
- if(adminholders.len)
- for(var/client/X in adminholders) // Admins get the full monty
- if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- if(AHELP_ADMIN)
- if(adminholders.len)
- for(var/client/X in adminholders) // Admins of course get everything in their helps
- if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- if(AHELP_DEV)
- if(debugholders.len)
- for(var/client/X in debugholders)
- if(R_ADMIN | R_MOD & X.holder.rights) // Admins get every button & special highlights in theirs
- if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << msg
- else
- if (R_DEBUG & X.holder.rights) // Just devs or devmentors get non-highlighted names, but they do get JMP and VV for their bug reports.
- if(X.prefs.toggles & SOUND_ADMINHELP)
- X << 'sound/effects/adminhelp.ogg'
- X << dev_msg
-
- /*for(var/client/X in admins)
if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
@@ -173,20 +101,17 @@ var/list/adminhelp_categories = list("Mentor - Gameplay/Roleplay question" = AHE
if(X.holder.rights == R_MENTOR)
X << mentor_msg // Mentors won't see coloring of names on people with special_roles (Antags, etc.)
else
- X << msg*/
+ X << msg
//show it to the person adminhelping too
- src << "PM to-Staff ([selected_type]): [original_msg]"
+ src << "PM to-Staff : [original_msg]"
var/admin_number_present = admins.len - admin_number_afk
log_admin("HELP: [key_name(src)]: [original_msg] - heard by [admin_number_present] non-AFK admins.")
if(admin_number_present <= 0)
- send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
+ send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)] - !![admin_number_afk ? "All admins AFK ([admin_number_afk])" : "No admins online"]!!")
else
- send2adminirc("[selected_upper] from [key_name(src)]: [html_decode(original_msg)]")
+ send2adminirc("Request for Help from [key_name(src)]: [html_decode(original_msg)]")
feedback_add_details("admin_verb","AH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
-#undef AHELP_ADMIN
-#undef AHELP_MENTOR
-#undef AHELP_DEV
\ No newline at end of file
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index 0b3f82aaa1..1c358c8cf4 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -96,7 +96,7 @@
if(sender)
C.cmd_admin_pm(sender,reply) //sender is still about, let's reply to them
else
- adminhelp_admin(reply) //sender has left, adminhelp instead
+ adminhelp(reply) //sender has left, adminhelp instead
return
src << "" + create_text_tag("pm_out_alt", "PM", src) + " to [get_options_bar(C, holder ? 1 : 0, holder ? 1 : 0, 1)]: [msg]"
C << "" + create_text_tag("pm_in", "", C) + " \[[recieve_pm_type] PM\] [get_options_bar(src, C.holder ? 1 : 0, C.holder ? 1 : 0, 1)]: [msg]"
diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm
index b48651e8b7..ca4717307a 100644
--- a/code/modules/assembly/assembly.dm
+++ b/code/modules/assembly/assembly.dm
@@ -3,7 +3,7 @@
desc = "A small electronic device that should never exist."
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = ""
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
w_class = 2.0
matter = list("metal" = 100)
throwforce = 2
diff --git a/code/modules/assembly/bomb.dm b/code/modules/assembly/bomb.dm
index cb0a90c454..ed3edf5fc0 100644
--- a/code/modules/assembly/bomb.dm
+++ b/code/modules/assembly/bomb.dm
@@ -6,7 +6,7 @@
w_class = 3.0
throw_speed = 2
throw_range = 4
- flags = FPRINT | TABLEPASS| CONDUCT //Copied this from old code, so this may or may not be necessary
+ flags = CONDUCT //Copied this from old code, so this may or may not be necessary
var/status = 0 //0 - not readied //1 - bomb finished with welder
var/obj/item/device/assembly_holder/bombassembly = null //The first part of the bomb is an assembly holder, holding an igniter+some device
var/obj/item/weapon/tank/bombtank = null //the second part of the bomb is a phoron tank
diff --git a/code/modules/assembly/holder.dm b/code/modules/assembly/holder.dm
index 82f7450981..f3bf44b53b 100644
--- a/code/modules/assembly/holder.dm
+++ b/code/modules/assembly/holder.dm
@@ -3,7 +3,7 @@
icon = 'icons/obj/assemblies/new_assemblies.dmi'
icon_state = "holder"
item_state = "assembly"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
throwforce = 5
w_class = 2.0
throw_speed = 3
diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm
index 3a70e85399..89699b3427 100644
--- a/code/modules/assembly/infrared.dm
+++ b/code/modules/assembly/infrared.dm
@@ -168,7 +168,6 @@
var/visible = 0.0
var/left = null
anchored = 1.0
- flags = TABLEPASS
/obj/effect/beam/i_beam/proc/hit()
diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm
index 880424e66b..4cbef90875 100644
--- a/code/modules/assembly/shock_kit.dm
+++ b/code/modules/assembly/shock_kit.dm
@@ -6,7 +6,7 @@
var/obj/item/device/radio/electropack/part2 = null
var/status = 0
w_class = 5.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/shock_kit/Del()
del(part1)
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 3e8c8e3a3c..c83571650f 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -517,7 +517,7 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
-/datum/gear/gponcho
+/datum/gear/bponcho
display_name = "poncho, blue"
path = /obj/item/clothing/suit/poncho/blue
cost = 3
@@ -529,7 +529,7 @@ var/global/list/gear_datums = list()
cost = 3
slot = slot_wear_suit
-/datum/gear/rponcho
+/datum/gear/pponcho
display_name = "poncho, purple"
path = /obj/item/clothing/suit/poncho/purple
cost = 3
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 38b60890c0..f6dc6cc337 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -44,6 +44,9 @@
return 1
/obj/item/clothing/proc/refit_for_species(var/target_species)
+ if(!species_restricted)
+ return //this item doesn't use the species_restricted system
+
//Set species_restricted list
switch(target_species)
if("Human", "Skrell") //humanoid bodytypes
@@ -63,6 +66,9 @@
icon = initial(icon)
/obj/item/clothing/head/helmet/refit_for_species(var/target_species)
+ if(!species_restricted)
+ return //this item doesn't use the species_restricted system
+
//Set species_restricted list
switch(target_species)
if("Skrell")
@@ -225,7 +231,7 @@ BLIND // can't see anything
user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
clipped = 1
- name = "mangled [name]"
+ name = "modified [name]"
desc = "[desc]
They have had the fingertips cut off of them."
if("exclude" in species_restricted)
species_restricted -= "Unathi"
@@ -365,7 +371,6 @@ BLIND // can't see anything
icon = 'icons/obj/clothing/suits.dmi'
name = "suit"
var/fire_resist = T0C+100
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
allowed = list(/obj/item/weapon/tank/emergency_oxygen)
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
@@ -386,7 +391,6 @@ BLIND // can't see anything
name = "under"
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
permeability_coefficient = 0.90
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_ICLOTHING
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
w_class = 3
@@ -399,8 +403,6 @@ BLIND // can't see anything
*/
var/obj/item/clothing/tie/hastie = null
var/displays_id = 1
- var/rolled_down = 0
- var/basecolor
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
/obj/item/clothing/under/update_clothing_icon()
@@ -526,11 +528,14 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
- if(copytext(item_color,-2) != "_d")
- basecolor = item_color
- if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi'))
- body_parts_covered = "[basecolor]" ? LEGS|LOWER_TORSO : UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
+ if(initial(item_color) + "_d_s" in icon_states('icons/mob/uniform.dmi'))
+ if (item_color == initial(item_color))
+ body_parts_covered &= LOWER_TORSO|LEGS|FEET
+ item_color = "[initial(item_color)]_d"
+ else
+ body_parts_covered = initial(body_parts_covered)
+ item_color = initial(item_color)
+
update_clothing_icon()
else
usr << "You cannot roll down the uniform!"
diff --git a/code/modules/clothing/gloves/stungloves.dm b/code/modules/clothing/gloves/stungloves.dm
deleted file mode 100644
index 976b16e7e6..0000000000
--- a/code/modules/clothing/gloves/stungloves.dm
+++ /dev/null
@@ -1,87 +0,0 @@
-/obj/item/clothing/gloves/attackby(obj/item/weapon/W, mob/user)
- if(istype(src, /obj/item/clothing/gloves/boxing)) //quick fix for stunglove overlay not working nicely with boxing gloves.
- user << "That won't work." //i'm not putting my lips on that!
- ..()
- return
-
- //add wires
- if(istype(W, /obj/item/stack/cable_coil))
- var/obj/item/stack/cable_coil/C = W
- if (clipped)
- user << "The [src] are too badly mangled for wiring."
- return
-
- if(wired)
- user << "The [src] are already wired."
- return
-
- if(C.get_amount() < 2)
- user << "There is not enough wire to cover the [src]."
- return
-
- C.use(2)
- wired = 1
- siemens_coefficient = 3.0
- user << "You wrap some wires around the [src]."
- update_icon()
- return
-
- //add cell
- else if(istype(W, /obj/item/weapon/cell))
- if(!wired)
- user << "The [src] need to be wired first."
- else if(!cell)
- user.drop_item()
- W.loc = src
- cell = W
- user << "You attach the [cell] to the [src]."
- update_icon()
- else
- user << "A [cell] is already attached to the [src]."
- return
-
- else if(istype(W, /obj/item/weapon/wirecutters) || istype(W, /obj/item/weapon/scalpel))
-
- //stunglove stuff
- if(cell)
- cell.updateicon()
- user << "You cut the [cell] away from the [src]."
- cell.loc = get_turf(src.loc)
- cell = null
- update_icon()
- return
- if(wired) //wires disappear into the void because fuck that shit
- wired = 0
- siemens_coefficient = initial(siemens_coefficient)
- user << "You cut the wires away from the [src]."
- update_icon()
- return
-
- //clipping fingertips
- if(!clipped)
- playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
- user.visible_message("\red [user] cuts the fingertips off of the [src].","\red You cut the fingertips off of the [src].")
-
- clipped = 1
- name = "mangled [name]"
- desc = "[desc]
They have had the fingertips cut off of them."
- if("exclude" in species_restricted)
- species_restricted -= "Unathi"
- species_restricted -= "Tajara"
- return
- else
- user << "The [src] have already been clipped!"
- update_icon()
- return
-
- return
-
- ..()
-
-/obj/item/clothing/gloves/update_icon()
- ..()
- overlays.Cut()
- if(wired)
- overlays += "gloves_wire"
- if(cell)
- overlays += "gloves_cell"
diff --git a/code/modules/clothing/head/hardhat.dm b/code/modules/clothing/head/hardhat.dm
index 3fc78b871a..2034aad363 100644
--- a/code/modules/clothing/head/hardhat.dm
+++ b/code/modules/clothing/head/hardhat.dm
@@ -2,7 +2,6 @@
name = "hard hat"
desc = "A piece of headgear used in dangerous working conditions to protect the head. Comes with a built-in flashlight."
icon_state = "hardhat0_yellow"
- flags = FPRINT | TABLEPASS
item_state = "hardhat0_yellow"
brightness_on = 4 //luminosity when on
light_overlay = "hardhat_light"
@@ -21,7 +20,7 @@
item_state = "hardhat0_red"
item_color = "red"
name = "firefighter helmet"
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
@@ -29,7 +28,7 @@
icon_state = "hardhat0_white"
item_state = "hardhat0_white"
item_color = "white"
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = HEAD
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm
index 1556b01ddc..eec6c828d8 100644
--- a/code/modules/clothing/head/helmet.dm
+++ b/code/modules/clothing/head/helmet.dm
@@ -2,7 +2,7 @@
name = "helmet"
desc = "Standard Security gear. Protects the head from impacts."
icon_state = "helmet"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | THICKMATERIAL
+ flags = HEADCOVERSEYES | THICKMATERIAL
item_state = "helmet"
armor = list(melee = 50, bullet = 15, laser = 50,energy = 10, bomb = 25, bio = 0, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -39,7 +39,7 @@
desc = "It's a helmet specifically designed to protect against close range attacks."
icon_state = "riot"
item_state = "helmet"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
armor = list(melee = 82, bullet = 15, laser = 5,energy = 5, bomb = 5, bio = 2, rad = 0)
flags_inv = HIDEEARS
siemens_coefficient = 0.7
@@ -48,7 +48,7 @@
name = "\improper SWAT helmet"
desc = "They're often used by highly trained Swat Members."
icon_state = "swat"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "swat"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
@@ -60,7 +60,7 @@
name = "\improper Thunderdome helmet"
desc = "'Let the battle commence!'"
icon_state = "thunderdome"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "thunderdome"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
cold_protection = HEAD
@@ -71,7 +71,7 @@
name = "gladiator helmet"
desc = "Ave, Imperator, morituri te salutant."
icon_state = "gladiator"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state = "gladiator"
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
siemens_coefficient = 1
@@ -81,7 +81,7 @@
desc = "An armored helmet capable of being fitted with a multitude of attachments."
icon_state = "swathelm"
item_state = "helmet"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
sprite_sheets = list(
"Tajara" = 'icons/mob/species/tajaran/helmet.dmi',
"Unathi" = 'icons/mob/species/unathi/helmet.dmi',
@@ -95,7 +95,7 @@
name = "Augment Array"
desc = "A helmet with optical and cranial augments coupled to it."
icon_state = "v62"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "v62"
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
flags_inv = HIDEEARS|HIDEEYES
diff --git a/code/modules/clothing/head/jobs.dm b/code/modules/clothing/head/jobs.dm
index 36fa4823e4..a46cead9f8 100644
--- a/code/modules/clothing/head/jobs.dm
+++ b/code/modules/clothing/head/jobs.dm
@@ -6,7 +6,6 @@
icon_state = "chefhat"
item_state = "chefhat"
desc = "The commander in chef's head wear."
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
//Captain: This probably shouldn't be space-worthy
@@ -14,7 +13,6 @@
name = "captain's hat"
icon_state = "captain"
desc = "It's good being the king."
- flags = FPRINT|TABLEPASS
item_state = "caphat"
siemens_coefficient = 0.9
@@ -23,7 +21,6 @@
name = "captain's cap"
desc = "You fear to wear it for the negligence it brings."
icon_state = "capcap"
- flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
cold_protection = HEAD
@@ -36,7 +33,7 @@
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|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
body_parts_covered = HEAD|EYES
@@ -45,7 +42,7 @@
name = "nun hood"
desc = "Maximum piety in this star system."
icon_state = "nun_hood"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES|BLOCKHAIR
siemens_coefficient = 0.9
//Mime
@@ -53,7 +50,6 @@
name = "beret"
desc = "A beret, an artists favorite headwear."
icon_state = "beret"
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -62,32 +58,26 @@
name = "security beret"
desc = "A beret with the security insignia emblazoned on it. For officers that are more inclined towards style than safety."
icon_state = "beret_badge"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/alt
name = "officer beret"
desc = "A navy blue beret with an officer's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "officerberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/hos
name = "officer beret"
desc = "A navy blue beret with a commander's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "hosberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/sec/warden
name = "warden beret"
desc = "A navy blue beret with a warden's rank emblem. For officers that are more inclined towards style than safety."
icon_state = "wardenberet"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/eng
name = "engineering beret"
desc = "A beret with the engineering insignia emblazoned on it. For engineers that are more inclined towards style than safety."
icon_state = "e_beret_badge"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/head/beret/jan
name = "purple beret"
desc = "A stylish, if purple, beret."
icon_state = "purpleberet"
- flags = FPRINT | TABLEPASS
//Medical
@@ -95,7 +85,7 @@
name = "surgical cap"
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs."
icon_state = "surgcap_blue"
- flags = FPRINT | TABLEPASS | BLOCKHEADHAIR
+ flags = BLOCKHEADHAIR
/obj/item/clothing/head/surgery/purple
desc = "A cap surgeons wear during operations. Keeps their hair from tickling your internal organs. This one is deep purple."
diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm
index 991d01a216..7b13c10b4b 100644
--- a/code/modules/clothing/head/misc.dm
+++ b/code/modules/clothing/head/misc.dm
@@ -4,7 +4,6 @@
name = "\improper CentComm. hat"
icon_state = "centcom"
desc = "It's good to be emperor."
- flags = FPRINT|TABLEPASS
item_state = "centhat"
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -14,7 +13,6 @@
icon_state = "hairflower"
desc = "Smells nice."
item_state = "hairflower"
- flags = FPRINT|TABLEPASS
slot_flags = SLOT_HEAD | SLOT_EARS
body_parts_covered = 0
@@ -29,7 +27,6 @@
desc = "It's an amish looking hat."
icon_state = "tophat"
item_state = "that"
- flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -37,21 +34,18 @@
name = "redcoat's hat"
icon_state = "redcoat"
desc = "'I guess it's a redhead.'"
- flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/mailman
name = "station cap"
icon_state = "mailman"
desc = "Choo-choo!"
- flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/plaguedoctorhat
name = "plague doctor's hat"
desc = "These were once used by Plague doctors. They're pretty much useless."
icon_state = "plaguedoctor"
- flags = FPRINT | TABLEPASS
permeability_coefficient = 0.01
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -60,14 +54,13 @@
name = "hastur's hood"
desc = "It's unspeakably stylish"
icon_state = "hasturhood"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|BLOCKHAIR
+ flags = HEADCOVERSEYES|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
/obj/item/clothing/head/nursehat
name = "nurse's hat"
desc = "It allows quick identification of trained medical personnel."
icon_state = "nursehat"
- flags = FPRINT|TABLEPASS
siemens_coefficient = 0.9
body_parts_covered = 0
@@ -76,7 +69,7 @@
icon_state = "syndicate"
item_state = "syndicate"
desc = "A plastic replica of a bloodthirsty mercenary's space helmet, you'll look just like a real murderous criminal operative in this! This is a toy, it is not made for use in space!"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -85,7 +78,7 @@
name = "cueball helmet"
desc = "A large, featureless white orb mean to be worn on your head. How do you even see out of this thing?"
icon_state = "cueball"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
item_state="cueball"
flags_inv = 0
body_parts_covered = HEAD|FACE|EYES
@@ -95,7 +88,6 @@
desc = "It's a green bandana with some fine nanotech lining."
icon_state = "greenbandana"
item_state = "greenbandana"
- flags = FPRINT|TABLEPASS
flags_inv = 0
body_parts_covered = 0
@@ -104,7 +96,7 @@
desc = "A helmet made out of a box."
icon_state = "cardborg_h"
item_state = "cardborg_h"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
@@ -113,7 +105,7 @@
desc = "fight for what's righteous!"
icon_state = "justicered"
item_state = "justicered"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
/obj/item/clothing/head/justice/blue
icon_state = "justiceblue"
@@ -135,7 +127,6 @@
name = "rabbit ears"
desc = "Wearing these makes you looks useless, and only good for your sex appeal."
icon_state = "bunny"
- flags = FPRINT | TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/flatcap
@@ -170,7 +161,6 @@
desc = "Gentleman, elite aboard!"
icon_state = "bowler"
item_state = "bowler"
- flags = FPRINT | TABLEPASS
body_parts_covered = 0
//stylish bs12 hats
@@ -180,7 +170,6 @@
icon_state = "bowler_hat"
item_state = "bowler_hat"
desc = "For the gentleman of distinction."
- flags = FPRINT|TABLEPASS
body_parts_covered = 0
/obj/item/clothing/head/beaverhat
@@ -188,35 +177,30 @@
icon_state = "beaver_hat"
item_state = "beaver_hat"
desc = "Soft felt makes this hat both comfortable and elegant."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/boaterhat
name = "boater hat"
icon_state = "boater_hat"
item_state = "boater_hat"
desc = "The ultimate in summer fashion."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fedora
name = "\improper fedora"
icon_state = "fedora"
item_state = "fedora"
desc = "A sharp, stylish hat."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/feathertrilby
name = "\improper feather trilby"
icon_state = "feather_trilby"
item_state = "feather_trilby"
desc = "A sharp, stylish hat with a feather."
- flags = FPRINT|TABLEPASS
/obj/item/clothing/head/fez
name = "\improper fez"
icon_state = "fez"
item_state = "fez"
desc = "You should wear a fez. Fezzes are cool."
- flags = FPRINT|TABLEPASS
//end bs12 hats
@@ -225,7 +209,7 @@
desc = "Eeeee~heheheheheheh!"
icon_state = "witch"
item_state = "witch"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0
/obj/item/clothing/head/chicken
@@ -233,7 +217,7 @@
desc = "Bkaw!"
icon_state = "chickenhead"
item_state = "chickensuit"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 0.7
body_parts_covered = HEAD|FACE|EYES
@@ -242,7 +226,7 @@
desc = "Fuzzy."
icon_state = "bearpelt"
item_state = "bearpelt"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 0.7
/obj/item/clothing/head/xenos
@@ -250,7 +234,7 @@
icon_state = "xenos"
item_state = "xenos_helm"
desc = "A helmet made out of chitinous alien hide."
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
siemens_coefficient = 2.0
body_parts_covered = HEAD|FACE|EYES
@@ -260,7 +244,7 @@
desc = "A stylish monstrosity unearthed from Earth's Renaissance period. With this most distinguish'd wig, you'll be ready for your next soiree!"
icon_state = "philosopher_wig"
item_state = "philosopher_wig"
- flags = FPRINT | TABLEPASS | BLOCKHAIR
+ flags = BLOCKHAIR
siemens_coefficient = 2.0 //why is it so conductive?!
body_parts_covered = 0
diff --git a/code/modules/clothing/head/misc_special.dm b/code/modules/clothing/head/misc_special.dm
index ba72b92754..c824563ea8 100644
--- a/code/modules/clothing/head/misc_special.dm
+++ b/code/modules/clothing/head/misc_special.dm
@@ -15,7 +15,7 @@
name = "welding helmet"
desc = "A head-mounted face cover designed to protect the wearer completely from space-arc eye."
icon_state = "welding"
- flags = (FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH)
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH
item_state = "welding"
matter = list("metal" = 3000, "glass" = 1000)
var/up = 0
@@ -58,7 +58,7 @@
name = "cake-hat"
desc = "It's tasty looking!"
icon_state = "cake0"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
var/onfire = 0.0
var/status = 0
var/fire_resist = T0C+1300 //this is the max temp it can stand before you start to cook. although it might not burn away, you take damage
@@ -123,7 +123,7 @@
icon_state = "hardhat0_pumpkin"//Could stand to be renamed
item_state = "hardhat0_pumpkin"
item_color = "pumpkin"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH | BLOCKHAIR
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|EYES
brightness_on = 2
@@ -137,7 +137,6 @@
name = "kitty ears"
desc = "A pair of kitty ears. Meow!"
icon_state = "kitty"
- flags = FPRINT | TABLEPASS
body_parts_covered = 0
var/icon/mob
var/icon/mob2
diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm
index dcf2eb1e48..1deff69402 100644
--- a/code/modules/clothing/head/soft_caps.dm
+++ b/code/modules/clothing/head/soft_caps.dm
@@ -2,7 +2,7 @@
name = "cargo cap"
desc = "It's a baseball hat in a tasteless yellow color."
icon_state = "cargosoft"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES
+ flags = HEADCOVERSEYES
item_state = "helmet"
item_color = "cargo"
var/flipped = 0
diff --git a/code/modules/clothing/masks/boxing.dm b/code/modules/clothing/masks/boxing.dm
index eeaf55c557..dfa7e120f7 100644
--- a/code/modules/clothing/masks/boxing.dm
+++ b/code/modules/clothing/masks/boxing.dm
@@ -3,7 +3,7 @@
desc = "LOADSAMONEY"
icon_state = "balaclava"
item_state = "balaclava"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = FACE
w_class = 2
@@ -17,7 +17,7 @@
desc = "Designed to both hide identities and keep your face comfy and warm."
icon_state = "swatclava"
item_state = "balaclava"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
sprite_sheets = list(
@@ -30,7 +30,7 @@
desc = "Worn by robust fighters, flying high to defeat their foes!"
icon_state = "luchag"
item_state = "luchag"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE
w_class = 2
diff --git a/code/modules/clothing/masks/breath.dm b/code/modules/clothing/masks/breath.dm
index 2780ff4be5..a2ed54b1d4 100644
--- a/code/modules/clothing/masks/breath.dm
+++ b/code/modules/clothing/masks/breath.dm
@@ -3,7 +3,7 @@
name = "breath mask"
icon_state = "breath"
item_state = "breath"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | AIRTIGHT
+ flags = MASKCOVERSMOUTH | AIRTIGHT
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.10
diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm
index d7a20b73d0..1982409d6f 100644
--- a/code/modules/clothing/masks/gasmask.dm
+++ b/code/modules/clothing/masks/gasmask.dm
@@ -2,7 +2,7 @@
name = "gas mask"
desc = "A face-covering mask that can be connected to an air supply. Filters harmful gases from the air."
icon_state = "gas_alt"
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | BLOCK_GAS_SMOKE_EFFECT | AIRTIGHT
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = FACE|EYES
w_class = 3.0
@@ -12,6 +12,7 @@
siemens_coefficient = 0.9
var/gas_filter_strength = 1 //For gas mask filters
var/list/filtered_gases = list("phoron", "sleeping_agent")
+ armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 75, rad = 0)
/obj/item/clothing/mask/gas/filter_air(datum/gas_mixture/air)
var/datum/gas_mixture/filtered = new
@@ -32,7 +33,7 @@
desc = "A modernised version of the classic design, this mask will not only filter out phoron but it can also be connected to an air supply."
icon_state = "plaguedoctor"
item_state = "gas_mask"
- armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 75, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0)
body_parts_covered = HEAD|FACE
/obj/item/clothing/mask/gas/swat
diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm
index 3f3094c794..412f69bda6 100644
--- a/code/modules/clothing/masks/miscellaneous.dm
+++ b/code/modules/clothing/masks/miscellaneous.dm
@@ -3,7 +3,7 @@
desc = "To stop that awful noise."
icon_state = "muzzle"
item_state = "muzzle"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
body_parts_covered = 0
w_class = 2
gas_transfer_coefficient = 0.90
@@ -20,17 +20,16 @@
icon_state = "sterile"
item_state = "sterile"
w_class = 2
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
body_parts_covered = 0
gas_transfer_coefficient = 0.90
permeability_coefficient = 0.01
- armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 25, rad = 0)
+ armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 0)
/obj/item/clothing/mask/fakemoustache
name = "fake moustache"
desc = "Warning: moustache is fake."
icon_state = "fake-moustache"
- flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -38,7 +37,6 @@
name = "Snorkel"
desc = "For the Swimming Savant."
icon_state = "snorkel"
- flags = FPRINT|TABLEPASS
flags_inv = HIDEFACE
body_parts_covered = 0
@@ -49,7 +47,7 @@
desc = "A blue neck scarf."
icon_state = "blueneckscarf"
item_state = "blueneckscarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -58,7 +56,7 @@
desc = "A red and white checkered neck scarf."
icon_state = "redwhite_scarf"
item_state = "redwhite_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -67,7 +65,7 @@
desc = "A green neck scarf."
icon_state = "green_scarf"
item_state = "green_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
@@ -76,7 +74,7 @@
desc = "A stealthy, dark scarf."
icon_state = "ninja_scarf"
item_state = "ninja_scarf"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
siemens_coefficient = 0
@@ -86,7 +84,7 @@
desc = "A rubber pig mask."
icon_state = "pig"
item_state = "pig"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
w_class = 2
siemens_coefficient = 0.9
@@ -97,7 +95,7 @@
desc = "A mask made of soft vinyl and latex, representing the head of a horse."
icon_state = "horsehead"
item_state = "horsehead"
- flags = FPRINT|TABLEPASS|BLOCKHAIR
+ flags = BLOCKHAIR
flags_inv = HIDEFACE
body_parts_covered = HEAD|FACE|EYES
w_class = 2
diff --git a/code/modules/clothing/spacesuits/captain.dm b/code/modules/clothing/spacesuits/captain.dm
index 81d4ef028c..5ca604b2c0 100644
--- a/code/modules/clothing/spacesuits/captain.dm
+++ b/code/modules/clothing/spacesuits/captain.dm
@@ -4,7 +4,7 @@
icon_state = "capspace"
item_state = "capspacehelmet"
desc = "A special helmet designed for work in a hazardous, low-pressure environment. Only for the most fashionable of military figureheads."
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
flags_inv = HIDEFACE
permeability_coefficient = 0.01
armor = list(melee = 65, bullet = 50, laser = 50,energy = 25, bomb = 50, bio = 100, rad = 50)
@@ -18,7 +18,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index cc6cbd622b..e22a6044ce 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -17,7 +17,7 @@
w_class = 4
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/tank/emergency_oxygen, /obj/item/device/flashlight,/obj/item/weapon/gun/energy, /obj/item/weapon/gun/projectile, /obj/item/ammo_magazine, /obj/item/ammo_casing, /obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
slowdown = 1.5
@@ -34,7 +34,7 @@
icon_state = "deathsquad"
item_state = "deathsquad"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 100, rad = 60)
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL
siemens_coefficient = 0.6
/obj/item/clothing/head/helmet/space/deathsquad/beret
@@ -42,7 +42,7 @@
desc = "An armored beret commonly used by special operations officers."
icon_state = "beret_badge"
armor = list(melee = 65, bullet = 55, laser = 35,energy = 20, bomb = 30, bio = 30, rad = 30)
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
siemens_coefficient = 0.9
//Space santa outfit suit
@@ -50,7 +50,7 @@
name = "Santa's hat"
desc = "Ho ho ho. Merrry X-mas!"
icon_state = "santahat"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
body_parts_covered = HEAD
/obj/item/clothing/suit/space/santa
@@ -59,7 +59,7 @@
icon_state = "santa"
item_state = "santa"
slowdown = 0
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL | STOPSPRESSUREDMAGE
+ flags = ONESIZEFITSALL | STOPSPRESSUREDMAGE
allowed = list(/obj/item) //for stuffing exta special presents
@@ -70,7 +70,7 @@
icon_state = "pirate"
item_state = "pirate"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30)
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
+ flags = HEADCOVERSEYES | BLOCKHAIR | STOPSPRESSUREDMAGE
body_parts_covered = 0
siemens_coefficient = 0.9
diff --git a/code/modules/clothing/spacesuits/rig/modules/combat.dm b/code/modules/clothing/spacesuits/rig/modules/combat.dm
index f8457375cc..605bff6be8 100644
--- a/code/modules/clothing/spacesuits/rig/modules/combat.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/combat.dm
@@ -111,6 +111,16 @@
gun.Fire(target,holder.wearer)
return 1
+/obj/item/rig_module/mounted/egun
+
+ name = "mounted energy gun"
+ desc = "A forearm-mounted energy projector."
+
+ interface_name = "mounted energy gun"
+ interface_desc = "A forearm-mounted suit-powered energy gun."
+
+ gun_type = /obj/item/weapon/gun/energy/gun/mounted
+
/obj/item/rig_module/mounted/taser
name = "mounted taser"
@@ -124,7 +134,7 @@
interface_name = "mounted energy gun"
interface_desc = "A shoulder-mounted cell-powered energy gun."
- gun_type = /obj/item/weapon/gun/energy/gun/mounted
+ gun_type = /obj/item/weapon/gun/energy/taser/mounted
/obj/item/rig_module/mounted/energy_blade
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index 1b2befa59a..3d66c64602 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -334,6 +334,7 @@
var/atom/interfaced_with // Currently draining power from this device.
var/total_power_drained = 0
+ var/drain_loc
/obj/item/rig_module/power_sink/deactivate()
@@ -373,6 +374,7 @@
H << "You begin draining power from [target]!"
interfaced_with = target
+ drain_loc = interfaced_with.loc
holder.spark_system.start()
playsound(H.loc, 'sound/effects/sparks2.ogg', 50, 1)
@@ -406,7 +408,7 @@
drain_complete(H)
return
- if(!interfaced_with || !interfaced_with.Adjacent(H))
+ if(!interfaced_with || !interfaced_with.Adjacent(H) || !(interfaced_with.loc == drain_loc))
H << "Your power sink retracts into its casing."
drain_complete(H)
return
@@ -427,8 +429,6 @@
holder.cell.give(target_drained * CELLRATE)
total_power_drained += target_drained
-
-
return 1
/obj/item/rig_module/power_sink/proc/drain_complete(var/mob/living/M)
@@ -439,5 +439,6 @@
if(M) M << "Total power drained from [interfaced_with]: [round(total_power_drained/1000)]kJ."
interfaced_with.drain_power(0,1,0) // Damage the victim.
+ drain_loc = null
interfaced_with = null
total_power_drained = 0
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/modules/modules.dm b/code/modules/clothing/spacesuits/rig/modules/modules.dm
index b0ba99016e..830e0d784c 100644
--- a/code/modules/clothing/spacesuits/rig/modules/modules.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/modules.dm
@@ -147,6 +147,14 @@
usr << "The suit is not initialized."
return 0
+ if(usr.lying || usr.stat || usr.stunned || usr.paralysis)
+ usr << "You cannot use the suit in this state."
+ return 0
+
+ if(holder.wearer && holder.wearer.lying)
+ usr << "The suit cannot function while the wearer is prone."
+ return 0
+
if(holder.security_check_enabled && !holder.check_suit_access(usr))
usr << "Access denied."
return
diff --git a/code/modules/clothing/spacesuits/rig/modules/ninja.dm b/code/modules/clothing/spacesuits/rig/modules/ninja.dm
index 12ea8e7fb2..6d572cdcb3 100644
--- a/code/modules/clothing/spacesuits/rig/modules/ninja.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/ninja.dm
@@ -19,6 +19,7 @@
use_power_cost = 5
active_power_cost = 1
passive_power_cost = 0
+ module_cooldown = 30
activate_string = "Enable Cloak"
deactivate_string = "Disable Cloak"
diff --git a/code/modules/clothing/spacesuits/rig/modules/rig_weapons.dm b/code/modules/clothing/spacesuits/rig/modules/rig_weapons.dm
new file mode 100644
index 0000000000..d8373e8bbe
--- /dev/null
+++ b/code/modules/clothing/spacesuits/rig/modules/rig_weapons.dm
@@ -0,0 +1,51 @@
+//Weapon types intended to be used with rig modules
+
+/obj/item/weapon/gun/energy/lasercannon/mounted/load_into_chamber()
+ if(in_chamber)
+ return 1
+ var/obj/item/rig_module/module = loc
+ if(!istype(module))
+ return 0
+ if(module.holder && module.holder.wearer)
+ var/mob/living/carbon/human/H = module.holder.wearer
+ if(istype(H) && 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)
+ return 1
+ return 0
+
+/obj/item/weapon/gun/energy/gun/mounted/load_into_chamber()
+ if(in_chamber)
+ return 1
+ var/obj/item/rig_module/module = loc
+ if(!istype(module))
+ return 0
+ if(module.holder && module.holder.wearer)
+ var/mob/living/carbon/human/H = module.holder.wearer
+ if(istype(H) && 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)
+ in_chamber = new prog_path(src)
+ return 1
+ return 0
+
+/obj/item/weapon/gun/energy/taser/mounted/load_into_chamber()
+ if(in_chamber)
+ return 1
+ var/obj/item/rig_module/module = loc
+ if(!istype(module))
+ return 0
+ if(module.holder && module.holder.wearer)
+ var/mob/living/carbon/human/H = module.holder.wearer
+ if(istype(H) && 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)
+ in_chamber = new prog_path(src)
+ return 1
+ return 0
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index dd0d073cd2..4c7735974c 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -138,7 +138,7 @@
piece.name = "[suit_type] [initial(piece.name)]"
piece.desc = "It seems to be part of a [src.name]."
piece.icon_state = "[initial(icon_state)]"
- piece.armor = armor
+ piece.armor = armor.Copy()
piece.min_cold_protection_temperature = min_cold_protection_temperature
piece.max_heat_protection_temperature = max_heat_protection_temperature
piece.siemens_coefficient = siemens_coefficient
@@ -227,7 +227,7 @@
if(!failed_to_seal && M.back == src && piece == compare_piece)
if(!instant)
- if(!do_after(M,SEAL_DELAY))
+ if(!do_after(M,SEAL_DELAY,needhand=0))
failed_to_seal = 1
piece.icon_state = "[initial(icon_state)][!seal_target ? "_sealed" : ""]"
@@ -251,6 +251,13 @@
else
helmet.flags &= ~AIRTIGHT
helmet.update_light(wearer)
+
+ //sealed pieces become airtight, protecting against diseases
+ if (!seal_target)
+ piece.armor["bio"] = 100
+ else
+ piece.armor["bio"] = src.armor["bio"]
+
else
failed_to_seal = 1
@@ -508,6 +515,8 @@
return
if(href_list["toggle_piece"])
+ if(ishuman(usr) && (usr.stat || usr.stunned || usr.lying))
+ return 0
toggle_piece(href_list["toggle_piece"], usr)
else if(href_list["toggle_seals"])
toggle_seals(usr)
@@ -536,7 +545,7 @@
usr.set_machine(src)
src.add_fingerprint(usr)
- return
+ return 1
/obj/item/weapon/rig/proc/notify_ai(var/message)
if(!message || !installed_modules || !installed_modules.len)
@@ -572,6 +581,9 @@
if(!istype(wearer) || !wearer.back == src)
return
+ if(usr == wearer && (usr.stat||usr.paralysis||usr.stunned)) // If the usr isn't wearing the suit it's probably an AI.
+ return
+
var/obj/item/check_slot
var/equip_to
var/obj/item/use_obj
diff --git a/code/modules/clothing/spacesuits/rig/rig_attackby.dm b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
index 061973c137..c0d119b0b4 100644
--- a/code/modules/clothing/spacesuits/rig/rig_attackby.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_attackby.dm
@@ -180,7 +180,7 @@
installed_modules -= removed
update_icon()
- return
+ return
// If we've gotten this far, all we have left to do before we pass off to root procs
// is check if any of the loaded modules want to use the item we've been given.
diff --git a/code/modules/clothing/spacesuits/rig/rig_pieces.dm b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
index 314af42e07..de18d5e020 100644
--- a/code/modules/clothing/spacesuits/rig/rig_pieces.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_pieces.dm
@@ -4,7 +4,7 @@
/obj/item/clothing/head/helmet/space/rig
name = "helmet"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | THICKMATERIAL
flags_inv = HIDEEARS|HIDEEYES|HIDEFACE
body_parts_covered = HEAD|FACE|EYES
heat_protection = HEAD|FACE|EYES
@@ -14,7 +14,7 @@
/obj/item/clothing/gloves/rig
name = "gauntlets"
- flags = FPRINT | TABLEPASS | THICKMATERIAL
+ flags = THICKMATERIAL
body_parts_covered = HANDS
heat_protection = HANDS
cold_protection = HANDS
@@ -36,7 +36,7 @@
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
cold_protection = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
flags_inv = HIDEJUMPSUIT|HIDETAIL
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
slowdown = 0
breach_threshold = 35
can_breach = 1
diff --git a/code/modules/clothing/spacesuits/rig/rig_verbs.dm b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
index 9ec6f03df7..ce20244734 100644
--- a/code/modules/clothing/spacesuits/rig/rig_verbs.dm
+++ b/code/modules/clothing/spacesuits/rig/rig_verbs.dm
@@ -120,8 +120,8 @@
/obj/item/weapon/rig/verb/toggle_seals_verb()
- set name = "Toggle Seals"
- set desc = "Activates or deactivates your rig seals."
+ set name = "Toggle Hardsuit"
+ set desc = "Activates or deactivates your rig."
set category = "Hardsuit"
set src = usr.contents
@@ -208,6 +208,8 @@
var/obj/item/rig_module/module = input("Which module do you wish to select?") as null|anything in selectable
if(!istype(module))
+ selected_module = null
+ usr << "Primary system is now: deselected."
return
selected_module = module
diff --git a/code/modules/clothing/spacesuits/rig/suits/ert.dm b/code/modules/clothing/spacesuits/rig/suits/ert.dm
index 4935d793cf..d3db4baf84 100644
--- a/code/modules/clothing/spacesuits/rig/suits/ert.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/ert.dm
@@ -23,7 +23,6 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/datajack,
- /obj/item/rig_module/mounted
)
/obj/item/weapon/rig/ert/engineer
@@ -62,5 +61,5 @@
/obj/item/rig_module/ai_container,
/obj/item/rig_module/maneuvering_jets,
/obj/item/rig_module/grenade_launcher,
- /obj/item/rig_module/mounted
+ /obj/item/rig_module/mounted/egun,
)
\ No newline at end of file
diff --git a/code/modules/clothing/spacesuits/rig/suits/light.dm b/code/modules/clothing/spacesuits/rig/suits/light.dm
index 3568a4b64d..c20371071b 100644
--- a/code/modules/clothing/spacesuits/rig/suits/light.dm
+++ b/code/modules/clothing/spacesuits/rig/suits/light.dm
@@ -7,7 +7,7 @@
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/cell)
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
slowdown = 0
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL
offline_slowdown = 0
offline_vision_restriction = 0
@@ -46,7 +46,7 @@
/obj/item/clothing/head/helmet/space/rig/mask
name = "mask"
- flags = FPRINT | TABLEPASS | THICKMATERIAL
+ flags = THICKMATERIAL
/obj/item/weapon/rig/light/ninja
name = "ominous suit control module"
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index 2ffe521d19..605a40a1b6 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -6,7 +6,7 @@
name = "Space helmet"
icon_state = "space"
desc = "A special helmet designed for work in a hazardous, low-pressure environment."
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
+ flags = HEADCOVERSEYES | BLOCKHAIR | HEADCOVERSMOUTH | STOPSPRESSUREDMAGE | THICKMATERIAL | AIRTIGHT
item_state = "space"
permeability_coefficient = 0.01
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
@@ -53,7 +53,7 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit)
slowdown = 3
diff --git a/code/modules/clothing/spacesuits/void/void.dm b/code/modules/clothing/spacesuits/void/void.dm
index a1e6ab2714..1cab4a659c 100644
--- a/code/modules/clothing/spacesuits/void/void.dm
+++ b/code/modules/clothing/spacesuits/void/void.dm
@@ -55,6 +55,13 @@
var/obj/item/clothing/shoes/magboots/boots = null // Deployable boots, if any.
var/obj/item/clothing/head/helmet/helmet = null // Deployable helmet, if any.
+/obj/item/clothing/suit/space/void/refit_for_species(var/target_species)
+ ..()
+ if(istype(helmet))
+ helmet.refit_for_species(target_species)
+ if(istype(boots))
+ boots.refit_for_species(target_species)
+
/obj/item/clothing/suit/space/void/equipped(mob/M)
..()
@@ -68,20 +75,15 @@
if(helmet)
if(H.head)
M << "You are unable to deploy your suit's helmet as \the [H.head] is in the way."
- else
+ else if (H.equip_to_slot_if_possible(helmet, slot_head))
M << "Your suit's helmet deploys with a hiss."
- //TODO: Species check, skull damage for forcing an unfitting helmet on?
- helmet.loc = H
- H.equip_to_slot(helmet, slot_head)
helmet.canremove = 0
if(boots)
if(H.shoes)
M << "You are unable to deploy your suit's magboots as \the [H.shoes] are in the way."
- else
+ else if (H.equip_to_slot_if_possible(boots, slot_shoes))
M << "Your suit's boots deploy with a hiss."
- boots.loc = H
- H.equip_to_slot(boots, slot_shoes)
boots.canremove = 0
/obj/item/clothing/suit/space/void/dropped()
@@ -132,12 +134,10 @@
if(H.head)
H << "You cannot deploy your helmet while wearing another helmet."
return
- //TODO: Species check, skull damage for forcing an unfitting helmet on?
- helmet.loc = H
- helmet.pickup(H)
- H.equip_to_slot(helmet, slot_head)
- helmet.canremove = 0
- H << "You deploy your suit helmet, sealing you off from the world."
+ if(H.equip_to_slot_if_possible(helmet, slot_head))
+ helmet.pickup(H)
+ helmet.canremove = 0
+ H << "You deploy your suit helmet, sealing you off from the world."
helmet.update_light(H)
/obj/item/clothing/suit/space/void/attackby(obj/item/W as obj, mob/user as mob)
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index f5c9f4501e..9be723a72f 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -2,7 +2,7 @@
/obj/item/clothing/suit/armor
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/gun/projectile,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs)
body_parts_covered = UPPER_TORSO|LOWER_TORSO
- flags = FPRINT | TABLEPASS | THICKMATERIAL
+ flags = THICKMATERIAL
cold_protection = UPPER_TORSO|LOWER_TORSO
min_cold_protection_temperature = ARMOR_MIN_COLD_PROTECTION_TEMPERATURE
@@ -17,7 +17,7 @@
icon_state = "armor"
item_state = "armor"
blood_overlay_type = "armor"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/vest/security
@@ -71,7 +71,7 @@
item_state = "swat_suit"
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | THICKMATERIAL
+ flags = STOPSPRESSUREDMAGE | THICKMATERIAL
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
allowed = list(/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
slowdown = 1
@@ -98,7 +98,7 @@
icon_state = "detective-armor"
item_state = "armor"
blood_overlay_type = "armor"
- flags = FPRINT | TABLEPASS | ONESIZEFITSALL
+ flags = ONESIZEFITSALL
body_parts_covered = UPPER_TORSO|LOWER_TORSO
armor = list(melee = 50, bullet = 15, laser = 50, energy = 10, bomb = 25, bio = 0, rad = 0)
@@ -113,7 +113,6 @@
item_state = "reactiveoff"
blood_overlay_type = "armor"
slowdown = 1
- flags = FPRINT | TABLEPASS
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/suit/armor/reactive/IsShield()
diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm
index b3911d8d68..037eb6833e 100644
--- a/code/modules/clothing/suits/bio.dm
+++ b/code/modules/clothing/suits/bio.dm
@@ -4,7 +4,7 @@
icon_state = "bio"
desc = "A hood that protects the head and face from biological comtaminants."
permeability_coefficient = 0.01
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 20)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -18,7 +18,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
slowdown = 1.0
allowed = list(/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/pen,/obj/item/device/flashlight/pen)
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index aa530f7567..a861930f73 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -36,7 +36,6 @@
desc = "Yarr."
icon_state = "pirate"
item_state = "pirate"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
@@ -45,7 +44,6 @@
desc = "Yarr."
icon_state = "hgpirate"
item_state = "hgpirate"
- flags = FPRINT | TABLEPASS
flags_inv = HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|LEGS
@@ -55,7 +53,7 @@
desc = "Suit for a cyborg costume."
icon_state = "death"
item_state = "death"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
fire_resist = T0C+5200
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -65,7 +63,6 @@
desc = "A heavy great coat"
icon_state = "nazi"
item_state = "nazi"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/johnny_coat
@@ -73,7 +70,6 @@
desc = "Johnny~~"
icon_state = "johnny"
item_state = "johnny"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/justice
@@ -81,7 +77,6 @@
desc = "This pretty much looks ridiculous."
icon_state = "justice"
item_state = "justice"
- flags = FPRINT | TABLEPASS
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -91,7 +86,6 @@
desc = "This robe commands authority."
icon_state = "judge"
item_state = "judge"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
allowed = list(/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/spacecash)
flags_inv = HIDEJUMPSUIT
@@ -120,7 +114,6 @@
item_state = "space_suit_syndicate"
desc = "A plastic replica of the syndicate space suit, you'll look just like a real murderous syndicate agent in this! This is a toy, it is not made for use in space!"
w_class = 3
- flags = FPRINT | TABLEPASS
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/toy)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS|HANDS|LEGS|FEET
@@ -223,21 +216,18 @@
desc = "A long, thick black leather coat."
icon_state = "leathercoat"
item_state = "leathercoat"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/browncoat
name = "brown leather coat"
desc = "A long, brown leather coat."
icon_state = "browncoat"
item_state = "browncoat"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/suit/neocoat
name = "black coat"
desc = "A flowing, black coat."
icon_state = "neocoat"
item_state = "neocoat"
- flags = FPRINT | TABLEPASS
//stripper
/obj/item/clothing/under/stripper
@@ -361,7 +351,6 @@
desc = "A thick, well-worn WW2 leather bomber jacket."
icon_state = "bomber"
item_state = "bomber"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|ARMS
cold_protection = UPPER_TORSO|ARMS
min_cold_protection_temperature = T0C - 20
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index e75b312690..d0138b283b 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -21,7 +21,7 @@
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/weapon/extinguisher)
slowdown = 1.0
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT|HIDETAIL
- flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE
+ flags = STOPSPRESSUREDMAGE
heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -47,7 +47,7 @@
name = "bomb hood"
desc = "Use in case of bomb."
icon_state = "bombsuit"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES
body_parts_covered = HEAD|FACE|EYES
@@ -62,7 +62,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS
slowdown = 2
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 100, bio = 0, rad = 0)
flags_inv = HIDEJUMPSUIT|HIDETAIL
@@ -89,7 +88,7 @@
name = "Radiation Hood"
icon_state = "rad"
desc = "A hood with radiation protective properties. Label: Made with lead, do not eat insulation"
- flags = FPRINT|TABLEPASS|HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
+ flags = HEADCOVERSEYES|HEADCOVERSMOUTH|BLOCKHAIR
body_parts_covered = HEAD|FACE|EYES
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 60, rad = 100)
diff --git a/code/modules/clothing/under/color.dm b/code/modules/clothing/under/color.dm
index 1b4617afc6..483974f7a2 100644
--- a/code/modules/clothing/under/color.dm
+++ b/code/modules/clothing/under/color.dm
@@ -3,7 +3,6 @@
icon_state = "black"
item_state = "bl_suit"
item_color = "black"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/blackf
name = "feminine black jumpsuit"
@@ -17,21 +16,18 @@
icon_state = "blue"
item_state = "b_suit"
item_color = "blue"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/green
name = "green jumpsuit"
icon_state = "green"
item_state = "g_suit"
item_color = "green"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/grey
name = "grey jumpsuit"
icon_state = "grey"
item_state = "gy_suit"
item_color = "grey"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/orange
name = "orange jumpsuit"
@@ -41,35 +37,30 @@
item_color = "orange"
has_sensor = 2
sensor_mode = 3
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/pink
name = "pink jumpsuit"
icon_state = "pink"
item_state = "p_suit"
item_color = "pink"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/red
name = "red jumpsuit"
icon_state = "red"
item_state = "r_suit"
item_color = "red"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/white
name = "white jumpsuit"
icon_state = "white"
item_state = "w_suit"
item_color = "white"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/color/yellow
name = "yellow jumpsuit"
icon_state = "yellow"
item_state = "y_suit"
item_color = "yellow"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/psyche
name = "psychedelic jumpsuit"
@@ -88,7 +79,6 @@
desc = "aqua"
icon_state = "aqua"
item_color = "aqua"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/purple
name = "purple jumpsuit"
@@ -120,14 +110,12 @@
desc = "lightbrown"
icon_state = "lightbrown"
item_color = "lightbrown"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/brown
name = "brown jumpsuit"
desc = "brown"
icon_state = "brown"
item_color = "brown"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/yellowgreen
name = "yellowgreen jumpsuit"
@@ -140,7 +128,6 @@
desc = "darkblue"
icon_state = "darkblue"
item_color = "darkblue"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lightred
name = "lightred jumpsuit"
@@ -153,4 +140,3 @@
desc = "darkred"
icon_state = "darkred"
item_color = "darkred"
- flags = FPRINT | TABLEPASS
diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm
index dc6149562d..9ac511b4f7 100644
--- a/code/modules/clothing/under/jobs/civilian.dm
+++ b/code/modules/clothing/under/jobs/civilian.dm
@@ -6,7 +6,6 @@
icon_state = "ba_suit"
item_state = "ba_suit"
item_color = "ba_suit"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/captain //Alright, technically not a 'civilian' but its better then giving a .dm file for a single define.
@@ -15,7 +14,6 @@
icon_state = "captain"
item_state = "caparmor"
item_color = "captain"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/cargo
@@ -32,7 +30,6 @@
icon_state = "cargotech"
item_state = "lb_suit"
item_color = "cargo"
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
@@ -42,7 +39,6 @@
icon_state = "chaplain"
item_state = "bl_suit"
item_color = "chapblack"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chef
@@ -50,7 +46,6 @@
name = "chef's uniform"
icon_state = "chef"
item_color = "chef"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/clown
@@ -59,7 +54,6 @@
icon_state = "clown"
item_state = "clown"
item_color = "clown"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/head_of_personnel
@@ -68,7 +62,6 @@
icon_state = "hop"
item_state = "b_suit"
item_color = "hop"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/head_of_personnel_whimsy
desc = "A blue jacket and red tie, with matching red cuffs! Snazzy. Wearing this makes you feel more important than your job title does."
@@ -76,7 +69,6 @@
icon_state = "hopwhimsy"
item_state = "hopwhimsy"
item_color = "hopwhimsy"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/hydroponics
@@ -86,7 +78,6 @@
item_state = "g_suit"
item_color = "hydroponics"
permeability_coefficient = 0.50
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/internalaffairs
@@ -95,7 +86,6 @@
icon_state = "internalaffairs"
item_state = "internalaffairs"
item_color = "internalaffairs"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/janitor
@@ -104,13 +94,11 @@
icon_state = "janitor"
item_color = "janitor"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer
desc = "Slick threads."
name = "Lawyer suit"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/lawyer/black
@@ -176,7 +164,6 @@
icon_state = "mime"
item_state = "mime"
item_color = "mime"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/miner
desc = "It's a snappy jumpsuit with a sturdy set of overalls. It is very dirty."
diff --git a/code/modules/clothing/under/jobs/engineering.dm b/code/modules/clothing/under/jobs/engineering.dm
index f348b801a5..0b8cebe57a 100644
--- a/code/modules/clothing/under/jobs/engineering.dm
+++ b/code/modules/clothing/under/jobs/engineering.dm
@@ -6,7 +6,6 @@
item_state = "g_suit"
item_color = "chief"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/atmospheric_technician
desc = "It's a jumpsuit worn by atmospheric technicians."
@@ -14,7 +13,6 @@
icon_state = "atmos"
item_state = "atmos_suit"
item_color = "atmos"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/engineer
desc = "It's an orange high visibility jumpsuit worn by engineers. It has minor radiation shielding."
@@ -23,7 +21,6 @@
item_state = "engi_suit"
item_color = "engine"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 10)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/roboticist
desc = "It's a slimming black with reinforced seams; great for industrial work."
diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm
index 8a09e0ce57..40bc087429 100644
--- a/code/modules/clothing/under/jobs/medsci.dm
+++ b/code/modules/clothing/under/jobs/medsci.dm
@@ -8,7 +8,6 @@
item_state = "g_suit"
item_color = "director"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/research_director/rdalt
desc = "A dress suit and slacks stained with hard work and dedication to science. Perhaps other things as well, but mostly hard work and dedication."
@@ -17,7 +16,6 @@
item_state = "rdalt"
item_color = "rdalt"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/research_director/dress_rd
name = "research director dress uniform"
@@ -25,7 +23,6 @@
icon_state = "dress_rd"
item_color = "dress_rd"
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
/obj/item/clothing/under/rank/scientist
@@ -36,7 +33,6 @@
item_color = "sciencewhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 10, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/chemist
@@ -68,7 +64,6 @@
item_color = "geneticswhite"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/virologist
desc = "It's made of a special fiber that gives special protection against biohazards. It has a virologist rank stripe on it."
@@ -116,28 +111,24 @@
item_color = "medical"
permeability_coefficient = 0.50
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/blue
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in baby blue."
icon_state = "scrubsblue"
item_color = "scrubsblue"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/green
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in dark green."
icon_state = "scrubsgreen"
item_color = "scrubsgreen"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/medical/purple
name = "medical scrubs"
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is in deep purple."
icon_state = "scrubspurple"
item_color = "scrubspurple"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych
desc = "A basic white jumpsuit. It has turqouise markings that denote the wearer as a psychiatrist."
@@ -145,7 +136,6 @@
icon_state = "psych"
item_state = "w_suit"
item_color = "psych"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/psych/turtleneck
desc = "A turqouise turtleneck and a pair of dark blue slacks, belonging to a psychologist."
@@ -153,7 +143,6 @@
icon_state = "psychturtle"
item_state = "b_suit"
item_color = "psychturtle"
- flags = FPRINT | TABLEPASS
/*
diff --git a/code/modules/clothing/under/jobs/security.dm b/code/modules/clothing/under/jobs/security.dm
index f17832d7be..51464410a8 100644
--- a/code/modules/clothing/under/jobs/security.dm
+++ b/code/modules/clothing/under/jobs/security.dm
@@ -15,7 +15,6 @@
item_state = "r_suit"
item_color = "warden"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security
@@ -25,7 +24,6 @@
item_state = "r_suit"
item_color = "secred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/dispatch
@@ -35,7 +33,6 @@
item_state = "dispatch"
item_color = "dispatch"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS
siemens_coefficient = 0.9
@@ -46,7 +43,6 @@
item_state = "r_suit"
item_color = "redshirt2"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/rank/security/corp
@@ -66,7 +62,6 @@
item_state = "swatunder"
item_color = "swatunder"
armor = list(melee = 10, bullet = 5, laser = 5,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/*
@@ -79,7 +74,6 @@
item_state = "det"
item_color = "detective"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.9
/obj/item/clothing/under/det/black
@@ -122,7 +116,6 @@
item_state = "r_suit"
item_color = "hosred"
armor = list(melee = 10, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
- flags = FPRINT | TABLEPASS
siemens_coefficient = 0.8
/obj/item/clothing/under/rank/head_of_security/corp
@@ -134,7 +127,7 @@
name = "Head of Security Hat"
desc = "The hat of the Head of Security. For showing the officers who's in charge."
icon_state = "hoscap"
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES
+ flags = HEADCOVERSEYES
armor = list(melee = 80, bullet = 60, laser = 50,energy = 10, bomb = 25, bio = 10, rad = 0)
flags_inv = HIDEEARS
body_parts_covered = 0
diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm
index 6daa904453..ac8db0967b 100644
--- a/code/modules/clothing/under/miscellaneous.dm
+++ b/code/modules/clothing/under/miscellaneous.dm
@@ -31,7 +31,6 @@
name = "amish suit"
icon_state = "sl_suit"
item_color = "sl_suit"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/waiter
name = "waiter's outfit"
@@ -39,7 +38,6 @@
icon_state = "waiter"
item_state = "waiter"
item_color = "waiter"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/rank/mailman
name = "mailman's jumpsuit"
@@ -93,7 +91,6 @@
w_class = 4//bulky item
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.02
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | ARMS //Needs gloves and shoes with cold protection to be fully protected.
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
@@ -106,7 +103,6 @@
desc = "it's a cybernetically enhanced jumpsuit used for administrative duties."
gas_transfer_coefficient = 0.01
permeability_coefficient = 0.01
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
armor = list(melee = 100, bullet = 100, laser = 100,energy = 100, bomb = 100, bio = 100, rad = 100)
cold_protection = UPPER_TORSO | LOWER_TORSO | LEGS | FEET | ARMS | HANDS
@@ -118,7 +114,6 @@
desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!"
icon_state = "owl"
item_color = "owl"
- flags = FPRINT | TABLEPASS
/obj/item/clothing/under/johnny
name = "johnny~~ jumpsuit"
diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm
index 0644af853d..494cb5e72a 100644
--- a/code/modules/clothing/under/shorts.dm
+++ b/code/modules/clothing/under/shorts.dm
@@ -2,7 +2,6 @@
name = "athletic shorts"
desc = "95% Polyester, 5% Spandex!"
gender = PLURAL
- flags = FPRINT | TABLEPASS
body_parts_covered = LOWER_TORSO
/obj/item/clothing/under/shorts/red
diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm
index b70df2c84b..050a2716e0 100644
--- a/code/modules/clothing/under/ties.dm
+++ b/code/modules/clothing/under/ties.dm
@@ -5,7 +5,6 @@
icon_state = "bluetie"
item_state = "" //no inhands
item_color = "bluetie"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_TIE
w_class = 2.0
var/obj/item/clothing/under/has_suit = null //the suit the tie may be attached to
diff --git a/code/modules/customitems/item_defines.dm b/code/modules/customitems/item_defines.dm
index 4d91497636..510417c0fb 100644
--- a/code/modules/customitems/item_defines.dm
+++ b/code/modules/customitems/item_defines.dm
@@ -407,7 +407,6 @@
item_state = "ciglit"
w_class = 1
body_parts_covered = null
- flags = FPRINT|TABLEPASS
//Strange penlight, Nerezza: Asher Spock
@@ -787,7 +786,6 @@
name = "colonial marine beret"
desc = "A well-worn navy blue beret. The insignia of the Martian Colonial Marine Corps is affixed to the front."
icon_state = "officerberet"
- flags = FPRINT | TABLEPASS
////////////////////////////// Serithi - Adapted Security Helmet //////////////////////////////
@@ -841,7 +839,6 @@
/obj/item/weapon/reagent_containers/glass/bottle/fluff/nashi_bottle
icon = 'icons/obj/chemical.dmi'
- flags = FPRINT | TABLEPASS //Starting them with lids on them. Safety first!
New(loc, var/color, var/labeled)
..()
name = "[labeled] bottle"
@@ -1073,7 +1070,6 @@
item_color = "jane_sid_suit"
has_sensor = 2
sensor_mode = 3
- flags = FPRINT | TABLEPASS
//Suit roll-down toggle.
/obj/item/clothing/under/fluff/jane_sidsuit/verb/toggle_zipper()
@@ -1137,7 +1133,6 @@
icon_state = "radi_pendant"
item_state = "radi_pendant"
item_color = "radi_pendant"
- flags = FPRINT|TABLEPASS
w_class = 2.0
//////////// Masks ////////////
@@ -1149,7 +1144,7 @@
icon = 'icons/obj/custom_items.dmi'
icon_state = "flagmask"
item_state = "flagmask"
- flags = FPRINT|TABLEPASS|MASKCOVERSMOUTH
+ flags = MASKCOVERSMOUTH
w_class = 2
gas_transfer_coefficient = 0.90
*/
@@ -1159,7 +1154,6 @@
desc = "A silver and emerald shamrock pendant. It has the initials \"M.K.\" engraved on the back."
icon = 'icons/obj/custom_items.dmi'
icon_state = "mara_kilpatrick_1"
- flags = FPRINT|TABLEPASS
w_class = 2
/////////////// Oen'g Issek Medical Mask //////////////////////////
@@ -1182,7 +1176,6 @@
item_state = "altair_locket"
item_color = "altair_locket"
slot_flags = 0
- flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1196,7 +1189,6 @@
item_state = "konaahirano"
item_color = "konaahirano"
slot_flags = 0
- flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
var/obj/item/held //Item inside locket.
@@ -1226,7 +1218,6 @@
desc = "This silvered medallion bears the symbol of the Hadii Clan of the Tajaran."
icon = 'icons/obj/custom_items.dmi'
icon_state = "nasir_khayyam_1"
- flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK | SLOT_TIE
@@ -1237,7 +1228,6 @@
desc = "A brass necklace with a green emerald placed at the end. It has a small inscription on the top of the chain, saying \'Foster\'"
icon = 'icons/obj/custom_items.dmi'
icon_state = "ty_foster"
- flags = FPRINT|TABLEPASS
w_class = 2
////// Apollon Pendant - Michael Guess - Dragor23
@@ -1246,7 +1236,6 @@
desc = "A pendant with the form of a sacrificial tripod, used in acient greece. It's a symbol of the Olympian Apollon, a god associated with oracles, poetry, the sun and healing."
icon = 'icons/obj/custom_items.dmi'
icon_state = "michael_guess_1"
- flags = FPRINT|TABLEPASS
w_class = 2
slot_flags = SLOT_MASK
body_parts_covered = 0
diff --git a/code/modules/detectivework/evidence.dm b/code/modules/detectivework/evidence.dm
index db66c42521..f115d9f9a9 100644
--- a/code/modules/detectivework/evidence.dm
+++ b/code/modules/detectivework/evidence.dm
@@ -122,6 +122,18 @@
throw_speed = 3
throw_range = 5
+/obj/item/weapon/f_card/add_fingerprint(mob/living/M as mob, ignoregloves = 0)
+ if(..())
+ var/mob/living/carbon/human/H = M
+ var/full_print = md5(H.dna.uni_identity)
+ fingerprints[full_print] = full_print
+
+/obj/item/weapon/f_card/examine(mob/user)
+ ..()
+ if(fingerprints.len)
+ user << "Fingerprints on this card:"
+ for(var/print in fingerprints)
+ user << "\t[fingerprints[print]]"
/obj/item/weapon/fcardholder
name = "fingerprint card case"
diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm
index 70c4dbca45..59b97ebb7c 100644
--- a/code/modules/detectivework/footprints_and_rag.dm
+++ b/code/modules/detectivework/footprints_and_rag.dm
@@ -23,7 +23,7 @@
possible_transfer_amounts = list(5)
volume = 5
can_be_placed_into = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER | NOBLUDGEON
+ flags = OPENCONTAINER | NOBLUDGEON
/obj/item/weapon/reagent_containers/glass/rag/attack_self(mob/user as mob)
return
diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm
index 2610a5c24a..bca3090c3f 100644
--- a/code/modules/detectivework/forensics.dm
+++ b/code/modules/detectivework/forensics.dm
@@ -70,4 +70,12 @@ atom/proc/add_fibers(mob/living/carbon/human/M)
fields["blood"] = blood
fields["area"] = other.fields["area"]
- fields["time"] = other.fields["time"]
\ No newline at end of file
+ fields["time"] = other.fields["time"]
+
+/datum/data/record/forensic/proc/update_prints(var/list/o_prints)
+ var/list/prints = fields["fprints"]
+ for(var/print in o_prints)
+ if(prints[print])
+ prints[print] = stringmerge(prints[print], o_prints[print])
+ .=1
+ fields["fprints"] = prints
diff --git a/code/modules/detectivework/scanner.dm b/code/modules/detectivework/scanner.dm
index 3916c799c8..878a54fd60 100644
--- a/code/modules/detectivework/scanner.dm
+++ b/code/modules/detectivework/scanner.dm
@@ -5,7 +5,7 @@
var/list/stored = list()
w_class = 3.0
item_state = "electronic"
- flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
+ flags = CONDUCT | NOBLUDGEON
slot_flags = SLOT_BELT
/obj/item/device/detective_scanner/attack(mob/living/carbon/human/M as mob, mob/user as mob)
@@ -104,4 +104,12 @@
if(old)
fresh.merge(old)
. = 1
- stored["\ref [A]"] = fresh
\ No newline at end of file
+ stored["\ref [A]"] = fresh
+
+/obj/item/device/detective_scanner/verb/wipe()
+ set name = "Wipe Forensic Data"
+ set category = "Object"
+ set src in view(1)
+ if (alert("Are you sure you want to wipe all data from [src]?",,"Yes","No") == "Yes")
+ stored = list()
+ usr << "Forensic data erase complete."
diff --git a/code/modules/detectivework/scanning_console.dm b/code/modules/detectivework/scanning_console.dm
index 9e32c58390..5ff719548c 100644
--- a/code/modules/detectivework/scanning_console.dm
+++ b/code/modules/detectivework/scanning_console.dm
@@ -59,17 +59,23 @@
fresh.fields["label"] = old.fields["label"]
files[fresh.uid] = fresh
+ //updating partial prints on other things
+ var/list/fprints = fresh.fields["fprints"]
+ if(fprints.len)
+ for(var/id in files)
+ var/datum/data/record/forensic/rec = files[id]
+ if(rec.update_prints(fprints))
+ files[id] = rec
+
/obj/machinery/computer/forensic_scanning/proc/process_card(var/obj/item/weapon/f_card/card)
if(card.fingerprints)
usr << "\The [src] sucks in \the [card] and whirrs, scanning it."
var/found = 0
for(var/id in files)
var/datum/data/record/forensic/rec = files[id]
- var/list/prints = rec.fields["fprints"]
- for(var/master_print in card.fingerprints)
- if(prints[master_print])
- prints[master_print] = master_print
- found = 1
+ found = rec.update_prints(card.fingerprints)
+ if (found)
+ files[id] = rec
if(found)
usr << "Complete match found."
else
@@ -189,7 +195,7 @@
dat += "
NO RECORD SELECTED"
else
dat += get_printable_data(current)
- dat += "Labels: "
+ dat += "
Labels: "
dat += "[current.fields["label"] ? current.fields["label"] : "None"]
"
dat += "Print record
"
@@ -302,4 +308,4 @@
ping("Scan complete.")
var/datum/data/record/forensic/fresh = new(scanning)
add_record(fresh)
- updateUsrDialog()
\ No newline at end of file
+ updateUsrDialog()
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index e7c9f5a402..16d623d3da 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -18,19 +18,27 @@
/datum/event/carp_migration/start()
if(severity == EVENT_LEVEL_MAJOR)
- for(var/i = 1 to rand(3,5))
- spawn_fish(landmarks_list.len)
- else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(landmarks_list.len)
+ else if(severity == EVENT_LEVEL_MODERATE)
+ spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
else
- spawn_fish(rand(1, 5))
+ spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
+
+/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5)
+ var/list/spawn_locations = list()
-/datum/event/carp_migration/proc/spawn_fish(var/limit)
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
- spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc))
- if(spawned_carp.len >= limit)
- return
+ spawn_locations.Add(C.loc)
+ spawn_locations = shuffle(spawn_locations)
+ num_groups = min(num_groups, spawn_locations.len)
+
+ var/i = 1
+ while (i <= num_groups)
+ var/group_size = rand(group_size_min, group_size_max)
+ for (var/j = 1, j <= group_size, j++)
+ spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
+ i++
/datum/event/carp_migration/end()
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 4f2675a512..758d50ebdd 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -25,7 +25,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!next_event_time)
set_event_delay()
- if(delayed)
+ if(delayed || !config.allow_random_events)
next_event_time += (world.time - last_world_time)
else if(world.time > next_event_time)
start_event()
@@ -139,22 +139,22 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
/datum/event_container/moderate
severity = EVENT_LEVEL_MODERATE
available_events = list(
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 10),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 5, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_SECURITY = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 5)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 50, list(ASSIGNMENT_AI = 25, ASSIGNMENT_SECURITY = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 50)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 25, list(ASSIGNMENT_ENGINEER = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 15, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 15)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 5, list(ASSIGNMENT_SECURITY = 5), 1),
- new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5,list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
- new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 25, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SCIENTIST = 5)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
+ new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
+ new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
)
/datum/event_container/major
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index 1ef4d22e91..c531b139cc 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -45,6 +45,10 @@
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
+/datum/event_manager/proc/delay_events(var/severity, var/delay)
+ var/list/datum/event_container/EC = event_containers[severity]
+ EC.next_event_time += delay
+
/datum/event_manager/proc/Interact(var/mob/living/user)
var/html = GetInteractWindow()
@@ -75,6 +79,7 @@
/datum/event_manager/proc/GetInteractWindow()
var/html = "Refresh"
+ html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]"
if(selected_event_container)
var/event_time = max(0, selected_event_container.next_event_time - world.time)
@@ -92,7 +97,7 @@
html += "[EM.max_weight] | "
html += "[EM.one_shot] | "
html += "[EM.enabled] | "
- html += "[EM.get_weight()] | "
+ html += "[EM.get_weight(number_active_with_role())] | "
html += "Remove | "
html += "
"
html += ""
@@ -207,6 +212,9 @@
var/datum/event_container/EC = locate(href_list["pause"])
EC.delayed = !EC.delayed
admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.")
+ else if(href_list["pause_all"])
+ config.allow_random_events = text2num(href_list["pause_all"])
+ admin_log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.")
else if(href_list["interval"])
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
if(delay && delay > 0)
diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm
index c485827efb..40a38e2383 100644
--- a/code/modules/events/grid_check.dm
+++ b/code/modules/events/grid_check.dm
@@ -8,7 +8,8 @@
power_failure(0)
/datum/event/grid_check/announce()
- command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
+ if (prob(30))
+ command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
/datum/event/grid_check/end()
power_restore()
diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm
index 6e40d38d33..55dbe2b823 100644
--- a/code/modules/events/viral_infection.dm
+++ b/code/modules/events/viral_infection.dm
@@ -1,11 +1,36 @@
+datum/event/viral_infection
+ var/list/viruses = list()
+
datum/event/viral_infection/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
+
+ //generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
+ var/num_diseases = rand(1,3)
+ for (var/i=0, i < num_diseases, i++)
+ var/datum/disease2/disease/D = new /datum/disease2/disease
+
+ var/strength = 1 //whether the disease is of the greater or lesser variety
+ if (severity >= EVENT_LEVEL_MAJOR && prob(75))
+ strength = 2
+ D.makerandom(strength)
+ viruses += D
datum/event/viral_infection/announce()
- command_announcement.Announce("Confirmed outbreak of level five biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
+ var/level
+ if (severity == EVENT_LEVEL_MUNDANE)
+ return
+ else if (severity == EVENT_LEVEL_MODERATE)
+ level = pick("one", "two", "three", "four")
+ else
+ level = "five"
+
+ if (severity == EVENT_LEVEL_MAJOR || prob(60))
+ command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
+ if(!viruses.len) return
+
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
@@ -13,9 +38,10 @@ datum/event/viral_infection/start()
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
- severity = severity == 1 ? 1 : severity - 1
+ severity = max(EVENT_LEVEL_MUNDANE, severity - 1)
var/actual_severity = severity * rand(1, 3)
while(actual_severity > 0 && candidates.len)
- infect_mob_random_lesser(candidates[1])
+ var/datum/disease2/disease/D = pick(viruses)
+ infect_mob(candidates[1], D.getcopy())
candidates.Remove(candidates[1])
actual_severity--
diff --git a/code/modules/hydroponics/grown_inedible.dm b/code/modules/hydroponics/grown_inedible.dm
index d82807f738..717d3ea8a8 100644
--- a/code/modules/hydroponics/grown_inedible.dm
+++ b/code/modules/hydroponics/grown_inedible.dm
@@ -40,7 +40,6 @@
icon = 'icons/obj/harvest.dmi'
icon_state = "logs"
force = 5
- flags = TABLEPASS
throwforce = 5
w_class = 3.0
throw_speed = 3
@@ -71,7 +70,6 @@
icon_state = "sunflower"
damtype = "fire"
force = 0
- flags = TABLEPASS
throwforce = 1
w_class = 1.0
throw_speed = 1
@@ -89,7 +87,6 @@
icon_state = "nettle"
damtype = "fire"
force = 15
- flags = TABLEPASS
throwforce = 1
w_class = 2.0
throw_speed = 1
diff --git a/code/modules/hydroponics/hydro_tools.dm b/code/modules/hydroponics/hydro_tools.dm
index 328e1a020e..957ef5173f 100644
--- a/code/modules/hydroponics/hydro_tools.dm
+++ b/code/modules/hydroponics/hydro_tools.dm
@@ -168,7 +168,7 @@
/obj/item/weapon/plantspray
icon = 'icons/obj/hydroponics.dmi'
item_state = "spray"
- flags = TABLEPASS | FPRINT | NOBLUDGEON
+ flags = NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 4
w_class = 2.0
@@ -220,7 +220,7 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "hoe"
item_state = "hoe"
- flags = FPRINT | TABLEPASS | CONDUCT | NOBLUDGEON
+ flags = CONDUCT | NOBLUDGEON
force = 5.0
throwforce = 7.0
w_class = 2.0
@@ -236,7 +236,6 @@
name = "bottle of weedkiller"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS
var/toxicity = 0
var/weed_kill_str = 0
@@ -244,7 +243,6 @@
name = "bottle of glyphosate"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS
toxicity = 4
weed_kill_str = 2
@@ -252,7 +250,6 @@
name = "bottle of triclopyr"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle18"
- flags = FPRINT | TABLEPASS
toxicity = 6
weed_kill_str = 4
@@ -260,7 +257,6 @@
name = "bottle of 2,4-D"
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle15"
- flags = FPRINT | TABLEPASS
toxicity = 8
weed_kill_str = 7
@@ -274,7 +270,7 @@
desc = "A small glass bottle. Can hold up to 10 units."
icon = 'icons/obj/chemical.dmi'
icon_state = "bottle16"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
possible_transfer_amounts = null
w_class = 2.0
@@ -314,7 +310,7 @@
desc = "A very sharp axe blade upon a short fibremetal handle. It has a long history of chopping things, but now it is used for chopping wood."
icon = 'icons/obj/weapons.dmi'
icon_state = "hatchet"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
force = 12.0
w_class = 2.0
throwforce = 15.0
@@ -347,7 +343,7 @@
throw_speed = 1
throw_range = 3
w_class = 4.0
- flags = FPRINT | TABLEPASS | NOSHIELD
+ flags = NOSHIELD
slot_flags = SLOT_BACK
origin_tech = "materials=2;combat=2"
attack_verb = list("chopped", "sliced", "cut", "reaped")
diff --git a/code/modules/hydroponics/seed_datums.dm b/code/modules/hydroponics/seed_datums.dm
index 509d069754..33e6f47c57 100644
--- a/code/modules/hydroponics/seed_datums.dm
+++ b/code/modules/hydroponics/seed_datums.dm
@@ -217,8 +217,8 @@ proc/populate_seed_list()
"water",
"potassium",
"plasticide",
- "slimetoxin",
- "aslimetoxin",
+ "mutationtoxin",
+ "amutationtoxin",
"inaprovaline",
"space_drugs",
"paroxetine",
diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm
index 390e3568cd..6f1b732849 100644
--- a/code/modules/hydroponics/seeds.dm
+++ b/code/modules/hydroponics/seeds.dm
@@ -3,7 +3,6 @@
name = "packet of seeds"
icon = 'icons/obj/seeds.dmi'
icon_state = "seed"
- flags = FPRINT | TABLEPASS
w_class = 2.0
var/seed_type
diff --git a/code/modules/hydroponics/vines.dm b/code/modules/hydroponics/vines.dm
index b25c03080e..699063fec4 100644
--- a/code/modules/hydroponics/vines.dm
+++ b/code/modules/hydroponics/vines.dm
@@ -362,6 +362,8 @@
SV.life()
+ if(!SV) continue
+
if(SV.energy < 2) //If tile isn't fully grown
var/chance
if(seed)
diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm
index e8374d5652..cd172b41ee 100644
--- a/code/modules/library/lib_items.dm
+++ b/code/modules/library/lib_items.dm
@@ -126,7 +126,6 @@
throw_speed = 1
throw_range = 5
w_class = 3 //upped to three because books are, y'know, pretty big. (and you could hide them inside eachother recursively forever)
- flags = FPRINT | TABLEPASS
attack_verb = list("bashed", "whacked", "educated")
var/dat // Actual page content
var/due_date = 0 // Game time in 1/10th seconds
@@ -254,7 +253,6 @@
throw_speed = 1
throw_range = 5
w_class = 2.0
- flags = FPRINT | TABLEPASS
var/obj/machinery/librarycomp/computer // Associated computer - Modes 1 to 3 use this
var/obj/item/weapon/book/book // Currently scanned book
var/mode = 0 // 0 - Scan only, 1 - Scan and Set Buffer, 2 - Scan and Attempt to Check In, 3 - Scan and Attempt to Add to Inventory
diff --git a/code/modules/mining/coins.dm b/code/modules/mining/coins.dm
index 6a0d7c5c3c..6ddf02609a 100644
--- a/code/modules/mining/coins.dm
+++ b/code/modules/mining/coins.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/items.dmi'
name = "Coin"
icon_state = "coin"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 0.0
throwforce = 0.0
w_class = 1.0
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index ff159ff122..be76b4c126 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -52,7 +52,7 @@
name = "pickaxe"
icon = 'icons/obj/items.dmi'
icon_state = "pickaxe"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 15.0
throwforce = 4.0
@@ -150,7 +150,7 @@
desc = "A large tool for digging and moving dirt."
icon = 'icons/obj/items.dmi'
icon_state = "shovel"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
force = 8.0
throwforce = 4.0
diff --git a/code/modules/mining/money_bag.dm b/code/modules/mining/money_bag.dm
index 05d2caa9a2..d49ccc222f 100644
--- a/code/modules/mining/money_bag.dm
+++ b/code/modules/mining/money_bag.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/storage.dmi'
name = "Money bag"
icon_state = "moneybag"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
force = 10.0
throwforce = 2.0
w_class = 4.0
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index c2f7adc171..c1d577834d 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -143,7 +143,7 @@ Works together with spawning an observer, noted above.
ghost.can_reenter_corpse = can_reenter_corpse
ghost.timeofdeath = src.timeofdeath //BS12 EDIT
ghost.key = key
- if(!ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
+ if(ghost.client && !ghost.client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
ghost.verbs -= /mob/dead/observer/verb/toggle_antagHUD // Poor guys, don't know what they are missing!
return ghost
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 81e8137f04..96eb6f11a3 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -40,8 +40,9 @@
/mob/living/var/holder_type
/mob/living/proc/get_scooped(var/mob/living/carbon/grabber)
- if(!holder_type)
+ if(!holder_type || buckled || pinned.len)
return
+
var/obj/item/weapon/holder/H = new holder_type(loc)
src.loc = H
H.name = loc.name
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index 67a134ec9b..c9b3175eb8 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -7,6 +7,7 @@
pass_flags = PASSTABLE
health = 100
maxHealth = 100
+ mob_size = 4
var/adult_form
var/dead_icon
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index f36de5ded9..6ec6b4fce4 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -3,7 +3,6 @@
health = 400 //They need to live awhile longer than other organs.
desc = "A piece of juicy meat found in a person's head."
icon_state = "brain2"
- flags = TABLEPASS
force = 1.0
w_class = 2.0
throwforce = 1.0
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 4916d801c3..792fd48e2e 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -871,6 +871,7 @@
else
target.show_message("\blue You hear a voice that seems to echo around the room: [say]")
usr.show_message("\blue You project your mind into [target.real_name]: [say]")
+ log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]")
for(var/mob/dead/observer/G in world)
G.show_message("Telepathic message from [src] to [target]: [say]")
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index de50d9aa44..414f7e2bfb 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -120,7 +120,7 @@ emp_act
/mob/living/carbon/human/proc/getarmor_organ(var/datum/organ/external/def_zone, var/type)
if(!type) return 0
var/protection = 0
- var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform)
+ var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform, gloves, shoes)
for(var/gear in protective_gear)
if(gear && istype(gear ,/obj/item/clothing))
var/obj/item/clothing/C = gear
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 545fa41c03..0a504ca148 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -640,9 +640,10 @@ It can still be worn/put on as normal.
W.hold.close(usr)
usr.put_in_hands(tie)
suit.hastie = null*/
- suit.hastie.on_removed(usr)
- suit.hastie = null
- target.update_inv_w_uniform()
+ if(suit && suit.hastie)
+ suit.hastie.on_removed(usr)
+ suit.hastie = null
+ target.update_inv_w_uniform()
if("id")
slot_to_process = slot_wear_id
if (target.wear_id)
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index 0f13a6dbfd..72c281a1f2 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -407,11 +407,10 @@
loc.assume_air(breath)
//spread some viruses while we are at it
- if (virus2.len > 0)
- if (prob(10) && get_infection_chance(src))
-// log_debug("[src] : Exhaling some viruses")
- for(var/mob/living/carbon/M in view(1,src))
- src.spread_disease_to(M)
+ if (virus2.len > 0 && prob(10))
+// log_debug("[src] : Exhaling some viruses")
+ for(var/mob/living/carbon/M in view(1,src))
+ src.spread_disease_to(M)
proc/get_breath_from_internal(volume_needed)
@@ -1426,21 +1425,19 @@
client.screen |= G.overlay
if(G.vision_flags)
sight |= G.vision_flags
- if(!druggy)
+ if(!druggy && !seer)
see_invisible = SEE_INVISIBLE_MINIMUM
- if(istype(G,/obj/item/clothing/glasses/night))
+ if(istype(G,/obj/item/clothing/glasses/night) && !seer)
see_invisible = SEE_INVISIBLE_MINIMUM
/* HUD shit goes here, as long as it doesn't modify sight flags */
// The purpose of this is to stop xray and w/e from preventing you from using huds -- Love, Doohl
+ var/obj/item/clothing/glasses/hud/O = G
if(istype(G, /obj/item/clothing/glasses/sunglasses/sechud))
- var/obj/item/clothing/glasses/sunglasses/sechud/O = G
- if(O.hud) O.hud.process_hud(src)
- if(!druggy) see_invisible = SEE_INVISIBLE_LIVING
- else if(istype(G, /obj/item/clothing/glasses/hud))
- var/obj/item/clothing/glasses/hud/O = G
+ var/obj/item/clothing/glasses/sunglasses/sechud/S = G
+ O = S.hud
+ if(istype(O))
O.process_hud(src)
- if(!druggy)
- see_invisible = SEE_INVISIBLE_LIVING
+ if(!druggy && !seer) see_invisible = SEE_INVISIBLE_LIVING
proc/handle_random_events()
// Puke if toxloss is too high
diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm
index fe5eac0f07..bb922b905b 100644
--- a/code/modules/mob/living/carbon/human/species/species_attack.dm
+++ b/code/modules/mob/living/carbon/human/species/species_attack.dm
@@ -35,23 +35,29 @@
if("head", "mouth", "eyes")
// ----- HEAD ----- //
switch(attack_damage)
- if(1 to 2) user.visible_message("[user] scratched [target] across \his cheek!")
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")] [pick("", "", "", "with spread [pick(attack_noun)]")]!")
- if(5) user.visible_message("[pick("[user] [pick(attack_verb)] [target] across \his face!", "[user] rakes \his [pick(attack_noun)] across [target]'s face!")]")
- if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_leg", "l_foot", "r_foot")
+ if(1 to 2)
+ user.visible_message("[user] scratched [target] across \his cheek!")
+ if(3 to 4)
+ user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")]!") //'with spread claws' sounds a little bit odd, just enough that conciseness is better here I think
+ if(5)
+ user.visible_message(pick(
+ "[user] rakes \his [pick(attack_noun)] across [target]'s face!",
+ "[user] tears \his [pick(attack_noun)] into [target]'s face!",
+ ))
+ else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("[user] scratched [target]'s [affecting.display_name]!")
if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.display_name]!")
- if(5) user.visible_message("[user] tears \his [pick(attack_noun)] deep into [target]'s [affecting.display_name]!")
+ if(5) user.visible_message("[user] tears \his [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.display_name]!")
/datum/unarmed_attack/claws/strong
- attack_verb = list("slash")
+ attack_verb = list("slashed")
damage = 10
shredding = 1
/datum/unarmed_attack/bite/strong
- attack_verb = list("maul")
+ attack_verb = list("mauled")
damage = 15
shredding = 1
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
index 6079a3c044..c7c7fcc903 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
@@ -15,7 +15,7 @@ var/const/MAX_ACTIVE_TIME = 400
icon_state = "facehugger"
item_state = "facehugger"
w_class = 1 //note: can be picked up by aliens unlike most other items of w_class below 4
- flags = FPRINT | TABLEPASS | MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
+ flags = MASKCOVERSMOUTH | MASKCOVERSEYES | AIRTIGHT
body_parts_covered = FACE|EYES
throw_range = 5
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index ba738e81ef..c98e3788c0 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -35,17 +35,18 @@
switch(zone) // strong punches can have effects depending on where they hit
if("head", "mouth", "eyes")
// Induce blurriness
- target.visible_message("[target] looks dazed.", "You see stars.")
+ target.visible_message("[target] looks momentarily disoriented.", "You see stars.")
target.apply_effect(attack_damage*2, EYE_BLUR, armour)
if("l_arm", "l_hand")
if (target.l_hand)
// Disarm left hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.l_hand][pick("", " with a scream")]!")
+ //Urist McAssistant dropped the macguffin with a scream just sounds odd. Plus it doesn't work with NO_PAIN
+ target.visible_message("\The [target.l_hand] was knocked right out of [src]'s grasp!")
target.drop_l_hand()
if("r_arm", "r_hand")
if (target.r_hand)
// Disarm right hand
- target.visible_message("[src] [pick("dropped", "let go off")] \the [target.r_hand][pick("", " with a scream")]!")
+ target.visible_message("\The [target.r_hand] was knocked right out of [src]'s grasp!")
target.drop_r_hand()
if("chest")
if(!target.lying)
@@ -113,21 +114,30 @@
if("head", "mouth", "eyes")
// ----- HEAD ----- //
switch(attack_damage)
- if(1 to 2) user.visible_message("[user] slapped [target] across \his cheek!")
- if(3 to 4) user.visible_message("[user] struck [target] in the head[pick("", " with a closed fist")]!")
- if(5) user.visible_message("[user] gave [target] a resounding slap to the face!")
- if("chest", "l_arm", "r_arm", "l_hand", "r_hand", "groin", "l_leg", "r_let", "l_foot", "r_foot")
+ if(1 to 2)
+ user.visible_message("[user] slapped [target] across \his cheek!")
+ if(3 to 4)
+ user.visible_message(pick(
+ 80; "[user] [pick(attack_verb)] [target] in the head!", //striking someone with a 'closed fist' is called punching them.
+ 20; "[user] struck [target] in the head[pick("", " with a closed fist")]!"
+ ))
+ if(5)
+ user.visible_message(pick(
+ 10; "[user] gave [target] a resounding slap to the face!",
+ 90; "[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!"
+ ))
+ else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("[user] slapped [target]'s [organ]!")
if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
- if(5) user.visible_message("[user] slammed \his [pick(attack_noun)] into [target]'s [organ]!")
+ if(5) user.visible_message("[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!")
else
- user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "rammed their [pick(attack_noun)] into")] [target]'s [organ]!")
+ user.visible_message("[user] [pick("punched", "threw a punch", "struck", "slapped", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets?
/datum/unarmed_attack/kick
- attack_verb = list("kicked", "kneed")
- attack_noun = list("kick", "knee strike")
+ attack_verb = list("kicked", "kicked", "kicked", "kneed")
+ attack_noun = list("kick", "kick", "kick", "knee strike")
attack_sound = "swing_hit"
damage = 0
@@ -161,7 +171,7 @@
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
- if(1 to 2) user.visible_message("[user] gave [target] a light [pick(attack_noun)] to the [organ]!")
+ if(1 to 2) user.visible_message("[user] threw [target] a glancing [pick(attack_noun)] to the [organ]!") //it's not that they're kicking lightly, it's that the kick didn't quite connect
if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
@@ -204,6 +214,6 @@
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
- if(1 to 2) user.visible_message("[user] [pick("clomped on", "treaded on")] [target]'s [organ]!")
- if(3 to 4) user.visible_message("[pick("[user] stomped down on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
- if(5) user.visible_message("[pick("[user] landed a devastating stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!")
\ No newline at end of file
+ if(1 to 2) user.visible_message("[user] [pick("stepped on", "treaded on")] [target]'s [organ]!") //stepped on conveys the same meaning and is more recognizable as an actual word than "clomped"
+ if(3 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
+ if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/
\ No newline at end of file
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 9b2d486c05..c3dd7657e9 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -37,4 +37,5 @@
var/tod = null // Time of death
var/update_slimes = 1
- var/silent = null //Can't talk. Value goes down every life proc.
\ No newline at end of file
+ var/silent = null // Can't talk. Value goes down every life proc.
+ var/mob_size // Used by lockers.
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 34281e8c0c..4b408193b7 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -54,4 +54,4 @@
var/obj/item/device/aicard/card = loc
card.update_icon()
- return ..(gibbed)
+ return ..(gibbed,"gives one shrill beep before falling lifeless.")
diff --git a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
index 87dc0ec87e..d94f705320 100644
--- a/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/cameranet.dm
@@ -7,10 +7,16 @@ var/datum/cameranet/cameranet = new()
/datum/cameranet
// The cameras on the map, no matter if they work or not. Updated in obj/machinery/camera.dm by New() and Del().
var/list/cameras = list()
+ var/cameras_unsorted = 1
// The chunks of the map, mapping the areas that the cameras can see.
var/list/chunks = list()
var/ready = 0
+/datum/cameranet/proc/process_sort()
+ if(cameras_unsorted)
+ cameras = dd_sortedObjectList(cameras)
+ cameras_unsorted = 0
+
// Checks if a chunk has been Generated in x, y, z.
/datum/cameranet/proc/chunkGenerated(x, y, z)
x &= ~0xf
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 17293f2b67..590ff71ea5 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -12,6 +12,7 @@
status_flags = GODMODE // You can't damage it.
mouse_opacity = 0
see_in_dark = 7
+ invisibility = INVISIBILITY_MAXIMUM
// Movement code. Returns 0 to stop air movement from moving it.
/mob/aiEye/Move()
diff --git a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm
index 813d4f2471..e6311e7a00 100644
--- a/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/update_triggers.dm
@@ -92,7 +92,13 @@
/obj/machinery/camera/New()
..()
- cameranet.cameras += src //Camera must be added to global list of all cameras no matter what...
+ //Camera must be added to global list of all cameras no matter what...
+ if(cameranet.cameras_unsorted || !ticker)
+ cameranet.cameras += src
+ cameranet.cameras_unsorted = 1
+ else
+ dd_insertObjectList(cameranet.cameras, src)
+
var/list/open_networks = difflist(network,restricted_camera_networks) //...but if all of camera's networks are restricted, it only works for specific camera consoles.
if(open_networks.len) //If there is at least one open network, chunk is available for AI usage.
cameranet.addCamera(src)
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index cf11f2d211..7686cd4344 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -59,7 +59,7 @@
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
- src.see_invisible = SEE_INVISIBLE_LEVEL_TWO
+ src.see_invisible = SEE_INVISIBLE_LIVING
//Congratulations! You've found a way for AI's to run without using power!
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index eaef5607cb..0f84806a1f 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -6,7 +6,7 @@
icon_state = "robotanalyzer"
item_state = "analyzer"
desc = "A hand-held scanner able to diagnose robotic injuries."
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm
index 1b132cf27d..794b983f66 100644
--- a/code/modules/mob/living/silicon/robot/inventory.dm
+++ b/code/modules/mob/living/silicon/robot/inventory.dm
@@ -234,3 +234,7 @@
sight_mode |= module_state_3:sight_mode
else
src << "You need to disable a module first!"
+
+/mob/living/silicon/robot/put_in_hands(var/obj/item/W) // No hands.
+ W.loc = get_turf(src)
+ return 1
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index f19f18ee09..bf4ac5164d 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1296,4 +1296,5 @@ var/list/robot_verbs_default = list(
if(2) //New Module
connected_ai << "
NOTICE - [braintype] module change detected: [name] has loaded the [module.name].
"
if(3) //New Name
- connected_ai << "
NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].
"
+ if(oldname != newname)
+ connected_ai << "
NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].
"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index e8fa3727ce..3458a5bb47 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -4,7 +4,7 @@
icon_state = "std_module"
w_class = 100.0
item_state = "electronic"
- flags = FPRINT|TABLEPASS | CONDUCT
+ flags = CONDUCT
var/channels = list()
var/list/modules = list()
var/obj/item/emag = null
@@ -34,8 +34,11 @@
if(!stacktypes || !stacktypes.len) return
for(var/T in stacktypes)
- var/O = locate(T) in src.modules
- var/obj/item/stack/S = O
+ var/obj/item/stack/S
+ for(var/obj/O in src.modules)
+ if(O.type == T)
+ S = O
+ break
if(!S)
src.modules -= null
@@ -43,6 +46,9 @@
src.modules |= S
S.amount = 1
+ if(!istype(S))
+ continue
+
if(S && S.amount < stacktypes[T])
S.amount++
diff --git a/code/modules/mob/living/simple_animal/bees.dm b/code/modules/mob/living/simple_animal/bees.dm
index 5ee2e2b10a..3a5f2f17e5 100644
--- a/code/modules/mob/living/simple_animal/bees.dm
+++ b/code/modules/mob/living/simple_animal/bees.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/apiary_bees_etc.dmi'
icon_state = "bees1"
icon_dead = "bees1"
+ mob_size = 1
var/strength = 1
var/feral = 0
var/mut = 0
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 79295a9b5b..5e3e91b90f 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -129,6 +129,7 @@
melee_damage_lower = 30
melee_damage_upper = 30
attacktext = "smashed their armoured gauntlet into"
+ mob_size = 20
speed = 3
wall_smash = 1
attack_sound = 'sound/weapons/punch3.ogg'
@@ -259,6 +260,7 @@
speed = 5
wall_smash = 1
attack_sound = 'sound/weapons/punch4.ogg'
+ mob_size = 20
var/energy = 0
var/max_energy = 1000
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 642a7df8e4..7913d23d7e 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -22,6 +22,7 @@
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
holder_type = /obj/item/weapon/holder/cat
+ mob_size = 5
/mob/living/simple_animal/cat/Life()
//MICE!
@@ -50,7 +51,7 @@
if(turns_since_scan > 5)
walk_to(src,0)
turns_since_scan = 0
-
+
if((movement_target) && !(isturf(movement_target.loc) || ishuman(movement_target.loc) ))
movement_target = null
stop_automated_movement = 0
@@ -68,7 +69,7 @@
/mob/living/simple_animal/cat/MouseDrop(atom/over_object)
var/mob/living/carbon/H = over_object
- if(!istype(H)) return ..()
+ if(!istype(H) || !Adjacent(H)) return ..()
if(H.a_intent == "help")
get_scooped(H)
diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm
index 162038dd07..8cce2342df 100644
--- a/code/modules/mob/living/simple_animal/friendly/corgi.dm
+++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm
@@ -18,6 +18,8 @@
response_disarm = "bops"
response_harm = "kicks"
see_in_dark = 5
+ mob_size = 8
+
var/obj/item/inventory_head
var/obj/item/inventory_back
var/facehugger
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index c85f5bc734..bf59a7e546 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -17,6 +17,7 @@
response_harm = "stomps"
stop_automated_movement = 1
friendly = "pinches"
+ mob_size = 5
var/obj/item/inventory_head
var/obj/item/inventory_mask
diff --git a/code/modules/mob/living/simple_animal/friendly/lizard.dm b/code/modules/mob/living/simple_animal/friendly/lizard.dm
index d4677ef5d3..66fb31406a 100644
--- a/code/modules/mob/living/simple_animal/friendly/lizard.dm
+++ b/code/modules/mob/living/simple_animal/friendly/lizard.dm
@@ -14,4 +14,5 @@
melee_damage_upper = 2
response_help = "pets"
response_disarm = "shoos"
- response_harm = "stomps on"
\ No newline at end of file
+ response_harm = "stomps on"
+ mob_size = 1
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index c6f3cfb87c..5b207ce2a7 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -28,6 +28,7 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
universal_understand = 1
+ mob_size = 1
/mob/living/simple_animal/mouse/Life()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index 1aff173aa7..89cfe60b65 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -5,6 +5,7 @@
max_co2 = 0
minbodytemp = 0
maxbodytemp = 500
+ mob_size = 5
var/obj/item/device/radio/borg/radio = null
var/mob/living/silicon/ai/connected_ai = null
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index 5088f98108..82a5384001 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -130,14 +130,14 @@
return 1
return 0
-//This is a SAFE proc. Use this instead of equip_to_splot()!
+//This is a SAFE proc. Use this instead of equip_to_slot()!
//set del_on_fail to have it delete W if it fails to equip
//set disable_warning to disable the 'you are unable to equip that' warning.
//unset redraw_mob to prevent the mob from being redrawn at the end.
/mob/proc/equip_to_slot_if_possible(obj/item/W as obj, slot, del_on_fail = 0, disable_warning = 0, redraw_mob = 1)
if(!istype(W)) return 0
- if(!W.mob_can_equip(src, slot, disable_warning))
+ if(!W.mob_can_equip(src, slot))
if(del_on_fail)
del(W)
else
diff --git a/code/modules/nano/JSON Writer.dm b/code/modules/nano/JSON Writer.dm
index 3cd3520f17..65b9d99eb0 100644
--- a/code/modules/nano/JSON Writer.dm
+++ b/code/modules/nano/JSON Writer.dm
@@ -1,7 +1,7 @@
json_writer
proc
- WriteObject(list/L)
+ WriteObject(list/L, cached_data = null)
. = "{"
var/i = 1
for(var/k in L)
@@ -9,7 +9,9 @@ json_writer
. += {"\"[k]\":[write(val)]"}
if(i++ < L.len)
. += ","
- .+= "}"
+ if(cached_data)
+ . = copytext(., 1, lentext(.)) + ",\"cached\":[cached_data]}"
+ . += "}"
write(val)
if(isnum(val))
diff --git a/code/modules/nano/_JSON.dm b/code/modules/nano/_JSON.dm
index 5692e643ba..4f70e6e664 100644
--- a/code/modules/nano/_JSON.dm
+++ b/code/modules/nano/_JSON.dm
@@ -7,6 +7,6 @@ proc
var/static/json_reader/_jsonr = new()
return _jsonr.ReadObject(_jsonr.ScanJson(json))
- list2json(list/L)
+ list2json(list/L, var/cached_data = null)
var/static/json_writer/_jsonw = new()
- return _jsonw.WriteObject(L)
+ return _jsonw.WriteObject(L, cached_data)
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index 91e97c0cb5..bdfeffe58e 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -57,6 +57,8 @@ nanoui is used to open and update nano browser uis
// the current status/visibility of the ui
var/status = STATUS_INTERACTIVE
+ var/cached_data = null
+
// Only allow users with a certain user.stat to get updates. Defaults to 0 (concious)
var/allowed_user_stat = 0 // -1 = ignore, 0 = alive, 1 = unconcious or alive, 2 = dead concious or alive
@@ -366,7 +368,7 @@ nanoui is used to open and update nano browser uis
template_data_json = list2json(templates)
var/list/send_data = get_send_data(initial_data)
- var/initial_data_json = list2json(send_data)
+ var/initial_data_json = list2json(send_data, cached_data)
var/url_parameters_json = list2json(list("src" = "\ref[src]"))
@@ -442,6 +444,19 @@ nanoui is used to open and update nano browser uis
winset(user, window_id, "on-close=\"nanoclose [params]\"")
+/**
+ * Appends already processed json txt to the list2json proc when setting initial-data and data pushes
+ * Used for data that is fucking huge like manifests and camera lists that doesn't change often.
+ * And we only want to process them when they change.
+ * Fuck javascript
+ *
+ * @return nothing
+ */
+/datum/nanoui/proc/load_cached_data(var/data)
+ cached_data = data
+ return
+
+
/**
* Push data to an already open UI window
*
@@ -455,7 +470,7 @@ nanoui is used to open and update nano browser uis
var/list/send_data = get_send_data(data)
//user << list2json(data) // used for debugging
- user << output(list2params(list(list2json(send_data))),"[window_id].browser:receiveUpdateData")
+ user << output(list2params(list(list2json(send_data,cached_data))),"[window_id].browser:receiveUpdateData")
/**
* This Topic() proc is called whenever a user clicks on a link within a Nano UI
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 8d4144a550..067ef6a42e 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -290,29 +290,24 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
source.data["blood_type"] = donor.dna.b_type
// Are we dripping or splattering?
- if(!large)
-
- // Only a certain number of drips can be on a given turf.
- var/list/drips = list()
- var/list/drip_icons = list("1","2","3","4","5")
-
- for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
- drips += drop
- drip_icons.Remove(drop.icon_state)
-
- // If we have too many drips, remove them and spawn a proper blood splatter.
- if(drips.len >= 5)
- //TODO: copy all virus data from drips to new splatter?
- for(var/obj/effect/decal/cleanable/blood/drip/drop in drips)
- del drop
- else
- decal_type = /obj/effect/decal/cleanable/blood/drip
+ var/list/drips = list()
+ // Only a certain number of drips (or one large splatter) can be on a given turf.
+ for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
+ drips |= drop.drips
+ del(drop)
+ if(!large && drips.len < 3)
+ decal_type = /obj/effect/decal/cleanable/blood/drip
// Find a blood decal or create a new one.
B = locate(decal_type) in T
if(!B)
B = new decal_type(T)
+ var/obj/effect/decal/cleanable/blood/drip/drop = B
+ if(istype(drop) && drips && drips.len && !large)
+ drop.overlays |= drips
+ drop.drips |= drips
+
// If there's no data to copy, call it quits here.
if(!source)
return B
@@ -330,11 +325,7 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
else
B.blood_DNA[source.data["blood_DNA"]] = "O+"
- // Update virus information. //Looks like this is out of date.
- //for(var/datum/disease/D in source.data["viruses"])
- // var/datum/disease/new_virus = D.Copy(1)
- // source.viruses += new_virus
- // new_virus.holder = B
+ // Update virus information.
if(source.data["virus2"])
B.virus2 = virus_copylist(source.data["virus2"])
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 0882531ab6..b45d0aafa7 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -562,7 +562,7 @@ Note that amputating the affected organ does in fact remove the infection from t
O.setAmputatedTree()
//Handles dismemberment
-/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0)
+/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0,var/amputation=0)
if(destspawn) return
if(override)
status |= ORGAN_DESTROYED
@@ -579,9 +579,13 @@ Note that amputating the affected organ does in fact remove the infection from t
germ_level = 0
+ // If any organs are attached to this, destroy them
+ for(var/datum/organ/external/O in children)
+ O.droplimb(1, no_explode, amputation)
+
//Replace all wounds on that arm with one wound on parent organ.
wounds.Cut()
- if (parent)
+ if (parent && !amputation)
var/datum/wound/W
if(max_damage < 50)
W = new/datum/wound/lost_limb/small(max_damage)
@@ -591,10 +595,6 @@ Note that amputating the affected organ does in fact remove the infection from t
parent.update_damages()
update_damages()
- // If any organs are attached to this, destroy them
- for(var/datum/organ/external/O in children)
- O.droplimb(1)
-
var/obj/organ //Dropped limb object
switch(body_part)
if(HEAD)
diff --git a/code/modules/paperwork/clipboard.dm b/code/modules/paperwork/clipboard.dm
index ca128c2c10..9598800312 100644
--- a/code/modules/paperwork/clipboard.dm
+++ b/code/modules/paperwork/clipboard.dm
@@ -9,7 +9,6 @@
throw_range = 10
var/obj/item/weapon/pen/haspen //The stored pen.
var/obj/item/weapon/toppaper //The topmost piece of paper.
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
/obj/item/weapon/clipboard/New()
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
index 940a797add..fe519e01d4 100644
--- a/code/modules/paperwork/handlabeler.dm
+++ b/code/modules/paperwork/handlabeler.dm
@@ -6,9 +6,13 @@
var/label = null
var/labels_left = 30
var/mode = 0 //off or on.
+
+/obj/item/weapon/hand_labeler/attack()
+ return
/obj/item/weapon/hand_labeler/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity) return
+ if(!proximity)
+ return
if(!mode) //if it's off, give up.
return
if(A == loc) // if placing the labeller into something (e.g. backpack)
@@ -24,10 +28,13 @@
user << "Label too big."
return
if(ishuman(A))
- user << "You can't label humans."
+ user << "The label refuses to stick to [A.name]."
return
if(issilicon(A))
- user << "You can't label cyborgs."
+ user << "The label refuses to stick to [A.name]."
+ return
+ if(isobserver(A))
+ user << "[src] passes through [A.name]."
return
if(istype(A, /obj/item/weapon/reagent_containers/glass))
user << "The label can't stick to the [A.name]. (Try using a pen)"
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index 7516d1b622..6cf8e9ba08 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -35,8 +35,9 @@
user.drop_from_inventory(P)
P.loc = src
if(istype(user,/mob/living/carbon/human))
- user:update_inv_l_hand()
- user:update_inv_r_hand()
+ var/mob/living/carbon/human/H = user
+ H.update_inv_l_hand()
+ H.update_inv_r_hand()
else if(istype(W, /obj/item/weapon/photo))
amount++
if(screen == 2)
@@ -57,6 +58,8 @@
user << "You add \the [W.name] to [(src.name == "paper bundle") ? "the paper bundle" : src.name]."
del(W)
else
+ if(istype(W, /obj/item/weapon/tape_roll))
+ return 0
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/toy/crayon))
usr << browse("", "window=[name]") //Closes the dialog
P = src[page]
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index dd60029382..944fd91410 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -15,7 +15,6 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "pen"
item_state = "pen"
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 0
w_class = 1.0
@@ -58,7 +57,7 @@
*/
/obj/item/weapon/pen/sleepypen
desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\""
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
slot_flags = SLOT_BELT
origin_tech = "materials=2;syndicate=5"
@@ -85,7 +84,7 @@
* Parapens
*/
/obj/item/weapon/pen/paralysis
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
slot_flags = SLOT_BELT
origin_tech = "materials=2;syndicate=5"
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 1a93e87539..77f83649d4 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -57,10 +57,10 @@ var/global/photo_count = 0
user << "It is too far away."
/obj/item/weapon/photo/proc/show(mob/user as mob)
- user << browse_rsc(img, "tmp_photo.png")
+ user << browse_rsc(img, "tmp_photo_[id].png")
user << browse("[name]" \
+ "" \
- + "
" \
+ + "
" \
+ "[scribble ? "
Written on the back:
[scribble]" : ""]"\
+ "", "window=book;size=[64*photo_size]x[scribble ? 400 : 64*photo_size]")
onclose(user, "[name]")
@@ -123,7 +123,7 @@ var/global/photo_count = 0
icon_state = "camera"
item_state = "electropack"
w_class = 2.0
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
slot_flags = SLOT_BELT
matter = list("metal" = 2000)
var/pictures_max = 10
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index 51ec0002dd..f2767ca0e8 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -4,7 +4,6 @@
icon = 'icons/obj/bureaucracy.dmi'
icon_state = "stamp-qm"
item_state = "stamp"
- flags = FPRINT | TABLEPASS
throwforce = 0
w_class = 1.0
throw_speed = 7
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index ea92b1f690..bdaeb0c659 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -206,7 +206,7 @@ proc/cardinalrange(var/center)
icon_state = "box"
item_state = "electronic"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
throwforce = 5
throw_speed = 1
throw_range = 2
diff --git a/code/modules/power/breaker_box.dm b/code/modules/power/breaker_box.dm
index feb6f1d38a..869e654e6e 100644
--- a/code/modules/power/breaker_box.dm
+++ b/code/modules/power/breaker_box.dm
@@ -11,7 +11,6 @@
//directwired = 0
var/icon_state_on = "bbox_on"
var/icon_state_off = "bbox_off"
- flags = FPRINT
density = 1
anchored = 1
var/on = 0
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index de072d8d5a..12451f9a5e 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -477,7 +477,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
throw_speed = 2
throw_range = 5
matter = list("metal" = 50, "glass" = 20)
- flags = TABLEPASS | FPRINT | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "coil"
attack_verb = list("whipped", "lashed", "disciplined", "flogged")
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index 8d8c434e25..7c9ae41cf2 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -16,7 +16,7 @@
desc = "Used for building lights."
icon = 'icons/obj/lighting.dmi'
icon_state = "tube-construct-item"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
var/fixture_type = "tube"
var/obj/machinery/light/newlight = null
var/sheets_refunded = 2
@@ -63,7 +63,7 @@
desc = "Used for building small lights."
icon = 'icons/obj/lighting.dmi'
icon_state = "bulb-construct-item"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
fixture_type = "bulb"
sheets_refunded = 1
@@ -637,7 +637,6 @@
/obj/item/weapon/light
icon = 'icons/obj/lighting.dmi'
- flags = FPRINT | TABLEPASS
force = 2
throwforce = 5
w_class = 2
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 5b188f0bca..2223f2f9f9 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -105,8 +105,11 @@ display round(lastgen) and phorontank amount
var/sheet_path = /obj/item/stack/sheet/mineral/phoron
var/board_path = "/obj/item/weapon/circuitboard/pacman"
var/sheet_left = 0 // How much is left of the sheet
- var/time_per_sheet = 40
var/heat = 0
+
+ //produces up to 80 kW and lasts for 20 minutes with 50 sheets
+ var/time_per_sheet = 96
+ power_gen = 20000
/obj/machinery/power/port_gen/pacman/initialize()
..()
@@ -329,9 +332,12 @@ display round(lastgen) and phorontank amount
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
icon_state = "portgen1"
sheet_path = /obj/item/stack/sheet/mineral/uranium
- power_gen = 15000
- time_per_sheet = 65
board_path = "/obj/item/weapon/circuitboard/pacman/super"
+
+ //produces 80 kW like the PACMAN but 50 sheets will last for 2 hours
+ power_gen = 20000
+ time_per_sheet = 576
+
overheat()
explosion(src.loc, 3, 3, 3, -1)
@@ -339,8 +345,11 @@ display round(lastgen) and phorontank amount
name = "M.R.S.P.A.C.M.A.N.-type Portable Generator"
icon_state = "portgen2"
sheet_path = /obj/item/stack/sheet/mineral/tritium
- power_gen = 40000
- time_per_sheet = 80
board_path = "/obj/item/weapon/circuitboard/pacman/mrs"
+
+ //produces 200 kW and lasts for 1 hour with 50 sheets
+ power_gen = 50000
+ time_per_sheet = 288
+
overheat()
explosion(src.loc, 4, 4, 4, -1)
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index d1f0c82454..366cd9351d 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -294,6 +294,8 @@
for(var/obj/structure/cable/Cable in net2.cables) //merge cables
net1.add_cable(Cable)
+ if(!net2) return net1
+
for(var/obj/machinery/power/Node in net2.nodes) //merge power machines
if(!Node.connect_to_network())
Node.disconnect_from_network() //if somehow we can't connect the machine to the new powernet, disconnect it from the old nonetheless
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 401cb41af7..791b69e949 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -16,9 +16,11 @@
/datum/powernet/New()
powernets += src
+ ..()
/datum/powernet/Del()
powernets -= src
+ ..()
//Returns the amount of excess power (before refunding to SMESs) from last tick.
//This is for machines that might adjust their power consumption using this data.
@@ -110,8 +112,7 @@
S.restore() // and restore some of the power that was used
//updates the viewed load (as seen on power computers)
- viewload = 0.8*viewload + 0.2*load
- viewload = round(viewload)
+ viewload = round(load)
//reset the powernet
load = 0
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 8f90743e46..0825d9a194 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -206,8 +206,6 @@ var/global/list/uneatable = list(
/obj/machinery/singularity/proc/eat()
set background = 1
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 1
// Let's just make this one loop.
for(var/atom/X in orange(grav_pull,src))
var/dist = get_dist(X, src)
@@ -226,9 +224,6 @@ var/global/list/uneatable = list(
// Turf and movable atoms
else if(dist <= consume_range && (isturf(X) || istype(X, /atom/movable)))
consume(X)
-
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
return
@@ -567,11 +562,7 @@ var/global/list/uneatable = list(
/obj/machinery/singularity/narsie/wizard/eat()
set background = 1
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 1
for(var/atom/X in orange(consume_range,src))
if(isturf(X) || istype(X, /atom/movable))
consume(X)
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
return
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 11bcef5881..18aa6b4885 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -301,6 +301,13 @@
data["outputMax"] = output_level_max
data["outputLoad"] = round(output_used)
+ if(outputting)
+ data["outputting"] = 2 // smes is outputting
+ else if(!outputting && output_attempt)
+ data["outputting"] = 1 // smes is online but not outputting because it's charge level is too low
+ else
+ data["outputting"] = 0 // smes is not outputting
+
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
@@ -322,11 +329,11 @@
return 1
if( href_list["cmode"] )
- inputting(!inputting)
+ inputting(!input_attempt)
update_icon()
else if( href_list["online"] )
- outputting(!outputting)
+ outputting(!output_attempt)
update_icon()
else if( href_list["input"] )
switch( href_list["input"] )
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 1e09903a7e..4f149fe301 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -3,7 +3,7 @@
desc = "A bullet casing."
icon = 'icons/obj/ammo.dmi'
icon_state = "s-casing"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 1
w_class = 1.0
@@ -52,7 +52,7 @@
desc = "A box of ammo"
icon_state = "357"
icon = 'icons/obj/ammo.dmi'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "syringe_kit"
matter = list("metal" = 50000)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index f41ba5967b..fc44ed09fc 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/gun.dmi'
icon_state = "detective"
item_state = "gun"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
matter = list("metal" = 2000)
w_class = 3.0
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index 394ac3a8f6..40a4b06689 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -77,22 +77,6 @@ obj/item/weapon/gun/energy/laser/retro
isHandgun()
return 0
-/obj/item/weapon/gun/energy/lasercannon/mounted/load_into_chamber()
- if(in_chamber)
- return 1
- var/obj/item/rig_module/module = loc
- if(!istype(module))
- return 0
- if(module.holder && module.holder.wearer)
- var/mob/living/carbon/human/H = module.holder.wearer
- if(istype(H) && 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)
- return 1
- return 0
-
/obj/item/weapon/gun/energy/lasercannon/cyborg/load_into_chamber()
if(in_chamber)
return 1
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index a52119c168..e2a55a5ed4 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -35,23 +35,6 @@
else
user.update_inv_r_hand()
-/obj/item/weapon/gun/energy/gun/mounted/load_into_chamber()
- if(in_chamber)
- return 1
- var/obj/item/rig_module/module = loc
- if(!istype(module))
- return 0
- if(module.holder && module.holder.wearer)
- var/mob/living/carbon/human/H = module.holder.wearer
- if(istype(H) && 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)
- in_chamber = new prog_path(src)
- return 1
- return 0
-
/obj/item/weapon/gun/energy/gun/nuclear
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized reactor."
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index a87218d12c..d5417496bf 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -5,7 +5,7 @@
fire_sound = 'sound/weapons/Laser.ogg'
origin_tech = "combat=2;magnets=4"
w_class = 4.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
charge_cost = 100
projectile_type = "/obj/item/projectile/ion"
@@ -33,7 +33,7 @@ obj/item/weapon/gun/energy/staff
icon_state = "staffofchange"
item_state = "staffofchange"
fire_sound = 'sound/weapons/emitter.ogg'
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 4.0
charge_cost = 200
diff --git a/code/modules/projectiles/guns/projectile/crossbow.dm b/code/modules/projectiles/guns/projectile/crossbow.dm
index 0f5cdbb2c8..faa3f8509f 100644
--- a/code/modules/projectiles/guns/projectile/crossbow.dm
+++ b/code/modules/projectiles/guns/projectile/crossbow.dm
@@ -6,7 +6,6 @@
icon = 'icons/obj/weapons.dmi'
icon_state = "bolt"
item_state = "bolt"
- flags = FPRINT | TABLEPASS
throwforce = 8
w_class = 3.0
sharp = 1
diff --git a/code/modules/projectiles/guns/projectile/launcher.dm b/code/modules/projectiles/guns/projectile/launcher.dm
index ee0da727c7..6626d809cd 100644
--- a/code/modules/projectiles/guns/projectile/launcher.dm
+++ b/code/modules/projectiles/guns/projectile/launcher.dm
@@ -3,7 +3,7 @@
desc = "A device that launches things."
icon = 'icons/obj/weapons.dmi'
w_class = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
var/release_force = 0
diff --git a/code/modules/projectiles/guns/projectile/pneumatic.dm b/code/modules/projectiles/guns/projectile/pneumatic.dm
index 2a6e519d0d..43a5bc8e9a 100644
--- a/code/modules/projectiles/guns/projectile/pneumatic.dm
+++ b/code/modules/projectiles/guns/projectile/pneumatic.dm
@@ -5,7 +5,7 @@
icon_state = "pneumatic"
item_state = "pneumatic"
w_class = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
fire_sound_text = "a loud whoosh of moving air"
fire_delay = 50
fire_sound = 'sound/weapons/tablehit1.ogg'
diff --git a/code/modules/projectiles/guns/projectile/rocket.dm b/code/modules/projectiles/guns/projectile/rocket.dm
index ea88e7956a..27fb15d571 100644
--- a/code/modules/projectiles/guns/projectile/rocket.dm
+++ b/code/modules/projectiles/guns/projectile/rocket.dm
@@ -7,7 +7,7 @@
throw_speed = 2
throw_range = 10
force = 5.0
- flags = FPRINT | TABLEPASS | CONDUCT | USEDELAY
+ flags = CONDUCT | USEDELAY
slot_flags = 0
origin_tech = "combat=8;materials=5"
var/projectile = /obj/item/missile
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 87d214f067..6db9300375 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -6,7 +6,7 @@
max_shells = 4
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
origin_tech = "combat=4;materials=2"
@@ -66,7 +66,7 @@
max_shells = 2
w_class = 4.0
force = 10
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
origin_tech = "combat=3;materials=1"
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index d8ff676708..3b5ed8bd53 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -16,7 +16,6 @@
density = 1
unacidable = 1
anchored = 1 //There's a reason this is here, Mport. God fucking damn it -Agouri. Find&Fix by Pete. The reason this is here is to stop the curving of emitter shots.
- flags = FPRINT | TABLEPASS
pass_flags = PASSTABLE
mouse_opacity = 0
var/bumped = 0 //Prevents it from hitting more than one guy at once
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index 6fd9de29f7..1e7d7bdd56 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -427,7 +427,7 @@ datum
holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
return
-/* silicate
+ silicate
name = "Silicate"
id = "silicate"
description = "A compound that can be used to reinforce glass."
@@ -437,31 +437,9 @@ datum
reaction_obj(var/obj/O, var/volume)
src = null
if(istype(O,/obj/structure/window))
- if(O:silicate <= 200)
-
- O:silicate += volume
- O:health += volume * 3
-
- if(!O:silicateIcon)
- var/icon/I = icon(O.icon,O.icon_state,O.dir)
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
- else
- var/icon/I = O:silicateIcon
-
- var/r = (volume / 100) + 1
- var/g = (volume / 70) + 1
- var/b = (volume / 50) + 1
- I.SetIntensity(r,g,b)
- O.icon = I
- O:silicateIcon = I
-
- return*/
+ var/obj/structure/window/W = O
+ W.apply_silicate(volume)
+ return
oxygen
name = "Oxygen"
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index df9c8a219a..b9c657f97e 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -55,14 +55,14 @@ datum
empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
holder.clear_reagents()
return
-/*
+
silicate
name = "Silicate"
id = "silicate"
result = "silicate"
required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
result_amount = 3
-*/
+
stoxin
name = "Soporific"
id = "stoxin"
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index deee473acb..d82ded7bba 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -8,7 +8,6 @@
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
- flags = FPRINT
var/mode = 1
var/charge_cost = 50
var/charge_tick = 0
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index ee5be182dd..f643ccca90 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -10,7 +10,7 @@
desc = "Just your average condiment container."
icon = 'icons/obj/food.dmi'
icon_state = "emptycondiment"
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
possible_transfer_amounts = list(1,5,10)
center_of_mass = list("x"=16, "y"=6)
volume = 50
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 915a43d253..ceabea1e50 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -6,7 +6,7 @@
desc = "yummy"
icon = 'icons/obj/drinks.dmi'
icon_state = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
possible_transfer_amounts = list(5,10,25)
volume = 50
@@ -152,7 +152,7 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = null
volume = 150
- flags = FPRINT | CONDUCT | TABLEPASS | OPENCONTAINER
+ flags = CONDUCT | OPENCONTAINER
/obj/item/weapon/reagent_containers/food/drinks/golden_cup/tournament_26_06_2011
desc = "A golden cup. It will be presented to a winner of tournament 26 june and name of the winner will be graved on it."
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index 925c43e17d..1908c76740 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -12,7 +12,7 @@
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,60)
volume = 60
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
var/label_text = ""
@@ -209,7 +209,7 @@
volume = 120
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,60,120)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/noreact
name = "cryostasis beaker"
@@ -218,7 +218,7 @@
matter = list("glass" = 500)
volume = 60
amount_per_transfer_from_this = 10
- flags = FPRINT | TABLEPASS | OPENCONTAINER | NOREACT
+ flags = OPENCONTAINER | NOREACT
/obj/item/weapon/reagent_containers/glass/beaker/bluespace
name = "bluespace beaker"
@@ -228,7 +228,7 @@
volume = 300
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,60,120,300)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/vial
@@ -239,7 +239,7 @@
volume = 30
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone
New()
@@ -270,7 +270,7 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60,120)
volume = 120
- flags = FPRINT | OPENCONTAINER
+ flags = OPENCONTAINER
attackby(var/obj/D, mob/user as mob)
if(isprox(D))
@@ -297,7 +297,7 @@
volume = 15
amount_per_transfer_from_this = 5
possible_transfer_amounts = list(1,5,15)
- flags = FPRINT | TABLEPASS | OPENCONTAINER */
+ flags = OPENCONTAINER */
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
@@ -329,7 +329,6 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
- flags = FPRINT
/obj/item/weapon/reagent_containers/glass/dispenser
name = "reagent glass"
@@ -337,7 +336,7 @@
icon = 'icons/obj/chemical.dmi'
icon_state = "beaker0"
amount_per_transfer_from_this = 10
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
name = "reagent glass (surfactant)"
diff --git a/code/modules/reagents/reagent_containers/glass/bottle.dm b/code/modules/reagents/reagent_containers/glass/bottle.dm
index 846eb3bfa7..44afd28407 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle.dm
@@ -9,7 +9,7 @@
item_state = "atoxinbottle"
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,60)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
volume = 60
on_reagent_change()
diff --git a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
index 9286e5ab03..7c8bf02a5b 100644
--- a/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
+++ b/code/modules/reagents/reagent_containers/glass/bottle/robot.dm
@@ -2,7 +2,7 @@
/obj/item/weapon/reagent_containers/glass/bottle/robot
amount_per_transfer_from_this = 10
possible_transfer_amounts = list(5,10,15,25,30,50,100)
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
volume = 60
var/reagent = ""
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 49348a22a0..fd3557b62f 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -11,7 +11,7 @@
amount_per_transfer_from_this = 5
volume = 30
possible_transfer_amounts = null
- flags = FPRINT | TABLEPASS | OPENCONTAINER
+ flags = OPENCONTAINER
slot_flags = SLOT_BELT
/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 1db8fa1aa4..cc9778eb4f 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "cleaner"
item_state = "cleaner"
- flags = TABLEPASS|OPENCONTAINER|FPRINT|NOBLUDGEON
+ flags = OPENCONTAINER|NOBLUDGEON
slot_flags = SLOT_BELT
throwforce = 3
w_class = 2.0
@@ -21,7 +21,7 @@
..()
src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
-/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob)
+/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) \
|| istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
return
@@ -46,7 +46,7 @@
user << "\The [src] is empty!"
return
- Spray_at(A)
+ Spray_at(A, user, proximity)
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
@@ -61,28 +61,39 @@
log_game("[key_name(user)] fired Space lube from \a [src].")
return
-/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj)
- var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
- D.create_reagents(amount_per_transfer_from_this)
- reagents.trans_to(D, amount_per_transfer_from_this, 1/spray_size)
- D.icon += mix_color_from_reagents(D.reagents.reagent_list)
+/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity)
+ if (A.density && proximity)
+ A.visible_message("[usr] sprays [A] with [src].")
+ var/obj/D = new/obj()
+ D.create_reagents(amount_per_transfer_from_this)
+ reagents.trans_to(D, amount_per_transfer_from_this)
+ D.icon += mix_color_from_reagents(D.reagents.reagent_list)
+ spawn(0)
+ D.reagents.reaction(A)
+ sleep(5)
+ del(D)
+ else
+ var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
+ D.create_reagents(amount_per_transfer_from_this)
+ reagents.trans_to(D, amount_per_transfer_from_this, 1/spray_size)
+ D.icon += mix_color_from_reagents(D.reagents.reagent_list)
- var/turf/A_turf = get_turf(A)//BS12
+ var/turf/A_turf = get_turf(A)//BS12
- spawn(0)
- for(var/i=0, i[src] states, \"Cannot harvest. Source is emitting conflicting energy signatures.\"")
- else if(!cur_artifact.my_effect.activated && !cur_artifact.secondary_effect.activated)
+ else if(!cur_artifact.my_effect.activated && !(cur_artifact.secondary_effect && cur_artifact.secondary_effect.activated))
src.visible_message("[src] states, \"Cannot harvest. No energy emitting from source.\"")
else
diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
index 38fab6221f..6f79f8d8ba 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
@@ -6,7 +6,6 @@
icon_state = "flashgun"
item_state = "lampgreen"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/nearest_artifact_id = "unknown"
var/nearest_artifact_distance = -1
diff --git a/code/modules/research/xenoarchaeology/tools/tools_coresampler.dm b/code/modules/research/xenoarchaeology/tools/tools_coresampler.dm
index bcfa0eb823..7c357b53da 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_coresampler.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_coresampler.dm
@@ -20,7 +20,6 @@
icon_state = "sampler0"
item_state = "screwdriver_brown"
w_class = 1.0
- flags = FPRINT | TABLEPASS
//slot_flags = SLOT_BELT
var/sampled_turf = ""
var/num_stored_bags = 10
diff --git a/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm
index 111e465e48..425b3e0dc3 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_depthscanner.dm
@@ -10,7 +10,6 @@
icon_state = "crap"
item_state = "analyzer"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slot_flags = SLOT_BELT
var/list/positive_locations = list()
var/datum/depth_scan/current
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index d2d8148c13..95b3276bd3 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -20,7 +20,7 @@
// var/maxshieldload = 200
var/obj/structure/cable/attached // the attached cable
var/storedpower = 0
- flags = FPRINT | CONDUCT
+ flags = CONDUCT
//There have to be at least two posts, so these are effectively doubled
var/power_draw = 30000 //30 kW. How much power is drawn from powernet. Increase this to allow the generator to sustain longer shields, at the cost of more power draw.
var/max_stored_power = 50000 //50 kW
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index dcd6cc4b31..72cff7ab3d 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -67,8 +67,7 @@
/datum/surgery_step/open_encased/retract
allowed_tools = list(
/obj/item/weapon/retractor = 100, \
- /obj/item/weapon/crowbar = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
+ /obj/item/weapon/crowbar = 75
)
min_duration = 30
@@ -124,8 +123,7 @@
/datum/surgery_step/open_encased/close
allowed_tools = list(
/obj/item/weapon/retractor = 100, \
- /obj/item/weapon/crowbar = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
+ /obj/item/weapon/crowbar = 75
)
min_duration = 20
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 238657c28d..2642b87cb7 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -305,7 +305,7 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\blue [user] cuts off [target]'s [affected.display_name] with \the [tool].", \
"\blue You cut off [target]'s [affected.display_name] with \the [tool].")
- affected.droplimb(1,0)
+ affected.droplimb(1,1,1)
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 3f5cc5800f..825a4c582e 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -98,7 +98,7 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
//We had proper tools! (or RNG smiled.) and user did not move or change hands.
if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully
- else if (tool in user.contents && user.Adjacent(M)) //or
+ else if ((tool in user.contents) && user.Adjacent(M)) //or
S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~
else // This failing silently was a pain.
user << "\red You must remain close to your patient to conduct surgery."
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index df2286f70e..072423d496 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -337,7 +337,7 @@
load.forceMove(dest)
load.set_dir(get_dir(loc, dest))
- load.anchored = initial(load.anchored)
+ load.anchored = 0 //we can only load non-anchored items, so it makes sense to set this to false
load.pixel_x = initial(load.pixel_x)
load.pixel_y = initial(load.pixel_y)
load.layer = initial(load.layer)
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index 977c9ab9ca..0f16b91b34 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -16,17 +16,21 @@
uniqueID = rand(0,10000)
..()
-/datum/disease2/disease/proc/makerandom(var/greater=0)
+/datum/disease2/disease/proc/makerandom(var/severity=1)
for(var/i=1 ; i <= max_stage ; i++ )
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
holder.stage = i
- if(greater)
- holder.getrandomeffect(2)
- else
- holder.getrandomeffect()
+ holder.getrandomeffect(severity)
effects += holder
uniqueID = rand(0,10000)
- infectionchance = rand(60,90)
+ switch(severity)
+ if(1)
+ infectionchance = 1
+ if(2)
+ infectionchance = rand(10,20)
+ else
+ infectionchance = rand(60,90)
+
antigen |= text2num(pick(ANTIGENS))
antigen |= text2num(pick(ANTIGENS))
spreadtype = prob(70) ? "Airborne" : "Contact"
@@ -76,7 +80,7 @@
clicks += 10
//Moving to the next stage
- if(clicks > stage*100 && prob(10))
+ if(clicks > max(stage*100, 200) && prob(10))
if(stage == max_stage)
src.cure(mob)
mob.antibodies |= src.antigen
@@ -84,7 +88,8 @@
clicks = 0
//Do nasty effects
for(var/datum/disease2/effectholder/e in effects)
- e.runeffect(mob,stage)
+ if(prob(33))
+ e.runeffect(mob,stage)
//Short airborne spread
if(src.spreadtype == "Airborne")
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 3ebeefeba8..50d7bcb569 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -9,7 +9,7 @@
/datum/disease2/effectholder/proc/runeffect(var/mob/living/carbon/human/mob,var/stage)
if(happensonce > -1 && effect.stage <= stage && prob(chance))
- effect.activate(mob)
+ effect.activate(mob, multiplier)
if(happensonce == 1)
happensonce = -1
@@ -33,14 +33,14 @@
multiplier = rand(1,effect.maxm)
/datum/disease2/effectholder/proc/majormutate()
- getrandomeffect(2)
+ getrandomeffect(3)
////////////////////////////////////////////////////////////////
////////////////////////EFFECTS/////////////////////////////////
////////////////////////////////////////////////////////////////
/datum/disease2/effect
- var/chance_maxm = 50
+ var/chance_maxm = 50 //note that disease effects only proc once every 3 ticks for humans
var/name = "Blanking effect"
var/stage = 4
var/maxm = 1
@@ -56,10 +56,16 @@
////////////////////////STAGE 4/////////////////////////////////
+/datum/disease2/effect/nothing
+ name = "Nil Syndrome"
+ stage = 4
+ badness = 1
+ chance_maxm = 0
+
/datum/disease2/effect/gibbingtons
name = "Gibbingtons Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.gib()
@@ -67,19 +73,21 @@
name = "Radian's Syndrome"
stage = 4
maxm = 3
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.radiation += (2*multiplier)
/datum/disease2/effect/deaf
name = "Dead Ear Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf += 20
/datum/disease2/effect/monkey
name = "Monkism Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob,/mob/living/carbon/human))
var/mob/living/carbon/human/h = mob
@@ -88,7 +96,7 @@
/datum/disease2/effect/suicide
name = "Suicidal Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
@@ -101,12 +109,14 @@
/datum/disease2/effect/killertoxins
name = "Toxification Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss(15*multiplier)
/datum/disease2/effect/dna
name = "Reverse Pattern Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.bodytemperature = max(mob.bodytemperature, 350)
scramble(0,mob,10)
@@ -115,6 +125,7 @@
/datum/disease2/effect/organs
name = "Shutdown Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -140,6 +151,7 @@
/datum/disease2/effect/immortal
name = "Longevity Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -157,11 +169,10 @@
var/backlash_amt = 5*multiplier
mob.apply_damages(backlash_amt,backlash_amt,backlash_amt,backlash_amt)
-////////////////////////STAGE 3/////////////////////////////////
-
/datum/disease2/effect/bones
name = "Fragile Bones Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -174,6 +185,8 @@
for (var/datum/organ/external/E in H.organs)
E.min_broken_damage = initial(E.min_broken_damage)
+////////////////////////STAGE 3/////////////////////////////////
+
/datum/disease2/effect/toxins
name = "Hyperacidity"
stage = 3
@@ -192,9 +205,8 @@
name = "Telepathy Syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
- mob.dna.check_integrity()
mob.dna.SetSEState(REMOTETALKBLOCK,1)
- domutcheck(mob, null)
+ domutcheck(mob, null, MUTCHK_FORCED)
/datum/disease2/effect/mind
name = "Lazy Mind Syndrome"
@@ -239,10 +251,10 @@
activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_damage(2, CLONE)
-
/datum/disease2/effect/groan
name = "Groaning Syndrome"
stage = 3
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*groan")
////////////////////////STAGE 2/////////////////////////////////
@@ -250,6 +262,7 @@
/datum/disease2/effect/scream
name = "Loudness Syndrome"
stage = 2
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*scream")
@@ -262,6 +275,7 @@
/datum/disease2/effect/sleepy
name = "Resting Syndrome"
stage = 2
+ chance_maxm = 15
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*collapse")
@@ -288,6 +302,7 @@
/datum/disease2/effect/fridge
name = "Refridgerator Syndrome"
stage = 2
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*shiver")
@@ -333,17 +348,19 @@
name = "Flemmingtons"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
- mob << "\red Mucous runs down the back of your throat."
+ mob << "Mucous runs down the back of your throat."
/datum/disease2/effect/drool
name = "Saliva Effect"
stage = 1
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*drool")
/datum/disease2/effect/twitch
name = "Twitcher"
stage = 1
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*twitch")
@@ -351,4 +368,4 @@
name = "Headache"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
- mob << " Your head hurts a bit"
+ mob << "Your head hurts a bit."
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 6118dade42..6f55e3ba58 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -1,53 +1,61 @@
-//Returns 1 if mob can be infected, 0 otherwise. Checks his clothing.
-proc/get_infection_chance(var/mob/living/carbon/M, var/vector = "Airborne")
- var/score = 0
+//Returns 1 if mob can be infected, 0 otherwise.
+proc/infection_check(var/mob/living/carbon/M, var/vector = "Airborne")
if (!istype(M))
return 0
- if(istype(M, /mob/living/carbon/human))
+ var/protection = M.getarmor(null, "bio") //gets the full body bio armour value, weighted by body part coverage.
+ var/score = round(0.06*protection) //scales 100% protection to 6.
- if (vector == "Airborne")
- if(M.internal) //not breathing infected air helps greatly
- score = 30
- if(M.wear_mask)
- score += 5
- if(istype(M:wear_mask, /obj/item/clothing/mask/surgical) && !M.internal)
- score += 10
- if(istype(M:wear_suit, /obj/item/clothing/suit/space) && istype(M:head, /obj/item/clothing/head/helmet/space))
- score += 20
- if(istype(M:wear_suit, /obj/item/clothing/suit/bio_suit) && istype(M:head, /obj/item/clothing/head/bio_hood))
- score += 30
+ switch(vector)
+ if("Airborne")
+ if(M.internal)
+ score = 6 //not breathing infected air helps greatly
+ var/obj/item/I = M.wear_mask
+
+ //masks provide a small bonus and can replace overall bio protection
+ score = max(score, round(0.06*I.armor["bio"]))
+ if (istype(I, /obj/item/clothing/mask))
+ score += 1 //this should be added after
+
+ if("Contact")
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+
+ //gloves provide a larger bonus
+ if (istype(H.gloves, /obj/item/clothing/gloves))
+ score += 2
-
- if (vector == "Contact")
- if(M:gloves) score += 15
- if(istype(M:wear_suit, /obj/item/clothing/suit/space) && istype(M:head, /obj/item/clothing/head/helmet/space))
- score += 15
- if(istype(M:wear_suit, /obj/item/clothing/suit/bio_suit) && istype(M:head, /obj/item/clothing/head/bio_hood))
- score += 15
-
-
-// log_debug("[M]'s resistance to [vector] viruses: [score]")
-
- if(score >= 30)
+ if(score >= 6)
return 0
- else if(score == 25 && prob(99))
+ else if(score >= 5 && prob(99))
return 0
- else if(score == 20 && prob(95))
+ else if(score >= 4 && prob(95))
return 0
- else if(score == 15 && prob(75))
+ else if(score >= 3 && prob(75))
return 0
- else if(score == 10 && prob(55))
+ else if(score >= 2 && prob(55))
return 0
- else if(score == 5 && prob(35))
+ else if(score >= 1 && prob(35))
return 0
-// log_debug("Infection got through")
return 1
+//Similar to infection check, but used for when M is spreading the virus.
+/proc/infection_spreading_check(var/mob/living/carbon/M, var/vector = "Airborne")
+ if (!istype(M))
+ return 0
+
+ var/protection = M.getarmor(null, "bio") //gets the full body bio armour value, weighted by body part coverage.
+
+ if (vector == "Airborne")
+ var/obj/item/I = M.wear_mask
+ if (istype(I))
+ protection = max(protection, round(0.06*I.armor["bio"]))
+
+ return prob(protection)
+
//Checks if table-passing table can reach target (5 tile radius)
proc/airborne_can_reach(turf/source, turf/target)
var/obj/dummy = new(source)
- dummy.flags = FPRINT | TABLEPASS
dummy.pass_flags = PASSTABLE
for(var/i=0, i<5, i++) if(!step_towards(dummy, target)) break
@@ -72,44 +80,42 @@ proc/airborne_can_reach(turf/source, turf/target)
return
if(M.reagents.has_reagent("spaceacillin"))
return
-
- if(istype(M,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/chimp = M
- if (!(chimp.greaterform in disease.affected_species))
- return
-
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/chump = M
- if (!(chump.species.name in disease.affected_species))
- return
+
+ if(!disease.affected_species.len)
+ return
+
+ if (!(M.species.name in disease.affected_species))
+ if (forced)
+ disease.affected_species[1] = M.species.name
+ else
+ return //not compatible with this species
// log_debug("Infecting [M]")
- if(prob(disease.infectionchance) || forced)
- // certain clothes can prevent an infection
- if(!forced && !get_infection_chance(M, disease.spreadtype))
- return
-
+ if(forced || (infection_check(M, disease.spreadtype) && prob(disease.infectionchance)))
var/datum/disease2/disease/D = disease.getcopy()
D.minormutate()
// log_debug("Adding virus")
M.virus2["[D.uniqueID]"] = D
M.hud_updateflag |= 1 << STATUS_HUD
+
+//Infects mob M with disease D
+/proc/infect_mob(var/mob/living/carbon/M, var/datum/disease2/disease/D)
+ infect_virus2(M,D,1)
+ M.hud_updateflag |= 1 << STATUS_HUD
+
//Infects mob M with random lesser disease, if he doesn't have one
/proc/infect_mob_random_lesser(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom()
- D.infectionchance = 1
- infect_virus2(M,D,1)
- M.hud_updateflag |= 1 << STATUS_HUD
+ D.makerandom(1)
+ infect_mob(M, D)
//Infects mob M with random greated disease, if he doesn't have one
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom(1)
- infect_virus2(M,D,1)
- M.hud_updateflag |= 1 << STATUS_HUD
+ D.makerandom(2)
+ infect_mob(M, D)
//Fancy prob() function.
/proc/dprob(var/p)
@@ -125,12 +131,15 @@ proc/airborne_can_reach(turf/source, turf/target)
// log_debug("Attempting virus [ID]")
var/datum/disease2/disease/V = virus2[ID]
if(V.spreadtype != vector) continue
+
+ //It's hard to get other people sick if you're in an airtight suit.
+ if(!infection_spreading_check(src, V.spreadtype)) continue
if (vector == "Airborne")
if(airborne_can_reach(get_turf(src), get_turf(victim)))
// log_debug("In range, infecting")
infect_virus2(victim,V)
- else
+// else
// log_debug("Could not reach target")
if (vector == "Contact")
@@ -147,7 +156,7 @@ proc/airborne_can_reach(turf/source, turf/target)
var/mob/living/carbon/human/H = victim
var/datum/organ/external/select_area = H.get_organ(src.zone_sel.selecting)
var/list/clothes = list(H.head, H.wear_mask, H.wear_suit, H.w_uniform, H.gloves, H.shoes)
- for(var/obj/item/clothing/C in clothes )
+ for(var/obj/item/clothing/C in clothes)
if(C && istype(C))
if(C.body_parts_covered & select_area.body_part)
nudity = 0
@@ -155,4 +164,5 @@ proc/airborne_can_reach(turf/source, turf/target)
for (var/ID in victim.virus2)
var/datum/disease2/disease/V = victim.virus2[ID]
if(V && V.spreadtype != vector) continue
+ if(!infection_spreading_check(victim, V.spreadtype)) continue
infect_virus2(src,V)
diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm
index d145ac0b2a..a2a102611d 100644
--- a/code/modules/virus2/items_devices.dm
+++ b/code/modules/virus2/items_devices.dm
@@ -6,7 +6,7 @@
icon_state = "health"
w_class = 2.0
item_state = "electronic"
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
/obj/item/device/antibody_scanner/attack(mob/M as mob, mob/user as mob)
if(!istype(M,/mob/living/carbon/))
diff --git a/code/setup.dm b/code/setup.dm
index 4332480676..2b3407ad60 100644
--- a/code/setup.dm
+++ b/code/setup.dm
@@ -11,8 +11,9 @@
//radiation constants
#define STEFAN_BOLTZMANN_CONSTANT 5.6704e-8 //W/(m^2*K^4)
#define COSMIC_RADIATION_TEMPERATURE 3.15 //K
-#define AVERAGE_SOLAR_RADIATION 200 //W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars.
+#define AVERAGE_SOLAR_RADIATION 200 //W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars. From the numbers on Erebus, this'd be an orbit of 23.3 lightseconds.
#define RADIATOR_OPTIMUM_PRESSURE 110 //kPa at 20 C
+#define RADIATOR_EXPOSED_SURFACE_AREA 0.03 //The pipe looks to be thin vertically and wide horizontally, so we'll assume that it's three centimeters thick and only explosed to the sun edge-on.
#define CELL_VOLUME 2500 //liters in a cell
#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) //moles in a 2.5 m^3 cell at 101.325 Pa and 20 degC
@@ -169,36 +170,34 @@
//FLAGS BITMASK
#define STOPSPRESSUREDMAGE 1 //This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere
//To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
-#define TABLEPASS 2 // can pass by a table or rack
-#define NOBLUDGEON 4 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler
-#define AIRTIGHT 8 // functions with internals
-#define USEDELAY 16 // 1 second extra delay on use (Can be used once every 2s)
-#define NOSHIELD 32 // weapon not affected by shield
-#define CONDUCT 64 // conducts electricity (metal etc.)
-#define FPRINT 256 // takes a fingerprint
-#define ON_BORDER 512 // item has priority to check when entering or leaving
-#define NOBLOODY 2048 // used to items if they don't want to get a blood overlay
-#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 NOBLUDGEON 2 // when an item has this it produces no "X has been hit by Y with Z" message with the default handler
+#define AIRTIGHT 4 // functions with internals
+#define USEDELAY 8 // 1 second extra delay on use (Can be used once every 2s)
+#define NOSHIELD 16 // weapon not affected by shield
+#define CONDUCT 32 // conducts electricity (metal etc.)
+#define ON_BORDER 64 // item has priority to check when entering or leaving
+#define NOBLOODY 512 // used to items if they don't want to get a blood overlay
+#define NODELAY 8192 // 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 GLASSESCOVERSEYES 1024
-#define MASKCOVERSEYES 1024 // get rid of some of the other retardation in these flags
-#define HEADCOVERSEYES 1024 // feel free to realloc these numbers for other purposes
-#define MASKCOVERSMOUTH 2048 // on other items, these are just for mask/head
-#define HEADCOVERSMOUTH 2048
+#define GLASSESCOVERSEYES 256
+#define MASKCOVERSEYES 256 // get rid of some of the other retardation in these flags
+#define HEADCOVERSEYES 256 // feel free to realloc these numbers for other purposes
+#define MASKCOVERSMOUTH 512 // on other items, these are just for mask/head
+#define HEADCOVERSMOUTH 512
-#define THICKMATERIAL 1024 //From /tg: prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP for shoes)
-#define NOSLIP 1024 //prevents from slipping on wet floors, in space etc
+#define THICKMATERIAL 256 //From /tg: prevents syringes, parapens and hypos if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP for shoes)
+#define NOSLIP 256 //prevents from slipping on wet floors, in space etc
-#define OPENCONTAINER 4096 // is an open container for chemistry purposes
+#define OPENCONTAINER 1024 // is an open container for chemistry purposes
-#define BLOCK_GAS_SMOKE_EFFECT 8192 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
-#define ONESIZEFITSALL 8192
-#define PHORONGUARD 16384 //Does not get contaminated by phoron.
+#define BLOCK_GAS_SMOKE_EFFECT 2048 // blocks the effect that chemical clouds would have on a mob --glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
+#define ONESIZEFITSALL 2048
+#define PHORONGUARD 4096 //Does not get contaminated by phoron.
-#define NOREACT 16384 //Reagents dont' react inside this container.
+#define NOREACT 4096 //Reagents dont' react inside this container.
#define BLOCKHEADHAIR 4 // temporarily removes the user's hair overlay. Leaves facial hair.
-#define BLOCKHAIR 32768 // temporarily removes the user's hair, facial and otherwise.
+#define BLOCKHAIR 8192 // temporarily removes the user's hair, facial and otherwise.
//flags for pass_flags
#define PASSTABLE 1
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index 937b5a71c3..5bb538a3dc 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -28,8 +28,8 @@ em {font-style: normal;font-weight: bold;}
/* Admin: Private Messages */
.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;}
.pm .in {color: #ff0000;}
-.pm .out {color: #B54A4A;}
-.pm .other {color: #164664;}
+.pm .out {color: #ff0000;}
+.pm .other {color: #0000ff;}
/* Admin: Channels */
.mod_channel {color: #735638; font-weight: bold;}
diff --git a/code/unused/assemblies.dm b/code/unused/assemblies.dm
index 2c6909287a..84c4b4506a 100644
--- a/code/unused/assemblies.dm
+++ b/code/unused/assemblies.dm
@@ -16,7 +16,7 @@
var/obj/item/device/igniter/part2 = null
var/obj/item/clothing/suit/armor/vest/part3 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/m_i_ptank
desc = "A very intricate igniter and proximity sensor electrical assembly mounted onto top of a plasma tank."
@@ -26,7 +26,7 @@
var/obj/item/device/igniter/part2 = null
var/obj/item/weapon/tank/plasma/part3 = null
status = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/prox_ignite
name = "Proximity/Igniter Assembly"
@@ -35,7 +35,7 @@
var/obj/item/device/prox_sensor/part1 = null
var/obj/item/device/igniter/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/r_i_ptank
desc = "A very intricate igniter and signaller electrical assembly mounted onto top of a plasma tank."
@@ -45,7 +45,7 @@
var/obj/item/device/igniter/part2 = null
var/obj/item/weapon/tank/plasma/part3 = null
status = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/anal_ignite
name = "Health-Analyzer/Igniter Assembly"
@@ -54,7 +54,7 @@
var/obj/item/device/healthanalyzer/part1 = null
var/obj/item/device/igniter/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
item_state = "electronic"
/obj/item/assembly/time_ignite
@@ -64,7 +64,7 @@
var/obj/item/device/timer/part1 = null
var/obj/item/device/igniter/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/t_i_ptank
desc = "A very intricate igniter and timer assembly mounted onto top of a plasma tank."
@@ -74,7 +74,7 @@
var/obj/item/device/igniter/part2 = null
var/obj/item/weapon/tank/plasma/part3 = null
status = 0.0
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/rad_ignite
name = "Radio/Igniter Assembly"
@@ -83,7 +83,7 @@
var/obj/item/device/radio/signaler/part1 = null
var/obj/item/device/igniter/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/rad_infra
name = "Signaller/Infrared Assembly"
@@ -92,7 +92,7 @@
var/obj/item/device/radio/signaler/part1 = null
var/obj/item/device/infra/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/rad_prox
name = "Signaller/Prox Sensor Assembly"
@@ -101,7 +101,7 @@
var/obj/item/device/radio/signaler/part1 = null
var/obj/item/device/prox_sensor/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
/obj/item/assembly/rad_time
name = "Signaller/Timer Assembly"
@@ -110,7 +110,7 @@
var/obj/item/device/radio/signaler/part1 = null
var/obj/item/device/timer/part2 = null
status = null
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
*/
/obj/item/assembly/time_ignite/premade/New()
diff --git a/code/unused/asteroiddevice.dm b/code/unused/asteroiddevice.dm
index 57a5747cfe..f642884d95 100644
--- a/code/unused/asteroiddevice.dm
+++ b/code/unused/asteroiddevice.dm
@@ -2,7 +2,7 @@
name = "GPS"
icon = 'icons/obj/device.dmi'
icon_state = "pinoff"
- flags = FPRINT | TABLEPASS| CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
item_state = "electronic"
diff --git a/code/game/objects/closets/ert.dm b/code/unused/closets/ert.dm
similarity index 100%
rename from code/game/objects/closets/ert.dm
rename to code/unused/closets/ert.dm
diff --git a/code/game/objects/closets/secure/civilian.dm b/code/unused/closets/secure/civilian.dm
similarity index 100%
rename from code/game/objects/closets/secure/civilian.dm
rename to code/unused/closets/secure/civilian.dm
diff --git a/code/game/objects/closets/secure/research.dm b/code/unused/closets/secure/research.dm
old mode 100755
new mode 100644
similarity index 100%
rename from code/game/objects/closets/secure/research.dm
rename to code/unused/closets/secure/research.dm
diff --git a/code/unused/hivebot/hive_modules.dm b/code/unused/hivebot/hive_modules.dm
index 09a0207ec6..69ffb9d62f 100644
--- a/code/unused/hivebot/hive_modules.dm
+++ b/code/unused/hivebot/hive_modules.dm
@@ -4,7 +4,7 @@
icon_state = "std_module"
w_class = 2.0
item_state = "electronic"
- flags = FPRINT|TABLEPASS | CONDUCT
+ flags = CONDUCT
var/list/modules = list()
/obj/item/weapon/hive_module/standard
diff --git a/code/unused/new_year.dm b/code/unused/new_year.dm
index 7e2dfb5c22..0f2bdca1c3 100644
--- a/code/unused/new_year.dm
+++ b/code/unused/new_year.dm
@@ -55,7 +55,7 @@
item_state = "flashbang"
throw_speed = 4
throw_range = 20
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
slot_flags = SLOT_BELT
/obj/item/weapon/firbang/afterattack(atom/target as mob|obj|turf|area, mob/user as mob)
diff --git a/code/unused/optics/beam.dm b/code/unused/optics/beam.dm
index 0c2ebfcdf6..2e4f87e367 100644
--- a/code/unused/optics/beam.dm
+++ b/code/unused/optics/beam.dm
@@ -8,7 +8,6 @@
density = 0
mouse_opacity = 0
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
- flags = TABLEPASS
var/wavelength // the (vaccuum) wavelength of the beam
var/width = 1 // 1=thin, 2=medium, 3=wide
diff --git a/code/unused/optics/laser-pointer.dm b/code/unused/optics/laser-pointer.dm
index 378ba7b780..f25e5f3bb1 100644
--- a/code/unused/optics/laser-pointer.dm
+++ b/code/unused/optics/laser-pointer.dm
@@ -21,7 +21,7 @@
var/obj/effect/beam/laser/beam // the created beam
- flags = FPRINT | CONDUCT | TABLEPASS
+ flags = CONDUCT
attack_ai()
return
diff --git a/code/unused/optics/mirror.dm b/code/unused/optics/mirror.dm
index ca7b7be860..6570874b1f 100644
--- a/code/unused/optics/mirror.dm
+++ b/code/unused/optics/mirror.dm
@@ -21,7 +21,6 @@
icon_state = "mirrorA"
set_dir(1)
desc = "A large, optical-grade mirror firmly mounted on a stand."
- flags = FPRINT
anchored = 0
var/rotatable = 0 // true if mirror can be rotated
var/angle = 0 // normal of mirror, 0-15. 0=N, 1=NNE, 2=NE, 3=ENE, 4=E etc
diff --git a/code/unused/pda2/pda2.dm b/code/unused/pda2/pda2.dm
index fb3001c9a0..7f451c0d39 100644
--- a/code/unused/pda2/pda2.dm
+++ b/code/unused/pda2/pda2.dm
@@ -34,7 +34,6 @@
icon_state = "pda"
item_state = "electronic"
w_class = 2.0
- flags = FPRINT | TABLEPASS
slow_flags = SLOT_BELT
var/owner = null
diff --git a/code/unused/powerarmor/powerarmor.dm b/code/unused/powerarmor/powerarmor.dm
index 1e23e4e98b..36b066ffe9 100644
--- a/code/unused/powerarmor/powerarmor.dm
+++ b/code/unused/powerarmor/powerarmor.dm
@@ -6,7 +6,6 @@
w_class = 4//bulky item
protective_temperature = 1000
- flags = FPRINT | TABLEPASS
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/gun,/obj/item/weapon/handcuffs,/obj/item/weapon/tank/emergency_oxygen)
@@ -196,7 +195,7 @@
name = "Powered armor"
icon_state = "swat"
desc = "Not for rookies."
- flags = FPRINT | TABLEPASS | HEADCOVERSEYES | HEADCOVERSMOUTH
+ flags = HEADCOVERSEYES | HEADCOVERSMOUTH
see_face = 0.0
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
@@ -235,7 +234,6 @@
name = "Powered armor"
icon_state = "swat"
desc = "Not for rookies."
- flags = FPRINT | TABLEPASS
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
@@ -243,7 +241,6 @@
name = "Powered armor"
icon_state = "swat"
desc = "Not for rookies."
- flags = FPRINT | TABLEPASS
item_state = "swat"
armor = list(melee = 40, bullet = 30, laser = 20,energy = 15, bomb = 25, bio = 10, rad = 10)
diff --git a/code/unused/scrap.dm b/code/unused/scrap.dm
index bd3dad3dba..271f8b131d 100644
--- a/code/unused/scrap.dm
+++ b/code/unused/scrap.dm
@@ -21,7 +21,7 @@
throw_speed = 1
throw_range = 4
w_class = 1
- flags = FPRINT | TABLEPASS | CONDUCT
+ flags = CONDUCT
#define MAX_SCRAP 15000 // maximum content amount of a scrap pile
diff --git a/code/unused/vehicle.dm b/code/unused/vehicle.dm
index f289f80f5e..f8a04640dc 100644
--- a/code/unused/vehicle.dm
+++ b/code/unused/vehicle.dm
@@ -3,7 +3,6 @@
icon = 'escapepod.dmi'
icon_state = "podfire"
density = 1
- flags = FPRINT
anchored = 1.0
var/speed = 10.0
var/maximum_speed = 10.0
diff --git a/code/world.dm b/code/world.dm
index f53e039e4f..3897c24729 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -212,8 +212,6 @@ var/world_topic_spam_protect_time = world.timeofday
for(var/client/C in clients)
if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite
C << link("byond://[config.server]")
- else
- C << link("byond://[world.address]:[world.port]")
..(reason)
diff --git a/config/example/config.txt b/config/example/config.txt
index eb9ab2195f..333082d189 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -85,7 +85,7 @@ LOG_PDA
## set to 0 to disable that mode
PROBABILITY EXTENDED 1
PROBABILITY MALFUNCTION 1
-PROBABILITY NUCLEAR 1
+PROBABILITY MERCENARY 1
PROBABILITY WIZARD 1
PROBABILITY CHANGELING 1
PROBABILITY CULT 1
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 53cf56309f..9d7c3845d9 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index cae6ddf042..6155e0994c 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/doors/DoorHazard.dmi b/icons/obj/doors/DoorHazard.dmi
index 037c1475f2..35f4c474bf 100644
Binary files a/icons/obj/doors/DoorHazard.dmi and b/icons/obj/doors/DoorHazard.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index a8e83d5c20..72d61bd1ad 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -372,9 +372,9 @@
"ahh" = (/obj/machinery/photocopier,/obj/machinery/newscaster/security_unit{pixel_x = -30; pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"ahi" = (/obj/structure/filingcabinet/chestdrawer,/obj/machinery/camera{c_tag = "Security Warden Office"; dir = 2; network = list("SS13")},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"ahj" = (/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/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"ahk" = (/obj/structure/table/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]"; name = "Armory Inventory"},/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"ahl" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/red,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"ahm" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp,/obj/item/weapon/stamp/denied{pixel_x = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"ahk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
+"ahl" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
+"ahm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"ahn" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/main)
"aho" = (/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"ahp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
@@ -431,7 +431,7 @@
"aio" = (/obj/machinery/camera{c_tag = "Security Processing"; dir = 4; network = list("SS13")},/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/turf/simulated/floor,/area/security/brig)
"aip" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/security/brig)
"aiq" = (/obj/structure/table,/turf/simulated/floor,/area/security/brig)
-"air" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/security{pixel_y = -32},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"air" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"ais" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Warden"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"ait" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiu" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
@@ -457,8 +457,8 @@
"aiO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
"aiP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig)
"aiQ" = (/obj/machinery/computer/secure_data,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/brig)
-"aiR" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"aiS" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"aiR" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"aiS" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/security{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiT" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiU" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
@@ -466,8 +466,8 @@
"aiX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"aiY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"aiZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
-"aja" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
-"ajb" = (/obj/structure/table,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -32},/obj/item/clothing/tie/holobadge,/obj/item/clothing/tie/holobadge,/obj/item/clothing/tie/holobadge/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"aja" = (/obj/machinery/camera{c_tag = "Brig East"; dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/computer/guestpass{pixel_y = -29},/turf/simulated/floor,/area/security/brig)
+"ajb" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 24},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"ajc" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/wall,/area/crew_quarters/heads/hos)
"ajd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera{c_tag = "HoS Office South"; dir = 1},/obj/structure/flora/pottedplant,/obj/machinery/newscaster/security_unit{pixel_x = -30},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"aje" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
@@ -483,9 +483,9 @@
"ajo" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/security{name = "Evidence Storage"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
"ajp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
"ajq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
-"ajr" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/turf/simulated/floor,/area/security/brig)
-"ajs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
-"ajt" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access_txt = "1"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/brig)
+"ajr" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"ajs" = (/obj/machinery/camera{c_tag = "Common Brig Northwest"; dir = 4; network = list("SS13","Prison")},/obj/machinery/computer/arcade,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/prison)
+"ajt" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"aju" = (/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},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"ajv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
"ajw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
@@ -523,7 +523,7 @@
"akc" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"akd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
"ake" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig)
-"akf" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/brig)
+"akf" = (/obj/structure/table,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/tie/holobadge,/obj/item/clothing/tie/holobadge,/obj/item/clothing/tie/holobadge/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"akg" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/security/brig)
"akh" = (/obj/structure/table/rack,/obj/item/weapon/storage/briefcase{pixel_x = -2; pixel_y = -5},/obj/item/weapon/storage/briefcase{pixel_x = 3; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"aki" = (/obj/structure/disposalpipe/segment,/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
@@ -557,7 +557,7 @@
"akK" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
"akL" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"akM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
-"akN" = (/obj/machinery/camera{c_tag = "Brig East"; dir = 1},/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/brig)
+"akN" = (/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"akO" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
"akP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/brig)
"akQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/security/brig)
@@ -645,7 +645,7 @@
"amu" = (/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
"amv" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid"; name_tag = "Security Subgrid"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/security)
"amw" = (/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/maintenance/substation/security)
-"amx" = (/turf/simulated/floor/plating,/area/space)
+"amx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/space)
"amy" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Lobby"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/fore)
"amz" = (/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},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/hallway/primary/fore)
"amA" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/camera{c_tag = "Brig Toxin Control"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/security/brig)
@@ -693,7 +693,7 @@
"anq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
"anr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/wall,/area/security/prison)
"ans" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
-"ant" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"ant" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/folder/red,/obj/item/weapon/pen,/obj/item/weapon/paper{info = "\[center]\[Large]\[b]NSS Exodus\[/b]\[/large]\[br] \[small]Armoury Inventory\[/small]\[/center] \[hr] \[hr] \[br] \[b]Weaponry\[/b]\[br] \[field] Energy Gun(s)\[br] \[field] Laser Gun(s)\[br] \[field] Ion Rifle(s)\[br] \[field] Combat Shotgun(s) \[hr] \[b]Armour\[/b]\[br] \[field] Bulletproof Vest(s)\[br] \[field] Abalative Vest(s)\[br] \[field] Biohazard Suit(s)\[br] \[field] Bomb Suit(s) \[hr] \[b]Auxiliary Equipment\[/b]\[br] \[field] Gasmask(s)\[br] \[field] box(es) of Flashbangs\[br] \[field] box(es) of Handcuffs\[br] \[field] box(es) of R.O.B.U.S.T. Cartridges \[hr] \[b]Riot Equipment\[/b]\[br] \[field] Stun Baton(s)\[br] \[field] Riot Suit(s)\[br] \[field] Riot Shield(s) \[hr] \[b]Tactical Equipment\[/b]\[br] \[field] Tactical Armour(s)\[br] \[field] Tactical Helmet(s)\[br] \[field] Tactical Jumpsuit(s)\[br] \[field] Green Balaclava(s)\[br] \[field] Tactical HUD(s)\[br] \[field] Combat Belt(s)\[br] \[field] Black Glove(s)\[br] \[field] Jackboot(s) \[hr] \[b]Implants\[/b]\[br] \[field] Tracking Implant Box(es)\[br] \[field] Chemical Implant Box(es) \[hr] \[b]Defense Systems\[/b]\[br] \[field] Deployable Barrier(s)\[br] \[field] Portable Flasher(s) \[hr] \[b]Other\[/b]\[br] \[field] Holobadge Box(es) \[hr] \[b]\[center]Warden's's Signature:\[/b] \[field]\[/center] \[hr]"; name = "Armory Inventory"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"anu" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
"anv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/prison)
"anw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
@@ -735,7 +735,7 @@
"aog" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/prison)
"aoh" = (/obj/machinery/camera{c_tag = "Brig Cell 2"; dir = 2; network = list("SS13","Prison")},/obj/structure/closet/secure_closet/brig{id = "Cell 2"; name = "Cell 2 Locker"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"aoi" = (/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},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
-"aoj" = (/obj/machinery/camera{c_tag = "Common Brig Northwest"; dir = 4; network = list("SS13","Prison")},/obj/machinery/computer/arcade,/turf/simulated/floor,/area/security/prison)
+"aoj" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stamp/denied{pixel_x = 5},/obj/item/weapon/stamp,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aok" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/prison)
"aol" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/security/prison)
"aom" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southleft,/turf/simulated/floor,/area/security/prison)
@@ -763,7 +763,7 @@
"aoI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoK" = (/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"aoL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
+"aoL" = (/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
"aoM" = (/obj/machinery/door/blast/regular{id = "Cell 2"; name = "Cell Door"},/turf/simulated/floor,/area/security/prison)
"aoN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
"aoO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
@@ -878,7 +878,7 @@
"aqT" = (/turf/simulated/floor/plating/airless,/area/solar/fore)
"aqU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
-"aqW" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Internal Affairs Agent"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/junction,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
+"aqW" = (/obj/structure/stool/bed/chair/office/dark,/obj/effect/landmark/start{name = "Internal Affairs Agent"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqX" = (/obj/machinery/camera{c_tag = "Detective South"; dir = 1},/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqY" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -30},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqZ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/evidence,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
@@ -923,7 +923,7 @@
"arM" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/simulated/floor/wood,/area/maintenance/dormitory)
"arN" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/maintenance/dormitory)
"arO" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dorm_inner"; locked = 1; name = "Dormitory Internal Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"arP" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/space)
+"arP" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
"arQ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"arR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/brig)
"arS" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
@@ -1051,13 +1051,13 @@
"auk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/security/prison)
"aul" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/security/prison)
"aum" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/camera{c_tag = "Bedroom"; dir = 6; network = list("SS13","Prison")},/turf/simulated/floor,/area/security/prison)
-"aun" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/prison)
+"aun" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 24},/turf/simulated/floor,/area/security/prison)
"auo" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"aup" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/random/tech_supply,/obj/item/clothing/head/flatcap,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"auq" = (/obj/machinery/atm{pixel_x = -25},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"aur" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/fore)
"aus" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
-"aut" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"aut" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/security/prison)
"auu" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"auv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"auw" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
@@ -1074,7 +1074,7 @@
"auH" = (/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"auI" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"auJ" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
-"auK" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms)
+"auK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"auL" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness)
"auM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"auN" = (/turf/simulated/wall,/area/hallway/secondary/entry/fore)
@@ -1102,10 +1102,10 @@
"avj" = (/obj/structure/cryofeed,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"avk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"avl" = (/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
-"avm" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"avn" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"avm" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"avn" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/crew_quarters/sleep)
"avo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms)
-"avp" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
+"avp" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"avq" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
"avr" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
"avs" = (/obj/effect/landmark{name = "JoinLateCryo"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
@@ -1151,7 +1151,7 @@
"awg" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor,/area/security/prison)
"awh" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/head/soft/orange,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/security/prison)
"awi" = (/obj/machinery/light,/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
-"awj" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/security/prison)
+"awj" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"awk" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
"awl" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe,/obj/item/clothing/suit/apron/overalls,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"awm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
@@ -1238,7 +1238,7 @@
"axP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore)
"axQ" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 4},/turf/simulated/floor,/area/hallway/primary/fore)
"axR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
-"axS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory)
+"axS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"axT" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"axU" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"axV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
@@ -1289,7 +1289,7 @@
"ayO" = (/obj/machinery/camera{c_tag = "Fore Primary Hallway"; dir = 4; network = list("SS13")},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/fore)
"ayP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/fore)
"ayQ" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
-"ayR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"ayR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"ayS" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/camera{c_tag = "Dormitory Bedroom Fore"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/carpet{tag = "icon-carpet2-0"; icon_state = "carpet2-0"},/area/crew_quarters/sleep/bedrooms)
"ayT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/crew_quarters/sleep)
"ayU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
@@ -1404,7 +1404,7 @@
"aAZ" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"aBa" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"aBb" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{id_tag = "Dormitory 2"; name = "Dorm"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep)
-"aBc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
+"aBc" = (/obj/machinery/camera{c_tag = "Dormitory Bedroom Aft"; dir = 1},/turf/simulated/floor/carpet{tag = "icon-carpet1-0"; icon_state = "carpet1-0"},/area/crew_quarters/sleep/bedrooms)
"aBd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/crew_quarters/sleep)
"aBe" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep)
"aBf" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep)
@@ -1847,7 +1847,7 @@
"aJA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar)
"aJB" = (/obj/structure/disposalpipe/sortjunction{dir = 4; icon_state = "pipe-j1s"; sortType = "Hydroponics"; name = "Hydroponics"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/bar)
"aJC" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"aJD" = (/obj/machinery/camera{c_tag = "Dormitory Bedroom Aft"; dir = 1},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms)
+"aJD" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 28},/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"aJE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash)
"aJF" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash)
"aJG" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar)
@@ -3329,7 +3329,7 @@
"bma" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "purple"},/area/hallway/primary/starboard)
"bmb" = (/turf/simulated/floor{dir = 6; icon_state = "purple"},/area/hallway/primary/starboard)
"bmc" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/exit)
-"bmd" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access_txt = "0"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"bmd" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{department = "Warden's Office"},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"bme" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/hallway/secondary/exit)
"bmf" = (/obj/machinery/light{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"bmg" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/turf/simulated/floor/plating,/area/maintenance/disposal)
@@ -3570,9 +3570,9 @@
"bqH" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bqI" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bqJ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bqK" = (/obj/structure/table/reinforced,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the 'Space' from Space Cleaner and written in Chemistry. Scrawled on the back is, 'Okay, whoever filled this with polytrinic acid, it was only funny the first time. It was hard enough replacing the CMO's first cat!'"; name = "Chemistry Cleaner"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"bqK" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bqL" = (/turf/simulated/wall/r_wall,/area/medical/chemistry)
-"bqM" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception)
+"bqM" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plating,/area/engine/engine_room)
"bqN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/reception)
"bqO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/reception)
"bqP" = (/turf/simulated/floor{dir = 4; icon_state = "whiteblue_ex"; tag = "icon-whiteblue (EAST)"},/area/medical/reception)
@@ -5174,7 +5174,7 @@
"bVz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
"bVA" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/rnd/research)
"bVB" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing)
-"bVC" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/engine,/area/rnd/mixing)
+"bVC" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/engine,/area/rnd/mixing)
"bVD" = (/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing)
"bVE" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
"bVF" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/mixing)
@@ -5325,7 +5325,7 @@
"bYu" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bYv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bYw" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "chemcounter"; name = "Pharmacy Counter Shutters"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/medical/chemistry)
-"bYx" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/engine,/area/rnd/mixing)
+"bYx" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/engine,/area/rnd/mixing)
"bYy" = (/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/ignition_switch{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/mixing)
"bYz" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -29},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
"bYA" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/mixing)
@@ -6123,8 +6123,8 @@
"cnM" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/aft)
"cnN" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/hallway/primary/aft)
"cnO" = (/turf/simulated/wall/r_wall,/area/engine/workshop)
-"cnP" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "map_on"; use_power = 1},/turf/simulated/floor,/area/atmos)
-"cnQ" = (/obj/machinery/atmospherics/binary/pump{icon_state = "map_on"; use_power = 1},/turf/simulated/floor,/area/atmos)
+"cnP" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1},/turf/simulated/floor,/area/atmos)
+"cnQ" = (/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor,/area/atmos)
"cnR" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard)
"cnS" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/engineering)
"cnT" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
@@ -6389,7 +6389,7 @@
"csS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"csT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Workshop"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/workshop)
"csU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor,/area/atmos)
-"csV" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access_txt = "10"},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room)
+"csV" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating{icon_state = "platebotc"},/area/engine/engine_room)
"csW" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
"csX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/atmos)
"csY" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room)
@@ -6452,7 +6452,7 @@
"cud" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "n2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/atmos)
"cue" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/atmos)
"cuf" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room)
-"cug" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room)
+"cug" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/engine/engine_room)
"cuh" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 9},/turf/simulated/floor,/area/atmos)
"cui" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos)
"cuj" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room)
@@ -6790,6 +6790,7 @@
"cAD" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cAE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cAF" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
+"cAG" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 10; pixel_y = -22},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cAH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/atmos)
"cAI" = (/turf/simulated/wall/r_wall,/area/engine/hallway)
"cAJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engine/hallway)
@@ -6831,12 +6832,16 @@
"cBt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/atmos)
"cBu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos)
"cBv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos)
+"cBw" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cBx" = (/obj/structure/grille,/obj/structure/grille,/turf/space,/area/space)
+"cBy" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room)
"cBz" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room)
"cBA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room)
"cBB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cBC" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cBD" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cBE" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
+"cBF" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/space,/area/space)
"cBG" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/atmos)
"cBH" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor/plating,/area/engine/engine_room)
"cBI" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engine/engine_hallway)
@@ -6874,6 +6879,14 @@
"cCo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cCp" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/wall/r_wall,/area/atmos)
"cCq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/computer/reconstitutor/animal,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology)
+"cCr" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/turf/space,/area/space)
+"cCs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging/junction{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/lattice,/turf/space,/area/space)
+"cCt" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/wall/r_wall,/area/engine/engine_room)
+"cCu" = (/obj/effect/landmark{name = "carpspawn"},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
+"cCv" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/space,/area/space)
+"cCw" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/space,/area/space)
+"cCx" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/turf/space,/area/space)
+"cCy" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 6},/turf/space,/area/space)
"cCz" = (/turf/simulated/wall/r_wall,/area/engine/drone_fabrication)
"cCA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/drone_fabrication)
"cCB" = (/turf/simulated/wall/r_wall,/area/engine/engine_hallway)
@@ -6887,6 +6900,7 @@
"cCJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engine/engine_hallway)
"cCK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/engine/engine_hallway)
"cCL" = (/obj/structure/sign/securearea,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engine/engine_hallway)
+"cCM" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/engine/engine_room)
"cCN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle)
"cCO" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "13;11;24"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/engi_shuttle)
"cCP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle)
@@ -6894,8 +6908,7 @@
"cCR" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/engineering)
"cCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/engineering)
"cCT" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering)
-"cCU" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 10; pixel_y = -22},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"cCV" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cCU" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cCW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating/airless,/area/space)
"cCX" = (/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
"cCY" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock"; name = "exterior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
@@ -7034,7 +7047,6 @@
"cFP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cFQ" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cFR" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cFS" = (/obj/machinery/atmospherics/pipe/cap/visible{color = "#00ffff"; dir = 8},/turf/simulated/floor/plating,/area/engine/engine_room)
"cFT" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Aft Port Solar"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cFU" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/engine/drone_fabrication)
"cFV" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
@@ -7085,7 +7097,6 @@
"cHh" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/atmos)
"cHi" = (/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/machinery/power/apc/super{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power"; name_tag = "Engine Power"},/turf/simulated/floor/plating,/area/engine/engine_room)
"cHj" = (/turf/simulated/floor/plating,/area/engine/engine_room)
-"cHk" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor/plating,/area/engine/engine_room)
"cHl" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/clothing/glasses/welding,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/atmos)
"cHn" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
"cHp" = (/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/port)
@@ -7103,7 +7114,6 @@
"cHE" = (/obj/machinery/atmospherics/valve/digital/open{name = "Oxygen Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/atmos)
"cHF" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/atmos)
"cHH" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_atmos{name = "Atmospherics Monitoring Room"; req_access_txt = "24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/atmos)
-"cHI" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor/plating{icon_state = "platebotc"},/area/engine/engine_room)
"cHK" = (/obj/item/stack/rods{amount = 10},/turf/space,/area/space)
"cHL" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/purple,/turf/simulated/floor/plating,/area/engine/engine_waste)
"cHM" = (/obj/machinery/atmospherics/unary/heat_exchanger{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engine/engine_waste)
@@ -7117,8 +7127,6 @@
"cHW" = (/obj/machinery/atmospherics/pipe/manifold/visible/green,/turf/simulated/floor,/area/atmos)
"cHX" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engine/atmos_monitoring)
"cHY" = (/obj/machinery/computer/security/engineering{network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms","Atmospherics")},/turf/simulated/floor,/area/engine/atmos_monitoring)
-"cHZ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room)
-"cIa" = (/obj/machinery/atmospherics/unary/freezer{dir = 8; icon_state = "freezer"; req_access_txt = "56"; set_temperature = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_room)
"cIb" = (/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_x = -32; pixel_y = 0},/turf/space,/area/space)
"cIc" = (/obj/item/stack/cable_coil,/turf/space,/area/space)
"cIe" = (/obj/machinery/atmospherics/unary/heat_exchanger{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_waste)
@@ -7133,7 +7141,6 @@
"cIn" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor,/area/atmos)
"cIo" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/turf/simulated/floor/plating,/area/engine/engine_room)
"cIp" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/obj/machinery/meter,/turf/simulated/floor,/area/atmos)
-"cIq" = (/obj/machinery/atmospherics/unary/freezer{dir = 8; icon_state = "freezer"; req_access_txt = "56"; set_temperature = 1},/turf/simulated/floor/plating,/area/engine/engine_room)
"cIr" = (/turf/simulated/wall/r_wall,/area/engine/engine_waste)
"cIs" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/engine/engine_waste)
"cIt" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/plating,/area/engine/engine_waste)
@@ -7153,7 +7160,6 @@
"cIN" = (/obj/machinery/camera{c_tag = "Engineering Core West"; dir = 8; network = list("SS13","Supermatter")},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engine/engine_room)
"cIQ" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access_txt = "10"},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engine/engine_room)
"cIR" = (/obj/machinery/camera{c_tag = "Engineering Core East"; dir = 4; network = list("SS13","Supermatter")},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room)
-"cIS" = (/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cIU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
"cIV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
"cIW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/maintenance/portsolar)
@@ -7219,7 +7225,6 @@
"cKB" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/space,/area/space)
"cKU" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/engine/engine_room)
"cKV" = (/obj/machinery/door_control{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Room Blast Doors"; pixel_x = 5; pixel_y = -25; req_access_txt = "10"},/obj/machinery/door_control{desc = "A remote control-switch for the engine charging port."; id = "EngineEmitterPort"; name = "Engine Charging Port"; pixel_x = -5; pixel_y = -25; req_access_txt = "10"},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
-"cKX" = (/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/engine/engine_room)
"cKY" = (/obj/machinery/light,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
"cKZ" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engine/engine_room)
"cLa" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engine/engine_waste)
@@ -7304,35 +7309,35 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabfabfabfabfadEafqafrafsaaTaftafuafvafwafxafyafzafAafBafAafCafDadxafEafFacQafhacQafGafHafIafJafKafLadlafMafNafOafPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTageagdagfaggaghaeFagiagjagkaglagmagnagoagpagqagragsagtaguagpagvagwagxabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaabfagAagBafZafZafZafYafYafZagCagDagDagDagDagDagDagDagDagDagDarCaaTagFagGagHagIagJaeFagKagLagLagLaddagMagNagOagPagQagRagQagPagSagvagTadlabbabbaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahiahjahkahlahmahnahnahnahnaddahoahpahqahrahsahtahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahiahjbmdantaojahnahnahnahnaddahoahpahqahrahsahtahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRahAabfahBadEagWahCahDahEahFahGahHagDagZahIahFahJahKahLahLahMahNahOahPacXacXacEacXahQahRahSacQacQacQaddahTahUahVahWahXahYahZaiaaibagvahxaicabOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfaigadEagWaihaiiaijaikailaimagDagZahIainagWaioahLaipaiqahKahOairaisacXaitacXacXaiuacZahSacQacQaddaiwaixaiyagPagPaizagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEaiFaiGaiHaiIahFagDaiJaiKaiLagWaiMaiNaiOaiOaiPaiQaiRaiSaiTacEaiUaiVaeFaiWaiXaiYaiZajaajbajcajdajeajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajjabfabfajkajlagWagWajmagWagWajnagWagWagWajoagWagWajpajqajrajsajtajuagWajvajwajxajyajqagWagWajzajAajBagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeakfakgajzakhakiakjakkaklakmaknakoakpalaakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMakNakOakPakJakQakRakSakTakUakVakWakXakYakoalIabbamsalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfaigadEagWaihaiiaijaikailaimagDagZahIainagWaioahLaipaiqahKahOajraisacXaitacXacXaiuacZahSacQacQaddaiwaixaiyagPagPaizagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzaaaaaaahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzaaaaaaahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEaiFaiGaiHaiIahFagDaiJaiKaiLagWaiMaiNaiOaiOaiPaiQaiSaiRaiTacEaiUaiVaeFaiWaiXaiYaiZakNakfajcajdajeajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajjabfabfajkajlagWagWajmagWagWajnagWagWagWajoagWagWajpahkahlahmairajuagWajvajwajxajyajqagWagWajzajAajBagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeajbakgajzakhakiakjakkaklakmaknakoakpalaakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMajaakOakPakJakQakRakSakTakUakVakWakXakYakoalIabbamsalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalealfagWalgalhahLalialjagWacTacuacTagWabValnabUagWalpalqalralsagDaltalualvalwalxagWabTabSabSabRagWalBalCalDalEalFalGalHakoamtanQamuanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabPalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaamxaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTaoWamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafamxaafaafamxaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQantaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafamxaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiaojaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoKaoLaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabPalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaaaLaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTaoWamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafaaLaafaafaaLaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQajtaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafaaLaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiajsaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoLarPaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcapdapeapfaofaphapiaoMaonaonapkaplaonapmapnaoraonapoaonaoNapqapramgamfamgamTaosamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapDapEapFapGaoHaoHapHaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaahzahzahzahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapLapMagWalgapNalKapOapPapQapRaokapSanWapUapVapWapXapYapZaqaanUaqcaqdaovaqeaovaqfaqgaqhaqiaqjaqkanGaqlaqmapyaqnaqoaqpaqoaqqaqraqsapFaqtaquapFaqvaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalkaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWaqCalRagWalWalWalWaqDaqEapkaqFaqGaqHaonaqIaqJaqKaqLanyaqNaqOaqPaqQaqRaqSanxaqUaqVaqWamVanGaqXaqYaqZaraarbarcardanGarearfapFaqtaqtapFargaoHarhariarjaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarkaqBagDaobarlagWarmarnalKaogaroaoiaokarparqarrarsartaonarualWarvarwarxalLarzarAamUamzamyarEarFarGarHamjanGanGarIanGanGanGanGanGanGarJarKarLarMarMapFarNaoHaoHarOaoHaoHaaaaaaakrakrakraaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamxarPamxaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarQaqBagDarRapcarSarTarUaefapharWaloaonaonarYarZasaasbaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslasmasnasoasoaspaspasqasrassastastasuasvasvaswasxasyaszaqsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLamxaaLaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarQaqBagDarRapcarSarTarUaefapharWaloaonaonarYarZasaasbaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslasmasnasoasoaspaspasqasrassastastasuasvasvaswasxasyaszaqsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasAasBasAaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCarQapbagDapLapMagWasDasEalKapOasFaoiasGasGasHasIaonasJaonasKalWasLasMbgMasOasParAasQasRasSarEasTasUasUasVasWasVasXasYasZasZasZasZasZasZasZasZasZasmataatbatcaoKatdateatfaafatgathathatiathathatjaafaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatratqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHatIatJatKatLatMatNatOatPatPatPatPatPatPatPatPatQatRatRatRatRatRatQatPaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTatUatTatSatVatWatVatSaafatqatXatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhauiaonapnaonasJaqEaujaukaulaumaunauoauparAauqaurausarEatBasZauuaySauvatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauJauwauLatPauMatRatRatRatRatRatQatPaafaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTauOatTauNatVauPatVauNauQauRauSauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWavbavcaonavdaveaveavfavgaveavhaviavjarAavkauravlarEavmasZavnauKauvatCavpavqatFatGauzauAavravsavtatMatNavuavvauGauHauHauJavwavxavyavzatRatRatRatRatRavAatPatPatPaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBavCavDauNavEavFavGauNavHavIavJavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaavQavRavSavTavUavVavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweawfawgaukawhawiawjawkawlarAawmaurawnarEatBasZawoavoawpatCawravqatFatFatFawsawtawuatFatFatNawvawwauGauHauHauJawxawyawzawAatRatRatRatRatRawBawCawDawEaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaabfxaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPavRawQawRavUawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawXawUawYaxaaxbawZaxdaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxnaxpaxqaxraxsatRatRatRatRatRaxsaxtaxuaxvaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNaxwaxxatSauNaxyaxxatSauNawMauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaxCaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaxGaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaxOaxPaxQaxRaxOaxSasZaxTaxjautatCaxVaxXaxXaxXaxZaxYayaaybaxXavqaydayeayfaygayhayhayhayiavxayjaykatRatRatRatRatRaykaylaxuaxvaaaaaaaaaaafaafaaaaafaaaaaabfyaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoayqayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyayzayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLayNayLayMayLayLayLarAayOayPayQarEaAiasZayRaycaxUatCayUayTayWayVayYayXayYayZayTazaazbazcazdazeazdazdazfazgazhaziazjatRatRatRatRatRazkazlazmaznaaaaaaaaaaaaaafaaaaafaaaazoazpazoaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwazBauNavHauRaafaafaaaaaaaaaaaaaaaaafazDazEazFazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTazUazVazWazXazYazZaAaaAbazTaAcarAaAdayPayQarEaAiasZaAfaAecfSatCaxWaxXaxXaxXaxXaAjaAkaAlaAmaAnaxkaAoaApaApaApaApaAqavxavxaAraAsatRatRatRatRatRaAtatPatPatPaafaafaafaafaafaafaafaaaaAuaAvaAuaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNavHauQauQaAEauUauUauUauUauVauQaAFaAGaAHaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaAiasZawXaAgaAhaBbaBcaBdaBeaBfaBgaBhaBiaBjaBjaBkaBjatPaBlaBmaBnaBoaBpaBqaBratPaBsatRatRatRatRatRaBtatPaafaaaaaaaaaaaaaafaafaaaaafaBuaBvaBwaBxaByaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTatUatTatSatVatWatVatSaafatqatXatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhauiaonapnaonasJaqEaujaukaulaumaunauoauparAauqaurausarEatBasZaAfaySauvatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauJauwauLatPauMatRatRatRatRatRatQatPaafaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTauOatTauNatVauPatVauNauQauRauSauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWavbavcaonavdaveaveavfavgaveavhaviavjarAavkauravlarEatBasZawoavoawpatCawravqatFatGauzauAavravsavtatMatNavuavvauGauHauHauJavwavxavyavzatRatRatRatRatRavAatPatPatPaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBavCavDauNavEavFavGauNavHavIavJavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaavQavRavSavTavUavVavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweawfawgaukawhawiautawkawlarAawmaurawnarEatBasZawXawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNawvawwauGauHauHauJawxawyawzawAatRatRatRatRatRawBawCawDawEaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaabfxaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPavRawQawRavUawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZauKaxjavmatCaxVavnaxdaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxnaxpaxqaxraxsatRatRatRatRatRaxsaxtaxuaxvaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNaxwaxxatSauNaxyaxxatSauNawMauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaxCaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaxGaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaxOaxPaxQaxRaxOavpasZaxSawjcfSatCaxVaxXaxXaxXaxZaxYayaaybaxXavqaydayeayfaygayhayhayhayiavxayjaykatRatRatRatRatRaykaylaxuaxvaaaaaaaaaaafaafaaaaafaaaaaabfyaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoayqayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyayzayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLayNayLayMayLayLayLarAayOayPayQarEaAiasZcfSaycaxUatCayUayTayWayVayYayXayYayZayTazaazbazcazdazeazdazdazfazgazhaziazjatRatRatRatRatRazkazlazmaznaaaaaaaaaaaaaafaaaaafaaaazoazpazoaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwazBauNavHauRaafaafaaaaaaaaaaaaaaaaafazDazEazFazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTazUazVazWazXazYazZaAaaAbazTaAcarAaAdayPayQarEaAiasZauuaAeauvatCaxWaxXaxXaxXaxXaAjaAkaAlaAmaAnaxkaAoaApaApaApaApaAqavxavxaAraAsatRatRatRatRatRaAtatPatPatPaafaafaafaafaafaafaafaaaaAuaAvaAuaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNavHauQauQaAEauUauUauUauUauVauQaAFaAGaAHaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaAiasZawXaAgaAhaBbayRaBdaBeaBfaBgaBhaBiaBjaBjaBkaBjatPaBlaBmaBnaBoaBpaBqaBratPaBsatRatRatRatRatRaBtatPaafaaaaaaaaaaaaaafaafaaaaafaBuaBvaBwaBxaByaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaBEaBFaBBawHaBGaBHaBIaBJaBKaBLavHavHavHavHavHavHavHavHaBOaBPaAFaBQaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaCeaCfaCgaChaCfaCiaCjazTaCkarAaAdayPaClarEaJCasZaAZaAYaBaatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaCtatPatPatPaBtatRatRatRatRatRaBtatPaaaaaaaaaaacaaaaafaaaaaaaaaaCvaCwaCxaCyaCvaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaCHaCIaCJaAFaCKaCLaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaDcayLayLayLarAaAdayPayQarEaAiasZaxTaJDauvatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaDnaDoaDpaDqaGwaDsaafaDtaDuaDuaDuaDuaDuaDvaafaaaaaaaaaaaaaaaaafaaaaaaaaaaCvaDzaDAaDBaCvaafaaaaaaaDCaDCaDCaDCaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaCHaCIaCJaAFaCKaCLaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaDcayLayLayLarAaAdayPayQarEaAiasZaxTaBcauvatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaDnaDoaDpaDqaGwaDsaafaDtaDuaDuaDuaDuaDuaDvaafaaaaaaaaaaaaaaaaafaaaaaaaaaaCvaDzaDAaDBaCvaafaaaaaaaDCaDCaDCaDCaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaxAaBLaDRaDSaDTaDUaDVaDWaCEavHaDXauQaAFaAFaDYaDZaCMaEaaEbaEcaEdaEeaEfaEgaEhaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaEvaEwaCfaExaEyaATaEzaEAaEBaEBarAaAdayPayQarEaAiaCmaCmaCmaCmaCmaEHaEIatEaEJaEKaEKaELaEMaEKaENaEOaBjaEPaEQaERaESaETaCnaDsaaaaafaaaaafaaaaafaaaaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaCvaEXaEYaEZaCvaFaaFbaDCaDCaFcaFdaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaFhaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkaFlaFlaFmaFnaFoaFpaFqaFlaFlaFraFsaFtaDPayuaBLaFvayxaBMazCaBMaBNaCDavHaFuaDQaFxaFwaFzaFyaFIaFJaFKaFLaFLaFLaFMaFLaFLaFNaFOaCMaaaaBYaFPaElaFQaEnaFRaBYaaaazJazOazPaFSaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaFZazTaGaarAaGbaGcaGdarEaAiaDeaDfaDraCoaDeaCpaGjaGkaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaGqaDpaGraGsaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaCvaCvaGxaGyaCvaGzaGAaGBaFdaGCaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaGHaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaGJaGKaFlaGLaFlaGLaFlaGLaFlaGLaFlaGMaGNaGOaDPayuaBLaGPaFAaGRaGSaGTaGUaCEaFBaFDaFCaFCaFCbazaFEaFCaHcaFLaFLaFLaFLaFLaFLaFLaFNaHdaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaHkaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaGuaDyaEUaGvaDwaDxaEVaEWatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaHIaDpaHJaHKaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHVaDsaDsaDsaDsaHRaHSaHTaHUaIaaIbaDCaDCaIcaDCaIdaIeaIfaIgaGFaIhaGFaIiaIjaIkaIlbinaInaIoaIpaIqaIraIsbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7354,10 +7359,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaT
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObguaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbdKbdLbdMbfdaTSaXebdObdPbgBbgCbgDbfgbgDbdPbfibgEbgFbgGbgHbgIbgJaMbbgKbgLbctaWKbgNbgObgPbgQbgQbgRbgSbgTbdYbebbgUbgVbgWbgXbfvbgYbgZbebbedbhabhbbhcbhdbhebhfbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhCbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIbhJbhKbhLbhMbhNaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbhRbhSbhTbhTbhTbhTbhTbhUbhVbhWbhXbhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbdKbibbicbidaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbilaMbbimaSzbctaSIbiobipbiqbirbisbitbiubivbdYbebbiwbixbiybiybiybgYbizbebbedbiAbiBbiCbiDbiEbiFbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjqbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbjubjvbjuaTSaTSaTSaTSbjwaTSbjxbdObdPbjybjzbgDbjAbjBbdPbfibfmbjCbgGbgGbgGbjDaMbbjEaSzbctcdNbjGbgObjHbjIbjJbjKbjLbjMbdYbjNbjObjPbiybjQbiybgVbjRbjSbedbjTbjUbjVbjWbjWbjWbjXbjYaJibjZbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkkbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktbkubkvbewbkpbkwbkxbkybhFbewbewbkzbewbewbkAbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGbkHbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzaVIaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbmdaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObkKbkLbkMbkNbkObgrbkPbkQbkRbkRbkSbkTbkUbkVbkWbkWbkXbkYbbZbbZbbZbeZbkZbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbllbfmblmbgGblnbgGbloblpblqaSzbctaJeblrblsbltblublvblwblxblybdYbebblzblAblCblBblDblAblEbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzblTaZzaZzaZzaZzaZzaZzaVIaZzbewbewblVblWblWblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbqKaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpaVAbmjbmkbmkbmlbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbmxbfgbmybmzblfbmAbfmbmBbgGbgGbmCbmDbmEblqaSzbmFbmGbmGbmGbmGbmGbmGbmGbmHbmGbdYbebbmIbmJbmKbmLbmKbmMbmNbebbedbedbmObmPbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbmUbmVbmWbmXbmYbmZbnabnbbncbndbnebncbnfbngbnhbnibnjbnkbnlbnmbnnbnobnpbnqbnrbnsbntbntbnubYfaVJblOblObZLblObZMbZMblObnzbnAbnBblObZtbZubZtblOblXblYbmbblObZnbZBbZnblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaabnNbnObnPbeQbnQbgrbnRbjpbnSbnTbnUbnVbjpbnWbnXbnYbnZbmlbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbohboibojbgGbgGbgGbokblpblqaSzbolbmGbombonboobcEbvGbotbosbotaafbebboubovbowboxboybozboAbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpbXHboJboKboLboMboNbYwboPboQboRboRboSboTboUboUboVboWboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbpmbpnbpobppbpqbprbpqbpsbptbpubpvblOaZzbpwbpxblObpybpzbpAbpBbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbopbxsbotaafbebbebbebbebceebebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJbqKbqLbqMbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbpLbgrbpMbpNbpObpPbpQbpRbpSaYSaXeaXeaXebpTbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbqcbqdbqebqfbqgbqhbqibqjbqkbmAbqlbojbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbopbxsbotaafbebbebbebbebceebebbebbebbebaafbedbqzboCbqAbqBbqCbqDbqEaJibqFaRqaRpaJibqGbqHbqIbqJaJDbqLboPbqNboUboUboUboUboUboUbqObqPbqQboYbqRbqSbqTbnnbqUbqVbqWbpfbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbrcbrdbrdbrdbrebrdbrfbrgbrhbribrjbrkbnIbrlbpCbrmbrnbrobrpbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbrubrvbrwbrxbrxbrybrzbrAbgrcedbrCbpPbrDbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbrIbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObrPbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZaHBbsbbqvbsabsebscbotbosbotaafbsibsjbskbslbsmbsnbskbsobsiaafbedbspbsqbspbedbedbedbsraJibssaRqaRpbXHboJboKbstbsubsvbqLbswbqNbsxbsybszbsAbsBbsCbqObsDbnibsEbsFbsGbsHbnnbsIbqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaafaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbthbtibtibtibtjbtibtibgrbtkbtlbtmbpPbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubtvbtwbtxbtybtzbtAbfmbfmbtBbfmbfmbtCbtDbtEbtFbmGbtHbmGbmGbmGbmGbmGbtIbmGaafbtJbtKbtLbtMbtNbtMbtLbtObtPaafbspbtQbtRbtSbtTbtUbspbtVaJlbtWbbmbtXaJibtYbmUbtZbuabubbucbudbuebufbugbuhbuibujbukbulbumbnibnnbunbuobupbnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbuxbplbplbsMbuybuzbuAbuBbuCbuDbuEbuFbuGbrhbuHbuIbuJbnIbuKbuLbuMbtbbpCbuNbnIbpEbpFbuObnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabuTbeObuUbuUbuVbpHbuWbgnbgobuXbuWbgrbuYbuZbvabvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibvjbvkbvlbvmbvnbvobfmbvpbgGbvqbvrbvsbvtbvubvvbmGbmGbmGbvxbvybvzbvAbvBbvwaafbvDbvIbvHbvJbvKbvMbvNbvObvLaafbspbvPbvQbxnbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbvYbvZbuccdTcdUbwcbwdbwebwebwfbwgcdWcdVbwjbwkbwlbwmbwkbwkbwkbwkbwnbwkbwkaXKaXKaXKaXKaVJbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbwubwvbwwbwxbwybnIbwzbwAbwBbwCbpCbwDbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbwGbwHbwIbwJbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7405,26 +7410,26 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCctdcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOckYczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCclacnzcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaacyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcvqcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcpFaaaaaaaaaaamaaaaaaaaacAzcAvcAwcAxcAycABcAAcAHcAycABcAAcAHcAycABcBucBucBvcAHcAycABcBtcoCaaacDvcDwcDxcDycDzcDAcAucDCcDDcDDcDEcDFcDGcDHcDIcDJcDHcDIcDGcDKcDLcDMcDKcCBcCBcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacCWaafaaaaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcClcqLcqLcqLcpEcpIcpIcpIcqLcpIcpPcpIcpGcpIcpPcpIcpGcpIcpPcpIcpGcpIcqLcpIcpRcpIcpGcpIcqNaafaaacEicEjcEkcElcEmcEncAucEocDDcEpcEqcErcEscEtcEucEvcEwcExcEscEycEzcEAcDKaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCacCWaafaafaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaaqaaaaaaaaaaafcgRcCpcmtcmvcgRcCpcmtcmvcgRcCpcmtcmxcgRaaacgRcmycmtcmxcgRaaaaafaaacEicEQcERcEScEQcCAcDBcEUcDDcEVcEWcEXcEscEYcEZcFacFbcFccEscFdcFecFfcDKaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCacFkcmWaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaaaamaaaaaaaaaaafcgRcgCcDkcgBcgRcjbcDncjacgRciWcDqchqcgRaafcgRchpcDtchocgRaaaaafaaacEicFrcEkcEQcEQcqZcqXcFucFvcFwcFxcFycFzcFAcFBcFCcFDcFEcFFcFGcFHcFIcDKaafaaacFJcDNcFKcAOcFLaaabNUcFMbPxcFNcFOaafaafaafaaacBkaafaafaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEIcEIcEIcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcfTaafcrPaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaamaaaaaaaafaafcgRcEbcEccEbcgRcEdcEecEdcgRcEfcEgcEfcgRaaacgRcEfcEfcEhcgRaaaaafaaacEicFUcEkcEScEQcEncrVcEocDDcFWcFXcFYcEscFZcGacGbcGacGccEscGdcGecGfcDKaaLcGgcGgcGgcGgcGgcGgcGgbNUciEciDcGjaafaaaaaaaafcGkcDfaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaafaamaaaaafaafaaacgRcEbcENcEbcgRcEdcEOcEdcgRcEfcEPcEfcgRaafcgRcEfcEfcEfcgRaafaafaafcGncGocGpcGqcGrcGscsacEocDDcoycGvcGwcEscGxcpwcoJcpxcGBcEscGCcGDcGEcDKaaacGgcGgcGgcGgcGgcGgcGgcGFcGGcGHbNUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZSaaaaaacgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaacFqcgRcgRcgRcgRaaaaaaaaaaaacCzcCzcCzcCzcCzcsccGJcGJcGJcGJcGKcGJcjIcjdcjecjdcjccGJcGJcGPcGJcGJcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcpzcpycpCcpAcqIcHfcsZcsYctacHgcHicHjcHkcsVcHIcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecjTcjUctkcjJcucctZcHzcIwcHjctccHjcHjcHjcHjcugcHZcIacGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcjXcjYcjUcwpcwocwqcufcHjcHjcxocwucyAcHjcHjcHjcugcHZcIqcGJcIbaafaaIaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQckickrcBzckecBHcBAcnycnycpDcImcEMcIocIocIocpBcHZcFScGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcFscETcKYcLbcvocIycKUcKVcKYcKZcKXcHZcFScGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcujczDcIQcGJcGJcGJcIRcIScHzcGJaafaaabZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcFTcJacJbcJcciFcJecJfcJgcJecGJcJhcHjcJicxscJkcJlczzcJnczjcJlcJpcxscJqcHjcJrcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcypcJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicxscJkcJLcJMcJNcJOcJLcJpcxscJqcHjcJPcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcxscJkcKacJMcKbcKccKacJpcxscKdcHjcHjcGJaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcwDcGJcGJcGJcGJcGJcGZcGJcGJaafaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHncwrcHpaafcHncwrcHpaaacHncwrcHpaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaLaaaaafaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbZSaaaaaacgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRcgRaaacFqcgRcgRcgRcgRaaaaaaaaaaaacCzcCzcCzcCzcCzcsccGJcGJcGJcGJcGKcGJcjIcjdcjecjdcjccGJcGJcGPcGJcGJcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafcrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGTcGUcsecsfcsgcshcGZcpzcpycpCcpAcqIcHfcsZcsYctacHgcHicHjcHjbqMcsVcGJcGgcGgcGgcGgcGgcGgcGgaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGTcHLctfcHtctecjTcjUctkcjJcucctZcHzcIwcHjctccHjcHjcHjcHjcHjcHjcugcGJcGgcGgcGgcGgcGgcGgcGgaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGTcHLcHMcHNcjXcjYcjUcwpcwocwqcufcHjcHjcxocwucyAcHjcHjcHjcHjcHjcBycGJcIbaafaaIaafaafaafaafaafaafaafaafaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGTcwmcIecIfcrQckickrcBzckecBHcBAcnycnycpDcImcEMcIocIocIocIocIocpBcCtcCscCrcCrcCrcCrcCrcCrcCrcCrcCrcBFaaacBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIrcGVcIscItcIucLacGZcIwcHjcFscETcKYcLbcvocIycKUcKVcKYcKZcCUcHjcCMcCtcCscBFcCycBFcCycBFcCycBFcCycBFcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcIMcILcGJcHjcHjcINcGJcGJcGJcujczDcIQcGJcGJcGJcIRcHjcHjcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcFTcJacJbcJcciFcJecJfcJgcJecGJcJhcHjcJicxscJkcJlczzcJnczjcJlcJpcxscJqcHjcJrcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaaaaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcypcJzcJAcJBcJCcJDcJEcJFcJGcJHcJHcJHcJIcJJcJKcGJcHjcHjcJicxscJkcJLcJMcJNcJOcJLcJpcxscJqcHjcJPcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafcBxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcJUcIKcJVcJWcJecJecJXcJXcJYcGJcHjcHjcJZcxscJkcKacJMcKbcKccKacJpcxscKdcHjcHjcGJaaacCxcCxcCxcCxcCxcCxcCxcCxcCxcCxaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGJcGJcGZcGJcGJcGJcGJcGJcwDcGJcGJcGJcGJcGJcGZcGJcGJaafcCwcCvcCwcCvcCwcCvcCwcCvcCwcCvaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHncwrcHpaafcHncwrcHpaaacHncwrcHpaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaafaafaaaaaaaafaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaLaaaaafaaaaaacBxcBxcBxcCucBxcBxaancBxcBxaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncwrcHpaaacHncwrcHpaafcHncwrcHpaafaafaafaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIbZSbZSaaIaaIaaaaaaaaaaaIaaIaaIaaIaaIaaIaaIaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaafcHncwncHpaaacHncwncHpaaacHncwncHpaafaaIaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaaaIaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKncKncKncKncKncKncKnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index 2903dec322..4d07854f74 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -748,7 +748,7 @@
"ot" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space)
"ou" = (/obj/structure/closet/hydrant{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ov" = (/obj/structure/table/rack,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/pinpointer/nukeop,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/obj/item/weapon/shield/energy,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"ow" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
+"ow" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs{pixel_x = 4; pixel_y = 2},/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/obj/item/weapon/grenade/smokebomb,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"ox" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oy" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oz" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/item/weapon/gun/energy/gun,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = -32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
@@ -1050,7 +1050,7 @@
"uj" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"uk" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/suit/armor/vest/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/clothing/head/helmet/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/obj/item/weapon/storage/backpack/ert/security,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"ul" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/tie/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
-"um" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/weapon/tank/jetpack/oxygen,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
+"um" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"un" = (/obj/structure/table/reinforced,/obj/item/weapon/circuitboard/aiupload,/obj/item/weapon/circuitboard/borgupload,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/aiModule/nanotrasen,/obj/item/weapon/aiModule/reset,/obj/item/weapon/aiModule/freeformcore,/obj/item/weapon/aiModule/protectStation,/obj/item/weapon/aiModule/quarantine,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/obj/item/weapon/aiModule/safeguard,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"uo" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
"up" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
@@ -1194,7 +1194,7 @@
"wX" = (/obj/machinery/mass_driver{dir = 8; id = "ASSAULT1"; name = "gravpult"},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom)
"wY" = (/turf/unsimulated/floor{icon_state = "loadingarea"; dir = 8},/area/centcom)
"wZ" = (/obj/structure/table/reinforced,/obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill,/obj/item/mecha_parts/mecha_equipment/tool/cable_layer,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
-"xa" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
+"xa" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"xb" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"xc" = (/obj/machinery/door/airlock/centcom{name = "Armory Special Operations"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"xd" = (/obj/machinery/door/airlock/centcom{name = "Engineering Special Operations"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
@@ -1288,13 +1288,13 @@
"yN" = (/obj/structure/stool/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"yO" = (/obj/structure/stool/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"yP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control)
-"yQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/device/flash,/obj/item/device/flash,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"yQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/flashbangs,/obj/item/weapon/handcuffs,/obj/item/device/flash,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/storage/belt/security/tactical,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"yR" = (/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)
"yS" = (/obj/item/device/radio/intercom{broadcasting = 1; dir = 8; listening = 0; name = "Station Intercom (General)"; pixel_x = -28},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
"yT" = (/turf/unsimulated/floor{icon_state = "green"; dir = 1},/area/centcom/control)
"yU" = (/obj/structure/closet/secure_closet/injection,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control)
"yV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/control)
-"yW" = (/obj/structure/table/reinforced,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
+"yW" = (/obj/structure/table/reinforced,/obj/item/weapon/crowbar,/obj/item/weapon/screwdriver,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom)
"yX" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"yY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; req_one_access_txt = "103"; tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"yZ" = (/obj/structure/table/rack,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/suit/armor/vest/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/clothing/head/helmet/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/obj/item/weapon/storage/backpack/ert/medical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
@@ -1306,10 +1306,10 @@
"zf" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control)
"zg" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/device/flash,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flash,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/adv,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"zh" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
-"zi" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"zi" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"zj" = (/obj/structure/table/rack,/obj/item/clothing/under/color/red,/obj/item/clothing/shoes/brown,/obj/item/clothing/suit/armor/tdome/red,/obj/item/clothing/head/helmet/thunderdome,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/melee/energy/sword/red,/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"zk" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/autoinjectors,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/gloves,/obj/item/weapon/storage/box/pillbottles,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
-"zl" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
+"zl" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/reagent_containers/hypospray,/obj/item/weapon/storage/box/syringes,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"zm" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"zn" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_centcom_dock_door"; locked = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom)
"zo" = (/obj/structure/table/woodentable{dir = 9},/obj/item/weapon/reagent_containers/food/drinks/flask,/obj/item/clothing/mask/cigarette/cigar/havana,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
@@ -1927,6 +1927,7 @@
"Lc" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox/station)
"Ld" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station)
"Le" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
+"Lf" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/roller,/obj/item/roller,/obj/item/roller,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"Lg" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/rcd,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"Lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"Li" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
@@ -1942,7 +1943,6 @@
"Ls" = (/obj/structure/AIcore,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
"Lt" = (/obj/item/weapon/spacecash/c200,/obj/item/weapon/spacecash/c50,/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
"Lu" = (/obj/structure/jungle_plant,/turf/simulated/shuttle/floor4/vox,/area/shuttle/vox/station)
-"Lv" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/obj/item/weapon/gun/energy/stunrevolver,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"Lw" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 0; req_access = null; req_access_txt = "150"},/obj/item/weapon/surgicaldrill,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
"Lx" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Ly" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
@@ -2082,17 +2082,17 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutuuuvuwDUuhtZtZtZtZtDoNuztZtZtZuAoNuBudtwtIudtwuCtJtwtItMtwtNtxuDuEuFuGuHtxuIuIuItxtWtWtWtWtWtxuJuKuJuLuMuguNuNuNuOurururuOuruPuQuPuruRuSuTtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVAIuXuVuVuVuYAIuZvavbvcoNvxtZtZtZtZuioNvftZtZtZvgoNubtJvhubtJtwubvitwubvjtwtNtxvktxvlvmvntxufufuftxvlvmvotxvptxvqvrvqvrvqugtxtxtxtxurururtxvsvtuPvuvsvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvoNLytZtZtZtZvyoNvztZtZvAoNoNoNtvtvtvtvtvtvtvtvtvtvtvtNtxufufvBvCvCvCvCvCvCvCvCvCvDufufvEvqvqvqvqvqugvFuNuotxurururtxvGvGvHvGvGvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutvIvbvJoNukujulLvtZoNoNumtZtZvOoNuyvQoNvRvRvRvRvRvRvSvTcZtvtNtxufufvVvWvXvXvXvXvXvXvXvYueufufugvZwawbwcwdugweuNuptxurururtxwfwfuNwfwfvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwgaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutvIvbvJoNukujulumtZoNoNxatZtZvOoNuyvQoNvRvRvRvRvRvRvSvTcZtvtNtxufufvVvWvXvXvXvXvXvXvXvYueufufugvZwawbwcwdugweuNuptxurururtxwfwfuNwfwfvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwgaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMuUuVuVuVuVuVuVuVuVuVuVuVuVuVwWuXuVuVuVuYwWwivavbwjoNtvoNoNoNtZoNvetZtZtZwloNwmwnwowpwpwpwpwpwpwqtvtvtvtvtvufufvVwrwsufwtwuwvufwswrueufufugugugugugugugweuNuptxurururtxwwwwuNwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMustvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvutwxvbwyoNwzwAwBoNtZoNvNvKtZtZwEoNwmvMtvwFwGwGwGwHwGwItvwJwJwJtvufufwKwLwMwNwOwPwQwRwSwLwTufuftxwUwUwUwUwUtxtxuOtxtxtxuOtxtxuNuNuNuNuNvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNxatZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVwhoUoVoVoVqVwhwXwYvMwZoNyQtZxboNxcoNoNoNxdoNoNoNwmwnuWxfxfxfxfxfxfxfxgxfxfxfxgufufufxhufufxiufxiufufxhufufufxjurururururxjurururururururxjwwwwwwwwwwvvvwvwtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMmu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhwkoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmydyeyfygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywyxtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmydyeyWygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywyxtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNxewmydyfyfygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzitZtZtZtZtZtZoNxetZtZwqwqwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNyQtZtZtZtZtZyWoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZzkzloNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzltZtZtZtZtZLfoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZxazkoNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNzAzBzBzAaMaMaMyhyIzCzDzEzDyhzszFzFzszGzHufzwtxzIwTufwKzJtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNzOzOzNzNzPaMyhyIyIyIyIyIyhzsztztzszQzHufzwtxueufufufvVtxaMaMaMaMaMaMaMaMaMaMaMzRzSzTzUaMaMaMaMaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaAbAcAcAdAdzNzPyhyhyhyhyhyhyhzszszszsAezHufzwtxAfuxAfAhAftxaMaMaMaMaMaMaMaMaMaMzRAiAjAkAlzUaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
diff --git a/maps/exodus-3.dmm b/maps/exodus-3.dmm
index e88029d54a..ad3f736587 100644
--- a/maps/exodus-3.dmm
+++ b/maps/exodus-3.dmm
@@ -101,7 +101,7 @@
"bW" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bX" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
-"bZ" = (/obj/machinery/power/solar/fake,/turf/simulated/floor{icon_state = "solarpanel"},/area/space)
+"bZ" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
"ca" = (/turf/simulated/floor/plating/airless,/area/space)
"cb" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"cc" = (/obj/machinery/camera{c_tag = "North Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area/space)
diff --git a/maps/exodus-4.dmm b/maps/exodus-4.dmm
index 39e1ff0072..d0a2adf82a 100644
--- a/maps/exodus-4.dmm
+++ b/maps/exodus-4.dmm
@@ -33,11 +33,11 @@
"aG" = (/turf/space,/area/solar/constructionsite)
"aH" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/solar/constructionsite)
"aI" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aJ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aJ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/tracker,/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aL" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aN" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aN" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/tracker,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
"aP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
"aQ" = (/turf/simulated/wall,/area/djstation)
@@ -58,7 +58,7 @@
"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation/solars)
"bg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/djstation/solars)
"bh" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/djstation)
-"bi" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"bi" = (/obj/structure/cable,/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"bj" = (/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/djstation/solars)
"bk" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/djstation)
"bl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/djstation)
@@ -86,7 +86,7 @@
"bH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/djstation)
"bI" = (/obj/machinery/door/blast/regular{id = "constructiondriver2"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/djstation)
"bJ" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai)
-"bK" = (/obj/structure/cable,/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"bK" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"bL" = (/obj/item/weapon/extinguisher,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation)
"bM" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 2e+006},/turf/simulated/floor/plating,/area/djstation)
"bN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/djstation)
@@ -403,16 +403,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabaaabaaabaaabacaeapapapapauauaoaoaoauauapapapapaeacabaaabaaabaaabanauauapaeacaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabaaabaaabababapaqapauauauauauaoaoaoauauauauauapaqapabababaaabaaabanaoauapaeacaFaEaFaEaFaEaFaEaFaFaEaEaEaFaFaFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanababababababapapauauauaoaoaoaoaoaoaoaoaoaoauauauauapapababababababanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIaJaKaLaMaNaIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaIaJaOaJaPaNaIababaaaaaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaRapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaIaJaOaJaPaNaIabababaaaSaTaUaVaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaWaXaYaXaWapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaIaJaOaJaPaNaIababababaZbabbaVaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaWaXaYaXaWababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIaJaKaNaMaLaIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaIaJaOaJaPaLaIababaaaaaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaRapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaIaJaOaJaPaLaIabababaaaSaTaUaVaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaWaXaYaXaWapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaIaJaOaJaPaLaIababababaZbabbaVaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaWaXaYaXaWababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIbcbdbebcbfbgbcaIaIaIaIaQaQbhaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababalabalalababalababalacaeapaoaoanabacaeaeapauaoaoaoapapabababaWaXaYaXaWabababapapauaoauauapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibibjbkblbmbnbobjbibibibiaQbpbqbrbsaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaWaWaWbtaWaWaWabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKbjbkblbmbnbobjbKbKbKbKaQbpbqbrbsaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaWaWaWbtaWaWaWabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbubvbvbvbwbxaVbybzbAbwbBbBbBbCaQbpbDbEbFbGbHcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalalalalalacaeapaoaoapaeaeaeapauauaoaoapapababaWaWbJbJaXbJbJaWaWababapapauaoauauapaeaeaeapauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKbcbLaVbMaVbNbcbKbKbKbKaQbObqaVbPaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibibcbLaVbMaVbNbcbibibibiaQbObqaVbPaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbQbRbRbRbSbTbUbVaVbWbSbXbXbXaKaQbYbDbEbEbZbHcraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalabalalalalalalalalalalalalalaeaeaeaeaeaeaeaeaeaeaeaeapaoaoauauauauauauaoauauapaXaXaXaWbJbJaXaYaXbJbJaWaXaXaXapauauaoauauauauaoauauaoapaeaealalalalalalalalalalalalaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKcbcccdcecfcgcbbKbKbKbKaQchbqaVciaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcjaecjaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauauckaYaYaYclaXaXaXaYaXaXaXcmaYaYaYcnaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibicbcccdcecfcgcbbibibibiaQchbqaVciaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcjaecjaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauauckaYaYaYclaXaXaXaYaXaXaXcmaYaYaYcnaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQaQaQaQaQaQaQaQaQcoaQaQaQaQaQaQaQaQcpbDbEbEcqbHbIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababalalalalalalalabalabalalalalalaeaeaecjaeaeaeaeaeaeaeaeapaoaoauaoaoaoaoaoaoaoaoapaXaXaXaWbJbJaXaYaXbJbJaWcscscsapauauaoauauauauauauaoaoapaeaealalalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabctcucvcwcwcxctcyczcAcBcCcDcEcFbEcEcDbEcGaVcHaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcIapapapcJaucJauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcKcucLcucucLcKcMcMcNcMcMaQaQaQaQaQaQcOcPbEcQcRcScTcUaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaccjcVcWcWcVaeaeaecVcXcXcXcXcVcVababaWaWbJbJaXbJbJaWaWababcVcVcXcXcXcXcVaeaeaecVcWcWcXaeacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm
index 9fb4fa0d41..94c371d1eb 100644
--- a/maps/exodus-5.dmm
+++ b/maps/exodus-5.dmm
@@ -21,6 +21,7 @@
"au" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/unexplored)
"av" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"aw" = (/obj/structure/transit_tube,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
+"ax" = (/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/airless,/area/mine/abandoned)
"ay" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/research_outpost/hallway)
"az" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway)
"aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/transit_tube,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -142,7 +143,7 @@
"cM" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos)
"cN" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/research_outpost/atmos)
"cO" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/atmos)
-"cP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/mine/abandoned)
+"cP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"cQ" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/mine/abandoned)
"cR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned)
"cS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
@@ -165,7 +166,7 @@
"dj" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small,/turf/simulated/floor,/area/research_outpost/atmos)
"dk" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 9},/area/shuttle/alien/mine)
"dl" = (/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 1},/area/shuttle/alien/mine)
-"dm" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 10},/area/shuttle/alien/mine)
+"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"dn" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"do" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"dp" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SE"},/turf/space,/area/space)
@@ -225,7 +226,7 @@
"er" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"es" = (/turf/simulated/mineral,/area/mine/explored)
"et" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 5},/area/shuttle/alien/mine)
-"eu" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 6},/area/shuttle/alien/mine)
+"eu" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 10},/area/shuttle/alien/mine)
"ev" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"ew" = (/turf/simulated/wall,/area/mine/abandoned)
"ex" = (/turf/space,/area/shuttle/research/outpost)
@@ -251,7 +252,7 @@
"eR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway)
"eS" = (/turf/simulated/wall/r_wall,/area/research_outpost/power)
"eT" = (/obj/machinery/door/airlock/glass_atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/research_outpost/power)
-"eU" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/mine/abandoned)
+"eU" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"eV" = (/obj/item/stack/rods,/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"eW" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"eX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -281,7 +282,7 @@
"fv" = (/obj/machinery/light/small{dir = 8},/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"fw" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"fx" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
-"fy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned)
+"fy" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 6},/area/shuttle/alien/mine)
"fz" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"fA" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"fB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -498,9 +499,9 @@
"jE" = (/turf/simulated/floor/airless,/area/mine/abandoned)
"jF" = (/obj/effect/alien/weeds,/turf/simulated/floor,/area/mine/abandoned)
"jG" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
-"jH" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned)
-"jI" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned)
-"jJ" = (/obj/structure/table/rack,/turf/simulated/floor,/area/mine/abandoned)
+"jH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"jI" = (/obj/structure/table/rack,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
+"jJ" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/mine/abandoned)
"jK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/transit_tube{icon_state = "D-NE"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"jL" = (/obj/structure/transit_tube{icon_state = "S-NW"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/entry)
"jM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/research_outpost/entry)
@@ -612,15 +613,15 @@
"lO" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/harvesting)
"lP" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting)
"lQ" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned)
-"lR" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
-"lS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
+"lR" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/mine/abandoned)
+"lS" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
+"lT" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
+"lU" = (/obj/structure/transit_tube,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
+"lV" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored)
+"lW" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
+"lX" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
"lY" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor,/area/mine/abandoned)
-"lZ" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
+"lZ" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless,/area/mine/abandoned)
"ma" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mb" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mc" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/lattice,/turf/space,/area/space)
@@ -662,7 +663,7 @@
"mM" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"mN" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"mO" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor,/area/mine/abandoned)
-"mP" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
+"mP" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless,/area/mine/abandoned)
"mQ" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mR" = (/turf/simulated/wall,/area/mine/explored)
"mS" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/wall,/area/mine/explored)
@@ -682,13 +683,13 @@
"ng" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/research_outpost/filtering)
"nh" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso1_access)
"ni" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso1_access)
-"nj" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/iso1_access)
+"nj" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3)
"nk" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso2_access)
"nl" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso2_access)
-"nm" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/iso2_access)
+"nm" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1)
"nn" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/research_outpost/iso3_access)
"no" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/research_outpost/iso3_access)
-"np" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/iso3_access)
+"np" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2)
"nq" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"nr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"ns" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/longtermstorage)
@@ -698,13 +699,13 @@
"nw" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/lattice,/turf/space,/area/space)
"nx" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/space,/area/space)
"ny" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned)
-"nz" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned)
+"nz" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"nA" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"nB" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned)
"nC" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"nD" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"nE" = (/obj/machinery/door/window/westleft,/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"nF" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"nF" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"nG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space)
"nH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/research_outpost/gearstore)
"nI" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -718,28 +719,28 @@
"nQ" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor,/area/research_outpost/filtering)
"nR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/research_outpost/filtering)
"nS" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso1_access)
-"nT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/research_outpost/iso1_access)
-"nU" = (/obj/machinery/door_control{id = "riso1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/research_outpost/iso1_access)
+"nT" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3)
+"nU" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 6; tag_west = 2},/turf/simulated/floor,/area/research_outpost/filtering)
"nV" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso2_access)
-"nW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/research_outpost/iso2_access)
-"nX" = (/obj/machinery/door_control{id = "riso2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/research_outpost/iso2_access)
+"nW" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso2"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2)
+"nX" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso1"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1)
"nY" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/turf/simulated/floor,/area/research_outpost/iso3_access)
-"nZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/research_outpost/iso3_access)
-"oa" = (/obj/machinery/door_control{id = "riso3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/research_outpost/iso3_access)
+"nZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
+"oa" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
"ob" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"oc" = (/obj/structure/dispenser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"od" = (/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/research_outpost/longtermstorage)
"oe" = (/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/research_outpost/longtermstorage)
"of" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"og" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"oh" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned)
+"oh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"oi" = (/obj/effect/alien/resin,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned)
"oj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned)
"ok" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
-"ol" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
+"ol" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
"om" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"on" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"oo" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"oo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"op" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/research_outpost/gearstore)
"oq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/gearstore)
"or" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/door/window{dir = 4; name = "Air Tank Access"; req_access_txt = "0"; req_one_access_txt = "47;10;24"},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -751,21 +752,21 @@
"ox" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
"oy" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored)
"oz" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor,/area/research_outpost/filtering)
-"oA" = (/obj/machinery/atmospherics/omni/filter,/turf/simulated/floor,/area/research_outpost/filtering)
+"oA" = (/obj/machinery/camera{c_tag = "Isolation Room Two"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
"oB" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor,/area/research_outpost/filtering)
"oC" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso1)
-"oD" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/iso1)
+"oD" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
"oE" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso2)
-"oF" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/iso2)
+"oF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
"oG" = (/turf/simulated/wall/r_wall,/area/research_outpost/iso3)
-"oH" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access_txt = "65"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/iso3)
+"oH" = (/obj/machinery/camera{c_tag = "Isolation Room One"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
"oI" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"oJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3; pixel_y = -3},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"oK" = (/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2)
"oL" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/longtermstorage)
"oM" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"oN" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
-"oO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned)
+"oN" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless,/area/mine/abandoned)
+"oO" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"oP" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"oQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
"oR" = (/obj/machinery/suspension_gen,/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -776,22 +777,22 @@
"oW" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/turf/simulated/floor,/area/research_outpost/gearstore)
"oX" = (/obj/machinery/conveyor{dir = 2; id = "anominerals"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/research_outpost/tempstorage)
"oY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
-"oZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_one"; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
-"pa" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
-"pb" = (/obj/machinery/camera{c_tag = "Isolation Room One"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso1)
-"pc" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
-"pd" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
-"pe" = (/obj/machinery/camera{c_tag = "Isolation Room Two"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
-"pf" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_three"; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
-"pg" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
-"ph" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
+"oZ" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso2)
+"pa" = (/obj/machinery/camera{c_tag = "Isolation Room Three"; dir = 8; network = list("Research","Anomaly Isolation")},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
+"pb" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/research_outpost/iso3)
+"pc" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access)
+"pd" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access)
+"pe" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access)
+"pf" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso1_access)
+"pg" = (/obj/machinery/door_control{id = "riso1"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso1_access)
+"ph" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso2_access)
"pi" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"pj" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/research_outpost/maintstore2)
"pk" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral/random,/area/mine/unexplored)
"pl" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"pm" = (/obj/structure/transit_tube{icon_state = "D-NW"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"pn" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned)
-"po" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned)
+"pn" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
+"po" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"pp" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"pq" = (/obj/structure/table/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"pr" = (/obj/structure/closet,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
@@ -807,14 +808,11 @@
"pB" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"pC" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored)
"pD" = (/obj/machinery/conveyor_switch{id = "anosample"; req_access_txt = "65"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = 32},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
-"pE" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; use_power = 0},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1)
-"pF" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1)
+"pE" = (/obj/machinery/door_control{id = "riso2"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso2_access)
+"pF" = (/obj/machinery/door_control{id = "riso3"; name = "Door Bolt Control"; normaldoorcontrol = 1; pixel_x = 0; pixel_y = -25; req_access_txt = "0"; specialfunctions = 4},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/research_outpost/iso3_access)
"pG" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso1)
-"pH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; use_power = 0},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2)
-"pI" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2)
+"pH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow,/turf/simulated/floor,/area/research_outpost/iso3_access)
"pJ" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso2)
-"pK" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; use_power = 0},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3)
-"pL" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3)
"pM" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/research_outpost/iso3)
"pN" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2)
"pO" = (/obj/structure/transit_tube{icon_state = "E-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
@@ -830,8 +828,8 @@
"pY" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SE"},/turf/space,/area/mine/explored)
"pZ" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "E-SW"},/turf/space,/area/mine/explored)
"qa" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area/mine/explored)
-"qb" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
-"qc" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"qb" = (/obj/structure/table/rack,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
+"qc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"qd" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"qe" = (/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/mine/explored)
"qf" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
@@ -875,22 +873,22 @@
"qR" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_outer"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/research_outpost/gearstore)
"qS" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
"qT" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"qU" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"qU" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"qV" = (/obj/structure/transit_tube{icon_state = "E-SW"},/turf/simulated/wall/r_wall,/area/mine/explored)
"qW" = (/obj/structure/transit_tube,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"qX" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
-"qY" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/unexplored)
-"qZ" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/unexplored)
-"ra" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/unexplored)
+"qY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"qZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"ra" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"rb" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
-"rc" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/mine/abandoned)
+"rc" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"rd" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/mine/explored)
"re" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
"rf" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "research_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null; req_one_access = list(13,65); req_one_access_txt = null},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"rg" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
"rh" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"ri" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
-"rj" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"rj" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
"rk" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/wall/r_wall,/area/mine/explored)
"rl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = -32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"rm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
@@ -898,7 +896,7 @@
"ro" = (/obj/machinery/door/window/westleft{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
"rp" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"rq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"rr" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/obj/structure/transit_tube_pod,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"rr" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/obj/structure/transit_tube_pod,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"rs" = (/obj/effect/glowshroom,/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"rt" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"ru" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
@@ -1113,6 +1111,7 @@
"vv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/living_quarters)
"vw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/mine/living_quarters)
"vx" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/simulated/floor,/area/mine/living_quarters)
+"vy" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"vz" = (/turf/simulated/wall,/area/mine/production)
"vA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production)
"vB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production)
@@ -1374,6 +1373,10 @@
"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Az" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
+"AA" = (/obj/structure/transit_tube,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored)
+"AB" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored)
+"AC" = (/obj/structure/transit_tube/station,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored)
+"AD" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1424,33 +1427,33 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaRababababababababaSaTaUaVaWaXaYaZbabbbcbdbebcbfbgbcbhbdaMaeaebibjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababbkbkababbkbkbkbkabbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaRabababababaSaSaSaSblbmaUbnbobpbpbpbqbcbrbsbtbubvbwbxbyaMaeaebzbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababbkababababababbkbkababababbkbkbkbkabbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaRababababaSaSbBbCaSbDbDbDbDbEbFbGbGbHbcbcbcbcbIbJbKbKbKbKbKbKbLbMbNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObPbOaaaaaaaaaaababababababababababababababababababababababbkabababbkbkabbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaRababababaSbQbRbSbTbUbVbWbXbYbZcacbccbccdcebccfcgbKchcicjckclcmcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpcqcpaeaaaaaaababababababababababababbkbkbkbkbkbkabababababababbkbkbkbkbkabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaRababababaScrcsctaScucvcwcxcyczcAcbcBbccCcDcEcFcGcHcIcJcKcLcMcNcOcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbPbOaaaaaaaaaaababababababababababababababababababababababbkabababbkbkabbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaRababababaSbQbRbSbTbUbVbWbXbYbZcacbccbccdcebccfcgbKchcicjckclcmcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmcqcpaeaaaaaaababababababababababababbkbkbkbkbkbkabababababababbkbkbkbkbkabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaRababababaScrcsctaScucvcwcxcyczcAcbcBbccCcDcEcFcGcHcIcJcKcLcMcNcOcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPcQcRcSaeaaaaabababababababbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaafcTaaabababaScrcUcVaScWcwcXcYcZdadbdadcdadadaaMdddebKdfdgcKdhdidjcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldldmdndocpaeaaaaababababbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaedpdqaBaBaBdrdsaaabababaScrdtduaSdvdwdxdydzdAdBdCdDdEdFdGaMdHdIbKdJdKdLdMdNbKdOdPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldleudndocpaeaaaaababababbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaedpdqaBaBaBdrdsaaabababaScrdtduaSdvdwdxdydzdAdBdCdDdEdFdGaMdHdIbKdJdKdLdMdNbKdOdPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQdRdSdTdUdVdWaeaebkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaedYdsaeaeaeaeaedZaSaSaSaSaSaSeaaSbDaMaMebecdaedeeefegeheiaMejekelemeneoepeqeleresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaetdldleuevdoewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaaaaaRexexexexexexexbceyezeAeBeCeDeEeFeGeHeIeJdaeKeLeMeNeOePdaeQeReSeSeSeTeSeSeSeresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaetdldlfyevdoewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaaaaaRexexexexexexexbceyezeAeBeCeDeEeFeGeHeIeJdaeKeLeMeNeOePdaeQeReSeSeSeTeSeSeSeresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeeUeVeWewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaaaaaRexexexexexexexeXeYeZfaeZeZfbfceZfdfefffgfhfifjfkflfmfnfofpfqeSfrfsfufteSfvfwesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefxfyfzfAewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaRexexexexexexexfBfCfDfEfFfGfHfIfJfKaMfLfMaMfNfOfPfQfRfSdafTfUfVfWfXfYfZgagbgcesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefxjHfzfAewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaRexexexexexexexfBfCfDfEfFfGfHfIfJfKaMfLfMaMfNfOfPfQfRfSdafTfUfVfWfXfYfZgagbgcesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaegdgegfewggghewewewewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaRexexexexexexexgifCfDfEfFgjgkfIfJglaMgmgnaMgodadadadagpdagqgreSgsgtgugvgwergxgygyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegzgAgBgCgDgEbOdVgFewgGgHewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaRexexexexexexexbcgIgJgKfFgLgMfIgNgOaMgPgQgRgSgTgUgVaMgWgXgYgZeShahbhchdheeresesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehfhggAhhhihjhkhlgFhmgHhngGewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahohphqhrhshphqhthuhvhwhxhyhyaMaMaMaMaMhzhAhBhCbghDhEaMhFhGhHhIaMhJhKhLhMhNhOhPaMhQdqaBaBaBaBaBaBaChRaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahShfhThfgBgBgghUhiewfAhVewgHhWewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahXhYhZiaibichZidieifhZigihiiijikilimaMinhAioipiqirisaMitiuiviwaMeSixeSaMaMiyiziAiBiCiDiDiEiDiDiDiFbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeiGiHgBiIiJgBeWiKhjiLiMiNewewewewewewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababaaaaaaaaaaiOiPiQiQiQiQiRiSiTiUiViWiXiYijiZjajbjcjdjejfjgeZeZjhjieZeZjjjkjljmjnjojpjqeZeZjrjsjtjuiDjvjwjxjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaejzjAjBgBiJjChhjDhijEewjFjGewjHgFjIjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababaaaaaaaajKjLhZhZjMhZjNjOhZjPhZjQjRjSijjajTjUjVjWjXjYjZkakbkckdkekfkckdkdkgkhkikjkkklkmknkokpkqkrksktkukviDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewjHfAgFjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewjHeWlmjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQdVhjlRewlSlTlUewiLewlVlWlXewdVlYcqlZeWfzcqewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWdVhhiLlYkwmMkwmNdVdVmOgFdVeWeWewcqmPeWdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnynzeWeWiLeWlmggeWnAmNlmkCnBeWnCfAewkwcqlYdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEnFnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSnTnUkYnVnWnXlanYnZoalaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnyohhhgDewoiewojokewhjewojokewhilYewmOolcqjFewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonoonGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewoNgFhjjFfAhikzhiiNhhewojoOoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpapboEpcpdpeoGpfpgphoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewgFjFpniKdohhgFewhifAewpopppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCpEpFpGoEpHpIpJoGpKpLpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewjFdViNgFhifAiNewoiewewjHcqpppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqaqbqcqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewjHcqjIcqpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewjHjIjIjIjJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTqUqVaiaiaiaiqWaiaiaiaiaiqXqYqZraogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaejzjAjBgBiJjChhjDhijEewjFjGewkBkCdVjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababaaaaaaaajKjLhZhZjMhZjNjOhZjPhZjQjRjSijjajTjUjVjWjXjYjZkakbkckdkekfkckdkdkgkhkikjkkklkmknkokpkqkrksktkukviDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewkBkwkCjIewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewkBeWfAqbewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQhijBqUewjzqcjAewiLewqZraqYewdVlYjEoNeWfzhiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWjBeWoOlYkwmMkwmNdVdVmOgFdVeWeWewhioNhihiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhnipdkYnknlpelannnopclanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnyjBhieWpoeWlmggeWnAmNlmkCnBeWnCfAewmPeWiNdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEpnnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSpfpgkYnVphpElanYpHpFlaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnynzhigEewoiewojokeweWewojokewhilYewghlZjEmPewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonlXnGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyoznUoBoCoCnXoCoEoEnWoEoGoGnToGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewiNnCeWkzolhikzhiiNhhewooohoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCnZoFoHoEoZoaoAoGoDpbpaoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewnCfAlTkzlSeWkCewhifAewlRpppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCnmnmpGoEnpnppJoGnjnjpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewkzeWdolWhifAiNewoiewewkBhipppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqalUlVqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewvydVhidVpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewkBhijEhijJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTADqVaiaiaiaiqWaiaiaiaiaiqXAAACABogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkewewewewewewewewewewewewewewoQrbrcewewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygygypBrfpCrgrhrigygygygyonrjrkababbkbkbkbkbkbkbkbkrlrmrnroadqKadadqKabababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewppppjIewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewpppphiewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewrtrurtewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygygygygygygygygygyaaaaaaaaaaaaaaaaesesesababababesesesgygygygygyrvgygydXgygypzpzpzbkbkbkbkbkbkbkbkbkbkbkbkkDbkadqubkabbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadewrwrboQewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesespVryrxgygygygygyesesesaaaaaaaaaaaaaaaaaaababababababababesesesgygygyrvgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadrBrCrDadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesmResgygymQmQesababaaaaaaaaaaaaaaaaaabkbkbkbkbkabababababesesgygyrvgygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/templates/hardsuit.tmpl b/nano/templates/hardsuit.tmpl
index a8d3e59ac7..b32bb621c8 100644
--- a/nano/templates/hardsuit.tmpl
+++ b/nano/templates/hardsuit.tmpl
@@ -78,12 +78,12 @@ Used In File(s): /code/modules/clothing/spacesuits/rig/rig.dm
{{if data.sealing == 1}}
-
SEALING
+
PROCESSING
{{else}}
{{if data.seals == 1}}
-
OPEN
+
INACTIVE
{{else}}
-
SEALED
+
ACTIVE
{{/if}}
{{/if}}
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index 81a75a2500..38cc5ef945 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -294,12 +294,12 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'fixedLeft')}}
- {{else data.mode== 41}}
+ {{else data.mode== 41}}
- {{if data.manifest.heads.length}}
+ {{if data.cached.heads.length}}
| Command |
- {{for data.manifest["heads"]}}
+ {{for data.cached["heads"]}}
{{if value.rank == "Captain"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -307,9 +307,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.sec.length}}
+ {{if data.cached.sec.length}}
| Security |
- {{for data.manifest["sec"]}}
+ {{for data.cached["sec"]}}
{{if value.rank == "Head of Security"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -317,9 +317,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.eng.length}}
+ {{if data.cached.eng.length}}
| Engineering |
- {{for data.manifest["eng"]}}
+ {{for data.cached["eng"]}}
{{if value.rank == "Chief Engineer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -327,9 +327,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.med.length}}
+ {{if data.cached.med.length}}
| Medical |
- {{for data.manifest["med"]}}
+ {{for data.cached["med"]}}
{{if value.rank == "Chief Medical Officer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -337,9 +337,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.sci.length}}
+ {{if data.cached.sci.length}}
| Science |
- {{for data.manifest["sci"]}}
+ {{for data.cached["sci"]}}
{{if value.rank == "Research Director"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -347,9 +347,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.civ.length}}
+ {{if data.cached.civ.length}}
| Civilian |
- {{for data.manifest["civ"]}}
+ {{for data.cached["civ"]}}
{{if value.rank == "Head of Personnel"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -357,9 +357,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.manifest.misc.length}}
+ {{if data.cached.misc.length}}
| Misc |
- {{for data.manifest["misc"]}}
+ {{for data.cached["misc"]}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{/for}}
{{/if}}
diff --git a/nano/templates/sec_camera.tmpl b/nano/templates/sec_camera.tmpl
index ea18fb2047..886cb0f87c 100644
--- a/nano/templates/sec_camera.tmpl
+++ b/nano/templates/sec_camera.tmpl
@@ -12,7 +12,7 @@ Used In File(s): \code\game\machinery\computer\camera.dm
None
{{/if}}
-{{for data.cameras}}
+{{for data.cached.cameras}}
{{if data.current && value.name == data.current.name}}
{{:helper.link(value.name, '', {'switchTo' : value.camera}, 'selected')}}
{{else value.deact}}
@@ -20,4 +20,4 @@ Used In File(s): \code\game\machinery\computer\camera.dm
{{else}}
{{:helper.link(value.name, '', {'switchTo' : value.camera})}}
{{/if}}
-{{/for}}
\ No newline at end of file
+{{/for}}
diff --git a/nano/templates/sec_camera_map_content.tmpl b/nano/templates/sec_camera_map_content.tmpl
index 52dc8aeadd..55d9e05d4d 100644
--- a/nano/templates/sec_camera_map_content.tmpl
+++ b/nano/templates/sec_camera_map_content.tmpl
@@ -2,7 +2,7 @@
Title: Security Camera Console (Map content)
Used In File(s): \code\game\machinery\computer\camera.dm
-->
-{{for data.cameras}}
+{{for data.cached.cameras}}
{{if value.z == 1}}
{{if data.current && value.name == data.current.name}}
@@ -17,4 +17,4 @@ Used In File(s): \code\game\machinery\computer\camera.dm
{{/if}}
-{{/for}}
\ No newline at end of file
+{{/for}}
diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl
index 8b72cefedd..799ac3911d 100644
--- a/nano/templates/smes.tmpl
+++ b/nano/templates/smes.tmpl
@@ -50,6 +50,14 @@
{{:helper.link('Online', 'power', {'online' : 1}, data.outputOnline ? 'selected' : null)}}{{:helper.link('Offline', 'close', {'online' : 1}, data.outputOnline ? null : 'selected')}}
+
+ {{if data.outputting == 2}}
+ [Outputting]
+ {{else data.outputting == 1}}
+ [Stored energy too low]
+ {{else}}
+ [Not Outputting]
+ {{/if}}