diff --git a/code/__defines/admin.dm b/code/__defines/admin.dm
index 1e64ed8a1b..5f9ada5e98 100644
--- a/code/__defines/admin.dm
+++ b/code/__defines/admin.dm
@@ -36,7 +36,7 @@
#define R_SOUNDS 0x800
#define R_SPAWN 0x1000
#define R_MOD 0x2000
-#define R_MENTOR 0x4000
+#define R_EVENT 0x4000
#define R_HOST 0x8000 //higher than this will overflow
#define R_MAXPERMISSION 0x8000 // This holds the maximum value for a permission. It is used in iteration, so keep it updated.
\ No newline at end of file
diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm
index 975e65e3ec..0316e1d186 100644
--- a/code/_helpers/type2type.dm
+++ b/code/_helpers/type2type.dm
@@ -148,7 +148,7 @@
if (rights & R_SOUNDS) . += "[seperator]+SOUND"
if (rights & R_SPAWN) . += "[seperator]+SPAWN"
if (rights & R_MOD) . += "[seperator]+MODERATOR"
- if (rights & R_MENTOR) . += "[seperator]+MENTOR"
+ if (rights & R_EVENT) . += "[seperator]+EVENT"
return .
// Converts a hexadecimal color (e.g. #FF0050) to a list of numbers for red, green, and blue (e.g. list(255,0,80) ).
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index b985c5680b..b80652d6d6 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -67,7 +67,7 @@ var/list/gamemode_cache = list()
var/kick_inactive = 0 //force disconnect for inactive players after this many minutes, if non-0
var/show_mods = 0
var/show_devs = 0
- var/show_mentors = 0
+ var/show_event_managers = 0
var/mods_can_tempban = 0
var/mods_can_job_tempban = 0
var/mod_tempban_max = 1440
@@ -511,8 +511,8 @@ var/list/gamemode_cache = list()
if("show_devs")
config.show_devs = 1
- if("show_mentors")
- config.show_mentors = 1
+ if("show_event_managers")
+ config.show_event_managers = 1
if("mods_can_tempban")
config.mods_can_tempban = 1
diff --git a/code/datums/ghost_query.dm b/code/datums/ghost_query.dm
index 25fcbd6c7b..c06013105a 100644
--- a/code/datums/ghost_query.dm
+++ b/code/datums/ghost_query.dm
@@ -92,6 +92,13 @@
question = "An Alien has just been created on the facility. Would you like to play as them?"
be_special_flag = BE_ALIEN
+/datum/ghost_query/syndicate_drone
+ role_name = "Mercenary Drone"
+ question = "A team of dubious mercenaries have purchased a powerful drone, and they are attempting to activate it. Would you like to play as the drone?"
+ be_special_flag = BE_AI
+ check_bans = list("AI", "Cyborg", "Syndicate")
+ cutoff_number = 1
+
// Surface stuff.
/datum/ghost_query/lost_drone
role_name = "Lost Drone"
diff --git a/code/datums/outfits/_defines.dm b/code/datums/outfits/_defines.dm
index d105fc0ebc..ae07595c50 100644
--- a/code/datums/outfits/_defines.dm
+++ b/code/datums/outfits/_defines.dm
@@ -1,3 +1,7 @@
#define OUTFIT_HAS_JETPACK 1
#define OUTFIT_HAS_BACKPACK 2
#define OUTFIT_EXTENDED_SURVIVAL 4
+
+#define OUTFIT_JOB_NAME(job_name) ("Job - " + job_name)
+#define OUTFIT_MILITARY(job_name) ("Military Uniform - " + job_name)
+#define OUTFIT_COSTUME(job_name) ("Costume - " + job_name)
\ No newline at end of file
diff --git a/code/datums/outfits/costumes/costume.dm b/code/datums/outfits/costumes/costume.dm
new file mode 100644
index 0000000000..2e6167ee73
--- /dev/null
+++ b/code/datums/outfits/costumes/costume.dm
@@ -0,0 +1,2 @@
+/decl/hierarchy/outfit/costume
+ undress = 0
\ No newline at end of file
diff --git a/code/datums/outfits/costumes/halloween.dm b/code/datums/outfits/costumes/halloween.dm
index d4ad8fa8f9..36659e2141 100644
--- a/code/datums/outfits/costumes/halloween.dm
+++ b/code/datums/outfits/costumes/halloween.dm
@@ -1,5 +1,5 @@
-/decl/hierarchy/outfit/h_masked_killer
- name = "Costume - Masked Killer"
+/decl/hierarchy/outfit/costume/masked_killer
+ name = OUTFIT_COSTUME("Masked Killer")
uniform = /obj/item/clothing/under/overalls
shoes = /obj/item/clothing/shoes/white
gloves = /obj/item/clothing/gloves/sterile/latex
@@ -8,20 +8,20 @@
suit = /obj/item/clothing/suit/storage/apron
r_hand = /obj/item/weapon/material/twohanded/fireaxe/foam
-/decl/hierarchy/outfit/masked_killer/post_equip(var/mob/living/carbon/human/H)
+/decl/hierarchy/outfit/costume/masked_killer/post_equip(var/mob/living/carbon/human/H)
var/victim = get_mannequin(H.ckey)
for(var/obj/item/carried_item in H.get_equipped_items(TRUE))
carried_item.add_blood(victim) //Oh yes, there will be blood.. just not blood from the killer because that's odd. //If I knew how to make fake blood, I would
-/decl/hierarchy/outfit/h_professional
- name = "Costume - Professional"
+/decl/hierarchy/outfit/costume/professional
+ name = OUTFIT_COSTUME("Professional")
uniform = /obj/item/clothing/under/suit_jacket{ starting_accessories=list(/obj/item/clothing/accessory/wcoat) }
shoes = /obj/item/clothing/shoes/black
gloves = /obj/item/clothing/gloves/black
glasses = /obj/item/clothing/glasses/fakesunglasses
l_pocket = /obj/item/toy/sword
-/decl/hierarchy/outfit/h_professional/post_equip(var/mob/living/carbon/human/H)
+/decl/hierarchy/outfit/costume/professional/post_equip(var/mob/living/carbon/human/H)
var/obj/item/weapon/storage/briefcase/new_briefcase = new(H)
for(var/obj/item/briefcase_item in new_briefcase)
qdel(briefcase_item)
@@ -30,9 +30,9 @@
new_briefcase.contents += new /obj/item/clothing/mask/gas/clown_hat
H.equip_to_slot_or_del(new_briefcase, slot_l_hand)
-/decl/hierarchy/outfit/h_horrorcop
- name = "Costume - Slasher Movie Cop"
- uniform = /obj/item/clothing/under/pcrc{ starting_accessories=list(/obj/item/clothing/accessory/holster) }
+/decl/hierarchy/outfit/costume/horrorcop
+ name = OUTFIT_COSTUME("Slasher Movie Cop")
+ uniform = /obj/item/clothing/under/pcrc{ starting_accessories=list(/obj/item/clothing/accessory/holster/hip) }
shoes = /obj/item/clothing/shoes/black
gloves = /obj/item/clothing/gloves/black
glasses = /obj/item/clothing/glasses/fakesunglasses
@@ -40,7 +40,7 @@
head = /obj/item/clothing/head/beret
r_hand = /obj/item/weapon/gun/projectile/revolver/capgun
-/decl/hierarchy/outfit/h_horrorcop/post_equip(var/mob/living/carbon/human/H)
+/decl/hierarchy/outfit/costume/horrorcop/post_equip(var/mob/living/carbon/human/H)
var/obj/item/clothing/under/U = H.w_uniform
if(U.accessories.len)
for(var/obj/item/clothing/accessory/A in U.accessories)
@@ -48,16 +48,16 @@
var/obj/item/clothing/accessory/holster/O = A
O.holster_verb()
-/decl/hierarchy/outfit/h_cowboy
- name = "Costume - Cowboy"
- uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/holster) }
+/decl/hierarchy/outfit/costume/cowboy
+ name = OUTFIT_COSTUME("Cowboy")
+ uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/holster/hip) }
shoes = /obj/item/clothing/shoes/boots/cowboy
head = /obj/item/clothing/head/cowboy_hat
gloves = /obj/item/clothing/gloves/fingerless
suit = /obj/item/clothing/accessory/poncho
r_hand = /obj/item/weapon/gun/projectile/revolver/capgun
-/decl/hierarchy/outfit/h_cowboy/post_equip(var/mob/living/carbon/human/H)
+/decl/hierarchy/outfit/costume/cowboy/post_equip(var/mob/living/carbon/human/H)
var/obj/item/clothing/under/U = H.w_uniform
if(U.accessories.len)
for(var/obj/item/clothing/accessory/A in U.accessories)
@@ -65,8 +65,8 @@
var/obj/item/clothing/accessory/holster/O = A
O.holster_verb()
-/decl/hierarchy/outfit/h_lumberjack
- name = "Costume - Lumberjack"
+/decl/hierarchy/outfit/costume/lumberjack
+ name = OUTFIT_COSTUME("Lumberjack")
uniform = /obj/item/clothing/under/pants{ starting_accessories=list(/obj/item/clothing/accessory/sweater/blackneck) }
shoes = /obj/item/clothing/shoes/boots/workboots
head = /obj/item/clothing/head/beanie
@@ -74,8 +74,8 @@
suit = /obj/item/clothing/suit/storage/flannel/red
r_hand = /obj/item/weapon/material/twohanded/fireaxe/foam
-/decl/hierarchy/outfit/h_firefighter
- name = "Costume - Firefighter"
+/decl/hierarchy/outfit/costume/firefighter
+ name = OUTFIT_COSTUME("Firefighter")
uniform = /obj/item/clothing/under/pants
shoes = /obj/item/clothing/shoes/boots/workboots
head = /obj/item/clothing/head/hardhat/red
@@ -83,22 +83,22 @@
suit = /obj/item/clothing/suit/fire/firefighter
mask = /obj/item/clothing/mask/gas
-/decl/hierarchy/outfit/h_highlander
- name = "Costume - Highlander"
+/decl/hierarchy/outfit/costume/highlander
+ name = OUTFIT_COSTUME("Highlander")
uniform = /obj/item/clothing/under/kilt
shoes = /obj/item/clothing/shoes/boots/jackboots
head = /obj/item/clothing/head/beret
r_hand = /obj/item/weapon/material/sword/foam
-/decl/hierarchy/outfit/h_vampire
- name = "Costume - Vampire"
+/decl/hierarchy/outfit/costume/vampire
+ name = OUTFIT_COSTUME("Vampire")
uniform = /obj/item/clothing/under/suit_jacket/really_black
shoes = /obj/item/clothing/shoes/dress
gloves = /obj/item/clothing/gloves/white
r_hand = /obj/item/weapon/bedsheet/red
-/decl/hierarchy/outfit/h_vampire_hunter
- name = "Costume - Vampire Hunter"
+/decl/hierarchy/outfit/costume/vampire_hunter
+ name = OUTFIT_COSTUME("Vampire Hunter")
uniform = /obj/item/clothing/under/pants/tan
suit = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless
shoes = /obj/item/clothing/shoes/boots/jackboots
@@ -106,10 +106,18 @@
l_pocket = /obj/item/toy/crossbow
r_pocket = /obj/item/device/flashlight/color/red
-/decl/hierarchy/outfit/h_pirate
- name = "Costume - Pirate"
+/decl/hierarchy/outfit/costume/pirate
+ name = OUTFIT_COSTUME("Pirate")
uniform = /obj/item/clothing/under/pirate
shoes = /obj/item/clothing/shoes/brown
- head = /obj/item/clothing/head/helmet/space
+ head = /obj/item/clothing/head/pirate
suit = /obj/item/clothing/suit/pirate
- glasses = /obj/item/clothing/glasses/eyepatch
\ No newline at end of file
+ glasses = /obj/item/clothing/glasses/eyepatch
+
+/decl/hierarchy/outfit/costume/whiteout
+ name = OUTFIT_COSTUME("Snow Ghost")
+ uniform = /obj/item/clothing/under/color/white{ starting_accessories=list(/obj/item/clothing/accessory/scarf/white) }
+ shoes = /obj/item/clothing/shoes/white
+ suit = /obj/item/clothing/suit/storage/hooded/chaplain_hoodie/whiteout
+ gloves = /obj/item/clothing/gloves/white
+ mask = /obj/item/clothing/mask/surgical
\ No newline at end of file
diff --git a/code/datums/outfits/jobs/_defines.dm b/code/datums/outfits/jobs/_defines.dm
deleted file mode 100644
index e4bdd05fbb..0000000000
--- a/code/datums/outfits/jobs/_defines.dm
+++ /dev/null
@@ -1,2 +0,0 @@
-#define OUTFIT_JOB_NAME(job_name) ("Job - " + job_name)
-#define OUTFIT_MILITARY(job_name) ("Military Uniform - " + job_name)
\ No newline at end of file
diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm
index 93ea518df1..e69e9eb705 100644
--- a/code/datums/outfits/outfit.dm
+++ b/code/datums/outfits/outfit.dm
@@ -57,6 +57,8 @@ var/list/outfits_decls_by_type_
var/flags // Specific flags
+ var/undress = 1 //Does the outfit undress the mob upon equp?
+
/decl/hierarchy/outfit/New()
..()
diff --git a/code/datums/uplink/backup.dm b/code/datums/uplink/backup.dm
new file mode 100644
index 0000000000..40f2a468f6
--- /dev/null
+++ b/code/datums/uplink/backup.dm
@@ -0,0 +1,35 @@
+/*********
+* Back up *
+**********/
+/datum/uplink_item/item/backup
+ category = /datum/uplink_category/backup
+ blacklisted = 1
+
+/datum/uplink_item/item/backup/syndicate_drone_protector
+ name = "Drone (Protector)"
+ desc = "A miniature teleport which will bring a powerful and loyal drone to you. \
+ This type comes with a directional shield projector, a supressive fire energy weapon, \
+ a stunbaton, handcuffs, an agent ID, energy sword, pinpointer, and a jetpack."
+ item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
+ antag_roles = list("mercenary")
+ path = /obj/item/weapon/antag_spawner/syndicate_drone/protector
+
+/datum/uplink_item/item/backup/syndicate_drone_combat_medic
+ name = "Drone (Combat Medic)"
+ desc = "A miniature teleport which will bring a powerful and loyal drone to you. \
+ This type comes with standard medical equipment, full set of surgery tools, \
+ a powerful hypospray that can create many potent chemicals, an agent ID, energy \
+ sword, pinpointer, and a jetpack."
+ item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
+ antag_roles = list("mercenary")
+ path = /obj/item/weapon/antag_spawner/syndicate_drone/combat_medic
+
+/datum/uplink_item/item/backup/syndicate_drone_mechanist
+ name = "Drone (Mechanist)"
+ desc = "A miniature teleport which will bring a powerful and loyal drone to you. \
+ This type comes with a full set of tools, an RCD, the ability to unlock other bound synthetics, \
+ a cryptographic sequencer, an AI detector, the ability to analyze and repair full-body prosthetics, \
+ a set of construction materials, an ionic rapier, an agent ID, energy sword, pinpointer, and a jetpack."
+ item_cost = DEFAULT_TELECRYSTAL_AMOUNT * 1.5
+ antag_roles = list("mercenary")
+ path = /obj/item/weapon/antag_spawner/syndicate_drone/mechanist
\ No newline at end of file
diff --git a/code/datums/uplink/uplink_categories.dm b/code/datums/uplink/uplink_categories.dm
index 7c65747f0b..2776085594 100644
--- a/code/datums/uplink/uplink_categories.dm
+++ b/code/datums/uplink/uplink_categories.dm
@@ -49,4 +49,7 @@ datum/uplink_category/ammunition
name = "Highly Visible and Dangerous Weapons"
/datum/uplink_category/telecrystals
- name = "Telecrystals"
\ No newline at end of file
+ name = "Telecrystals"
+
+/datum/uplink_category/backup
+ name = "Backup"
\ No newline at end of file
diff --git a/code/datums/uplink/visible_weapons.dm b/code/datums/uplink/visible_weapons.dm
index f7d79c5b6a..ce4e205f64 100644
--- a/code/datums/uplink/visible_weapons.dm
+++ b/code/datums/uplink/visible_weapons.dm
@@ -112,6 +112,12 @@
path = /obj/item/weapon/storage/secure/briefcase/rifle
antag_roles = list("traitor", "autotraitor", "infiltrator")
+/datum/uplink_item/item/visible_weapons/fuelrodcannon
+ name = "Fuel-Rod Cannon"
+ desc = "An incredibly bulky weapon whose devastating firepower is only matched by its severe need for expensive, and rare, ammunition. This device will likely require extra preparation to use, you are warned."
+ item_cost = DEFAULT_TELECRYSTAL_AMOUNT
+ path = /obj/item/weapon/storage/secure/briefcase/fuelrod
+
/datum/uplink_item/item/visible_weapons/tommygun
name = "Tommygun (.45)" // We're keeping this because it's CLASSY. -Spades
item_cost = 60
diff --git a/code/game/gamemodes/nuclear/pinpointer.dm b/code/game/gamemodes/nuclear/pinpointer.dm
index 5d67b6eece..bd140c3061 100644
--- a/code/game/gamemodes/nuclear/pinpointer.dm
+++ b/code/game/gamemodes/nuclear/pinpointer.dm
@@ -9,6 +9,7 @@
throw_speed = 4
throw_range = 20
matter = list(DEFAULT_WALL_MATERIAL = 500)
+ preserve_item = 1
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
@@ -263,3 +264,57 @@
icon_state = "pinonfar"
spawn(5) .()
+
+
+// This one only points to the ship. Useful if there is no nuking to occur today.
+/obj/item/weapon/pinpointer/shuttle
+ var/shuttle_comp_id = null
+ var/obj/machinery/computer/shuttle_control/our_shuttle = null
+
+/obj/item/weapon/pinpointer/shuttle/attack_self(mob/user as mob)
+ if(!active)
+ active = TRUE
+ find_shuttle()
+ to_chat(user, "Shuttle Locator active.")
+ else
+ active = FALSE
+ icon_state = "pinoff"
+ to_chat(user, "You deactivate the pinpointer.")
+
+/obj/item/weapon/pinpointer/shuttle/proc/find_shuttle()
+ if(!active)
+ return
+
+ if(!our_shuttle)
+ for(var/obj/machinery/computer/shuttle_control/S in machines)
+ if(S.shuttle_tag == shuttle_comp_id) // Shuttle tags are used so that it will work if the computer path changes, as it does on the southern cross map.
+ our_shuttle = S
+ break
+
+ if(!our_shuttle)
+ icon_state = "pinonnull"
+ return
+
+ if(loc.z != our_shuttle.z) //If you are on a different z-level from the shuttle
+ icon_state = "pinonnull"
+ else
+ set_dir(get_dir(src, our_shuttle))
+ switch(get_dist(src, our_shuttle))
+ if(0)
+ icon_state = "pinondirect"
+ if(1 to 8)
+ icon_state = "pinonclose"
+ if(9 to 16)
+ icon_state = "pinonmedium"
+ if(16 to INFINITY)
+ icon_state = "pinonfar"
+
+ spawn(5)
+ .()
+
+
+/obj/item/weapon/pinpointer/shuttle/merc
+ shuttle_comp_id = "Mercenary"
+
+/obj/item/weapon/pinpointer/shuttle/heist
+ shuttle_comp_id = "Skipjack"
\ No newline at end of file
diff --git a/code/game/gamemodes/technomancer/assistance/assistance.dm b/code/game/gamemodes/technomancer/assistance/assistance.dm
index db9e98a266..0e550a08b2 100644
--- a/code/game/gamemodes/technomancer/assistance/assistance.dm
+++ b/code/game/gamemodes/technomancer/assistance/assistance.dm
@@ -10,90 +10,6 @@
cost = 300
obj_path = /obj/item/weapon/antag_spawner/technomancer_apprentice
-/obj/item/weapon/antag_spawner
- w_class = ITEMSIZE_TINY
- var/used = 0
- var/ghost_query_type = null
-
-/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T)
- return
-
-/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target)
- return
-
-/obj/item/weapon/antag_spawner/proc/request_player()
- if(!ghost_query_type)
- return
-
- var/datum/ghost_query/Q = new ghost_query_type()
- var/list/winner = Q.query()
- if(winner.len)
- var/mob/observer/dead/D = winner[1]
- spawn_antag(D.client, get_turf(src))
- else
- reset_search()
- return
-
-/obj/item/weapon/antag_spawner/proc/reset_search()
- return
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice
- name = "apprentice teleporter"
- desc = "A teleportation device, which will bring a less potent manipulator of space to you."
- icon = 'icons/obj/objects.dmi'
- icon_state = "oldshieldoff"
- ghost_query_type = /datum/ghost_query/apprentice
- var/searching = 0
- var/datum/effect/effect/system/spark_spread/sparks
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/New()
- ..()
- sparks = new /datum/effect/effect/system/spark_spread()
- sparks.set_up(5, 0, src)
- sparks.attach(loc)
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/Destroy()
- qdel(sparks)
- return ..()
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/attack_self(mob/user)
- user << "Teleporter attempting to lock on to your apprentice."
- request_player()
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/request_player()
- searching = 1
- icon_state = "oldshieldon"
- ..()
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/reset_search()
- searching = 0
- if(!used)
- icon_state = "oldshieldoff"
- visible_message("The teleporter failed to find the apprentice. Perhaps another attempt could be made later?")
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/spawn_antag(client/C, turf/T)
- sparks.start()
- var/mob/living/carbon/human/H = new/mob/living/carbon/human(T)
- C.prefs.copy_to(H)
- H.key = C.key
-
- H << "You are the Technomancer's apprentice! Your goal is to assist them in their mission at the [station_name()]."
- H << "Your service has not gone unrewarded, however. Studying under them, you have learned how to use a Manipulation Core \
- of your own. You also have a catalog, to purchase your own functions and equipment as you see fit."
- H << "It would be wise to speak to your master, and learn what their plans are for today."
-
- spawn(1)
- technomancers.add_antagonist(H.mind, 0, 1, 0, 0, 0)
- equip_antag(H)
- used = 1
- qdel(src)
-
-
-/obj/item/weapon/antag_spawner/technomancer_apprentice/equip_antag(mob/technomancer_mob)
- var/datum/antagonist/technomancer/antag_datum = all_antag_types[MODE_TECHNOMANCER]
- antag_datum.equip_apprentice(technomancer_mob)
-
-
/*
// For when no one wants to play support.
/datum/technomancer/assistance/golem
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index e02309abd4..d3936ca7c0 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -226,24 +226,6 @@
var/last_no_computer_message = 0
var/applies_stasis = 1
- // These items are preserved when the process() despawn proc occurs.
- var/list/preserve_items = list(
- /obj/item/weapon/hand_tele,
- /obj/item/weapon/card/id/captains_spare,
- /obj/item/device/aicard,
- /obj/item/device/paicard,
- /obj/item/weapon/gun,
- /obj/item/weapon/cell/device,
- /obj/item/ammo_magazine,
- /obj/item/ammo_casing,
- /obj/item/weapon/pinpointer,
- /obj/item/clothing/suit,
- /obj/item/clothing/shoes/magboots,
- /obj/item/blueprints,
- /obj/item/clothing/head/helmet/space,
- /obj/item/weapon/storage/internal
- )
-
/obj/machinery/cryopod/robot
name = "robotic storage unit"
desc = "A storage unit for robots."
@@ -407,12 +389,10 @@
for(var/obj/item/W in items)
- var/preserve = null
+ var/preserve = 0
- for(var/T in preserve_items)
- if(istype(W,T))
- preserve = 1
- break
+ if(W.preserve_item)
+ preserve = 1
if(istype(W,/obj/item/weapon/implant/health))
for(var/obj/machinery/computer/cloning/com in world)
diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm
index 6455fa6430..d8ad21eb21 100644
--- a/code/game/machinery/recharger.dm
+++ b/code/game/machinery/recharger.dm
@@ -120,6 +120,17 @@ obj/machinery/recharger
update_use_power(1)
return
+ if(istype(charging, /obj/item/weapon/gun/magnetic))
+ var/obj/item/weapon/gun/magnetic/M = charging
+ if(!M.cell.fully_charged())
+ icon_state = icon_state_charging
+ M.cell.give(active_power_usage*CELLRATE)
+ update_use_power(2)
+ else
+ icon_state = icon_state_charged
+ update_use_power(1)
+ return
+
if(istype(charging, /obj/item/weapon/melee/baton))
var/obj/item/weapon/melee/baton/B = charging
if(B.bcell)
@@ -226,7 +237,7 @@ obj/machinery/recharger
icon = 'icons/obj/stationobjs.dmi'
icon_state = "wrecharger0"
active_power_usage = 25000 //25 kW , It's more specialized than the standalone recharger (guns, batons, and flashlights only) so make it more powerful
- allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device)
+ allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/gun/magnetic, /obj/item/weapon/melee/baton, /obj/item/device/flashlight, /obj/item/weapon/cell/device)
icon_state_charged = "wrecharger2"
icon_state_charging = "wrecharger1"
icon_state_idle = "wrecharger0"
diff --git a/code/game/objects/effects/decals/Cleanable/fuel.dm b/code/game/objects/effects/decals/Cleanable/fuel.dm
index 85e68c31af..d9e9baabf6 100644
--- a/code/game/objects/effects/decals/Cleanable/fuel.dm
+++ b/code/game/objects/effects/decals/Cleanable/fuel.dm
@@ -52,11 +52,17 @@
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/New(newLoc, amt = 1, d = 0)
set_dir(d) //Setting this direction means you won't get torched by your own flamethrower.
+ if(istype(newLoc, /turf/simulated))
+ var/turf/simulated/T = newLoc
+ T.hotspot_expose((T20C*2) + 380,500) //Ignite the fuel.
. = ..()
/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/Spread()
//The spread for flamethrower fuel is much more precise, to create a wide fire pattern.
- if(amount < 0.1) return
+ if(amount <= 0.1)
+ if(amount < 0.025) //Hopefully stops fuel spreading into unburnable puddles.
+ qdel(src)
+ return
var/turf/simulated/S = loc
if(!istype(S)) return
@@ -65,7 +71,12 @@
if(locate(/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel) in O)
continue
if(O.CanPass(null, S, 0, 0) && S.CanPass(null, O, 0, 0))
- new/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(O,amount*0.25,d)
+ var/new_pool_amount = amount * 0.25
+ if(new_pool_amount > 0.1)
+ var/obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel/F = new(O, new_pool_amount, d)
+ if(F.amount < 0.025) //Safety.
+ qdel(F)
+ return
O.hotspot_expose((T20C*2) + 380,500) //Light flamethrower fuel on fire immediately.
amount *= 0.25
diff --git a/code/game/objects/items/antag_spawners.dm b/code/game/objects/items/antag_spawners.dm
new file mode 100644
index 0000000000..ce358bc1ee
--- /dev/null
+++ b/code/game/objects/items/antag_spawners.dm
@@ -0,0 +1,135 @@
+/obj/item/weapon/antag_spawner
+ w_class = ITEMSIZE_TINY
+ var/used = 0
+ var/ghost_query_type = null
+ var/searching = FALSE
+ var/datum/effect/effect/system/spark_spread/sparks
+
+/obj/item/weapon/antag_spawner/New()
+ ..()
+ sparks = new /datum/effect/effect/system/spark_spread()
+ sparks.set_up(5, 0, src)
+ sparks.attach(loc)
+
+/obj/item/weapon/antag_spawner/Destroy()
+ qdel(sparks)
+ return ..()
+
+/obj/item/weapon/antag_spawner/proc/spawn_antag(client/C, turf/T)
+ return
+
+/obj/item/weapon/antag_spawner/proc/equip_antag(mob/target)
+ return
+
+/obj/item/weapon/antag_spawner/proc/request_player()
+ if(!ghost_query_type)
+ return
+ if(searching)
+ return // Already searching.
+ searching = TRUE
+
+ var/datum/ghost_query/Q = new ghost_query_type()
+ var/list/winner = Q.query()
+ if(winner.len)
+ var/mob/observer/dead/D = winner[1]
+ spawn_antag(D.client, get_turf(src))
+ else
+ reset_search()
+ return
+
+/obj/item/weapon/antag_spawner/proc/reset_search()
+ searching = FALSE
+ return
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice
+ name = "apprentice teleporter"
+ desc = "A teleportation device, which will bring a less potent manipulator of space to you."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "oldshieldoff"
+ ghost_query_type = /datum/ghost_query/apprentice
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice/attack_self(mob/user)
+ user << "Teleporter attempting to lock on to your apprentice."
+ request_player()
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice/request_player()
+ icon_state = "oldshieldon"
+ ..()
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice/reset_search()
+ ..()
+ if(!used)
+ icon_state = "oldshieldoff"
+ visible_message("The teleporter failed to find the apprentice. Perhaps another attempt could be made later?")
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice/spawn_antag(client/C, turf/T)
+ sparks.start()
+ var/mob/living/carbon/human/H = new/mob/living/carbon/human(T)
+ C.prefs.copy_to(H)
+ H.key = C.key
+
+ H << "You are the Technomancer's apprentice! Your goal is to assist them in their mission at the [station_name()]."
+ H << "Your service has not gone unrewarded, however. Studying under them, you have learned how to use a Manipulation Core \
+ of your own. You also have a catalog, to purchase your own functions and equipment as you see fit."
+ H << "It would be wise to speak to your master, and learn what their plans are for today."
+
+ spawn(1)
+ technomancers.add_antagonist(H.mind, 0, 1, 0, 0, 0)
+ equip_antag(H)
+ used = 1
+ qdel(src)
+
+/obj/item/weapon/antag_spawner/technomancer_apprentice/equip_antag(mob/technomancer_mob)
+ var/datum/antagonist/technomancer/antag_datum = all_antag_types[MODE_TECHNOMANCER]
+ antag_datum.equip_apprentice(technomancer_mob)
+
+
+
+
+/obj/item/weapon/antag_spawner/syndicate_drone
+ name = "drone teleporter"
+ desc = "A teleportation device, which will bring a powerful and loyal drone to you."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "oldshieldoff"
+ ghost_query_type = /datum/ghost_query/syndicate_drone
+ var/drone_type = null
+
+/obj/item/weapon/antag_spawner/syndicate_drone/attack_self(mob/user)
+ to_chat(user, "Teleporter attempting to lock on to an available unit.")
+ request_player()
+
+/obj/item/weapon/antag_spawner/syndicate_drone/request_player()
+ icon_state = "oldshieldon"
+ ..()
+
+/obj/item/weapon/antag_spawner/syndicate_drone/reset_search()
+ ..()
+ if(!used)
+ icon_state = "oldshieldoff"
+ visible_message("The teleporter failed to find any available. Perhaps another attempt could be made later?")
+
+/obj/item/weapon/antag_spawner/syndicate_drone/spawn_antag(client/C, turf/T)
+ sparks.start()
+ var/mob/living/silicon/robot/R = new drone_type(T)
+
+ // Put this text here before ckey change so that their laws are shown below it, since borg login() shows it.
+ to_chat(C, "You are a Mercenary Drone, activated to serve your team.")
+ to_chat(C, "Be sure to examine your currently loaded lawset closely. It would be wise \
+ to speak with your team, and learn what their plan is for today.")
+
+ R.key = C.key
+// R.Namepick() // Apparnetly making someone a merc lets them pick a name, so this isn't needed.
+
+ spawn(1)
+ mercs.add_antagonist(R.mind, FALSE, TRUE, FALSE, FALSE, FALSE)
+ //add_antagonist(var/datum/mind/player, var/ignore_role, var/do_not_equip, var/move_to_spawn, var/do_not_announce, var/preserve_appearance)
+ qdel(src)
+
+/obj/item/weapon/antag_spawner/syndicate_drone/protector
+ drone_type = /mob/living/silicon/robot/syndicate/protector
+
+/obj/item/weapon/antag_spawner/syndicate_drone/combat_medic
+ drone_type = /mob/living/silicon/robot/syndicate/combat_medic
+
+/obj/item/weapon/antag_spawner/syndicate_drone/mechanist
+ drone_type = /mob/living/silicon/robot/syndicate/mechanist
\ No newline at end of file
diff --git a/code/game/objects/items/blueprints.dm b/code/game/objects/items/blueprints.dm
index 0577fee4a7..56a0a6cbc6 100644
--- a/code/game/objects/items/blueprints.dm
+++ b/code/game/objects/items/blueprints.dm
@@ -4,6 +4,7 @@
icon = 'icons/obj/items.dmi'
icon_state = "blueprints"
attack_verb = list("attacked", "bapped", "hit")
+ preserve_item = 1
var/const/AREA_ERRNONE = 0
var/const/AREA_STATION = 1
var/const/AREA_SPACE = 2
diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm
index 5a7a028054..ab893415ac 100644
--- a/code/game/objects/items/devices/aicard.dm
+++ b/code/game/objects/items/devices/aicard.dm
@@ -7,6 +7,7 @@
w_class = ITEMSIZE_NORMAL
slot_flags = SLOT_BELT
show_messages = 0
+ preserve_item = 1
var/flush = null
origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
diff --git a/code/game/objects/items/devices/defib.dm b/code/game/objects/items/devices/defib.dm
index b9b8af0c0d..decb40d807 100644
--- a/code/game/objects/items/devices/defib.dm
+++ b/code/game/objects/items/devices/defib.dm
@@ -11,6 +11,7 @@
slot_flags = SLOT_BACK
force = 5
throwforce = 6
+ preserve_item = 1
w_class = ITEMSIZE_LARGE
origin_tech = list(TECH_BIO = 4, TECH_POWER = 2)
action_button_name = "Remove/Replace Paddles"
@@ -542,6 +543,13 @@
var/mob/living/silicon/robot/R = src.loc
return (R.cell && R.cell.checked_use(charge_amt))
+/obj/item/weapon/shockpaddles/robot/combat
+ name = "combat defibrillator paddles"
+ desc = "A pair of advanced shockpaddles powered by a robot's internal power cell, able to penetrate thick clothing. This version \
+ appears to be optimized for combat situations, foregoing the safety inhabitors in favor of a faster charging time."
+ safety = 0
+ chargetime = (1 SECONDS)
+
/*
Shockpaddles that are linked to a base unit
*/
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 8e1803ad40..2cf67da30c 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -7,6 +7,7 @@
slot_flags = SLOT_BELT
origin_tech = list(TECH_DATA = 2)
show_messages = 0
+ preserve_item = 1
var/obj/item/device/radio/radio
var/looking_for_personality = 0
diff --git a/code/game/objects/items/robot/robot_parts.dm b/code/game/objects/items/robot/robot_parts.dm
index f113e5f153..9a56cf94a7 100644
--- a/code/game/objects/items/robot/robot_parts.dm
+++ b/code/game/objects/items/robot/robot_parts.dm
@@ -177,8 +177,9 @@
if(M.brainmob.mind)
for(var/mob/observer/dead/G in player_list)
if(G.can_reenter_corpse && G.mind == M.brainmob.mind)
- ghost_can_reenter = 1
- break
+ ghost_can_reenter = 1 //May come in use again at another point.
+ to_chat(user, "\The [W] is completely unresponsive; though it may be able to auto-resuscitate.") //Jamming a ghosted brain into a borg is likely detrimental, and may result in some problems.
+ return
if(!ghost_can_reenter)
user << "\The [W] is completely unresponsive; there's no point."
return
diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm
index 60a847a4d6..5c0f43e139 100755
--- a/code/game/objects/items/weapons/AI_modules.dm
+++ b/code/game/objects/items/weapons/AI_modules.dm
@@ -18,6 +18,7 @@ AI MODULES
throw_speed = 3
throw_range = 15
origin_tech = list(TECH_DATA = 3)
+ preserve_item = 1
var/datum/ai_laws/laws = null
/obj/item/weapon/aiModule/proc/install(var/atom/movable/AM, var/mob/living/user)
diff --git a/code/game/objects/items/weapons/RCD.dm b/code/game/objects/items/weapons/RCD.dm
index d79f584e2f..df744d1df3 100644
--- a/code/game/objects/items/weapons/RCD.dm
+++ b/code/game/objects/items/weapons/RCD.dm
@@ -15,6 +15,7 @@
w_class = ITEMSIZE_NORMAL
origin_tech = list(TECH_ENGINEERING = 4, TECH_MATERIAL = 2)
matter = list(DEFAULT_WALL_MATERIAL = 50000)
+ preserve_item = 1
var/datum/effect/effect/system/spark_spread/spark_system
var/stored_matter = 0
var/max_stored_matter = 30
@@ -178,6 +179,9 @@
/obj/item/weapon/rcd/borg
canRwall = 1
+/obj/item/weapon/rcd/borg/lesser
+ canRwall = FALSE
+
/obj/item/weapon/rcd/borg/useResource(var/amount, var/mob/user)
if(isrobot(user))
var/mob/living/silicon/robot/R = user
diff --git a/code/game/objects/items/weapons/id cards/station_ids.dm b/code/game/objects/items/weapons/id cards/station_ids.dm
index 68d969a6b5..21121215a9 100644
--- a/code/game/objects/items/weapons/id cards/station_ids.dm
+++ b/code/game/objects/items/weapons/id cards/station_ids.dm
@@ -138,6 +138,7 @@
desc = "A golden card which shows power and might."
icon_state = "gold"
item_state = "gold_id"
+ preserve_item = 1
/obj/item/weapon/card/id/gold/captain/New()
assignment = "Colony Director"
@@ -145,18 +146,12 @@
access = get_all_station_access()
..()
-/obj/item/weapon/card/id/captains_spare
+/obj/item/weapon/card/id/gold/captain/spare
name = "colony director's spare ID"
desc = "The spare ID of the High Lord himself."
- icon_state = "gold"
- item_state = "gold_id"
registered_name = "Colony Director"
assignment = "Colony Director"
-/obj/item/weapon/card/id/captains_spare/New()
- access = get_all_station_access()
- ..()
-
/obj/item/weapon/card/id/synthetic
name = "\improper Synthetic ID"
desc = "Access module for NanoTrasen Synthetics"
@@ -171,7 +166,7 @@
/obj/item/weapon/card/id/centcom
name = "\improper CentCom. ID"
desc = "An ID straight from Central Command."
- icon_state = "centcom"
+ icon_state = "nanotrasen"
registered_name = "Central Command"
assignment = "General"
@@ -186,6 +181,7 @@
/obj/item/weapon/card/id/centcom/ERT
name = "\improper Emergency Response Team ID"
assignment = "Emergency Response Team"
+ icon_state = "centcom"
/obj/item/weapon/card/id/centcom/ERT/New()
..()
diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm
index 3a2373c696..2b63fb79bd 100644
--- a/code/game/objects/items/weapons/power_cells.dm
+++ b/code/game/objects/items/weapons/power_cells.dm
@@ -34,6 +34,7 @@
throw_range = 7
maxcharge = 480
matter = list("metal" = 350, "glass" = 50)
+ preserve_item = 1
/obj/item/weapon/cell/device/weapon
name = "weapon power cell"
diff --git a/code/game/objects/items/weapons/shields.dm b/code/game/objects/items/weapons/shields.dm
index 5e3c96c8a0..814592a890 100644
--- a/code/game/objects/items/weapons/shields.dm
+++ b/code/game/objects/items/weapons/shields.dm
@@ -32,6 +32,7 @@
/obj/item/weapon/shield
name = "shield"
var/base_block_chance = 50
+ preserve_item = 1
item_icons = list(
slot_l_hand_str = 'icons/mob/items/lefthand_melee.dmi',
slot_r_hand_str = 'icons/mob/items/righthand_melee.dmi',
diff --git a/code/game/objects/items/weapons/storage/internal.dm b/code/game/objects/items/weapons/storage/internal.dm
index 1f1a5f6963..6fbbedf069 100644
--- a/code/game/objects/items/weapons/storage/internal.dm
+++ b/code/game/objects/items/weapons/storage/internal.dm
@@ -1,6 +1,7 @@
//A storage item intended to be used by other items to provide storage functionality.
//Types that use this should consider overriding emp_act() and hear_talk(), unless they shield their contents somehow.
/obj/item/weapon/storage/internal
+ preserve_item = 1
var/obj/item/master_item
/obj/item/weapon/storage/internal/New(obj/item/MI)
diff --git a/code/game/objects/items/weapons/storage/lockbox.dm b/code/game/objects/items/weapons/storage/lockbox.dm
index 770ecd169b..e52ad4d812 100644
--- a/code/game/objects/items/weapons/storage/lockbox.dm
+++ b/code/game/objects/items/weapons/storage/lockbox.dm
@@ -9,6 +9,7 @@
max_w_class = ITEMSIZE_NORMAL
max_storage_space = ITEMSIZE_COST_NORMAL * 4 //The sum of the w_classes of all the items in this storage item.
req_access = list(access_armory)
+ preserve_item = 1
var/locked = 1
var/broken = 0
var/icon_locked = "lockbox+l"
diff --git a/code/game/objects/items/weapons/storage/uplink_kits.dm b/code/game/objects/items/weapons/storage/uplink_kits.dm
index 0c7ec20167..cd3aca0f37 100644
--- a/code/game/objects/items/weapons/storage/uplink_kits.dm
+++ b/code/game/objects/items/weapons/storage/uplink_kits.dm
@@ -295,3 +295,22 @@
for(var/i = 1 to 4)
new /obj/item/ammo_casing/a145(src)
+
+/obj/item/weapon/storage/secure/briefcase/fuelrod
+ name = "heavy briefcase"
+ desc = "A heavy, locked briefcase."
+ description_fluff = "The container, upon opening, looks to have a few oddly shaped indentations in its packing."
+ description_antag = "This case will likely contain a charged fuel rod gun, and a few fuel rods to go with it. It can only hold the fuel rod gun, fuel rods, batteries, a screwdriver, and stock machine parts."
+ force = 12 //Anti-rad lined i.e. Lead, probably gonna hurt a bit if you get bashed with it.
+ can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/screwdriver)
+
+
+/obj/item/weapon/storage/secure/briefcase/fuelrod/New()
+ ..()
+ new /obj/item/weapon/gun/magnetic/fuelrod(src)
+ new /obj/item/weapon/fuel_assembly/deuterium(src)
+ new /obj/item/weapon/fuel_assembly/deuterium(src)
+ new /obj/item/weapon/fuel_assembly/tritium(src)
+ new /obj/item/weapon/fuel_assembly/tritium(src)
+ new /obj/item/weapon/fuel_assembly/phoron(src)
+ new /obj/item/weapon/screwdriver(src)
diff --git a/code/game/objects/items/weapons/teleportation.dm b/code/game/objects/items/weapons/teleportation.dm
index e0e11a6285..b991db0510 100644
--- a/code/game/objects/items/weapons/teleportation.dm
+++ b/code/game/objects/items/weapons/teleportation.dm
@@ -129,6 +129,7 @@ Frequency:
throw_range = 5
origin_tech = list(TECH_MAGNET = 1, TECH_BLUESPACE = 3)
matter = list(DEFAULT_WALL_MATERIAL = 10000)
+ preserve_item = 1
/obj/item/weapon/hand_tele/attack_self(mob/user as mob)
var/turf/current_location = get_turf(user)//What turf is the user on?
diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm
index a3f77757f2..84f9f88602 100644
--- a/code/game/objects/objs.dm
+++ b/code/game/objects/objs.dm
@@ -12,6 +12,7 @@
var/damtype = "brute"
var/armor_penetration = 0
var/show_messages
+ var/preserve_item = 0 //whether this object is preserved when its owner goes into cryo-storage, gateway, etc
/obj/Destroy()
processing_objects -= src
diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm
index f79b6be0ae..c15b454878 100644
--- a/code/game/objects/random/random.dm
+++ b/code/game/objects/random/random.dm
@@ -973,7 +973,7 @@ var/list/multi_point_spawns
/obj/random_multi/single_item/captains_spare_id
name = "Multi Point - Captain's Spare"
id = "Captain's spare id"
- item_path = /obj/item/weapon/card/id/captains_spare
+ item_path = /obj/item/weapon/card/id/gold/captain/spare
//Multiple Object Spawn
diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm
index 8b50dfb095..06402a90a4 100644
--- a/code/game/verbs/who.dm
+++ b/code/game/verbs/who.dm
@@ -70,16 +70,16 @@
var/msg = ""
var/modmsg = ""
var/devmsg = ""
- var/mentmsg = ""
+ var/eventMmsg = ""
var/num_mods_online = 0
var/num_admins_online = 0
var/num_devs_online = 0
- var/num_mentors_online = 0
+ var/num_event_managers_online = 0
if(holder)
for(var/client/C in admins)
- if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights)) //Used to determine who shows up in admin rows
+ if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights)) //Used to determine who shows up in admin rows
- if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Mentors can't see stealthmins
+ if(C.holder.fakekey && (!R_ADMIN & holder.rights && !R_MOD & holder.rights)) //Event Managerss can't see stealthmins
continue
msg += "\t[C] is a [C.holder.rank]"
@@ -102,7 +102,7 @@
msg += "\n"
num_admins_online++
- else if(R_MOD & C.holder.rights) //Who shows up in mod/mentor rows.
+ else if(R_MOD & C.holder.rights) //Who shows up in mod rows.
modmsg += "\t[C] is a [C.holder.rank]"
if(isobserver(C.mob))
@@ -137,26 +137,26 @@
devmsg += "\n"
num_devs_online++
- else if(R_MENTOR & C.holder.rights)
- mentmsg += "\t[C] is a [C.holder.rank]"
+ else if(R_EVENT & C.holder.rights)
+ eventMmsg += "\t[C] is a [C.holder.rank]"
if(isobserver(C.mob))
- mentmsg += " - Observing"
+ eventMmsg += " - Observing"
else if(istype(C.mob,/mob/new_player))
- mentmsg += " - Lobby"
+ eventMmsg += " - Lobby"
else
- mentmsg += " - Playing"
+ eventMmsg += " - Playing"
if(C.is_afk())
var/seconds = C.last_activity_seconds()
- mentmsg += " (AFK - "
- mentmsg += "[round(seconds / 60)] minutes, "
- mentmsg += "[seconds % 60] seconds)"
- mentmsg += "\n"
- num_mentors_online++
+ eventMmsg += " (AFK - "
+ eventMmsg += "[round(seconds / 60)] minutes, "
+ eventMmsg += "[seconds % 60] seconds)"
+ eventMmsg += "\n"
+ num_event_managers_online++
else
for(var/client/C in admins)
- if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_MENTOR & C.holder.rights))
+ if(R_ADMIN & C.holder.rights || (!R_MOD & C.holder.rights && !R_EVENT & C.holder.rights))
if(!C.holder.fakekey)
msg += "\t[C] is a [C.holder.rank]\n"
num_admins_online++
@@ -166,9 +166,9 @@
else if (R_SERVER & C.holder.rights)
devmsg += "\t[C] is a [C.holder.rank]\n"
num_devs_online++
- else if (R_MENTOR & C.holder.rights)
- mentmsg += "\t[C] is a [C.holder.rank]\n"
- num_mentors_online++
+ else if (R_EVENT & C.holder.rights)
+ eventMmsg += "\t[C] is a [C.holder.rank]\n"
+ num_event_managers_online++
if(config.admin_irc)
src << "Adminhelps are also sent to IRC. If no admins are available in game try anyway and an admin on IRC may see it and respond."
@@ -180,7 +180,7 @@
if(config.show_devs)
msg += "\n Current Developers ([num_devs_online]):\n" + devmsg
- if(config.show_mentors)
- msg += "\n Current Mentors ([num_mentors_online]):\n" + mentmsg
+ if(config.show_event_managers)
+ msg += "\n Current Event Managers ([num_event_managers_online]):\n" + eventMmsg
src << msg
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 9e4a5a6344..121e355d22 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -860,7 +860,7 @@ proc/admin_notice(var/message, var/rights)
set desc="Delay the game start/end"
set name="Delay"
- if(!check_rights(R_SERVER)) return
+ if(!check_rights(R_SERVER|R_EVENT)) return
if (!ticker || ticker.current_state != GAME_STATE_PREGAME)
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
@@ -1225,16 +1225,16 @@ proc/admin_notice(var/message, var/rights)
/*
- helper proc to test if someone is a mentor or not. Got tired of writing this same check all over the place.
+ helper proc to test if someone is an event manager or not. Got tired of writing this same check all over the place.
*/
-/proc/is_mentor(client/C)
+/proc/is_eventM(client/C)
if(!istype(C))
return 0
if(!C.holder)
return 0
- if(C.holder.rights == R_MENTOR)
+ if(C.holder.rights == R_EVENT)
return 1
return 0
@@ -1266,7 +1266,7 @@ proc/admin_notice(var/message, var/rights)
var/ref_mob = "\ref[M]"
return "[key_name(C, link, name, highlight_special)](VV)([admin_jump_link(M, src)]) (TAKE)"
- if(4) //Mentors
+ if(4) //Event Managers
var/ref_mob = "\ref[M]"
return "[key_name(C, link, name, highlight_special)] (?) (PP) (VV) (SM) ([admin_jump_link(M, src)]) (TAKE)"
diff --git a/code/modules/admin/admin_ranks.dm b/code/modules/admin/admin_ranks.dm
index 3652237454..12c00aa708 100644
--- a/code/modules/admin/admin_ranks.dm
+++ b/code/modules/admin/admin_ranks.dm
@@ -37,11 +37,11 @@ var/list/admin_ranks = list() //list of all ranks with associated rights
if("stealth") rights |= R_STEALTH
if("rejuv","rejuvinate") rights |= R_REJUVINATE
if("varedit") rights |= R_VAREDIT
- if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_MENTOR)
+ if("everything","host","all") rights |= (R_HOST | R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD| R_EVENT)
if("sound","sounds") rights |= R_SOUNDS
if("spawn","create") rights |= R_SPAWN
if("mod") rights |= R_MOD
- if("mentor") rights |= R_MENTOR
+ if("event") rights |= R_EVENT
admin_ranks[rank] = rights
previous_rights = rights
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 761193eb33..2503c73abb 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -8,7 +8,7 @@ var/list/admin_verbs_default = list(
/client/proc/debug_variables, //allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify,
// /client/proc/check_antagonists, //shows all antags,
// /client/proc/cmd_mod_say,
- /client/proc/cmd_mentor_check_new_players,
+ /client/proc/cmd_eventM_check_new_players,
// /client/proc/deadchat //toggles deadchat on/off,
// /client/proc/toggle_ahelp_sound,
)
@@ -186,7 +186,7 @@ var/list/admin_verbs_debug = list(
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/reload_admins,
- /client/proc/reload_mentors,
+ /client/proc/reload_eventMs,
/client/proc/restart_controller,
/datum/admins/proc/restart,
/client/proc/print_random_map,
@@ -327,19 +327,53 @@ var/list/admin_verbs_mod = list(
/client/proc/getserverlog, //allows us to fetch server logs (diary) for other days,
/datum/admins/proc/view_txt_log, //shows the server log (diary) for today,
/datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently,
-
-
)
-var/list/admin_verbs_mentor = list(
+var/list/admin_verbs_event_manager = list(
/client/proc/cmd_admin_pm_context,
/client/proc/cmd_admin_pm_panel,
/datum/admins/proc/PlayerNotes,
/client/proc/admin_ghost,
/client/proc/cmd_mod_say,
/datum/admins/proc/show_player_info,
-// /client/proc/dsay,
- /client/proc/cmd_admin_subtle_message
+ /client/proc/dsay,
+ /client/proc/cmd_admin_subtle_message,
+ /client/proc/debug_variables,
+ /client/proc/check_antagonists,
+ /client/proc/aooc,
+ /datum/admins/proc/paralyze_mob,
+ /client/proc/cmd_admin_direct_narrate,
+ /client/proc/allow_character_respawn,
+ /datum/admins/proc/sendFax,
+ /client/proc/respawn_character,
+ /proc/possess,
+ /proc/release,
+ /client/proc/callproc,
+ /client/proc/callproc_target,
+ /client/proc/debug_controller,
+ /client/proc/show_gm_status,
+ /datum/admins/proc/change_weather,
+ /datum/admins/proc/change_time,
+ /client/proc/admin_give_modifier,
+ /client/proc/Jump,
+ /client/proc/jumptomob,
+ /client/proc/jumptocoord,
+ /client/proc/cmd_admin_delete,
+ /datum/admins/proc/delay,
+ /client/proc/Set_Holiday,
+ /client/proc/make_sound,
+ /client/proc/toggle_random_events,
+ /datum/admins/proc/cmd_admin_dress,
+ /client/proc/cmd_admin_gib_self,
+ /client/proc/drop_bomb,
+ /client/proc/cmd_admin_add_freeform_ai_law,
+ /client/proc/cmd_admin_add_random_ai_law,
+ /client/proc/make_sound,
+ /client/proc/toggle_random_events,
+ /client/proc/editappear,
+ /client/proc/roll_dices,
+ /datum/admins/proc/call_supply_drop,
+ /datum/admins/proc/call_drop_pod
)
/client/proc/add_admin_verbs()
@@ -361,7 +395,7 @@ var/list/admin_verbs_mentor = list(
if(holder.rights & R_SOUNDS) verbs += admin_verbs_sounds
if(holder.rights & R_SPAWN) verbs += admin_verbs_spawn
if(holder.rights & R_MOD) verbs += admin_verbs_mod
- if(holder.rights & R_MENTOR) verbs += admin_verbs_mentor
+ if(holder.rights & R_EVENT) verbs += admin_verbs_event_manager
/client/proc/remove_admin_verbs()
verbs.Remove(
@@ -424,12 +458,10 @@ var/list/admin_verbs_mentor = list(
if(istype(mob,/mob/observer/dead))
//re-enter
var/mob/observer/dead/ghost = mob
- if(!is_mentor(usr.client))
- ghost.can_reenter_corpse = 1
if(ghost.can_reenter_corpse)
ghost.reenter_corpse()
else
- ghost << "Error: Aghost: Can't reenter corpse, mentors that use adminHUD while aghosting are not permitted to enter their corpse again"
+ ghost << "Error: Aghost: Can't reenter corpse, event managers that use adminHUD while aghosting are not permitted to enter their corpse again"
return
feedback_add_details("admin_verb","P") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm
index ece5f068d7..1531790268 100644
--- a/code/modules/admin/player_panel.dm
+++ b/code/modules/admin/player_panel.dm
@@ -367,7 +367,7 @@
if(usr.client)
var/client/C = usr.client
- if(is_mentor(C))
+ if(is_eventM(C))
dat += {"
N/A | "}
else
switch(is_special_character(M))
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 350bfe9a24..71069be22e 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -237,7 +237,7 @@
href_list["secretsadmin"] = "check_antagonist"
else if(href_list["delay_round_end"])
- if(!check_rights(R_SERVER)) return
+ if(!check_rights(R_SERVER|R_EVENT)) return
ticker.delay_end = !ticker.delay_end
log_admin("[key_name(usr)] [ticker.delay_end ? "delayed the round end" : "has made the round end normally"].")
@@ -1194,7 +1194,7 @@
show_player_panel(M)
else if(href_list["adminplayerobservejump"])
- if(!check_rights(R_MENTOR|R_MOD|R_ADMIN|R_SERVER)) return
+ if(!check_rights(R_EVENT|R_MOD|R_ADMIN|R_SERVER|R_EVENT)) return
var/mob/M = locate(href_list["adminplayerobservejump"])
@@ -1204,7 +1204,7 @@
C.jumptomob(M)
else if(href_list["adminplayerobservefollow"])
- if(!check_rights(R_MENTOR|R_MOD|R_ADMIN|R_SERVER))
+ if(!check_rights(R_EVENT|R_MOD|R_ADMIN|R_SERVER|R_EVENT))
return
var/mob/M = locate(href_list["adminplayerobservefollow"])
@@ -1224,14 +1224,14 @@
if(ismob(M))
var/take_msg = "ADMINHELP: [key_name(usr.client)] is attending to [key_name(M)]'s adminhelp, please don't dogpile them."
for(var/client/X in admins)
- if((R_ADMIN|R_MOD|R_MENTOR) & X.holder.rights)
+ if((R_ADMIN|R_MOD|R_EVENT) & X.holder.rights)
to_chat(X, take_msg)
to_chat(M, "Your adminhelp is being attended to by [usr.client]. Thanks for your patience!")
else
to_chat(usr, "Unable to locate mob.")
else if(href_list["adminplayerobservecoodjump"])
- if(!check_rights(R_ADMIN|R_SERVER|R_MOD)) return
+ if(!check_rights(R_ADMIN|R_SERVER|R_MOD|R_EVENT)) return
var/x = text2num(href_list["X"])
var/y = text2num(href_list["Y"])
@@ -1843,7 +1843,7 @@
vsc.SetDefault(usr)
else if(href_list["toglang"])
- if(check_rights(R_SPAWN))
+ if(check_rights(R_SPAWN|R_EVENT))
var/mob/M = locate(href_list["toglang"])
if(!istype(M))
usr << "[M] is illegal type, must be /mob!"
diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm
index 5f3206b6df..766473e010 100644
--- a/code/modules/admin/verbs/adminhelp.dm
+++ b/code/modules/admin/verbs/adminhelp.dm
@@ -88,24 +88,20 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey","
if(ai_found)
ai_cl = " (CL)"
- //Options bar: mob, details ( admin = 2, dev = 3, mentor = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so),
+ //Options bar: mob, details ( admin = 2, dev = 3, event manager = 4, character name (0 = just ckey, 1 = ckey and character name), link? (0 no don't make it a link, 1 do so),
// highlight special roles (0 = everyone has same looking name, 1 = antags / special roles get a golden name)
- var/mentor_msg = "Request for Help: [get_options_bar(mob, 4, 1, 1, 0)][ai_cl]: [msg]"
msg = "Request for Help: [get_options_bar(mob, 2, 1, 1)][ai_cl] [msg]"
var/admin_number_afk = 0
for(var/client/X in admins)
- if((R_ADMIN|R_MOD|R_MENTOR|R_SERVER) & X.holder.rights)
+ if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights)
if(X.is_afk())
admin_number_afk++
+ X << msg
if(X.is_preference_enabled(/datum/client_preference/holder/play_adminhelp_ping))
X << 'sound/effects/adminhelp.ogg'
- 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
//show it to the person adminhelping too
src << "PM to-Staff : [original_msg]"
diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm
index bcb87f06d8..dcaa745485 100644
--- a/code/modules/admin/verbs/adminpm.dm
+++ b/code/modules/admin/verbs/adminpm.dm
@@ -112,7 +112,7 @@
//check client/X is an admin and isn't the sender or recipient
if(X == C || X == src)
continue
- if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_MENTOR))
+ if(X.key != key && X.key != C.key && (X.holder.rights & R_ADMIN|R_MOD|R_EVENT))
X << "" + create_text_tag("pm_other", "PM:", X) + " [key_name(src, X, 0)] to [key_name(C, X, 0)]: [msg]"
/client/proc/cmd_admin_irc_pm(sender)
diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm
index b4e60fbd62..63209f84b4 100644
--- a/code/modules/admin/verbs/adminsay.dm
+++ b/code/modules/admin/verbs/adminsay.dm
@@ -23,7 +23,7 @@
set name = "Msay"
set hidden = 1
- if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER))
+ if(!check_rights(R_ADMIN|R_MOD|R_SERVER))
return
msg = sanitize(msg)
@@ -45,7 +45,7 @@
set name = "Esay"
set hidden = 1
- if(!check_rights(R_ADMIN|R_MOD|R_MENTOR|R_SERVER))
+ if(!check_rights(R_ADMIN|R_MOD|R_EVENT|R_SERVER))
return
msg = sanitize(msg)
diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm
index 24f5669618..981d5c7b7b 100644
--- a/code/modules/admin/verbs/debug.dm
+++ b/code/modules/admin/verbs/debug.dm
@@ -408,10 +408,10 @@
feedback_add_details("admin_verb","SEQ")
dressup_human(H, outfit, 1)
-/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit, var/undress = 1)
+/proc/dressup_human(var/mob/living/carbon/human/H, var/decl/hierarchy/outfit/outfit)
if(!H || !outfit)
return
- if(undress)
+ if(outfit.undress)
H.delete_inventory()
outfit.equip(H)
log_and_message_admins("changed the equipment of [key_name(H)] to [outfit.name].")
diff --git a/code/modules/admin/verbs/diagnostics.dm b/code/modules/admin/verbs/diagnostics.dm
index b78b473e65..595675ea80 100644
--- a/code/modules/admin/verbs/diagnostics.dm
+++ b/code/modules/admin/verbs/diagnostics.dm
@@ -108,13 +108,13 @@
load_admins()
feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/client/proc/reload_mentors()
- set name = "Reload Mentors"
+/client/proc/reload_eventMs()
+ set name = "Reload Event Managers"
set category = "Debug"
if(!check_rights(R_SERVER)) return
- message_admins("[usr] manually reloaded Mentors")
+ message_admins("[usr] manually reloaded Event Managers")
world.load_mods()
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm
index fcf4a5db0c..c14c74edd1 100644
--- a/code/modules/admin/verbs/randomverbs.dm
+++ b/code/modules/admin/verbs/randomverbs.dm
@@ -65,7 +65,7 @@
message_admins("SubtleMessage: [key_name_admin(usr)] -> [key_name_admin(M)] : [msg]", 1)
feedback_add_details("admin_verb","SMS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/client/proc/cmd_mentor_check_new_players() //Allows mentors / admins to determine who the newer players are.
+/client/proc/cmd_eventM_check_new_players() //Allows event managers / admins to determine who the newer players are.
set category = "Admin"
set name = "Check new Players"
if(!holder)
@@ -82,7 +82,7 @@
var/msg = ""
var/highlight_special_characters = 1
- if(is_mentor(usr.client))
+ if(is_eventM(usr.client))
highlight_special_characters = 0
for(var/client/C in clients)
@@ -610,7 +610,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Explosion"
- if(!check_rights(R_DEBUG|R_FUN)) return
+ if(!check_rights(R_DEBUG|R_FUN|R_EVENT)) return
var/devastation = input("Range of total devastation. -1 to none", text("Input")) as num|null
if(devastation == null) return
@@ -638,7 +638,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "EM Pulse"
- if(!check_rights(R_DEBUG|R_FUN)) return
+ if(!check_rights(R_DEBUG|R_FUN|R_EVENT)) return
var/heavy = input("Range of heavy pulse.", text("Input")) as num|null
if(heavy == null) return
@@ -664,7 +664,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Special Verbs"
set name = "Gib"
- if(!check_rights(R_ADMIN|R_FUN)) return
+ if(!check_rights(R_ADMIN|R_FUN|R_EVENT)) return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
@@ -820,7 +820,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if ((!( ticker ) || !emergency_shuttle.location()))
return
- if(!check_rights(R_ADMIN)) return
+ if(!check_rights(R_ADMIN|R_EVENT)) return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
@@ -849,7 +849,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set category = "Admin"
set name = "Cancel Shuttle"
- if(!check_rights(R_ADMIN)) return
+ if(!check_rights(R_ADMIN|R_EVENT)) return
if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return
@@ -870,7 +870,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
if (!ticker)
return
- if(!check_rights(R_ADMIN)) return
+ if(!check_rights(R_ADMIN|R_EVENT)) return
emergency_shuttle.deny_shuttle = !emergency_shuttle.deny_shuttle
@@ -926,7 +926,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
set name = "Toggle random events on/off"
set desc = "Toggles random events such as meteors, black holes, blob (but not space dust) on/off"
- if(!check_rights(R_SERVER)) return
+ if(!check_rights(R_SERVER|R_EVENT)) return
if(!config.allow_random_events)
config.allow_random_events = 1
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index e8ec514e56..33dccdaf2e 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -548,6 +548,7 @@
var/blood_overlay_type = "suit"
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
+ preserve_item = 1
sprite_sheets = list(
"Teshari" = 'icons/mob/species/seromi/suit.dmi',
diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm
index 4a53a24405..2c91f7c7db 100644
--- a/code/modules/clothing/shoes/magboots.dm
+++ b/code/modules/clothing/shoes/magboots.dm
@@ -7,6 +7,7 @@
force = 3
overshoes = 1
shoes_under_pants = -1 //These things are huge
+ preserve_item = 1
var/magpulse = 0
var/icon_base = "magboots"
action_button_name = "Toggle Magboots"
diff --git a/code/modules/clothing/spacesuits/rig/rig.dm b/code/modules/clothing/spacesuits/rig/rig.dm
index 855aa49c7e..7903136a63 100644
--- a/code/modules/clothing/spacesuits/rig/rig.dm
+++ b/code/modules/clothing/spacesuits/rig/rig.dm
@@ -24,6 +24,7 @@
siemens_coefficient = 0.2
permeability_coefficient = 0.1
unacidable = 1
+ preserve_item = 1
var/interface_path = "hardsuit.tmpl"
var/ai_interface_path = "hardsuit.tmpl"
diff --git a/code/modules/clothing/spacesuits/spacesuits.dm b/code/modules/clothing/spacesuits/spacesuits.dm
index 159957bddb..52f6a9103f 100644
--- a/code/modules/clothing/spacesuits/spacesuits.dm
+++ b/code/modules/clothing/spacesuits/spacesuits.dm
@@ -15,6 +15,7 @@
min_cold_protection_temperature = SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
+ preserve_item = 1
var/obj/machinery/camera/camera
var/list/camera_networks
@@ -59,6 +60,7 @@
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
species_restricted = list("exclude","Diona")
+ preserve_item = 1
var/list/supporting_limbs //If not-null, automatically splints breaks. Checked when removing the suit.
diff --git a/code/modules/clothing/spacesuits/void/merc.dm b/code/modules/clothing/spacesuits/void/merc.dm
index 101f7bb657..b9aca8d29c 100644
--- a/code/modules/clothing/spacesuits/void/merc.dm
+++ b/code/modules/clothing/spacesuits/void/merc.dm
@@ -18,4 +18,22 @@
w_class = ITEMSIZE_NORMAL
armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60)
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
- siemens_coefficient = 0.6
\ No newline at end of file
+ siemens_coefficient = 0.6
+
+/obj/item/clothing/head/helmet/space/void/merc/fire
+ icon_state = "rig0-firebug"
+ name = "soot-covered voidsuit helmet"
+ desc = "A blackened helmet that has had many of its protective plates coated in or replaced with high-grade thermal insulation, to protect against incineration. Property of Gorlex Marauders."
+ armor = list(melee = 40, bullet = 40, laser = 60, energy = 20, bomb = 50, bio = 100, rad = 50)
+ max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
+ siemens_coefficient = 0.7
+ light_overlay = "helmet_light_fire"
+
+/obj/item/clothing/suit/space/void/merc/fire
+ icon_state = "rig-firebug"
+ name = "soot-covered voidsuit"
+ desc = "A blackened suit that has had many of its protective plates coated in or replaced with high-grade thermal insulation, to protect against incineration. Property of Gorlex Marauders."
+ armor = list(melee = 40, bullet = 40, laser = 60, energy = 20, bomb = 50, bio = 100, rad = 50)
+ max_heat_protection_temperature = FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE
+ allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/weapon/material/twohanded/fireaxe,/obj/item/weapon/flamethrower)
+ siemens_coefficient = 0.7
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 64893a973b..83bf724607 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -310,7 +310,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(!client)
return
- var/mentor = is_mentor(usr.client)
+ var/mentor = is_eventM(usr.client)
if(!config.antag_hud_allowed && (!client.holder || mentor))
src << "Admins have disabled this for this round."
return
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 896c699777..286596ba04 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -174,9 +174,11 @@
if ("clap")
if (!src.restrained())
message = "claps."
+ playsound(src.loc, 'sound/misc/clapping.ogg')
m_type = 2
if(miming)
m_type = 1
+
if ("flap")
if (!src.restrained())
message = "flaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] wings."
@@ -700,6 +702,20 @@
vomit()
return
+ if("whistle" || "whistles")
+ if(!muzzled)
+ message = "whistles a tune."
+ playsound(loc, 'sound/misc/longwhistle.ogg') //praying this doesn't get abused
+ else
+ message = "makes a light spitting noise, a poor attempt at a whistle."
+
+ if("qwhistle")
+ if(!muzzled)
+ message = "whistles quietly."
+ playsound(loc, 'sound/misc/shortwhistle.ogg')
+ else
+ message = "makes a light spitting noise, a poor attempt at a whistle."
+
if ("help")
src << "blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, deathgasp, drool, eyebrow, fastsway/qwag, \
frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, \
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 3cd3d0c96e..1ea7c15464 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -1241,7 +1241,7 @@
W.message = message
W.add_fingerprint(src)
-/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone)
+/mob/living/carbon/human/can_inject(var/mob/user, var/error_msg, var/target_zone, var/ignore_thickness = FALSE)
. = 1
if(!target_zone)
@@ -1261,10 +1261,10 @@
else
switch(target_zone)
if(BP_HEAD)
- if(head && head.item_flags & THICKMATERIAL)
+ if(head && (head.item_flags & THICKMATERIAL) && !ignore_thickness)
. = 0
else
- if(wear_suit && wear_suit.item_flags & THICKMATERIAL)
+ if(wear_suit && (wear_suit.item_flags & THICKMATERIAL) && !ignore_thickness)
. = 0
if(!. && error_msg && user)
if(!fail_msg)
diff --git a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
index 2def8149ff..f769cb29ab 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules/syndicate.dm
@@ -26,12 +26,13 @@
)
var/id
+// All syndie modules get these, and the base borg items (flash, crowbar, etc).
/obj/item/weapon/robot_module/robot/syndicate/New(var/mob/living/silicon/robot/R)
..()
loc = R
+ src.modules += new /obj/item/weapon/pinpointer/shuttle/merc(src)
src.modules += new /obj/item/weapon/melee/energy/sword(src)
- src.modules += new /obj/item/weapon/gun/energy/pulse_rifle/destroyer(src)
- src.modules += new /obj/item/weapon/card/emag(src)
+
var/jetpack = new/obj/item/weapon/tank/jetpack/carbondioxide(src)
src.modules += jetpack
R.internals = jetpack
@@ -43,3 +44,141 @@
src.modules -= id
id = null
return ..()
+
+// Gets a big shield and a gun that shoots really fast to scare the opposing force.
+/obj/item/weapon/robot_module/robot/syndicate/protector
+ name = "protector robot module"
+ sprites = list(
+ "Cerberus - Treaded" = "syndie_treadhound",
+ "Cerberus" = "syndie_bloodhound",
+ "Ares" = "squats",
+ "XI-ALP" = "syndi-heavy"
+ )
+
+/obj/item/weapon/robot_module/robot/syndicate/protector/New(var/mob/living/silicon/robot/R)
+ ..()
+ src.modules += new /obj/item/shield_projector/rectangle/weak(src)
+ src.modules += new /obj/item/weapon/gun/energy/dakkalaser(src)
+ src.modules += new /obj/item/weapon/handcuffs/cyborg(src)
+ src.modules += new /obj/item/weapon/melee/baton/robot(src)
+
+// 95% engi-borg and 15% roboticist.
+/obj/item/weapon/robot_module/robot/syndicate/mechanist
+ name = "mechanist robot module"
+ sprites = list(
+ "XI-GUS" = "spidersyndi",
+ "WTOperator" = "sleekhos"
+ )
+
+/obj/item/weapon/robot_module/robot/syndicate/mechanist/New(var/mob/living/silicon/robot/R)
+ ..()
+ // General engineering/hacking.
+ src.modules += new /obj/item/borg/sight/meson(src)
+ src.modules += new /obj/item/weapon/weldingtool/electric/mounted/cyborg(src)
+ src.modules += new /obj/item/weapon/screwdriver/cyborg(src)
+ src.modules += new /obj/item/weapon/wrench/cyborg(src)
+ src.modules += new /obj/item/weapon/wirecutters/cyborg(src)
+ src.modules += new /obj/item/device/multitool/ai_detector(src)
+ src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
+ src.modules += new /obj/item/weapon/rcd/borg/lesser(src) // Can't eat rwalls to prevent AI core cheese.
+ src.modules += new /obj/item/weapon/melee/energy/sword/ionic_rapier(src)
+
+ // FBP repair.
+ src.modules += new /obj/item/device/robotanalyzer(src)
+ src.modules += new /obj/item/weapon/shockpaddles/robot/jumper(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/organ/robotics(src)
+
+ // Hacking other things.
+ src.modules += new /obj/item/weapon/card/robot(src)
+ src.modules += new /obj/item/weapon/card/emag(src)
+
+ // Materials.
+ var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
+ synths += nanite
+ var/datum/matter_synth/wire = new /datum/matter_synth/wire()
+ synths += wire
+ var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
+ synths += metal
+ var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
+ synths += glass
+
+ var/obj/item/stack/nanopaste/N = new /obj/item/stack/nanopaste(src)
+ N.uses_charge = 1
+ N.charge_costs = list(1000)
+ N.synths = list(nanite)
+ src.modules += N
+
+ var/obj/item/stack/material/cyborg/steel/M = new (src)
+ M.synths = list(metal)
+ src.modules += M
+
+ var/obj/item/stack/material/cyborg/glass/G = new (src)
+ G.synths = list(glass)
+ src.modules += G
+
+ var/obj/item/stack/rods/cyborg/rods = new /obj/item/stack/rods/cyborg(src)
+ rods.synths = list(metal)
+ src.modules += rods
+
+ var/obj/item/stack/cable_coil/cyborg/C = new /obj/item/stack/cable_coil/cyborg(src)
+ C.synths = list(wire)
+ src.modules += C
+
+ var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
+ RG.synths = list(metal, glass)
+ src.modules += RG
+
+
+
+
+// Mediborg optimized for on-the-field healing, but can also do surgery if needed.
+/obj/item/weapon/robot_module/robot/syndicate/combat_medic
+ name = "combat medic robot module"
+ sprites = list(
+ "Telemachus" = "toiletbotantag"
+ )
+
+/obj/item/weapon/robot_module/robot/syndicate/combat_medic/New(var/mob/living/silicon/robot/R)
+ ..()
+ src.modules += new /obj/item/borg/sight/hud/med(src)
+ src.modules += new /obj/item/device/healthanalyzer(src)
+ src.modules += new /obj/item/weapon/reagent_containers/borghypo/merc(src)
+
+ // Surgery things.
+ src.modules += new /obj/item/weapon/surgical/scalpel/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/hemostat/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/retractor/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/cautery/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/bonegel/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/FixOVein/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/bonesetter/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/circular_saw/cyborg(src)
+ src.modules += new /obj/item/weapon/surgical/surgicaldrill/cyborg(src)
+ src.modules += new /obj/item/weapon/gripper/no_use/organ(src)
+
+ // General healing.
+ src.modules += new /obj/item/weapon/gripper/medical(src)
+ src.modules += new /obj/item/weapon/shockpaddles/robot/combat(src)
+ src.modules += new /obj/item/weapon/reagent_containers/dropper(src) // Allows borg to fix necrosis apparently
+ src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
+ src.modules += new /obj/item/roller_holder(src)
+
+ // Materials.
+ var/datum/matter_synth/medicine = new /datum/matter_synth/medicine(15000)
+ synths += medicine
+
+ var/obj/item/stack/medical/advanced/ointment/O = new /obj/item/stack/medical/advanced/ointment(src)
+ var/obj/item/stack/medical/advanced/bruise_pack/B = new /obj/item/stack/medical/advanced/bruise_pack(src)
+ var/obj/item/stack/medical/splint/S = new /obj/item/stack/medical/splint(src)
+ O.uses_charge = 1
+ O.charge_costs = list(1000)
+ O.synths = list(medicine)
+ B.uses_charge = 1
+ B.charge_costs = list(1000)
+ B.synths = list(medicine)
+ S.uses_charge = 1
+ S.charge_costs = list(1000)
+ S.synths = list(medicine)
+ src.modules += O
+ src.modules += B
+ src.modules += S
diff --git a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
index 9cc09b286a..d722027ad3 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/gravekeeper.dm
@@ -6,6 +6,7 @@
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id
+ icon_selected = FALSE
/mob/living/silicon/robot/gravekeeper/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
diff --git a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
index ba6890e835..281e158a92 100644
--- a/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
+++ b/code/modules/mob/living/silicon/robot/subtypes/lost_drone.dm
@@ -6,6 +6,7 @@
lawchannel = "State"
braintype = "Drone"
idcard_type = /obj/item/weapon/card/id
+ icon_selected = FALSE
/mob/living/silicon/robot/lost/init()
aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
diff --git a/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm
new file mode 100644
index 0000000000..76496f4d4c
--- /dev/null
+++ b/code/modules/mob/living/silicon/robot/subtypes/syndicate.dm
@@ -0,0 +1,46 @@
+/mob/living/silicon/robot/syndicate
+ lawupdate = 0
+ scrambledcodes = 1
+ icon_state = "syndie_bloodhound"
+ modtype = "Syndicate"
+ lawchannel = "State"
+ braintype = "Drone"
+ idcard_type = /obj/item/weapon/card/id/syndicate
+ icon_selected = FALSE
+
+/mob/living/silicon/robot/syndicate/init()
+ aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src)
+
+ mmi = new /obj/item/device/mmi/digital/robot(src) // Explicitly a drone.
+ overlays.Cut()
+ init_id()
+
+ updatename("Syndicate")
+
+ if(!cell)
+ cell = new /obj/item/weapon/cell/high(src) // 15k cell, because Antag.
+
+ laws = new /datum/ai_laws/syndicate_override()
+
+ radio.keyslot = new /obj/item/device/encryptionkey/syndicate(radio)
+ radio.recalculateChannels()
+
+ playsound(loc, 'sound/mecha/nominalsyndi.ogg', 75, 0)
+
+/mob/living/silicon/robot/syndicate/protector/init()
+ ..()
+ module = new /obj/item/weapon/robot_module/robot/syndicate/protector(src)
+ updatename("Protector")
+
+/mob/living/silicon/robot/syndicate/mechanist/init()
+ ..()
+ module = new /obj/item/weapon/robot_module/robot/syndicate/mechanist(src)
+ updatename("Mechanist")
+
+/mob/living/silicon/robot/syndicate/combat_medic/init()
+ ..()
+ module = new /obj/item/weapon/robot_module/robot/syndicate/combat_medic(src)
+ updatename("Combat Medic")
+
+/mob/living/silicon/robot/syndicate/speech_bubble_appearance()
+ return "synthetic_evil"
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/aliens/alien.dm b/code/modules/mob/living/simple_animal/aliens/alien.dm
index f756b31798..dbe990e366 100644
--- a/code/modules/mob/living/simple_animal/aliens/alien.dm
+++ b/code/modules/mob/living/simple_animal/aliens/alien.dm
@@ -66,6 +66,19 @@
projectiletype = /obj/item/projectile/energy/neurotoxin/toxic
projectilesound = 'sound/weapons/pierce.ogg'
+/mob/living/simple_animal/hostile/alien/sentinel/praetorian
+ name = "alien praetorian"
+ icon = 'icons/mob/64x64.dmi'
+ icon_state = "prat_s"
+ icon_living = "prat_s"
+ icon_dead = "prat_dead"
+ move_to_delay = 5
+ maxHealth = 200
+ health = 200
+
+ pixel_x = -16
+ old_x = -16
+ meat_amount = 5
/mob/living/simple_animal/hostile/alien/queen
name = "alien queen"
@@ -83,15 +96,36 @@
rapid = 1
status_flags = 0
-/mob/living/simple_animal/hostile/alien/queen/large
+/mob/living/simple_animal/hostile/alien/queen/empress
name = "alien empress"
- icon = 'icons/mob/alienqueen.dmi'
+ icon = 'icons/mob/64x64.dmi'
icon_state = "queen_s"
icon_living = "queen_s"
icon_dead = "queen_dead"
move_to_delay = 4
maxHealth = 400
health = 400
+ meat_amount = 5
+ speed = 1
+
+ pixel_x = -16
+ old_x = -16
+
+/mob/living/simple_animal/hostile/alien/queen/empress/mother
+ name = "alien mother"
+ icon = 'icons/mob/96x96.dmi'
+ icon_state = "empress_s"
+ icon_living = "empress_s"
+ icon_dead = "empress_dead"
+ maxHealth = 600
+ health = 600
+ meat_amount = 10
+ melee_damage_lower = 15
+ melee_damage_upper = 25
+ speed = 2
+
+ pixel_x = -32
+ old_x = -32
/mob/living/simple_animal/hostile/alien/death()
..()
diff --git a/code/modules/mob/living/simple_animal/animals/carp.dm b/code/modules/mob/living/simple_animal/animals/carp.dm
index ff626e5eab..9126642197 100644
--- a/code/modules/mob/living/simple_animal/animals/carp.dm
+++ b/code/modules/mob/living/simple_animal/animals/carp.dm
@@ -36,6 +36,43 @@
meat_type = /obj/item/weapon/reagent_containers/food/snacks/carpmeat
+/mob/living/simple_animal/hostile/carp/large
+ name = "elder carp"
+ desc = "An older, more matured carp. Few survive to this age due to their aggressiveness."
+ icon = 'icons/mob/64x32.dmi'
+ icon_state = "shark"
+ icon_living = "shark"
+ icon_dead = "shark_dead"
+ turns_per_move = 2
+ move_to_delay = 2
+ mob_size = MOB_LARGE
+
+ pixel_x = -16
+ old_x = -16
+
+ health = 50
+ maxHealth = 50
+
+
+/mob/living/simple_animal/hostile/carp/large/huge
+ name = "great white carp"
+ desc = "A very rare breed of carp- and a very aggressive one."
+ icon = 'icons/mob/64x64.dmi'
+ icon_dead = "megacarp_dead"
+ icon_living = "megacarp"
+ icon_state = "megacarp"
+ maxHealth = 230
+ health = 230
+ attack_same = 1
+ speed = 1
+
+ meat_amount = 10
+
+ melee_damage_lower = 15
+ melee_damage_upper = 25
+ old_y = -16
+ pixel_y = -16
+
/mob/living/simple_animal/hostile/carp/Process_Spacemove(var/check_drift = 0)
return 1 //No drifting in space for space carp! //original comments do not steal
@@ -50,4 +87,5 @@
if(istype(L))
if(prob(15))
L.Weaken(3)
- L.visible_message("\the [src] knocks down \the [L]!")
\ No newline at end of file
+ L.visible_message("\the [src] knocks down \the [L]!")
+
diff --git a/code/modules/mob/living/simple_animal/animals/giant_spider.dm b/code/modules/mob/living/simple_animal/animals/giant_spider.dm
index a087d4429a..1ff5605946 100644
--- a/code/modules/mob/living/simple_animal/animals/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/animals/giant_spider.dm
@@ -74,6 +74,27 @@
var/atom/cocoon_target
var/egg_inject_chance = 5
+/mob/living/simple_animal/hostile/giant_spider/nurse/queen
+ desc = "Absolutely gigantic, this creature is horror itself."
+ icon = 'icons/mob/64x64.dmi'
+ icon_state = "spider_queen"
+ icon_living = "spider_queen"
+ icon_dead = "spider_queen_dead"
+
+ maxHealth = 320
+ health = 320
+
+ melee_damage_lower = 15
+ melee_damage_upper = 25
+ poison_per_bite = 10
+
+ egg_inject_chance = 10
+
+ pixel_x = -16
+ pixel_y = -16
+ old_x = -16
+ old_y = -16
+
//hunters have the most poison and move the fastest, so they can find prey
/mob/living/simple_animal/hostile/giant_spider/hunter
desc = "Furry and black, it makes you shudder to look at it. This one has sparkling purple eyes."
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 0d4b3ad085..56104d34f4 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -400,7 +400,7 @@ proc/is_blind(A)
return // Can't talk in deadchat if you can't see it.
for(var/mob/M in player_list)
- if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_mentor(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay))
+ if(M.client && ((!istype(M, /mob/new_player) && M.stat == DEAD) || (M.client.holder && !is_eventM(M.client))) && M.is_preference_enabled(/datum/client_preference/show_dsay))
var/follow
var/lname
if(M.forbid_seeing_deadchat && !M.client.holder)
diff --git a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
index 469f32135f..97afe227c4 100644
--- a/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
+++ b/code/modules/power/fusion/fuel_assembly/fuel_compressor.dm
@@ -25,9 +25,9 @@
thing.reagents.remove_reagent(R.id, R.volume)
user.put_in_hands(F)
- else if(istype(thing, /obj/machinery/power/supermatter/shard))
+ else if(istype(thing, /obj/machinery/power/supermatter))
var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), "supermatter")
- visible_message("\The [src] compresses the \[thing] into a new fuel assembly.")
+ visible_message("\The [src] compresses \the [thing] into a new fuel assembly.")
qdel(thing)
user.put_in_hands(F)
return 1
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 60078127ad..b28c8f2993 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -7,6 +7,7 @@
slot_flags = SLOT_BELT | SLOT_EARS
throwforce = 1
w_class = ITEMSIZE_TINY
+ preserve_item = 1
var/leaves_residue = 1
var/caliber = "" //Which kind of guns it can be loaded into
@@ -75,6 +76,7 @@
w_class = ITEMSIZE_SMALL
throw_speed = 4
throw_range = 10
+ preserve_item = 1
var/list/stored_ammo = list()
var/mag_type = SPEEDLOADER //ammo_magazines can only be used with compatible guns. This is not a bitflag, the load_method var on guns is.
diff --git a/code/modules/projectiles/ammunition/magnetic.dm b/code/modules/projectiles/ammunition/magnetic.dm
index fc299adf0b..b3e9c3a7c8 100644
--- a/code/modules/projectiles/ammunition/magnetic.dm
+++ b/code/modules/projectiles/ammunition/magnetic.dm
@@ -7,6 +7,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 1800)
origin_tech = list(TECH_COMBAT = 1)
var/remaining = 9
+ preserve_item = 1
/obj/item/weapon/magnetic_ammo/examine(mob/user)
. = ..()
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 1bce0e00b7..16a7c1d07b 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -46,6 +46,7 @@
throw_speed = 4
throw_range = 5
force = 5
+ preserve_item = 1
origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 46988c9934..d613f1f206 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -177,4 +177,24 @@ obj/item/weapon/gun/energy/staff/focus
charge_cost = 200
user << "The [src.name] will now strike only a single person."
projectile_type = "/obj/item/projectile/forcebolt"
- */
\ No newline at end of file
+ */
+
+/obj/item/weapon/gun/energy/dakkalaser
+ name = "suppression gun"
+ desc = "A massive weapon, designed to pressure the opposition by raining down a torrent of energy pellets."
+ icon_state = "dakkalaser"
+ item_state = "dakkalaser"
+ fire_sound = 'sound/weapons/Laser.ogg'
+ w_class = ITEMSIZE_HUGE
+ charge_cost = 24 // 100 shots, it's a spray and pray (to RNGesus) weapon.
+ projectile_type = /obj/item/projectile/energy/blue_pellet
+ self_recharge = 1
+ accuracy = 5 // Suppressive weapons don't work too well if there's no risk of being hit.
+ burst_delay = 1 // Burst faster than average.
+ origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_ILLEGAL = 6)
+
+ firemodes = list(
+ list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24),
+ list(mode_name="five shot burst", burst = 5, burst_accuracy = list(5,5,5,5,5), dispersion = list(1,1,1,1,1)),
+ list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
+ )
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/magnetic/magnetic.dm b/code/modules/projectiles/guns/magnetic/magnetic.dm
index 130f4410df..ae45454a42 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic.dm
@@ -4,7 +4,7 @@
icon_state = "coilgun"
item_state = "coilgun"
icon = 'icons/obj/railgun.dmi'
-// one_hand_penalty = 1
+// one_handed_penalty = 1
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_ILLEGAL = 2, TECH_MAGNET = 4)
w_class = ITEMSIZE_LARGE
@@ -193,3 +193,66 @@
qdel(src)
return new projectile_type(src)
+
+/obj/item/weapon/gun/magnetic/fuelrod
+ name = "Fuel-Rod Cannon"
+ desc = "A bulky weapon designed to fire reactor core fuel rods at absurd velocities... who thought this was a good idea?!"
+ description_antag = "This device is capable of firing reactor fuel assemblies, acquired from a R-UST fuel compressor and an appropriate fueltype. Be warned, Supermatter rods may have unforseen consequences."
+ description_fluff = "Morpheus' second entry into the arms manufacturing field, the Morpheus B.F.G, or 'Big Fuel-rod Gun' made some noise when it was initially sent to the market. By noise, they mean it was rapidly declared 'incredibly dangerous to the wielder and civilians within a mile radius alike'."
+ icon_state = "fuelrodgun"
+ item_state = "coilgun"
+ icon = 'icons/obj/railgun.dmi'
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 4)
+ w_class = ITEMSIZE_LARGE
+
+ removable_components = TRUE
+ gun_unreliable = 0
+
+ load_type = /obj/item/weapon/fuel_assembly
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+
+ power_cost = 500
+
+/obj/item/weapon/gun/magnetic/fuelrod/consume_next_projectile()
+ if(!check_ammo() || !capacitor || capacitor.charge < power_cost)
+ return
+
+ if(loaded) //Safety.
+ if(istype(loaded, /obj/item/weapon/fuel_assembly))
+ var/obj/item/weapon/fuel_assembly/rod = loaded
+ if(rod.fuel_type == "composite" || rod.fuel_type == "deuterium") //Safety check for rods spawned in without a fueltype.
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+ else if(rod.fuel_type == "tritium")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/tritium
+ else if(rod.fuel_type == "phoron")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/phoron
+ else if(rod.fuel_type == "supermatter")
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod/supermatter
+ visible_message("The barrel of \the [src] glows a blinding white!")
+ spawn(5)
+ visible_message("\The [src] begins to rattle, its acceleration chamber collapsing in on itself!")
+ removable_components = FALSE
+ spawn(15)
+ audible_message("\The [src]'s power supply begins to overload as the device crumples!") //Why are you still holding this?
+ playsound(loc, 'sound/effects/grillehit.ogg', 10, 1)
+ var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
+ var/turf/T = get_turf(src)
+ sparks.set_up(2, 1, T)
+ sparks.start()
+ spawn(15)
+ visible_message("\The [src] explodes in a blinding white light!")
+ explosion(src.loc, -1, 1, 2, 3)
+ qdel(src)
+ else
+ projectile_type = /obj/item/projectile/bullet/magnetic/fuelrod
+
+ use_ammo()
+ capacitor.use(power_cost)
+ update_icon()
+
+ return new projectile_type(src)
+
+/obj/item/weapon/gun/magnetic/fuelrod/New()
+ cell = new /obj/item/weapon/cell/high
+ capacitor = new /obj/item/weapon/stock_parts/capacitor
+ . = ..()
diff --git a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
index d731512bfa..fe9aa576ef 100644
--- a/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
+++ b/code/modules/projectiles/guns/magnetic/magnetic_railgun.dm
@@ -67,9 +67,9 @@
w_class = ITEMSIZE_NO_CONTAINER
firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
- list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
- list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_hand_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
+ list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="long bursts", burst=6, fire_delay=null, move_delay=10, one_handed_penalty=2, burst_accuracy=list(0,-1,-1,-1,-2), dispersion=list(0.6, 0.6, 1.0, 1.0, 1.2)),
)
/obj/item/weapon/gun/magnetic/railgun/automatic/examine(var/mob/user)
@@ -94,8 +94,8 @@
fire_sound = 'sound/weapons/rapidslice.ogg'
firemodes = list(
- list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_hand_penalty=1, burst_accuracy=null, dispersion=null),
- list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_hand_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, one_handed_penalty=1, burst_accuracy=null, dispersion=null),
+ list(mode_name="short bursts", burst=3, fire_delay=null, move_delay=5, one_handed_penalty=2, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
)
/obj/item/weapon/gun/magnetic/railgun/flechette/out_of_ammo()
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 5e599230cf..fdc5a445b9 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -333,9 +333,11 @@
else if(!bumped)
tracer_effect(effect_transform)
- if(incendiary >= 2)
- var/trail_volume = (flammability * 0.10)
- new /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(src.loc, trail_volume, src.dir)
+ if(incendiary >= 2) //This should cover the bases of 'Why is there fuel here?' in a much cleaner way than previous.
+ if(src && src.loc) //Safety.
+ if(!src.loc.density)
+ var/trail_volume = (flammability * 0.20)
+ new /obj/effect/decal/cleanable/liquid_fuel/flamethrower_fuel(src.loc, trail_volume, src.dir)
if(!hitscan)
sleep(step_delay) //add delay between movement iterations if it's not a hitscan weapon
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 5b95ee6639..283e487272 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -272,6 +272,7 @@
flammability = 4
agony = 30
kill_count = 4
+ vacuum_traversal = 0
/obj/item/projectile/bullet/incendiary/flamethrower/large
damage = 15
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index 42be84f2ac..dbc54fc432 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -182,4 +182,17 @@
/obj/item/projectile/energy/plasmastun/on_hit(var/atom/target)
bang(target)
- . = ..()
\ No newline at end of file
+ . = ..()
+
+/obj/item/projectile/energy/blue_pellet
+ name = "suppressive pellet"
+ icon_state = "blue_pellet"
+ damage = 5
+ armor_penetration = 75
+ pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
+ damage_type = BURN
+ check_armour = "energy"
+ light_color = "#0000FF"
+
+ embed_chance = 0
+ muzzle_type = /obj/effect/projectile/pulse/muzzle
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/magnetic.dm b/code/modules/projectiles/projectile/magnetic.dm
index 35f98833ef..b4a60a55d7 100644
--- a/code/modules/projectiles/projectile/magnetic.dm
+++ b/code/modules/projectiles/projectile/magnetic.dm
@@ -18,4 +18,100 @@
name = "flechette"
icon_state = "flechette"
damage = 20
- armor_penetration = 100
\ No newline at end of file
+ armor_penetration = 100
+
+/obj/item/projectile/bullet/magnetic/fuelrod
+ name = "fuel rod"
+ icon_state = "fuel-deuterium"
+ damage = 30
+ stun = 1
+ weaken = 0
+ agony = 30
+ incendiary = 1
+ flammability = 0 //Deuterium and Tritium are both held in water, but the object moving so quickly will ignite the target.
+ penetrating = 2
+ embed_chance = 0
+ armor_penetration = 40
+ kill_count = 20
+
+ var/searing = 0 //Does this fuelrod ignore shields?
+ var/detonate_travel = 0 //Will this fuelrod explode when it reaches maximum distance?
+ var/detonate_mob = 0 //Will this fuelrod explode when it hits a mob?
+ var/energetic_impact = 0 //Does this fuelrod cause a bright flash on impact with a mob?
+
+/obj/item/projectile/bullet/magnetic/fuelrod/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) //Future-proofing. Special effects for impact.
+ if(istype(target,/mob/living))
+ var/mob/living/V = target
+ if(detonate_mob)
+ if(V.loc)
+ explosion(V.loc, -1, -1, 2, 3)
+
+ if(energetic_impact)
+ var/eye_coverage = 0
+ for(var/mob/living/carbon/M in viewers(world.view, location))
+ eye_coverage = 0
+ if(iscarbon(M))
+ eye_coverage = M.eyecheck()
+ if(eye_coverage < 2)
+ M.flash_eyes()
+ M.Stun(2)
+ M.Weaken(10)
+
+ if(searing)
+ if(blocked)
+ blocked = 0
+
+ return ..(target, blocked, def_zone)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/on_impact(var/atom/A) //Future-proofing, again. In the event new fuel rods are introduced, and have special effects for when they stop flying.
+ if(src.loc)
+ if(detonate_travel && detonate_mob)
+ visible_message("\The [src] shatters in a violent explosion!")
+ explosion(src.loc, 1, 1, 3, 4)
+ else if(detonate_travel)
+ visible_message("\The [src] explodes in a shower of embers!")
+ explosion(src.loc, -1, 1, 2, 3)
+ ..(A)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/tritium
+ icon_state = "fuel-tritium"
+ damage = 40
+ flammability = -1
+ armor_penetration = 50
+ penetrating = 3
+
+/obj/item/projectile/bullet/magnetic/fuelrod/phoron
+ name = "blazing fuel rod"
+ icon_state = "fuel-phoron"
+ damage = 35
+ incendiary = 2
+ flammability = 2
+ armor_penetration = 60
+ penetrating = 5
+ irradiate = 20
+ detonate_mob = 1
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter
+ name = "painfully incandescent fuel rod"
+ icon_state = "fuel-supermatter"
+ damage = 15
+ incendiary = 2
+ flammability = 4
+ weaken = 2
+ armor_penetration = 100
+ penetrating = 100 //Theoretically, this shouldn't stop flying for a while, unless someone lines it up with a wall or fires it into a mountain.
+ irradiate = 120
+ kill_count = 75
+ searing = 1
+ detonate_travel = 1
+ detonate_mob = 1
+ energetic_impact = 1
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter/on_hit(var/atom/target, var/blocked = 0, var/def_zone = null) //You cannot touch the supermatter without disentigrating. Assumedly, this is true for condensed rods of it flying at relativistic speeds.
+ if(istype(target,/turf/simulated/wall) || istype(target,/mob/living))
+ target.visible_message("The [src] burns a perfect hole through \the [target] with a blinding flash!")
+ playsound(target.loc, 'sound/effects/teleport.ogg', 40, 0)
+ return ..(target, blocked, def_zone)
+
+/obj/item/projectile/bullet/magnetic/fuelrod/supermatter/check_penetrate()
+ return 1
\ No newline at end of file
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 8cfb75e20c..8d09b903b6 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -691,4 +691,21 @@
else
if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
data = world.time
- to_chat(M, "You feel invigorated and calm.")
\ No newline at end of file
+ to_chat(M, "You feel invigorated and calm.")
+
+// This exists to cut the number of chemicals a merc borg has to juggle on their hypo.
+/datum/reagent/healing_nanites
+ name = "Restorative Nanites"
+ id = "healing_nanites"
+ description = "Miniature medical robots that swiftly restore bodily damage."
+ taste_description = "metal"
+ reagent_state = SOLID
+ color = "#555555"
+ metabolism = REM * 4 // Nanomachines gotta go fast.
+ scannable = 1
+
+/datum/reagent/healing_nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.heal_organ_damage(2 * removed, 2 * removed)
+ M.adjustOxyLoss(-4 * removed)
+ M.adjustToxLoss(-2 * removed)
+ M.adjustCloneLoss(-2 * removed)
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index 5c4a6bdce6..d0cd3cf9e6 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -12,6 +12,7 @@
var/charge_cost = 50
var/charge_tick = 0
var/recharge_time = 5 //Time it takes for shots to recharge (in seconds)
+ var/bypass_protection = FALSE // If true, can inject through things like spacesuits and armor.
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "anti_toxin", "tramadol", "dexalin" ,"spaceacillin")
var/list/reagent_volumes = list()
@@ -26,6 +27,13 @@
/obj/item/weapon/reagent_containers/borghypo/lost
reagent_ids = list("tricordrazine", "bicaridine", "dexalin", "anti_toxin", "tramadol", "spaceacillin")
+/obj/item/weapon/reagent_containers/borghypo/merc
+ name = "advanced cyborg hypospray"
+ desc = "An advanced nanite and chemical synthesizer and injection system, designed for heavy-duty medical equipment. This type is capable of safely bypassing \
+ thick materials that other hyposprays would struggle with."
+ bypass_protection = TRUE // Because mercs tend to be in spacesuits.
+ reagent_ids = list("healing_nanites", "hyperzine", "tramadol", "oxycodone", "spaceacillin", "peridaxon", "osteodaxon", "myelamine")
+
/obj/item/weapon/reagent_containers/borghypo/New()
..()
@@ -72,7 +80,7 @@
user << "You cannot inject a robotic limb."
return
- if (M.can_inject(user, 1))
+ if(M.can_inject(user, 1, ignore_thickness = bypass_protection))
user << "You inject [M] with the injector."
M << "You feel a tiny prick!"
diff --git a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
index 1aae5b4a94..d4c8389a51 100644
--- a/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
+++ b/code/modules/reagents/reagent_containers/drinkingglass/drinkingglass.dm
@@ -157,8 +157,7 @@
user << "You splash the solution onto [target]."
reagents.splash(target, reagents.total_volume)
return 1
- else
- return
+ ..()
/obj/item/weapon/reagent_containers/food/drinks/glass2/standard_feed_mob(var/mob/user, var/mob/target)
if(afterattack(target, user)) //Check to see if harm intent & splash.
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 1c3151fee9..5c5d0cc3a6 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -14,6 +14,7 @@
possible_transfer_amounts = null
flags = OPENCONTAINER
slot_flags = SLOT_BELT
+ preserve_item = 1
var/reusable = 1
var/used = 0
var/filled = 0
@@ -70,6 +71,7 @@
reusable = 0
filled = 1
filled_reagents = list("inaprovaline" = 5)
+ preserve_item = 0
/obj/item/weapon/reagent_containers/hypospray/autoinjector/on_reagent_change()
..()
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index c34f8d9454..708cc4e081 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -639,6 +639,13 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/ammo_casing/chemdart
sort_string = "TACAF"
+/datum/design/item/weapon/fuelrod
+ id = "fuelrod_gun"
+ req_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_PHORON = 4, TECH_ILLEGAL = 5, TECH_MAGNET = 5)
+ materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 2000, "gold" = 500, "silver" = 500, "uranium" = 1000, "phoron" = 3000, "diamond" = 1000)
+ build_path = /obj/item/weapon/gun/magnetic/fuelrod
+ sort_string = "TACBA"
+
/datum/design/item/weapon/flora_gun
id = "flora_gun"
req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
diff --git a/code/stylesheet.dm b/code/stylesheet.dm
index b376f13aeb..5b3cb80b15 100644
--- a/code/stylesheet.dm
+++ b/code/stylesheet.dm
@@ -73,6 +73,7 @@ h1.alert, h2.alert {color: #000000;}
.disarm {color: #990000;}
.passive {color: #660000;}
+.critical {color: #ff0000; font-weight: bold; font-size: 150%;}
.danger {color: #ff0000; font-weight: bold;}
.warning {color: #ff0000; font-style: italic;}
.rose {color: #ff5050;}
diff --git a/config/example/config.txt b/config/example/config.txt
index 52892bc14a..74a80dc88e 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -93,7 +93,7 @@ SHOW_DEVS
SHOW_MODS
##Show mentors on staffwho
-SHOW_MENTORS
+SHOW_EVENT
## Chooses whether mods have the ability to tempban or not
MODS_CAN_TEMPBAN
diff --git a/icons/mecha/mech_bay.dmi b/icons/mecha/mech_bay.dmi
index e696042ecd..19ca94f3b9 100644
Binary files a/icons/mecha/mech_bay.dmi and b/icons/mecha/mech_bay.dmi differ
diff --git a/icons/mob/64x32.dmi b/icons/mob/64x32.dmi
new file mode 100644
index 0000000000..615fd87a01
Binary files /dev/null and b/icons/mob/64x32.dmi differ
diff --git a/icons/mob/64x64.dmi b/icons/mob/64x64.dmi
new file mode 100644
index 0000000000..a829ee2c6f
Binary files /dev/null and b/icons/mob/64x64.dmi differ
diff --git a/icons/mob/96x96.dmi b/icons/mob/96x96.dmi
new file mode 100644
index 0000000000..7368d30bb1
Binary files /dev/null and b/icons/mob/96x96.dmi differ
diff --git a/icons/mob/alienqueen.dmi b/icons/mob/alienqueen.dmi
deleted file mode 100644
index 1562152023..0000000000
Binary files a/icons/mob/alienqueen.dmi and /dev/null differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 1469c3e3ba..ee8dbd807d 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi
index 9f1232ff95..e54ec778cd 100644
Binary files a/icons/mob/light_overlays.dmi and b/icons/mob/light_overlays.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index d32d479e3f..35e6df449f 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index c4a79cf924..9db8ef1fc5 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/obj/card.dmi b/icons/obj/card.dmi
index 7d917849b1..833e9b99cf 100644
Binary files a/icons/obj/card.dmi and b/icons/obj/card.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index 7b1b1b4085..fa9ea15dc7 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 382f19e8e1..52ae865f92 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 1550d6bf4b..e037ce6f9b 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/projectiles.dmi b/icons/obj/projectiles.dmi
index 61cb6a6a8f..90d6dcd1ea 100644
Binary files a/icons/obj/projectiles.dmi and b/icons/obj/projectiles.dmi differ
diff --git a/icons/obj/radio.dmi b/icons/obj/radio.dmi
index 3452ac3524..86e39f0c58 100644
Binary files a/icons/obj/radio.dmi and b/icons/obj/radio.dmi differ
diff --git a/icons/obj/railgun.dmi b/icons/obj/railgun.dmi
index 0b00e7a156..404aa1ea60 100644
Binary files a/icons/obj/railgun.dmi and b/icons/obj/railgun.dmi differ
diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm
index 4f8aedb853..9204eb5c68 100644
--- a/maps/northern_star/polaris-1.dmm
+++ b/maps/northern_star/polaris-1.dmm
@@ -5177,7 +5177,7 @@
"bVC" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bVD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bVE" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/secure/safe{pixel_x = 5; pixel_y = 28},/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"bVF" = (/obj/machinery/computer/card,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"bVF" = (/obj/machinery/computer/card,/obj/item/weapon/card/id/gold/captain/spare,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bVG" = (/obj/machinery/computer/communications,/obj/machinery/status_display{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bVH" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = 24},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bVI" = (/obj/structure/table/rack,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/mask/gas,/obj/item/clothing/suit/armor/captain,/obj/item/clothing/head/helmet/space/capspace,/obj/machinery/newscaster/security_unit{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/captain)
diff --git a/maps/northern_star/polaris-2.dmm b/maps/northern_star/polaris-2.dmm
index e2a422d04c..0adca3afa9 100644
--- a/maps/northern_star/polaris-2.dmm
+++ b/maps/northern_star/polaris-2.dmm
@@ -1329,7 +1329,7 @@
"zD" = (/obj/structure/bed/chair{dir = 8},/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/restaurant)
"zE" = (/obj/machinery/door/airlock/centcom{name = "Bridge"; opacity = 1; req_access = list(109)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zF" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
-"zG" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/captains_spare,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
+"zG" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/gold/captain/spare,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zH" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zI" = (/obj/structure/table/reinforced,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/command)
"zJ" = (/turf/simulated/shuttle/wall,/area/shuttle/transport1/centcom)
diff --git a/maps/southern_cross/shuttles/crew_shuttles.dm b/maps/southern_cross/shuttles/crew_shuttles.dm
index 764c7bccd7..202284bd1d 100644
--- a/maps/southern_cross/shuttles/crew_shuttles.dm
+++ b/maps/southern_cross/shuttles/crew_shuttles.dm
@@ -32,7 +32,6 @@
destination_class = /datum/shuttle_destination/shuttle2
starting_destination = /datum/shuttle_destination/shuttle2/root
-
/datum/shuttle_destination/shuttle1/root
name = "Southern Cross Hangar One"
my_area = /area/shuttle/shuttle1/start
diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm
index fabe801bd4..d3dbd4ed29 100644
--- a/maps/southern_cross/southern_cross-1.dmm
+++ b/maps/southern_cross/southern_cross-1.dmm
@@ -1124,7 +1124,7 @@
"avF" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/first_aid_station/firstdeck)
"avG" = (/obj/turbolift_map_holder/southern_cross/center,/turf/unsimulated/mask,/area/hallway/primary/firstdeck/elevator)
"avH" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/tcomm/tcomstorage)
-"avI" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/filter,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/tcomm/tcomstorage)
+"avI" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/item/weapon/stock_parts/subspace/sub_filter,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/tcomm/tcomstorage)
"avJ" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/tcomm/tcomstorage)
"avK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled/dark,/area/hallway/primary/starboard)
"avL" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(5,12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftstarboard)
@@ -3223,9 +3223,9 @@
"bjY" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "co2_in"; name = "Carbon Dioxide Supply Control"; output_tag = "co2_out"; sensors = list("co2_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bjZ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bka" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 2; name = "N2 to Mixing"},/turf/simulated/floor/tiled,/area/engineering/atmos)
-"bkb" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 4; tag_south = 1; tag_west = 5; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"bkb" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 4; tag_south = 1; tag_west = 5; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bkc" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
-"bkd" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 3; tag_south = 0; tag_west = 1; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"bkd" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 3; tag_south = 0; tag_west = 1; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bke" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/binary/pump{dir = 2; name = "O2 to Mixing"},/turf/simulated/floor/tiled,/area/engineering/atmos)
"bkf" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
"bkg" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -3365,7 +3365,7 @@
"bmK" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; pixel_y = 1; use_power = 1},/obj/effect/floor_decal/corner/purple/diagonal,/obj/effect/floor_decal/corner/orange{dir = 4},/turf/simulated/floor/reinforced/phoron,/area/engineering/atmos)
"bmL" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "tox_in"; name = "Phoron Supply Control"; output_tag = "tox_out"; sensors = list("tox_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bmM" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor/tiled,/area/engineering/atmos)
-"bmN" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 2; tag_south = 1; tag_west = 6; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"bmN" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 2; tag_south = 1; tag_west = 6; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bmO" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/tiled,/area/engineering/atmos)
"bmP" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 8; icon_state = "map"; tag = "icon-map (EAST)"},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bmQ" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Waste to Port"},/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -3561,7 +3561,7 @@
"bqy" = (/obj/effect/floor_decal/corner/white{dir = 4},/obj/effect/floor_decal/corner/red/diagonal,/obj/machinery/atmospherics/unary/outlet_injector{dir = 4; frequency = 1441; icon_state = "map_injector"; id = "n2o_in"; pixel_y = 1; use_power = 1},/turf/simulated/floor/reinforced/n20,/area/engineering/atmos)
"bqz" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/engineering/atmos)
"bqA" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2o_in"; name = "Nitrous Oxide Supply Control"; output_tag = "n2o_out"; sensors = list("n2o_sensor" = "Tank")},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/engineering/atmos)
-"bqB" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 7; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
+"bqB" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 7; use_power = 1},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bqC" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bqD" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/tiled,/area/engineering/atmos)
"bqE" = (/obj/machinery/atmospherics/pipe/manifold/visible/red{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/obj/machinery/meter,/turf/simulated/floor/tiled,/area/engineering/atmos)
@@ -4979,7 +4979,7 @@
"bRM" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/mixing)
"bRN" = (/obj/machinery/atmospherics/omni/mixer{tag_east = 2; tag_east_con = null; tag_north = 1; tag_north_con = 0.5; tag_south = 0; tag_south_con = null; tag_west = 1; tag_west_con = 0.5; use_power = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled,/area/rnd/mixing)
"bRO" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/meter,/obj/machinery/camera/network/research{c_tag = "SCI - Toxins Lab 2"; dir = 1},/turf/simulated/floor/tiled,/area/rnd/mixing)
-"bRP" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1; use_power = 0},/turf/simulated/floor/tiled,/area/rnd/mixing)
+"bRP" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 6; tag_south = 0; tag_west = 1; use_power = 0},/turf/simulated/floor/tiled,/area/rnd/mixing)
"bRQ" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/mixing)
"bRR" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/rnd/mixing)
"bRS" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/black,/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
@@ -4990,9 +4990,9 @@
"bRX" = (/obj/machinery/atmospherics/pipe/cap/visible{dir = 1},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor,/area/engineering/engine_room)
"bRY" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/engineering/engine_room)
"bRZ" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/engineering/engine_room)
-"bSa" = (/obj/machinery/atmospherics/omni/filter{tag_east = 0; tag_north = 2; tag_south = 4; tag_west = 1; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/sign/warning/nosmoking_2{pixel_x = 32},/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"bSa" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 0; tag_north = 2; tag_south = 4; tag_west = 1; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/structure/sign/warning/nosmoking_2{pixel_x = 32},/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
"bSb" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/cyan,/turf/simulated/floor,/area/engineering/engine_room)
-"bSc" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 4; tag_west = 0; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"bSc" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 4; tag_west = 0; use_power = 0},/obj/effect/floor_decal/industrial/outline/blue,/obj/effect/engine_setup/atmo_filter,/turf/simulated/floor/plating,/area/engineering/engine_room)
"bSd" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bSe" = (/obj/effect/landmark{name = "JoinLateCyborg"},/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"bSf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/hallway/engineer_hallway)
@@ -8777,7 +8777,7 @@
"dmO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/sign/dock/two,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
"dmP" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/dockhallway)
"dmQ" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
-"dmR" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock Hallway Four"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
+"dmR" = (/obj/machinery/light,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "arrivals_dock_north_airlock;arrivals_dock_south_airlock"; frequency = 1380; id_tag = "arrivals_dock"; pixel_x = 0; pixel_y = -25; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
"dmS" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_y = -30},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
"dmT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/sign/dock/three,/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock Hallway Five"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
"dmU" = (/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D1)
@@ -8831,8 +8831,8 @@
"dnQ" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dnR" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dnS" = (/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dnT" = (/turf/simulated/shuttle/wall,/area/shuttle/arrival/station)
-"dnU" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/station)
+"dnT" = (/turf/space,/area/shuttle/arrival/station)
+"dnU" = (/obj/machinery/door/firedoor/border_only,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
"dnV" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dnW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dnX" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "centcom_dock_airlock"; name = "interior access button"; pixel_x = 28; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
@@ -8846,8 +8846,8 @@
"dof" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dog" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"doh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
-"doi" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/arrival/station)
-"doj" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"doi" = (/obj/machinery/door/firedoor/border_only,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
+"doj" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dok" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dol" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dom" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
@@ -8855,19 +8855,19 @@
"doo" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
"dop" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
"doq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
-"dor" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"dos" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dor" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_north_airlock"; master_tag = "arrivals_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "arrivals_dock_north_mech"; tag_airpump = "arrivals_dock_north_pump"; tag_chamber_sensor = "arrivals_dock_north_sensor"; tag_exterior_door = "arrivals_dock_north_outer"; tag_interior_door = "arrivals_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dos" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dot" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dou" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock One Fore"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dov" = (/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock Two Fore"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dow" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"dow" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dox" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock Three Fore"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"doz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"doA" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"doB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"doC" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"doD" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"doD" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_north_starboard_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doG" = (/obj/structure/sign/warning/docking_area,/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D1)
@@ -8883,9 +8883,9 @@
"doQ" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"doR" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"doS" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
-"doT" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"doU" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"doV" = (/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
+"doT" = (/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_snorth_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_starboard_mech"; tag_airpump = "escape_dock_north_starboard_pump"; tag_chamber_sensor = "escape_dock_north_starboard_sensor"; tag_exterior_door = "escape_dock_north_starboard_outer"; tag_interior_door = "escape_dock_north_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_starboard_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"doU" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_north_mech"; pixel_y = 19},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
+"doV" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"doW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning/corner{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"doY" = (/obj/structure/sign/warning/docking_area,/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/D3)
@@ -8901,14 +8901,14 @@
"dpi" = (/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_inner"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dpj" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_starboard_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dpk" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dpl" = (/obj/machinery/door/airlock/glass_external,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
-"dpm" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dpn" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
-"dpo" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
-"dpp" = (/obj/machinery/door/airlock/external{name = "Arrival Airlock"},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
-"dpq" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
-"dpr" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
-"dps" = (/obj/machinery/door/airlock/glass_external,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
+"dpl" = (/obj/machinery/light/small,/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dpm" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_north_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dpn" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_dock_north_outer"; locked = 1; name = "Arrivals Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "arrivals_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = -26; req_one_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "arrival_dock_north_mech"; pixel_y = -19},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
+"dpo" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_north_starboard_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_starboard_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dpp" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dpq" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
+"dpr" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D2)
+"dps" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dpt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dpu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dpv" = (/turf/space,/area/shuttle/shuttle2/arrivals_dock)
@@ -8920,12 +8920,12 @@
"dpB" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "escape_dock_north_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_starboard_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"dpC" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "escape_dock_north_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dpD" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dpE" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dpF" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
-"dpG" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dpH" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dpI" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
-"dpJ" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dpE" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "arrivals_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = 30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_north_mech"; tag_airpump = "escape_dock_north_pump"; tag_chamber_sensor = "escape_dock_north_sensor"; tag_exterior_door = "escape_dock_north_outer"; tag_interior_door = "escape_dock_north_inner"; tag_shuttle_mech_sensor = "shuttle_dock_north_mech"},/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dpF" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dpG" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
+"dpH" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_south_starboard_sensor"; pixel_x = 0; pixel_y = 25},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dpI" = (/obj/effect/floor_decal/industrial/loading{tag = "icon-loadingarea (WEST)"; icon_state = "loadingarea"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dpJ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_outer"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_starboard_airlock"; name = "exterior access button"; pixel_x = -4; pixel_y = 26; req_one_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/shield_diffuser,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dpK" = (/turf/space,/area/shuttle/response_ship/arrivals_dock)
"dpL" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dpM" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
@@ -8936,10 +8936,10 @@
"dpR" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dpS" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dpT" = (/obj/machinery/door/firedoor/border_only,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dpU" = (/turf/simulated/shuttle/wall/no_join,/area/shuttle/arrival/station)
-"dpV" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dpW" = (/obj/effect/landmark/start,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"dpX" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
+"dpU" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
+"dpV" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
+"dpW" = (/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_south_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_south_mech"; tag_airpump = "escape_dock_south_pump"; tag_chamber_sensor = "escape_dock_south_sensor"; tag_exterior_door = "escape_dock_south_outer"; tag_interior_door = "escape_dock_south_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_mech"},/obj/effect/floor_decal/industrial/loading{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
+"dpX" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dpY" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dpZ" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dqa" = (/obj/effect/wingrille_spawn/reinforced,/obj/structure/sign/warning/airlock,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1)
@@ -8949,10 +8949,9 @@
"dqe" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dqf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dqg" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dqh" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dqi" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dqj" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
-"dqk" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
+"dqh" = (/obj/effect/floor_decal/industrial/loading{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dqi" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_ssouth_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_south_starboard_mech"; tag_airpump = "escape_dock_south_starboard_pump"; tag_chamber_sensor = "escape_dock_south_starboard_sensor"; tag_exterior_door = "escape_dock_south_starboard_outer"; tag_interior_door = "escape_dock_south_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_starboard_mech"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
+"dqj" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
"dql" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dqm" = (/obj/effect/floor_decal/industrial/warning/corner,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dqn" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D3)
@@ -8966,9 +8965,7 @@
"dqv" = (/obj/structure/closet/emcloset,/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dqw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dqx" = (/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"dqy" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
"dqz" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/ninja_dojo/arrivals_dock)
-"dqA" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/station)
"dqB" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dqC" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "s2s_dock_airlock"; name = "interior access button"; pixel_x = 28; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dqD" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "s2s_dock_inner"; locked = 1; name = "Dock Three Internal Airlock"; req_access = list(13)},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D3)
@@ -9000,8 +8997,6 @@
"drd" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"dre" = (/obj/machinery/door/airlock/glass_external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_starboard_inner"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/effect/floor_decal/industrial/hatch/yellow,/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"drf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drg" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"dri" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drj" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = -26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"drk" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "escape_dock_south_pump"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
@@ -9011,8 +9006,6 @@
"dro" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/embedded_controller/radio/airlock/docking_port_multi{frequency = 1380; id_tag = "escape_dock_ssouth_airlock"; master_tag = "escape_dock"; pixel_y = -30; req_one_access = list(13); tag_airlock_mech_sensor = "escape_dock_south_starboard_mech"; tag_airpump = "escape_dock_south_starboard_pump"; tag_chamber_sensor = "escape_dock_south_starboard_sensor"; tag_exterior_door = "escape_dock_south_starboard_outer"; tag_interior_door = "escape_dock_south_starboard_inner"; tag_shuttle_mech_sensor = "shuttle_dock_south_starboard_mech"},/turf/simulated/floor/tiled/dark,/area/hallway/secondary/entry/D2)
"drp" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1380; id_tag = "escape_dock_south_starboard_pump"},/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"drq" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_starboard_airlock"; name = "interior access button"; pixel_x = -26; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drr" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drs" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drt" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock One Aft"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"dru" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"drv" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Dock Two Aft"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
@@ -9024,15 +9017,12 @@
"drB" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"drC" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"drD" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drE" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/arrival/station)
"drF" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drG" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drH" = (/obj/effect/floor_decal/sign/dock/one,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"drI" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D1)
"drJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
"drK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/effect/floor_decal/sign/dock/two,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D2)
-"drL" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/arrival/station)
-"drM" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/shuttle/arrival/station)
"drN" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drO" = (/obj/effect/floor_decal/sign/dock/three,/turf/simulated/floor/tiled,/area/hallway/secondary/entry/D3)
"drP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hallway/secondary/entry/D1)
@@ -10107,7 +10097,6 @@
"dMs" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space)
"dMt" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 4},/obj/structure/lattice,/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/space)
"dMu" = (/obj/structure/cable{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/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/effect/landmark{name = "Observer-Start"},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/dockhallway)
-"dMv" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"dMw" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/shuttle2/arrivals_dock)
"dMx" = (/obj/effect/landmark{name = "carpspawn"},/turf/space,/area/shuttle/response_ship/thirddeck)
"dMy" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "Skynet_launch"; name = "Mech Bay"},/turf/simulated/floor/tiled/dark,/area/assembly/chargebay)
@@ -10571,25 +10560,25 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkaaaaaaaaaaaaaaadmUdnhdnidnjaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaadnkdnldnmdnndnkaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaadnodnpdnqdneaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkaaaaaaaaadnjdmUdnrdnidnsaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaadntdnldnmdnndntaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaadnudnpdnvdnednoaaaaaaaaadnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkdnxdnydnjdnjdnzdnAdnBdnjaaaaaaaafaaaaaadnCdnCdnCdnCdnCdnCdnCaaaaaaaafaaaaaadnkdnldnDdnEdnkaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaadnodnFdnGdnHdnodnodnIdnJdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkdnKdnLdMBdnNdnOdnPdnQdmUaaaaaaaafaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaafaaaaaadmYdnRdnmdnSdmYaaaaaaaafaaaaaadnTdnUdnUdnUdnUdnUdnTaaaaaaaafaaaaaadnednVdnWdnXdnYdnZdoadobdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkdnydocdoddoedofdogdohdnjaaaaaaaafaafdnCdnCdnCdnCdnCdnCdnCdnCdnCaafaafaaaaaadnkdnndnmdnndnkaaaaaaaafaafdnTdoidojdojdojdojdojdoidnTaafaafaaaaaadnodokdoldomdondoodopdnIdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkaaaaaaaaadnjdnjdnhdoqdnjaaaaaadMqaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaadMqaaaaaadnkdnndnmdnndnkaaaaaadMqaaadnUdordosdosdojdosdosdordnUaaadMqaaaaaadnodotdnqdnodnoaaaaaaaaadnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkaaaaaaaaadlkdlkdlkaaaaaaaaaaaadnjdnhdoudnjaaaaaaaafaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaafaaaaaadnkdovdnmdnndnkaaaaaaaafaaadnTdojdowdojdojdojdowdojdnTaaaaafaaaaaadnodoxdnqdnoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNaaaaaaaaadlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkaaaaaaaaaaaaaaadlkdlkaaaaaaaaaaaadmUdoydozdmUaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadmYdoAdoBdoCdmYaaaaaaaaadnTdoidnTdnTdnTdoDdnTdnTdnTdoidnTaaaaaaaaadnedoEdoFdneaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNaaaaaaaaaaaaaaadlNdlNaaaaaaaaadlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaadoGdmUdmUdmUdmUdoHdoIdoedoJdoKdnxdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoLdoMdoNdoOdoPdoQdoRdnkdnkdoSdoLdnTdoTdojdoUdojdojdojdoUdojdoTdnTdnJdnIdoVdnodoWdoXdnednednednedoYaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdoZdpadpbdpcdpddpednCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdpfdpgdphdpidpjdnmdpkdpldpmdpndpodoDdojdojdojdojdojdojdojdojdojdoDdppdpqdprdpsdptdpudneaaaaaaaaaaaadpvdpvaaaaaaaaaaaaaaadpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdnhdpwdpbdpxdpydpzdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdpAdpBdpCdpidpDdnmdpkdpldpEdpFdpodoDdojdojdpGdpHdojdpGdpHdojdojdoDdppdpIdpJdpsdptdnqdnoaaaaaaaaaaaadpvdpvdpvaaaaaaaaadpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKaaaaaaaaaaaadnjdnjdpLdpMdoedpNdpOdnydnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoSdpPdpQdoOdpRdpSdpTdnkdnkdoSdoSdpUdpVdojdpGdpHdpWdpGdpHdojdpXdpUdnIdnIdoVdnodpYdpZdnodnoaaaaaaaaadpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdqadqbdqcdoedqddogdohdqednjaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadnkdqfdnndnmdnndqgdnkaaaaaadnUdqhdojdpGdqidojdqjdpHdojdqkdnUaaaaaadnodqldokdoldqmdondqndqodnIdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdqpdqqdqrdqsdqtdnPdoqdqudmUaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadmYdqvdnndqwdnndqxdmYaaaaaadnUdqydojdpGdqidMvdqjdpHdojdqAdnUaaaaaadnedqBdotdnWdqCdqDdMCdqFdqGdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdnydnydnjdnjdqHdqIdqJdqednjaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadnkdqfdnndqKdqLdqgdnkaaaaaadnUdqhdojdpGdqidojdqjdpHdojdqkdnUaaaaaadnodqldqMdqNdqOdnodnodnIdnJdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKaaaaaaaaaaaadnjdnjdqPdqQdoedoJdoKdnydnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoSdoMdoNdoOdqRdqSdqTdnkdnkdoSdoSdpUdpVdojdpGdpHdojdpGdpHdojdpXdpUdnIdnIdoVdnodqUdqVdnodnoaaaaaaaaadpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdnhdqWdqXdqYdqZdradnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdrbdrcdrddredpDdrfdpkdpldrgdpndpodoDdojdojdpGdpHdojdpGdpHdojdojdoDdppdpqdrhdpsdridnqdnoaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdnhdrjdqXdrkdrldrmdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdrndrodrpdredrqdrfdpkdpldrrdpFdpodoDdojdojdojdojdojdojdojdojdojdoDdppdpIdrsdpsdridnqdneaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaadoGdmUdmUdmUdmUdrtdrudoedpNdpOdnxdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoLdpPdpQdoOdrvdqSdrwdnkdnkdoSdoLdnTdoTdojdowdojdojdojdowdojdoTdnTdnJdnIdoVdnodrxdrydnednednednedoYaaadpvdMwdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdrzdrAdmUaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadmYdrBdrCdrDdmYaaaaaaaaadnTdrEdrEdoidnTdnTdnTdoidrEdrEdnTaaaaaaaaadnedrFdrGdneaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdrHdrIdnjaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadntdrJdrKdnndntaaaaaaaaadnTdrLdrLdnTdrMdrMdrMdnTdrLdrLdnTaaaaaaaaadnodrNdrOdnoaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrPdrQdrRdrSaaaaaaaabdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaabaaaaaadnkdoRdrTdrUdnkaaaaaaaabaaaaaaaaadnTdrLdrLdrLdnTaaaaaaaaaaabaaaaaadrVdrWdrXdrYaaaaaaaabaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkdnKdnLdMBdnNdnOdnPdnQdmUaaaaaaaafaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaafaaaaaadmYdnRdnmdnSdmYaaaaaaaafaaaaaaaaadnTdnTdnTdnTdnTaaaaaaaaaaafaaaaaadnednVdnWdnXdnYdnZdoadobdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkdnydocdoddoedofdogdohdnjaaaaaaaafaafdnCdnCdnCdnCdnCdnCdnCdnCdnCaafaafaaaaaadnkdnndnmdnndnkaaaaaaaafaaaaaadnTdnTdnTdnTdnTdnTdnTaaaaaaaafaaaaaadnodokdoldomdondoodopdnIdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkdlkdlkdlkdlkdlkdlkaaaaaaaaadnjdnjdnhdoqdnjaaaaaadMqaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaadMqaaaaaadnkdnndnmdnndnkaaaaaadMqaaaaaadnTdnTdnTdnTdnTdnTdnTaaaaaadMqaaaaaadnodotdnqdnodnoaaaaaaaaadnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwdnwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNdlNdlNdlNdlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkdlkaaaaaaaaadlkdlkdlkaaaaaaaaaaaadnjdnhdoudnjaaaaaaaafaaadnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaafaaaaaadnkdovdnmdnndnkaaaaaaaafaaadnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaafaaaaaadnodoxdnqdnoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNdlNaaaaaaaaadlNdlNdlNaaaaaadlOdlOdlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlkdlkaaaaaaaaaaaaaaadlkdlkaaaaaaaaaaaadmUdoydozdmUaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadmYdoAdoBdoCdmYaaaaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaaaaadnedoEdoFdneaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadlNdlNaaaaaaaaaaaaaaadlNdlNaaaaaaaaadlOdlOdlOdlOdlOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaadoGdmUdmUdmUdmUdoHdoIdoedoJdoKdnxdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoLdoMdoNdoOdoPdoQdoRdnkdnkdnkdnUdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdoidnodnodnodoWdoXdnednednednedoYaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdoZdpadpbdpcdpddpednCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdpfdpgdphdpidpjdnmdpkdojdordosdowdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdoUdoDdoTdoVdptdpudneaaaaaaaaaaaadpvdpvaaaaaaaaaaaaaaadpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdnhdpwdpbdpxdpydpzdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdpAdpBdpCdpidpDdnmdpkdojdpldpmdpndnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdpndpodppdpqdptdnqdnoaaaaaaaaaaaadpvdpvdpvaaaaaaaaadpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKaaaaaaaaaaaadnjdnjdpLdpMdoedpNdpOdnydnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoSdpPdpQdoOdpRdpSdpTdoOdprdnkdnkdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnodnodnodnIdpYdpZdnodnoaaaaaaaaadpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdqadqbdqcdoedqddogdohdqednjaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadnkdqfdnndnmdnndqgdnkaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaadnodqldokdoldqmdondqndqodnIdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdqpdqqdqrdqsdqtdnPdoqdqudmUaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadmYdqvdnndqwdnndqxdmYaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaadnedqBdotdnWdqCdqDdMCdqFdqGdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdnydnydnjdnjdqHdqIdqJdqednjaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaadnkdqfdnndqKdqLdqgdnkaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaadnodqldqMdqNdqOdnodnodnIdnJdpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadpKdpKdpKdpKdpKdpKdpKdpKdpKdpKdpKaaaaaaaaaaaadnjdnjdqPdqQdoedoJdoKdnydnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoSdoMdoNdoOdqRdqSdqTdnkdnkdnkdnkdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnodnodnodnodqUdqVdnodnoaaaaaaaaadpvdpvdpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdnhdqWdqXdqYdqZdradnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdrbdrcdrddredpDdrfdpkdpsdpEdpFdpGdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdpJdpHdpIdpUdridnqdnoaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdnhdrjdqXdrkdrldrmdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdrndrodrpdredrqdrfdpkdpVdpWdpXdpndnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdpndqhdqidqjdridnqdneaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaadoGdmUdmUdmUdmUdrtdrudoedpNdpOdnxdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdoLdpPdpQdoOdrvdqSdrwdnkdnkdnkdnUdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdoidnodnodnodrxdrydnednednednedoYaaadpvdMwdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmUdrzdrAdmUaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadmYdrBdrCdrDdmYaaaaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaaaaadnedrFdrGdneaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadnjdrHdrIdnjaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadntdrJdrKdnndntaaaaaaaaadnTdnTdnTdnTdnTdnTdnTdnTdnTdnTdnTaaaaaaaaadnodrNdrOdnoaaaaaaaaaaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrPdrQdrRdrSaaaaaaaabdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaabaaaaaadnkdoRdrTdrUdnkaaaaaaaabaaaaaaaaadnTdnTdnTdnTdnTaaaaaaaaaaabaaaaaadrVdrWdrXdrYaaaaaaaabaaaaaadpvdpvdpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadrZdsadsbdrZaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadmYdnkdscdmYdmYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsddsedsedsdaaaaaaaaaaaaaaaaaadpvdpvdpvdpvdpvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsfdsgdshdsiaaaaaaaaadnCdnCdnCdnCdnCdnCdnCdnCdnCdnCdnCaaaaaaaaadnkdsjdskdsldnkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsmdsndsodspaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadocdsqdsrdpOaaaaaaaaaaaaaaaaaadnCdnCdnCdnCdnCaaaaaaaaaaaaaaaaaadoSdssdstdsudoSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsvdswdsxdopaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm
index 678996cf3e..3b59c4c35d 100644
--- a/maps/southern_cross/southern_cross-3.dmm
+++ b/maps/southern_cross/southern_cross-3.dmm
@@ -271,7 +271,7 @@
"fk" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/effect/floor_decal/corner/purple{dir = 6},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoarcheology)
"fl" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/power/emitter{anchored = 1; dir = 1; state = 2},/obj/structure/window/reinforced,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
"fm" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
-"fn" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
+"fn" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 1; tag_north = 2; tag_south = 0; tag_west = 3},/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
"fo" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/effect/floor_decal/industrial/outline/yellow,/obj/structure/window/reinforced,/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoarcheology/anomaly)
"fp" = (/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/firstaid)
"fq" = (/turf/simulated/wall,/area/surface/outpost/mining_main/firstaid)
@@ -709,8 +709,8 @@
"nG" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"nH" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"nI" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
-"nJ" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
-"nK" = (/obj/machinery/atmospherics/omni/filter{tag_east = 2; tag_north = 5; tag_south = 6; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"nJ" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 5; tag_south = 6; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"nK" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"nL" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"nM" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"nN" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
@@ -950,7 +950,7 @@
"sn" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/surface/outpost/main)
"so" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/highsecurity{name = "Telecommunication Hub"; req_one_access = list(10,48,65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/surface/outpost/main/telecomms)
"sp" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
-"sq" = (/obj/machinery/atmospherics/omni/filter{tag_east = 7; tag_north = 2; tag_south = 1; tag_west = 0},/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"sq" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 7; tag_north = 2; tag_south = 1; tag_west = 0},/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sr" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"ss" = (/obj/machinery/atmospherics/pipe/tank/nitrous_oxide{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"st" = (/obj/effect/zone_divider,/turf/simulated/floor/water,/area/surface/center)
@@ -968,7 +968,7 @@
"sF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sG" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sH" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
-"sI" = (/obj/machinery/atmospherics/omni/filter{tag_east = 5; tag_north = 2; tag_south = 1; tag_west = 0},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Engineering Section"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"sI" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 5; tag_north = 2; tag_south = 1; tag_west = 0},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Engineering Section"; dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sJ" = (/obj/machinery/atmospherics/pipe/tank/carbon_dioxide{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sK" = (/turf/simulated/floor/plating/sif/planetuse,/area/shuttle/shuttle2/planet)
"sL" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/red,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/carpet,/area/surface/outpost/main/crew_quarters)
@@ -985,7 +985,7 @@
"sW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/structure/cable/blue,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Asteroid Main Grid"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"sY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
-"sZ" = (/obj/machinery/atmospherics/omni/filter{tag_east = 6; tag_north = 2; tag_south = 1; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
+"sZ" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 6; tag_north = 2; tag_south = 1; tag_west = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"ta" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room)
"tb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue,/turf/simulated/floor/tiled,/area/surface/outpost/main/crew_quarters)
"tc" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/crew_quarters)
@@ -1792,7 +1792,7 @@ aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOagag
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOagagagkOagagagagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqanananaqkQkQlVlulWlXlYlZmamblumchththththththtaqaqaqaqaqaqaqanananaqmdmdmemememfldmgfGmhmimjmkmlmmmlmlmnmomkmpmpmpmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqakakakakakakakajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOagagagagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqanananaqaqkQmqlumrlumsmtmumvmwmxmymzmAmAlukQaqaqaqaqaqaqaqaqanananaqmdmBmCmDmEmFmGmHglmImJmKmomLmMmNmOmPmQmRmSmTmUmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqakakakakakakakajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqkPananaqaqkQmVlumrlumWmXmYmZnanbncncndnenfkQaqaqaqaqaqaqaqaqanananaqmdngnhnimenjnknlnmnnnonpnmnqnrnsntnunvnwnxnynzmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqakakakakakakakajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
-aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqkPananaqaqkQnAnBnCnDlunEnFnGnHnInJnKnLnMnNkQaqaqaqaqaqaqaqaqanananaqmdnOnPnQmenRnSnTbAbAnUbBbAnVnWnXnYnZoanZmSobocmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqakakakakakakakajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
+aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqkPananaqaqkQnAnBnCnDlunEnFnGnHnInKnJnLnMnNkQaqaqaqaqaqaqaqaqanananaqmdnOnPnQmenRnSnTbAbAnUbBbAnVnWnXnYnZoanZmSobocmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqakakakakakakakajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqanananaqaqkQkQodoeodofkQogohkQkQoiojokokkQkQaqaqaqaqaqaqaqaqanananaqmdmdolommeonooopbAoqorosbAotouovowoxoyozmSoAmpmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqajajajajajajajajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqanananaqaqaqkQkQkQkQkQkQoBoCoDkQkQkQkQkQkQaqaqaqaqaqaqaqaqaqanananaqaqmdmdmdmdoEoFoEbAoGcEoHbAmkmlmkmkmlmkmkmpmpmpaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqajajajajajajajajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
aaagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagkOkOkOkOkOkOkOkOkOkOkOagagagagagagagagagagagagagagagagagagagfUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqananananaqaqaqaqaqaqaqaqaqoIoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoJoKaqbAbAoLbBbAaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqaqajajajajajajajajajajajajajajajajajajajajajajaiaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoap
diff --git a/maps/southern_cross/southern_cross-7.dmm b/maps/southern_cross/southern_cross-7.dmm
index 9b1384c2f5..d3cf67b594 100644
--- a/maps/southern_cross/southern_cross-7.dmm
+++ b/maps/southern_cross/southern_cross-7.dmm
@@ -87,6 +87,41 @@
"bI" = (/turf/space/transit/north,/area/shuttle/shuttle2/transit)
"bJ" = (/turf/space/transit/north,/turf/space/transit/south,/area/shuttle/shuttle1/transit)
"bK" = (/turf/space,/area/shuttle/shuttle1/orbit)
+"bL" = (/turf/simulated/shuttle/wall,/area/shuttle/arrival/pre_game)
+"bM" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "arrivals_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13); tag_door = "arrivals_shuttle_hatch"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bN" = (/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bO" = (/obj/structure/showcase{desc = "So that's how the shuttle moves on its own."; icon = 'icons/mob/AI.dmi'; icon_state = "ai-red"; name = "Arrivals Announcement Computer"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bP" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bQ" = (/obj/machinery/computer/shuttle_control/arrivals,/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bR" = (/obj/machinery/light,/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bS" = (/obj/structure/table/steel,/obj/structure/flora/pottedplant{icon_state = "plant-09"; name = "Dave"; pixel_y = 15; tag = "icon-plant-09"},/turf/simulated/shuttle/floor{tag = "icon-floor_red"; icon_state = "floor_red"},/area/shuttle/arrival/pre_game)
+"bT" = (/obj/structure/sign/warning/secure_area,/turf/simulated/shuttle/wall,/area/shuttle/arrival/pre_game)
+"bU" = (/obj/machinery/status_display,/turf/simulated/shuttle/wall,/area/shuttle/arrival/pre_game)
+"bV" = (/obj/machinery/door/airlock/silver{icon_state = "door_locked"; locked = 1; name = "Employees Only"; secured_wires = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"bW" = (/obj/machinery/ai_status_display,/turf/simulated/shuttle/wall,/area/shuttle/arrival/pre_game)
+"bX" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"bY" = (/turf/simulated/shuttle/wall/hard_corner,/area/shuttle/arrival/pre_game)
+"bZ" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"ca" = (/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cb" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "arrivals_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"cc" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cd" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"ce" = (/turf/simulated/shuttle/wall/no_join,/area/shuttle/arrival/pre_game)
+"cf" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cg" = (/obj/effect/landmark/start,/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"ch" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"ci" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/arrival/pre_game)
+"cj" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"ck" = (/obj/structure/bed/chair{dir = 4},/obj/structure/window/reinforced{dir = 8; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cl" = (/obj/structure/bed/chair{dir = 8},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cm" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cn" = (/obj/structure/bed/chair{dir = 4},/obj/effect/landmark{name = "JoinLate"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"co" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"cp" = (/obj/structure/bed/chair{dir = 8},/obj/effect/landmark{name = "JoinLate"},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/shuttle/floor/white,/area/shuttle/arrival/pre_game)
+"cq" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/pre_game)
+"cr" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/shuttle/arrival/pre_game)
+"cs" = (/turf/space,/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/arrival/pre_game)
+"ct" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating/airless,/area/shuttle/arrival/pre_game)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababab
@@ -160,38 +195,38 @@ ahajajajajajajalalalalalalalajajajajajajahajajajajajajalalalalalalalajajajajajaj
ahajajajajajajalaAaAaAaAaAalajajajajajajahajajajajajajalaBaBaBaBaBalajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaoaaapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ahajajajajajajalaAaAaAaAaAalajajajajajajahajajajajajajalaBaBaBaBaBalajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
ahajajajajajajalaAaAaAaAaAalajajajajajajahajajajajajajalaBaBaBaBaBalajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaaaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalalalalalalalajajajajajajahajajajajajajalalalalalalalajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiaiaiaiaiaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaDaDaDaDaDaDaDaDaDaDaDaDajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalalalalalalalalalalalalalajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaDaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaEaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHalalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaFaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaGaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaFaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaGaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaFaFaFaFaFaFaFaFaFaFaFaFaIajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaGaGaGaGaGaGaGaGaGaGaGaGaJaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaFaFaFaFaFaFaFaFaFaFaFaIaIajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaGaGaGaGaGaGaGaGaGaGaGaJaJaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalalalalalalalalalajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHalalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaIaIaIaIaIaIaIaIaIaIaIaIajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaJaJaJaJaJaJaJaJaJaJaJaJaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajalalalalalalalalalalalalalajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajalalalalalalalalalalalalalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajalalaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajalalalalalalalalalajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaaaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaaaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajalalaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajajalalalalalalalalalalalalalajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-ahahahahahahahahahahahahahahahahahahahahahahahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalalalalalalalajajajajajajahajajajajajajalalalalalalalajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaagacacacacacacacacacacabababababababacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajaiaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacacacacacacababbLbLbLbLbLababacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiaiaiaiaiaiaaaaaaaaaaaaaaaaaaabacacacacacacacacacabbLbLbMbObNbLbLabacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacacababbLbQbPbNbRbSbLababacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaDaDaDaDaDaDaDaDaDaDaDaDajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalalalalalalalalalalalalalajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacababbLbLbUbTbVbLbWbLbLababacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaDaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaEaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHalalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabbLbYbXbZbXbXbXbZbXbYbLabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaFaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaGaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabbLcabXbXbXbXbXbXbXcabLabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaDaFaFaFaFaFaFaFaFaFaFaFaFaDajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaEaGaGaGaGaGaGaGaGaGaGaGaGaEaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcbbXbXbXbXbXbXbXbXbXcbabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaFaFaFaFaFaFaFaFaFaFaFaFaIajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaGaGaGaGaGaGaGaGaGaGaGaGaJaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHaHalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcbbXbXcdccbXcdccbXbXcbabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaFaFaFaFaFaFaFaFaFaFaFaIaIajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaGaGaGaGaGaGaGaGaGaGaGaJaJaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalalalalalalalalalajajajajajajahajajalaHaHaHaHaHaHaHaHaHaHaHalalajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacabcecfbXcdcccgcdccbXchceabacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajaIaIaIaIaIaIaIaIaIaIaIaIaIajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaJaJaJaJaJaJaJaJaJaJaJaJaJaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajalalalalalalalalalalalalalajajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacabcicjbXcdckbXclccbXcmciabacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcicnbXcdckcoclccbXcpciabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcicjbXcdckbXclccbXcmciabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcecfbXcdccbXcdccbXchceabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcbbXbXcdccbXcdccbXbXcbabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabcbbXbXbXbXbXbXbXbXbXcbabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajajalalalalalalalalalalalalalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacabbLcabXcqbXbXbXcqbXcabLabacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalaKaKaKaKaKaKaKalajajajajajajahajajalalaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacabbLcrcrbYbLbLbLbYcrcrbLabacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajahaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajalalalalalalalalalajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacabbLcscsbLctctctbLcscsbLabacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaaaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacababababbLcscscsbLababababacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalaLaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacacacacabababababababacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaaaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajalalaLaLaLaLaLaLaLaLaLaLaLalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajajalalalalalalalalalalalalalajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaagacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahajajajajajajajajajajajajajajajajajajajajajahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+ahahahahahahahahahahahahahahahahahahahahahahahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaabacacacacacacacacacacacacacacacacacacacacacacacacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahajajajajajajajajajajajajajajajajajajajajajajahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaQaQaQaQaQaQaOaQaQaQaOaOaOaQaQaQaOaQaQaQaQaQaQaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaRaRaRaRaRaRaPaRaRaRaPaPaPaRaRaRaPaRaRaRaRaRaRaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahahahahahahahahahahahahahahahahahahahahahahahahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaMaOaOaOaOaOaOaOaQaSaSaSaSaQaOaQaSaQaQaQaQaQaSaQaOaQaSaSaSaSaQaOaOaOaOaOaOaOaMaaaNaPaPaPaPaPaPaPaRaTaTaTaTaRaPaRaTaRaRaRaRaRaTaRaPaRaTaTaTaTaRaPaPaPaPaPaPaPaNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -345,3 +380,4 @@ aabDbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbDaaaCaaaaaaaaaaaaaaaaaaaaaaaa
aabDbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbEbDaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabvbvbvbvbvbvbvbvbvbvbvbvbvbvbvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaaabababababababababababababababababababababababababaa
aabDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDbDaaaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/polaris.dme b/polaris.dme
index 5f12fb4565..551c3d2775 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -234,8 +234,8 @@
#include "code\datums\outfits\spec_op.dm"
#include "code\datums\outfits\tournament.dm"
#include "code\datums\outfits\wizardry.dm"
+#include "code\datums\outfits\costumes\costume.dm"
#include "code\datums\outfits\costumes\halloween.dm"
-#include "code\datums\outfits\jobs\_defines.dm"
#include "code\datums\outfits\jobs\cargo.dm"
#include "code\datums\outfits\jobs\civilian.dm"
#include "code\datums\outfits\jobs\command.dm"
@@ -279,6 +279,7 @@
#include "code\datums\uplink\ammunition.dm"
#include "code\datums\uplink\announcements.dm"
#include "code\datums\uplink\armor.dm"
+#include "code\datums\uplink\backup.dm"
#include "code\datums\uplink\badassery.dm"
#include "code\datums\uplink\grenades.dm"
#include "code\datums\uplink\hardsuit_modules.dm"
@@ -795,6 +796,7 @@
#include "code\game\objects\effects\decals\posters\polarisposters.dm"
#include "code\game\objects\effects\spawners\bombspawner.dm"
#include "code\game\objects\effects\spawners\gibspawner.dm"
+#include "code\game\objects\items\antag_spawners.dm"
#include "code\game\objects\items\apc_frame.dm"
#include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\bodybag.dm"
@@ -1775,7 +1777,6 @@
#include "code\modules\mob\living\silicon\robot\robot_damage.dm"
#include "code\modules\mob\living\silicon\robot\robot_items.dm"
#include "code\modules\mob\living\silicon\robot\robot_movement.dm"
-#include "code\modules\mob\living\silicon\robot\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_abilities.dm"
#include "code\modules\mob\living\silicon\robot\drone\drone_console.dm"
@@ -1788,6 +1789,7 @@
#include "code\modules\mob\living\silicon\robot\robot_modules\syndicate.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\gravekeeper.dm"
#include "code\modules\mob\living\silicon\robot\subtypes\lost_drone.dm"
+#include "code\modules\mob\living\silicon\robot\subtypes\syndicate.dm"
#include "code\modules\mob\living\simple_animal\corpse.dm"
#include "code\modules\mob\living\simple_animal\simple_animal.dm"
#include "code\modules\mob\living\simple_animal\aliens\alien.dm"
diff --git a/sound/misc/clapping.ogg b/sound/misc/clapping.ogg
new file mode 100644
index 0000000000..4ecdc2aa22
Binary files /dev/null and b/sound/misc/clapping.ogg differ
diff --git a/sound/misc/longwhistle.ogg b/sound/misc/longwhistle.ogg
new file mode 100644
index 0000000000..0a2e822515
Binary files /dev/null and b/sound/misc/longwhistle.ogg differ
diff --git a/sound/misc/shortwhistle.ogg b/sound/misc/shortwhistle.ogg
new file mode 100644
index 0000000000..82ef01af3d
Binary files /dev/null and b/sound/misc/shortwhistle.ogg differ