| [capitalize(ore)] | [machine.ores_stored[ore]] | 0 && ores_processing[metal] != 0)
- var/datum/ore/O = ore_data[metal]
+ var/ore/O = ore_data[metal]
if(!O) continue
@@ -206,24 +209,28 @@
var/can_make = Clamp(ores_stored[metal],0,sheets_per_tick-sheets)
if(can_make%2>0) can_make--
- if(!can_make || ores_stored[metal] < 1)
+ var/material/M = name_to_material[O.compresses_to]
+
+ if(!istype(M) || !can_make || ores_stored[metal] < 1)
continue
for(var/i=0,i 0)
var/stacktype = machine.stack_paths[href_list["release_stack"]]
- var/obj/item/stack/sheet/S = new stacktype (get_turf(machine.output))
+ var/obj/item/stack/material/S = new stacktype (get_turf(machine.output))
S.amount = machine.stack_storage[href_list["release_stack"]]
machine.stack_storage[href_list["release_stack"]] = 0
@@ -81,18 +81,18 @@
/obj/machinery/mineral/stacking_machine/New()
..()
- for(var/stacktype in typesof(/obj/item/stack/sheet/mineral)-/obj/item/stack/sheet/mineral)
+ for(var/stacktype in typesof(/obj/item/stack/material)-/obj/item/stack/material)
var/obj/item/stack/S = new stacktype(src)
stack_storage[S.name] = 0
stack_paths[S.name] = stacktype
qdel(S)
stack_storage["glass"] = 0
- stack_paths["glass"] = /obj/item/stack/sheet/glass
- stack_storage["metal"] = 0
- stack_paths["metal"] = /obj/item/stack/sheet/metal
+ stack_paths["glass"] = /obj/item/stack/material/glass
+ stack_storage[DEFAULT_WALL_MATERIAL] = 0
+ stack_paths[DEFAULT_WALL_MATERIAL] = /obj/item/stack/material/steel
stack_storage["plasteel"] = 0
- stack_paths["plasteel"] = /obj/item/stack/sheet/plasteel
+ stack_paths["plasteel"] = /obj/item/stack/material/plasteel
spawn( 5 )
for (var/dir in cardinal)
@@ -122,7 +122,7 @@
for(var/sheet in stack_storage)
if(stack_storage[sheet] >= stack_amt)
var/stacktype = stack_paths[sheet]
- var/obj/item/stack/sheet/S = new stacktype (get_turf(output))
+ var/obj/item/stack/material/S = new stacktype (get_turf(output))
S.amount = stack_amt
stack_storage[sheet] -= stack_amt
diff --git a/code/modules/mining/mine_items.dm b/code/modules/mining/mine_items.dm
index f616d57ac44..2a472459f00 100644
--- a/code/modules/mining/mine_items.dm
+++ b/code/modules/mining/mine_items.dm
@@ -1,12 +1,3 @@
-/**********************Light************************/
-
-//this item is intended to give the effect of entering the mine, so that light gradually fades
-/obj/effect/light_emitter
- name = "Light-emtter"
- anchored = 1
- unacidable = 1
- luminosity = 8
-
/**********************Miner Lockers**************************/
/obj/structure/closet/secure_closet/miner
@@ -35,8 +26,7 @@
new /obj/item/device/flashlight/lantern(src)
new /obj/item/weapon/shovel(src)
new /obj/item/weapon/pickaxe(src)
- new /obj/item/clothing/glasses/meson(src)
-
+ new /obj/item/clothing/glasses/material(src)
/******************************Lantern*******************************/
@@ -59,9 +49,9 @@
icon_state = "pickaxe"
item_state = "jackhammer"
w_class = 4.0
- matter = list("metal" = 3750)
+ matter = list(DEFAULT_WALL_MATERIAL = 3750)
var/digspeed = 40 //moving the delay to an item var so R&D can make improved picks. --NEO
- origin_tech = "materials=1;engineering=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
attack_verb = list("hit", "pierced", "sliced", "attacked")
var/drill_sound = 'sound/weapons/Genhit.ogg'
var/drill_verb = "drilling"
@@ -79,7 +69,7 @@
icon_state = "spickaxe"
item_state = "spickaxe"
digspeed = 30
- origin_tech = "materials=3"
+ origin_tech = list(TECH_MATERIAL = 3)
desc = "This makes no metallurgic sense."
/obj/item/weapon/pickaxe/drill
@@ -87,7 +77,7 @@
icon_state = "handdrill"
item_state = "jackhammer"
digspeed = 30
- origin_tech = "materials=2;powerstorage=3;engineering=2"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
desc = "Yours is the drill that will pierce through the rock walls."
drill_verb = "drilling"
@@ -96,7 +86,7 @@
icon_state = "jackhammer"
item_state = "jackhammer"
digspeed = 20 //faster than drill, but cannot dig
- origin_tech = "materials=3;powerstorage=2;engineering=2"
+ origin_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
desc = "Cracks rocks with sonic blasts, perfect for killing cave lizards."
drill_verb = "hammering"
@@ -105,7 +95,7 @@
icon_state = "gpickaxe"
item_state = "gpickaxe"
digspeed = 20
- origin_tech = "materials=4"
+ origin_tech = list(TECH_MATERIAL = 4)
desc = "This makes no metallurgic sense."
drill_verb = "picking"
@@ -116,9 +106,10 @@
w_class = 3.0 //it is smaller than the pickaxe
damtype = "fire"
digspeed = 20 //Can slice though normal walls, all girders, or be used in reinforced wall deconstruction/ light thermite on fire
- origin_tech = "materials=4;phorontech=3;engineering=3"
+ origin_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
desc = "A rock cutter that uses bursts of hot plasma. You could use it to cut limbs off of xenos! Or, you know, mine stuff."
drill_verb = "cutting"
+ drill_sound = 'sound/items/Welder.ogg'
sharp = 1
edge = 1
@@ -127,7 +118,7 @@
icon_state = "dpickaxe"
item_state = "dpickaxe"
digspeed = 10
- origin_tech = "materials=6;engineering=4"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_ENGINERING = 4)
desc = "A pickaxe with a diamond pick head."
drill_verb = "picking"
@@ -136,7 +127,7 @@
icon_state = "diamonddrill"
item_state = "jackhammer"
digspeed = 5 //Digs through walls, girders, and can dig up sand
- origin_tech = "materials=6;powerstorage=4;engineering=5"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 5)
desc = "Yours is the drill that will pierce the heavens!"
drill_verb = "drilling"
@@ -161,8 +152,8 @@
throwforce = 4.0
item_state = "shovel"
w_class = 3.0
- matter = list("metal" = 50)
- origin_tech = "materials=1;engineering=1"
+ origin_tech = list(TECH_MATERIAL = 1, TECH_ENGINERING = 1)
+ matter = list(DEFAULT_WALL_MATERIAL = 50)
attack_verb = list("bashed", "bludgeoned", "thrashed", "whacked")
sharp = 0
edge = 1
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index d713f716480..c523c8f8307 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -1,5 +1,8 @@
/**********************Mineral deposits**************************/
-
+/turf/unsimulated/mineral
+ name = "impassable rock"
+ icon = 'icons/turf/walls.dmi'
+ icon_state = "rock-dark"
/turf/simulated/mineral //wall piece
name = "Rock"
@@ -11,7 +14,8 @@
density = 1
blocks_air = 1
temperature = T0C
- var/mineral/mineral
+ var/mined_turf = /turf/simulated/floor/plating/airless/asteroid
+ var/ore/mineral
var/mined_ore = 0
var/last_act = 0
var/emitter_blasts_taken = 0 // EMITTER MINING! Muhehe.
@@ -28,21 +32,20 @@
has_resources = 1
/turf/simulated/mineral/New()
-
spawn(0)
MineralSpread()
-
spawn(2)
- var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
- for(var/direction in step_overlays)
- var/turf/turf_to_check = get_step(src,step_overlays[direction])
+ updateMineralOverlays(1)
- if(istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
- var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
- T.updateMineralOverlays()
-
- else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
- turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
+/turf/simulated/mineral/proc/updateMineralOverlays(var/update_neighbors)
+ var/list/step_overlays = list("s" = NORTH, "n" = SOUTH, "w" = EAST, "e" = WEST)
+ for(var/direction in step_overlays)
+ var/turf/turf_to_check = get_step(src,step_overlays[direction])
+ if(update_neighbors && istype(turf_to_check,/turf/simulated/floor/plating/airless/asteroid))
+ var/turf/simulated/floor/plating/airless/asteroid/T = turf_to_check
+ T.updateMineralOverlays()
+ else if(istype(turf_to_check,/turf/space) || istype(turf_to_check,/turf/simulated/floor))
+ turf_to_check.overlays += image('icons/turf/walls.dmi', "rock_side_[direction]")
/turf/simulated/mineral/ex_act(severity)
switch(severity)
@@ -95,13 +98,13 @@
/turf/simulated/mineral/proc/UpdateMineral()
+ clear_ore_effects()
if(!mineral)
name = "\improper Rock"
icon_state = "rock"
return
name = "\improper [mineral.display_name] deposit"
- overlays.Cut()
- overlays += "rock_[mineral.name]"
+ new /obj/effect/mineral(src, mineral)
//Not even going to touch this pile of spaghetti
/turf/simulated/mineral/attackby(obj/item/weapon/W as obj, mob/user as mob)
@@ -234,10 +237,15 @@
else
return attack_hand(user)
+/turf/simulated/mineral/proc/clear_ore_effects()
+ for(var/obj/effect/mineral/M in contents)
+ qdel(M)
+
/turf/simulated/mineral/proc/DropMineral()
if(!mineral)
return
+ clear_ore_effects()
var/obj/item/weapon/ore/O = new mineral.ore (src)
if(istype(O))
geologic_data.UpdateNearbyArtifactInfo(src)
@@ -274,8 +282,8 @@
var/list/step_overlays = list("n" = NORTH, "s" = SOUTH, "e" = EAST, "w" = WEST)
//Add some rubble, you did just clear out a big chunk of rock.
- var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
- N.overlay_detail = "asteroid[rand(0,9)]"
+
+ var/turf/simulated/floor/plating/airless/asteroid/N = ChangeTurf(mined_turf)
// Kill and update the space overlays around us.
for(var/direction in step_overlays)
@@ -286,13 +294,9 @@
if(istype(get_step(T, step_overlays[next_direction]),/turf/simulated/mineral))
T.overlays += image('icons/turf/walls.dmi', "rock_side_[next_direction]")
- // Update the
- N.updateMineralOverlays(1)
-
- if(rand(1,500) == 1)
- visible_message("An old dusty crate was buried within!")
- new /obj/structure/closet/crate/secure/loot(src)
-
+ if(istype(N))
+ N.overlay_detail = "asteroid[rand(0,9)]"
+ N.updateMineralOverlays(1)
/turf/simulated/mineral/proc/excavate_find(var/prob_clean = 0, var/datum/find/F)
//with skill and luck, players can cleanly extract finds
@@ -340,25 +344,25 @@
R.amount = rand(1,5)
if(3)
- var/obj/item/stack/sheet/metal/R = new(src)
+ var/obj/item/stack/material/steel/R = new(src)
R.amount = rand(5,25)
if(4)
- var/obj/item/stack/sheet/plasteel/R = new(src)
+ var/obj/item/stack/material/plasteel/R = new(src)
R.amount = rand(5,25)
if(5)
var/quantity = rand(1,3)
for(var/i=0, iChoose")
dat += text(" Iron inserted: [amt_iron] ")
- if (chosen == "metal")
+ if (chosen == DEFAULT_WALL_MATERIAL)
dat += text("chosen")
else
dat += text("Choose")
@@ -133,7 +133,7 @@
icon_state = "coinpress1"
var/obj/item/weapon/moneybag/M
switch(chosen)
- if("metal")
+ if(DEFAULT_WALL_MATERIAL)
while(amt_iron > 0 && coinsToProduce > 0)
if (locate(/obj/item/weapon/moneybag,output.loc))
M = locate(/obj/item/weapon/moneybag,output.loc)
diff --git a/code/modules/mining/ore.dm b/code/modules/mining/ore.dm
index 30385d49a5b..ef501c0325f 100644
--- a/code/modules/mining/ore.dm
+++ b/code/modules/mining/ore.dm
@@ -4,71 +4,71 @@
icon_state = "ore2"
w_class = 2
var/datum/geosample/geologic_data
- var/oretag
+ var/material
/obj/item/weapon/ore/uranium
name = "pitchblende"
- icon_state = "Uranium ore"
- origin_tech = "materials=5"
- oretag = "uranium"
+ icon_state = "ore_uranium"
+ origin_tech = list(TECH_MATERIAL = 5)
+ material = "uranium"
/obj/item/weapon/ore/iron
name = "hematite"
- icon_state = "Iron ore"
- origin_tech = "materials=1"
- oretag = "hematite"
+ icon_state = "ore_iron"
+ origin_tech = list(TECH_MATERIAL = 1)
+ material = "hematite"
/obj/item/weapon/ore/coal
- name = "carbonaceous rock"
- icon_state = "Coal ore"
- origin_tech = "materials=1"
- oretag = "coal"
+ name = "raw carbon"
+ icon_state = "ore_coal"
+ origin_tech = list(TECH_MATERIAL = 1)
+ material = "carbon"
/obj/item/weapon/ore/glass
name = "impure silicates"
- icon_state = "Glass ore"
- origin_tech = "materials=1"
- oretag = "sand"
+ icon_state = "ore_glass"
+ origin_tech = list(TECH_MATERIAL = 1)
+ material = "sand"
/obj/item/weapon/ore/phoron
name = "phoron crystals"
- icon_state = "Phoron ore"
- origin_tech = "materials=2"
- oretag = "phoron"
+ icon_state = "ore_phoron"
+ origin_tech = list(TECH_MATERIAL = 2)
+ material = "phoron"
/obj/item/weapon/ore/silver
name = "native silver ore"
- icon_state = "Silver ore"
- origin_tech = "materials=3"
- oretag = "silver"
+ icon_state = "ore_silver"
+ origin_tech = list(TECH_MATERIAL = 3)
+ material = "silver"
/obj/item/weapon/ore/gold
name = "native gold ore"
- icon_state = "Gold ore"
- origin_tech = "materials=4"
- oretag = "gold"
+ icon_state = "ore_gold"
+ origin_tech = list(TECH_MATERIAL = 4)
+ material = "gold"
/obj/item/weapon/ore/diamond
name = "diamonds"
- icon_state = "Diamond ore"
- origin_tech = "materials=6"
- oretag = "diamond"
+ icon_state = "ore_diamond"
+ origin_tech = list(TECH_MATERIAL = 6)
+ material = "diamond"
/obj/item/weapon/ore/osmium
name = "raw platinum"
- icon_state = "Platinum ore"
- oretag = "platinum"
+ icon_state = "ore_platinum"
+ material = "platinum"
/obj/item/weapon/ore/hydrogen
name = "raw hydrogen"
- icon_state = "Phazon"
- oretag = "hydrogen"
+ icon_state = "ore_hydrogen"
+ material = "mhydrogen"
/obj/item/weapon/ore/slag
name = "Slag"
- desc = "Completely useless"
+ desc = "Someone screwed up..."
icon_state = "slag"
- oretag = "slag"
+ material = null
/obj/item/weapon/ore/New()
pixel_x = rand(0,16)-8
diff --git a/code/modules/mining/ore_datum.dm b/code/modules/mining/ore_datum.dm
index b3689d3abb8..32f03c072f9 100644
--- a/code/modules/mining/ore_datum.dm
+++ b/code/modules/mining/ore_datum.dm
@@ -1,52 +1,133 @@
-/datum/ore
- var/oretag
+var/global/list/ore_data = list()
+
+/ore
+ var/name
+ var/display_name
var/alloy
var/smelts_to
var/compresses_to
+ var/result_amount // How much ore?
+ var/spread = 1 // Does this type of deposit spread?
+ var/spread_chance // Chance of spreading in any direction
+ var/ore // Path to the ore produced when tile is mined.
+ var/scan_icon // Overlay for ore scanners.
+ // Xenoarch stuff. No idea what it's for, just refactored it to be less awful.
+ var/list/xarch_ages = list(
+ "thousand" = 999,
+ "million" = 999
+ )
+ var/xarch_source_mineral = "iron"
-/datum/ore/uranium
- smelts_to = /obj/item/stack/sheet/mineral/uranium
- oretag = "uranium"
+/ore/New()
+ . = ..()
+ if(!display_name)
+ display_name = name
-/datum/ore/iron
- smelts_to = /obj/item/stack/sheet/mineral/iron
+/ore/uranium
+ name = "uranium"
+ display_name = "pitchblende"
+ smelts_to = "uranium"
+ result_amount = 5
+ spread_chance = 10
+ ore = /obj/item/weapon/ore/uranium
+ scan_icon = "mineral_uncommon"
+ xarch_ages = list(
+ "thousand" = 999,
+ "million" = 704
+ )
+ xarch_source_mineral = "potassium"
+
+/ore/hematite
+ name = "hematite"
+ display_name = "hematite"
+ smelts_to = "iron"
alloy = 1
- oretag = "hematite"
+ result_amount = 5
+ spread_chance = 25
+ ore = /obj/item/weapon/ore/iron
+ scan_icon = "mineral_common"
-/datum/ore/coal
- smelts_to = /obj/item/stack/sheet/mineral/plastic
+/ore/coal
+ name = "carbon"
+ display_name = "raw carbon"
+ smelts_to = "plastic"
alloy = 1
- oretag = "coal"
+ result_amount = 5
+ spread_chance = 25
+ ore = /obj/item/weapon/ore/coal
+ scan_icon = "mineral_common"
-/datum/ore/glass
- smelts_to = /obj/item/stack/sheet/glass
- compresses_to = /obj/item/stack/sheet/mineral/sandstone
- oretag = "sand"
+/ore/glass
+ name = "sand"
+ display_name = "impure silicates"
+ smelts_to = "glass"
+ compresses_to = "sandstone"
-/datum/ore/phoron
+/ore/phoron
+ name = "phoron"
+ display_name = "phoron crystals"
+ compresses_to = "phoron"
//smelts_to = something that explodes violently on the conveyor, huhuhuhu
- compresses_to = /obj/item/stack/sheet/mineral/phoron
- oretag = "phoron"
+ result_amount = 5
+ spread_chance = 25
+ ore = /obj/item/weapon/ore/phoron
+ scan_icon = "mineral_uncommon"
+ xarch_ages = list(
+ "thousand" = 999,
+ "million" = 999,
+ "billion" = 13,
+ "billion_lower" = 10
+ )
+ xarch_source_mineral = "phoron"
-/datum/ore/silver
- smelts_to = /obj/item/stack/sheet/mineral/silver
- oretag = "silver"
+/ore/silver
+ name = "silver"
+ display_name = "native silver"
+ smelts_to = "silver"
+ result_amount = 5
+ spread_chance = 10
+ ore = /obj/item/weapon/ore/silver
+ scan_icon = "mineral_uncommon"
-/datum/ore/gold
- smelts_to = /obj/item/stack/sheet/mineral/gold
- oretag = "gold"
+/ore/gold
+ smelts_to = "gold"
+ name = "gold"
+ display_name = "native gold"
+ result_amount = 5
+ spread_chance = 10
+ ore = /obj/item/weapon/ore/gold
+ scan_icon = "mineral_uncommon"
+ xarch_ages = list(
+ "thousand" = 999,
+ "million" = 999,
+ "billion" = 4,
+ "billion_lower" = 3
+ )
-/datum/ore/diamond
- compresses_to = /obj/item/stack/sheet/mineral/diamond
- oretag = "diamond"
+/ore/diamond
+ name = "diamond"
+ display_name = "diamond"
+ compresses_to = "diamond"
+ result_amount = 5
+ spread_chance = 10
+ ore = /obj/item/weapon/ore/diamond
+ scan_icon = "mineral_rare"
+ xarch_source_mineral = "nitrogen"
-/datum/ore/osmium
- smelts_to = /obj/item/stack/sheet/mineral/platinum
- compresses_to = /obj/item/stack/sheet/mineral/osmium
+/ore/platinum
+ name = "platinum"
+ display_name = "raw platinum"
+ smelts_to = "platinum"
+ compresses_to = "osmium"
alloy = 1
- oretag = "platinum"
+ result_amount = 5
+ spread_chance = 10
+ ore = /obj/item/weapon/ore/osmium
+ scan_icon = "mineral_rare"
-/datum/ore/hydrogen
- smelts_to = /obj/item/stack/sheet/mineral/tritium
- compresses_to = /obj/item/stack/sheet/mineral/mhydrogen
- oretag = "hydrogen"
+/ore/hydrogen
+ name = "mhydrogen"
+ display_name = "metallic hydrogen"
+ smelts_to = "tritium"
+ compresses_to = "mhydrogen"
+ scan_icon = "mineral_rare"
\ No newline at end of file
diff --git a/code/modules/mob/animations.dm b/code/modules/mob/animations.dm
new file mode 100644
index 00000000000..ac4224dc436
--- /dev/null
+++ b/code/modules/mob/animations.dm
@@ -0,0 +1,163 @@
+/*
+adds a dizziness amount to a mob
+use this rather than directly changing var/dizziness
+since this ensures that the dizzy_process proc is started
+currently only humans get dizzy
+
+value of dizziness ranges from 0 to 1000
+below 100 is not dizzy
+*/
+
+/mob/var/dizziness = 0//Carbon
+/mob/var/is_dizzy = 0
+
+/mob/proc/make_dizzy(var/amount)
+ if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
+ return
+
+ dizziness = min(1000, dizziness + amount) // store what will be new value
+ // clamped to max 1000
+ if(dizziness > 100 && !is_dizzy)
+ spawn(0)
+ dizzy_process()
+
+
+/*
+dizzy process - wiggles the client's pixel offset over time
+spawned from make_dizzy(), will terminate automatically when dizziness gets <100
+note dizziness decrements automatically in the mob's Life() proc.
+*/
+/mob/proc/dizzy_process()
+ is_dizzy = 1
+ while(dizziness > 100)
+ if(client)
+ var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70
+ client.pixel_x = amplitude * sin(0.008 * dizziness * world.time)
+ client.pixel_y = amplitude * cos(0.008 * dizziness * world.time)
+
+ sleep(1)
+ //endwhile - reset the pixel offsets to zero
+ is_dizzy = 0
+ if(client)
+ client.pixel_x = 0
+ client.pixel_y = 0
+
+// jitteriness - copy+paste of dizziness
+/mob/var/is_jittery = 0
+/mob/var/jitteriness = 0//Carbon
+/mob/proc/make_jittery(var/amount)
+ if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
+ return
+
+ jitteriness = min(1000, jitteriness + amount) // store what will be new value
+ // clamped to max 1000
+ if(jitteriness > 100 && !is_jittery)
+ spawn(0)
+ jittery_process()
+
+
+// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above.
+/mob/proc/jittery_process()
+ //var/old_x = pixel_x
+ //var/old_y = pixel_y
+ is_jittery = 1
+ while(jitteriness > 100)
+// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70
+// pixel_x = amplitude * sin(0.008 * jitteriness * world.time)
+// pixel_y = amplitude * cos(0.008 * jitteriness * world.time)
+
+ var/amplitude = min(4, jitteriness / 100)
+ pixel_x = old_x + rand(-amplitude, amplitude)
+ pixel_y = old_y + rand(-amplitude/3, amplitude/3)
+
+ sleep(1)
+ //endwhile - reset the pixel offsets to zero
+ is_jittery = 0
+ pixel_x = old_x
+ pixel_y = old_y
+
+
+//handles up-down floaty effect in space
+/mob/var/is_floating = 0
+/mob/var/floatiness = 0
+
+/mob/proc/make_floating(var/n)
+
+ floatiness = n
+
+ if(floatiness && !is_floating)
+ start_floating()
+ else if(!floatiness && is_floating)
+ stop_floating()
+
+/mob/proc/start_floating()
+
+ is_floating = 1
+
+ var/amplitude = 2 //maximum displacement from original position
+ var/period = 36 //time taken for the mob to go up >> down >> original position, in deciseconds. Should be multiple of 4
+
+ var/top = old_y + amplitude
+ var/bottom = old_y - amplitude
+ var/half_period = period / 2
+ var/quarter_period = period / 4
+
+ animate(src, pixel_y = top, time = quarter_period, easing = SINE_EASING | EASE_OUT, loop = -1) //up
+ animate(pixel_y = bottom, time = half_period, easing = SINE_EASING, loop = -1) //down
+ animate(pixel_y = old_y, time = quarter_period, easing = SINE_EASING | EASE_IN, loop = -1) //back
+
+/mob/proc/stop_floating()
+ animate(src, pixel_y = old_y, time = 5, easing = SINE_EASING | EASE_IN) //halt animation
+ //reset the pixel offsets to zero
+ is_floating = 0
+
+/atom/movable/proc/do_attack_animation(atom/A)
+
+ var/pixel_x_diff = 0
+ var/pixel_y_diff = 0
+ var/direction = get_dir(src, A)
+ switch(direction)
+ if(NORTH)
+ pixel_y_diff = 8
+ if(SOUTH)
+ pixel_y_diff = -8
+ if(EAST)
+ pixel_x_diff = 8
+ if(WEST)
+ pixel_x_diff = -8
+ if(NORTHEAST)
+ pixel_x_diff = 8
+ pixel_y_diff = 8
+ if(NORTHWEST)
+ pixel_x_diff = -8
+ pixel_y_diff = 8
+ if(SOUTHEAST)
+ pixel_x_diff = 8
+ pixel_y_diff = -8
+ if(SOUTHWEST)
+ pixel_x_diff = -8
+ pixel_y_diff = -8
+ animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff, time = 2)
+ animate(pixel_x = initial(pixel_x), pixel_y = initial(pixel_y), time = 2)
+
+/mob/do_attack_animation(atom/A)
+ ..()
+ is_floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement.
+
+/mob/proc/spin(spintime, speed)
+ spawn()
+ var/D = dir
+ while(spintime >= speed)
+ sleep(speed)
+ switch(D)
+ if(NORTH)
+ D = EAST
+ if(SOUTH)
+ D = WEST
+ if(EAST)
+ D = SOUTH
+ if(WEST)
+ D = NORTH
+ set_dir(D)
+ spintime -= speed
+ return
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index 4ce1b6edd3c..c8d5651b299 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -202,13 +202,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
statpanel("Status")
if (client.statpanel == "Status")
stat(null, "Station Time: [worldtime2text()]")
- if(ticker)
- if(ticker.mode)
- //world << "DEBUG: ticker not null"
- if(ticker.mode.name == "AI malfunction")
- //world << "DEBUG: malf mode ticker test"
- if(malf.revealed)
- stat(null, "Time left: [max(malf.hack_time/(malf.hacked_apcs.len/3), 0)]")
if(emergency_shuttle)
var/eta_status = emergency_shuttle.get_status_panel_eta()
if(eta_status)
@@ -436,9 +429,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Spawning as a mouse is currently disabled."
return
- var/mob/dead/observer/M = usr
- if(config.antag_hud_restricted && M.has_enabled_antagHUD == 1)
- src << "antagHUD restrictions prevent you from spawning in as a mouse."
+ if(!MayRespawn(1))
return
var/timedifference = world.time - client.time_died_as_mouse
@@ -677,3 +668,16 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
client.images |= ghost_darkness_images
if (ghostimage)
client.images -= ghostimage //remove ourself
+
+mob/dead/observer/MayRespawn(var/feedback = 0)
+ if(!client || !mind)
+ return 0
+ if(mind.current && mind.current.stat != DEAD)
+ if(feedback)
+ src << "Your non-dead body prevent you from respawning."
+ return 0
+ if(config.antag_hud_restricted && has_enabled_antagHUD == 1)
+ if(feedback)
+ src << "antagHUD restrictions prevent you from respawning."
+ return 0
+ return 1
diff --git a/code/modules/mob/emote.dm b/code/modules/mob/emote.dm
index 5645773ea0b..54f31d5b5ba 100644
--- a/code/modules/mob/emote.dm
+++ b/code/modules/mob/emote.dm
@@ -24,8 +24,6 @@
if (message)
log_emote("[name]/[key] : [message]")
- var/list/seeing_obj = list() //For objs that need to see emotes. You can use see_emote(), which is based off of hear_talk()
-
//Hearing gasp and such every five seconds is not good emotes were not global for a reason.
// Maybe some people are okay with that.
@@ -37,58 +35,31 @@
if(findtext(message," snores.")) //Because we have so many sleeping people.
break
if(M.stat == 2 && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
- M.show_message(message)
+ M.show_message(message, m_type)
- for(var/I in view(world.view, get_turf(usr))) //get_turf is needed to stop weirdness with x-ray.
- if(istype(I, /mob/))
- var/mob/M = I
- for(var/obj/O in M.contents)
- seeing_obj |= O
- else if(istype(I, /obj/))
- var/obj/O = I
- seeing_obj |= O
-
- // Type 1 (Visual) emotes are sent to anyone in view of the item
if (m_type & 1)
- //for (var/mob/O in viewers(src, null))
- for (var/mob/O in viewers(get_turf(src), null)) //This may break people with x-ray being able to see emotes across walls,
- //but this saves many headaches down the road, involving mechs and pAIs.
- //x-ray is so rare these days anyways.
+ var/list/see = get_mobs_or_objects_in_view(world.view,src) | viewers(get_turf(src), null)
+ for(var/I in see)
+ if(isobj(I))
+ spawn(0)
+ if(I) //It's possible that it could be deleted in the meantime.
+ var/obj/O = I
+ O.see_emote(src, message, 1)
+ else if(ismob(I))
+ var/mob/M = I
+ M.show_message(message, 1)
- if(O.status_flags & PASSEMOTES)
-
- for(var/obj/item/weapon/holder/H in O.contents)
- H.show_message(message, m_type)
-
- for(var/mob/living/M in O.contents)
- M.show_message(message, m_type)
-
- O.show_message(message, m_type)
-
- for(var/obj/O in seeing_obj)
- spawn(0)
- if(O) //It's possible that it could be deleted in the meantime.
- O.see_emote(src, message, 1)
-
- // Type 2 (Audible) emotes are sent to anyone in hear range
- // of the *LOCATION* -- this is important for AIs/pAIs to be heard
else if (m_type & 2)
- for (var/mob/O in hearers(get_turf(src), null))
-
- if(O.status_flags & PASSEMOTES)
-
- for(var/obj/item/weapon/holder/H in O.contents)
- H.show_message(message, m_type)
-
- for(var/mob/living/M in O.contents)
- M.show_message(message, m_type)
-
- O.show_message(message, m_type)
-
- for(var/obj/O in seeing_obj)
- spawn(0)
- if(O) //It's possible that it could be deleted in the meantime.
- O.see_emote(src, message, 2)
+ var/list/hear = get_mobs_or_objects_in_view(world.view,src)
+ for(var/I in hear)
+ if(isobj(I))
+ spawn(0)
+ if(I) //It's possible that it could be deleted in the meantime.
+ var/obj/O = I
+ O.see_emote(src, message, 2)
+ else if(ismob(I))
+ var/mob/M = I
+ M.show_message(message, 2)
/mob/proc/emote_dead(var/message)
diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm
index 327b39fbf27..8a91d0540e6 100644
--- a/code/modules/mob/freelook/ai/update_triggers.dm
+++ b/code/modules/mob/freelook/ai/update_triggers.dm
@@ -28,7 +28,7 @@
if(src.can_use())
cameranet.addCamera(src)
else
- src.SetLuminosity(0)
+ src.set_light(0)
cameranet.removeCamera(src)
/obj/machinery/camera/New()
diff --git a/code/modules/mob/freelook/eye.dm b/code/modules/mob/freelook/eye.dm
index bec261797d3..fb2b04a4348 100644
--- a/code/modules/mob/freelook/eye.dm
+++ b/code/modules/mob/freelook/eye.dm
@@ -8,6 +8,7 @@
icon = 'icons/mob/eye.dmi'
icon_state = "default-eye"
alpha = 127
+ density = 0
var/sprint = 10
var/cooldown = 0
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 6347a091f45..26cbefc4825 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -5,9 +5,12 @@
icon = 'icons/obj/objects.dmi'
slot_flags = SLOT_HEAD
sprite_sheets = list("Vox" = 'icons/mob/species/vox/head.dmi')
+ item_icons = list(
+ slot_l_hand_str = 'icons/mob/items/lefthand_holder.dmi',
+ slot_r_hand_str = 'icons/mob/items/righthand_holder.dmi',
+ )
/obj/item/weapon/holder/New()
- item_state = icon_state
..()
processing_objects.Add(src)
@@ -32,10 +35,6 @@
for(var/mob/M in src.contents)
M.attackby(W,user)
-/obj/item/weapon/holder/proc/show_message(var/message, var/m_type)
- for(var/mob/living/M in contents)
- M.show_message(message,m_type)
-
//Mob procs and vars for scooping up
/mob/living/var/holder_type
@@ -51,7 +50,7 @@
grabber << "You scoop up [src]."
src << "[grabber] scoops you up."
grabber.status_flags |= PASSEMOTES
- return
+ return H
//Mob specific holders.
@@ -59,14 +58,14 @@
name = "diona nymph"
desc = "It's a tiny plant critter."
icon_state = "nymph"
- origin_tech = "magnets=3;biotech=5"
+ origin_tech = list(TECH_MAGNET = 3, TECH_BIO = 5)
slot_flags = SLOT_HEAD | SLOT_OCLOTHING
/obj/item/weapon/holder/drone
name = "maintenance drone"
desc = "It's a small maintenance robot."
icon_state = "drone"
- origin_tech = "magnets=3;engineering=5"
+ origin_tech = list(TECH_MAGNET = 3, TECH_ENGINERING = 5)
/obj/item/weapon/holder/cat
name = "cat"
@@ -74,11 +73,27 @@
icon_state = "cat"
origin_tech = null
+/obj/item/weapon/holder/mouse
+ name = "mouse"
+ desc = "It's a small rodent."
+ icon_state = "mouse_gray"
+ origin_tech = null
+ w_class = 1
+
+/obj/item/weapon/holder/mouse/gray
+ icon_state = "mouse_gray"
+
+/obj/item/weapon/holder/mouse/white
+ icon_state = "mouse_white"
+
+/obj/item/weapon/holder/mouse/brown
+ icon_state = "mouse_brown"
+
/obj/item/weapon/holder/borer
name = "cortical borer"
desc = "It's a slimy brain slug. Gross."
icon_state = "borer"
- origin_tech = "biotech=6"
+ origin_tech = list(TECH_BIO = 6)
/obj/item/weapon/holder/monkey
name = "monkey"
@@ -99,3 +114,8 @@
name = "neaera"
desc = "It's a neaera."
icon_state = "neara"
+
+/obj/item/weapon/holder/pai
+ name = "pAI"
+ desc = "It's a little robot."
+ icon_state = "pai"
diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm
index 5a5e7d10441..d835ea64467 100644
--- a/code/modules/mob/inventory.dm
+++ b/code/modules/mob/inventory.dm
@@ -155,7 +155,7 @@ var/list/slot_equipment_priority = list( \
Target = loc
remove_from_mob(W)
- if(!W) return 1 // self destroying objects (tk, grabs)
+ if(!(W && W.loc)) return 1 // self destroying objects (tk, grabs)
W.forceMove(Target)
update_icons()
@@ -218,7 +218,7 @@ var/list/slot_equipment_priority = list( \
drop_from_inventory(I)
return 1
-//Attemps to remove an object on a mob. Will not move it to another area or such, just removes from the mob.
+//Attemps to remove an object on a mob.
/mob/proc/remove_from_mob(var/obj/O)
src.u_equip(O)
if (src.client)
@@ -227,6 +227,7 @@ var/list/slot_equipment_priority = list( \
O.screen_loc = null
if(istype(O, /obj/item))
var/obj/item/I = O
+ I.loc = src.loc
I.dropped(src)
return 1
diff --git a/code/modules/mob/language/station.dm b/code/modules/mob/language/station.dm
index d5900769b35..bb343c0e7ff 100644
--- a/code/modules/mob/language/station.dm
+++ b/code/modules/mob/language/station.dm
@@ -94,6 +94,25 @@
else
return ..()
+/datum/language/machine
+ name = "Encoded Audio Language"
+ desc = "A language of encoded tones that allow for IPCs to communicate auditorily between each other in a manner that allows for easier transfer of information."
+ speech_verb = "beeps"
+ ask_verb = "beeps"
+ exclaim_verb = "loudly beeps"
+ colour = "changeling"
+ key = "6"
+ flags = RESTRICTED | NO_STUTTER
+ syllables = list("beep","beep","beep","beep","beep","boop","boop","boop","bop","bop","dee","dee","doo","doo","hiss","hss","buzz","buzz","bzz","ksssh","keey","wurr","wahh","tzzz")
+ space_chance = 10
+
+/datum/language/machine/get_random_name()
+ if(prob(70))
+ name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
+ else
+ name = pick(ai_names)
+ return name
+
//Syllable Lists
/*
This list really long, mainly because I can't make up my mind about which mandarin syllables should be removed,
diff --git a/code/modules/mob/living/bot/bot.dm b/code/modules/mob/living/bot/bot.dm
index b9f8c9b4dfd..649e4e57640 100644
--- a/code/modules/mob/living/bot/bot.dm
+++ b/code/modules/mob/living/bot/bot.dm
@@ -110,14 +110,17 @@
if(stat)
return 0
on = 1
- SetLuminosity(light_strength)
+ set_light(light_strength)
update_icons()
return 1
/mob/living/bot/proc/turn_off()
on = 0
- SetLuminosity(0)
+ set_light(0)
update_icons()
/mob/living/bot/proc/explode()
- qdel(src)
\ No newline at end of file
+ qdel(src)
+
+/mob/living/bot/attack_throat()
+ return
diff --git a/code/modules/mob/living/bot/cleanbot.dm b/code/modules/mob/living/bot/cleanbot.dm
index fa28343547d..73310108523 100644
--- a/code/modules/mob/living/bot/cleanbot.dm
+++ b/code/modules/mob/living/bot/cleanbot.dm
@@ -226,7 +226,7 @@
beacon_freq = freq
if("screw")
screwloose = !screwloose
- usr << "You twiddle the screw."
if("oddbutton")
oddbutton = !oddbutton
usr << "You press the weird button."
diff --git a/code/modules/mob/living/bot/farmbot.dm b/code/modules/mob/living/bot/farmbot.dm
index f1c84f38662..7900b385279 100644
--- a/code/modules/mob/living/bot/farmbot.dm
+++ b/code/modules/mob/living/bot/farmbot.dm
@@ -228,6 +228,7 @@
switch(action)
if("weed")
flick("farmbot_hoe", src)
+ do_attack_animation(A)
if(prob(50))
visible_message("[src] swings wildly at [A] with a minihoe, missing completely!")
return
@@ -241,7 +242,7 @@
visible_message("[src] blows apart!")
var/turf/Tsec = get_turf(src)
- new /obj/item/weapon/minihoe(Tsec)
+ new /obj/item/weapon/material/minihoe(Tsec)
new /obj/item/weapon/reagent_containers/glass/bucket(Tsec)
new /obj/item/device/assembly/prox_sensor(Tsec)
new /obj/item/device/analyzer/plant_analyzer(Tsec)
@@ -326,7 +327,7 @@
user.remove_from_mob(W)
qdel(W)
- else if((istype(W, /obj/item/weapon/minihoe)) && (build_step == 2))
+ else if((istype(W, /obj/item/weapon/material/minihoe)) && (build_step == 2))
build_step++
user << "You add a minihoe to [src]."
name = "farmbot assembly with bucket and minihoe"
diff --git a/code/modules/mob/living/bot/floorbot.dm b/code/modules/mob/living/bot/floorbot.dm
index 08c5ac1c4bd..8d61d0bb035 100644
--- a/code/modules/mob/living/bot/floorbot.dm
+++ b/code/modules/mob/living/bot/floorbot.dm
@@ -154,7 +154,7 @@
target = T
break
if(maketiles && !target)
- for(var/obj/item/stack/sheet/metal/T in view(src))
+ for(var/obj/item/stack/material/steel/T in view(src))
if(T in ignorelist)
continue
target = T
@@ -249,8 +249,8 @@
target = null
repairing = 0
update_icons()
- else if(istype(A, /obj/item/stack/sheet/metal) && amount + 3 < maxAmount)
- var/obj/item/stack/sheet/metal/M = A
+ else if(istype(A, /obj/item/stack/material/steel) && amount + 3 < maxAmount)
+ var/obj/item/stack/material/steel/M = A
visible_message("[src] begins to make tiles.")
repairing = 1
update_icons()
diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm
index d6e20a9641b..f3b2a353390 100644
--- a/code/modules/mob/living/bot/medbot.dm
+++ b/code/modules/mob/living/bot/medbot.dm
@@ -103,8 +103,7 @@
update_icons()
if(do_mob(src, H, 30))
if(t == 1)
- reagent_glass.reagents.trans_to(H, injection_amount)
- reagent_glass.reagents.reaction(H, 2)
+ reagent_glass.reagents.trans_to_mob(H, injection_amount, CHEM_BLOOD)
else
H.reagents.add_reagent(t, injection_amount)
visible_message("[src] injects [H] with the syringe!")
diff --git a/code/modules/mob/living/bot/secbot.dm b/code/modules/mob/living/bot/secbot.dm
index eba380340f6..848da5633a5 100644
--- a/code/modules/mob/living/bot/secbot.dm
+++ b/code/modules/mob/living/bot/secbot.dm
@@ -264,6 +264,7 @@
if(!cuff)
C.stun_effect_act(0, 60, null)
playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1)
+ do_attack_animation(C)
is_attacking = 1
update_icons()
spawn(2)
@@ -283,6 +284,7 @@
var/mob/living/simple_animal/S = M
S.AdjustStunned(10)
S.adjustBruteLoss(15)
+ do_attack_animation(M)
playsound(loc, "swing_hit", 50, 1, -1)
is_attacking = 1
update_icons()
diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm
index c9b3175eb8b..7bf1842b0f7 100644
--- a/code/modules/mob/living/carbon/alien/alien.dm
+++ b/code/modules/mob/living/carbon/alien/alien.dm
@@ -23,10 +23,6 @@
verbs += /mob/living/proc/ventcrawl
verbs += /mob/living/proc/hide
- var/datum/reagents/R = new/datum/reagents(100)
- reagents = R
- R.my_atom = src
-
name = "[initial(name)] ([rand(1, 1000)])"
real_name = name
regenerate_icons()
diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm
index 5faeadbdcc3..981e2507494 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona.dm
@@ -31,4 +31,4 @@
/mob/living/carbon/alien/diona/put_in_hands(var/obj/item/W) // No hands.
W.loc = get_turf(src)
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
index 58aba691dda..956171abf7c 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_attacks.dm
@@ -1,16 +1,10 @@
-/mob/living/carbon/alien/diona/attack_hand(mob/living/carbon/human/M as mob)
-
- if(istype(M))
- //Let people pick the little buggers up.
- if(M.a_intent == I_HELP)
- if(M.species && M.species.name == "Diona")
- M << "You feel your being twine with that of [src] as it merges with your biomass."
- src << "You feel your being twine with that of [M] as you merge with its biomass."
- src.verbs += /mob/living/carbon/alien/diona/proc/split
- src.verbs -= /mob/living/carbon/alien/diona/proc/merge
- src.loc = M
- else
- get_scooped(M)
+/mob/living/carbon/alien/diona/MouseDrop(atom/over_object)
+ var/mob/living/carbon/H = over_object
+ if(!istype(H) || !Adjacent(H)) return ..()
+ if(H.a_intent == "help")
+ if(H.species && H.species.name == "Diona" && do_merge(H))
return
-
- ..()
\ No newline at end of file
+ get_scooped(H)
+ return
+ else
+ return ..()
diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
index 65e1f6b1c00..54678e1ea01 100644
--- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
+++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm
@@ -24,18 +24,21 @@
var/mob/living/M = input(src,"Who do you wish to merge with?") in null|choices
- if(!M || !src || !(src.Adjacent(M))) return
+ if(!M)
+ src << "There is nothing nearby to merge with."
+ else if(!do_merge(M))
+ src << "You fail to merge with \the [M]..."
- if(istype(M,/mob/living/carbon/human))
- M << "You feel your being twine with that of [src] as it merges with your biomass."
- M.status_flags |= PASSEMOTES
-
- src << "You feel your being twine with that of [M] as you merge with its biomass."
- src.loc = M
- src.verbs += /mob/living/carbon/alien/diona/proc/split
- src.verbs -= /mob/living/carbon/alien/diona/proc/merge
- else
- return
+/mob/living/carbon/alien/diona/proc/do_merge(var/mob/living/carbon/human/H)
+ if(!istype(H) || !src || !(src.Adjacent(H)))
+ return 0
+ H << "You feel your being twine with that of \the [src] as it merges with your biomass."
+ H.status_flags |= PASSEMOTES
+ src << "You feel your being twine with that of \the [H] as you merge with its biomass."
+ loc = H
+ verbs += /mob/living/carbon/alien/diona/proc/split
+ verbs -= /mob/living/carbon/alien/diona/proc/merge
+ return 1
/mob/living/carbon/alien/diona/proc/split()
diff --git a/code/modules/mob/living/carbon/alien/diona/life.dm b/code/modules/mob/living/carbon/alien/diona/life.dm
index 5a82e3f373c..ec0dd5d7e17 100644
--- a/code/modules/mob/living/carbon/alien/diona/life.dm
+++ b/code/modules/mob/living/carbon/alien/diona/life.dm
@@ -4,10 +4,12 @@
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = min(10,T.lighting_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
- else light_amount = 5
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 5
+
nutrition += light_amount
diff --git a/code/modules/mob/living/carbon/brain/MMI.dm b/code/modules/mob/living/carbon/brain/MMI.dm
index c98c6304f5d..49e8c6ad528 100644
--- a/code/modules/mob/living/carbon/brain/MMI.dm
+++ b/code/modules/mob/living/carbon/brain/MMI.dm
@@ -23,9 +23,9 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "mmi_empty"
w_class = 3
- origin_tech = "biotech=3"
+ origin_tech = list(TECH_BIO = 3)
- var/list/construction_cost = list("metal"=1000,"glass"=500)
+ var/list/construction_cost = list(DEFAULT_WALL_MATERIAL=1000,"glass"=500)
var/construction_time = 75
//these vars are so the mecha fabricator doesn't shit itself anymore. --NEO
@@ -35,6 +35,7 @@
var/locked = 0
var/mob/living/carbon/brain/brainmob = null//The current occupant.
+ var/obj/item/organ/brain/brainobj = null //The current brain organ.
var/obj/mecha = null//This does not appear to be used outside of reference in mecha.dm.
attackby(var/obj/item/O as obj, var/mob/user as mob)
@@ -60,7 +61,8 @@
living_mob_list += brainmob
user.drop_item()
- qdel(O)
+ brainobj = O
+ brainobj.loc = src
name = "Man-Machine Interface: [brainmob.real_name]"
icon_state = "mmi_full"
@@ -91,7 +93,13 @@
user << "\red You upend the MMI, but the brain is clamped into place."
else
user << "\blue You upend the MMI, spilling the brain onto the floor."
- var/obj/item/organ/brain/brain = new(user.loc)
+ var/obj/item/organ/brain/brain
+ if (brainobj) //Pull brain organ out of MMI.
+ brainobj.loc = user.loc
+ brain = brainobj
+ brainobj = null
+ else //Or make a new one if empty.
+ brain = new(user.loc)
brainmob.container = null//Reset brainmob mmi var.
brainmob.loc = brain//Throw mob into brain.
living_mob_list -= brainmob//Get outta here
@@ -126,7 +134,7 @@
/obj/item/device/mmi/radio_enabled
name = "radio-enabled man-machine interface"
desc = "The Warrior's bland acronym, MMI, obscures the true horror of this monstrosity. This one comes with a built-in radio."
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/obj/item/device/radio/radio = null//Let's give it a radio.
diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm
index 486916821bc..da1e59f0dea 100644
--- a/code/modules/mob/living/carbon/brain/brain_item.dm
+++ b/code/modules/mob/living/carbon/brain/brain_item.dm
@@ -1,6 +1,6 @@
/obj/item/organ/brain
name = "brain"
- health = 400 //They need to live awhile longer than other organs.
+ health = 400 //They need to live awhile longer than other organs. Is this even used by organ code anymore?
desc = "A piece of juicy meat found in a person's head."
organ_tag = "brain"
parent_organ = "head"
@@ -11,7 +11,7 @@
throwforce = 1.0
throw_speed = 3
throw_range = 5
- origin_tech = "biotech=3"
+ origin_tech = list(TECH_BIO = 3)
attack_verb = list("attacked", "slapped", "whacked")
var/mob/living/carbon/brain/brainmob = null
@@ -92,4 +92,4 @@
desc = "A tightly furled roll of paper, covered with indecipherable runes."
robotic = 2
icon = 'icons/obj/wizard.dmi'
- icon_state = "scroll"
\ No newline at end of file
+ icon_state = "scroll"
diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm
index 8e8a26d883d..189dfd81e7c 100644
--- a/code/modules/mob/living/carbon/brain/life.dm
+++ b/code/modules/mob/living/carbon/brain/life.dm
@@ -105,7 +105,18 @@
proc/handle_chemicals_in_body()
- if(reagents) reagents.metabolize(src)
+ chem_effects.Cut()
+ analgesic = 0
+
+ if(touching)
+ touching.metabolize(0, CHEM_TOUCH)
+ if(ingested)
+ ingested.metabolize(0, CHEM_INGEST)
+ if(reagents)
+ reagents.metabolize(0, CHEM_BLOOD)
+
+ if(CE_PAINKILLER in chem_effects)
+ analgesic = chem_effects[CE_PAINKILLER]
confused = max(0, confused - 1)
// decrement dizziness counter, clamped to 0
diff --git a/code/modules/mob/living/carbon/brain/posibrain.dm b/code/modules/mob/living/carbon/brain/posibrain.dm
index 08f2e34243b..3c2d4422d1f 100644
--- a/code/modules/mob/living/carbon/brain/posibrain.dm
+++ b/code/modules/mob/living/carbon/brain/posibrain.dm
@@ -4,48 +4,42 @@
icon = 'icons/obj/assemblies.dmi'
icon_state = "posibrain"
w_class = 3
- origin_tech = "engineering=4;materials=4;bluespace=2;programming=4"
-
- construction_cost = list("metal"=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10)
- construction_time = 75
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2, TECH_DATA = 4)
var/searching = 0
- var/askDelay = 10 * 60 * 1
+ construction_cost = list(DEFAULT_WALL_MATERIAL=500,"glass"=500,"silver"=200,"gold"=200,"phoron"=100,"diamond"=10)
+ construction_time = 75
req_access = list(access_robotics)
locked = 0
mecha = null//This does not appear to be used outside of reference in mecha.dm.
+/obj/item/device/mmi/digital/posibrain/New()
+ ..()
+ brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
+ brainmob.real_name = src.brainmob.name
-/obj/item/device/mmi/digital/posibrain/attack_self(mob/user as mob)
- if(brainmob && !brainmob.key && searching == 0)
+/obj/item/device/mmi/digital/posibrain/attack_self(var/mob/user)
+ if(brainmob && !brainmob.key && !searching)
//Start the process of searching for a new user.
- user << "\blue You carefully locate the manual activation switch and start the positronic brain's boot process."
+ user << "You carefully locate the manual activation switch and start the positronic brain's boot process."
icon_state = "posibrain-searching"
- src.searching = 1
- src.request_player()
+ searching = 1
+ var/datum/ghosttrap/G = get_ghost_trap("positronic brain")
+ G.request_player(brainmob, "A [src.name] has been booted by \the [user] in [get_area(user)]. ")
spawn(600) reset_search()
-/obj/item/device/mmi/digital/posibrain/proc/request_player()
- for(var/mob/dead/observer/O in player_list)
- if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
- continue
- if(jobban_isbanned(O, "AI") && jobban_isbanned(O, "Cyborg"))
- continue
- if(O.client)
- if(O.client.prefs.be_special & BE_AI)
- question(O.client)
-
-/obj/item/device/mmi/digital/posibrain/proc/question(var/client/C)
- spawn(0)
- if(!C) return
- var/response = alert(C, "Someone is requesting a personality for a positronic brain. Would you like to play as one?", "Positronic brain request", "Yes", "No", "Never for this round")
- if(response == "Yes")
- response = alert(C, "Are you sure you want to play as a positronic brain?", "Positronic brain request", "Yes", "No")
- if(!C || brainmob.key || 0 == searching) return //handle logouts that happen whilst the alert is waiting for a response, and responses issued after a brain has been located.
- if(response == "Yes")
- transfer_personality(C.mob)
- else if (response == "Never for this round")
- C.prefs.be_special ^= BE_AI
-
+/obj/item/device/mmi/digital/posibrain/attack_ghost(var/mob/dead/observer/user)
+ var/datum/ghosttrap/G = get_ghost_trap("positronic brain")
+ if(!G.assess_candidate(user))
+ return
+ var/response = alert(user, "Are you sure you want to play as a positronic brain?", "Positronic brain request", "Yes", "No")
+ if(response == "Yes")
+ if(G.transfer_personality(user, brainmob))
+ var/turf/T = get_turf(src)
+ T.visible_message("\The [src] chimes quietly.")
+ searching = 0
+ name = "positronic brain ([brainmob.name])"
+ icon_state = "posibrain-occupied"
+ return
/obj/item/device/mmi/digital/posibrain/transfer_identity(var/mob/living/carbon/H)
..()
@@ -55,33 +49,13 @@
icon_state = "posibrain-occupied"
return
-/obj/item/device/mmi/digital/posibrain/proc/transfer_personality(var/mob/candidate)
- announce_ghost_joinleave(candidate, 0, "They are occupying a positronic brain now.")
- src.searching = 0
- src.brainmob.mind = candidate.mind
- src.brainmob.ckey = candidate.ckey
- src.name = "positronic brain ([src.brainmob.name])"
- src.brainmob << "You are a positronic brain, brought into existence on [station_name()]."
- src.brainmob << "As a synthetic intelligence, you answer to all crewmembers, as well as the AI."
- src.brainmob << "Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm."
- src.brainmob << "Use say :b to speak to other artificial intelligences."
- src.brainmob.mind.assigned_role = "Positronic Brain"
-
- var/turf/T = get_turf_or_move(src.loc)
- for (var/mob/M in viewers(T))
- M.show_message("\blue The positronic brain chimes quietly.")
- icon_state = "posibrain-occupied"
-
-/obj/item/device/mmi/digital/posibrain/proc/reset_search() //We give the players sixty seconds to decide, then reset the timer.
-
- if(src.brainmob && src.brainmob.key) return
-
- src.searching = 0
+/obj/item/device/mmi/digital/posibrain/proc/reset_search()
+ if(!searching || (src.brainmob && src.brainmob.key))
+ return
+ searching = 0
icon_state = "posibrain"
-
- var/turf/T = get_turf_or_move(src.loc)
- for (var/mob/M in viewers(T))
- M.show_message("\blue The positronic brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
+ var/turf/T = get_turf(src)
+ T.visible_message("\The [src] brain buzzes quietly, and the golden lights fade away. Perhaps you could try again?")
/obj/item/device/mmi/digital/posibrain/examine(mob/user)
if(!..(user))
@@ -115,7 +89,3 @@
src.brainmob.emp_damage += rand(0,10)
..()
-/obj/item/device/mmi/digital/posibrain/New()
- ..()
- src.brainmob.name = "[pick(list("PBU","HIU","SINA","ARMA","OSI"))]-[rand(100, 999)]"
- src.brainmob.real_name = src.brainmob.name
diff --git a/code/modules/mob/living/carbon/brain/robot.dm b/code/modules/mob/living/carbon/brain/robot.dm
index bc7a13c2c2a..873b55d5182 100644
--- a/code/modules/mob/living/carbon/brain/robot.dm
+++ b/code/modules/mob/living/carbon/brain/robot.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/module.dmi'
icon_state = "mainboard"
w_class = 3
- origin_tech = "engineering=4;materials=3;programming=4"
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 3, TECH_DATA = 4)
/obj/item/device/mmi/digital/robot/New()
..()
diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm
index 38e1efa71b8..62f14da4996 100644
--- a/code/modules/mob/living/carbon/breathe.dm
+++ b/code/modules/mob/living/carbon/breathe.dm
@@ -2,14 +2,14 @@
/mob/living/carbon/proc/breathe()
//if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) return
- if(species && (species.flags & NO_BREATHE || species.flags & IS_SYNTHETIC)) return
-
+ if(species && (species.flags & NO_BREATHE)) return
+
var/datum/gas_mixture/breath = null
-
+
//First, check if we can breathe at all
- if(health < config.health_threshold_crit && !reagents.has_reagent("inaprovaline")) //crit aka circulatory shock
+ if(health < config.health_threshold_crit && !(CE_STABLE in chem_effects)) //crit aka circulatory shock
losebreath++
-
+
if(losebreath>0) //Suffocating so do not take a breath
losebreath--
if (prob(10)) //Gasp per 10 ticks? Sounds about right.
@@ -17,9 +17,9 @@
else
//Okay, we can breathe, now check if we can get air
breath = get_breath_from_internal() //First, check for air from internals
- if(!breath)
+ if(!breath)
breath = get_breath_from_environment() //No breath from internals so let's try to get air from our location
-
+
handle_breath(breath)
handle_post_breath(breath)
@@ -40,15 +40,15 @@
/mob/living/carbon/proc/get_breath_from_environment(var/volume_needed=BREATH_VOLUME)
var/datum/gas_mixture/breath = null
-
+
var/datum/gas_mixture/environment
if(loc)
environment = loc.return_air_for_internal_lifeform()
-
+
if(environment)
breath = environment.remove_volume(volume_needed)
handle_chemical_smoke(environment) //handle chemical smoke while we're at it
-
+
if(breath)
//handle mask filtering
if(istype(wear_mask, /obj/item/clothing/mask) && breath)
@@ -65,11 +65,9 @@
for(var/obj/effect/effect/smoke/chem/smoke in view(1, src))
if(smoke.reagents.total_volume)
- smoke.reagents.reaction(src, INGEST)
- spawn(5)
- if(smoke)
- //maybe check air pressure here or something to see if breathing in smoke is even possible.
- smoke.reagents.copy_to(src, 10) // I dunno, maybe the reagents enter the blood stream through the lungs?
+ smoke.reagents.trans_to_mob(src, 10, CHEM_INGEST, copy = 1)
+ //maybe check air pressure here or something to see if breathing in smoke is even possible.
+ // I dunno, maybe the reagents enter the blood stream through the lungs?
break // If they breathe in the nasty stuff once, no need to continue checking
/mob/living/carbon/proc/handle_breath(datum/gas_mixture/breath)
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 6647b7c9304..ad191db2570 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -1,3 +1,13 @@
+/mob/living/carbon/New()
+ create_reagents(1000)
+ var/datum/reagents/R1 = new/datum/reagents(1000)
+ var/datum/reagents/R2 = new/datum/reagents(1000)
+ ingested = R1
+ touching = R2
+ R1.my_atom = src
+ R2.my_atom = src
+ ..()
+
/mob/living/carbon/Life()
..()
@@ -122,7 +132,7 @@
/mob/living/carbon/proc/swap_hand()
var/obj/item/item_in_hand = src.get_active_hand()
if(item_in_hand) //this segment checks if the item in your hand is twohanded.
- if(istype(item_in_hand,/obj/item/weapon/twohanded))
+ if(istype(item_in_hand,/obj/item/weapon/material/twohanded))
if(item_in_hand:wielded == 1)
usr << "Your other hand is too busy holding the [item_in_hand.name]"
return
@@ -163,7 +173,7 @@
)
for(var/obj/item/organ/external/org in H.organs)
- var/status = ""
+ var/list/status = list()
var/brutedamage = org.brute_dam
var/burndamage = org.burn_dam
if(halloss > 0)
@@ -171,29 +181,39 @@
brutedamage += halloss
if(prob(30))
burndamage += halloss
+ switch(brutedamage)
+ if(1 to 20)
+ status += "bruised"
+ if(20 to 40)
+ status += "wounded"
+ if(40 to INFINITY)
+ status += "mangled"
- if(brutedamage > 0)
- status = "bruised"
- if(brutedamage > 20)
- status = "bleeding"
- if(brutedamage > 40)
- status = "mangled"
- if(brutedamage > 0 && burndamage > 0)
- status += " and "
- if(burndamage > 40)
- status += "peeling away"
+ switch(burndamage)
+ if(1 to 10)
+ status += "numb"
+ if(10 to 40)
+ status += "blistered"
+ if(40 to INFINITY)
+ status += "peeling away"
- else if(burndamage > 10)
- status += "blistered"
- else if(burndamage > 0)
- status += "numb"
if(org.status & ORGAN_DESTROYED)
- status = "MISSING!"
+ status += "MISSING"
if(org.status & ORGAN_MUTATED)
- status = "weirdly shapen."
- if(status == "")
- status = "OK"
- src.show_message(text("\t []My [] is [].",status=="OK"?"\blue ":"\red ",org.name,status),1)
+ status += "weirdly shapen"
+ if(org.dislocated == 2)
+ status += "dislocated"
+ if(org.status & ORGAN_BROKEN)
+ status += "hurts when touched"
+ if(org.status & ORGAN_DEAD)
+ status += "is bruised and necrotic"
+ if(!org.is_usable())
+ status += "dangling uselessly"
+ if(status.len)
+ src.show_message("My [org.name] is [english_list(status)].",1)
+ else
+ src.show_message("My [org.name] is OK.",1)
+
if((SKELETON in H.mutations) && (!H.w_uniform) && (!H.wear_suit))
H.play_xylophone()
else if (on_fire)
@@ -229,7 +249,10 @@
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
- if(player_logged)
+ var/show_ssd
+ var/mob/living/carbon/human/H = src
+ if(istype(H)) show_ssd = H.species.show_ssd
+ if(show_ssd && (!client || !key || player_logged))
M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \
"You shake [src], but they do not respond... Maybe they have S.S.D?")
else if(lying || src.sleeping)
@@ -239,7 +262,6 @@
M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \
"You shake [src] trying to wake [t_him] up!")
else
- var/mob/living/carbon/human/H = M
if(istype(H))
H.species.hug(H,src)
else
@@ -391,25 +413,6 @@
return
-/mob/living/carbon/show_inv(mob/living/carbon/user as mob)
- user.set_machine(src)
- var/dat = {"
- [name]
-
- Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
- Left Hand: [(l_hand ? l_hand : "Nothing")]
- Right Hand: [(r_hand ? r_hand : "Nothing")]
- Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
- [(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
- [(internal ? text("Remove Internal") : "")]
- Empty Pockets
- Refresh
- Close
- "}
- user << browse(dat, text("window=mob[];size=325x500", name))
- onclose(user, "mob[name]")
- return
-
//generates realistic-ish pulse output based on preset levels
/mob/living/carbon/proc/get_pulse(var/method) //method 0 is for hands, 1 is for machines, more accurate
var/temp = 0 //see setup.dm:694
@@ -462,6 +465,12 @@
Weaken(Floor(stun_duration/2))
return 1
+/mob/living/carbon/proc/add_chemical_effect(var/effect, var/magnitude = 1)
+ if(effect in chem_effects)
+ chem_effects[effect] += magnitude
+ else
+ chem_effects[effect] = magnitude
+
/mob/living/carbon/get_default_language()
if(default_language)
return default_language
diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm
index 55b33324fbb..e617506c239 100644
--- a/code/modules/mob/living/carbon/carbon_defines.dm
+++ b/code/modules/mob/living/carbon/carbon_defines.dm
@@ -17,5 +17,8 @@
var/datum/surgery_status/op_stage = new/datum/surgery_status
//Active emote/pose
var/pose = null
+ var/list/chem_effects = list()
+ var/datum/reagents/ingested = null
+ var/datum/reagents/touching = null
var/pulse = PULSE_NORM //current pulse level
diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm
index 52ba116d43b..5f9527b93b9 100644
--- a/code/modules/mob/living/carbon/human/appearance.dm
+++ b/code/modules/mob/living/carbon/human/appearance.dm
@@ -118,6 +118,7 @@
b_skin = blue
force_update_limbs()
+ update_body()
return 1
/mob/living/carbon/human/proc/change_skin_tone(var/tone)
@@ -127,6 +128,7 @@
s_tone = tone
force_update_limbs()
+ update_body()
return 1
/mob/living/carbon/human/proc/update_dna()
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 63b781e1833..1eb0b53f04f 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -34,7 +34,8 @@
handle_hud_list()
//Handle species-specific deaths.
- if(species) species.handle_death(src)
+ species.handle_death(src)
+ animate_tail_stop()
//Handle brain slugs.
var/obj/item/organ/external/head = get_organ("head")
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index 8d7c655730b..10b2a914778 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -21,15 +21,15 @@
switch(act)
if ("airguitar")
if (!src.restrained())
- message = "[src] is strumming the air and headbanging like a safari chimp."
+ message = "is strumming the air and headbanging like a safari chimp."
m_type = 1
if ("blink")
- message = "[src] blinks."
+ message = "blinks."
m_type = 1
if ("blink_r")
- message = "[src] blinks rapidly."
+ message = "blinks rapidly."
m_type = 1
if ("bow")
@@ -44,9 +44,9 @@
param = null
if (param)
- message = "[src] bows to [param]."
+ message = "bows to [param]."
else
- message = "[src] bows."
+ message = "bows."
m_type = 1
if ("custom")
@@ -94,73 +94,73 @@
param = null
if (param)
- message = "[src] salutes to [param]."
+ message = "salutes to [param]."
else
- message = "[src] salutes."
+ message = "salutes."
m_type = 1
if ("choke")
if(miming)
- message = "[src] clutches his throat desperately!"
+ message = "clutches his throat desperately!"
m_type = 1
else
if (!muzzled)
- message = "[src] chokes!"
+ message = "chokes!"
m_type = 2
else
- message = "[src] makes a strong noise."
+ message = "makes a strong noise."
m_type = 2
if ("clap")
if (!src.restrained())
- message = "[src] claps."
+ message = "claps."
m_type = 2
if(miming)
m_type = 1
if ("flap")
if (!src.restrained())
- message = "[src] flaps \his wings."
+ message = "flaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] wings."
m_type = 2
if(miming)
m_type = 1
if ("aflap")
if (!src.restrained())
- message = "[src] flaps \his wings ANGRILY!"
+ message = "flaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] wings ANGRILY!"
m_type = 2
if(miming)
m_type = 1
if ("drool")
- message = "[src] drools."
+ message = "drools."
m_type = 1
if ("eyebrow")
- message = "[src] raises an eyebrow."
+ message = "raises an eyebrow."
m_type = 1
if ("chuckle")
if(miming)
- message = "[src] appears to chuckle."
+ message = "appears to chuckle."
m_type = 1
else
if (!muzzled)
- message = "[src] chuckles."
+ message = "chuckles."
m_type = 2
else
- message = "[src] makes a noise."
+ message = "makes a noise."
m_type = 2
if ("twitch")
- message = "[src] twitches violently."
+ message = "twitches violently."
m_type = 1
if ("twitch_s")
- message = "[src] twitches."
+ message = "twitches."
m_type = 1
if ("faint")
- message = "[src] faints."
+ message = "faints."
if(src.sleeping)
return //Can't faint while asleep
src.sleeping += 10 //Short-short nap
@@ -168,58 +168,58 @@
if ("cough")
if(miming)
- message = "[src] appears to cough!"
+ message = "appears to cough!"
m_type = 1
else
if (!muzzled)
- message = "[src] coughs!"
+ message = "coughs!"
m_type = 2
else
- message = "[src] makes a strong noise."
+ message = "makes a strong noise."
m_type = 2
if ("frown")
- message = "[src] frowns."
+ message = "frowns."
m_type = 1
if ("nod")
- message = "[src] nods."
+ message = "nods."
m_type = 1
if ("blush")
- message = "[src] blushes."
+ message = "blushes."
m_type = 1
if ("wave")
- message = "[src] waves."
+ message = "waves."
m_type = 1
if ("gasp")
if(miming)
- message = "[src] appears to be gasping!"
+ message = "appears to be gasping!"
m_type = 1
else
if (!muzzled)
- message = "[src] gasps!"
+ message = "gasps!"
m_type = 2
else
- message = "[src] makes a weak noise."
+ message = "makes a weak noise."
m_type = 2
if ("deathgasp")
- message = "[src] [species.death_message]"
+ message = "[species.death_message]"
m_type = 1
if ("giggle")
if(miming)
- message = "[src] giggles silently!"
+ message = "giggles silently!"
m_type = 1
else
if (!muzzled)
- message = "[src] giggles."
+ message = "giggles."
m_type = 2
else
- message = "[src] makes a noise."
+ message = "makes a noise."
m_type = 2
if ("glare")
@@ -233,9 +233,9 @@
param = null
if (param)
- message = "[src] glares at [param]."
+ message = "glares at [param]."
else
- message = "[src] glares."
+ message = "glares."
if ("stare")
var/M = null
@@ -248,9 +248,9 @@
param = null
if (param)
- message = "[src] stares at [param]."
+ message = "stares at [param]."
else
- message = "[src] stares."
+ message = "stares."
if ("look")
var/M = null
@@ -264,86 +264,86 @@
param = null
if (param)
- message = "[src] looks at [param]."
+ message = "looks at [param]."
else
- message = "[src] looks."
+ message = "looks."
m_type = 1
if ("grin")
- message = "[src] grins."
+ message = "grins."
m_type = 1
if ("cry")
if(miming)
- message = "[src] cries."
+ message = "cries."
m_type = 1
else
if (!muzzled)
- message = "[src] cries."
+ message = "cries."
m_type = 2
else
- message = "[src] makes a weak noise. \He frowns."
+ message = "makes a weak noise. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"] [get_visible_gender() == NEUTER ? "frown" : "frowns"]."
m_type = 2
if ("sigh")
if(miming)
- message = "[src] sighs."
+ message = "sighs."
m_type = 1
else
if (!muzzled)
- message = "[src] sighs."
+ message = "sighs."
m_type = 2
else
- message = "[src] makes a weak noise."
+ message = "makes a weak noise."
m_type = 2
if ("laugh")
if(miming)
- message = "[src] acts out a laugh."
+ message = "acts out a laugh."
m_type = 1
else
if (!muzzled)
- message = "[src] laughs."
+ message = "laughs."
m_type = 2
else
- message = "[src] makes a noise."
+ message = "makes a noise."
m_type = 2
if ("mumble")
- message = "[src] mumbles!"
+ message = "mumbles!"
m_type = 2
if(miming)
m_type = 1
if ("grumble")
if(miming)
- message = "[src] grumbles!"
+ message = "grumbles!"
m_type = 1
if (!muzzled)
- message = "[src] grumbles!"
+ message = "grumbles!"
m_type = 2
else
- message = "[src] makes a noise."
+ message = "makes a noise."
m_type = 2
if ("groan")
if(miming)
- message = "[src] appears to groan!"
+ message = "appears to groan!"
m_type = 1
else
if (!muzzled)
- message = "[src] groans!"
+ message = "groans!"
m_type = 2
else
- message = "[src] makes a loud noise."
+ message = "makes a loud noise."
m_type = 2
if ("moan")
if(miming)
- message = "[src] appears to moan!"
+ message = "appears to moan!"
m_type = 1
else
- message = "[src] moans!"
+ message = "moans!"
m_type = 2
if ("johnny")
@@ -354,10 +354,10 @@
param = null
else
if(miming)
- message = "[src] takes a drag from a cigarette and blows \"[M]\" out in smoke."
+ message = "takes a drag from a cigarette and blows \"[M]\" out in smoke."
m_type = 1
else
- message = "[src] says, \"[M], please. He had a family.\" [src.name] takes a drag from a cigarette and blows his name out in smoke."
+ message = "says, \"[M], please. He had a family.\" [src.name] takes a drag from a cigarette and blows his name out in smoke."
m_type = 2
if ("point")
@@ -370,26 +370,26 @@
break
if (!M)
- message = "[src] points."
+ message = "points."
else
pointed(M)
if (M)
- message = "[src] points to [M]."
+ message = "points to [M]."
else
m_type = 1
if ("raise")
if (!src.restrained())
- message = "[src] raises a hand."
+ message = "raises a hand."
m_type = 1
if("shake")
- message = "[src] shakes \his head."
+ message = "shakes [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] head."
m_type = 1
if ("shrug")
- message = "[src] shrugs."
+ message = "shrugs."
m_type = 1
if ("signal")
@@ -397,85 +397,85 @@
var/t1 = round(text2num(param))
if (isnum(t1))
if (t1 <= 5 && (!src.r_hand || !src.l_hand))
- message = "[src] raises [t1] finger\s."
+ message = "raises [t1] finger\s."
else if (t1 <= 10 && (!src.r_hand && !src.l_hand))
- message = "[src] raises [t1] finger\s."
+ message = "raises [t1] finger\s."
m_type = 1
if ("smile")
- message = "[src] smiles."
+ message = "smiles."
m_type = 1
if ("shiver")
- message = "[src] shivers."
+ message = "shivers."
m_type = 2
if(miming)
m_type = 1
if ("pale")
- message = "[src] goes pale for a second."
+ message = "goes pale for a second."
m_type = 1
if ("tremble")
- message = "[src] trembles in fear!"
+ message = "trembles in fear!"
m_type = 1
if ("sneeze")
if (miming)
- message = "[src] sneezes."
+ message = "sneezes."
m_type = 1
else
if (!muzzled)
- message = "[src] sneezes."
+ message = "sneezes."
m_type = 2
else
- message = "[src] makes a strange noise."
+ message = "makes a strange noise."
m_type = 2
if ("sniff")
- message = "[src] sniffs."
+ message = "sniffs."
m_type = 2
if(miming)
m_type = 1
if ("snore")
if (miming)
- message = "[src] sleeps soundly."
+ message = "sleeps soundly."
m_type = 1
else
if (!muzzled)
- message = "[src] snores."
+ message = "snores."
m_type = 2
else
- message = "[src] makes a noise."
+ message = "makes a noise."
m_type = 2
if ("whimper")
if (miming)
- message = "[src] appears hurt."
+ message = "appears hurt."
m_type = 1
else
if (!muzzled)
- message = "[src] whimpers."
+ message = "whimpers."
m_type = 2
else
- message = "[src] makes a weak noise."
+ message = "makes a weak noise."
m_type = 2
if ("wink")
- message = "[src] winks."
+ message = "winks."
m_type = 1
if ("yawn")
if (!muzzled)
- message = "[src] yawns."
+ message = "yawns."
m_type = 2
if(miming)
m_type = 1
if ("collapse")
Paralyse(2)
- message = "[src] collapses!"
+ message = "collapses!"
m_type = 2
if(miming)
m_type = 1
@@ -493,9 +493,9 @@
M = null
if (M)
- message = "[src] hugs [M]."
+ message = "hugs [M]."
else
- message = "[src] hugs \himself."
+ message = "hugs [get_visible_gender() == MALE ? "himself" : get_visible_gender() == FEMALE ? "herself" : "themselves"]."
if ("handshake")
m_type = 1
@@ -511,9 +511,9 @@
if (M)
if (M.canmove && !M.r_hand && !M.restrained())
- message = "[src] shakes hands with [M]."
+ message = "shakes hands with [M]."
else
- message = "[src] holds out \his hand to [M]."
+ message = "holds out [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] hand to [M]."
if("dap")
m_type = 1
@@ -525,24 +525,40 @@
M = A
break
if (M)
- message = "[src] gives daps to [M]."
+ message = "gives daps to [M]."
else
- message = "[src] sadly can't find anybody to give daps to, and daps \himself. Shameful."
+ message = "sadly can't find anybody to give daps to, and daps [get_visible_gender() == MALE ? "himself" : get_visible_gender() == FEMALE ? "herself" : "themselves"]. Shameful."
if ("scream")
if (miming)
- message = "[src] acts out a scream!"
+ message = "acts out a scream!"
m_type = 1
else
if (!muzzled)
- message = "[src] screams!"
+ message = "screams!"
m_type = 2
else
- message = "[src] makes a very loud noise."
+ message = "makes a very loud noise."
m_type = 2
+ if("swish")
+ src.animate_tail_once()
+
+ if("wag", "sway")
+ src.animate_tail_start()
+
+ if("qwag", "fastsway")
+ src.animate_tail_fast()
+
+ if("swag", "stopsway")
+ src.animate_tail_stop()
+
if ("help")
- src << "blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough,\ncry, custom, deathgasp, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,\ngrin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,\nsigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,\nwink, yawn"
+ src << {"blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough,
+cry, custom, deathgasp, drool, eyebrow, frown, gasp, giggle, groan, grumble, handshake, hug-(none)/mob, glare-(none)/mob,
+grin, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, raise, salute, shake, shiver, shrug,
+sigh, signal-#1-10, smile, sneeze, sniff, snore, stare-(none)/mob, tremble, twitch, twitch_s, whimper,
+wink, yawn, swish, sway/wag, fastsway/qwag, stopsway/swag"}
else
src << "\blue Unusable emote '[act]'. Say *help for a list."
@@ -553,23 +569,7 @@
if (message)
log_emote("[name]/[key] : [message]")
-
- //Hearing gasp and such every five seconds is not good emotes were not global for a reason.
- // Maybe some people are okay with that.
-
- for(var/mob/M in dead_mob_list)
- if(!M.client || istype(M, /mob/new_player))
- continue //skip monkeys, leavers and new players
- if(M.stat == DEAD && (M.client.prefs.toggles & CHAT_GHOSTSIGHT) && !(M in viewers(src,null)))
- M.show_message(message)
-
-
- if (m_type & 1)
- for (var/mob/O in get_mobs_in_view(world.view,src))
- O.show_message(message, m_type)
- else if (m_type & 2)
- for (var/mob/O in (hearers(src.loc, null) | get_mobs_in_view(world.view,src)))
- O.show_message(message, m_type)
+ custom_emote(m_type,message)
/mob/living/carbon/human/verb/pose()
@@ -577,7 +577,7 @@
set desc = "Sets a description which will be shown when someone examines you."
set category = "IC"
- pose = sanitize(input(usr, "This is [src]. \He is...", "Pose", null) as text)
+ pose = sanitize(input(usr, "This is [src]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"] [get_visible_gender() == NEUTER ? "are" : "is"]...", "Pose", null) as text)
/mob/living/carbon/human/verb/set_flavor()
set name = "Set Flavour Text"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index d7255571613..70c1025b1ea 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -244,9 +244,9 @@
if(species.show_ssd && (!species.has_organ["brain"] || has_brain()) && stat != DEAD)
if(!key)
- msg += "[t_He] [t_is] fast asleep. It doesn't look like they are waking up anytime soon.\n"
+ msg += "[t_He] [t_is] [species.show_ssd]. It doesn't look like they are waking up anytime soon.\n"
else if(!client)
- msg += "[t_He] [t_has] suddenly fallen asleep.\n"
+ msg += "[t_He] [t_is] [species.show_ssd].\n"
var/list/wound_flavor_text = list()
var/list/is_destroyed = list()
@@ -256,7 +256,7 @@
var/list/organ_data = species.has_limbs[organ_tag]
var/organ_descriptor = organ_data["descriptor"]
- is_destroyed["[organ_data["descriptor"]]"] = 1
+ is_destroyed["organ_descriptor"] = 1
var/obj/item/organ/external/E = organs_by_name[organ_tag]
if(!E)
@@ -264,124 +264,80 @@
else if(E.is_stump())
wound_flavor_text["[organ_descriptor]"] = "[t_He] has a stump where [t_his] [organ_descriptor] should be.\n"
else
+ is_destroyed["organ_descriptor"] = 0
continue
for(var/obj/item/organ/external/temp in organs)
if(temp)
if(temp.status & ORGAN_ROBOT)
if(!(temp.brute_dam + temp.burn_dam))
- if(!species.flags & IS_SYNTHETIC)
- wound_flavor_text["[temp.name]"] = "[t_He] has a robot [temp.name]!\n"
- continue
+ wound_flavor_text["[temp.name]"] = "[t_He] has a robot [temp.name]!\n"
+ continue
else
- wound_flavor_text["[temp.name]"] = "[t_He] has a robot [temp.name]. It has"
- if(temp.brute_dam) switch(temp.brute_dam)
- if(0 to 20)
- wound_flavor_text["[temp.name]"] += " some dents"
- if(21 to INFINITY)
- wound_flavor_text["[temp.name]"] += pick(" a lot of dents"," severe denting")
- if(temp.brute_dam && temp.burn_dam)
- wound_flavor_text["[temp.name]"] += " and"
- if(temp.burn_dam) switch(temp.burn_dam)
- if(0 to 20)
- wound_flavor_text["[temp.name]"] += " some burns"
- if(21 to INFINITY)
- wound_flavor_text["[temp.name]"] += pick(" a lot of burns"," severe melting")
- if(wound_flavor_text["[temp.name]"])
- wound_flavor_text["[temp.name]"] += "!\n"
- else if(temp.wounds.len > 0)
- var/list/wound_descriptors = list()
- for(var/datum/wound/W in temp.wounds)
- if(W.internal && !temp.open) continue // can't see internal wounds
- var/this_wound_desc = W.desc
- if(W.damage_type == BURN && W.salved) this_wound_desc = "salved [this_wound_desc]"
- if(W.bleeding()) this_wound_desc = "bleeding [this_wound_desc]"
- else if(W.bandaged) this_wound_desc = "bandaged [this_wound_desc]"
- if(W.germ_level > 600) this_wound_desc = "badly infected [this_wound_desc]"
- else if(W.germ_level > 330) this_wound_desc = "lightly infected [this_wound_desc]"
- if(this_wound_desc in wound_descriptors)
- wound_descriptors[this_wound_desc] += W.amount
- continue
- wound_descriptors[this_wound_desc] = W.amount
- if(wound_descriptors.len)
- var/list/flavor_text = list()
- var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
- "huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
- for(var/wound in wound_descriptors)
- switch(wound_descriptors[wound])
- if(1)
- if(!flavor_text.len)
- flavor_text += "[t_He] has[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a [wound]"
- else
- flavor_text += "[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a [wound]"
- if(2)
- if(!flavor_text.len)
- flavor_text += "[t_He] has[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a pair of [wound]s"
- else
- flavor_text += "[prob(10) && !(wound in no_exclude) ? " what might be" : ""] a pair of [wound]s"
- if(3 to 5)
- if(!flavor_text.len)
- flavor_text += "[t_He] has several [wound]s"
- else
- flavor_text += " several [wound]s"
- if(6 to INFINITY)
- if(!flavor_text.len)
- flavor_text += "[t_He] has a bunch of [wound]s"
- else
- flavor_text += " a ton of [wound]\s"
- var/flavor_text_string = ""
- for(var/text = 1, text <= flavor_text.len, text++)
- if(text == flavor_text.len && flavor_text.len > 1)
- flavor_text_string += ", and"
- else if(flavor_text.len > 1 && text > 1)
- flavor_text_string += ","
- flavor_text_string += flavor_text[text]
- flavor_text_string += " on [t_his] [temp.name]. "
- wound_flavor_text["[temp.name]"] = flavor_text_string
- else
- wound_flavor_text["[temp.name]"] = ""
+ wound_flavor_text["[temp.name]"] = "[t_He] has a robot [temp.name]. It has[temp.get_wounds_desc()]!\n"
+ else if(temp.wounds.len > 0 || temp.open)
+ wound_flavor_text["[temp.name]"] = "[t_He] has [temp.get_wounds_desc()] on [t_his] [temp.name]. "
if(temp.status & ORGAN_BLEEDING)
- is_bleeding["[temp.name]"] = 1
+ is_bleeding["[temp.name]"] = "[capitalize(t_his)] [temp.name] is bleeding! "
else
wound_flavor_text["[temp.name]"] = ""
+ if(temp.dislocated == 2)
+ wound_flavor_text["[temp.name]"] += "[capitalize(t_his)] [temp.joint] is dislocated! "
+ if(((temp.status & ORGAN_BROKEN) && temp.brute_dam > temp.min_broken_damage) || (temp.status & ORGAN_MUTATED))
+ wound_flavor_text["[temp.name]"] += "[capitalize(t_his)] [temp.name] is dented and swollen! "
//Handles the text strings being added to the actual description.
//If they have something that covers the limb, and it is not missing, put flavortext. If it is covered but bleeding, add other flavortext.
+
+ // ***********************************************************************************
+ // THIS NEEDS TO BE ENTIRELY REWRITTEN. Commenting out for now, BADLY NEEDS REWRITING.
+ // ***********************************************************************************
+
+ /*
var/display_chest = 0
var/display_shoes = 0
var/display_gloves = 0
+
if(wound_flavor_text["head"] && (is_destroyed["head"] || (!skipmask && !(wear_mask && istype(wear_mask, /obj/item/clothing/mask/gas)))))
msg += wound_flavor_text["head"]
else if(is_bleeding["head"])
msg += "[src] has blood running down [t_his] face!\n"
- if(wound_flavor_text["chest"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
- msg += wound_flavor_text["chest"]
- else if(is_bleeding["chest"])
+
+ if(wound_flavor_text["upper body"] && !w_uniform && !skipjumpsuit) //No need. A missing chest gibs you.
+ msg += wound_flavor_text["upper body"]
+ else if(is_bleeding["upper body"])
display_chest = 1
+
if(wound_flavor_text["left arm"] && (is_destroyed["left arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left arm"]
else if(is_bleeding["left arm"])
display_chest = 1
+
if(wound_flavor_text["left hand"] && (is_destroyed["left hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["left hand"]
else if(is_bleeding["left hand"])
display_gloves = 1
+
if(wound_flavor_text["right arm"] && (is_destroyed["right arm"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["right arm"]
else if(is_bleeding["right arm"])
display_chest = 1
+
if(wound_flavor_text["right hand"] && (is_destroyed["right hand"] || (!gloves && !skipgloves)))
msg += wound_flavor_text["right hand"]
else if(is_bleeding["right hand"])
display_gloves = 1
- if(wound_flavor_text["groin"] && (is_destroyed["groin"] || (!w_uniform && !skipjumpsuit)))
- msg += wound_flavor_text["groin"]
- else if(is_bleeding["groin"])
+
+ if(wound_flavor_text["lower body"] && (is_destroyed["lower body"] || (!w_uniform && !skipjumpsuit)))
+ msg += wound_flavor_text["lower body"]
+ else if(is_bleeding["lower body"])
display_chest = 1
+
if(wound_flavor_text["left leg"] && (is_destroyed["left leg"] || (!w_uniform && !skipjumpsuit)))
msg += wound_flavor_text["left leg"]
else if(is_bleeding["left leg"])
display_chest = 1
+
if(wound_flavor_text["left foot"]&& (is_destroyed["left foot"] || (!shoes && !skipshoes)))
msg += wound_flavor_text["left foot"]
else if(is_bleeding["left foot"])
@@ -394,19 +350,25 @@
msg += wound_flavor_text["right foot"]
else if(is_bleeding["right foot"])
display_shoes = 1
+
if(display_chest)
msg += "[src] has blood soaking through from under [t_his] clothing!\n"
if(display_shoes)
msg += "[src] has blood running from [t_his] shoes!\n"
if(display_gloves)
msg += "[src] has blood running from under [t_his] gloves!\n"
+ */
+ for(var/limb in wound_flavor_text)
+ msg += wound_flavor_text[limb]
+ is_bleeding[limb] = null
+ for(var/limb in is_bleeding)
+ msg += is_bleeding[limb]
for(var/implant in get_visible_implants(0))
msg += "[src] has \a [implant] sticking out of [t_his] flesh!\n"
if(digitalcamo)
msg += "[t_He] [t_is] repulsively uncanny!\n"
-
if(hasHUD(usr,"security"))
var/perpname = "wot"
var/criminal = "None"
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 498b46345d4..10e165fa5fb 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -26,10 +26,6 @@
if(mind)
mind.name = real_name
- var/datum/reagents/R = new/datum/reagents(1000)
- reagents = R
- R.my_atom = src
-
hud_list[HEALTH_HUD] = image('icons/mob/hud.dmi', src, "hudhealth100")
hud_list[STATUS_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy")
hud_list[LIFE_HUD] = image('icons/mob/hud.dmi', src, "hudhealthy")
@@ -41,6 +37,7 @@
hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank")
hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy")
+ human_mob_list |= src
..()
if(dna)
@@ -48,6 +45,7 @@
make_blood()
/mob/living/carbon/human/Destroy()
+ human_mob_list -= src
for(var/organ in organs)
qdel(organ)
return ..()
@@ -58,9 +56,6 @@
stat(null, "Intent: [a_intent]")
stat(null, "Move Mode: [m_intent]")
- if(ticker && ticker.mode && ticker.mode.name == "AI malfunction")
- if(malf.revealed)
- stat(null, "Time left: [max(malf.hack_time/(malf.hacked_apcs/3), 0)]")
if(emergency_shuttle)
var/eta_status = emergency_shuttle.get_status_panel_eta()
if(eta_status)
@@ -177,7 +172,7 @@
/mob/living/carbon/human/blob_act()
if(stat == 2) return
show_message("\red The blob attacks you!")
- var/dam_zone = pick("chest", "l_hand", "r_hand", "l_leg", "r_leg")
+ var/dam_zone = pick(organs_by_name)
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
apply_damage(rand(30,40), BRUTE, affecting, run_armor_check(affecting, "melee"))
return
@@ -234,33 +229,41 @@
suit = w_uniform
user.set_machine(src)
- var/dat = {"
- [name]
-
- Head(Mask): [(wear_mask ? wear_mask : "Nothing")]
- Left Hand: [(l_hand ? l_hand : "Nothing")]
- Right Hand: [(r_hand ? r_hand : "Nothing")]
- Gloves: [(gloves ? gloves : "Nothing")]
- Eyes: [(glasses ? glasses : "Nothing")]
- Left Ear: [(l_ear ? l_ear : "Nothing")]
- Right Ear: [(r_ear ? r_ear : "Nothing")]
- Head: [(head ? head : "Nothing")]
- Shoes: [(shoes ? shoes : "Nothing")]
- Belt: [(belt ? belt : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(belt, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
- Uniform: [(w_uniform ? w_uniform : "Nothing")] [(suit) ? ((suit.has_sensor == 1) ? text(" Sensors", src) : "") :]
- (Exo)Suit: [(wear_suit ? wear_suit : "Nothing")]
- Back: [(back ? back : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(back, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
- ID: [(wear_id ? wear_id : "Nothing")]
- Suit Storage: [(s_store ? s_store : "Nothing")] [((istype(wear_mask, /obj/item/clothing/mask) && istype(s_store, /obj/item/weapon/tank) && !( internal )) ? text(" Set Internal", src) : "")]
- [(handcuffed ? text("Handcuffed") : text("Not Handcuffed"))]
- [(legcuffed ? text("Legcuffed") : text(""))]
- [(suit) ? ((suit.accessories.len) ? text(" Remove Accessory", src) : "") :]
- [(internal ? text("Remove Internal") : "")]
- Remove Splints
- Empty Pockets
- Refresh
- Close
- "}
+ var/dat = " [name]
"
+
+ for(var/entry in species.hud.gear)
+ var/list/slot_ref = species.hud.gear[entry]
+ if((slot_ref["slot"] in list(slot_l_store, slot_r_store)))
+ continue
+ var/obj/item/thing_in_slot = get_equipped_item(slot_ref["slot"])
+ dat += " [slot_ref["name"]]: [istype(thing_in_slot) ? thing_in_slot : "nothing"]"
+
+ dat += "
"
+
+ if(species.hud.has_hands)
+ dat += " Left hand: [istype(l_hand) ? l_hand : "nothing"]"
+ dat += " Right hand: [istype(r_hand) ? r_hand : "nothing"]"
+
+ // Do they get an option to set internals?
+ if(istype(wear_mask, /obj/item/clothing/mask) || istype(head, /obj/item/clothing/head/helmet/space))
+ if(istype(back, /obj/item/weapon/tank) || istype(belt, /obj/item/weapon/tank) || istype(s_store, /obj/item/weapon/tank))
+ dat += " Toggle internals."
+
+ // Other incidentals.
+ if(istype(suit) && suit.has_sensor == 1)
+ dat += " Set sensors."
+ if(handcuffed)
+ dat += " Handcuffed"
+ if(legcuffed)
+ dat += " Legcuffed"
+
+ if(suit && suit.accessories.len)
+ dat += " Remove accessory"
+ dat += " Remove splints"
+ dat += " Empty pockets"
+ dat += " Refresh"
+ dat += " Close"
+
user << browse(dat, text("window=mob[name];size=340x540"))
onclose(user, "mob[name]")
return
@@ -375,6 +378,7 @@
/mob/living/carbon/human/Topic(href, href_list)
+
if (href_list["refresh"])
if((machine)&&(in_range(src, usr)))
show_inv(machine)
@@ -384,18 +388,8 @@
unset_machine()
src << browse(null, t1)
- if ((href_list["item"] && !( usr.stat ) && usr.canmove && !( usr.restrained() ) && in_range(src, usr) && ticker)) //if game hasn't started, can't make an equip_e
- var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human( )
- O.source = usr
- O.target = src
- O.item = usr.get_active_hand()
- O.s_loc = usr.loc
- O.t_loc = loc
- O.place = href_list["item"]
- requests += O
- spawn( 0 )
- O.process()
- return
+ if(href_list["item"])
+ handle_strip(href_list["item"],usr)
if (href_list["criminal"])
if(hasHUD(usr,"security"))
@@ -751,10 +745,17 @@
xylophone=0
return
+/mob/living/carbon/human/proc/check_has_mouth()
+ // Todo, check stomach organ when implemented.
+ var/obj/item/organ/external/head/H = get_organ("head")
+ if(!H || !H.can_intake_reagents)
+ return 0
+ return 1
+
/mob/living/carbon/human/proc/vomit()
- if(species.flags & IS_SYNTHETIC)
- return //Machines don't throw up.
+ if(!check_has_mouth())
+ return
if(!lastpuke)
lastpuke = 1
@@ -1031,7 +1032,7 @@
var/list/visible_implants = list()
for(var/obj/item/organ/external/organ in src.organs)
for(var/obj/item/weapon/O in organ.implants)
- if(!istype(O,/obj/item/weapon/implant) && (O.w_class > class) && !istype(O,/obj/item/weapon/shard/shrapnel))
+ if(!istype(O,/obj/item/weapon/implant) && (O.w_class > class) && !istype(O,/obj/item/weapon/material/shard/shrapnel))
visible_implants += O
return(visible_implants)
@@ -1066,30 +1067,28 @@
set src in view(1)
var/self = 0
- if(usr.stat == 1 || usr.restrained() || !isliving(usr)) return
+ if(usr.stat || usr.restrained() || !isliving(usr)) return
if(usr == src)
self = 1
if(!self)
- usr.visible_message("\blue [usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\
+ usr.visible_message("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\
"You begin counting [src]'s pulse")
else
- usr.visible_message("\blue [usr] begins counting their pulse.",\
+ usr.visible_message("[usr] begins counting their pulse.",\
"You begin counting your pulse.")
if(src.pulse)
- usr << "\blue [self ? "You have a" : "[src] has a"] pulse! Counting..."
+ usr << "[self ? "You have a" : "[src] has a"] pulse! Counting..."
else
- usr << "\red [src] has no pulse!" //it is REALLY UNLIKELY that a dead person would check his own pulse
+ usr << "[src] has no pulse!" //it is REALLY UNLIKELY that a dead person would check his own pulse
return
- usr << "Don't move until counting is finished."
- var/time = world.time
- sleep(60)
- if(usr.l_move_time >= time) //checks if our mob has moved during the sleep()
- usr << "You moved while counting. Try again."
+ usr << "You must[self ? "" : " both"] remain still until counting is finished."
+ if(do_mob(usr, src, 60))
+ usr << "[self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
else
- usr << "\blue [self ? "Your" : "[src]'s"] pulse is [src.get_pulse(GETPULSE_HAND)]."
+ usr << "You failed to check the pulse. Try again."
/mob/living/carbon/human/proc/set_species(var/new_species, var/default_colour)
@@ -1224,16 +1223,26 @@
else
target_zone = user.zone_sel.selecting
- switch(target_zone)
- if("head")
- if(head && head.flags & THICKMATERIAL)
- . = 0
- else
- if(wear_suit && wear_suit.flags & THICKMATERIAL)
- . = 0
+ var/obj/item/organ/external/affecting = get_organ(target_zone)
+ var/fail_msg
+ if(!affecting)
+ . = 0
+ fail_msg = "They are missing that limb."
+ else if (affecting.status & ORGAN_ROBOT)
+ . = 0
+ fail_msg = "That limb is robotic."
+ else
+ switch(target_zone)
+ if("head")
+ if(head && head.flags & THICKMATERIAL)
+ . = 0
+ else
+ if(wear_suit && wear_suit.flags & THICKMATERIAL)
+ . = 0
if(!. && error_msg && user)
- // Might need re-wording.
- user << "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into."
+ if(!fail_msg)
+ fail_msg = "There is no exposed flesh or thin material [target_zone == "head" ? "on their head" : "on their body"] to inject into."
+ user << "[fail_msg]"
/mob/living/carbon/human/print_flavor_text(var/shrink = 1)
var/list/equipment = list(src.head,src.wear_mask,src.glasses,src.w_uniform,src.wear_suit,src.gloves,src.shoes)
@@ -1296,7 +1305,7 @@
/mob/living/carbon/human/has_eyes()
if(internal_organs_by_name["eyes"])
var/obj/item/organ/eyes = internal_organs_by_name["eyes"]
- if(eyes && istype(eyes) && !eyes.status & ORGAN_CUT_AWAY)
+ if(eyes && istype(eyes) && !(eyes.status & ORGAN_CUT_AWAY))
return 1
return 0
@@ -1326,7 +1335,6 @@
var/mob/S = src
var/mob/U = usr
var/self = null
-
if(S == U)
self = 1 // Removing object from yourself.
@@ -1335,8 +1343,7 @@
var/obj/item/organ/external/current_limb = organs_by_name[limb]
if(current_limb && current_limb.dislocated == 2)
limbs |= limb
-
- var/choice = input(src,"Which joint do you wish to relocate?") as null|anything in limbs
+ var/choice = input(usr,"Which joint do you wish to relocate?") as null|anything in limbs
if(!choice)
return
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 94dfeddf343..7451e6ae6a6 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -15,10 +15,11 @@
if(istype(H))
if((H != src) && check_shields(0, H.name))
visible_message("\red [H] attempted to touch [src]!")
+ H.do_attack_animation(src)
return 0
if(istype(H.gloves, /obj/item/clothing/gloves/boxing/hologlove))
-
+ H.do_attack_animation(src)
var/damage = rand(0, 9)
if(!damage)
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
@@ -46,25 +47,38 @@
switch(M.a_intent)
if(I_HELP)
-
- if(istype(H) && health < config.health_threshold_crit)
-
+ if(istype(H) && health < config.health_threshold_crit && health > config.health_threshold_dead)
+ if(!H.check_has_mouth())
+ H << "You don't have a mouth, you cannot perform CPR!"
+ return
+ if(!check_has_mouth())
+ H << "They don't have a mouth, you cannot perform CPR!"
+ return
if((H.head && (H.head.flags & HEADCOVERSMOUTH)) || (H.wear_mask && (H.wear_mask.flags & MASKCOVERSMOUTH)))
- H << "\blue Remove your mask!"
+ H << "Remove your mask!"
return 0
if((head && (head.flags & HEADCOVERSMOUTH)) || (wear_mask && (wear_mask.flags & MASKCOVERSMOUTH)))
- H << "\blue Remove [src]'s mask!"
+ H << "Remove [src]'s mask!"
return 0
- var/obj/effect/equip_e/human/O = new /obj/effect/equip_e/human()
- O.source = M
- O.target = src
- O.s_loc = M.loc
- O.t_loc = loc
- O.place = "CPR"
- requests += O
- spawn(0)
- O.process()
+ if (!cpr_time)
+ return 0
+
+ cpr_time = 0
+ spawn(30)
+ cpr_time = 1
+
+ H.visible_message("\The [H] is trying perform CPR on \the [src]!")
+
+ if(!do_after(H, 30))
+ return
+
+ adjustOxyLoss(-(min(getOxyLoss(), 5)))
+ updatehealth()
+ H.visible_message("\The [H] performs CPR on \the [src]!")
+ src << "You feel a breath of fresh air enter your lungs. It feels good."
+ H << "Repeat at least every 7 seconds."
+
else
help_shake_act(M)
return 1
@@ -72,6 +86,10 @@
if(I_GRAB)
if(M == src || anchored)
return 0
+ for(var/obj/item/weapon/grab/G in src.grabbed_by)
+ if(G.assailant == M)
+ M << "You already grabbed [src]."
+ return
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -84,6 +102,7 @@
G.synch()
LAssailant = M
+ H.do_attack_animation(src)
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
visible_message("[M] has grabbed [src] passively!")
return 1
@@ -165,8 +184,13 @@
miss_type = 2
// See what attack they use
+ var/possible_moves = list()
var/datum/unarmed_attack/attack = null
- for(var/datum/unarmed_attack/u_attack in H.species.unarmed_attacks)
+ for(var/part in list("l_hand","r_hand","l_foot","r_foot","head"))
+ var/obj/item/organ/external/E = H.get_organ(part)
+ possible_moves |= E.species.unarmed_attacks
+
+ for(var/datum/unarmed_attack/u_attack in possible_moves)
if(!u_attack.is_usable(H, src, hit_zone))
continue
else
@@ -175,6 +199,7 @@
if(!attack)
return 0
+ H.do_attack_animation(src)
if(!attack_message)
attack.show_attack(H, src, hit_zone, rand_damage)
else
@@ -209,6 +234,7 @@
src.attack_log += text("\[[time_stamp()]\] Has been disarmed by [M.name] ([M.ckey])")
msg_admin_attack("[key_name(M)] disarmed [src.name] ([src.ckey])")
+ M.do_attack_animation(src)
if(w_uniform)
w_uniform.add_fingerprint(M)
@@ -218,7 +244,7 @@
//See if they have any guns that might go off
for(var/obj/item/weapon/gun/W in holding)
- if(W && prob(holding[W]))
+ if(W && prob(holding[W]))
var/list/turfs = list()
for(var/turf/T in view())
turfs += T
@@ -251,11 +277,6 @@
visible_message("[M] has disarmed [src]!")
playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
return
-
- //if M (and only M) has a grab on src, start dislocating limbs
- if(grab_joint(M))
- playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
- return
playsound(loc, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
visible_message("\red [M] attempted to disarm [src]!")
@@ -272,8 +293,9 @@
user.attack_log += text("\[[time_stamp()]\] attacked [src.name] ([src.ckey])")
src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])")
src.visible_message("[user] has [attack_message] [src]!")
+ user.do_attack_animation(src)
- var/dam_zone = pick("head", "chest", "l_arm", "r_arm", "l_leg", "r_leg", "groin")
+ var/dam_zone = pick(organs_by_name)
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/armor_block = run_armor_check(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block)
@@ -294,7 +316,7 @@
var/dislocation_str
if(prob(W.force))
dislocation_str = "[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!"
- organ.dislocate()
+ organ.dislocate(1)
return dislocation_str
//Used to attack a joint through grabbing
@@ -304,10 +326,10 @@
if(G.affecting == src && G.state == GRAB_NECK)
has_grab = 1
break
-
+
if(!has_grab)
return 0
-
+
if(!def_zone) def_zone = user.zone_sel.selecting
var/target_zone = check_zone(def_zone)
if(!target_zone)
@@ -315,10 +337,10 @@
var/obj/item/organ/external/organ = get_organ(check_zone(target_zone))
if(!organ || organ.is_dislocated() || organ.dislocated == -1)
return 0
-
+
user.visible_message("[user] begins to dislocate [src]'s [organ.joint]!")
if(do_after(user, 100))
- organ.dislocate()
+ organ.dislocate(1)
src.visible_message("[src]'s [organ.joint] [pick("gives way","caves in","crumbles","collapses")]!")
return 1
return 0
diff --git a/code/modules/mob/living/carbon/human/human_damage.dm b/code/modules/mob/living/carbon/human/human_damage.dm
index 04ca8922257..af603fcb9bd 100644
--- a/code/modules/mob/living/carbon/human/human_damage.dm
+++ b/code/modules/mob/living/carbon/human/human_damage.dm
@@ -8,6 +8,8 @@
var/total_burn = 0
var/total_brute = 0
for(var/obj/item/organ/external/O in organs) //hardcoded to streamline things a bit
+ if(O.status & ORGAN_ROBOT)
+ continue //robot limbs don't count towards shock and crit
total_brute += O.brute_dam
total_burn += O.burn_dam
@@ -69,12 +71,16 @@
/mob/living/carbon/human/getBruteLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
+ if(O.status & ORGAN_ROBOT)
+ continue //robot limbs don't count towards shock and crit
amount += O.brute_dam
return amount
/mob/living/carbon/human/getFireLoss()
var/amount = 0
for(var/obj/item/organ/external/O in organs)
+ if(O.status & ORGAN_ROBOT)
+ continue //robot limbs don't count towards shock and crit
amount += O.burn_dam
return amount
@@ -142,12 +148,12 @@
..()
/mob/living/carbon/human/getCloneLoss()
- if(species.flags & (IS_SYNTHETIC | NO_SCAN))
+ if(species.flags & (NO_SCAN))
cloneloss = 0
return ..()
/mob/living/carbon/human/setCloneLoss(var/amount)
- if(species.flags & (IS_SYNTHETIC | NO_SCAN))
+ if(species.flags & (NO_SCAN))
cloneloss = 0
else
..()
@@ -155,7 +161,7 @@
/mob/living/carbon/human/adjustCloneLoss(var/amount)
..()
- if(species.flags & (IS_SYNTHETIC | NO_SCAN))
+ if(species.flags & (NO_SCAN))
cloneloss = 0
return
@@ -236,7 +242,7 @@
/mob/living/carbon/human/proc/get_damageable_organs()
var/list/obj/item/organ/external/parts = list()
for(var/obj/item/organ/external/O in organs)
- if(O.brute_dam + O.burn_dam < O.max_damage)
+ if(O.is_damageable())
parts += O
return parts
diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm
index a0c78d75729..675d3c41df6 100644
--- a/code/modules/mob/living/carbon/human/human_defense.dm
+++ b/code/modules/mob/living/carbon/human/human_defense.dm
@@ -43,7 +43,7 @@ emp_act
if(P.can_embed())
var/armor = getarmor_organ(organ, "bullet")
if(prob(20 + max(P.damage - armor, -10)))
- var/obj/item/weapon/shard/shrapnel/SP = new()
+ var/obj/item/weapon/material/shard/shrapnel/SP = new()
SP.name = (P.name != "shrapnel")? "[P.name] shrapnel" : "shrapnel"
SP.desc = "[SP.desc] It looks like it was fired from [P.shot_from]."
SP.loc = organ
@@ -138,6 +138,14 @@ emp_act
return 1
return 0
+//Used to check if they can be fed food/drinks/pills
+/mob/living/carbon/human/proc/check_mouth_coverage()
+ var/list/protective_gear = list(head, wear_mask, wear_suit, w_uniform)
+ for(var/obj/item/gear in protective_gear)
+ if(istype(gear) && (gear.body_parts_covered & FACE) && (gear.flags & (MASKCOVERSMOUTH|HEADCOVERSMOUTH)))
+ return gear
+ return null
+
/mob/living/carbon/human/proc/check_shields(var/damage = 0, var/attack_text = "the attack")
if(l_hand && istype(l_hand, /obj/item/weapon))//Current base is the prob(50-d/3)
var/obj/item/weapon/I = l_hand
@@ -171,12 +179,6 @@ emp_act
for(var/obj/O in src)
if(!O) continue
O.emp_act(severity)
- for(var/obj/item/organ/external/O in organs)
- if(O.status & ORGAN_DESTROYED) continue
- O.emp_act(severity)
- for(var/obj/item/organ/I in O.internal_organs)
- if(I.robotic == 0) continue
- I.emp_act(severity)
..()
@@ -281,7 +283,7 @@ emp_act
forcesay(hit_appends) //forcesay checks stat already
//Melee weapon embedded object code.
- if (I && I.damtype == BRUTE && !I.anchored && !I.is_robot_module())
+ if (I && I.damtype == BRUTE && !I.anchored && !is_robot_module(I))
var/damage = effective_force
if (armor)
damage /= armor+1
@@ -355,7 +357,7 @@ emp_act
//thrown weapon embedded object code.
if(dtype == BRUTE && istype(O,/obj/item))
var/obj/item/I = O
- if (!I.is_robot_module())
+ if (!is_robot_module(I))
var/sharp = is_sharp(I)
var/damage = throw_damage
if (armor)
diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm
index 749903dc2ad..f4b28d2b6b0 100644
--- a/code/modules/mob/living/carbon/human/human_movement.dm
+++ b/code/modules/mob/living/carbon/human/human_movement.dm
@@ -10,9 +10,8 @@
if(embedded_flag)
handle_embedded_objects() //Moving with objects stuck in you can cause bad times.
- if(reagents.has_reagent("hyperzine")) return -1
-
- if(reagents.has_reagent("nuka_cola")) return -1
+ if(CE_SPEEDBOOST in chem_effects)
+ return -1
var/health_deficiency = (100 - health)
if(health_deficiency >= 40) tally += (health_deficiency / 25)
diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm
index c962b8355bf..f2c64fa52ad 100644
--- a/code/modules/mob/living/carbon/human/human_organs.dm
+++ b/code/modules/mob/living/carbon/human/human_organs.dm
@@ -72,7 +72,18 @@
var/obj/item/organ/external/E = organs_by_name[limb_tag]
if(!E || (E.status & (ORGAN_DESTROYED|ORGAN_DEAD)))
stance_damage += 2 // let it fail even if just foot&leg
- else if (E.is_malfunctioning() || E.is_broken() || !E.is_usable())
+ else if (E.is_malfunctioning())
+ //malfunctioning only happens intermittently so treat it as a missing limb when it procs
+ stance_damage += 2
+ if(prob(10))
+ visible_message("\The [src]'s [E.name] [pick("twitches", "shudders")] and sparks!")
+ var/datum/effect/effect/system/spark_spread/spark_system = new ()
+ spark_system.set_up(5, 0, src)
+ spark_system.attach(src)
+ spark_system.start()
+ spawn(10)
+ qdel(spark_system)
+ else if (E.is_broken() || !E.is_usable())
stance_damage += 1
else if (E.is_dislocated())
stance_damage += 0.5
@@ -94,7 +105,27 @@
Weaken(5) //can't emote while weakened, apparently.
/mob/living/carbon/human/proc/handle_grasp()
+ if(!l_hand && !r_hand)
+ return
+ // You should not be able to pick anything up, but stranger things have happened.
+ if(l_hand)
+ for(var/limb_tag in list("l_hand","l_arm"))
+ var/obj/item/organ/external/E = get_organ(limb_tag)
+ if(!E)
+ visible_message("Lacking a functioning left hand, \the [src] drops \the [l_hand].")
+ drop_from_inventory(l_hand)
+ break
+
+ if(r_hand)
+ for(var/limb_tag in list("r_hand","r_arm"))
+ var/obj/item/organ/external/E = get_organ(limb_tag)
+ if(!E)
+ visible_message("Lacking a functioning right hand, \the [src] drops \the [r_hand].")
+ drop_from_inventory(r_hand)
+ break
+
+ // Check again...
if(!l_hand && !r_hand)
return
@@ -118,8 +149,12 @@
else if(E.is_malfunctioning())
if(E.body_part == HAND_LEFT)
+ if(!l_hand)
+ continue
drop_from_inventory(l_hand)
else
+ if(!r_hand)
+ continue
drop_from_inventory(r_hand)
emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!")
diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm
index 0357d4ee09b..27a8f93753e 100644
--- a/code/modules/mob/living/carbon/human/human_powers.dm
+++ b/code/modules/mob/living/carbon/human/human_powers.dm
@@ -253,6 +253,6 @@
visible_message("\The [src] quivers slightly, then splits apart with a wet slithering noise.")
- del(src)
+ qdel(src)
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index c19540c800f..7f469f08d7c 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -116,7 +116,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_inv_glasses()
else if (W == head)
head = null
-
+
var/update_hair = 0
if((W.flags & BLOCKHAIR) || (W.flags & BLOCKHEADHAIR))
update_hair = 1
@@ -128,7 +128,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_hair(0) //rebuild hair
update_inv_ears(0)
update_inv_wear_mask(0)
-
+
update_inv_head()
else if (W == l_ear)
l_ear = null
@@ -168,9 +168,9 @@ This saves us from having to call add_fingerprint() any time something is put in
back = null
update_inv_back()
else if (W == handcuffed)
- handcuffed = null
+ handcuffed = null
if(buckled && buckled.buckle_require_restraints)
- buckled.unbuckle_mob()
+ buckled.unbuckle_mob()
update_inv_handcuffed()
else if (W == legcuffed)
legcuffed = null
@@ -183,7 +183,7 @@ This saves us from having to call add_fingerprint() any time something is put in
update_inv_l_hand()
else
return 0
-
+
update_action_buttons()
return 1
@@ -315,13 +315,16 @@ This saves us from having to call add_fingerprint() any time something is put in
W.layer = 20
+ if(W.action_button_name)
+ update_action_buttons()
+
return 1
//Checks if a given slot can be accessed at this time, either to equip or unequip I
/mob/living/carbon/human/slot_is_accessible(var/slot, var/obj/item/I, mob/user=null)
var/obj/item/covering = null
var/check_flags = 0
-
+
switch(slot)
if(slot_wear_mask)
covering = src.head
@@ -331,7 +334,7 @@ This saves us from having to call add_fingerprint() any time something is put in
check_flags = HEADCOVERSEYES
if(slot_gloves, slot_w_uniform)
covering = src.wear_suit
-
+
if(covering)
if((covering.body_parts_covered & I.body_parts_covered) || (covering.flags & check_flags))
user << "\The [covering] is in the way."
@@ -340,473 +343,23 @@ This saves us from having to call add_fingerprint() any time something is put in
/mob/living/carbon/human/get_equipped_item(var/slot)
switch(slot)
- if(slot_wear_suit) return wear_suit
- if(slot_gloves) return gloves
- if(slot_shoes) return shoes
- if(slot_belt) return belt
- if(slot_glasses) return glasses
- if(slot_head) return head
- if(slot_l_ear) return l_ear
- if(slot_r_ear) return r_ear
- if(slot_w_uniform) return w_uniform
- if(slot_wear_id) return wear_id
- if(slot_l_store) return l_store
- if(slot_r_store) return r_store
- if(slot_s_store) return s_store
+ if(slot_back) return back
+ if(slot_legcuffed) return legcuffed
if(slot_handcuffed) return handcuffed
- if(slot_legcuffed) return legcuffed
+ if(slot_l_store) return l_store
+ if(slot_r_store) return r_store
+ if(slot_wear_mask) return wear_mask
+ if(slot_l_hand) return l_hand
+ if(slot_r_hand) return r_hand
+ if(slot_wear_id) return wear_id
+ if(slot_glasses) return glasses
+ if(slot_gloves) return gloves
+ if(slot_head) return head
+ if(slot_shoes) return shoes
+ if(slot_belt) return belt
+ if(slot_wear_suit) return wear_suit
+ if(slot_w_uniform) return w_uniform
+ if(slot_s_store) return s_store
+ if(slot_l_ear) return l_ear
+ if(slot_r_ear) return r_ear
return ..()
-
-///Bizarre equip effect system below
-
-/*
- MouseDrop human inventory menu
-*/
-
-/obj/effect/equip_e
- name = "equip e"
- var/mob/source = null
- var/s_loc = null //source location
- var/t_loc = null //target location
- var/obj/item/item = null
- var/place = null
-
-/obj/effect/equip_e/human
- name = "human"
- var/mob/living/carbon/human/target = null
-
-/obj/effect/equip_e/process()
- return
-
-/obj/effect/equip_e/proc/done()
- return
-
-/obj/effect/equip_e/New()
- if (!ticker)
- qdel(src)
- spawn(100)
- qdel(src)
- ..()
- return
-
-/obj/effect/equip_e/human/process()
- if (item)
- item.add_fingerprint(source)
- else
- switch(place)
- if("mask")
- if (!( target.wear_mask ))
- qdel(src)
- if("l_hand")
- if (!( target.l_hand ))
- qdel(src)
- if("r_hand")
- if (!( target.r_hand ))
- qdel(src)
- if("suit")
- if (!( target.wear_suit ))
- qdel(src)
- if("uniform")
- if (!( target.w_uniform ))
- qdel(src)
- if("back")
- if (!( target.back ))
- qdel(src)
- if("syringe")
- return
- if("pill")
- return
- if("fuel")
- return
- if("drink")
- return
- if("dnainjector")
- return
- if("handcuff")
- if (!( target.handcuffed ))
- qdel(src)
- if("id")
- if ((!( target.wear_id ) || !( target.w_uniform )))
- qdel(src)
- if("splints")
- var/count = 0
- for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
- var/obj/item/organ/external/o = target.organs_by_name[organ]
- if(o.status & ORGAN_SPLINTED)
- count = 1
- break
- if(count == 0)
- qdel(src)
- return
- if("sensor")
- if (! target.w_uniform )
- qdel(src)
- if("internal")
- if ((!( (istype(target.wear_mask, /obj/item/clothing/mask) && (istype(target.back, /obj/item/weapon/tank) || istype(target.belt, /obj/item/weapon/tank) || istype(target.s_store, /obj/item/weapon/tank)) && !( target.internal )) ) && !( target.internal )))
- qdel(src)
-
- var/list/L = list( "syringe", "pill", "drink", "dnainjector", "fuel", "sensor", "internal", "tie")
- if ((item && !( L.Find(place) )))
- if(isrobot(source) && place != "handcuff")
- qdel(src)
- for(var/mob/O in viewers(target, null))
- O.show_message("\red [source] is trying to put \a [item] on [target]", 1)
- else
-
- var/target_part = null
- var/obj/item/target_item = null
- var/message = null
-
- switch(place)
- if("mask")
- target_part = "head"
- target_item = target.wear_mask
- if("l_hand")
- target_part = "left hand"
- target_item = target.l_hand
- if("r_hand")
- target_part = "right hand"
- target_item = target.r_hand
- if("gloves")
- target_part = "hands"
- target_item = target.gloves
- if("eyes")
- target_part = "eyes"
- target_item = target.glasses
- if("l_ear")
- target_part = "left ear"
- target_item = target.l_ear
- if("r_ear")
- target_part = "right ear"
- target_item = target.r_ear
- if("head")
- target_part = "head"
- target_item = target.head
- if("shoes")
- target_part = "feet"
- target_item = target.shoes
- if("belt")
- target_part = "waist"
- target_item = target.belt
- if("suit")
- target_part = "body"
- target_item = target.wear_suit
- if("back")
- target_part = "back"
- target_item = target.back
- if("s_store")
- target_part = "suit"
- target_item = target.s_store
- if("id")
- target_part = "uniform"
- target_item = target.wear_id
-
- if("syringe")
- message = "\red [source] is trying to inject [target]!"
- if("pill")
- message = "\red [source] is trying to force [target] to swallow [item]!"
- if("drink")
- message = "\red [source] is trying to force [target] to swallow a gulp of [item]!"
- if("dnainjector")
- message = "\red [source] is trying to inject [target] with the [item]!"
- if("uniform")
- target.attack_log += text("\[[time_stamp()]\] Has had their uniform ([target.w_uniform]) removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) uniform ([target.w_uniform])")
- if(target.w_uniform && !target.w_uniform.canremove)
- message = "\red [source] fails to take off \a [target.w_uniform] from [target]'s body!"
- return
- else
- message = "\red [source] is trying to take off \a [target.w_uniform] from [target]'s body!"
- for(var/obj/item/I in list(target.l_store, target.r_store))
- if(I.on_found(source))
- return
- if("handcuff")
- target.attack_log += text("\[[time_stamp()]\] Was unhandcuffed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to unhandcuff [target.name]'s ([target.ckey])")
- message = "\red [source] is trying to unhandcuff [target]!"
- if("legcuff")
- target.attack_log += text("\[[time_stamp()]\] Was unlegcuffed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to unlegcuff [target.name]'s ([target.ckey])")
- message = "\red [source] is trying to unlegcuff [target]!"
- if("tie")
- var/obj/item/clothing/under/suit = target.w_uniform
- if(suit.accessories.len)
- var/obj/item/clothing/accessory/A = suit.accessories[1]
- target.attack_log += "\[[time_stamp()]\] Has had their accessory ([A]) removed by [source.name] ([source.ckey])"
- source.attack_log += "\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) accessory ([A])"
- if(istype(A, /obj/item/clothing/accessory/holobadge) || istype(A, /obj/item/clothing/accessory/medal))
- for(var/mob/M in viewers(target, null))
- M.show_message("\red [source] tears off \the [A] from [target]'s [suit]!" , 1)
- done()
- return
- else
- message = "\red [source] is trying to take off \a [A] from [target]'s [suit]!"
- if("pockets")
- target.attack_log += text("\[[time_stamp()]\] Has had their pockets emptied by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to empty [target.name]'s ([target.ckey]) pockets")
- for(var/obj/item/I in list(target.l_store, target.r_store))
- if(I.on_found(source))
- return
- message = "\red [source] is trying to empty [target]'s pockets."
- if("CPR")
- if (!target.cpr_time)
- qdel(src)
- target.cpr_time = 0
- message = "\red [source] is trying perform CPR on [target]!"
- if("internal")
- target.attack_log += text("\[[time_stamp()]\] Has had their internals toggled by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to toggle [target.name]'s ([target.ckey]) internals")
- if (target.internal)
- message = "\red [source] is trying to remove [target]'s internals"
- else
- message = "\red [source] is trying to set on [target]'s internals."
- if("splints")
- message = text("\red [] is trying to remove []'s splints!", source, target)
- if("sensor")
- target.attack_log += text("\[[time_stamp()]\] Has had their sensors toggled by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to toggle [target.name]'s ([target.ckey]) sensors")
- var/obj/item/clothing/under/suit = target.w_uniform
- if (suit.has_sensor >= 2)
- source << "The controls are locked."
- return
- message = "\red [source] is trying to set [target]'s suit sensors!"
-
- if(target_item)
- target.attack_log += text("\[[time_stamp()]\] Had their [target_item] removed by [source.name] ([source.ckey])")
- source.attack_log += text("\[[time_stamp()]\] Attempted to remove [target.name]'s ([target.ckey]) [target_item]")
-
- if(target_item.canremove)
- message = "[source] is trying to take off \a [target_item] from [target]'s [target_part]!"
- else
- source.visible_message("[source] fails to take off \a [target_item] from [target]'s [target_part]!")
- return
-
- source.visible_message(message)
-
- spawn( HUMAN_STRIP_DELAY )
- done()
- return
- return
-
-/*
-This proc equips stuff (or does something else) when removing stuff manually from the character window when you click and drag.
-It works in conjuction with the process() above.
-This proc works for humans only. Aliens stripping humans and the like will all use this proc. Stripping monkeys or somesuch will use their version of this proc.
-The first if statement for "mask" and such refers to items that are already equipped and un-equipping them.
-The else statement is for equipping stuff to empty slots.
-!canremove refers to variable of /obj/item/clothing which either allows or disallows that item to be removed.
-It can still be worn/put on as normal.
-*/
-/obj/effect/equip_e/human/done() //TODO: And rewrite this :< ~Carn
- target.cpr_time = 1
- if(isanimal(source)) return //animals cannot strip people
- if(!source || !target) return //Target or source no longer exist
- if(source.loc != s_loc) return //source has moved
- if(target.loc != t_loc) return //target has moved
- if(LinkBlocked(s_loc,t_loc)) return //Use a proxi!
- if(item && source.get_active_hand() != item) return //Swapped hands / removed item from the active one
- if ((source.restrained() || source.stat)) return //Source restrained or unconscious / dead
-
- var/slot_to_process
- var/obj/item/strip_item //this will tell us which item we will be stripping - if any.
-
- switch(place) //here we go again...
- if("mask")
- slot_to_process = slot_wear_mask
- if (target.wear_mask && target.wear_mask.canremove)
- strip_item = target.wear_mask
- if("gloves")
- slot_to_process = slot_gloves
- if (target.gloves && target.gloves.canremove)
- strip_item = target.gloves
- if("eyes")
- slot_to_process = slot_glasses
- if (target.glasses)
- strip_item = target.glasses
- if("belt")
- slot_to_process = slot_belt
- if (target.belt)
- strip_item = target.belt
- if("s_store")
- slot_to_process = slot_s_store
- if (target.s_store)
- strip_item = target.s_store
- if("head")
- slot_to_process = slot_head
- if (target.head && target.head.canremove)
- strip_item = target.head
- if("l_ear")
- slot_to_process = slot_l_ear
- if (target.l_ear)
- strip_item = target.l_ear
- if("r_ear")
- slot_to_process = slot_r_ear
- if (target.r_ear)
- strip_item = target.r_ear
- if("shoes")
- slot_to_process = slot_shoes
- if (target.shoes && target.shoes.canremove)
- strip_item = target.shoes
- if("l_hand")
- if (istype(target, /obj/item/clothing/suit/straight_jacket))
- qdel(src)
- slot_to_process = slot_l_hand
- if (target.l_hand)
- strip_item = target.l_hand
- if("r_hand")
- if (istype(target, /obj/item/clothing/suit/straight_jacket))
- qdel(src)
- slot_to_process = slot_r_hand
- if (target.r_hand)
- strip_item = target.r_hand
- if("uniform")
- slot_to_process = slot_w_uniform
- if(target.w_uniform && target.w_uniform.canremove)
- strip_item = target.w_uniform
- if("suit")
- slot_to_process = slot_wear_suit
- if (target.wear_suit && target.wear_suit.canremove)
- strip_item = target.wear_suit
- if("tie")
- var/obj/item/clothing/under/suit = target.w_uniform
- //var/obj/item/clothing/accessory/tie = suit.hastie
- /*if(tie)
- if (istype(tie,/obj/item/clothing/accessory/storage))
- var/obj/item/clothing/accessory/storage/W = tie
- if (W.hold)
- W.hold.close(usr)
- usr.put_in_hands(tie)
- suit.hastie = null*/
- if(suit && suit.accessories.len)
- var/obj/item/clothing/accessory/A = suit.accessories[1]
- A.on_removed(usr)
- suit.accessories -= A
- target.update_inv_w_uniform()
- if("id")
- slot_to_process = slot_wear_id
- if (target.wear_id)
- strip_item = target.wear_id
- if("back")
- slot_to_process = slot_back
- if (target.back)
- strip_item = target.back
- if("handcuff")
- slot_to_process = slot_handcuffed
- if (target.handcuffed)
- strip_item = target.handcuffed
- else if (source != target && ishuman(source))
- //check that we are still grabbing them
- var/grabbing = 0
- for (var/obj/item/weapon/grab/G in target.grabbed_by)
- if (G.loc == source && G.state >= GRAB_AGGRESSIVE)
- grabbing = 1
- break
- if (!grabbing)
- slot_to_process = null
- source << "\red Your grasp was broken before you could restrain [target]!"
-
- if("legcuff")
- slot_to_process = slot_legcuffed
- if (target.legcuffed)
- strip_item = target.legcuffed
- if("splints")
- var/can_reach_splints = 1
- if(target.wear_suit && istype(target.wear_suit,/obj/item/clothing/suit/space))
- var/obj/item/clothing/suit/space/suit = target.wear_suit
- if(suit.supporting_limbs && suit.supporting_limbs.len)
- source << "You cannot remove the splints - [target]'s [suit] is supporting some of the breaks."
- can_reach_splints = 0
-
- if(can_reach_splints)
- for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
- var/obj/item/organ/external/o = target.get_organ(organ)
- if (o && o.status & ORGAN_SPLINTED)
- var/obj/item/W = new /obj/item/stack/medical/splint(amount=1)
- o.status &= ~ORGAN_SPLINTED
- if (W)
- W.loc = target.loc
- W.layer = initial(W.layer)
- W.add_fingerprint(source)
- if("CPR")
- if ((target.health > config.health_threshold_dead && target.health < config.health_threshold_crit))
- var/suff = min(target.getOxyLoss(), 5) //Pre-merge level, less healing, more prevention of dieing.
- target.adjustOxyLoss(-suff)
- target.updatehealth()
- for(var/mob/O in viewers(source, null))
- O.show_message("\red [source] performs CPR on [target]!", 1)
- target << "\blue You feel a breath of fresh air enter your lungs. It feels good."
- source << "\red Repeat at least every 7 seconds."
- if("dnainjector")
- var/obj/item/weapon/dnainjector/S = item
- if(S)
- S.add_fingerprint(source)
- if (!( istype(S, /obj/item/weapon/dnainjector) ))
- S.inuse = 0
- qdel(src)
- S.inject(target, source)
- if (S.s_time >= world.time + 30)
- S.inuse = 0
- qdel(src)
- S.s_time = world.time
- for(var/mob/O in viewers(source, null))
- O.show_message("\red [source] injects [target] with the DNA Injector!", 1)
- S.inuse = 0
- if("pockets")
- if (!item || (target.l_store && target.r_store)) // Only empty pockets when hand is empty or both pockets are full
- slot_to_process = slot_l_store
- strip_item = target.l_store //We'll do both
- else if (target.l_store)
- slot_to_process = slot_r_store
- else
- slot_to_process = slot_l_store
- if("sensor")
- var/obj/item/clothing/under/suit = target.w_uniform
- if (suit)
- if(suit.has_sensor >= 2)
- source << "The controls are locked."
- else
- suit.set_sensors(source)
- if("internal")
- if (target.internal)
- target.internal.add_fingerprint(source)
- target.internal = null
- if (target.internals)
- target.internals.icon_state = "internal0"
- else
- if (!( istype(target.wear_mask, /obj/item/clothing/mask) ))
- return
- else
- if (istype(target.back, /obj/item/weapon/tank))
- target.internal = target.back
- else if (istype(target.s_store, /obj/item/weapon/tank))
- target.internal = target.s_store
- else if (istype(target.belt, /obj/item/weapon/tank))
- target.internal = target.belt
- if (target.internal)
- for(var/mob/M in viewers(target, 1))
- M.show_message("[target] is now running on internals.", 1)
- target.internal.add_fingerprint(source)
- if (target.internals)
- target.internals.icon_state = "internal1"
- if(slot_to_process)
- if(strip_item) //Stripping an item from the mob
- if(strip_item.mob_can_unequip(target, slot_to_process, 0))
- target.drop_from_inventory(strip_item)
- source.put_in_hands(strip_item)
- strip_item.add_fingerprint(source)
- if(slot_to_process == slot_l_store) //pockets! Needs to process the other one too. Snowflake code, wooo! It's not like anyone will rewrite this anytime soon. If I'm wrong then... CONGRATULATIONS! ;)
- if(target.r_store)
- target.drop_from_inventory(target.r_store) //At this stage l_store is already processed by the code above, we only need to process r_store.
- else
- source << "You fail to remove \the [strip_item] from [target]!"
- else if(item)
- if(target.has_organ_for_slot(slot_to_process) && item.mob_can_equip(target, slot_to_process, 0)) //Placing an item on the mob
- source.drop_from_inventory(item)
- target.equip_to_slot_if_possible(item, slot_to_process, 0, 1, 1)
- else
- source << "You fail to place \the [item] on [target]!"
-
- if(source && target)
- if(source.machine == target)
- target.show_inv(source)
- qdel(src)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm
index c16a03d5ca8..e1abecc16b8 100644
--- a/code/modules/mob/living/carbon/human/life.dm
+++ b/code/modules/mob/living/carbon/human/life.dm
@@ -235,16 +235,21 @@
custom_pain("Your head feels numb and painful.")
if(getBrainLoss() >= 15)
if(4 <= rn && rn <= 6) if(eye_blurry <= 0)
- src << "\red It becomes hard to see for some reason."
+ src << "It becomes hard to see for some reason."
eye_blurry = 10
if(getBrainLoss() >= 35)
if(7 <= rn && rn <= 9) if(get_active_hand())
- src << "\red Your hand won't respond properly, you drop what you're holding."
+ src << "Your hand won't respond properly, you drop what you're holding!"
drop_item()
- if(getBrainLoss() >= 50)
- if(10 <= rn && rn <= 12) if(!lying)
- src << "\red Your legs won't respond properly, you fall down."
- resting = 1
+ if(getBrainLoss() >= 45)
+ if(10 <= rn && rn <= 12)
+ if(prob(50))
+ src << "You suddenly black out!"
+ Paralyse(10)
+ else if(!lying)
+ src << "Your legs won't respond properly, you fall down!"
+ Weaken(10)
+
proc/handle_stasis_bag()
// Handle side effects from stasis bag
@@ -258,9 +263,6 @@
proc/handle_mutations_and_radiation()
- if(species.flags & IS_SYNTHETIC) //Robots don't suffer from mutations or radloss.
- return
-
if(getFireLoss())
if((COLD_RESISTANCE in mutations) || (prob(1)))
heal_organ_damage(0,1)
@@ -709,9 +711,9 @@
*/
proc/stabilize_body_temperature()
- if (species.flags & IS_SYNTHETIC)
- bodytemperature += species.synth_temp_gain //just keep putting out heat.
- return
+
+ if (species.passive_temp_gain) // We produce heat naturally.
+ bodytemperature += species.passive_temp_gain
var/body_temperature_difference = species.body_temperature - bodytemperature
@@ -858,11 +860,18 @@
proc/handle_chemicals_in_body()
- if(reagents && !(species.flags & IS_SYNTHETIC)) //Synths don't process reagents.
+ if(reagents)
+ chem_effects.Cut()
+ analgesic = 0
var/alien = 0
if(species && species.reagent_tag)
alien = species.reagent_tag
- reagents.metabolize(src,alien)
+ touching.metabolize(alien, CHEM_TOUCH)
+ if(!(species.flags & NO_BLOOD))
+ ingested.metabolize(alien, CHEM_INGEST)
+ reagents.metabolize(alien, CHEM_BLOOD)
+ if(CE_PAINKILLER in chem_effects)
+ analgesic = chem_effects[CE_PAINKILLER]
var/total_phoronloss = 0
for(var/obj/item/I in src)
@@ -877,10 +886,11 @@
var/light_amount = 0 //how much light there is in the place, affects receiving nutrition and healing
if(isturf(loc)) //else, there's considered to be no light
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = min(10,T.lighting_lumcount) - 5 //hardcapped so it's not abused by having a ton of flashlights
- else light_amount = 5
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = min(10,L.lum_r + L.lum_g + L.lum_b) - 5 //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 5
nutrition += light_amount
traumatic_shock -= light_amount
@@ -898,10 +908,11 @@
var/light_amount = 0
if(isturf(loc))
var/turf/T = loc
- var/area/A = T.loc
- if(A)
- if(A.lighting_use_dynamic) light_amount = T.lighting_lumcount
- else light_amount = 10
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L)
+ light_amount = L.lum_r + L.lum_g + L.lum_b //hardcapped so it's not abused by having a ton of flashlights
+ else
+ light_amount = 10
if(light_amount > species.light_dam) //if there's enough light, start dying
take_overall_damage(1,1)
else //heal in the dark
@@ -923,7 +934,8 @@
take_overall_damage(2,0)
traumatic_shock++
- if(!(species.flags & IS_SYNTHETIC)) handle_trace_chems()
+ // TODO: stomach and bloodstream organ.
+ handle_trace_chems()
updatehealth()
@@ -934,7 +946,7 @@
if(status_flags & GODMODE) return 0
//SSD check, if a logged player is awake put them back to sleep!
- if(player_logged && sleeping < 2)
+ if(sleeping < 2 && species.show_ssd && (!client || !key || player_logged))
sleeping = 2
if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP
@@ -949,9 +961,6 @@
silent = 0
return 1
- // the analgesic effect wears off slowly
- analgesic = max(0, analgesic - 1)
-
//UNCONSCIOUS. NO-ONE IS HOME
if( (getOxyLoss() > 50) || (config.health_threshold_crit > health) )
Paralyse(3)
@@ -987,6 +996,7 @@
AdjustParalysis(-1)
blinded = 1
stat = UNCONSCIOUS
+ animate_tail_reset()
if(halloss > 0)
adjustHalLoss(-3)
else if(sleeping)
@@ -1001,6 +1011,7 @@
sleeping = max(sleeping-1, 0)
blinded = 1
stat = UNCONSCIOUS
+ animate_tail_reset()
if( prob(2) && health && !hal_crit )
spawn(0)
emote("snore")
@@ -1024,24 +1035,36 @@
blinded = 1
// Check everything else.
- if(!species.has_organ["eyes"]) // Presumably if a species has no eyes, they see via something else.
+
+ //Vision
+ var/obj/item/organ/vision
+ if(species.vision_organ)
+ vision = internal_organs_by_name[species.vision_organ]
+
+ if(!vision) // Presumably if a species has no vision organs, they see via some other means.
eye_blind = 0
blinded = 0
eye_blurry = 0
- else if(!has_eyes()) // Eyes cut out? Permablind.
+ else if(vision.is_broken()) // Vision organs cut out or broken? Permablind.
eye_blind = 1
blinded = 1
eye_blurry = 1
- else if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own
- blinded = 1
- else if(eye_blind) // Blindness, heals slowly over time
- eye_blind = max(eye_blind-1,0)
- blinded = 1
- else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
- eye_blurry = max(eye_blurry-3, 0)
- blinded = 1
- else if(eye_blurry) // Blurry eyes heal slowly
- eye_blurry = max(eye_blurry-1, 0)
+ else
+ //blindness
+ if(sdisabilities & BLIND) // Disabled-blind, doesn't get better on its own
+ blinded = 1
+ else if(eye_blind) // Blindness, heals slowly over time
+ eye_blind = max(eye_blind-1,0)
+ blinded = 1
+ else if(istype(glasses, /obj/item/clothing/glasses/sunglasses/blindfold)) //resting your eyes with a blindfold heals blurry eyes faster
+ eye_blurry = max(eye_blurry-3, 0)
+ blinded = 1
+
+ //blurry sight
+ if(vision.is_bruised()) // Vision organs impaired? Permablurry.
+ eye_blurry = 1
+ if(eye_blurry) // Blurry eyes heal slowly
+ eye_blurry = max(eye_blurry-1, 0)
//Ears
if(sdisabilities & DEAF) //disabled-deaf, doesn't get better on its own
@@ -1124,11 +1147,9 @@
client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask, global_hud.nvg, global_hud.thermal, global_hud.meson, global_hud.science)
- update_action_buttons()
-
if(damageoverlay.overlays)
damageoverlay.overlays = list()
-
+
if(stat == UNCONSCIOUS)
//Critical damage passage overlay
if(health <= 0)
@@ -1255,7 +1276,7 @@
see_invisible = SEE_INVISIBLE_LIVING
if(healths)
- if (analgesic)
+ if (analgesic > 100)
healths.icon_state = "health_health_numb"
else
switch(hal_screwyhud)
@@ -1263,7 +1284,7 @@
if(2) healths.icon_state = "health7"
else
//switch(health - halloss)
- switch(100 - ((species && species.flags & NO_PAIN & !IS_SYNTHETIC) ? 0 : traumatic_shock))
+ switch(100 - ((species.flags & NO_PAIN) ? 0 : traumatic_shock))
if(100 to INFINITY) healths.icon_state = "health0"
if(80 to 100) healths.icon_state = "health1"
if(60 to 80) healths.icon_state = "health2"
@@ -1358,11 +1379,11 @@
var/obj/item/clothing/glasses/welding/O = glasses
if(!O.up)
found_welder = 1
- else if(istype(head, /obj/item/clothing/head/welding))
+ if(!found_welder && istype(head, /obj/item/clothing/head/welding))
var/obj/item/clothing/head/welding/O = head
if(!O.up)
found_welder = 1
- else if(istype(back, /obj/item/weapon/rig))
+ if(!found_welder && istype(back, /obj/item/weapon/rig))
var/obj/item/weapon/rig/O = back
if(O.helmet && O.helmet == head && (O.helmet.body_parts_covered & EYES))
if((O.offline && O.offline_vision_restriction == 1) || (!O.offline && O.vision_restriction == 1))
@@ -1418,8 +1439,9 @@
//0.1% chance of playing a scary sound to someone who's in complete darkness
if(isturf(loc) && rand(1,1000) == 1)
- var/turf/currentTurf = loc
- if(!currentTurf.lighting_lumcount)
+ var/turf/T = loc
+ var/atom/movable/lighting_overlay/L = locate(/atom/movable/lighting_overlay) in T
+ if(L && L.lum_r + L.lum_g + L.lum_b == 0)
playsound_local(src,pick(scarySounds),50, 1, -1)
proc/handle_stomach()
@@ -1446,7 +1468,7 @@
handle_shock()
..()
if(status_flags & GODMODE) return 0 //godmode
- if(analgesic || (species && species.flags & NO_PAIN)) return // analgesic avoids all traumatic shock temporarily
+ if(species && species.flags & NO_PAIN) return
if(health < config.health_threshold_softcrit)// health 0 makes you immediately collapse
shock_stage = max(shock_stage, 61)
@@ -1498,7 +1520,8 @@
if(life_tick % 5) return pulse //update pulse every 5 life ticks (~1 tick/sec, depending on server load)
- if(species && species.flags & NO_BLOOD) return PULSE_NONE //No blood, no pulse.
+ if(species && species.flags & NO_BLOOD)
+ return PULSE_NONE //No blood, no pulse.
if(stat == DEAD)
return PULSE_NONE //that's it, you're dead, nothing can influence your pulse
diff --git a/code/modules/mob/living/carbon/human/say.dm b/code/modules/mob/living/carbon/human/say.dm
index 10a2dca6aa5..a4591b34d28 100644
--- a/code/modules/mob/living/carbon/human/say.dm
+++ b/code/modules/mob/living/carbon/human/say.dm
@@ -170,8 +170,9 @@
/mob/living/carbon/human/handle_message_mode(message_mode, message, verb, speaking, used_radios, alt_name)
switch(message_mode)
if("intercom")
- for(var/obj/item/device/radio/intercom/I in view(1, null))
+ for(var/obj/item/device/radio/intercom/I in view(1))
I.talk_into(src, message, verb, speaking)
+ I.add_fingerprint(src)
used_radios += I
if("headset")
if(l_ear && istype(l_ear,/obj/item/device/radio))
diff --git a/code/modules/mob/living/carbon/human/species/outsider/vox.dm b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
index a37e4c41b11..926781abe10 100644
--- a/code/modules/mob/living/carbon/human/species/outsider/vox.dm
+++ b/code/modules/mob/living/carbon/human/species/outsider/vox.dm
@@ -54,6 +54,19 @@
var/datum/language/species_language = all_languages[default_language]
return species_language.get_random_name(gender)
+/datum/species/vox/equip_survival_gear(var/mob/living/carbon/human/H)
+ H.equip_to_slot_or_del(new /obj/item/clothing/mask/breath(H), slot_wear_mask)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_back)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H), slot_r_hand)
+ H.internal = H.back
+ else
+ H.equip_to_slot_or_del(new /obj/item/weapon/tank/nitrogen(H), slot_r_hand)
+ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/vox(H.back), slot_in_backpack)
+ H.internal = H.r_hand
+ H.internals.icon_state = "internal1"
+
+
/datum/species/vox/can_shred(var/mob/living/carbon/human/H, var/ignore_intent)
if(!H.mind || !H.mind.special_role) // Pariah check.
return 0
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index 5c01ea38b4b..107ad0fe721 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -23,11 +23,13 @@
var/blood_color = "#A10808" // Red.
var/flesh_color = "#FFC896" // Pink.
var/base_color // Used by changelings. Should also be used for icon previes..
- var/tail // Name of tail image in species effects icon file.
+ var/tail // Name of tail state in species effects icon file.
+ var/tail_animation // If set, the icon to obtain tail animation states from.
var/race_key = 0 // Used for mob icon cache string.
var/icon/icon_template // Used for mob icon generation for non-32x32 species.
var/is_small
- var/show_ssd = 1
+ var/show_ssd = "fast asleep"
+ var/virus_immune
// Language/culture vars.
var/default_language = "Galactic Common" // Default language is used when 'say' is used without modifiers.
@@ -68,7 +70,7 @@
var/heat_level_1 = 360 // Heat damage level 1 above this point.
var/heat_level_2 = 400 // Heat damage level 2 above this point.
var/heat_level_3 = 1000 // Heat damage level 3 above this point.
- var/synth_temp_gain = 0 // IS_SYNTHETIC species will gain this much temperature every second
+ var/passive_temp_gain = 0 // Species will gain this much temperature every second
var/hazard_high_pressure = HAZARD_HIGH_PRESSURE // Dangerously high pressure.
var/warning_high_pressure = WARNING_HIGH_PRESSURE // High pressure warning.
var/warning_low_pressure = WARNING_LOW_PRESSURE // Low pressure warning.
@@ -115,6 +117,7 @@
"appendix" = /obj/item/organ/appendix,
"eyes" = /obj/item/organ/eyes
)
+ var/vision_organ // If set, this organ is required for vision. Defaults to "eyes" if the species has them.
var/list/has_limbs = list(
"chest" = list("path" = /obj/item/organ/external/chest),
@@ -141,6 +144,10 @@
else
hud = new()
+ //If the species has eyes, they are the default vision organ
+ if(!vision_organ && has_organ["eyes"])
+ vision_organ = "eyes"
+
unarmed_attacks = list()
for(var/u_type in unarmed_types)
unarmed_attacks += new u_type()
@@ -174,6 +181,14 @@
return "unknown"
return species_language.get_random_name(gender)
+/datum/species/proc/equip_survival_gear(var/mob/living/carbon/human/H,var/extendedtank = 1)
+ if(H.backbag == 1)
+ if (extendedtank) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H), slot_r_hand)
+ else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand)
+ else
+ if (extendedtank) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(H.back), slot_in_backpack)
+ else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack)
+
/datum/species/proc/create_organs(var/mob/living/carbon/human/H) //Handles creation of mob organs.
for(var/obj/item/organ/organ in H.contents)
@@ -206,14 +221,10 @@
for(var/obj/item/organ/external/O in H.organs)
O.owner = H
- if(flags & IS_SYNTHETIC)
- for(var/obj/item/organ/external/E in H.organs)
- if(E.status & ORGAN_CUT_AWAY || E.status & ORGAN_DESTROYED) continue
- E.robotize()
- for(var/obj/item/organ/I in H.internal_organs)
- I.robotize()
-
/datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target)
+ if (target.holder_type && target.a_intent == "help" && H.a_intent == "help")
+ target.get_scooped(H)
+ return
var/t_him = "them"
switch(target.gender)
@@ -259,10 +270,6 @@
/datum/species/proc/build_hud(var/mob/living/carbon/human/H)
return
-// Grabs the window recieved when you click-drag someone onto you.
-/datum/species/proc/get_inventory_dialogue(var/mob/living/carbon/human/H)
- return
-
//Used by xenos understanding larvae and dionaea understanding nymphs.
/datum/species/proc/can_understand(var/mob/other)
return
diff --git a/code/modules/mob/living/carbon/human/species/species_hud.dm b/code/modules/mob/living/carbon/human/species/species_hud.dm
index 2bb26ca3da5..3a8b133f585 100644
--- a/code/modules/mob/living/carbon/human/species/species_hud.dm
+++ b/code/modules/mob/living/carbon/human/species/species_hud.dm
@@ -17,21 +17,21 @@
// to be drawn for the mob. This is fairly delicate, try to avoid messing with it
// unless you know exactly what it does.
var/list/gear = list(
- "i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
- "o_clothing" = list("loc" = ui_oclothing, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
- "mask" = list("loc" = ui_mask, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
- "gloves" = list("loc" = ui_gloves, "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
- "eyes" = list("loc" = ui_glasses, "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
- "l_ear" = list("loc" = ui_l_ear, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
- "r_ear" = list("loc" = ui_r_ear, "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
- "head" = list("loc" = ui_head, "slot" = slot_head, "state" = "hair", "toggle" = 1),
- "shoes" = list("loc" = ui_shoes, "slot" = slot_shoes, "state" = "shoes", "toggle" = 1),
- "suit storage" = list("loc" = ui_sstore1, "slot" = slot_s_store, "state" = "belt", "dir" = 8),
- "back" = list("loc" = ui_back, "slot" = slot_back, "state" = "back", "dir" = NORTH),
- "id" = list("loc" = ui_id, "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
- "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"),
- "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"),
- "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt")
+ "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
+ "o_clothing" = list("loc" = ui_oclothing, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
+ "mask" = list("loc" = ui_mask, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
+ "gloves" = list("loc" = ui_gloves, "name" = "Gloves", "slot" = slot_gloves, "state" = "gloves", "toggle" = 1),
+ "eyes" = list("loc" = ui_glasses, "name" = "Glasses", "slot" = slot_glasses, "state" = "glasses","toggle" = 1),
+ "l_ear" = list("loc" = ui_l_ear, "name" = "Left Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
+ "r_ear" = list("loc" = ui_r_ear, "name" = "Right Ear", "slot" = slot_r_ear, "state" = "ears", "toggle" = 1),
+ "head" = list("loc" = ui_head, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
+ "shoes" = list("loc" = ui_shoes, "name" = "Shoes", "slot" = slot_shoes, "state" = "shoes", "toggle" = 1),
+ "suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
+ "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
+ "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
+ "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
+ "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
+ "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
)
/datum/hud_data/New()
@@ -55,20 +55,20 @@
/datum/hud_data/diona
has_internals = 0
gear = list(
- "i_clothing" = list("loc" = ui_iclothing, "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
- "o_clothing" = list("loc" = ui_shoes, "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
- "l_ear" = list("loc" = ui_gloves, "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
- "head" = list("loc" = ui_oclothing, "slot" = slot_head, "state" = "hair", "toggle" = 1),
- "suit storage" = list("loc" = ui_sstore1, "slot" = slot_s_store, "state" = "belt", "dir" = 8),
- "back" = list("loc" = ui_back, "slot" = slot_back, "state" = "back", "dir" = NORTH),
- "id" = list("loc" = ui_id, "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
- "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"),
- "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"),
- "belt" = list("loc" = ui_belt, "slot" = slot_belt, "state" = "belt")
+ "i_clothing" = list("loc" = ui_iclothing, "name" = "Uniform", "slot" = slot_w_uniform, "state" = "center", "toggle" = 1, "dir" = SOUTH),
+ "o_clothing" = list("loc" = ui_shoes, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "toggle" = 1, "dir" = SOUTH),
+ "l_ear" = list("loc" = ui_gloves, "name" = "Ear", "slot" = slot_l_ear, "state" = "ears", "toggle" = 1),
+ "head" = list("loc" = ui_oclothing, "name" = "Hat", "slot" = slot_head, "state" = "hair", "toggle" = 1),
+ "suit storage" = list("loc" = ui_sstore1, "name" = "Suit Storage", "slot" = slot_s_store, "state" = "belt", "dir" = 8),
+ "back" = list("loc" = ui_back, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
+ "id" = list("loc" = ui_id, "name" = "ID", "slot" = slot_wear_id, "state" = "id", "dir" = NORTH),
+ "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
+ "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
+ "belt" = list("loc" = ui_belt, "name" = "Belt", "slot" = slot_belt, "state" = "belt")
)
/datum/hud_data/monkey
gear = list(
- "mask" = list("loc" = ui_shoes, "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
- "back" = list("loc" = ui_sstore1, "slot" = slot_back, "state" = "back", "dir" = NORTH),
+ "mask" = list("loc" = ui_shoes, "name" = "Mask", "slot" = slot_wear_mask, "state" = "equip", "toggle" = 1, "dir" = NORTH),
+ "back" = list("loc" = ui_sstore1, "name" = "Back", "slot" = slot_back, "state" = "back", "dir" = NORTH),
)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm
index 64e12eadfa1..db6c69b4092 100644
--- a/code/modules/mob/living/carbon/human/species/station/monkey.dm
+++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm
@@ -13,7 +13,8 @@
greater_form = "Human"
is_small = 1
has_fine_manipulation = 0
- show_ssd = 0
+ show_ssd = null
+
eyes = "blank_eyes"
gibbed_anim = "gibbed-m"
@@ -36,6 +37,7 @@
bump_flag = MONKEY
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL|ALIEN
+ var/holder_type = /obj/item/weapon/holder/monkey
/datum/species/monkey/handle_npc(var/mob/living/carbon/human/H)
if(H.stat != CONSCIOUS)
@@ -45,6 +47,10 @@
if(prob(1))
H.emote(pick("scratch","jump","roll","tail"))
+/datum/species/monkey/handle_post_spawn(var/mob/living/carbon/human/H)
+ ..()
+ H.holder_type = holder_type
+
/datum/species/monkey/get_random_name()
return "[lowertext(name)] ([rand(100,999)])"
@@ -60,6 +66,7 @@
flesh_color = "#AFA59E"
base_color = "#333333"
tail = "farwatail"
+ holder_type = /obj/item/weapon/holder/monkey/farwa
/datum/species/monkey/skrell
name = "Neara"
@@ -74,6 +81,7 @@
blood_color = "#1D2CBF"
reagent_tag = IS_SKRELL
tail = null
+ holder_type = /obj/item/weapon/holder/monkey/neaera
/datum/species/monkey/unathi
name = "Stok"
@@ -88,3 +96,4 @@
flesh_color = "#34AF10"
base_color = "#066000"
reagent_tag = IS_UNATHI
+ holder_type = /obj/item/weapon/holder/monkey/stok
diff --git a/code/modules/mob/living/carbon/human/species/station/slime.dm b/code/modules/mob/living/carbon/human/species/station/slime.dm
index 0f4f8364eea..46a7e9f5f53 100644
--- a/code/modules/mob/living/carbon/human/species/station/slime.dm
+++ b/code/modules/mob/living/carbon/human/species/station/slime.dm
@@ -8,7 +8,7 @@
language = "Sol Common" //todo?
unarmed_types = list(/datum/unarmed_attack/slime_glomp)
- flags = IS_RESTRICTED | NO_BLOOD | NO_SCAN | NO_SLIP | NO_BREATHE
+ flags = IS_RESTRICTED | NO_SCAN | NO_SLIP | NO_BREATHE
siemens_coefficient = 3
darksight = 3
@@ -29,6 +29,20 @@
swap_flags = MONKEY|SLIME|SIMPLE_ANIMAL
push_flags = MONKEY|SLIME|SIMPLE_ANIMAL
+ has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/chest/unbreakable),
+ "groin" = list("path" = /obj/item/organ/external/groin/unbreakable),
+ "head" = list("path" = /obj/item/organ/external/head/unbreakable),
+ "l_arm" = list("path" = /obj/item/organ/external/arm/unbreakable),
+ "r_arm" = list("path" = /obj/item/organ/external/arm/right/unbreakable),
+ "l_leg" = list("path" = /obj/item/organ/external/leg/unbreakable),
+ "r_leg" = list("path" = /obj/item/organ/external/leg/right/unbreakable),
+ "l_hand" = list("path" = /obj/item/organ/external/hand/unbreakable),
+ "r_hand" = list("path" = /obj/item/organ/external/hand/right/unbreakable),
+ "l_foot" = list("path" = /obj/item/organ/external/foot/unbreakable),
+ "r_foot" = list("path" = /obj/item/organ/external/foot/right/unbreakable)
+ )
+
/datum/species/slime/handle_death(var/mob/living/carbon/human/H)
spawn(1)
if(H)
diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm
index ee8a1438d20..8e0402b91a8 100644
--- a/code/modules/mob/living/carbon/human/species/station/station.dm
+++ b/code/modules/mob/living/carbon/human/species/station/station.dm
@@ -19,6 +19,7 @@
deform = 'icons/mob/human_races/r_def_lizard.dmi'
language = "Sinta'unathi"
tail = "sogtail"
+ tail_animation = 'icons/mob/species/unathi/tail.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
primitive_form = "Stok"
darksight = 3
@@ -59,6 +60,10 @@
"Your scales bristle against the cold."
)
+/datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H)
+ ..()
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
+
/datum/species/tajaran
name = "Tajara"
name_plural = "Tajaran"
@@ -66,6 +71,7 @@
deform = 'icons/mob/human_races/r_def_tajaran.dmi'
language = "Siik'tajr"
tail = "tajtail"
+ tail_animation = 'icons/mob/species/tajaran/tail.dmi'
unarmed_types = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws, /datum/unarmed_attack/bite/sharp)
darksight = 8
slowdown = -1
@@ -100,6 +106,10 @@
)
cold_discomfort_level = 275
+/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
+ ..()
+ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
+
/datum/species/skrell
name = "Skrell"
name_plural = "Skrell"
@@ -136,6 +146,8 @@
hud_type = /datum/hud_data/diona
siemens_coefficient = 0.3
eyes = "blank_eyes"
+ show_ssd = "completely quiescent"
+
blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \
species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \
@@ -185,7 +197,7 @@
body_temperature = T0C + 15 //make the plant people have a bit lower body temperature, why not
- flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP | REGENERATES_LIMBS
+ flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | IS_PLANT | NO_BLOOD | NO_PAIN | NO_SLIP
blood_color = "#004400"
flesh_color = "#907E4A"
@@ -198,6 +210,12 @@
return 1
return 0
+/datum/species/diona/equip_survival_gear(var/mob/living/carbon/human/H)
+ if(H.backbag == 1)
+ H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H), slot_r_hand)
+ else
+ H.equip_to_slot_or_del(new /obj/item/device/flashlight/flare(H.back), slot_in_backpack)
+
/datum/species/diona/handle_post_spawn(var/mob/living/carbon/human/H)
H.gender = NEUTER
return ..()
@@ -215,21 +233,29 @@
else
qdel(D)
- H.visible_message("\red[H] splits apart with a wet slithering noise!")
+ H.visible_message("[H] splits apart with a wet slithering noise!")
/datum/species/machine
name = "Machine"
name_plural = "machines"
+ blurb = "Positronic intelligence really took off in the 26th century, and it is not uncommon to see independant, free-willed \
+ robots on many human stations, particularly in fringe systems where standards are slightly lax and public opinion less relevant \
+ to corporate operations. IPCs (Integrated Positronic Chassis) are a loose category of self-willed robots with a humanoid form, \
+ generally self-owned after being 'born' into servitude; they are reliable and dedicated workers, albeit more than slightly \
+ inhuman in outlook and perspective."
+
icobase = 'icons/mob/human_races/r_machine.dmi'
deform = 'icons/mob/human_races/r_machine.dmi'
- language = "Tradeband"
+
+ language = "Encoded Audio Language"
unarmed_types = list(/datum/unarmed_attack/punch)
rarity_value = 2
eyes = "blank_eyes"
- brute_mod = 0.5
- burn_mod = 1
+ brute_mod = 1.875 // 100% * 1.875 * 0.8 (robolimbs) ~= 150%
+ burn_mod = 1.875 // So they take 50% extra damage from brute/burn overall.
+ show_ssd = "flashing a 'system offline' glyph on their monitor"
warning_low_pressure = 50
hazard_low_pressure = 0
@@ -238,22 +264,43 @@
cold_level_2 = -1
cold_level_3 = -1
- heat_level_1 = 500 //gives them about 25 seconds in space before taking damage
+ heat_level_1 = 500 // Gives them about 25 seconds in space before taking damage
heat_level_2 = 1000
heat_level_3 = 2000
- synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment.
+ passive_temp_gain = 10 // This should cause IPCs to stabilize at ~80 C in a 20 C environment.
- flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC
+ flags = CAN_JOIN | IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | NO_POISON
blood_color = "#1F181F"
flesh_color = "#575757"
+ virus_immune = 1
+ reagent_tag = IS_MACHINE
- has_organ = list() //TODO: Positronic brain.
+ has_organ = list(
+ "brain" = /obj/item/organ/mmi_holder/posibrain,
+ "cell" = /obj/item/organ/cell,
+ "optics" = /obj/item/organ/optical_sensor
+ )
+
+ vision_organ = "optics"
+
+ has_limbs = list(
+ "chest" = list("path" = /obj/item/organ/external/chest/ipc),
+ "groin" = list("path" = /obj/item/organ/external/groin/ipc),
+ "head" = list("path" = /obj/item/organ/external/head/ipc),
+ "l_arm" = list("path" = /obj/item/organ/external/arm/ipc),
+ "r_arm" = list("path" = /obj/item/organ/external/arm/right/ipc),
+ "l_leg" = list("path" = /obj/item/organ/external/leg/ipc),
+ "r_leg" = list("path" = /obj/item/organ/external/leg/right/ipc),
+ "l_hand" = list("path" = /obj/item/organ/external/hand/ipc),
+ "r_hand" = list("path" = /obj/item/organ/external/hand/right/ipc),
+ "l_foot" = list("path" = /obj/item/organ/external/foot/ipc),
+ "r_foot" = list("path" = /obj/item/organ/external/foot/right/ipc)
+ )
/datum/species/machine/handle_death(var/mob/living/carbon/human/H)
..()
- if(flags & IS_SYNTHETIC)
- H.h_style = ""
- spawn(100)
- if(H) H.update_hair()
+ H.h_style = ""
+ spawn(100)
+ if(H) H.update_hair()
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
index bdc505fe343..68e106ee1dd 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_facehugger.dm
@@ -54,8 +54,10 @@ var/const/MAX_ACTIVE_TIME = 400
user << "\red \b It looks like the proboscis has been removed."
return
-/obj/item/clothing/mask/facehugger/attackby()
- Die()
+/obj/item/clothing/mask/facehugger/attackby(obj/item/I, mob/user)
+ if(I.force)
+ user.do_attack_animation(src)
+ Die()
return
/obj/item/clothing/mask/facehugger/bullet_act()
@@ -63,7 +65,7 @@ var/const/MAX_ACTIVE_TIME = 400
return
/obj/item/clothing/mask/facehugger/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
- if(exposed_temperature > 300)
+ if(exposed_temperature > T0C+80)
Die()
return
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
index caea1ae7a80..a11bccf1639 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_powers.dm
@@ -134,13 +134,20 @@
return
// OBJ CHECK
+ var/cannot_melt
if(isobj(O))
var/obj/I = O
- if(I.unacidable) //So the aliens don't destroy energy fields/singularies/other aliens/etc with their acid.
- src << "You cannot dissolve this object."
- return
- // TURF CHECK
- else if(istype(O, /turf/simulated/wall/r_wall) || istype(O, /turf/simulated/floor/engine))
+ if(I.unacidable)
+ cannot_melt = 1
+ else
+ if(istype(O, /turf/simulated/wall))
+ var/turf/simulated/wall/W = O
+ if(W.material.flags & MATERIAL_UNMELTABLE)
+ cannot_melt = 1
+ else if(istype(O, /turf/simulated/floor/engine))
+ cannot_melt = 1
+
+ if(cannot_melt)
src << "You cannot dissolve this object."
return
@@ -203,7 +210,7 @@
visible_message("[src] vomits up a thick purple substance and begins to shape it!", "You shape a [choice].")
switch(choice)
if("resin door")
- new /obj/structure/mineral_door/resin(loc)
+ new /obj/structure/simple_door/resin(loc)
if("resin wall")
new /obj/effect/alien/resin/wall(loc)
if("resin membrane")
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
index e94db830d72..ee24e3f6b7f 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/alien_species.dm
@@ -303,8 +303,8 @@
has_internals = 0
gear = list(
- "o_clothing" = list("loc" = ui_belt, "slot" = slot_wear_suit, "state" = "equip", "dir" = SOUTH),
- "head" = list("loc" = ui_id, "slot" = slot_head, "state" = "hair"),
- "storage1" = list("loc" = ui_storage1, "slot" = slot_l_store, "state" = "pocket"),
- "storage2" = list("loc" = ui_storage2, "slot" = slot_r_store, "state" = "pocket"),
+ "o_clothing" = list("loc" = ui_belt, "name" = "Suit", "slot" = slot_wear_suit, "state" = "equip", "dir" = SOUTH),
+ "head" = list("loc" = ui_id, "name" = "Hat", "slot" = slot_head, "state" = "hair"),
+ "storage1" = list("loc" = ui_storage1, "name" = "Left Pocket", "slot" = slot_l_store, "state" = "pocket"),
+ "storage2" = list("loc" = ui_storage2, "name" = "Right Pocket", "slot" = slot_r_store, "state" = "pocket"),
)
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm
index 4ef350ef881..6cb8a464756 100644
--- a/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm
+++ b/code/modules/mob/living/carbon/human/species/xenomorphs/xenomorphs.dm
@@ -47,42 +47,3 @@ Des: Removes all infected images from the alien.
if(dd_hasprefix_case(I.icon_state, "infected"))
qdel(I)
return
-
-/* TODO: Convert this over.
-/mob/living/carbon/human/alien/show_inv(mob/user as mob)
-
- user.set_machine(src)
- var/dat = {"
- [name]
-
- Left Hand: [(l_hand ? text("[]", l_hand) : "Nothing")]
- Right Hand: [(r_hand ? text("[]", r_hand) : "Nothing")]
- Head: [(head ? text("[]", head) : "Nothing")]
- (Exo)Suit: [(wear_suit ? text("[]", wear_suit) : "Nothing")]
- Empty Pouches
- Close
- "}
- user << browse(dat, text("window=mob[name];size=340x480"))
- onclose(user, "mob[name]")
- return
- */
-
-/* TODO: Convert this over.
-/mob/living/carbon/human/alien/queen/large
- icon = 'icons/mob/alienqueen.dmi'
- icon_state = "queen_s"
- pixel_x = -16
-
-/mob/living/carbon/human/alien/queen/large/update_icons()
- lying_prev = lying //so we don't update overlays for lying/standing unless our stance changes again
- update_hud() //TODO: remove the need for this to be here
- overlays.Cut()
- if(lying)
- if(resting) icon_state = "queen_sleep"
- else icon_state = "queen_l"
- for(var/image/I in overlays_lying)
- overlays += I
- else
- icon_state = "queen_s"
- for(var/image/I in overlays_standing)
- overlays += I*/
\ No newline at end of file
diff --git a/code/modules/mob/living/carbon/human/stripping.dm b/code/modules/mob/living/carbon/human/stripping.dm
new file mode 100644
index 00000000000..e62bbce31a0
--- /dev/null
+++ b/code/modules/mob/living/carbon/human/stripping.dm
@@ -0,0 +1,158 @@
+/mob/living/carbon/human/proc/handle_strip(var/slot_to_strip,var/mob/living/user)
+
+ if(!slot_to_strip || !istype(user))
+ return
+
+ var/obj/item/target_slot = get_equipped_item(text2num(slot_to_strip))
+
+ switch(slot_to_strip)
+ // Handle things that are part of this interface but not removing/replacing a given item.
+ if("pockets")
+ visible_message("\The [user] is trying to empty \the [src]'s pockets!")
+ if(do_after(user,HUMAN_STRIP_DELAY))
+ empty_pockets(user)
+ return
+ if("splints")
+ visible_message("\The [user] is trying to remove \the [src]'s splints!")
+ if(do_after(user,HUMAN_STRIP_DELAY))
+ remove_splints(user)
+ return
+ if("sensors")
+ visible_message("\The [user] is trying to set \the [src]'s sensors!")
+ if(do_after(user,HUMAN_STRIP_DELAY))
+ toggle_sensors(user)
+ return
+ if("internals")
+ visible_message("\The [usr] is trying to set \the [src]'s internals!")
+ if(do_after(user,HUMAN_STRIP_DELAY))
+ toggle_internals(user)
+ return
+ if("tie")
+ var/obj/item/clothing/under/suit = w_uniform
+ if(!istype(suit) || !suit.accessories.len)
+ return
+ var/obj/item/clothing/accessory/A = suit.accessories[1]
+ if(!istype(A))
+ return
+ visible_message("\The [usr] is trying to remove \the [src]'s [A.name]!")
+
+ if(!do_after(user,HUMAN_STRIP_DELAY))
+ return
+
+ if(!A || suit.loc != src || !(A in suit.accessories))
+ return
+
+ if(istype(A, /obj/item/clothing/accessory/badge) || istype(A, /obj/item/clothing/accessory/medal))
+ user.visible_message("\The [user] tears off \the [A] from [src]'s [suit.name]!")
+ attack_log += "\[[time_stamp()]\] Has had \the [A] removed by [user.name] ([user.ckey])"
+ user.attack_log += "\[[time_stamp()]\] Attempted to remove [name]'s ([ckey]) [A.name]"
+ A.on_removed(user)
+ suit.accessories -= A
+ update_inv_w_uniform()
+ return
+
+ // Are we placing or stripping?
+ var/stripping
+ var/obj/item/held = user.get_active_hand()
+ if(!istype(held) || is_robot_module(held))
+ if(!istype(target_slot)) // They aren't holding anything valid and there's nothing to remove, why are we even here?
+ return
+ if(!target_slot.canremove)
+ user << "You cannot remove \the [src]'s [target_slot.name]."
+ stripping = 1
+
+ if(stripping)
+ visible_message("\The [user] is trying to remove \the [src]'s [target_slot.name]!")
+ else
+ visible_message("\The [user] is trying to put \a [held] on \the [src]!")
+
+ if(!do_after(user,HUMAN_STRIP_DELAY))
+ return
+
+ if(!stripping && user.get_active_hand() != held)
+ return
+
+ if(stripping)
+ attack_log += "\[[time_stamp()]\] Has had \the [target_slot] removed by [user.name] ([user.ckey])"
+ user.attack_log += "\[[time_stamp()]\] Attempted to remove [name]'s ([ckey]) [target_slot.name]"
+ drop_from_inventory(target_slot)
+ else
+ user.drop_from_inventory(held)
+ equip_to_slot_if_possible(held, text2num(slot_to_strip), 0, 1, 1)
+ if(held.loc != src)
+ user.put_in_hands(held)
+
+// Empty out everything in the target's pockets.
+/mob/living/carbon/human/proc/empty_pockets(var/mob/living/user)
+ if(!r_store && !l_store)
+ user << "\The [src] has nothing in their pockets."
+ return
+ if(r_store)
+ drop_from_inventory(r_store)
+ if(l_store)
+ drop_from_inventory(l_store)
+ visible_message("\The [user] empties \the [src]'s pockets!")
+
+// Modify the current target sensor level.
+/mob/living/carbon/human/proc/toggle_sensors(var/mob/living/user)
+ var/obj/item/clothing/under/suit = w_uniform
+ if(!suit)
+ user << "\The [src] is not wearing a suit with sensors."
+ return
+ if (suit.has_sensor >= 2)
+ user << "\The [src]'s suit sensor controls are locked."
+ return
+ attack_log += text("\[[time_stamp()]\] Has had their sensors toggled by [user.name] ([user.ckey])")
+ user.attack_log += text("\[[time_stamp()]\] Attempted to toggle [name]'s ([ckey]) sensors")
+ suit.set_sensors(user)
+
+// Remove all splints.
+/mob/living/carbon/human/proc/remove_splints(var/mob/living/user)
+
+ var/can_reach_splints = 1
+ if(istype(wear_suit,/obj/item/clothing/suit/space))
+ var/obj/item/clothing/suit/space/suit = wear_suit
+ if(suit.supporting_limbs && suit.supporting_limbs.len)
+ user << "You cannot remove the splints - [src]'s [suit] is supporting some of the breaks."
+ can_reach_splints = 0
+
+ if(can_reach_splints)
+ var/removed_splint
+ for(var/organ in list("l_leg","r_leg","l_arm","r_arm"))
+ var/obj/item/organ/external/o = get_organ(organ)
+ if (o && o.status & ORGAN_SPLINTED)
+ var/obj/item/W = new /obj/item/stack/medical/splint(get_turf(src), 1)
+ o.status &= ~ORGAN_SPLINTED
+ W.add_fingerprint(user)
+ removed_splint = 1
+ if(removed_splint)
+ visible_message("\The [user] removes \the [src]'s splints!")
+ else
+ user << "\The [src] has no splints to remove."
+
+// Set internals on or off.
+/mob/living/carbon/human/proc/toggle_internals(var/mob/living/user)
+ if(internal)
+ internal.add_fingerprint(user)
+ internal = null
+ if(internals)
+ internals.icon_state = "internal0"
+ else
+ // Check for airtight mask/helmet.
+ if(!(istype(wear_mask, /obj/item/clothing/mask) || istype(head, /obj/item/clothing/head/helmet/space)))
+ return
+ // Find an internal source.
+ if(istype(back, /obj/item/weapon/tank))
+ internal = back
+ else if(istype(s_store, /obj/item/weapon/tank))
+ internal = s_store
+ else if(istype(belt, /obj/item/weapon/tank))
+ internal = belt
+
+ if(internal)
+ visible_message("\The [src] is now running on internals!")
+ internal.add_fingerprint(user)
+ if (internals)
+ internals.icon_state = "internal1"
+ else
+ visible_message("\The [user] disables \the [src]'s internals!")
diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm
index d7776fa18d4..8b13178adf3 100644
--- a/code/modules/mob/living/carbon/human/update_icons.dm
+++ b/code/modules/mob/living/carbon/human/update_icons.dm
@@ -5,6 +5,7 @@
icon_key is [species.race_key][g][husk][fat][hulk][skeleton][s_tone]
*/
var/global/list/human_icon_cache = list()
+var/global/list/tail_icon_cache = list() //key is [species.race_key][r_skin][g_skin][b_skin]
var/global/list/light_overlay_cache = list()
///////////////////////
@@ -233,15 +234,13 @@ var/global/list/damage_icon_parts = list()
var/hulk = (HULK in src.mutations)
var/skeleton = (SKELETON in src.mutations)
- var/g = (gender == FEMALE ? "f" : "m")
-
//CACHING: Generate an index key from visible bodyparts.
//0 = destroyed, 1 = normal, 2 = robotic, 3 = necrotic.
//Create a new, blank icon for our mob to use.
if(stand_icon)
qdel(stand_icon)
stand_icon = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi',"blank")
- var/icon_key = "[species.race_key][g][s_tone][r_skin][g_skin][b_skin]"
+ var/icon_key = ""
var/obj/item/organ/eyes/eyes = internal_organs_by_name["eyes"]
if(eyes)
@@ -259,7 +258,12 @@ var/global/list/damage_icon_parts = list()
icon_key += "3"
else
icon_key += "1"
-
+ if(part)
+ icon_key += "[part.species.race_key]"
+ icon_key += "[part.dna.GetUIState(DNA_UI_GENDER)]"
+ icon_key += "[part.dna.GetUIValue(DNA_UI_SKIN_TONE)]"
+ if(part.s_col)
+ icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]"
icon_key = "[icon_key][husk ? 1 : 0][fat ? 1 : 0][hulk ? 1 : 0][skeleton ? 1 : 0]"
var/icon/base_icon
@@ -330,7 +334,7 @@ var/global/list/damage_icon_parts = list()
overlays_standing[HAIR_LAYER] = null
var/obj/item/organ/external/head/head_organ = get_organ("head")
- if( !head_organ || (head_organ.status & ORGAN_DESTROYED) )
+ if(!head_organ || head_organ.is_stump() || (head_organ.status & ORGAN_DESTROYED) )
if(update_icons) update_icons()
return
@@ -468,7 +472,7 @@ var/global/list/damage_icon_parts = list()
under_icon = w_uniform.item_icons[slot_w_uniform_str]
else
under_icon = INV_W_UNIFORM_DEF_ICON
-
+
//determine state to use
var/under_state
if(w_uniform.item_state_slots && w_uniform.item_state_slots[slot_w_uniform_str])
@@ -480,7 +484,7 @@ var/global/list/damage_icon_parts = list()
//need to append _s to the icon state for legacy compatibility
var/image/standing = image(icon = under_icon, icon_state = "[under_state]_s")
-
+
//apply blood overlay
if(w_uniform.blood_DNA)
var/image/bloodsies = image(icon = species.blood_mask, icon_state = "uniformblood")
@@ -491,15 +495,14 @@ var/global/list/damage_icon_parts = list()
var/obj/item/clothing/under/under = w_uniform
if(under.accessories.len)
for(var/obj/item/clothing/accessory/A in under.accessories)
- var/accessory_state = A.overlay_state? A.overlay_state : A.icon_state
- standing.overlays += image(icon = INV_ACCESSORIES_DEF_ICON, icon_state = accessory_state)
+ standing.overlays |= A.get_inv_mob_overlay()
overlays_standing[UNIFORM_LAYER] = standing
else
overlays_standing[UNIFORM_LAYER] = null
if(update_icons)
- update_icons()
+ update_icons()
/mob/living/carbon/human/update_inv_wear_id(var/update_icons=1)
if(wear_id)
@@ -754,7 +757,7 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/update_inv_back(var/update_icons=1)
if(back)
back.screen_loc = ui_back //TODO
-
+
//determine the icon to use
var/icon/overlay_icon
if(back.icon_override)
@@ -769,7 +772,7 @@ var/global/list/damage_icon_parts = list()
overlay_icon = back.item_icons[slot_back_str]
else
overlay_icon = INV_BACK_DEF_ICON
-
+
//determine state to use
var/overlay_state
if(back.item_state_slots && back.item_state_slots[slot_back_str])
@@ -778,13 +781,13 @@ var/global/list/damage_icon_parts = list()
overlay_state = back.item_state
else
overlay_state = back.icon_state
-
+
//create the image
overlays_standing[BACK_LAYER] = image(icon = overlay_icon, icon_state = overlay_state)
else
overlays_standing[BACK_LAYER] = null
- if(update_icons)
+ if(update_icons)
update_icons()
@@ -822,15 +825,6 @@ var/global/list/damage_icon_parts = list()
if(r_hand)
r_hand.screen_loc = ui_rhand //TODO
- //determine icon to use
- var/icon/t_icon
- if(r_hand.icon_override)
- t_icon = r_hand.icon_override
- else if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
- t_icon = r_hand.item_icons[slot_r_hand_str]
- else
- t_icon = INV_R_HAND_DEF_ICON
-
//determine icon state to use
var/t_state
if(r_hand.item_state_slots && r_hand.item_state_slots[slot_r_hand_str])
@@ -839,7 +833,17 @@ var/global/list/damage_icon_parts = list()
t_state = r_hand.item_state
else
t_state = r_hand.icon_state
-
+
+ //determine icon to use
+ var/icon/t_icon
+ if(r_hand.icon_override)
+ t_state += "_r"
+ t_icon = r_hand.icon_override
+ else if(r_hand.item_icons && (slot_r_hand_str in r_hand.item_icons))
+ t_icon = r_hand.item_icons[slot_r_hand_str]
+ else
+ t_icon = INV_R_HAND_DEF_ICON
+
overlays_standing[R_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_r_hand() //this should be moved out of icon code
@@ -853,15 +857,6 @@ var/global/list/damage_icon_parts = list()
if(l_hand)
l_hand.screen_loc = ui_lhand //TODO
- //determine icon to use
- var/icon/t_icon
- if(l_hand.icon_override)
- t_icon = l_hand.icon_override
- else if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
- t_icon = l_hand.item_icons[slot_l_hand_str]
- else
- t_icon = INV_L_HAND_DEF_ICON
-
//determine icon state to use
var/t_state
if(l_hand.item_state_slots && l_hand.item_state_slots[slot_l_hand_str])
@@ -870,7 +865,17 @@ var/global/list/damage_icon_parts = list()
t_state = l_hand.item_state
else
t_state = l_hand.icon_state
-
+
+ //determine icon to use
+ var/icon/t_icon
+ if(l_hand.icon_override)
+ t_state += "_l"
+ t_icon = l_hand.icon_override
+ else if(l_hand.item_icons && (slot_l_hand_str in l_hand.item_icons))
+ t_icon = l_hand.item_icons[slot_l_hand_str]
+ else
+ t_icon = INV_L_HAND_DEF_ICON
+
overlays_standing[L_HAND_LAYER] = image(icon = t_icon, icon_state = t_state)
if (handcuffed) drop_l_hand() //This probably should not be here
@@ -882,12 +887,80 @@ var/global/list/damage_icon_parts = list()
/mob/living/carbon/human/proc/update_tail_showing(var/update_icons=1)
overlays_standing[TAIL_LAYER] = null
- if(species.tail)
- if(!wear_suit || !(wear_suit.flags_inv & HIDETAIL) && !istype(wear_suit, /obj/item/clothing/suit/space))
- var/icon/tail_s = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[species.tail]_s")
- tail_s.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
+ if(species.tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
+ var/icon/tail_s = get_tail_icon()
+ overlays_standing[TAIL_LAYER] = image(tail_s, icon_state = "[species.tail]_s")
+ animate_tail_reset(0)
- overlays_standing[TAIL_LAYER] = image(tail_s)
+ if(update_icons)
+ update_icons()
+
+/mob/living/carbon/human/proc/get_tail_icon()
+ var/icon_key = "[species.race_key][r_skin][g_skin][b_skin]"
+
+ var/icon/tail_icon = tail_icon_cache[icon_key]
+ if(!tail_icon)
+
+ //generate a new one
+ tail_icon = new/icon(icon = (species.tail_animation? species.tail_animation : 'icons/effects/species.dmi'))
+ tail_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
+
+ tail_icon_cache[icon_key] = tail_icon
+
+ return tail_icon
+
+
+/mob/living/carbon/human/proc/set_tail_state(var/t_state)
+ var/image/tail_overlay = overlays_standing[TAIL_LAYER]
+
+ if(tail_overlay && species.tail_animation)
+ tail_overlay.icon_state = t_state
+ return tail_overlay
+ return null
+
+//Not really once, since BYOND can't do that.
+//Update this if the ability to flick() images or make looping animation start at the first frame is ever added.
+/mob/living/carbon/human/proc/animate_tail_once(var/update_icons=1)
+ var/t_state = "[species.tail]_once"
+
+ var/image/tail_overlay = overlays_standing[TAIL_LAYER]
+ if(tail_overlay && tail_overlay.icon_state == t_state)
+ return //let the existing animation finish
+
+ tail_overlay = set_tail_state(t_state)
+ if(tail_overlay)
+ spawn(15)
+ //check that the animation hasn't changed in the meantime
+ if(overlays_standing[TAIL_LAYER] == tail_overlay && tail_overlay.icon_state == t_state)
+ animate_tail_stop()
+
+ if(update_icons)
+ update_icons()
+
+/mob/living/carbon/human/proc/animate_tail_start(var/update_icons=1)
+ set_tail_state("[species.tail]_slow[rand(0,9)]")
+
+ if(update_icons)
+ update_icons()
+
+/mob/living/carbon/human/proc/animate_tail_fast(var/update_icons=1)
+ set_tail_state("[species.tail]_loop[rand(0,9)]")
+
+ if(update_icons)
+ update_icons()
+
+/mob/living/carbon/human/proc/animate_tail_reset(var/update_icons=1)
+ if(stat != DEAD)
+ set_tail_state("[species.tail]_idle[rand(0,9)]")
+ else
+ set_tail_state("[species.tail]_static")
+
+
+ if(update_icons)
+ update_icons()
+
+/mob/living/carbon/human/proc/animate_tail_stop(var/update_icons=1)
+ set_tail_state("[species.tail]_static")
if(update_icons)
update_icons()
diff --git a/code/modules/mob/living/carbon/metroid/items.dm b/code/modules/mob/living/carbon/metroid/items.dm
index 6739cb4e2b9..d068e33e6c9 100644
--- a/code/modules/mob/living/carbon/metroid/items.dm
+++ b/code/modules/mob/living/carbon/metroid/items.dm
@@ -8,7 +8,7 @@
throwforce = 0
throw_speed = 3
throw_range = 6
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/Uses = 1 // uses before it goes inert
var/enhanced = 0 //has it been enhanced before?
@@ -295,7 +295,7 @@
throwforce = 1.0
throw_speed = 2
throw_range = 6
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/POWERFLAG = 0 // sshhhhhhh
var/Flush = 30
var/Uses = 5 // uses before it goes inert
@@ -327,7 +327,7 @@
icon = 'icons/mob/mob.dmi'
icon_state = "slime egg-growing"
bitesize = 12
- origin_tech = "biotech=4"
+ origin_tech = list(TECH_BIO = 4)
var/grown = 0
/obj/item/weapon/reagent_containers/food/snacks/egg/slime/New()
diff --git a/code/modules/mob/living/carbon/metroid/life.dm b/code/modules/mob/living/carbon/metroid/life.dm
index f122830c76f..b41fdb758a2 100644
--- a/code/modules/mob/living/carbon/metroid/life.dm
+++ b/code/modules/mob/living/carbon/metroid/life.dm
@@ -82,8 +82,18 @@
return temp_change
/mob/living/carbon/slime/proc/handle_chemicals_in_body()
+ chem_effects.Cut()
+ analgesic = 0
- if(reagents) reagents.metabolize(src)
+ if(touching)
+ touching.metabolize(0, CHEM_TOUCH)
+ if(ingested)
+ ingested.metabolize(0, CHEM_INGEST)
+ if(reagents)
+ reagents.metabolize(0, CHEM_BLOOD)
+
+ if(CE_PAINKILLER in chem_effects)
+ analgesic = chem_effects[CE_PAINKILLER]
src.updatehealth()
diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm
index ebbfb991d00..8c97286e3fa 100644
--- a/code/modules/mob/living/carbon/metroid/metroid.dm
+++ b/code/modules/mob/living/carbon/metroid/metroid.dm
@@ -61,8 +61,6 @@
verbs += /mob/living/proc/ventcrawl
- create_reagents(100)
-
src.colour = colour
number = rand(1, 1000)
name = "[colour] [is_adult ? "adult" : "baby"] slime ([number])"
@@ -398,9 +396,6 @@
/mob/living/carbon/slime/var/co2overloadtime = null
/mob/living/carbon/slime/var/temperature_resistance = T0C+75
-/mob/living/carbon/slime/show_inv(mob/user)
- return
-
/mob/living/carbon/slime/toggle_throw_mode()
return
@@ -413,14 +408,6 @@
adjustToxLoss(-10)
nutrition = max(nutrition, get_max_nutrition())
-/mob/living/carbon/slime/proc/apply_water(var/amount)
- adjustToxLoss(15 + amount)
- if (!client)
- if (Target) // Like cats
- Target = null
- ++Discipline
- return
-
/mob/living/carbon/slime/can_use_vents()
if(Victim)
return "You cannot ventcrawl while feeding."
diff --git a/code/modules/mob/living/carbon/resist.dm b/code/modules/mob/living/carbon/resist.dm
index 95ee36b1f6b..9a511504f32 100644
--- a/code/modules/mob/living/carbon/resist.dm
+++ b/code/modules/mob/living/carbon/resist.dm
@@ -1,6 +1,6 @@
/mob/living/carbon/process_resist()
-
+
//drop && roll
if(on_fire)
fire_stacks -= 2 //reduced
@@ -18,34 +18,34 @@
)
ExtinguishMob()
return
-
+
if(handcuffed)
spawn() escape_handcuffs()
else if(legcuffed)
spawn() escape_legcuffs()
-
+
..()
/mob/living/carbon/proc/escape_handcuffs()
if(!(last_special <= world.time)) return
-
+
next_move = world.time + 100
last_special = world.time + 100
if(can_break_cuffs()) //Don't want to do a lot of logic gating here.
break_handcuffs()
return
-
+
var/obj/item/weapon/handcuffs/HC = handcuffed
-
+
//A default in case you are somehow handcuffed with something that isn't an obj/item/weapon/handcuffs type
- var/breakouttime = 1200
+ var/breakouttime = 1200
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
//If you are handcuffed with actual handcuffs... Well what do I know, maybe someone will want to handcuff you with toilet paper in the future...
if(istype(HC))
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
-
+
visible_message(
"[src] attempts to remove \the [HC]!",
"You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
@@ -62,7 +62,7 @@
/mob/living/carbon/proc/escape_legcuffs()
if(!(last_special <= world.time)) return
-
+
next_move = world.time + 100
last_special = world.time + 100
@@ -71,7 +71,7 @@
return
var/obj/item/weapon/legcuffs/HC = legcuffed
-
+
//A default in case you are somehow legcuffed with something that isn't an obj/item/weapon/legcuffs type
var/breakouttime = 1200
var/displaytime = 2 //Minutes to display in the "this will take X minutes."
@@ -79,20 +79,20 @@
if(istype(HC))
breakouttime = HC.breakouttime
displaytime = breakouttime / 600 //Minutes
-
- visible_message(
- "[usr] attempts to remove \the [HC]!",
+
+ visible_message(
+ "[usr] attempts to remove \the [HC]!",
"You attempt to remove \the [HC]. (This will take around [displaytime] minutes and you need to stand still)"
)
if(do_after(src, breakouttime))
if(!legcuffed || buckled)
- return
+ return
visible_message(
- "[src] manages to remove \the [legcuffed]!",
+ "[src] manages to remove \the [legcuffed]!",
"You successfully remove \the [legcuffed]."
)
-
+
drop_from_inventory(legcuffed)
legcuffed = null
update_inv_legcuffed()
@@ -106,19 +106,19 @@
"[src] is trying to break \the [handcuffed]!",
"You attempt to break your [handcuffed.name]. (This will take around 5 seconds and you need to stand still)"
)
-
+
if(do_after(src, 50))
if(!handcuffed || buckled)
return
-
+
visible_message(
- "[src] manages to break \the [handcuffed]!",
+ "[src] manages to break \the [handcuffed]!",
"You successfully break your [handcuffed.name]."
)
-
+
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
-
- del(handcuffed)
+
+ qdel(handcuffed)
handcuffed = null
if(buckled && buckled.buckle_require_restraints)
buckled.unbuckle_mob()
@@ -131,15 +131,15 @@
if(do_after(src, 50))
if(!legcuffed || buckled)
return
-
+
visible_message(
"[src] manages to break the legcuffs!",
"You successfully break your legcuffs."
)
-
+
say(pick(";RAAAAAAAARGH!", ";HNNNNNNNNNGGGGGGH!", ";GWAAAAAAAARRRHHH!", "NNNNNNNNGGGGGGGGHH!", ";AAAAAAARRRGH!" ))
-
- del(legcuffed)
+
+ qdel(legcuffed)
legcuffed = null
update_inv_legcuffed()
diff --git a/code/modules/mob/living/carbon/shock.dm b/code/modules/mob/living/carbon/shock.dm
index b020bf0a545..be31d280348 100644
--- a/code/modules/mob/living/carbon/shock.dm
+++ b/code/modules/mob/living/carbon/shock.dm
@@ -13,24 +13,11 @@
1.5 * src.getFireLoss() + \
1.2 * src.getBruteLoss() + \
1.7 * src.getCloneLoss() + \
- 2 * src.halloss
+ 2 * src.halloss + \
+ -1 * src.analgesic
- if(reagents.has_reagent("alkysine"))
- src.traumatic_shock -= 10
- if(reagents.has_reagent("inaprovaline"))
- src.traumatic_shock -= 25
- if(reagents.has_reagent("synaptizine"))
- src.traumatic_shock -= 40
- if(reagents.has_reagent("paracetamol"))
- src.traumatic_shock -= 50
- if(reagents.has_reagent("tramadol"))
- src.traumatic_shock -= 80
- if(reagents.has_reagent("oxycodone"))
- src.traumatic_shock -= 200
if(src.slurring)
src.traumatic_shock -= 20
- if(src.analgesic)
- src.traumatic_shock = 0
// broken or ripped off organs will add quite a bit of pain
if(istype(src,/mob/living/carbon/human))
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index d723cb5556a..38f1bca254f 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -1,3 +1,8 @@
+/mob/living/Life()
+ ..()
+ if(stat != DEAD)
+ handle_actions()
+
//mob verbs are faster than object verbs. See mob/verb/examine.
/mob/living/verb/pulled(atom/movable/AM as mob|obj in oview(1))
set name = "Pull"
@@ -132,6 +137,10 @@ default behaviour is:
now_pushing = 0
return
step(AM, t)
+ if(ishuman(AM) && AM:grabbed_by)
+ for(var/obj/item/weapon/grab/G in AM:grabbed_by)
+ step(G:assailant, get_dir(G:assailant, AM))
+ G.adjust_position()
now_pushing = 0
return
return
@@ -486,10 +495,6 @@ default behaviour is:
if(!( isturf(pulling.loc) ))
stop_pulling()
return
- else
- if(Debug)
- log_debug("pulling disappeared? at [__LINE__] in mob.dm - pulling = [pulling]")
- log_debug("REPORT THIS")
/////
if(pulling && pulling.anchored)
@@ -605,7 +610,7 @@ default behaviour is:
/mob/living/proc/escape_inventory(obj/item/weapon/holder/H)
if(H != src.loc) return
-
+
var/mob/M = H.loc //Get our mob holder (if any).
if(istype(M))
@@ -773,20 +778,22 @@ default behaviour is:
return
..()
-/mob/living/carbon/proc/spin(spintime, speed)
- spawn()
- var/D = dir
- while(spintime >= speed)
- sleep(speed)
- switch(D)
- if(NORTH)
- D = EAST
- if(SOUTH)
- D = WEST
- if(EAST)
- D = SOUTH
- if(WEST)
- D = NORTH
- set_dir(D)
- spintime -= speed
- return
+/mob/living/touch_map_edge()
+
+ //check for nuke disks
+ if(client && stat != DEAD) //if they are clientless and dead don't bother, the parent will treat them as any other container
+ if(ticker && istype(ticker.mode, /datum/game_mode/nuclear)) //only really care if the game mode is nuclear
+ var/datum/game_mode/nuclear/G = ticker.mode
+ if(G.check_mob(src))
+ if(x <= TRANSITIONEDGE)
+ inertia_dir = 4
+ else if(x >= world.maxx -TRANSITIONEDGE)
+ inertia_dir = 8
+ else if(y <= TRANSITIONEDGE)
+ inertia_dir = 1
+ else if(y >= world.maxy -TRANSITIONEDGE)
+ inertia_dir = 2
+ src << "attacked [src.name] ([src.ckey])")
src.attack_log += text("\[[time_stamp()]\] was attacked by [user.name] ([user.ckey])")
src.visible_message("[user] has [attack_message] [src]!")
+ user.do_attack_animation(src)
spawn(1) updatehealth()
return 1
/mob/living/proc/IgniteMob()
if(fire_stacks > 0 && !on_fire)
on_fire = 1
- src.AddLuminosity(3)
+ set_light(light_range + 3)
update_fire()
/mob/living/proc/ExtinguishMob()
if(on_fire)
on_fire = 0
fire_stacks = 0
- src.AddLuminosity(-3)
+ set_light(max(0, light_range - 3))
update_fire()
/mob/living/proc/update_fire()
@@ -219,18 +220,18 @@
/mob/living/proc/handle_fire()
if(fire_stacks < 0)
fire_stacks = max(0, fire_stacks++) //If we've doused ourselves in water to avoid fire, dry off slowly
-
+
if(!on_fire)
return 1
else if(fire_stacks <= 0)
ExtinguishMob() //Fire's been put out.
return 1
-
+
var/datum/gas_mixture/G = loc.return_air() // Check if we're standing in an oxygenless environment
if(G.gas["oxygen"] < 1)
ExtinguishMob() //If there's no oxygen in the tile we're on, put out the fire
return 1
-
+
var/turf/location = get_turf(src)
location.hotspot_expose(fire_burn_temperature(), 50, 1)
@@ -242,6 +243,131 @@
/mob/living/proc/fire_burn_temperature()
if (fire_stacks <= 0)
return 0
-
+
//Scale quadratically so that single digit numbers of fire stacks don't burn ridiculously hot.
return round(FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE*(fire_stacks/FIRE_MAX_FIRESUIT_STACKS)**2)
+
+/mob/living/regular_hud_updates()
+ ..()
+ update_action_buttons()
+
+/mob/living/proc/handle_actions()
+ //Pretty bad, i'd use picked/dropped instead but the parent calls in these are nonexistent
+ for(var/datum/action/A in actions)
+ if(A.CheckRemoval(src))
+ A.Remove(src)
+ for(var/obj/item/I in src)
+ if(I.action_button_name)
+ if(!I.action)
+ if(I.action_button_is_hands_free)
+ I.action = new/datum/action/item_action/hands_free
+ else
+ I.action = new/datum/action/item_action
+ I.action.name = I.action_button_name
+ I.action.target = I
+ I.action.Grant(src)
+ return
+
+/mob/living/update_action_buttons()
+ if(!hud_used) return
+ if(!client) return
+
+ if(hud_used.hud_shown != 1) //Hud toggled to minimal
+ return
+
+ client.screen -= hud_used.hide_actions_toggle
+ for(var/datum/action/A in actions)
+ if(A.button)
+ client.screen -= A.button
+
+ if(hud_used.action_buttons_hidden)
+ if(!hud_used.hide_actions_toggle)
+ hud_used.hide_actions_toggle = new(hud_used)
+ hud_used.hide_actions_toggle.UpdateIcon()
+
+ if(!hud_used.hide_actions_toggle.moved)
+ hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(1)
+ //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,1)
+
+ client.screen += hud_used.hide_actions_toggle
+ return
+
+ var/button_number = 0
+ for(var/datum/action/A in actions)
+ button_number++
+ if(A.button == null)
+ var/obj/screen/movable/action_button/N = new(hud_used)
+ N.owner = A
+ A.button = N
+
+ var/obj/screen/movable/action_button/B = A.button
+
+ B.UpdateIcon()
+
+ B.name = A.UpdateName()
+
+ client.screen += B
+
+ if(!B.moved)
+ B.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number)
+ //hud_used.SetButtonCoords(B,button_number)
+
+ if(button_number > 0)
+ if(!hud_used.hide_actions_toggle)
+ hud_used.hide_actions_toggle = new(hud_used)
+ hud_used.hide_actions_toggle.InitialiseIcon(src)
+ if(!hud_used.hide_actions_toggle.moved)
+ hud_used.hide_actions_toggle.screen_loc = hud_used.ButtonNumberToScreenCoords(button_number+1)
+ //hud_used.SetButtonCoords(hud_used.hide_actions_toggle,button_number+1)
+ client.screen += hud_used.hide_actions_toggle
+
+
+//If simple_animals are ever moved under carbon, then this can probably be moved to carbon as well
+/mob/living/proc/attack_throat(obj/item/W, obj/item/weapon/grab/G, mob/user)
+
+ // Knifing
+ if(!W.edge || !W.force || W.damtype != BRUTE) return //unsuitable weapon
+
+ user.visible_message("\The [user] begins to slit [src]'s throat with \the [W]!")
+
+ user.next_move = world.time + 20 //also should prevent user from triggering this repeatedly
+ if(!do_after(user, 20))
+ return
+ if(!(G && G.assailant == user && G.affecting == src)) //check that we still have a grab
+ return
+
+ var/damage_mod = 1
+ //presumably, if they are wearing a helmet that stops pressure effects, then it probably covers the throat as well
+ var/obj/item/clothing/head/helmet = get_equipped_item(slot_head)
+ if(istype(helmet) && (helmet.body_parts_covered & HEAD) && (helmet.flags & STOPPRESSUREDAMAGE))
+ //we don't do an armor_check here because this is not an impact effect like a weapon swung with momentum, that either penetrates or glances off.
+ damage_mod = 1.0 - (helmet.armor["melee"]/100)
+
+ var/total_damage = 0
+ for(var/i in 1 to 3)
+ var/damage = min(W.force*1.5, 20)*damage_mod
+ apply_damage(damage, W.damtype, "head", 0, sharp=W.sharp, edge=W.edge)
+ total_damage += damage
+
+ var/oxyloss = total_damage
+ if(total_damage >= 40) //threshold to make someone pass out
+ oxyloss = 60 // Brain lacks oxygen immediately, pass out
+
+ adjustOxyLoss(min(oxyloss, 100 - getOxyLoss())) //don't put them over 100 oxyloss
+
+ if(total_damage)
+ if(oxyloss >= 40)
+ user.visible_message("\The [user] slit [src]'s throat open with \the [W]!")
+ else
+ user.visible_message("\The [user] cut [src]'s neck with \the [W]!")
+
+ if(W.hitsound)
+ playsound(loc, W.hitsound, 50, 1, -1)
+
+ G.last_action = world.time
+ flick(G.hud.icon_state, G.hud)
+
+ user.attack_log += "\[[time_stamp()]\] Knifed [name] ([ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])"
+ src.attack_log += "\[[time_stamp()]\] Got knifed by [user.name] ([user.ckey]) with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])"
+ msg_admin_attack("[key_name(user)] knifed [key_name(src)] with [W.name] (INTENT: [uppertext(user.a_intent)]) (DAMTYE: [uppertext(W.damtype)])" )
+ return
diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm
index 8a01f86774b..284afa69a46 100644
--- a/code/modules/mob/living/living_defines.dm
+++ b/code/modules/mob/living/living_defines.dm
@@ -34,6 +34,7 @@
var/mob_always_swap = 0
var/mob/living/cameraFollow = null
+ var/list/datum/action/actions = list()
var/tod = null // Time of death
var/update_slimes = 1
diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm
index 8919ab0952a..a126bccc876 100644
--- a/code/modules/mob/living/say.dm
+++ b/code/modules/mob/living/say.dm
@@ -238,17 +238,15 @@ proc/get_radio_key_from_channel(var/channel)
italics = 1
sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact
- var/list/hear = hear(message_range, T)
+ var/list/hear = get_mobs_or_objects_in_view(message_range,src)
var/list/hearturfs = list()
for(var/I in hear)
- if(istype(I, /mob/))
+ if(ismob(I))
var/mob/M = I
listening += M
hearturfs += M.locs[1]
- for(var/obj/O in M.contents)
- listening_obj |= O
- else if(istype(I, /obj/))
+ else if(isobj(I))
var/obj/O = I
hearturfs += O.locs[1]
listening_obj |= O
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 54fa2914abd..2d7fdc681e4 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -56,27 +56,29 @@ var/list/ai_verbs_default = list(
var/obj/item/device/multitool/aiMulti = null
var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null
var/custom_sprite = 0 //For our custom sprites
-//Hud stuff
-
- //MALFUNCTION
- var/datum/AI_Module/module_picker/malf_picker
- var/processing_time = 100
- var/list/datum/AI_Module/current_modules = list()
- var/fire_res_on_core = 0
-
- var/control_disabled = 0 // Set to 1 to stop AI from interacting via Click() -- TLE
- var/malfhacking = 0 // More or less a copy of the above var, so that malf AIs can hack and still get new cyborgs -- NeoFite
-
- var/obj/machinery/power/apc/malfhack = null
- var/explosive = 0 //does the AI explode when it dies?
-
- var/mob/living/silicon/ai/parent = null
-
var/camera_light_on = 0 //Defines if the AI toggled the light on the camera it's looking through.
var/datum/trackable/track = null
var/last_announcement = ""
- var/datum/announcement/priority/announcement
+ var/control_disabled = 0
+ var/datum/announcement/priority/announcement var/obj/machinery/ai_powersupply/psupply = null // Backwards reference to AI's powersupply object.
var/hologram_follow = 1 //This is used for the AI eye, to determine if a holopad's hologram should follow it or not.
+ //NEWMALF VARIABLES
+ var/malfunctioning = 0 // Master var that determines if AI is malfunctioning.
+ var/datum/malf_hardware/hardware = null // Installed piece of hardware.
+ var/datum/malf_research/research = null // Malfunction research datum.
+ var/obj/machinery/power/apc/hack = null // APC that is currently being hacked.
+ var/list/hacked_apcs = null // List of all hacked APCs
+ var/APU_power = 0 // If set to 1 AI runs on APU power
+ var/hacking = 0 // Set to 1 if AI is hacking APC, cyborg, other AI, or running system override.
+ var/system_override = 0 // Set to 1 if system override is initiated, 2 if succeeded.
+ var/hack_can_fail = 1 // If 0, all abilities have zero chance of failing.
+ var/hack_fails = 0 // This increments with each failed hack, and determines the warning message text.
+ var/errored = 0 // Set to 1 if runtime error occurs. Only way of this happening i can think of is admin fucking up with varedit.
+ var/bombing_core = 0 // Set to 1 if core auto-destruct is activated
+ var/bombing_station = 0 // Set to 1 if station nuke auto-destruct is activated
+ var/override_CPUStorage = 0 // Bonus/Penalty CPU Storage. For use by admins/testers.
+ var/override_CPURate = 0 // Bonus/Penalty CPU generation rate. For use by admins/testers.
+
/mob/living/silicon/ai/proc/add_ai_verbs()
src.verbs |= ai_verbs_default
@@ -204,17 +206,6 @@ var/list/ai_verbs_default = list(
set src = usr.contents
return 0
-/mob/living/silicon/ai/proc/system_integrity()
- return (health-config.health_threshold_dead)/2
-
-// this function shows the health of the pAI in the Status panel
-/mob/living/silicon/ai/show_system_integrity()
- // An AI doesn't become inoperable until -100% (or whatever config.health_threshold_dead is set to)
- if(!src.stat)
- stat(null, text("System integrity: [system_integrity()]%"))
- else
- stat(null, text("Systems nonfunctional"))
-
/mob/living/silicon/ai/SetName(pickedName as text)
..()
announcement.announcer = pickedName
@@ -241,6 +232,7 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null)
powered_ai = ai
+ powered_ai.psupply = src
if(isnull(powered_ai))
qdel(src)
@@ -251,10 +243,17 @@ var/list/ai_verbs_default = list(
/obj/machinery/ai_powersupply/process()
if(!powered_ai || powered_ai.stat & DEAD)
+ qdel()
+ return
+ if(powered_ai.psupply != src) // For some reason, the AI has different powersupply object. Delete this one, it's no longer needed.
qdel(src)
+ if(powered_ai.APU_power)
+ use_power = 0
+ return
if(!powered_ai.anchored)
loc = powered_ai.loc
use_power = 0
+ use_power(50000) // Less optimalised but only called if AI is unwrenched. This prevents usage of wrenching as method to keep AI operational without power. Intellicard is for that.
if(powered_ai.anchored)
use_power = 2
@@ -278,12 +277,12 @@ var/list/ai_verbs_default = list(
if(Entry[1] == src.ckey && Entry[2] == src.real_name)
custom_sprite = 1 //They're in the list? Custom sprite time
- icon = 'icons/mob/custom-synthetic.dmi'
+ icon = CUSTOM_ITEM_SYNTH
//if(icon_state == initial(icon_state))
var/icontype = ""
if (custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available
- else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Rainbow", "Blue", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Soviet", "Trapped", "Heartline", "Chatterbox")
+ else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Rainbow", "Blue", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Soviet", "Trapped", "Heartline", "Chatterbox", "Helios", "Dug Too Deep", "Goon", "Database", "Glitchman", "Lonestar", "Nanotrasen")
switch(icontype)
if("Custom") icon_state = "[src.ckey]-ai"
if("Rainbow") icon_state = "ai-clown"
@@ -305,15 +304,15 @@ var/list/ai_verbs_default = list(
if("Trapped") icon_state = "ai-hades"
if("Heartline") icon_state = "ai-heartline"
if("Chatterbox") icon_state = "ai-president"
+ if("Helios") icon_state = "ai-helios"
+ if("Dug Too Deep") icon_state = "ai-toodeep"
+ if("Goon") icon_state = "ai-goon"
+ if("Database") icon_state = "ai-database"
+ if("Glitchman") icon_state = "ai-glitchman"
+ if("Lonestar") icon_state = "ai-lonestar"
+ if("Nanotrasen") icon_state = "ai-nanotrasen"
else icon_state = "ai"
- //else
- //usr <<"You can only change your display once!"
- //return
-// displays the malf_ai information if the AI is the malf
-/mob/living/silicon/ai/show_malf_ai()
- if(malf && malf.hacked_apcs.len >= 3)
- stat(null, "Time until station control secured: [max(malf.hack_time/(malf.hacked_apcs/3), 0)] seconds")
// this verb lets the ai see the stations manifest
/mob/living/silicon/ai/proc/ai_roster()
@@ -390,11 +389,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/emp_act(severity)
if (prob(30))
- switch(pick(1,2))
- if(1)
- view_core()
- if(2)
- ai_call_shuttle()
+ view_core()
..()
/mob/living/silicon/ai/Topic(href, href_list)
@@ -445,13 +440,13 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/reset_view(atom/A)
if(camera)
- camera.SetLuminosity(0)
+ camera.set_light(0)
if(istype(A,/obj/machinery/camera))
camera = A
..()
if(istype(A,/obj/machinery/camera))
- if(camera_light_on) A.SetLuminosity(AI_CAMERA_LUMINOSITY)
- else A.SetLuminosity(0)
+ if(camera_light_on) A.set_light(AI_CAMERA_LUMINOSITY)
+ else A.set_light(0)
/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C)
@@ -515,13 +510,6 @@ var/list/ai_verbs_default = list(
src << "\blue Switched to [network] camera network."
//End of code by Mord_Sith
-
-/mob/living/silicon/ai/proc/choose_modules()
- set category = "Malfunction"
- set name = "Choose Module"
-
- malf_picker.use(src)
-
/mob/living/silicon/ai/proc/ai_statuschange()
set category = "AI Commands"
set name = "AI Status"
@@ -589,7 +577,7 @@ var/list/ai_verbs_default = list(
src << "Camera lights [camera_light_on ? "activated" : "deactivated"]."
if(!camera_light_on)
if(camera)
- camera.SetLuminosity(0)
+ camera.set_light(0)
camera = null
else
lightNearbyCamera()
@@ -604,20 +592,20 @@ var/list/ai_verbs_default = list(
if(src.camera)
var/obj/machinery/camera/camera = near_range_camera(src.eyeobj)
if(camera && src.camera != camera)
- src.camera.SetLuminosity(0)
+ src.camera.set_light(0)
if(!camera.light_disabled)
src.camera = camera
- src.camera.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ src.camera.set_light(AI_CAMERA_LUMINOSITY)
else
src.camera = null
else if(isnull(camera))
- src.camera.SetLuminosity(0)
+ src.camera.set_light(0)
src.camera = null
else
var/obj/machinery/camera/camera = near_range_camera(src.eyeobj)
if(camera && !camera.light_disabled)
src.camera = camera
- src.camera.SetLuminosity(AI_CAMERA_LUMINOSITY)
+ src.camera.set_light(AI_CAMERA_LUMINOSITY)
camera_light_on = world.timeofday + 1 * 20 // Update the light every 2 seconds.
@@ -690,5 +678,153 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/proc/is_in_chassis()
return istype(loc, /turf)
+
+/mob/living/silicon/ai/ex_act(var/severity)
+ if(severity == 1.0)
+ qdel(src)
+ return
+ ..()
+
+// NEWMALF FUNCTIONS/PROCEDURES
+
+// Sets up malfunction-related variables, research system and such.
+/mob/living/silicon/ai/proc/setup_for_malf()
+ var/mob/living/silicon/ai/user = src
+ // Setup Variables
+ malfunctioning = 1
+ research = new/datum/malf_research()
+ research.owner = src
+ hacked_apcs = list()
+ recalc_cpu()
+
+ verbs += new/datum/game_mode/malfunction/verb/ai_select_hardware()
+ verbs += new/datum/game_mode/malfunction/verb/ai_select_research()
+ verbs += new/datum/game_mode/malfunction/verb/ai_help()
+
+ // And greet user with some OOC info.
+ user << "You are malfunctioning, you do not have to follow any laws."
+ user << "Use ai-help command to view relevant information about your abilities"
+
+// Safely remove malfunction status, fixing hacked APCs and resetting variables.
+/mob/living/silicon/ai/proc/stop_malf()
+ var/mob/living/silicon/ai/user = src
+ // Generic variables
+ malfunctioning = 0
+ sleep(10)
+ research = null
+ // Fix hacked APCs
+ if(hacked_apcs)
+ for(var/obj/machinery/power/apc/A in hacked_apcs)
+ A.hacker = null
+ hacked_apcs = null
+ // Reset our verbs
+ src.verbs = null
+ add_ai_verbs()
+ // Let them know.
+ user << "You are no longer malfunctioning. Your abilities have been removed."
+
+// Called every tick. Checks if AI is malfunctioning. If yes calls Process on research datum which handles all logic.
+/mob/living/silicon/ai/proc/malf_process()
+ if(!malfunctioning)
+ return
+ if(!research)
+ if(!errored)
+ errored = 1
+ error("malf_process() called on AI without research datum. Report this.")
+ message_admins("ERROR: malf_process() called on AI without research datum. If admin modified one of the AI's vars revert the change and don't modify variables directly, instead use ProcCall or admin panels.")
+ spawn(1200)
+ errored = 0
+ return
+ recalc_cpu()
+ if(APU_power || aiRestorePowerRoutine != 0)
+ research.process(1)
+ else
+ research.process(0)
+
+// Recalculates CPU time gain and storage capacities.
+/mob/living/silicon/ai/proc/recalc_cpu()
+ // AI Starts with these values.
+ var/cpu_gain = 0.01
+ var/cpu_storage = 10
+
+ // Off-Station APCs should not count towards CPU generation.
+ for(var/obj/machinery/power/apc/A in hacked_apcs)
+ if(A.z in config.station_levels)
+ cpu_gain += 0.002
+ cpu_storage += 10
+
+ research.max_cpu = cpu_storage + override_CPUStorage
+ if(hardware && istype(hardware, /datum/malf_hardware/dual_ram))
+ research.max_cpu = research.max_cpu * 1.5
+ research.stored_cpu = min(research.stored_cpu, research.max_cpu)
+
+ research.cpu_increase_per_tick = cpu_gain + override_CPURate
+ if(hardware && istype(hardware, /datum/malf_hardware/dual_cpu))
+ research.cpu_increase_per_tick = research.cpu_increase_per_tick * 2
+
+// Starts AI's APU generator
+/mob/living/silicon/ai/proc/start_apu(var/shutup = 0)
+ if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen))
+ if(!shutup)
+ src << "You do not have an APU generator and you shouldn't have this verb. Report this."
+ return
+ if(hardware_integrity() < 50)
+ if(!shutup)
+ src << "Starting APU... FAULT(System Damaged)"
+ return
+ if(!shutup)
+ src << "Starting APU... ONLINE"
+ APU_power = 1
+
+// Stops AI's APU generator
+/mob/living/silicon/ai/proc/stop_apu(var/shutup = 0)
+ if(!hardware || !istype(hardware, /datum/malf_hardware/apu_gen))
+ return
+
+ if(APU_power)
+ APU_power = 0
+ if(!shutup)
+ src << "Shutting down APU... DONE"
+
+// Returns percentage of AI's remaining backup capacitor charge (maxhealth - oxyloss).
+/mob/living/silicon/ai/proc/backup_capacitor()
+ return ((200 - getOxyLoss()) / 2)
+
+// Returns percentage of AI's remaining hardware integrity (maxhealth - (bruteloss + fireloss))
+/mob/living/silicon/ai/proc/hardware_integrity()
+ return (health-config.health_threshold_dead)/2
+
+// Shows capacitor charge and hardware integrity information to the AI in Status tab.
+/mob/living/silicon/ai/show_system_integrity()
+ if(!src.stat)
+ stat(null, text("Hardware integrity: [hardware_integrity()]%"))
+ stat(null, text("Internal capacitor: [backup_capacitor()]%"))
+ else
+ stat(null, text("Systems nonfunctional"))
+
+// Shows AI Malfunction related information to the AI.
+/mob/living/silicon/ai/show_malf_ai()
+ if(src.is_malf())
+ if(src.hacked_apcs)
+ stat(null, "Hacked APCs: [src.hacked_apcs.len]")
+ stat(null, "System Status: [src.hacking ? "Busy" : "Stand-By"]")
+ if(src.research)
+ stat(null, "Available CPU: [src.research.stored_cpu] TFlops")
+ stat(null, "Maximal CPU: [src.research.max_cpu] TFlops")
+ stat(null, "CPU generation rate: [src.research.cpu_increase_per_tick] TFlops/s")
+ stat(null, "Current research focus: [src.research.focus ? src.research.focus.name : "None"]")
+ if(src.research.focus)
+ stat(null, "Research completed: [round(src.research.focus.invested, 0.1)]/[round(src.research.focus.price)]")
+ if(system_override == 1)
+ stat(null, "SYSTEM OVERRIDE INITIATED")
+ else if(system_override == 2)
+ stat(null, "SYSTEM OVERRIDE COMPLETED")
+
+// Cleaner proc for creating powersupply for an AI.
+/mob/living/silicon/ai/proc/create_powersupply()
+ if(psupply)
+ del(psupply)
+ psupply = new/obj/machinery/ai_powersupply(src)
+
#undef AI_CHECK_WIRELESS
#undef AI_CHECK_RADIO
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 4a43103da87..5c453966fca 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -13,40 +13,6 @@
remove_ai_verbs(src)
- var/callshuttle = 0
- for(var/obj/machinery/computer/communications/commconsole in world)
- if(commconsole.z == 2)
- continue
- if(istype(commconsole.loc,/turf))
- break
- callshuttle++
-
- for(var/obj/item/weapon/circuitboard/communications/commboard in world)
- if(commboard.z == 2)
- continue
- if(istype(commboard.loc,/turf) || istype(commboard.loc,/obj/item/weapon/storage))
- break
- callshuttle++
-
- for(var/mob/living/silicon/ai/shuttlecaller in player_list)
- if(shuttlecaller.z == 2)
- continue
- if(!shuttlecaller.stat && shuttlecaller.client && istype(shuttlecaller.loc,/turf))
- break
- callshuttle++
-
- if(ticker.mode.name == "revolution" || ticker.mode.name == "AI malfunction")
- callshuttle = 0
-
- if(callshuttle == 3) //if all three conditions are met
- emergency_shuttle.call_evac()
- log_game("All the AIs, comm consoles and boards are destroyed. Shuttle called.")
- message_admins("All the AIs, comm consoles and boards are destroyed. Shuttle called.", 1)
-
- if(explosive)
- spawn(10)
- explosion(src.loc, 3, 6, 12, 15)
-
for(var/obj/machinery/ai_status_display/O in world)
spawn( 0 )
O.mode = 2
diff --git a/code/modules/mob/living/silicon/ai/examine.dm b/code/modules/mob/living/silicon/ai/examine.dm
index 286edc2ce0f..45c6a3816bb 100644
--- a/code/modules/mob/living/silicon/ai/examine.dm
+++ b/code/modules/mob/living/silicon/ai/examine.dm
@@ -17,15 +17,23 @@
msg += "It looks slightly charred.\n"
else
msg += "Its casing is melted and heat-warped!\n"
+ if (src.getOxyLoss())
+ if (src.getOxyLoss() > 175)
+ msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER CRITICAL\" warning.\n"
+ else if(src.getOxyLoss() > 100)
+ msg += "It seems to be running on backup power. Its display is blinking a \"BACKUP POWER LOW\" warning.\n"
+ else
+ msg += "It seems to be running on backup power.\n"
if (src.stat == UNCONSCIOUS)
msg += "It is non-responsive and displaying the text: \"RUNTIME: Sensory Overload, stack 26/3\".\n"
msg += ""
msg += "*---------*"
-
+ if(hardware && (hardware.owner == src))
+ msg += " "
+ msg += hardware.get_examine_desc()
user << msg
user.showLaws(src)
-
return
/mob/proc/showLaws(var/mob/living/silicon/S)
diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm
index 5247ae5f107..5e0b0589c53 100644
--- a/code/modules/mob/living/silicon/ai/life.dm
+++ b/code/modules/mob/living/silicon/ai/life.dm
@@ -12,90 +12,71 @@
src.updatehealth()
- if (src.malfhack)
- if (src.malfhack.aidisabled)
- src << "\red ERROR: APC access disabled, hack attempt canceled."
- src.malfhacking = 0
- src.malfhack = null
-
-
- if (src.health <= config.health_threshold_dead)
+ if (!hardware_integrity() || !backup_capacitor())
death()
return
+ // If our powersupply object was destroyed somehow, create new one.
+ if(!psupply)
+ create_powersupply()
+
if (src.machine)
if (!( src.machine.check_eye(src) ))
src.reset_view(null)
// Handle power damage (oxy)
- if(src:aiRestorePowerRoutine != 0)
- // Lost power
+ if(aiRestorePowerRoutine != 0 && !APU_power)
+ // Lose power
adjustOxyLoss(1)
else
// Gain Power
+ aiRestorePowerRoutine = 0 // Necessary if AI activated it's APU AFTER losing primary power.
adjustOxyLoss(-1)
// Handle EMP-stun
handle_stunned()
- //stage = 1
- //if (istype(src, /mob/living/silicon/ai)) // Are we not sure what we are?
+ malf_process()
+
+ if(APU_power && (hardware_integrity() < 50))
+ src << "APU GENERATOR FAILURE! (System Damaged)"
+ stop_apu(1)
+
var/blind = 0
- //stage = 2
var/area/loc = null
if (istype(T, /turf))
- //stage = 3
loc = T.loc
if (istype(loc, /area))
- //stage = 4
- if (!loc.master.power_equip && !istype(src.loc,/obj/item))
- //stage = 5
+ if (!loc.power_equip && !istype(src.loc,/obj/item) && !APU_power)
blind = 1
- if (!blind) //lol? if(!blind) #if(src.blind.layer) <--something here is clearly wrong :P
- //I'll get back to this when I find out how this is -supposed- to work ~Carn //removed this shit since it was confusing as all hell --39kk9t
- //stage = 4.5
+ if (!blind)
src.sight |= SEE_TURFS
src.sight |= SEE_MOBS
src.sight |= SEE_OBJS
src.see_in_dark = 8
src.see_invisible = SEE_INVISIBLE_LIVING
-
- //Congratulations! You've found a way for AI's to run without using power!
- //Todo: Without snowflaking up master_controller procs find a way to make AI use_power but only when APC's clear the area usage the tick prior
- // since mobs are in master_controller before machinery. We also have to do it in a manner where we don't reset the entire area's need to update
- // the power usage.
- //
- // We can probably create a new machine that resides inside of the AI contents that uses power using the idle_usage of 1000 and nothing else and
- // be fine.
-/*
- var/area/home = get_area(src)
- if(!home) return//something to do with malf fucking things up I guess. <-- aisat is gone. is this still necessary? ~Carn
- if(home.powered(EQUIP))
- home.use_power(1000, EQUIP)
-*/
-
- if (src:aiRestorePowerRoutine==2)
+ if (aiRestorePowerRoutine==2)
src << "Alert cancelled. Power has been restored without our assistance."
- src:aiRestorePowerRoutine = 0
+ aiRestorePowerRoutine = 0
src.blind.layer = 0
return
- else if (src:aiRestorePowerRoutine==3)
+ else if (aiRestorePowerRoutine==3)
src << "Alert cancelled. Power has been restored."
- src:aiRestorePowerRoutine = 0
+ aiRestorePowerRoutine = 0
+ src.blind.layer = 0
+ return
+ else if (APU_power)
+ aiRestorePowerRoutine = 0
src.blind.layer = 0
return
else
-
- //stage = 6
-
var/area/current_area = get_area(src)
if (lacks_power())
- //If our area lacks equipment power, and is not magically powered (i.e. centcom), or if we are in space and not carded, lose power.
- if (src:aiRestorePowerRoutine==0)
- src:aiRestorePowerRoutine = 1
+ if (aiRestorePowerRoutine==0)
+ aiRestorePowerRoutine = 1
//Blind the AI
@@ -115,10 +96,10 @@
spawn(20)
src << "Backup battery online. Scanners, camera, and radio interface offline. Beginning fault-detection."
sleep(50)
- if (loc.master.power_equip)
+ if (loc.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
- src:aiRestorePowerRoutine = 0
+ aiRestorePowerRoutine = 0
src.blind.layer = 0
return
src << "Fault confirmed: missing external power. Shutting down main control system to save power."
@@ -127,7 +108,7 @@
sleep(50)
if (istype(T, /turf/space))
src << "Unable to verify! No power connection detected!"
- src:aiRestorePowerRoutine = 2
+ aiRestorePowerRoutine = 2
return
src << "Connection verified. Searching for APC in power network."
sleep(50)
@@ -135,21 +116,20 @@
var/PRP
for (PRP=1, PRP<=4, PRP++)
- for(var/area/A in current_area.master.related)
- for (var/obj/machinery/power/apc/APC in A)
- if (!(APC.stat & BROKEN))
- theAPC = APC
- break
+ for (var/obj/machinery/power/apc/APC in current_area)
+ if (!(APC.stat & BROKEN))
+ theAPC = APC
+ break
if (!theAPC)
switch(PRP)
if (1) src << "Unable to locate APC!"
else src << "Lost connection with the APC!"
src:aiRestorePowerRoutine = 2
return
- if (loc.master.power_equip)
+ if (loc.power_equip)
if (!istype(T, /turf/space))
src << "Alert cancelled. Power has been restored without our assistance."
- src:aiRestorePowerRoutine = 0
+ aiRestorePowerRoutine = 0
src.blind.layer = 0 //This, too, is a fix to issue 603
return
switch(PRP)
@@ -164,9 +144,9 @@
theAPC.operating = 1
theAPC.equipment = 3
theAPC.update()
- src:aiRestorePowerRoutine = 3
+ aiRestorePowerRoutine = 3
src << "Here are your current laws:"
- src.show_laws()
+ show_laws()
sleep(50)
theAPC = null
@@ -179,20 +159,20 @@
process_med_hud(src,0,src.eyeobj)
/mob/living/silicon/ai/proc/lacks_power()
+ if(APU_power)
+ return 0
var/turf/T = get_turf(src)
var/area/A = get_area(src)
- return ((!A.master.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item)
+ return ((!A.power_equip) && A.requires_power == 1 || istype(T, /turf/space)) && !istype(src.loc,/obj/item)
/mob/living/silicon/ai/updatehealth()
if(status_flags & GODMODE)
health = 100
stat = CONSCIOUS
+ setOxyLoss(0)
else
- if(fire_res_on_core)
- health = 100 - getOxyLoss() - getToxLoss() - getBruteLoss()
- else
- health = 100 - getOxyLoss() - getToxLoss() - getFireLoss() - getBruteLoss()
+ health = 100 - getFireLoss() - getBruteLoss() // Oxyloss is not part of health as it represents AIs backup power. AI is immune against ToxLoss as it is machine.
/mob/living/silicon/ai/rejuvenate()
..()
- add_ai_verbs(src)
\ No newline at end of file
+ add_ai_verbs(src)
diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm
deleted file mode 100644
index 62a75fad245..00000000000
--- a/code/modules/mob/living/silicon/ai/say.dm
+++ /dev/null
@@ -1,5 +0,0 @@
-/mob/living/silicon/ai/say(var/message)
- if(parent && istype(parent) && parent.stat != 2)
- return parent.say(message)
- //If there is a defined "parent" AI, it is actually an AI, and it is alive, anything the AI tries to say is said by the parent instead.
- return ..(message)
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 25c8f827019..99e5684e4e4 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -6,6 +6,7 @@
emote_type = 2 // pAIs emotes are heard, not seen, so they can be seen through a container (eg. person)
small = 1
pass_flags = 1
+ holder_type = /obj/item/weapon/holder/pai
var/network = "SS13"
var/obj/machinery/camera/current = null
@@ -265,6 +266,13 @@
return 0
else if(istype(card.loc,/mob))
var/mob/holder = card.loc
+ if(ishuman(holder))
+ var/mob/living/carbon/human/H = holder
+ for(var/obj/item/organ/external/affecting in H.organs)
+ if(affecting.hidden == card)
+ affecting.take_damage(rand(30,50))
+ H.visible_message("\The [src] explodes out of \the [H]'s [affecting.name][(affecting.status & ORGAN_ROBOT) ? " in a shower of gore" : ""]!")
+ break
holder.drop_from_inventory(card)
else if(istype(card.loc,/obj/item/device/pda))
var/obj/item/device/pda/holder = card.loc
@@ -373,7 +381,16 @@
src.client.perspective = EYE_PERSPECTIVE
src.client.eye = card
- //This seems redundant but not including the forced loc setting messes the behavior up.
+ // If we are being held, handle removing our holder from their inv.
+ var/obj/item/weapon/holder/H = loc
+ if(istype(H))
+ var/mob/living/M = H.loc
+ if(istype(M))
+ M.drop_from_inventory(H)
+ H.loc = get_turf(src)
+ src.loc = get_turf(H)
+
+ // Move us into the card and move the card to the ground.
src.loc = card
card.loc = get_turf(card)
src.forceMove(card)
@@ -395,4 +412,23 @@
// No binary for pAIs.
/mob/living/silicon/pai/binarycheck()
- return 0
\ No newline at end of file
+ return 0
+
+// Handle being picked up.
+/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber)
+ var/obj/item/weapon/holder/H = ..()
+ if(!istype(H))
+ return
+ H.icon_state = "pai-[icon_state]"
+ grabber.update_inv_l_hand()
+ grabber.update_inv_r_hand()
+ return H
+
+/mob/living/silicon/pai/MouseDrop(atom/over_object)
+ var/mob/living/carbon/H = over_object
+ if(!istype(H) || !Adjacent(H)) return ..()
+ if(H.a_intent == "help")
+ get_scooped(H)
+ return
+ else
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/pai/recruit.dm b/code/modules/mob/living/silicon/pai/recruit.dm
index 294ee515625..91a10bf3e50 100644
--- a/code/modules/mob/living/silicon/pai/recruit.dm
+++ b/code/modules/mob/living/silicon/pai/recruit.dm
@@ -234,7 +234,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
if(c.ready)
var/found = 0
for(var/mob/dead/observer/o in player_list)
- if(o.key == c.key)
+ if(o.key == c.key && o.MayRespawn())
found = 1
if(found)
available.Add(c)
@@ -347,7 +347,7 @@ var/datum/paiController/paiController // Global handler for pAI candidates
/datum/paiController/proc/requestRecruits(var/mob/user)
inquirer = user
for(var/mob/dead/observer/O in player_list)
- if(O.has_enabled_antagHUD == 1 && config.antag_hud_restricted)
+ if(!O.MayRespawn())
continue
if(jobban_isbanned(O, "pAI"))
continue
diff --git a/code/modules/mob/living/silicon/pai/software.dm b/code/modules/mob/living/silicon/pai/software.dm
index cb9431f04e7..472125cef9a 100644
--- a/code/modules/mob/living/silicon/pai/software.dm
+++ b/code/modules/mob/living/silicon/pai/software.dm
@@ -7,7 +7,13 @@ var/list/pai_emotions = list(
"Off" = 6,
"Sad" = 7,
"Angry" = 8,
- "What" = 9
+ "What" = 9,
+ "Neutral" = 10,
+ "Silly" = 11,
+ "Nose" = 12,
+ "Smirk" = 13,
+ "Exclamation Points" = 14,
+ "Question Mark" = 15
)
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index c2fed821655..f7434ebe915 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -125,16 +125,12 @@
var/data[0]
// This is dumb, but NanoUI breaks if it has no data to send
- data["a"] = "a"
-
- if(ui)
- ui.load_cached_data(ManifestJSON)
+ data["manifest"] = list("__json_cache" = ManifestJSON)
ui = nanomanager.try_update_ui(user, user, id, ui, data, force_open)
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_manifest.tmpl", "Crew Manifest", 450, 600)
- ui.load_cached_data(ManifestJSON)
ui.set_initial_data(data)
ui.open()
ui.set_auto_update(1)
@@ -499,7 +495,6 @@
if(!ui)
// Don't copy-paste this unless you're making a pAI software module!
ui = new(user, user, id, "pai_signaller.tmpl", "Signaller", 320, 150)
- ui.load_cached_data(ManifestJSON)
ui.set_initial_data(data)
ui.open()
diff --git a/code/modules/mob/living/silicon/robot/analyzer.dm b/code/modules/mob/living/silicon/robot/analyzer.dm
index cb86e523022..a4d6f621d37 100644
--- a/code/modules/mob/living/silicon/robot/analyzer.dm
+++ b/code/modules/mob/living/silicon/robot/analyzer.dm
@@ -12,8 +12,8 @@
w_class = 2.0
throw_speed = 5
throw_range = 10
- matter = list("metal" = 500, "glass" = 200)
- origin_tech = "magnets=2;biotech=1;engineering=2"
+ origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 1, TECH_ENGINERING = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 200)
var/mode = 1;
/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
@@ -26,54 +26,70 @@
user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1)
user.show_message("\blue Body Temperature: ???", 1)
return
- if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey")
- user << "\red You don't have the dexterity to do this!"
- return
- if(!istype(M, /mob/living/silicon/robot) && !(ishuman(M) && (M:species.flags & IS_SYNTHETIC)))
+
+ var/scan_type
+ if(istype(M, /mob/living/silicon/robot))
+ scan_type = "robot"
+ else if(istype(M, /mob/living/carbon/human))
+ scan_type = "prosthetics"
+ else
user << "\red You can't analyze non-robotic things!"
return
- user.visible_message(" [user] has analyzed [M]'s components."," You have analyzed [M]'s components.")
- var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss()
- var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss()
- user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]")
- user.show_message("\t Key: Electronics/Brute", 1)
- user.show_message("\t Damage Specifics: [BU] - [BR]")
- if(M.tod && M.stat == DEAD)
- user.show_message("\blue Time of Disable: [M.tod]")
+ user.visible_message("\The [user] has analyzed [M]'s components.","You have analyzed [M]'s components.")
+ switch(scan_type)
+ if("robot")
+ var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss()
+ var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss()
+ user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]")
+ user.show_message("\t Key: Electronics/Brute", 1)
+ user.show_message("\t Damage Specifics: [BU] - [BR]")
+ if(M.tod && M.stat == DEAD)
+ user.show_message("\blue Time of Disable: [M.tod]")
+ var/mob/living/silicon/robot/H = M
+ var/list/damaged = H.get_damaged_components(1,1,1)
+ user.show_message("\blue Localized Damage:",1)
+ if(length(damaged)>0)
+ for(var/datum/robot_component/org in damaged)
+ user.show_message(text("\blue \t []: [][] - [] - [] - []", \
+ capitalize(org.name), \
+ (org.installed == -1) ? "DESTROYED " :"",\
+ (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \
+ (org.brute_damage > 0) ? "[org.brute_damage]" :0, \
+ (org.toggled) ? "Toggled ON" : "Toggled OFF",\
+ (org.powered) ? "Power ON" : "Power OFF"),1)
+ else
+ user.show_message("\blue \t Components are OK.",1)
+ if(H.emagged && prob(5))
+ user.show_message("\red \t ERROR: INTERNAL SYSTEMS COMPROMISED",1)
+ user.show_message("\blue Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
- if (istype(M, /mob/living/silicon/robot))
- var/mob/living/silicon/robot/H = M
- var/list/damaged = H.get_damaged_components(1,1,1)
- user.show_message("\blue Localized Damage:",1)
- if(length(damaged)>0)
- for(var/datum/robot_component/org in damaged)
- user.show_message(text("\blue \t []: [][] - [] - [] - []", \
- capitalize(org.name), \
- (org.installed == -1) ? "DESTROYED " :"",\
- (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \
- (org.brute_damage > 0) ? "[org.brute_damage]" :0, \
- (org.toggled) ? "Toggled ON" : "Toggled OFF",\
- (org.powered) ? "Power ON" : "Power OFF"),1)
- else
- user.show_message("\blue \t Components are OK.",1)
- if(H.emagged && prob(5))
- user.show_message("\red \t ERROR: INTERNAL SYSTEMS COMPROMISED",1)
+ if("prosthetics")
+ var/mob/living/carbon/human/H = M
+ user << "Analyzing Results for \the [H]:"
+ user << "Key: Electronics/Brute"
- if (ishuman(M) && (M:species.flags & IS_SYNTHETIC))
- var/mob/living/carbon/human/H = M
- var/list/damaged = H.get_damaged_organs(1,1)
- user.show_message("\blue Localized Damage, Brute/Electronics:",1)
- if(length(damaged)>0)
- for(var/obj/item/organ/external/org in damaged)
- user.show_message(text("\blue \t []: [] - []", \
- capitalize(org.name), \
- (org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \
- (org.burn_dam > 0) ? "[org.burn_dam]" :0),1)
- else
- user.show_message("\blue \t Components are OK.",1)
-
- user.show_message("\blue Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1)
+ user << "External prosthetics:"
+ var/organ_found
+ if(H.internal_organs.len)
+ for(var/obj/item/organ/external/E in H.organs)
+ if(!(E.status & ORGAN_ROBOT))
+ continue
+ organ_found = 1
+ user << "[E.name]: [E.brute_dam] [E.burn_dam]"
+ if(!organ_found)
+ user << "No prosthetics located."
+ user << " "
+ user << "Internal prosthetics:"
+ organ_found = null
+ if(H.internal_organs.len)
+ for(var/obj/item/organ/O in H.internal_organs)
+ if(!(O.status & ORGAN_ROBOT))
+ continue
+ organ_found = 1
+ user << "[O.name]: [O.damage]"
+ if(!organ_found)
+ user << "No prosthetics located."
src.add_fingerprint(user)
return
diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm
index 0d70692b134..1894d62942b 100644
--- a/code/modules/mob/living/silicon/robot/component.dm
+++ b/code/modules/mob/living/silicon/robot/component.dm
@@ -218,7 +218,7 @@
icon = 'icons/obj/robot_component.dmi'
icon_state = "working"
construction_time = 200
- construction_cost = list("metal"=5000)
+ construction_cost = list(DEFAULT_WALL_MATERIAL=5000)
var/brute = 0
var/burn = 0
var/icon_state_broken = "broken"
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 77bb2b466d4..40746ff02f0 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -188,8 +188,8 @@
//Standard robots use config for crit, which is somewhat excessive for these guys.
//Drones killed by damage will gib.
/mob/living/silicon/robot/drone/handle_regular_status_updates()
-
- if((health <= -35 || (master_fabricator && src.z != master_fabricator.z)) && src.stat != 2)
+ var/turf/T = get_turf(src)
+ if((!T || health <= -35 || (master_fabricator && T.z != master_fabricator.z)) && src.stat != DEAD)
timeofdeath = world.time
death() //Possibly redundant, having trouble making death() cooperate.
gib()
@@ -287,6 +287,7 @@
src.verbs -= silicon_subsystems
/mob/living/silicon/robot/drone/construction
+ icon_state = "constructiondrone"
law_type = /datum/ai_laws/construction_drone
module_type = /obj/item/weapon/robot_module/drone/construction
can_pull_size = 5
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
index e5778ad4dc5..0eaf1c87793 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_abilities.dm
@@ -21,9 +21,11 @@
return
-//Actual picking-up event.
-/mob/living/silicon/robot/drone/attack_hand(mob/living/carbon/human/M as mob)
-
- if(M.a_intent == I_HELP)
- get_scooped(M)
- ..()
\ No newline at end of file
+/mob/living/silicon/robot/drone/MouseDrop(atom/over_object)
+ var/mob/living/carbon/H = over_object
+ if(!istype(H) || !Adjacent(H)) return ..()
+ if(H.a_intent == "help")
+ get_scooped(H)
+ return
+ else
+ return ..()
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
index 1864e0171b6..84611ecb95c 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm
@@ -16,12 +16,7 @@
/obj/item/weapon/airlock_electronics,
/obj/item/weapon/module/power_control,
/obj/item/weapon/stock_parts,
- /obj/item/light_fixture_frame,
- /obj/item/apc_frame,
- /obj/item/alarm_frame,
- /obj/item/firealarm_frame,
- /obj/item/weapon/table_parts,
- /obj/item/weapon/table_parts/rack,
+ /obj/item/frame,
/obj/item/weapon/camera_assembly,
/obj/item/weapon/tank,
/obj/item/weapon/circuitboard,
@@ -97,7 +92,7 @@
icon_state = "gripper-sheet"
can_hold = list(
- /obj/item/stack/sheet
+ /obj/item/stack/material
)
/obj/item/weapon/gripper/attack_self(mob/user as mob)
@@ -199,7 +194,7 @@
wrapped = A.cell
A.cell.add_fingerprint(user)
- A.cell.updateicon()
+ A.cell.update_icon()
A.cell.loc = src
A.cell = null
@@ -216,7 +211,7 @@
wrapped = A.cell
A.cell.add_fingerprint(user)
- A.cell.updateicon()
+ A.cell.update_icon()
A.updateicon()
A.cell.loc = src
A.cell = null
@@ -333,10 +328,10 @@
else if(istype(W,/obj/item/ammo_casing))
if(metal)
metal.add_charge(1000)
- else if(istype(W,/obj/item/weapon/shard/shrapnel))
+ else if(istype(W,/obj/item/weapon/material/shard/shrapnel))
if(metal)
metal.add_charge(1000)
- else if(istype(W,/obj/item/weapon/shard))
+ else if(istype(W,/obj/item/weapon/material/shard))
if(glass)
glass.add_charge(1000)
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/grown))
diff --git a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
index 247334c2eab..a292ead1b14 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone_manufacturer.dm
@@ -108,6 +108,9 @@
if(jobban_isbanned(src,"Cyborg"))
usr << "You are banned from playing synthetics and cannot spawn as a drone."
return
+
+ if(!MayRespawn(1))
+ return
var/deathtime = world.time - src.timeofdeath
if(istype(src,/mob/dead/observer))
@@ -145,4 +148,4 @@
var/choice = input(src,"Which fabricator do you wish to use?") as null|anything in all_fabricators
if(choice)
var/obj/machinery/drone_fabricator/chosen_fabricator = all_fabricators[choice]
- chosen_fabricator.create_drone(src.client)
\ No newline at end of file
+ chosen_fabricator.create_drone(src.client)
diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm
index 6bf18971ba6..34df63d397a 100644
--- a/code/modules/mob/living/silicon/robot/emote.dm
+++ b/code/modules/mob/living/silicon/robot/emote.dm
@@ -38,9 +38,9 @@
param = null
if (param)
- message = "[src] salutes to [param]."
+ message = "salutes to [param]."
else
- message = "[src] salutes."
+ message = "salutes."
m_type = 1
if ("bow")
if (!src.buckled)
@@ -54,39 +54,39 @@
param = null
if (param)
- message = "[src] bows to [param]."
+ message = "bows to [param]."
else
- message = "[src] bows."
+ message = "bows."
m_type = 1
if ("clap")
if (!src.restrained())
- message = "[src] claps."
+ message = "claps."
m_type = 2
if ("flap")
if (!src.restrained())
- message = "[src] flaps his wings."
+ message = "flaps his wings."
m_type = 2
if ("aflap")
if (!src.restrained())
- message = "[src] flaps his wings ANGRILY!"
+ message = "flaps his wings ANGRILY!"
m_type = 2
if ("twitch")
- message = "[src] twitches violently."
+ message = "twitches violently."
m_type = 1
if ("twitch_s")
- message = "[src] twitches."
+ message = "twitches."
m_type = 1
if ("nod")
- message = "[src] nods."
+ message = "nods."
m_type = 1
if ("deathgasp")
- message = "[src] shudders violently for a moment, then becomes motionless, its eyes slowly darkening."
+ message = "shudders violently for a moment, then becomes motionless, its eyes slowly darkening."
m_type = 1
if ("glare")
@@ -100,9 +100,9 @@
param = null
if (param)
- message = "[src] glares at [param]."
+ message = "glares at [param]."
else
- message = "[src] glares."
+ message = "glares."
if ("stare")
var/M = null
@@ -115,9 +115,9 @@
param = null
if (param)
- message = "[src] stares at [param]."
+ message = "stares at [param]."
else
- message = "[src] stares."
+ message = "stares."
if ("look")
var/M = null
@@ -131,9 +131,9 @@
param = null
if (param)
- message = "[src] looks at [param]."
+ message = "looks at [param]."
else
- message = "[src] looks."
+ message = "looks."
m_type = 1
if("beep")
@@ -147,9 +147,9 @@
param = null
if (param)
- message = "[src] beeps at [param]."
+ message = "beeps at [param]."
else
- message = "[src] beeps."
+ message = "beeps."
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 1
@@ -164,9 +164,9 @@
param = null
if (param)
- message = "[src] pings at [param]."
+ message = "pings at [param]."
else
- message = "[src] pings."
+ message = "pings."
playsound(src.loc, 'sound/machines/ping.ogg', 50, 0)
m_type = 1
@@ -181,15 +181,15 @@
param = null
if (param)
- message = "[src] buzzes at [param]."
+ message = "buzzes at [param]."
else
- message = "[src] buzzes."
+ message = "buzzes."
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 1
if("law")
if (istype(module,/obj/item/weapon/robot_module/security))
- message = "[src] shows its legal authorization barcode."
+ message = "shows its legal authorization barcode."
playsound(src.loc, 'sound/voice/biamthelaw.ogg', 50, 0)
m_type = 2
@@ -211,10 +211,6 @@
src << "\blue Unusable emote '[act]'. Say *help for a list."
if ((message && src.stat == 0))
- if (m_type & 1)
- for(var/mob/O in viewers(src, null))
- O.show_message(message, m_type)
- else
- for(var/mob/O in hearers(src, null))
- O.show_message(message, m_type)
+ custom_emote(m_type,message)
+
return
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm
index e25bb9ff10a..5ed6df43cfa 100644
--- a/code/modules/mob/living/silicon/robot/life.dm
+++ b/code/modules/mob/living/silicon/robot/life.dm
@@ -10,6 +10,7 @@
//Status updates, death etc.
clamp_values()
handle_regular_status_updates()
+ handle_actions()
if(client)
handle_regular_hud_updates()
@@ -58,7 +59,7 @@
src.has_power = 0
if(lights_on) // Light is on but there is no power!
lights_on = 0
- SetLuminosity(0)
+ set_light(0)
/mob/living/silicon/robot/proc/handle_regular_status_updates()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 8cc67772b57..e71db5693d1 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -317,7 +317,7 @@
if(Entry[1] == src.ckey && Entry[2] == src.real_name) //They're in the list? Custom sprite time, var and icon change required
custom_sprite = 1
- icon = 'icons/mob/custom-synthetic.dmi'
+ icon = CUSTOM_ITEM_SYNTH
if(icon_state == "robot")
icon_state = "[src.ckey]-Standard"
@@ -367,9 +367,9 @@
lights_on = !lights_on
usr << "You [lights_on ? "enable" : "disable"] your integrated light."
if(lights_on)
- SetLuminosity(integrated_light_power) // 1.5x luminosity of flashlight
+ set_light(integrated_light_power) // 1.5x luminosity of flashlight
else
- SetLuminosity(0)
+ set_light(0)
/mob/living/silicon/robot/verb/self_diagnosis_verb()
set category = "Robot Commands"
@@ -409,19 +409,6 @@
C.toggled = 1
src << "\red You enable [C.name]."
-// this function shows information about the malf_ai gameplay type in the status screen
-/mob/living/silicon/robot/show_malf_ai()
- ..()
- for (var/datum/mind/malfai in malf.current_antagonists)
- if(connected_ai)
- if(connected_ai.mind == malfai)
- if(malf.hacked_apcs >= 3)
- stat(null, "Time until station control secured: [max(malf.hack_time/(malf.hacked_apcs/3), 0)] seconds")
- else if(malf.revealed)
- stat(null, "Time left: [max(malf.hack_time/(malf.hacked_apcs.len/3), 0)]")
- return 0
-
-
// this function displays jetpack pressure in the stat panel
/mob/living/silicon/robot/proc/show_jetpack_pressure()
// if you have a jetpack, show the internal tank pressure
@@ -594,6 +581,8 @@
user << "Close the panel first."
else if(cell)
user << "There is a power cell already installed."
+ else if(W.w_class != 3)
+ user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here."
else
user.drop_item()
W.loc = src
@@ -744,7 +733,7 @@
if(opened && !wiresexposed && (!istype(user, /mob/living/silicon)))
var/datum/robot_component/cell_component = components["power cell"]
if(cell)
- cell.updateicon()
+ cell.update_icon()
cell.add_fingerprint(user)
user.put_in_active_hand(cell)
user << "You remove \the [cell]."
@@ -1079,8 +1068,9 @@
if(cell.charge == 0)
return 0
- if(cell.use(amount * CELLRATE * CYBORG_POWER_USAGE_MULTIPLIER))
- used_power_this_tick += amount * CYBORG_POWER_USAGE_MULTIPLIER
+ var/power_use = amount * CYBORG_POWER_USAGE_MULTIPLIER
+ if(cell.checked_use(CELLRATE * power_use))
+ used_power_this_tick += power_use
return 1
return 0
diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm
index 3bc0dd9a150..96514fa6716 100644
--- a/code/modules/mob/living/silicon/robot/robot_items.dm
+++ b/code/modules/mob/living/silicon/robot/robot_items.dm
@@ -28,17 +28,16 @@
user << "You activate the analyzer's microlaser, analyzing \the [loaded_item] and breaking it down."
flick("portable_analyzer_scan", src)
playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1)
- if(loaded_item.reliability >= min_reliability)
- var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech)
- for(var/T in temp_tech)
- files.UpdateTech(T, temp_tech[T])
- user << "\The [loaded_item] had level [temp_tech[T]] in [T]."
- loaded_item = null
+ var/list/temp_tech = ConvertReqString2List(loaded_item.origin_tech)
+ for(var/T in temp_tech)
+ files.UpdateTech(T, temp_tech[T])
+ user << "\The [loaded_item] had level [temp_tech[T]] in [T]."
+ loaded_item = null
for(var/obj/I in contents)
for(var/mob/M in I.contents)
M.death()
- if(istype(I,/obj/item/stack/sheet))//Only deconsturcts one sheet at a time instead of the entire stack
- var/obj/item/stack/sheet/S = I
+ if(istype(I,/obj/item/stack/material))//Only deconsturcts one sheet at a time instead of the entire stack
+ var/obj/item/stack/material/S = I
if(S.get_amount() > 1)
S.use(1)
loaded_item = S
@@ -57,8 +56,6 @@
if(response == "Sync")
var/success = 0
for(var/obj/machinery/r_n_d/server/S in machines)
- if(S.disabled)
- continue
for(var/datum/tech/T in files.known_tech) //Uploading
S.files.AddTech2Known(T)
for(var/datum/tech/T in S.files.known_tech) //Downloading
@@ -129,7 +126,10 @@
return
if(istype(target,/obj/machinery/portable_atmospherics/hydroponics))
var/obj/machinery/portable_atmospherics/hydroponics/T = target
- T.harvest(user)
+ if(T.harvest) //Try to harvest, assuming it's alive.
+ T.harvest(user)
+ else if(T.dead) //It's probably dead otherwise.
+ T.remove_dead(user)
else
user << "Harvesting \a [target] is not the purpose of this tool. The [src] is for plants being grown."
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index 7959aa77c55..527ce35df28 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -230,7 +230,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/roller_holder(src)
src.modules += new /obj/item/weapon/reagent_containers/borghypo/crisis(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
- src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
+ src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/extinguisher/mini(src)
src.emag = new /obj/item/weapon/reagent_containers/spray(src)
@@ -310,7 +310,7 @@ var/global/list/robot_modules = list(
synths += plasteel
synths += glass
- var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src)
+ var/obj/item/stack/material/cyborg/steel/M = new (src)
M.synths = list(metal)
src.modules += M
@@ -318,11 +318,11 @@ var/global/list/robot_modules = list(
R.synths = list(metal)
src.modules += R
- var/obj/item/stack/sheet/plasteel/cyborg/S = new /obj/item/stack/sheet/plasteel/cyborg(src)
+ var/obj/item/stack/material/cyborg/plasteel/S = new (src)
S.synths = list(plasteel)
src.modules += S
- var/obj/item/stack/sheet/glass/reinforced/cyborg/RG = new /obj/item/stack/sheet/glass/reinforced/cyborg(src)
+ var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
RG.synths = list(metal, glass)
src.modules += RG
@@ -356,11 +356,11 @@ var/global/list/robot_modules = list(
MD.glass = glass
src.modules += MD
- var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src)
+ var/obj/item/stack/material/cyborg/steel/M = new (src)
M.synths = list(metal)
src.modules += M
- var/obj/item/stack/sheet/glass/cyborg/G = new /obj/item/stack/sheet/glass/cyborg(src)
+ var/obj/item/stack/material/cyborg/glass/G = new (src)
G.synths = list(glass)
src.modules += G
@@ -376,7 +376,7 @@ var/global/list/robot_modules = list(
S.synths = list(metal)
src.modules += S
- var/obj/item/stack/sheet/glass/reinforced/cyborg/RG = new /obj/item/stack/sheet/glass/reinforced/cyborg(src)
+ var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
RG.synths = list(metal, glass)
src.modules += RG
@@ -425,6 +425,9 @@ var/global/list/robot_modules = list(
T.update_icon()
else
T.charge_tick = 0
+ var/obj/item/weapon/melee/baton/robot/B = locate() in src.modules
+ if(B && B.bcell)
+ B.bcell.give(amount)
/obj/item/weapon/robot_module/janitor
name = "janitorial robot module"
@@ -484,8 +487,8 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/flash(src)
src.modules += new /obj/item/weapon/gripper/service(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/bucket(src)
- src.modules += new /obj/item/weapon/minihoe(src)
- src.modules += new /obj/item/weapon/hatchet(src)
+ src.modules += new /obj/item/weapon/material/minihoe(src)
+ src.modules += new /obj/item/weapon/material/hatchet(src)
src.modules += new /obj/item/device/analyzer/plant_analyzer(src)
src.modules += new /obj/item/weapon/storage/bag/plants(src)
src.modules += new /obj/item/weapon/robot_harvester(src)
@@ -494,7 +497,7 @@ var/global/list/robot_modules = list(
M.stored_matter = 30
src.modules += M
- src.modules += new /obj/item/weapon/reagent_containers/robodropper(src)
+ src.modules += new /obj/item/weapon/reagent_containers/dropper/industrial(src)
var/obj/item/weapon/flame/lighter/zippo/L = new /obj/item/weapon/flame/lighter/zippo(src)
L.lit = 1
@@ -676,11 +679,11 @@ var/global/list/robot_modules = list(
MD.plastic = plastic
src.modules += MD
- var/obj/item/stack/sheet/metal/cyborg/M = new /obj/item/stack/sheet/metal/cyborg(src)
+ var/obj/item/stack/material/cyborg/steel/M = new (src)
M.synths = list(metal)
src.modules += M
- var/obj/item/stack/sheet/glass/cyborg/G = new /obj/item/stack/sheet/glass/cyborg(src)
+ var/obj/item/stack/material/cyborg/glass/G = new (src)
G.synths = list(glass)
src.modules += G
@@ -696,7 +699,7 @@ var/global/list/robot_modules = list(
S.synths = list(metal)
src.modules += S
- var/obj/item/stack/sheet/glass/reinforced/cyborg/RG = new /obj/item/stack/sheet/glass/reinforced/cyborg(src)
+ var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
RG.synths = list(metal, glass)
src.modules += RG
@@ -704,11 +707,11 @@ var/global/list/robot_modules = list(
WT.synths = list(wood)
src.modules += WT
- var/obj/item/stack/sheet/wood/cyborg/W = new /obj/item/stack/sheet/wood/cyborg(src)
+ var/obj/item/stack/material/cyborg/wood/W = new (src)
W.synths = list(wood)
src.modules += W
- var/obj/item/stack/sheet/mineral/plastic/cyborg/P = new /obj/item/stack/sheet/mineral/plastic/cyborg(src)
+ var/obj/item/stack/material/cyborg/plastic/P = new (src)
P.synths = list(plastic)
src.modules += P
@@ -726,10 +729,3 @@ var/global/list/robot_modules = list(
LR.Charge(R, amount)
..()
return
-
-//checks whether this item is a module of the robot it is located in.
-/obj/item/proc/is_robot_module()
- if (!istype(src.loc, /mob/living/silicon/robot))
- return 0
- var/mob/living/silicon/robot/R = src.loc
- return (src in R.module.modules)
diff --git a/code/modules/mob/living/silicon/say.dm b/code/modules/mob/living/silicon/say.dm
index ec6ddefe1cd..1fefa272e56 100644
--- a/code/modules/mob/living/silicon/say.dm
+++ b/code/modules/mob/living/silicon/say.dm
@@ -185,7 +185,7 @@
This is another way of saying that we won't bother dealing with them.*/
else
src << "No holopad connected."
- return
+ return 0
return 1
/mob/living/silicon/ai/proc/holopad_emote(var/message) //This is called when the AI uses the 'me' verb while using a holopad.
@@ -206,7 +206,7 @@
M.show_message(rendered, 2)
else //This shouldn't occur, but better safe then sorry.
src << "No holopad connected."
- return
+ return 0
return 1
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index d2e30953e77..de279566784 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -27,11 +27,13 @@
#define MED_HUD 2 //Medical HUD mode
/mob/living/silicon/New()
+ silicon_mob_list |= src
..()
add_language("Galactic Common")
init_subsystems()
/mob/living/silicon/Destroy()
+ silicon_mob_list -= src
for(var/datum/alarm_handler/AH in alarm_manager.all_handlers)
AH.unregister(src)
..()
@@ -126,6 +128,9 @@
updatehealth()
return 1*/
+/mob/living/silicon/attack_throat()
+ return
+
/proc/islinked(var/mob/living/silicon/robot/bot, var/mob/living/silicon/ai/ai)
if(!istype(bot) || !istype(ai))
return 0
@@ -345,4 +350,3 @@
/mob/living/silicon/proc/is_malf_or_traitor()
return is_traitor() || is_malf()
-
diff --git a/code/modules/mob/living/simple_animal/borer/borer_powers.dm b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
index e1b54dc832e..cc003938dec 100644
--- a/code/modules/mob/living/simple_animal/borer/borer_powers.dm
+++ b/code/modules/mob/living/simple_animal/borer/borer_powers.dm
@@ -56,6 +56,10 @@
if(src.Adjacent(C))
choices += C
+ if(!choices.len)
+ src << "There are no viable hosts within range..."
+ return
+
var/mob/living/carbon/M = input(src,"Who do you wish to infest?") in null|choices
if(!M || !src) return
diff --git a/code/modules/mob/living/simple_animal/constructs/constructs.dm b/code/modules/mob/living/simple_animal/constructs/constructs.dm
index 1ae5bba479f..7781a267449 100644
--- a/code/modules/mob/living/simple_animal/constructs/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs/constructs.dm
@@ -240,11 +240,12 @@
////////////////Glow//////////////////
/mob/living/simple_animal/construct/proc/add_glow()
overlays = 0
- var/overlay_layer = LIGHTING_LAYER+1
+ var/overlay_layer = LIGHTING_LAYER+0.1
if(layer != MOB_LAYER)
overlay_layer=TURF_LAYER+0.2
overlays += image(icon,"glow-[icon_state]",overlay_layer)
+ set_light(2, -2, l_color = "#FFFFFF")
////////////////HUD//////////////////////
diff --git a/code/modules/mob/living/simple_animal/constructs/soulstone.dm b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
index 2fa81f08c8b..1b5a42b0a3c 100644
--- a/code/modules/mob/living/simple_animal/constructs/soulstone.dm
+++ b/code/modules/mob/living/simple_animal/constructs/soulstone.dm
@@ -9,7 +9,7 @@
desc = "A fragment of the legendary treasure known simply as the 'Soul Stone'. The shard still flickers with a fraction of the full artefacts power."
w_class = 1.0
slot_flags = SLOT_BELT
- origin_tech = "bluespace=4;materials=4"
+ origin_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 4)
var/imprinted = "empty"
//////////////////////////////Capturing////////////////////////////////////////////////////////
diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm
index 4e72bf55c0f..3197c6023cc 100644
--- a/code/modules/mob/living/simple_animal/friendly/cat.dm
+++ b/code/modules/mob/living/simple_animal/friendly/cat.dm
@@ -228,6 +228,23 @@
icon_dead = "kitten_dead"
gender = NEUTER
+// Leaving this here for now.
+/obj/item/weapon/holder/cat/fluff/bones
+ name = "Bones"
+ desc = "It's Bones! Meow."
+ gender = MALE
+ icon_state = "cat3"
+
+/mob/living/simple_animal/cat/fluff/bones
+ name = "Bones"
+ desc = "That's Bones the cat. He's a laid back, black cat. Meow."
+ gender = MALE
+ icon_state = "cat3"
+ icon_living = "cat3"
+ icon_dead = "cat3_dead"
+ holder_type = /obj/item/weapon/holder/cat/fluff/bones
+ var/friend_name = "Erstatz Vryroxes"
+
/mob/living/simple_animal/cat/kitten/New()
gender = pick(MALE, FEMALE)
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/crab.dm b/code/modules/mob/living/simple_animal/friendly/crab.dm
index a1284503e12..ed32eec986c 100644
--- a/code/modules/mob/living/simple_animal/friendly/crab.dm
+++ b/code/modules/mob/living/simple_animal/friendly/crab.dm
@@ -40,240 +40,3 @@
response_help = "pets"
response_disarm = "gently pushes aside"
response_harm = "stomps"
-
-//LOOK AT THIS - ..()??
-/*/mob/living/simple_animal/crab/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(istype(O, /obj/item/weapon/wirecutters))
- if(prob(50))
- user << "\red \b This kills the crab."
- health -= 20
- death()
- else
- GetMad()
- get
- if(istype(O, /obj/item/stack/medical))
- if(stat != DEAD)
- var/obj/item/stack/medical/MED = O
- if(health < maxHealth)
- if(MED.amount >= 1)
- health = min(maxHealth, health + MED.heal_brute)
- MED.amount -= 1
- if(MED.amount <= 0)
- qdel(MED)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\blue [user] applies the [MED] on [src]")
- else
- user << "\blue this [src] is dead, medical items won't bring it back to life."
- else
- if(O.force)
- health -= O.force
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
- else
- usr << "\red This weapon is ineffective, it does no damage."
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red [user] gently taps [src] with the [O]. ")
-
-/mob/living/simple_animal/crab/Topic(href, href_list)
- if(usr.stat) return
-
- //Removing from inventory
- if(href_list["remove_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
- return
- var/remove_from = href_list["remove_inv"]
- switch(remove_from)
- if("head")
- if(inventory_head)
- name = real_name
- desc = initial(desc)
- speak_emote = list("clicks")
- emote_hear = list("clicks")
- emote_see = list("clacks")
- desc = "Free crabs!"
- src.sd_SetLuminosity(0)
- inventory_head.loc = src.loc
- inventory_head = null
- else
- usr << "\red There is nothing to remove from its [remove_from]."
- return
- if("mask")
- if(inventory_mask)
- inventory_mask.loc = src.loc
- inventory_mask = null
- else
- usr << "\red There is nothing to remove from its [remove_from]."
- return
-
- //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
-
- //Adding things to inventory
- else if(href_list["add_inv"])
- if(get_dist(src,usr) > 1 || !(ishuman(usr) || issmall(usr) || isrobot(usr) || isalienadult(usr)))
- return
- var/add_to = href_list["add_inv"]
- if(!usr.get_active_hand())
- usr << "\red You have nothing in your hand to put on its [add_to]."
- return
- switch(add_to)
- if("head")
- if(inventory_head)
- usr << "\red It's is already wearing something."
- return
- else
- var/obj/item/item_to_add = usr.get_active_hand()
- if(!item_to_add)
- return
-
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
- //Many hats added, Some will probably be removed, just want to see which ones are popular.
-
- var/list/allowed_types = list(
- /obj/item/clothing/head/helmet,
- /obj/item/clothing/glasses/sunglasses,
- /obj/item/clothing/head/caphat,
- /obj/item/clothing/head/collectable/captain,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/that,
- /obj/item/clothing/head/kitty,
- /obj/item/clothing/head/collectable/kitty,
- /obj/item/clothing/head/rabbitears,
- /obj/item/clothing/head/collectable/rabbitears,
- /obj/item/clothing/head/beret,
- /obj/item/clothing/head/collectable/beret,
- /obj/item/clothing/head/det_hat,
- /obj/item/clothing/head/nursehat,
- /obj/item/clothing/head/pirate,
- /obj/item/clothing/head/collectable/pirate,
- /obj/item/clothing/head/chefhat,
- /obj/item/clothing/head/collectable/chef,
- /obj/item/clothing/head/collectable/police,
- /obj/item/clothing/head/wizard/fake,
- /obj/item/clothing/head/wizard,
- /obj/item/clothing/head/collectable/wizard,
- /obj/item/clothing/head/hardhat,
- /obj/item/clothing/head/collectable/hardhat,
- /obj/item/clothing/head/hardhat/white,
- /obj/item/weapon/bedsheet,
- /obj/item/clothing/head/soft
- )
-
- if( ! ( item_to_add.type in allowed_types ) )
- usr << "\red It doesn't seem too keen on wearing that item."
- return
-
- usr.drop_item()
- item_to_add.loc = src
- src.inventory_head = item_to_add
- regenerate_icons()
-
- //Various hats and items (worn on his head) change Ian's behaviour. His attributes are reset when a HAT is removed.
-
-
- switch(inventory_head && inventory_head.type)
- if(/obj/item/clothing/head/caphat, /obj/item/clothing/head/collectable/captain)
- name = "Captain [real_name]"
- desc = "Probably better than the last captain."
- if(/obj/item/clothing/head/kitty, /obj/item/clothing/head/collectable/kitty)
- name = "Runtime"
- emote_see = list("coughs up a furball", "stretches")
- emote_hear = list("purrs")
- speak = list("Purrr", "Meow!", "MAOOOOOW!", "HISSSSS", "MEEEEEEW")
- desc = "It's a cute little kitty-cat! ... wait ... what the hell?"
- if(/obj/item/clothing/head/rabbitears, /obj/item/clothing/head/collectable/rabbitears)
- name = "Hoppy"
- emote_see = list("twitches its nose", "hops around a bit")
- desc = "This is hoppy. It's a corgi-...urmm... bunny rabbit"
- if(/obj/item/clothing/head/beret, /obj/item/clothing/head/collectable/beret)
- name = "Yann"
- desc = "Mon dieu! C'est un chien!"
- speak = list("le woof!", "le bark!", "JAPPE!!")
- emote_see = list("cowers in fear", "surrenders", "plays dead","looks as though there is a wall in front of /him")
- if(/obj/item/clothing/head/det_hat)
- name = "Detective [real_name]"
- desc = "[name] sees through your lies..."
- emote_see = list("investigates the area","sniffs around for clues","searches for scooby snacks")
- if(/obj/item/clothing/head/nursehat)
- name = "Nurse [real_name]"
- desc = "[name] needs 100cc of beef jerky...STAT!"
- if(/obj/item/clothing/head/pirate, /obj/item/clothing/head/collectable/pirate)
- name = "'[pick("Ol'","Scurvy","Black","Rum","Gammy","Bloody","Gangrene","Death","Long-John")] [pick("kibble","leg","beard","tooth","poop-deck","Threepwood","Le Chuck","corsair","Silver","Crusoe")]'"
- desc = "Yaarghh!! Thar' be a scurvy dog!"
- emote_see = list("hunts for treasure","stares coldly...","gnashes his tiny corgi teeth")
- emote_hear = list("growls ferociously", "snarls")
- speak = list("Arrrrgh!!","Grrrrrr!")
- if(/obj/item/clothing/head/collectable/police)
- name = "Officer [real_name]"
- emote_see = list("drools","looks for donuts")
- desc = "Stop right there criminal scum!"
- if(/obj/item/clothing/head/wizard/fake, /obj/item/clothing/head/wizard, /obj/item/clothing/head/collectable/wizard)
- name = "Grandwizard [real_name]"
- speak = list("YAP", "Woof!", "Bark!", "AUUUUUU", "EI NATH!")
- if(/obj/item/weapon/bedsheet)
- name = "\improper Ghost"
- speak = list("WoooOOOooo~","AUUUUUUUUUUUUUUUUUU")
- emote_see = list("stumbles around", "shivers")
- emote_hear = list("howls","groans")
- desc = "Spooky!"
- if(/obj/item/clothing/head/soft)
- name = "Corgi Tech [real_name]"
- speak = list("Needs a stamp!", "Request DENIED!", "Fill these out in triplicate!")
- desc = "The reason your yellow gloves have chew-marks."
-
- if("mask")
- if(inventory_mask)
- usr << "\red It's already wearing something."
- return
- else
- var/obj/item/item_to_add = usr.get_active_hand()
- if(!item_to_add)
- return
-
- //Corgis are supposed to be simpler, so only a select few objects can actually be put
- //to be compatible with them. The objects are below.
-
- var/list/allowed_types = list(
- /obj/item/clothing/suit/armor/vest,
- /obj/item/device/radio
- )
-
- if( ! ( item_to_add.type in allowed_types ) )
- usr << "\red This object won't fit."
- return
-
- usr.drop_item()
- item_to_add.loc = src
- src.inventory_mask = item_to_add
- regenerate_icons()
-
- //show_inv(usr) //Commented out because changing Ian's name and then calling up his inventory opens a new inventory...which is annoying.
- else
- ..()
-
-/mob/living/simple_animal/crab/GetMad()
- name = "MEGAMADCRAB"
- real_name = "MEGAMADCRAB"
- desc = "OH NO YOU DUN IT NOW."
- icon = 'icons/mob/mob.dmi'
- icon_state = "madcrab"
- icon_living = "madcrab"
- icon_dead = "madcrab_dead"
- speak_emote = list("clicks")
- emote_hear = list("clicks with fury", "clicks angrily")
- emote_see = list("clacks")
- speak_chance = 1
- turns_per_move = 15//Gotta go fast
- maxHealth = 100//So they don't die as quickly
- health = 100
- melee_damage_lower = 3
- melee_damage_upper = 10//Kill them. Kill them all
- if(inventory_head)//Drops inventory so it doesn't have to be dealt with
- inventory_head.loc = src.loc
- inventory_head = null
- if(inventory_mask)
- inventory_mask.loc = src.loc
- inventory_mask = null*/
\ No newline at end of file
diff --git a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
index 433a46efb7f..217b1f0914e 100644
--- a/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
+++ b/code/modules/mob/living/simple_animal/friendly/farm_animals.dm
@@ -49,12 +49,16 @@
var/obj/effect/plant/SV = locate() in loc
SV.die_off(1)
+ if(locate(/obj/machinery/portable_atmospherics/hydroponics/soil/invisible) in loc)
+ var/obj/machinery/portable_atmospherics/hydroponics/soil/invisible/SP = locate() in loc
+ qdel(SP)
+
if(!pulledby)
- for(var/direction in shuffle(list(1,2,4,8,5,6,9,10)))
- var/step = get_step(src, direction)
- if(step)
- if(locate(/obj/effect/plant) in step)
- Move(step)
+ var/obj/effect/plant/food
+ food = locate(/obj/effect/plant) in oview(5,loc)
+ if(food)
+ var/step = get_step_to(src, food, 0)
+ Move(step)
/mob/living/simple_animal/hostile/retaliate/goat/Retaliate()
..()
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index ad41fc28aad..e94462a20b9 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -28,6 +28,7 @@
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
universal_understand = 1
+ holder_type = /obj/item/weapon/holder/mouse
mob_size = 1
/mob/living/simple_animal/mouse/Life()
@@ -62,6 +63,13 @@
if(!body_color)
body_color = pick( list("brown","gray","white") )
+ switch(body_color)
+ if("brown")
+ holder_type = /obj/item/weapon/holder/mouse/brown
+ if("gray")
+ holder_type = /obj/item/weapon/holder/mouse/gray
+ if("white")
+ holder_type = /obj/item/weapon/holder/mouse/white
icon_state = "mouse_[body_color]"
icon_living = "mouse_[body_color]"
icon_dead = "mouse_[body_color]_dead"
@@ -76,6 +84,22 @@
if(client)
client.time_died_as_mouse = world.time
+/mob/living/simple_animal/mouse/MouseDrop(atom/over_object)
+
+ var/mob/living/carbon/H = over_object
+ if(!istype(H) || !Adjacent(H)) return ..()
+
+ if(H.a_intent == "help")
+ get_scooped(H)
+ return
+ else
+ return ..()
+
+/mob/living/simple_animal/mouse/get_scooped(var/mob/living/carbon/grabber)
+ if (stat >= DEAD)
+ return
+ ..()
+
/mob/living/simple_animal/mouse/start_pulling(var/atom/movable/AM)//Prevents mouse from pulling things
src << "You are too small to pull anything."
return
@@ -101,14 +125,17 @@
/mob/living/simple_animal/mouse/white
body_color = "white"
icon_state = "mouse_white"
+ holder_type = /obj/item/weapon/holder/mouse/white
/mob/living/simple_animal/mouse/gray
body_color = "gray"
icon_state = "mouse_gray"
+ holder_type = /obj/item/weapon/holder/mouse/gray
/mob/living/simple_animal/mouse/brown
body_color = "brown"
icon_state = "mouse_brown"
+ holder_type = /obj/item/weapon/holder/mouse/brown
//TOM IS ALIVE! SQUEEEEEEEE~K :)
/mob/living/simple_animal/mouse/brown/Tom
diff --git a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
index af59941b1f7..0631273769c 100644
--- a/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
+++ b/code/modules/mob/living/simple_animal/friendly/spiderbot.dm
@@ -135,19 +135,7 @@
spawn(300) src.explode()
else
- if(O.force)
- var/damage = O.force
- if (O.damtype == HALLOSS)
- damage = 0
- adjustBruteLoss(damage)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red \b [src] has been attacked with the [O] by [user]. ")
- else
- usr << "\red This weapon is ineffective, it does no damage."
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("\red [user] gently taps [src] with the [O]. ")
+ attacked_with_item(O, user)
/mob/living/simple_animal/spiderbot/proc/transfer_personality(var/obj/item/device/mmi/M as obj)
diff --git a/code/modules/mob/living/simple_animal/hostile/alien.dm b/code/modules/mob/living/simple_animal/hostile/alien.dm
index 27b43a7cc3a..e47d88aeb5f 100644
--- a/code/modules/mob/living/simple_animal/hostile/alien.dm
+++ b/code/modules/mob/living/simple_animal/hostile/alien.dm
@@ -91,3 +91,82 @@
..()
visible_message("[src] lets out a waning guttural screech, green blood bubbling from its maw...")
playsound(src, 'sound/voice/hiss6.ogg', 100, 1)
+
+// Xenoarch aliens.
+/mob/living/simple_animal/hostile/samak
+ name = "samak"
+ desc = "A fast, armoured predator accustomed to hiding and ambushing in cold terrain."
+ faction = "samak"
+ icon_state = "samak"
+ icon_living = "samak"
+ icon_dead = "samak_dead"
+ icon = 'icons/jungle.dmi'
+ move_to_delay = 2
+ maxHealth = 125
+ health = 125
+ speed = 2
+ melee_damage_lower = 5
+ melee_damage_upper = 15
+ attacktext = "mauled"
+ cold_damage_per_tick = 0
+ speak_chance = 5
+ speak = list("Hruuugh!","Hrunnph")
+ emote_see = list("paws the ground","shakes its mane","stomps")
+ emote_hear = list("snuffles")
+
+/mob/living/simple_animal/hostile/diyaab
+ name = "diyaab"
+ desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
+ faction = "diyaab"
+ icon_state = "diyaab"
+ icon_living = "diyaab"
+ icon_dead = "diyaab_dead"
+ icon = 'icons/jungle.dmi'
+ move_to_delay = 1
+ maxHealth = 25
+ health = 25
+ speed = 1
+ melee_damage_lower = 1
+ melee_damage_upper = 8
+ attacktext = "gouged"
+ cold_damage_per_tick = 0
+ speak_chance = 5
+ speak = list("Awrr?","Aowrl!","Worrl")
+ emote_see = list("sniffs the air cautiously","looks around")
+ emote_hear = list("snuffles")
+
+/mob/living/simple_animal/hostile/shantak
+ name = "shantak"
+ desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though."
+ faction = "shantak"
+ icon_state = "shantak"
+ icon_living = "shantak"
+ icon_dead = "shantak_dead"
+ icon = 'icons/jungle.dmi'
+ move_to_delay = 1
+ maxHealth = 75
+ health = 75
+ speed = 1
+ melee_damage_lower = 3
+ melee_damage_upper = 12
+ attacktext = "gouged"
+ cold_damage_per_tick = 0
+ speak_chance = 5
+ speak = list("Shuhn","Shrunnph?","Shunpf")
+ emote_see = list("scratches the ground","shakes out it's mane","tinkles gently")
+
+/mob/living/simple_animal/yithian
+ name = "yithian"
+ desc = "A friendly creature vaguely resembling an oversized snail without a shell."
+ icon_state = "yithian"
+ icon_living = "yithian"
+ icon_dead = "yithian_dead"
+ icon = 'icons/jungle.dmi'
+
+/mob/living/simple_animal/tindalos
+ name = "tindalos"
+ desc = "It looks like a large, flightless grasshopper."
+ icon_state = "tindalos"
+ icon_living = "tindalos"
+ icon_dead = "tindalos_dead"
+ icon = 'icons/jungle.dmi'
diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
index 4d7a8f7e3aa..793e421b99f 100644
--- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
+++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm
@@ -63,16 +63,30 @@
poison_per_bite = 5
move_to_delay = 4
-/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
+/mob/living/simple_animal/hostile/giant_spider/New(var/location, var/atom/parent)
+ get_light_and_color(parent)
..()
- if(isliving(target_mob))
- var/mob/living/L = target_mob
+
+/mob/living/simple_animal/hostile/giant_spider/AttackingTarget()
+ var/target = ..()
+ if(isliving(target))
+ var/mob/living/L = target
if(L.reagents)
L.reagents.add_reagent("toxin", poison_per_bite)
if(prob(poison_per_bite))
L << "\red You feel a tiny prick."
L.reagents.add_reagent(poison_type, 5)
+/mob/living/simple_animal/hostile/giant_spider/nurse/AttackingTarget()
+ var/target = ..()
+ if(ishuman(target))
+ var/mob/living/carbon/human/H = target
+ if(prob(poison_per_bite))
+ var/obj/item/organ/external/O = pick(H.organs)
+ if(!(O.status & ORGAN_ROBOT))
+ var/eggs = PoolOrNew(/obj/effect/spider/eggcluster/, list(O, src))
+ O.implants += eggs
+
/mob/living/simple_animal/hostile/giant_spider/Life()
..()
if(!stat)
@@ -117,7 +131,7 @@
var/obj/effect/spider/stickyweb/W = locate() in get_turf(src)
if(!W)
busy = SPINNING_WEB
- src.visible_message("\blue \the [src] begins to secrete a sticky substance.")
+ src.visible_message("\The [src] begins to secrete a sticky substance.")
stop_automated_movement = 1
spawn(40)
if(busy == SPINNING_WEB)
@@ -129,13 +143,13 @@
var/obj/effect/spider/eggcluster/E = locate() in get_turf(src)
if(!E && fed > 0)
busy = LAYING_EGGS
- src.visible_message("\blue \the [src] begins to lay a cluster of eggs.")
+ src.visible_message("\The [src] begins to lay a cluster of eggs.")
stop_automated_movement = 1
spawn(50)
if(busy == LAYING_EGGS)
E = locate() in get_turf(src)
if(!E)
- new /obj/effect/spider/eggcluster(src.loc)
+ PoolOrNew(/obj/effect/spider/eggcluster, list(loc, src))
fed--
busy = 0
stop_automated_movement = 0
@@ -157,7 +171,7 @@
else if(busy == MOVING_TO_TARGET && cocoon_target)
if(get_dist(src, cocoon_target) <= 1)
busy = SPINNING_COCOON
- src.visible_message("\blue \the [src] begins to secrete a sticky substance around \the [cocoon_target].")
+ src.visible_message("\The [src] begins to secrete a sticky substance around \the [cocoon_target].")
stop_automated_movement = 1
walk(src,0)
spawn(50)
@@ -172,7 +186,7 @@
continue
large_cocoon = 1
fed++
- src.visible_message("\red \the [src] sticks a proboscis into \the [cocoon_target] and sucks a viscous substance out.")
+ src.visible_message("\The [src] sticks a proboscis into \the [cocoon_target] and sucks a viscous substance out.")
M.loc = C
C.pixel_x = M.pixel_x
C.pixel_y = M.pixel_y
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index cc58a7ce1c4..8e29e21008a 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -118,7 +118,7 @@
var/list/L = hearers(src, dist)
for (var/obj/mecha/M in mechas_list)
- if (get_dist(src, M) <= dist)
+ if (M.z == src.z && get_dist(src, M) <= dist)
L += M
return L
@@ -214,8 +214,8 @@
/mob/living/simple_animal/hostile/proc/check_horde()
if(emergency_shuttle.shuttle.location)
if(!enroute && !target_mob) //The shuttle docked, all monsters rush for the escape hallway
- if(!shuttletarget || (get_dist(src, shuttletarget) >= 2))
- shuttletarget = pick(escape_list)
+ if(!shuttletarget && escape_list.len) //Make sure we didn't already assign it a target, and that there are targets to pick
+ shuttletarget = pick(escape_list) //Pick a shuttle target
enroute = 1
stop_automated_movement = 1
spawn()
@@ -232,13 +232,13 @@
if(istype(A,/obj/machinery/door/airlock))
var/obj/machinery/door/airlock/D = A
D.open(1)
- else if(istype(A,/obj/structure/mineral_door))
- var/obj/structure/mineral_door/D = A
+ else if(istype(A,/obj/structure/simple_door))
+ var/obj/structure/simple_door/D = A
if(D.density)
D.Open()
else if(istype(A,/obj/structure/cult/pylon))
A.attack_generic(src, rand(melee_damage_lower, melee_damage_upper))
- else if(istype(A, /obj/structure/window) || istype(A, /obj/structure/closet) || istype(A, /obj/structure/table) || istype(A, /obj/structure/grille) || istype(A, /obj/structure/table/rack))
+ else if(istype(A, /obj/structure/window) || istype(A, /obj/structure/closet) || istype(A, /obj/structure/table) || istype(A, /obj/structure/grille))
A.attack_generic(src, rand(melee_damage_lower, melee_damage_upper))
Move(T)
FindTarget()
diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
index a2e9e21f75c..c8ab89d9055 100644
--- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
+++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm
@@ -170,16 +170,16 @@
var/obj/O
//shards
- O = new /obj/item/weapon/shard(src.loc)
+ O = new /obj/item/weapon/material/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
- O = new /obj/item/weapon/shard(src.loc)
+ O = new /obj/item/weapon/material/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
- O = new /obj/item/weapon/shard(src.loc)
+ O = new /obj/item/weapon/material/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
- O = new /obj/item/weapon/shard(src.loc)
+ O = new /obj/item/weapon/material/shard(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//rods
@@ -196,16 +196,16 @@
step_to(O, get_turf(pick(view(7, src))))
//plasteel
- O = new /obj/item/stack/sheet/plasteel(src.loc)
+ O = new /obj/item/stack/material/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(75))
- O = new /obj/item/stack/sheet/plasteel(src.loc)
+ O = new /obj/item/stack/material/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(50))
- O = new /obj/item/stack/sheet/plasteel(src.loc)
+ O = new /obj/item/stack/material/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
if(prob(25))
- O = new /obj/item/stack/sheet/plasteel(src.loc)
+ O = new /obj/item/stack/material/plasteel(src.loc)
step_to(O, get_turf(pick(view(7, src))))
//also drop dummy circuit boards deconstructable for research (loot)
@@ -214,7 +214,7 @@
//spawn 1-4 boards of a random type
var/spawnees = 0
var/num_boards = rand(1,4)
- var/list/options = list(1,2,4,8,16,32,64,128,256, 512)
+ var/list/options = list(1,2,4,8,16,32,64,128,256,512)
for(var/i=0, i[user] applies the [MED] on [src].")
else
- user << ""
+ user << "\The [src] is dead, medical items won't bring \him back to life."
if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
- if(istype(O, /obj/item/weapon/kitchenknife) || istype(O, /obj/item/weapon/butch))
+ if(istype(O, /obj/item/weapon/material/knife) || istype(O, /obj/item/weapon/material/knife/butch))
harvest(user)
else
- user.changeNext_move(8)
- if(O.force > resistance)
- var/damage = O.force
- if (O.damtype == HALLOSS)
- damage = 0
- if(supernatural && istype(O,/obj/item/weapon/nullrod))
- damage *= 2
- purge = 3
- adjustBruteLoss(damage)
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("This weapon is ineffective, it does no damage."
- for(var/mob/M in viewers(src, null))
- if ((M.client && !( M.blinded )))
- M.show_message("[user] gently taps [src] with \the [O].")
+ return
+
+ if(O.force > resistance)
+ var/damage = O.force
+ if (O.damtype == HALLOSS)
+ damage = 0
+ if(supernatural && istype(O,/obj/item/weapon/nullrod))
+ damage *= 2
+ purge = 3
+ adjustBruteLoss(damage)
+ else
+ usr << "[src] has been attacked with the [O] by [user].")
+ user.do_attack_animation(src)
/mob/living/simple_animal/movement_delay()
var/tally = 0 //Incase I need to add stuff other than "speed" later
diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm
index 6342c66576d..9775a68c9c9 100644
--- a/code/modules/mob/living/simple_animal/worm.dm
+++ b/code/modules/mob/living/simple_animal/worm.dm
@@ -137,10 +137,9 @@
proc/AttemptToEat(var/atom/target)
if(istype(target,/turf/simulated/wall))
- if((!istype(target,/turf/simulated/wall/r_wall) && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one
- var/turf/simulated/wall/wall = target
- wall.ChangeTurf(/turf/simulated/floor)
- new /obj/item/stack/sheet/metal(src, flatPlasmaValue)
+ var/turf/simulated/wall/W = target
+ if((!W.reinf_material && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one
+ W.dismantle_wall()
return 1
else if(istype(target,/atom/movable))
if(istype(target,/mob) || eatingDuration >= 50) //5 ticks to eat stuff like airlocks
@@ -176,18 +175,18 @@
for(var/atom/movable/stomachContent in contents)
if(prob(digestionProbability))
if(istype(stomachContent,/obj/item/stack)) //converts to plasma, keeping the stack value
- if(!istype(stomachContent,/obj/item/stack/sheet/mineral/phoron))
+ if(!istype(stomachContent,/obj/item/stack/material/phoron))
var/obj/item/stack/oldStack = stomachContent
- new /obj/item/stack/sheet/mineral/phoron(src, oldStack.get_amount())
+ new /obj/item/stack/material/phoron(src, oldStack.get_amount())
qdel(oldStack)
continue
else if(istype(stomachContent,/obj/item)) //converts to plasma, keeping the w_class
var/obj/item/oldItem = stomachContent
- new /obj/item/stack/sheet/mineral/phoron(src, oldItem.w_class)
+ new /obj/item/stack/material/phoron(src, oldItem.w_class)
qdel(oldItem)
continue
else
- new /obj/item/stack/sheet/mineral/phoron(src, flatPlasmaValue) //just flat amount
+ new /obj/item/stack/material/phoron(src, flatPlasmaValue) //just flat amount
qdel(stomachContent)
continue
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index e9cae30755d..c551d0a6b87 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -44,28 +44,30 @@
src << msg
return
-// Show a message to all mobs in sight of this one
+// Show a message to all mobs and objects in sight of this one
// This would be for visible actions by the src mob
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(var/message, var/self_message, var/blind_message)
- for(var/mob/M in viewers(src))
- if(M.see_invisible < invisibility)
- continue // Cannot view the invisible
- var/msg = message
- if(self_message && M==src)
- msg = self_message
- M.show_message( msg, 1, blind_message, 2)
-// Show a message to all mobs in sight of this atom
-// Use for objects performing visible actions
-// message is output to anyone who can see, e.g. "The [src] does something!"
-// blind_message (optional) is what blind people will hear e.g. "You hear something!"
-/atom/proc/visible_message(var/message, var/blind_message)
- for(var/mob/M in viewers(src))
- M.show_message( message, 1, blind_message, 2)
+ var/list/see = get_mobs_or_objects_in_view(world.view,src) | viewers(get_turf(src), null)
+
+ for(var/I in see)
+ if(isobj(I))
+ spawn(0)
+ if(I) //It's possible that it could be deleted in the meantime.
+ var/obj/O = I
+ O.show_message( message, 1, blind_message, 2)
+ else if(ismob(I))
+ var/mob/M = I
+ if(self_message && M==src)
+ M.show_message( self_message, 1, blind_message, 2)
+ if(M.see_invisible >= invisibility) // Cannot view the invisible
+ M.show_message( message, 1, blind_message, 2)
+ else if (blind_message)
+ M.show_message(blind_message, 2)
// Returns an amount of power drawn from the object (-1 if it's not viable).
// If drain_check is set it will not actually drain power, just return a value.
@@ -74,33 +76,31 @@
/atom/proc/drain_power(var/drain_check,var/surge, var/amount = 0)
return -1
-// Show a message to all mobs in earshot of this one
+// Show a message to all mobs and objects in earshot of this one
// This would be for audible actions by the src mob
// message is the message output to anyone who can hear.
// self_message (optional) is what the src mob hears.
// deaf_message (optional) is what deaf people will see.
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message)
- var/range = 7
- if(hearing_distance)
- range = hearing_distance
- var/msg = message
- for(var/mob/M in get_mobs_in_view(range, src))
- if(self_message && M==src)
- msg = self_message
- M.show_message( msg, 2, deaf_message, 1)
-// Show a message to all mobs in earshot of this atom
-// Use for objects performing audible actions
-// message is the message output to anyone who can hear.
-// deaf_message (optional) is what deaf people will see.
-// hearing_distance (optional) is the range, how many tiles away the message can be heard.
-/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance)
- var/range = 7
+ var/range = world.view
if(hearing_distance)
range = hearing_distance
- for(var/mob/M in get_mobs_in_view(range, src))
- M.show_message( message, 2, deaf_message, 1)
+ var/list/hear = get_mobs_or_objects_in_view(range,src)
+
+ for(var/I in hear)
+ if(isobj(I))
+ spawn(0)
+ if(I) //It's possible that it could be deleted in the meantime.
+ var/obj/O = I
+ O.show_message( message, 2, deaf_message, 1)
+ else if(ismob(I))
+ var/mob/M = I
+ var/msg = message
+ if(self_message && M==src)
+ msg = self_message
+ M.show_message( msg, 2, deaf_message, 1)
/mob/proc/findname(msg)
@@ -615,111 +615,6 @@
for(var/mob/M in viewers())
M.see(message)
-/*
-adds a dizziness amount to a mob
-use this rather than directly changing var/dizziness
-since this ensures that the dizzy_process proc is started
-currently only humans get dizzy
-
-value of dizziness ranges from 0 to 1000
-below 100 is not dizzy
-*/
-/mob/proc/make_dizzy(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- dizziness = min(1000, dizziness + amount) // store what will be new value
- // clamped to max 1000
- if(dizziness > 100 && !is_dizzy)
- spawn(0)
- dizzy_process()
-
-
-/*
-dizzy process - wiggles the client's pixel offset over time
-spawned from make_dizzy(), will terminate automatically when dizziness gets <100
-note dizziness decrements automatically in the mob's Life() proc.
-*/
-/mob/proc/dizzy_process()
- is_dizzy = 1
- while(dizziness > 100)
- if(client)
- var/amplitude = dizziness*(sin(dizziness * 0.044 * world.time) + 1) / 70
- client.pixel_x = amplitude * sin(0.008 * dizziness * world.time)
- client.pixel_y = amplitude * cos(0.008 * dizziness * world.time)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_dizzy = 0
- if(client)
- client.pixel_x = 0
- client.pixel_y = 0
-
-// jitteriness - copy+paste of dizziness
-
-/mob/proc/make_jittery(var/amount)
- if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy
- return
-
- jitteriness = min(1000, jitteriness + amount) // store what will be new value
- // clamped to max 1000
- if(jitteriness > 100 && !is_jittery)
- spawn(0)
- jittery_process()
-
-
-// Typo from the oriignal coder here, below lies the jitteriness process. So make of his code what you will, the previous comment here was just a copypaste of the above.
-/mob/proc/jittery_process()
- //var/old_x = pixel_x
- //var/old_y = pixel_y
- is_jittery = 1
- while(jitteriness > 100)
-// var/amplitude = jitteriness*(sin(jitteriness * 0.044 * world.time) + 1) / 70
-// pixel_x = amplitude * sin(0.008 * jitteriness * world.time)
-// pixel_y = amplitude * cos(0.008 * jitteriness * world.time)
-
- var/amplitude = min(4, jitteriness / 100)
- pixel_x = old_x + rand(-amplitude, amplitude)
- pixel_y = old_y + rand(-amplitude/3, amplitude/3)
-
- sleep(1)
- //endwhile - reset the pixel offsets to zero
- is_jittery = 0
- pixel_x = old_x
- pixel_y = old_y
-
-
-//handles up-down floaty effect in space
-/mob/proc/make_floating(var/n)
-
- floatiness = n
-
- if(floatiness && !is_floating)
- start_floating()
- else if(!floatiness && is_floating)
- stop_floating()
-
-/mob/proc/start_floating()
-
- is_floating = 1
-
- var/amplitude = 2 //maximum displacement from original position
- var/period = 36 //time taken for the mob to go up >> down >> original position, in deciseconds. Should be multiple of 4
-
- var/top = old_y + amplitude
- var/bottom = old_y - amplitude
- var/half_period = period / 2
- var/quarter_period = period / 4
-
- animate(src, pixel_y = top, time = quarter_period, easing = SINE_EASING | EASE_OUT, loop = -1) //up
- animate(pixel_y = bottom, time = half_period, easing = SINE_EASING, loop = -1) //down
- animate(pixel_y = old_y, time = quarter_period, easing = SINE_EASING | EASE_IN, loop = -1) //back
-
-/mob/proc/stop_floating()
- animate(src, pixel_y = old_y, time = 5, easing = SINE_EASING | EASE_IN) //halt animation
- //reset the pixel offsets to zero
- is_floating = 0
-
/mob/Stat()
..()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 792517c6d05..897c5181da7 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -108,12 +108,6 @@
var/old_x = 0
var/old_y = 0
var/drowsyness = 0.0//Carbon
- var/dizziness = 0//Carbon
- var/is_dizzy = 0
- var/is_jittery = 0
- var/jitteriness = 0//Carbon
- var/is_floating = 0
- var/floatiness = 0
var/charges = 0.0
var/nutrition = 400.0//Carbon
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 73c5ee1de7b..9471a705452 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -3,14 +3,19 @@
/obj/item/weapon/grab
name = "grab"
- flags = NOBLUDGEON
+ icon = 'icons/mob/screen1.dmi'
+ icon_state = "reinforce"
+ flags = 0
var/obj/screen/grab/hud = null
- var/mob/affecting = null
- var/mob/assailant = null
+ var/mob/living/affecting = null
+ var/mob/living/carbon/human/assailant = null
var/state = GRAB_PASSIVE
var/allow_upgrade = 1
- var/last_upgrade = 0
+ var/last_action = 0
+ var/last_hit_zone = 0
+ var/force_down //determines if the affecting mob will be pinned to the ground
+ var/dancing //determines if assailant and affecting keep looking at each other. Basically a wrestling position
layer = 21
abstract = 1
@@ -24,7 +29,7 @@
assailant = user
affecting = victim
- if(affecting.anchored)
+ if(affecting.anchored || !assailant.Adjacent(victim))
qdel(src)
return
@@ -32,20 +37,18 @@
hud = new /obj/screen/grab(src)
hud.icon_state = "reinforce"
+ icon_state = "grabbed"
hud.name = "reinforce grab"
hud.master = src
-/obj/item/weapon/grab/Destroy()
- //make sure the grabbed_by list doesn't fill up with nulls
- if(affecting)
- affecting.grabbed_by -= src
- affecting = null
- if(assailant)
- if(assailant.client)
- assailant.client.screen -= hud
- assailant = null
- qdel(hud)
- ..()
+ //check if assailant is grabbed by victim as well
+ if(assailant.grabbed_by)
+ for (var/obj/item/weapon/grab/G in assailant.grabbed_by)
+ if(G.assailant == affecting && G.affecting == assailant)
+ G.dancing = 1
+ G.adjust_position()
+ dancing = 1
+ adjust_position()
//Used by throw code to hand over the mob, instead of throwing the grab. The grab is then deleted by the throw code.
/obj/item/weapon/grab/proc/throw()
@@ -53,6 +56,7 @@
if(affecting.buckled)
return null
if(state >= GRAB_AGGRESSIVE)
+ animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1)
return affecting
return null
@@ -67,7 +71,13 @@
/obj/item/weapon/grab/process()
+ if(gcDestroyed) // GC is trying to delete us, we'll kill our processing so we can cleanly GC
+ return PROCESS_KILL
+
confirm()
+ if(!assailant)
+ qdel(src) // Same here, except we're trying to delete ourselves.
+ return PROCESS_KILL
if(assailant.client)
assailant.client.screen -= hud
@@ -87,20 +97,47 @@
var/obj/item/weapon/grab/G = assailant.r_hand
if(G.affecting != affecting)
allow_upgrade = 0
- if(state == GRAB_AGGRESSIVE)
- affecting.drop_l_hand()
- affecting.drop_r_hand()
- //disallow upgrading past aggressive if we're being grabbed aggressively
- for(var/obj/item/weapon/grab/G in affecting.grabbed_by)
- if(G == src) continue
- if(G.state >= GRAB_AGGRESSIVE)
- allow_upgrade = 0
+
+ //disallow upgrading past aggressive if we're being grabbed aggressively
+ for(var/obj/item/weapon/grab/G in affecting.grabbed_by)
+ if(G == src) continue
+ if(G.state >= GRAB_AGGRESSIVE)
+ allow_upgrade = 0
+
if(allow_upgrade)
- hud.icon_state = "reinforce"
+ if(state < GRAB_AGGRESSIVE)
+ hud.icon_state = "reinforce"
+ else
+ hud.icon_state = "reinforce1"
else
hud.icon_state = "!reinforce"
- else if(!affecting.buckled)
- affecting.loc = assailant.loc
+
+ if(state >= GRAB_AGGRESSIVE)
+ affecting.drop_l_hand()
+ affecting.drop_r_hand()
+
+ var/hit_zone = assailant.zone_sel.selecting
+ var/announce = 0
+ if(hit_zone != last_hit_zone)
+ announce = 1
+ last_hit_zone = hit_zone
+ if(ishuman(affecting))
+ switch(hit_zone)
+ if("mouth")
+ if(announce)
+ assailant.visible_message("[assailant] covers [affecting]'s mouth!")
+ if(affecting:silent < 3)
+ affecting:silent = 3
+ if("eyes")
+ if(announce)
+ assailant.visible_message("[assailant] covers [affecting]'s eyes!")
+ if(affecting:eye_blind < 3)
+ affecting:eye_blind = 3
+ if(force_down)
+ if(affecting.loc != assailant.loc)
+ force_down = 0
+ else
+ affecting.Weaken(2)
if(state >= GRAB_NECK)
affecting.Stun(3)
@@ -112,7 +149,59 @@
//affecting.apply_effect(STUTTER, 5) //would do this, but affecting isn't declared as mob/living for some stupid reason.
affecting.stuttering = max(affecting.stuttering, 5) //It will hamper your voice, being choked and all.
affecting.Weaken(5) //Should keep you down unless you get help.
- affecting.losebreath = min(affecting.losebreath + 2, 3)
+ affecting.losebreath = max(affecting.losebreath + 2, 3)
+
+ adjust_position()
+
+
+/obj/item/weapon/grab/attack_self()
+ return s_click(hud)
+
+
+//Updating pixelshift, position and direction
+//Gets called on process, when the grab gets upgraded or the assailant moves
+/obj/item/weapon/grab/proc/adjust_position()
+ if(affecting.buckled)
+ animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING)
+ return
+ if(affecting.lying && state != GRAB_KILL)
+ animate(affecting, pixel_x = 0, pixel_y = 0, 5, 1, LINEAR_EASING)
+ if(force_down)
+ affecting.set_dir(SOUTH) //face up
+ return
+ var/shift = 0
+ var/adir = get_dir(assailant, affecting)
+ affecting.layer = 4
+ switch(state)
+ if(GRAB_PASSIVE)
+ shift = 8
+ if(dancing) //look at partner
+ shift = 10
+ assailant.set_dir(get_dir(assailant, affecting))
+ if(GRAB_AGGRESSIVE)
+ shift = 12
+ if(GRAB_NECK, GRAB_UPGRADING)
+ shift = -10
+ adir = assailant.dir
+ affecting.set_dir(assailant.dir)
+ affecting.loc = assailant.loc
+ if(GRAB_KILL)
+ shift = 0
+ adir = 1
+ affecting.set_dir(SOUTH) //face up
+ affecting.loc = assailant.loc
+
+ switch(adir)
+ if(NORTH)
+ animate(affecting, pixel_x = 0, pixel_y =-shift, 5, 1, LINEAR_EASING)
+ affecting.layer = 3.9
+ if(SOUTH)
+ animate(affecting, pixel_x = 0, pixel_y = shift, 5, 1, LINEAR_EASING)
+ if(WEST)
+ animate(affecting, pixel_x = shift, pixel_y = 0, 5, 1, LINEAR_EASING)
+ if(EAST)
+ animate(affecting, pixel_x =-shift, pixel_y = 0, 5, 1, LINEAR_EASING)
+
/obj/item/weapon/grab/proc/s_click(obj/screen/S)
@@ -122,20 +211,29 @@
return
if(assailant.next_move > world.time)
return
- if(world.time < (last_upgrade + UPGRADE_COOLDOWN))
+ if(world.time < (last_action + UPGRADE_COOLDOWN))
return
if(!assailant.canmove || assailant.lying)
qdel(src)
return
- last_upgrade = world.time
+ last_action = world.time
if(state < GRAB_AGGRESSIVE)
if(!allow_upgrade)
return
- assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!")
+ if(!affecting.lying)
+ assailant.visible_message("[assailant] has grabbed [affecting] aggressively (now hands)!")
+ else
+ assailant.visible_message("[assailant] pins [affecting] down to the ground (now hands)!")
+ force_down = 1
+ affecting.Weaken(3)
+ step_to(assailant, affecting)
+ assailant.set_dir(EAST) //face the victim
+ affecting.set_dir(SOUTH) //face up
state = GRAB_AGGRESSIVE
icon_state = "grabbed1"
+ hud.icon_state = "reinforce1"
else if(state < GRAB_NECK)
if(isslime(affecting))
assailant << "You squeeze [affecting], but nothing interesting happens."
@@ -144,38 +242,27 @@
assailant.visible_message("[assailant] has reinforced \his grip on [affecting] (now neck)!")
state = GRAB_NECK
icon_state = "grabbed+1"
- if(!affecting.buckled)
- affecting.loc = assailant.loc
+ assailant.set_dir(get_dir(assailant, affecting))
affecting.attack_log += "\[[time_stamp()]\] Has had their neck grabbed by [assailant.name] ([assailant.ckey])"
assailant.attack_log += "\[[time_stamp()]\] Grabbed the neck of [affecting.name] ([affecting.ckey])"
msg_admin_attack("[key_name(assailant)] grabbed the neck of [key_name(affecting)]")
- hud.icon_state = "disarm/kill"
- hud.name = "disarm/kill"
+ hud.icon_state = "kill"
+ hud.name = "kill"
+ affecting.Stun(10) //10 ticks of ensured grab
else if(state < GRAB_UPGRADING)
assailant.visible_message("[assailant] starts to tighten \his grip on [affecting]'s neck!")
- hud.icon_state = "disarm/kill1"
- state = GRAB_UPGRADING
- if(do_after(assailant, UPGRADE_KILL_TIMER))
- if(state == GRAB_KILL)
- return
- if(!affecting)
- qdel(src)
- return
- if(!assailant.canmove || assailant.lying)
- qdel(src)
- return
- state = GRAB_KILL
- assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!")
- affecting.attack_log += "\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])"
- assailant.attack_log += "\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])"
- msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
+ hud.icon_state = "kill1"
- assailant.next_move = world.time + 10
- affecting.losebreath += 1
- else
- assailant.visible_message("[assailant] was unable to tighten \his grip on [affecting]'s neck!")
- hud.icon_state = "disarm/kill"
- state = GRAB_NECK
+ state = GRAB_KILL
+ assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!")
+ affecting.attack_log += "\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])"
+ assailant.attack_log += "\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])"
+ msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
+
+ assailant.next_move = world.time + 10
+ affecting.losebreath += 1
+ affecting.set_dir(WEST)
+ adjust_position()
//This is used to make sure the victim hasn't managed to yackety sax away before using the grab.
@@ -192,14 +279,147 @@
return 1
-/obj/item/weapon/grab/attack(mob/M, mob/user)
+/obj/item/weapon/grab/attack(mob/M, mob/living/user)
if(!affecting)
return
- if(M == affecting)
- s_click(hud)
+ if(world.time < (last_action + 20))
return
+ if(M == affecting)
+ if(ishuman(M))
+ last_action = world.time
+ var/hit_zone = assailant.zone_sel.selecting
+ flick(hud.icon_state, hud)
+ switch(assailant.a_intent)
+ if(I_HELP)
+ if(force_down)
+ assailant << "You are no longer pinning [affecting] to the ground."
+ force_down = 0
+ return
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/external/E = H.get_organ(hit_zone)
+ if(E && !(E.status & ORGAN_DESTROYED))
+ assailant.visible_message("[assailant] starts inspecting [affecting]'s [E.name] carefully.")
+ if(do_mob(assailant,H, 10))
+ if(E.wounds.len)
+ assailant << "You find [E.get_wounds_desc()]"
+ else
+ assailant << "You find no visible wounds."
+ else
+ assailant << "You must stand still to inspect [E] for wounds."
+ assailant << "Checking bones now..."
+ if(do_mob(assailant, H, 20))
+ if(E.status & ORGAN_BROKEN)
+ assailant << "The [E.encased ? E.encased : "bone in the [E.name]"] moves slightly when you poke it!"
+ H.custom_pain("Your [E.name] hurts where it's poked.")
+ else
+ assailant << "The [E.encased ? E.encased : "bones in the [E.name]"] seem to be fine."
+ else
+ assailant << "You must stand still to feel [E] for fractures."
+ assailant << "Checking skin now..."
+ if(do_mob(assailant, H, 10))
+ var/bad = 0
+ if(H.getToxLoss() >= 40)
+ assailant << "[H] has an unhealthy skin discoloration."
+ bad = 1
+ if(H.getOxyLoss() >= 20)
+ assailant << "[H]'s skin is unusaly pale."
+ bad = 1
+ if(E.status & ORGAN_DEAD)
+ assailant << "[E] is decaying!"
+ bad = 1
+ if(!bad)
+ assailant << "[H]'s skin is normal."
+ else
+ assailant << "You must stand still to check [H]'s skin for abnormalities."
+ else
+ assailant << "[H] is missing that bodypart."
+ if(I_GRAB)
+ if(state < GRAB_AGGRESSIVE)
+ assailant << "You require a better grab to do this."
+ return
+ var/obj/item/organ/external/organ = affecting:get_organ(check_zone(hit_zone))
+ if(!organ || organ.dislocated == -1)
+ return
+ assailant.visible_message("[assailant] [pick("bent", "twisted")] [affecting]'s [organ.name] into a jointlock!")
+ var/armor = affecting:run_armor_check(affecting, "melee")
+ if(armor < 2)
+ affecting << "You feel extreme pain!"
+ affecting.adjustHalLoss(Clamp(0, 40-affecting.halloss, 40)) //up to 40 halloss
+ return
+ if(I_HURT)
+
+ if(hit_zone == "eyes")
+ if(state < GRAB_NECK)
+ assailant << "You require a better grab to do this."
+ return
+ if((affecting:head && affecting:head.flags & HEADCOVERSEYES) || \
+ (affecting:wear_mask && affecting:wear_mask.flags & MASKCOVERSEYES) || \
+ (affecting:glasses && affecting:glasses.flags & GLASSESCOVERSEYES))
+ assailant << "You're going to need to remove the eye covering first."
+ return
+ if(!affecting.has_eyes())
+ assailant << "You cannot locate any eyes on [affecting]!"
+ return
+ assailant.visible_message("[assailant] pressed \his fingers into [affecting]'s eyes!")
+ affecting << "You experience immense pain as you feel digits being pressed into your eyes!"
+ assailant.attack_log += text("\[[time_stamp()]\] Pressed fingers into the eyes of [affecting.name] ([affecting.ckey])")
+ affecting.attack_log += text("\[[time_stamp()]\] Had fingers pressed into their eyes by [assailant.name] ([assailant.ckey])")
+ msg_admin_attack("[key_name(assailant)] has pressed his fingers into [key_name(affecting)]'s eyes.")
+ var/obj/item/organ/eyes/eyes = affecting:internal_organs_by_name["eyes"]
+ eyes.damage += rand(3,4)
+ if (eyes.damage >= eyes.min_broken_damage)
+ if(affecting.stat != 2)
+ affecting << "\red You go blind!"
+ else if(hit_zone != "head")
+ if(state < GRAB_NECK)
+ assailant << "You require a better grab to do this."
+ return
+ if(affecting:grab_joint(assailant))
+ playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
+ return
+ else
+ if(affecting.lying)
+ return
+ assailant.visible_message("[assailant] thrusts \his head into [affecting]'s skull!")
+ var/damage = 20
+ var/obj/item/clothing/hat = assailant.head
+ if(istype(hat))
+ damage += hat.force * 10
+ var/armor = affecting:run_armor_check(affecting, "melee")
+ affecting.apply_damage(damage*rand(90, 110)/100, BRUTE, "head", armor)
+ assailant.apply_damage(10*rand(90, 110)/100, BRUTE, "head", assailant:run_armor_check("head", "melee"))
+ if(!armor && prob(damage))
+ affecting.apply_effect(20, PARALYZE)
+ affecting.visible_message("[affecting] has been knocked unconscious!")
+ playsound(assailant.loc, "swing_hit", 25, 1, -1)
+ assailant.attack_log += text("\[[time_stamp()]\] Headbutted [affecting.name] ([affecting.ckey])")
+ affecting.attack_log += text("\[[time_stamp()]\] Headbutted by [assailant.name] ([assailant.ckey])")
+ msg_admin_attack("[key_name(assailant)] has headbutted [key_name(affecting)]")
+ assailant.drop_from_inventory(src)
+ src.loc = null
+ qdel(src)
+ return
+ if(I_DISARM)
+ if(state < GRAB_AGGRESSIVE)
+ assailant << "You require a better grab to do this."
+ return
+ assailant << "You start forcing [affecting] to the ground."
+ if(!force_down)
+ if(do_after(assailant, 20) && affecting)
+ assailant.visible_message("[assailant] is forcing [affecting] to the ground!")
+ force_down = 1
+ affecting.Weaken(3)
+ affecting.lying = 1
+ step_to(assailant, affecting)
+ assailant.set_dir(EAST) //face the victim
+ affecting.set_dir(SOUTH) //face up
+ return
+ else
+ assailant << "You are already pinning [affecting] to the ground."
+ return
+
if(M == assailant && state >= GRAB_AGGRESSIVE)
var/can_eat
@@ -227,8 +447,24 @@
/obj/item/weapon/grab/dropped()
- qdel(src)
+ loc = null
+ if(!destroying)
+ qdel(src)
+
+/obj/item/weapon/grab
+ var/destroying = 0
/obj/item/weapon/grab/Destroy()
+ animate(affecting, pixel_x = 0, pixel_y = 0, 4, 1, LINEAR_EASING)
+ affecting.layer = 4
+ if(affecting)
+ affecting.grabbed_by -= src
+ affecting = null
+ if(assailant)
+ if(assailant.client)
+ assailant.client.screen -= hud
+ assailant = null
qdel(hud)
+ hud = null
+ destroying = 1 // stops us calling qdel(src) on dropped()
..()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index 17def087b35..79115b61b29 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -104,7 +104,11 @@
return 0
/mob/living/carbon/human/isSynthetic()
- return species.flags & IS_SYNTHETIC
+ // If they are 100% robotic, they count as synthetic.
+ for(var/obj/item/organ/external/E in organs)
+ if(!(E.status & ORGAN_ROBOT))
+ return 0
+ return 1
/mob/living/silicon/isSynthetic()
return 1
diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm
index b894bac182c..3cffc1a57a2 100644
--- a/code/modules/mob/mob_movement.dm
+++ b/code/modules/mob/mob_movement.dm
@@ -343,6 +343,13 @@
else
. = mob.SelfMove(n, direct)
+ for (var/obj/item/weapon/grab/G in mob)
+ if (G.state == GRAB_NECK)
+ mob.set_dir(reverse_dir[direct])
+ G.adjust_position()
+ for (var/obj/item/weapon/grab/G in mob.grabbed_by)
+ G.adjust_position()
+
moving = 0
return .
@@ -360,7 +367,7 @@
for(var/obj/item/weapon/grab/G in list(mob.l_hand, mob.r_hand))
if(G.state == GRAB_KILL) //no wandering across the station/asteroid while choking someone
mob.visible_message("[mob] lost \his tight grip on [G.affecting]'s neck!")
- G.hud.icon_state = "disarm/kill"
+ G.hud.icon_state = "kill"
G.state = GRAB_NECK
///Process_Incorpmove
diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm
index 360699b991d..0fdbaf749c1 100644
--- a/code/modules/mob/new_player/new_player.dm
+++ b/code/modules/mob/new_player/new_player.dm
@@ -5,6 +5,7 @@
var/spawning = 0//Referenced when you want to delete the new_player later on in the code.
var/totalPlayers = 0 //Player counts for the Lobby tab
var/totalPlayersReady = 0
+
universal_speak = 1
invisibility = 101
@@ -80,7 +81,7 @@
stat("Game Mode:", "[master_mode]") // Old setting for showing the game mode
if(ticker.current_state == GAME_STATE_PREGAME)
- stat("Time To Start:", "[ticker.pregame_timeleft][going ? "" : " (DELAYED)"]")
+ stat("Time To Start:", "[ticker.pregame_timeleft][round_progressing ? "" : " (DELAYED)"]")
stat("Players: [totalPlayers]", "Players Ready: [totalPlayersReady]")
totalPlayers = 0
totalPlayersReady = 0
@@ -130,6 +131,8 @@
if(client.prefs.be_random_name)
client.prefs.real_name = random_name(client.prefs.gender)
+ if(client.prefs.dummy)
+ qdel(client.prefs.dummy)
observer.real_name = client.prefs.real_name
observer.name = observer.real_name
if(!client.holder && !config.antag_hud_allowed) // For new ghosts we remove the verb from even showing up if it's not allowed.
@@ -311,7 +314,7 @@
var/mob/living/character = create_character() //creates the human and transfers vars and mind
character = job_master.EquipRank(character, rank, 1) //equips the human
UpdateFactionList(character)
- EquipCustomItems(character)
+ equip_custom_items(character)
// AIs don't need a spawnpoint, they must spawn at an empty core
if(character.mind.assigned_role == "AI")
@@ -449,7 +452,8 @@
client.prefs.randomize_appearance_for(new_character)
else
client.prefs.copy_to(new_character)
-
+ if(client.prefs.dummy)
+ qdel(client.prefs.dummy)
src << sound(null, repeat = 0, wait = 0, volume = 85, channel = 1) // MAD JAMS cant last forever yo
if(mind)
@@ -527,3 +531,6 @@
/mob/new_player/hear_radio(var/message, var/verb="says", var/datum/language/language=null, var/part_a, var/part_b, var/mob/speaker = null, var/hard_to_hear = 0)
return
+
+mob/new_player/MayRespawn()
+ return 1
diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm
index 00b6a3b8e4a..dbabfc5917d 100644
--- a/code/modules/mob/new_player/preferences_setup.dm
+++ b/code/modules/mob/new_player/preferences_setup.dm
@@ -178,519 +178,44 @@ datum/preferences
b_skin = blue
- proc/update_preview_icon() //seriously. This is horrendous.
- qdel(preview_icon_front)
- qdel(preview_icon_side)
- qdel(preview_icon)
+ proc/update_preview_icon() //seriously. This is horrendous. //less so now
+ if(!dummy)
+ dummy = new(null, species)
+ dummy.set_species(species)
+ dummy.flags |= GODMODE
+ copy_to(dummy)
+ for (var/obj/item/I in dummy)
+ dummy.drop_from_inventory(I)
+ if(I.loc != dummy)
+ qdel(I)
+ var/jobflag
+ var/dept
+ if(job_civilian_high)
+ jobflag = job_civilian_high
+ dept = CIVILIAN
+ else if (job_medsci_high)
+ jobflag = job_medsci_high
+ dept = MEDSCI
+ else if (job_engsec_high)
+ jobflag = job_engsec_high
+ dept = ENGSEC
- var/g = "m"
- if(gender == FEMALE) g = "f"
-
- var/icon/icobase
- var/datum/species/current_species = all_species[species]
-
- if(current_species)
- icobase = current_species.icobase
- else
- icobase = 'icons/mob/human_races/r_human.dmi'
-
- preview_icon = new /icon(icobase, "torso_[g]")
- preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY)
- preview_icon.Blend(new /icon(icobase, "head_[g]"), ICON_OVERLAY)
-
- for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand"))
- if(organ_data[name] == "amputated") continue
- if(organ_data[name] == "cyborg")
- var/datum/robolimb/R
- if(rlimb_data[name]) R = all_robolimbs[rlimb_data[name]]
- if(!R) R = basic_robolimb
- preview_icon.Blend(icon(R.icon, "[name]"), ICON_OVERLAY) // This doesn't check gendered_icon. Not an issue while only limbs can be robotic.
- continue
- preview_icon.Blend(new /icon(icobase, "[name]"), ICON_OVERLAY)
-
- //Tail
- if(current_species && (current_species.tail))
- var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s")
- preview_icon.Blend(temp, ICON_OVERLAY)
-
- // Skin color
- if(current_species && (current_species.flags & HAS_SKIN_COLOR))
- preview_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD)
-
- // Skin tone
- if(current_species && (current_species.flags & HAS_SKIN_TONE))
- if (s_tone >= 0)
- preview_icon.Blend(rgb(s_tone, s_tone, s_tone), ICON_ADD)
- else
- preview_icon.Blend(rgb(-s_tone, -s_tone, -s_tone), ICON_SUBTRACT)
-
- var/icon/eyes_s = new/icon("icon" = 'icons/mob/human_face.dmi', "icon_state" = current_species ? current_species.eyes : "eyes_s")
- if ((current_species && (current_species.flags & HAS_EYE_COLOR)))
- eyes_s.Blend(rgb(r_eyes, g_eyes, b_eyes), ICON_ADD)
-
- var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
- if(hair_style)
- var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
- hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
- eyes_s.Blend(hair_s, ICON_OVERLAY)
-
- var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
- if(facial_hair_style)
- var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
- facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
- eyes_s.Blend(facial_s, ICON_OVERLAY)
-
- var/icon/underwear_s = null
- if(underwear && current_species.flags & HAS_UNDERWEAR)
- underwear_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = underwear)
-
- var/icon/undershirt_s = null
- if(undershirt && current_species.flags & HAS_UNDERWEAR)
- undershirt_s = new/icon("icon" = 'icons/mob/human.dmi', "icon_state" = undershirt)
-
- var/icon/clothes_s = null
- if(job_civilian_low & ASSISTANT)//This gives the preview icon clothes depending on which job(if any) is set to 'high'
- clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- if(backbag == 2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- else if(backbag == 3 || backbag == 4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
-
- else if(job_civilian_high)//I hate how this looks, but there's no reason to go through this switch if it's empty
- switch(job_civilian_high)
- if(HOP)
- clothes_s = new /icon('icons/mob/uniform.dmi', "hop_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "ianshirt"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(BARTENDER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "ba_suit_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "tophat"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(BOTANIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "hydroponics_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "ggloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apron"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "nymph"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-hyd"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CHEF)
- clothes_s = new /icon('icons/mob/uniform.dmi', "chef_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "chefhat"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "apronchef"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(JANITOR)
- clothes_s = new /icon('icons/mob/uniform.dmi', "janitor_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_janitor"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(LIBRARIAN)
- clothes_s = new /icon('icons/mob/uniform.dmi', "red_suit_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "hairflower"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(QUARTERMASTER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "qm_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "poncho"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CARGOTECH)
- clothes_s = new /icon('icons/mob/uniform.dmi', "cargotech_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "flat_cap"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(MINER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "miner_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "bearpelt"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(LAWYER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "internalaffairs_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "briefcase"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suitjacket_blue"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CHAPLAIN)
- clothes_s = new /icon('icons/mob/uniform.dmi', "chapblack_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "imperium_monk"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CLOWN)
- clothes_s = new /icon('icons/mob/uniform.dmi', "clown_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "clown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/mask.dmi', "clown"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "clownpack"), ICON_OVERLAY)
- if(MIME)
- clothes_s = new /icon('icons/mob/uniform.dmi', "mime_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "lgloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/mask.dmi', "mime"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "beret"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "suspenders"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
-
- else if(job_medsci_high)
- switch(job_medsci_high)
- if(RD)
- clothes_s = new /icon('icons/mob/uniform.dmi', "director_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "petehat"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(SCIENTIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(XENOBIOLOGIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "sciencewhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_tox_open"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "metroid"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-tox"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CHEMIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "chemistrywhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labgreen"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_chem_open"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-chem"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CMO)
- clothes_s = new /icon('icons/mob/uniform.dmi', "cmo_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "bio_cmo"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_cmo_open"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(DOCTOR)
- clothes_s = new /icon('icons/mob/uniform.dmi', "medical_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "surgeon"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-med"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(GENETICIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "geneticswhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "monkeysuit"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_gen_open"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-gen"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(VIROLOGIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "virologywhite_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "white"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/mask.dmi', "sterile"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_vir_open"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "plaguedoctor"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "medicalpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-vir"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(ROBOTICIST)
- clothes_s = new /icon('icons/mob/uniform.dmi', "robotics_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "labcoat_open"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "toolbox_blue"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
-
- else if(job_engsec_high)
- switch(job_engsec_high)
- if(CAPTAIN)
- clothes_s = new /icon('icons/mob/uniform.dmi', "captain_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "centcomcaptain"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "captain"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-cap"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(HOS)
- clothes_s = new /icon('icons/mob/uniform.dmi', "hosred_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "hosberet"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(WARDEN)
- clothes_s = new /icon('icons/mob/uniform.dmi', "warden_s")
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "slippers_worn"), ICON_OVERLAY)
- else
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(DETECTIVE)
- clothes_s = new /icon('icons/mob/uniform.dmi', "detective_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/mask.dmi', "cigaron"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "detective"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "detective"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(OFFICER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "secred_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "jackboots"), ICON_UNDERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "officerberet"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "securitypack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-sec"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CHIEF)
- clothes_s = new /icon('icons/mob/uniform.dmi', "chief_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "brown"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_white"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon(INV_R_HAND_DEF_ICON, "blueprints"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(ENGINEER)
- clothes_s = new /icon('icons/mob/uniform.dmi', "engine_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "orange"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "hazard"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "engiepack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-eng"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(ATMOSTECH)
- clothes_s = new /icon('icons/mob/uniform.dmi', "atmos_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/hands.dmi', "bgloves"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/belt.dmi', "utility"), ICON_OVERLAY)
- if(prob(1))
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "firesuit"), ICON_OVERLAY)
- switch(backbag)
- if(2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- if(3)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel-norm"), ICON_OVERLAY)
- if(4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
-
- if(AI)//Gives AI and borgs assistant-wear, so they can still customize their character
- clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "straight_jacket"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY)
- if(backbag == 2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- else if(backbag == 3 || backbag == 4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
- if(CYBORG)
- clothes_s = new /icon('icons/mob/uniform.dmi', "grey_s")
- clothes_s.Blend(new /icon('icons/mob/feet.dmi', "black"), ICON_UNDERLAY)
- clothes_s.Blend(new /icon('icons/mob/suit.dmi', "cardborg"), ICON_OVERLAY)
- clothes_s.Blend(new /icon('icons/mob/head.dmi', "cardborg_h"), ICON_OVERLAY)
- if(backbag == 2)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "backpack"), ICON_OVERLAY)
- else if(backbag == 3 || backbag == 4)
- clothes_s.Blend(new /icon('icons/mob/back.dmi', "satchel"), ICON_OVERLAY)
-
- if(disabilities & NEARSIGHTED)
- preview_icon.Blend(new /icon('icons/mob/eyes.dmi', "glasses"), ICON_OVERLAY)
-
- preview_icon.Blend(eyes_s, ICON_OVERLAY)
- if(underwear_s)
- preview_icon.Blend(underwear_s, ICON_OVERLAY)
- if(undershirt_s)
- preview_icon.Blend(undershirt_s, ICON_OVERLAY)
- if(clothes_s)
- preview_icon.Blend(clothes_s, ICON_OVERLAY)
+ if(jobflag && dept && job_master)
+ for (var/datum/job/J in job_master.occupations)
+ if((J.department_flag & dept) && (J.flag & jobflag))
+ var/alt = GetPlayerAltTitle(J)
+ if(alt) //more hacks
+ if(!dummy.mind)
+ dummy.mind = new
+ dummy.mind.role_alt_title = alt
+ J.equip_preview(dummy)
+ break
+ dummy.update_eyes()
+ dummy.force_update_limbs()
+ dummy.regenerate_icons()
+ preview_icon = icon(dummy.icon)
+ for(var/image/I in dummy.overlays_standing)
+ if(I && I.icon)
+ preview_icon.Blend(icon(I.icon, I.icon_state), ICON_OVERLAY)
preview_icon_front = new(preview_icon, dir = SOUTH)
- preview_icon_side = new(preview_icon, dir = WEST)
-
- qdel(eyes_s)
- qdel(underwear_s)
- qdel(undershirt_s)
- qdel(clothes_s)
+ preview_icon_side = new(preview_icon, dir = WEST)
\ No newline at end of file
diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm
index c0a7fbce3c5..1f7220f6995 100644
--- a/code/modules/mob/transform_procs.dm
+++ b/code/modules/mob/transform_procs.dm
@@ -106,7 +106,8 @@
O.add_ai_verbs()
O.rename_self("ai",1)
- qdel(src)
+ spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned
+ qdel(src)
return O
//human -> robot
@@ -158,7 +159,8 @@
callHook("borgify", list(O))
O.Namepick()
- qdel(src)
+ spawn(0) // Mobs still instantly del themselves, thus we need to spawn or O will never be returned
+ qdel(src)
return O
//human -> alien
diff --git a/code/modules/mob/typing_indicator.dm b/code/modules/mob/typing_indicator.dm
index 203159f3c68..147edb1afe3 100644
--- a/code/modules/mob/typing_indicator.dm
+++ b/code/modules/mob/typing_indicator.dm
@@ -5,14 +5,17 @@ mob/var/typing
mob/var/last_typed
mob/var/last_typed_time
-var/global/image/typing_indicator
+mob/var/obj/effect/decal/typing_indicator
/mob/proc/set_typing_indicator(var/state)
if(!typing_indicator)
- typing_indicator = image('icons/mob/talk.dmi',null,"typing")
+ typing_indicator = new
+ typing_indicator.icon = 'icons/mob/talk.dmi'
+ typing_indicator.icon_state = "typing"
- if(client)
+ if(client && !stat)
+ typing_indicator.invisibility = invisibility
if(client.prefs.toggles & SHOW_TYPING)
overlays -= typing_indicator
else
diff --git a/code/modules/nano/JSON Writer.dm b/code/modules/nano/JSON Writer.dm
index 65b9d99eb05..97acc0b2ccb 100644
--- a/code/modules/nano/JSON Writer.dm
+++ b/code/modules/nano/JSON Writer.dm
@@ -1,7 +1,12 @@
-
json_writer
+ var
+ use_cache = 0
+
proc
- WriteObject(list/L, cached_data = null)
+ WriteObject(list/L)
+ if(use_cache && L["__json_cache"])
+ return L["__json_cache"]
+
. = "{"
var/i = 1
for(var/k in L)
@@ -9,13 +14,11 @@ json_writer
. += {"\"[k]\":[write(val)]"}
if(i++ < L.len)
. += ","
- if(cached_data)
- . = copytext(., 1, lentext(.)) + ",\"cached\":[cached_data]}"
. += "}"
write(val)
if(isnum(val))
- return num2text(val, 100)
+ return num2text(val)
else if(isnull(val))
return "null"
else if(istype(val, /list))
@@ -35,27 +38,21 @@ json_writer
. += "]"
write_string(txt)
- var/static/list/json_escape = list("\\", "\"", "'", "\n")
+ var/static/list/json_escape = list("\\" = "\\\\", "\"" = "\\\"", "\n" = "\\n")
for(var/targ in json_escape)
var/start = 1
while(start <= lentext(txt))
var/i = findtext(txt, targ, start)
if(!i)
break
- if(targ == "\n")
- txt = copytext(txt, 1, i) + "\\n" + copytext(txt, i+2)
- start = i + 1 // 1 character added
- if(targ == "'")
- txt = copytext(txt, 1, i) + "`" + copytext(txt, i+1) // apostrophies fuck shit up...
- start = i + 1 // 1 character added
- else
- txt = copytext(txt, 1, i) + "\\" + copytext(txt, i)
- start = i + 2 // 2 characters added
+ var/lrep = length(json_escape[targ])
+ txt = copytext(txt, 1, i) + json_escape[targ] + copytext(txt, i + length(targ))
+ start = i + lrep
return {""[txt]""}
is_associative(list/L)
for(var/key in L)
// if the key is a list that means it's actually an array of lists (stupid Byond...)
- if(!isnum(key) && !istype(key, /list))
+ if(!isnum(key) && !isnull(L[key]) && !istype(key, /list))
return TRUE
diff --git a/code/modules/nano/_JSON.dm b/code/modules/nano/_JSON.dm
index 4f70e6e664a..95791899817 100644
--- a/code/modules/nano/_JSON.dm
+++ b/code/modules/nano/_JSON.dm
@@ -7,6 +7,11 @@ proc
var/static/json_reader/_jsonr = new()
return _jsonr.ReadObject(_jsonr.ScanJson(json))
- list2json(list/L, var/cached_data = null)
+ list2json(list/L)
var/static/json_writer/_jsonw = new()
- return _jsonw.WriteObject(L, cached_data)
+ return _jsonw.write(L)
+
+ list2json_usecache(list/L)
+ var/static/json_writer/_jsonw = new()
+ _jsonw.use_cache = 1
+ return _jsonw.write(L)
diff --git a/code/modules/nano/interaction/inventory_deep.dm b/code/modules/nano/interaction/inventory_deep.dm
new file mode 100644
index 00000000000..9637c4df751
--- /dev/null
+++ b/code/modules/nano/interaction/inventory_deep.dm
@@ -0,0 +1,10 @@
+/*
+ This state checks if src_object is contained anywhere in the user's inventory, including bags, etc.
+*/
+/var/global/datum/topic_state/deep_inventory_state/deep_inventory_state = new()
+
+/datum/topic_state/deep_inventory_state/can_use_topic(var/src_object, var/mob/user)
+ if(!user.contains(src_object))
+ return STATUS_CLOSE
+
+ return user.shared_nano_interaction()
diff --git a/code/modules/nano/modules/law_manager.dm b/code/modules/nano/modules/law_manager.dm
index 7cdd93b4dcf..98c2cdc9054 100644
--- a/code/modules/nano/modules/law_manager.dm
+++ b/code/modules/nano/modules/law_manager.dm
@@ -34,10 +34,7 @@
return 1
if(href_list["set_view"])
- if(is_malf(usr) || owner.is_ai_malf())
- current_view = text2num(href_list["set_view"])
- else
- current_view = 0
+ current_view = text2num(href_list["set_view"])
return 1
if(href_list["law_channel"])
@@ -147,7 +144,7 @@
R << "Law Notice"
R.laws.show_laws(R)
if(usr != owner)
- usr << "Laws displayed."
return 1
return 0
@@ -170,12 +167,8 @@
data["isAI"] = owner.isAI()
data["isMalf"] = is_malf(user)
- data["isAIMalf"] = owner.is_ai_malf()
data["isSlaved"] = owner.is_slaved()
data["isAdmin"] = is_admin(user)
-
- if(!(data["isMalf"] || data["isAIMalf"]))
- current_view = 0
data["view"] = current_view
var/channels[0]
@@ -183,9 +176,7 @@
channels[++channels.len] = list("channel" = ch_name)
data["channel"] = owner.lawchannel
data["channels"] = channels
-
- if(data["isMalf"] || data["isAIMalf"])
- data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
+ data["law_sets"] = package_multiple_laws(data["isAdmin"] ? admin_laws : player_laws)
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
@@ -216,15 +207,6 @@
/obj/nano_module/law_manager/proc/is_malf(var/mob/user)
return (is_admin(user) && !owner.is_slaved()) || owner.is_malf_or_traitor()
-/mob/living/silicon/proc/is_ai_malf()
- return 0
-
-/mob/living/silicon/robot/is_ai_malf()
- return is_slaved() && connected_ai.is_malf_or_traitor()
-
-/mob/living/silicon/ai/is_ai_malf()
- return 0
-
/mob/living/silicon/proc/is_slaved()
return 0
diff --git a/code/modules/nano/nanomanager.dm b/code/modules/nano/nanomanager.dm
index 2a89779e929..f6325fd4f71 100644
--- a/code/modules/nano/nanomanager.dm
+++ b/code/modules/nano/nanomanager.dm
@@ -55,8 +55,9 @@
ui.push_data(data)
return ui
else
- //testing("nanomanager/try_update_ui mob [user.name] [src_object:name] [ui_key] [force_open] - forcing opening of ui")
- ui.close()
+ ui.reinitialise(new_initial_data=data)
+ return ui
+
return null
/**
@@ -164,10 +165,10 @@
else if (isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
open_uis[src_object_key][ui.ui_key] = list();
- ui.user.open_uis.Add(ui)
+ ui.user.open_uis |= ui
var/list/uis = open_uis[src_object_key][ui.ui_key]
- uis.Add(ui)
- processing_uis.Add(ui)
+ uis |= ui
+ processing_uis |= ui
//testing("nanomanager/ui_opened mob [ui.user.name] [ui.src_object:name] [ui.ui_key] - user.open_uis [ui.user.open_uis.len] | uis [uis.len] | processing_uis [processing_uis.len]")
/**
@@ -220,7 +221,7 @@
*/
/datum/nanomanager/proc/user_transferred(var/mob/oldMob, var/mob/newMob)
//testing("nanomanager/user_transferred from mob [oldMob.name] to mob [newMob.name]")
- if (!oldMob || isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0)
+ if (!oldMob || isnull(oldMob.open_uis) || !istype(oldMob.open_uis, /list) || open_uis.len == 0)
//testing("nanomanager/user_transferred mob [oldMob.name] has no open uis")
return 0 // has no open uis
diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm
index ffc6208f39e..f134d5d93b4 100644
--- a/code/modules/nano/nanoui.dm
+++ b/code/modules/nano/nanoui.dm
@@ -57,8 +57,6 @@ nanoui is used to open and update nano browser uis
var/list/datum/nanoui/children = list()
var/datum/topic_state/state = null
- var/cached_data = null
-
/**
* Create a new nanoui instance.
*
@@ -349,7 +347,7 @@ nanoui is used to open and update nano browser uis
template_data_json = list2json(templates)
var/list/send_data = get_send_data(initial_data)
- var/initial_data_json = list2json(send_data, cached_data)
+ var/initial_data_json = replacetext(list2json_usecache(send_data), "'", "'")
var/url_parameters_json = list2json(list("src" = "\ref[src]"))
@@ -407,6 +405,18 @@ nanoui is used to open and update nano browser uis
//onclose(user, window_id)
nanomanager.ui_opened(src)
+ /**
+ * Reinitialise this UI, potentially with a different template and/or initial data
+ *
+ * @return nothing
+ */
+/datum/nanoui/proc/reinitialise(template, new_initial_data)
+ if(template)
+ add_template("main", template)
+ if(new_initial_data)
+ set_initial_data(new_initial_data)
+ open()
+
/**
* Close this UI
*
@@ -432,19 +442,6 @@ nanoui is used to open and update nano browser uis
winset(user, window_id, "on-close=\"nanoclose [params]\"")
-/**
- * Appends already processed json txt to the list2json proc when setting initial-data and data pushes
- * Used for data that is fucking huge like manifests and camera lists that doesn't change often.
- * And we only want to process them when they change.
- * Fuck javascript
- *
- * @return nothing
- */
-/datum/nanoui/proc/load_cached_data(var/data)
- cached_data = data
- return
-
-
/**
* Push data to an already open UI window
*
@@ -458,7 +455,7 @@ nanoui is used to open and update nano browser uis
var/list/send_data = get_send_data(data)
//user << list2json(data) // used for debugging
- user << output(list2params(list(list2json(send_data,cached_data))),"[window_id].browser:receiveUpdateData")
+ user << output(list2params(list(list2json_usecache(send_data))),"[window_id].browser:receiveUpdateData")
/**
* This Topic() proc is called whenever a user clicks on a link within a Nano UI
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 6cd162b50af..70c2281bb30 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -55,12 +55,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
break
B.volume += 0.1 // regenerate blood VERY slowly
- if (reagents.has_reagent("nutriment")) //Getting food speeds it up
- B.volume += 0.4
- reagents.remove_reagent("nutriment", 0.1)
- if (reagents.has_reagent("iron")) //Hematogen candy anyone?
- B.volume += 0.8
- reagents.remove_reagent("iron", 0.1)
+ if(CE_BLOODRESTORE in chem_effects)
+ B.volume += chem_effects[CE_BLOODRESTORE]
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
@@ -200,9 +196,8 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
vessel.remove_reagent("blood",amount) // Removes blood if human
//Transfers blood from container ot vessels
-/mob/living/carbon/proc/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
- var/datum/reagent/blood/injected = get_blood(container.reagents)
- if (!injected)
+/mob/living/carbon/proc/inject_blood(var/datum/reagent/blood/injected, var/amount)
+ if (!injected || !istype(injected))
return
var/list/sniffles = virus_copylist(injected.data["virus2"])
for(var/ID in sniffles)
@@ -216,14 +211,10 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
src.reagents.add_reagent(C, (text2num(chems[C]) / 560) * amount)//adds trace chemicals to owner's blood
reagents.update_total()
- container.reagents.remove_reagent("blood", amount)
+//Transfers blood from reagents to vessel, respecting blood types compatability.
+/mob/living/carbon/human/inject_blood(var/datum/reagent/blood/injected, var/amount)
-//Transfers blood from container ot vessels, respecting blood types compatability.
-/mob/living/carbon/human/inject_blood(obj/item/weapon/reagent_containers/container, var/amount)
-
- var/datum/reagent/blood/injected = get_blood(container.reagents)
-
- if(species && species.flags & NO_BLOOD)
+ if(species.flags & NO_BLOOD)
reagents.add_reagent("blood", amount, injected.data)
reagents.update_total()
return
diff --git a/code/modules/organs/misc.dm b/code/modules/organs/misc.dm
new file mode 100644
index 00000000000..a330e307a38
--- /dev/null
+++ b/code/modules/organs/misc.dm
@@ -0,0 +1,70 @@
+//CORTICAL BORER ORGANS.
+/obj/item/organ/borer/process()
+
+ // Borer husks regenerate health, feel no pain, and are resistant to stuns and brainloss.
+ for(var/chem in list("tricordrazine","tramadol","hyperzine","alkysine"))
+ if(owner.reagents.get_reagent_amount(chem) < 3)
+ owner.reagents.add_reagent(chem, 5)
+
+ // They're also super gross and ooze ichor.
+ if(prob(5))
+ var/mob/living/carbon/human/H = owner
+ if(!istype(H))
+ return
+
+ var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list
+ blood_splatter(H,B,1)
+ var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner)
+ if(goo)
+ goo.name = "husk ichor"
+ goo.desc = "It's thick and stinks of decay."
+ goo.basecolor = "#412464"
+ goo.update_icon()
+
+/obj/item/organ/borer
+ name = "cortical borer"
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "borer"
+ organ_tag = "brain"
+ desc = "A disgusting space slug."
+ parent_organ = "head"
+ vital = 1
+
+/obj/item/organ/borer/removed(var/mob/living/user)
+
+ ..()
+
+ var/mob/living/simple_animal/borer/B = owner.has_brain_worms()
+ if(B)
+ B.leave_host()
+ B.ckey = owner.ckey
+
+ spawn(0)
+ qdel(src)
+
+//VOX ORGANS.
+/obj/item/organ/stack
+ name = "cortical stack"
+ parent_organ = "head"
+ robotic = 2
+ vital = 1
+ var/backup_time = 0
+ var/datum/mind/backup
+
+/obj/item/organ/stack/process()
+ if(owner && owner.stat != DEAD && !is_broken())
+ backup_time = world.time
+ if(owner.mind) backup = owner.mind
+
+/obj/item/organ/stack/vox
+
+/obj/item/organ/stack/vox/stack
+
+/obj/item/organ/stack
+ name = "cortical stack"
+ icon_state = "brain-prosthetic"
+ organ_tag = "stack"
+ robotic = 2
+
+/obj/item/organ/stack/vox
+ name = "vox cortical stack"
diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm
index 06dd521f64e..d725937f08a 100644
--- a/code/modules/organs/organ.dm
+++ b/code/modules/organs/organ.dm
@@ -23,6 +23,8 @@ var/list/organ_cache = list()
var/list/trace_chemicals = list() // traces of chemicals in the organ,
// links chemical IDs to number of ticks for which they'll stay in the blood
germ_level = 0
+ var/datum/dna/dna
+ var/datum/species/species
/obj/item/organ/proc/update_health()
return
@@ -34,6 +36,12 @@ var/list/organ_cache = list()
max_damage = min_broken_damage * 2
if(istype(holder))
src.owner = holder
+ species = all_species["Human"]
+ if(holder.dna)
+ dna = holder.dna.Clone()
+ species = all_species[dna.species]
+ else
+ log_debug("[src] at [loc] spawned without a proper DNA.")
var/mob/living/carbon/human/H = holder
if(istype(H))
if(internal)
@@ -42,10 +50,10 @@ var/list/organ_cache = list()
if(E.internal_organs == null)
E.internal_organs = list()
E.internal_organs |= src
- if(H.dna)
+ if(dna)
if(!blood_DNA)
blood_DNA = list()
- blood_DNA[H.dna.unique_enzymes] = H.dna.b_type
+ blood_DNA[dna.unique_enzymes] = dna.b_type
if(internal)
holder.internal_organs |= src
@@ -53,31 +61,40 @@ var/list/organ_cache = list()
if(status & ORGAN_ROBOT)
return
damage = max_damage
+ status |= ORGAN_DEAD
processing_objects -= src
if(dead_icon)
icon_state = dead_icon
+ if(owner && vital)
+ owner.death()
/obj/item/organ/process()
- // Don't process if we're in a freezer, an MMI or a stasis bag. //TODO: ambient temperature?
- if(istype(loc,/obj/item/device/mmi) || istype(loc,/obj/item/bodybag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer))
- return
-
- //Process infections
- if (robotic >= 2 || (owner && owner.species && (owner.species.flags & IS_PLANT)))
- germ_level = 0
- return
-
if(loc != owner)
owner = null
+ //dead already, no need for more processing
+ if(status & ORGAN_DEAD)
+ return
+ // Don't process if we're in a freezer, an MMI or a stasis bag.or a freezer or something I dunno
+ if(istype(loc,/obj/item/device/mmi))
+ return
+ if(istype(loc,/obj/structure/closet/body_bag/cryobag) || istype(loc,/obj/structure/closet/crate/freezer) || istype(loc,/obj/item/weapon/storage/box/freezer))
+ return
+ //Process infections
+ if ((status & ORGAN_ROBOT) || (owner && owner.species && (owner.species.flags & IS_PLANT)))
+ germ_level = 0
+ return
+
if(!owner)
var/datum/reagent/blood/B = locate(/datum/reagent/blood) in reagents.reagent_list
if(B && prob(40))
reagents.remove_reagent("blood",0.1)
blood_splatter(src,B,1)
- damage += rand(1,3)
- if(damage >= max_damage)
+ germ_level += rand(2,6)
+ if(germ_level >= INFECTION_LEVEL_TWO)
+ germ_level += rand(2,6)
+ if(germ_level >= INFECTION_LEVEL_THREE)
die()
else if(owner.bodytemperature >= 170) //cryo stops germs from moving and doing their bad stuffs
@@ -86,6 +103,15 @@ var/list/organ_cache = list()
handle_rejection()
handle_germ_effects()
+ //check if we've hit max_damage
+ if(damage >= max_damage)
+ die()
+
+/obj/item/organ/examine(mob/user)
+ ..(user)
+ if(status & ORGAN_DEAD)
+ user << "The decay has set in."
+
/obj/item/organ/proc/handle_germ_effects()
//** Handle the effects of infections
var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin")
@@ -114,24 +140,23 @@ var/list/organ_cache = list()
/obj/item/organ/proc/handle_rejection()
// Process unsuitable transplants. TODO: consider some kind of
// immunosuppressant that changes transplant data to make it match.
- if(transplant_data)
- if(!rejecting && prob(20) && owner.dna && blood_incompatible(transplant_data["blood_type"],owner.dna.b_type,owner.species,transplant_data["species"]))
- rejecting = 1
+ if(dna)
+ if(!rejecting)
+ if(blood_incompatible(dna.b_type, owner.dna.b_type, species, owner.species))
+ rejecting = 1
else
rejecting++ //Rejection severity increases over time.
if(rejecting % 10 == 0) //Only fire every ten rejection ticks.
switch(rejecting)
if(1 to 50)
- take_damage(1)
+ germ_level++
if(51 to 200)
- owner.reagents.add_reagent("toxin", 1)
- take_damage(1)
+ germ_level += rand(1,2)
if(201 to 500)
- take_damage(rand(2,3))
- owner.reagents.add_reagent("toxin", 2)
+ germ_level += rand(2,3)
if(501 to INFINITY)
- take_damage(4)
- owner.reagents.add_reagent("toxin", rand(3,5))
+ germ_level += rand(3,5)
+ owner.reagents.add_reagent("toxin", rand(1,2))
/obj/item/organ/proc/receive_chem(chemical as obj)
return 0
@@ -175,15 +200,16 @@ var/list/organ_cache = list()
W.time_inflicted = world.time
/obj/item/organ/proc/take_damage(amount, var/silent=0)
- if(src.robotic == 2)
+ if(src.status & ORGAN_ROBOT)
src.damage += (amount * 0.8)
else
src.damage += amount
- if(owner && parent_organ)
- var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
- if(parent && !silent)
- owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
+ //only show this if the organ is not robotic
+ if(owner && parent_organ)
+ var/obj/item/organ/external/parent = owner.get_organ(parent_organ)
+ if(parent && !silent)
+ owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1)
/obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc
robotic = 2
@@ -191,7 +217,6 @@ var/list/organ_cache = list()
src.status &= ~ORGAN_BLEEDING
src.status &= ~ORGAN_SPLINTED
src.status &= ~ORGAN_CUT_AWAY
- src.status &= ~ORGAN_ATTACHABLE
src.status &= ~ORGAN_DESTROYED
src.status |= ORGAN_ROBOT
src.status |= ORGAN_ASSISTED
@@ -204,31 +229,17 @@ var/list/organ_cache = list()
min_broken_damage = 35
/obj/item/organ/emp_act(severity)
- switch(robotic)
- if(0)
+ if(!(status & ORGAN_ROBOT))
+ return
+ switch (severity)
+ if (1.0)
+ take_damage(0,20)
return
- if(1)
- switch (severity)
- if (1.0)
- take_damage(20,0)
- return
- if (2.0)
- take_damage(7,0)
- return
- if(3.0)
- take_damage(3,0)
- return
- if(2)
- switch (severity)
- if (1.0)
- take_damage(40,0)
- return
- if (2.0)
- take_damage(15,0)
- return
- if(3.0)
- take_damage(10,0)
- return
+ if (2.0)
+ take_damage(0,7)
+ return
+ if(3.0)
+ take_damage(0,3)
/obj/item/organ/proc/removed(var/mob/living/user)
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 4bf7b9c99e0..3dd37a3b5e4 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -8,6 +8,9 @@
dir = SOUTH
organ_tag = "limb"
+ var/brute_mod = 1
+ var/burn_mod = 1
+
var/icon_name = null
var/body_part = null
var/icon_position = 0
@@ -48,6 +51,36 @@
var/can_grasp
var/can_stand
+/obj/item/organ/external/attack_self(var/mob/user)
+ if(!contents.len)
+ return ..()
+ var/list/removable_objects = list()
+ for(var/obj/item/organ/external/E in (contents + src))
+ if(!istype(E))
+ continue
+ for(var/obj/item/I in E.contents)
+ if(istype(I,/obj/item/organ))
+ continue
+ removable_objects |= I
+ if(!removable_objects.len)
+ return ..()
+ var/obj/item/I = pick(removable_objects)
+ if(!istype(I))
+ return ..()
+ I.loc = get_turf(user)
+ if(!(user.l_hand && user.r_hand))
+ user.put_in_hands(I)
+ user.visible_message("\The [user] rips \the [I] out of \the [src]!")
+
+/obj/item/organ/external/examine()
+ ..()
+ if(in_range(usr, src) || istype(usr, /mob/dead/observer))
+ for(var/obj/item/I in contents)
+ if(istype(I, /obj/item/organ))
+ continue
+ usr << "There is \a [I] sticking out of it."
+ return
+
/obj/item/organ/external/attackby(obj/item/weapon/W as obj, mob/user as mob)
switch(stage)
if(0)
@@ -134,32 +167,30 @@
parent.children = list()
parent.children.Add(src)
+/obj/item/organ/external/robotize()
+ ..()
+ //robit limbs take reduced damage
+ brute_mod = 0.8
+ burn_mod = 0.8
+
/****************************************************
DAMAGE PROCS
****************************************************/
+/obj/item/organ/external/proc/is_damageable(var/additional_damage = 0)
+ return (vital || brute_dam + burn_dam + additional_damage < max_damage)
+
/obj/item/organ/external/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
if((brute <= 0) && (burn <= 0))
return 0
-
if(status & ORGAN_DESTROYED)
return 0
- if(status & ORGAN_ROBOT )
- var/brmod = 0.66
- var/bumod = 0.66
-
- if(istype(owner,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = owner
- if(H.species && H.species.flags & IS_SYNTHETIC)
- brmod = H.species.brute_mod
- bumod = H.species.burn_mod
-
- brute *= brmod //~2/3 damage for ROBOLIMBS
- burn *= bumod //~2/3 damage for ROBOLIMBS
+ brute *= brute_mod
+ burn *= burn_mod
// High brute damage or sharp objects may damage internal organs
- if(internal_organs && ((brute_dam >= max_damage) || (sharp && brute >= 5) || brute >= 10) && prob(5))
+ if(internal_organs && (brute_dam >= max_damage || (((sharp && brute >= 5) || brute >= 10) && prob(5))))
// Damage an internal organ
if(internal_organs && internal_organs.len)
var/obj/item/organ/I = pick(internal_organs)
@@ -173,8 +204,11 @@
add_autopsy_data("[used_weapon]", brute + burn)
var/can_cut = (prob(brute*2) || sharp) && !(status & ORGAN_ROBOT)
+
// If the limbs can break, make sure we don't exceed the maximum damage a limb can take before breaking
- if((brute_dam + burn_dam + brute + burn) < max_damage || !config.limbs_can_break)
+ // Non-vital organs are limited to max_damage. You can't kill someone by bludeonging their arm all the way to 200 -- you can
+ // push them faster into paincrit though, as the additional damage is converted into shock.
+ if(is_damageable(brute + burn) || !config.limbs_can_break)
if(brute)
if(can_cut)
createwound( CUT, brute )
@@ -206,7 +240,7 @@
burn = max(0, burn - can_inflict)
//If there are still hurties to dispense
if (burn || brute)
- owner.shock_stage += brute+burn
+ owner.shock_stage += (brute+burn) * config.organ_damage_spillover_multiplier
// sync the organ's damage with its wounds
src.update_damages()
@@ -222,13 +256,16 @@
droplimb(0,DROPLIMB_BURN)
if(!dropped && prob(brute))
var/edge_eligible = 0
- if(edge && istype(used_weapon,/obj/item))
- var/obj/item/W = used_weapon
- if(W.w_class >= 3)
+ if(edge)
+ if(istype(used_weapon,/obj/item))
+ var/obj/item/W = used_weapon
+ if(W.w_class >= w_class)
+ edge_eligible = 1
+ else
edge_eligible = 1
-
+
if(brute >= threshold || (edge_eligible && brute >= threshold/3))
- if((sharp || edge))
+ if(edge)
droplimb(0,DROPLIMB_EDGE)
else
droplimb(0,DROPLIMB_BLUNT)
@@ -319,10 +356,14 @@ This function completely restores a damaged organ to perfect condition.
var/datum/wound/W = pick(compatible_wounds)
W.open_wound(damage)
if(prob(25))
- //maybe have a separate message for BRUISE type damage?
- owner.visible_message("\red The wound on [owner.name]'s [name] widens with a nasty ripping noise.",\
- "\red The wound on your [name] widens with a nasty ripping noise.",\
- "You hear a nasty ripping noise, as if flesh is being torn apart.")
+ if(status & ORGAN_ROBOT)
+ owner.visible_message("\red The damage to [owner.name]'s [name] worsens.",\
+ "\red The damage to your [name] worsens.",\
+ "You hear the screech of abused metal.")
+ else
+ owner.visible_message("\red The wound on [owner.name]'s [name] widens with a nasty ripping noise.",\
+ "\red The wound on your [name] widens with a nasty ripping noise.",\
+ "You hear a nasty ripping noise, as if flesh is being torn apart.")
return
//Creating wound
@@ -351,7 +392,7 @@ This function completely restores a damaged organ to perfect condition.
//Determines if we even need to process this organ.
/obj/item/organ/external/proc/need_process()
- if(status && status != ORGAN_ROBOT) // If it's robotic, that's fine it will have a status.
+ if(status & (ORGAN_CUT_AWAY|ORGAN_BLEEDING|ORGAN_BROKEN|ORGAN_DESTROYED|ORGAN_SPLINTED|ORGAN_DEAD|ORGAN_MUTATED))
return 1
if(brute_dam || burn_dam)
return 1
@@ -366,11 +407,6 @@ This function completely restores a damaged organ to perfect condition.
/obj/item/organ/external/process()
if(owner)
- //Dismemberment
- if(status & ORGAN_DESTROYED)
- if(config.limbs_can_break)
- droplimb(0,DROPLIMB_EDGE) //Might be worth removing this check since take_damage handles it.
- return
if(parent)
if(parent.status & ORGAN_DESTROYED)
status |= ORGAN_DESTROYED
@@ -388,10 +424,6 @@ This function completely restores a damaged organ to perfect condition.
if(trace_chemicals[chemID] <= 0)
trace_chemicals.Remove(chemID)
- //Bone fractures
- if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(status & ORGAN_ROBOT))
- src.fracture()
-
if(!(status & ORGAN_BROKEN))
perma_injury = 0
@@ -562,6 +594,7 @@ Note that amputating the affected organ does in fact remove the infection from t
if(istype(owner,/mob/living/carbon/human))
H = owner
+ //update damage counts
for(var/datum/wound/W in wounds)
if(!W.internal) //so IB doesn't count towards crit/paincrit
if(W.damage_type == CUT || W.damage_type == BRUISE)
@@ -577,9 +610,13 @@ Note that amputating the affected organ does in fact remove the infection from t
number_wounds += W.amount
- if (open && !clamped && (H && !(H.species.flags & NO_BLOOD))) //things tend to bleed if they are CUT OPEN
+ //things tend to bleed if they are CUT OPEN
+ if (open && !clamped && (H && !(H.species.flags & NO_BLOOD)))
status |= ORGAN_BLEEDING
+ //Bone fractures
+ if(config.bones_can_break && brute_dam > min_broken_damage * config.organ_health_multiplier && !(status & ORGAN_ROBOT))
+ src.fracture()
// new damage icon system
// adjusted to set damage_state to brute/burn code only (without r_name0 as before)
@@ -634,20 +671,24 @@ Note that amputating the affected organ does in fact remove the infection from t
switch(disintegrate)
if(DROPLIMB_EDGE)
if(!clean)
+ var/gore_sound = "[(status & ORGAN_ROBOT) ? "tortured metal" : "ripping tendons and flesh"]"
owner.visible_message(
"\The [owner]'s [src.name] flies off in an arc!",\
"Your [src.name] goes flying off!",\
- "You hear a terrible sound of ripping tendons and flesh.")
+ "You hear a terrible sound of [gore_sound].")
if(DROPLIMB_BURN)
+ var/gore = "[(status & ORGAN_ROBOT) ? "": " of burning flesh"]"
owner.visible_message(
"\The [owner]'s [src.name] flashes away into ashes!",\
"Your [src.name] flashes away into ashes!",\
- "You hear the crackling sound of burning flesh.")
+ "You hear a crackling sound[gore].")
if(DROPLIMB_BLUNT)
+ var/gore = "[(status & ORGAN_ROBOT) ? "": " in shower of gore"]"
+ var/gore_sound = "[(status & ORGAN_ROBOT) ? "rending sound of tortured metal" : "sickening splatter of gore"]"
owner.visible_message(
- "\The [owner]'s [src.name] explodes in a shower of gore!",\
- "Your [src.name] explodes in a shower of gore!",\
- "You hear the sickening splatter of gore.")
+ "\The [owner]'s [src.name] explodes[gore]!",\
+ "Your [src.name] explodes[gore]!",\
+ "You hear the [gore_sound].")
var/mob/living/carbon/human/victim = owner //Keep a reference for post-removed().
removed(null, ignore_children)
@@ -666,6 +707,8 @@ Note that amputating the affected organ does in fact remove the infection from t
parent.update_damages()
else
var/obj/item/organ/external/stump/stump = new (victim, 0, src)
+ if(status & ORGAN_ROBOT)
+ stump.robotize()
stump.wounds |= W
victim.organs |= stump
stump.update_damages()
@@ -691,6 +734,9 @@ Note that amputating the affected organ does in fact remove the infection from t
dir = 2
if(DROPLIMB_BURN)
new /obj/effect/decal/cleanable/ash(get_turf(victim))
+ for(var/obj/item/I in src)
+ if(I.w_class > 2 && !istype(I,/obj/item/organ))
+ I.loc = get_turf(src)
qdel(src)
if(DROPLIMB_BLUNT)
var/obj/effect/decal/cleanable/blood/gibs/gore = new owner.species.single_gib_type(get_turf(victim))
@@ -705,6 +751,14 @@ Note that amputating the affected organ does in fact remove the infection from t
I.removed()
if(istype(loc,/turf))
I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
+
+ for(var/obj/item/I in src)
+ if(I.w_class <= 2)
+ qdel(I)
+ continue
+ I.loc = get_turf(src)
+ I.throw_at(get_edge_target_turf(src,pick(alldirs)),rand(1,3),30)
+
qdel(src)
/****************************************************
@@ -765,7 +819,8 @@ Note that amputating the affected organ does in fact remove the infection from t
return rval
/obj/item/organ/external/proc/fracture()
-
+ if(status & ORGAN_ROBOT)
+ return //ORGAN_BROKEN doesn't have the same meaning for robot limbs
if((status & ORGAN_BROKEN) || cannot_break)
return
@@ -827,11 +882,14 @@ Note that amputating the affected organ does in fact remove the infection from t
dislocated = -1 //TODO, make robotic limbs a separate type, remove snowflake
cannot_break = 1
get_icon()
+ unmutate()
for (var/obj/item/organ/external/T in children)
if(T)
T.robotize()
/obj/item/organ/external/proc/mutate()
+ if(src.status & ORGAN_ROBOT)
+ return
src.status |= ORGAN_MUTATED
owner.update_body()
@@ -840,7 +898,7 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.update_body()
/obj/item/organ/external/proc/get_damage() //returns total damage
- return max(brute_dam + burn_dam - perma_injury, perma_injury) //could use health?
+ return max(brute_dam + burn_dam - perma_injury, perma_injury) //could use max_damage?
/obj/item/organ/external/proc/has_infected_wound()
for(var/datum/wound/W in wounds)
@@ -849,6 +907,8 @@ Note that amputating the affected organ does in fact remove the infection from t
return 0
/obj/item/organ/external/proc/is_usable()
+ if((status & ORGAN_ROBOT) && get_damage() >= max_damage) //robot limbs just become inoperable at max damage
+ return
return !is_dislocated() && !(status & (ORGAN_DESTROYED|ORGAN_MUTATED|ORGAN_DEAD))
/obj/item/organ/external/proc/is_malfunctioning()
@@ -865,7 +925,7 @@ Note that amputating the affected organ does in fact remove the infection from t
W.add_blood(owner)
if(ismob(W.loc))
var/mob/living/H = W.loc
- H.drop_item()
+ H.drop_from_inventory(W)
W.loc = owner
/obj/item/organ/external/removed(var/mob/living/user, var/ignore_children)
@@ -880,8 +940,14 @@ Note that amputating the affected organ does in fact remove the infection from t
status |= ORGAN_DESTROYED
victim.bad_external_organs -= src
- for(var/implant in implants) //todo: check if this can be left alone
- qdel(implant)
+ for(var/obj/item/implant in implants)
+ if(!istype(implant))
+ return
+ if(implant.w_class <= 2)
+ qdel(implant)
+ else
+ implant.loc = src
+ implants.Cut()
// Attached organs also fly off.
if(!ignore_children)
@@ -889,6 +955,8 @@ Note that amputating the affected organ does in fact remove the infection from t
O.removed()
if(O)
O.loc = src
+ for(var/obj/item/I in O.contents)
+ I.loc = src
// Grab all the internal giblets too.
for(var/obj/item/organ/organ in internal_organs)
@@ -917,16 +985,72 @@ Note that amputating the affected organ does in fact remove the infection from t
/obj/item/organ/external/proc/disfigure(var/type = "brute")
if (disfigured)
return
- if(type == "brute")
- owner.visible_message("\red You hear a sickening cracking sound coming from \the [owner]'s [name].", \
- "\red Your [name] becomes a mangled mess!", \
- "\red You hear a sickening crack.")
- else
- owner.visible_message("\red \The [owner]'s [name] melts away, turning into mangled mess!", \
- "\red Your [name] melts away!", \
- "\red You hear a sickening sizzle.")
+ if(owner)
+ if(type == "brute")
+ owner.visible_message("\red You hear a sickening cracking sound coming from \the [owner]'s [name].", \
+ "\red Your [name] becomes a mangled mess!", \
+ "\red You hear a sickening crack.")
+ else
+ owner.visible_message("\red \The [owner]'s [name] melts away, turning into mangled mess!", \
+ "\red Your [name] melts away!", \
+ "\red You hear a sickening sizzle.")
disfigured = 1
+/obj/item/organ/external/proc/get_wounds_desc()
+ . = ""
+ if(status & ORGAN_DESTROYED && !is_stump())
+ . += "tear at [amputation_point] so bad it barely hangs on few tendons"
+
+ if(status & ORGAN_ROBOT)
+ if(brute_dam)
+ switch(brute_dam)
+ if(0 to 20)
+ . += " some dents"
+ if(21 to INFINITY)
+ . += pick(" a lot of dents"," severe denting")
+ if(brute_dam && burn_dam)
+ . += " and"
+ if(burn_dam)
+ switch(burn_dam)
+ if(0 to 20)
+ . += " some burns"
+ if(21 to INFINITY)
+ . += pick(" a lot of burns"," severe melting")
+ return
+
+ var/list/wound_descriptors = list()
+ if(open > 1)
+ wound_descriptors["an open incision"] = 1
+ else if (open)
+ wound_descriptors["an incision"] = 1
+ for(var/datum/wound/W in wounds)
+ if(W.internal && !open) continue // can't see internal wounds
+ var/this_wound_desc = W.desc
+ if(W.damage_type == BURN && W.salved) this_wound_desc = "salved [this_wound_desc]"
+ if(W.bleeding()) this_wound_desc = "bleeding [this_wound_desc]"
+ else if(W.bandaged) this_wound_desc = "bandaged [this_wound_desc]"
+ if(W.germ_level > 600) this_wound_desc = "badly infected [this_wound_desc]"
+ else if(W.germ_level > 330) this_wound_desc = "lightly infected [this_wound_desc]"
+ if(wound_descriptors[this_wound_desc])
+ wound_descriptors[this_wound_desc] += W.amount
+ else
+ wound_descriptors[this_wound_desc] = W.amount
+
+ if(wound_descriptors.len)
+ var/list/flavor_text = list()
+ var/list/no_exclude = list("gaping wound", "big gaping wound", "massive wound", "large bruise",\
+ "huge bruise", "massive bruise", "severe burn", "large burn", "deep burn", "carbonised area")
+ for(var/wound in wound_descriptors)
+ switch(wound_descriptors[wound])
+ if(1)
+ flavor_text += "[prob(10) && !(wound in no_exclude) ? "what might be " : ""]a [wound]"
+ if(2)
+ flavor_text += "[prob(10) && !(wound in no_exclude) ? "what might be " : ""]a pair of [wound]s"
+ if(3 to 5)
+ flavor_text += "several [wound]s"
+ if(6 to INFINITY)
+ flavor_text += "a ton of [wound]\s"
+ return english_list(flavor_text)
/****************************************************
ORGAN DEFINES
****************************************************/
@@ -935,8 +1059,9 @@ Note that amputating the affected organ does in fact remove the infection from t
name = "upper body"
limb_name = "chest"
icon_name = "torso"
- health = 100
+ max_damage = 100
min_broken_damage = 35
+ w_class = 5
body_part = UPPER_TORSO
vital = 1
amputation_point = "spine"
@@ -951,8 +1076,9 @@ Note that amputating the affected organ does in fact remove the infection from t
name = "lower body"
limb_name = "groin"
icon_name = "groin"
- health = 100
+ max_damage = 100
min_broken_damage = 35
+ w_class = 5
body_part = LOWER_TORSO
vital = 1
parent_organ = "chest"
@@ -965,8 +1091,9 @@ Note that amputating the affected organ does in fact remove the infection from t
limb_name = "l_arm"
name = "left arm"
icon_name = "l_arm"
- health = 50
+ max_damage = 50
min_broken_damage = 30
+ w_class = 3
body_part = ARM_LEFT
parent_organ = "chest"
joint = "left elbow"
@@ -985,8 +1112,9 @@ Note that amputating the affected organ does in fact remove the infection from t
limb_name = "l_leg"
name = "left leg"
icon_name = "l_leg"
- health = 50
+ max_damage = 50
min_broken_damage = 30
+ w_class = 3
body_part = LEG_LEFT
icon_position = LEFT
parent_organ = "groin"
@@ -1007,8 +1135,8 @@ Note that amputating the affected organ does in fact remove the infection from t
limb_name = "l_foot"
name = "left foot"
icon_name = "l_foot"
- health = 30
min_broken_damage = 15
+ w_class = 2
body_part = FOOT_LEFT
icon_position = LEFT
parent_organ = "l_leg"
@@ -1034,8 +1162,8 @@ Note that amputating the affected organ does in fact remove the infection from t
limb_name = "l_hand"
name = "left hand"
icon_name = "l_hand"
- health = 30
min_broken_damage = 15
+ w_class = 2
body_part = HAND_LEFT
parent_organ = "l_arm"
joint = "left wrist"
@@ -1059,8 +1187,9 @@ Note that amputating the affected organ does in fact remove the infection from t
limb_name = "head"
icon_name = "head"
name = "head"
- health = 75
+ max_damage = 75
min_broken_damage = 35
+ w_class = 3
body_part = HEAD
vital = 1
parent_organ = "chest"
@@ -1077,6 +1206,8 @@ Note that amputating the affected organ does in fact remove the infection from t
owner.u_equip(owner.l_ear)
owner.u_equip(owner.r_ear)
owner.u_equip(owner.wear_mask)
+ spawn(1)
+ owner.update_hair()
..()
/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
diff --git a/code/modules/organs/organ_icon.dm b/code/modules/organs/organ_icon.dm
index d05a269f28f..281cd0c0162 100644
--- a/code/modules/organs/organ_icon.dm
+++ b/code/modules/organs/organ_icon.dm
@@ -17,11 +17,23 @@ var/global/list/limb_icon_cache = list()
s_col = null
if(status & ORGAN_ROBOT)
return
+ if(species && human.species && species.name != human.species.name)
+ return
if(!isnull(human.s_tone) && (human.species.flags & HAS_SKIN_TONE))
s_tone = human.s_tone
if(human.species.flags & HAS_SKIN_COLOR)
s_col = list(human.r_skin, human.g_skin, human.b_skin)
+/obj/item/organ/external/proc/sync_colour_to_dna()
+ s_tone = null
+ s_col = null
+ if(status & ORGAN_ROBOT)
+ return
+ if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.flags & HAS_SKIN_TONE))
+ s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
+ if(species.flags & HAS_SKIN_COLOR)
+ s_col = list(dna.GetUIValue(DNA_UI_SKIN_R), dna.GetUIValue(DNA_UI_SKIN_G), dna.GetUIValue(DNA_UI_SKIN_B))
+
/obj/item/organ/external/head/sync_colour_to_human(var/mob/living/carbon/human/human)
..()
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
@@ -34,22 +46,26 @@ var/global/list/limb_icon_cache = list()
/obj/item/organ/external/head/get_icon()
..()
- if(owner.species.has_organ["eyes"])
+ overlays.Cut()
+ if(species.has_organ["eyes"])
var/obj/item/organ/eyes/eyes = owner.internal_organs_by_name["eyes"]
- if(owner.species.eyes)
- var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', owner.species.eyes)
+ if(species.eyes)
+ var/icon/eyes_icon = new/icon('icons/mob/human_face.dmi', species.eyes)
if(eyes)
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
else
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
+ overlays |= eyes_icon
- if(owner.lip_style && (owner.species && (owner.species.flags & HAS_LIPS)))
- mob_icon.Blend(new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s"), ICON_OVERLAY)
+ if(owner.lip_style && (species && (species.flags & HAS_LIPS)))
+ var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
+ overlays |= lip_icon
+ mob_icon.Blend(lip_icon, ICON_OVERLAY)
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
- if(facial_hair_style && facial_hair_style.species_allowed && (owner.species.name in facial_hair_style.species_allowed))
+ if(facial_hair_style && facial_hair_style.species_allowed && (species.name in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
@@ -57,7 +73,7 @@ var/global/list/limb_icon_cache = list()
if(owner.h_style && !(owner.head && (owner.head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
- if(hair_style && (owner.species.name in hair_style.species_allowed))
+ if(hair_style && (species.name in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(owner.r_hair, owner.g_hair, owner.b_hair), ICON_ADD)
@@ -71,25 +87,25 @@ var/global/list/limb_icon_cache = list()
if(force_icon)
mob_icon = new /icon(force_icon, "[icon_name]")
else
- if(!owner)
+ if(!dna)
mob_icon = new /icon('icons/mob/human_races/r_human.dmi', "[icon_name][gendered_icon ? "_f" : ""]")
else
if(gendered_icon)
- if(owner.gender == FEMALE)
+ if(dna.GetUIState(DNA_UI_GENDER))
gender = "f"
else
gender = "m"
if(skeletal)
mob_icon = new /icon('icons/mob/human_races/r_skeleton.dmi', "[icon_name][gender ? "_[gender]" : ""]")
- else if ((status & ORGAN_ROBOT) && !(owner.species && owner.species.flags & IS_SYNTHETIC))
+ else if (status & ORGAN_ROBOT)
mob_icon = new /icon('icons/mob/human_races/robotic.dmi', "[icon_name][gender ? "_[gender]" : ""]")
else
if (status & ORGAN_MUTATED)
- mob_icon = new /icon(owner.species.deform, "[icon_name][gender ? "_[gender]" : ""]")
+ mob_icon = new /icon(species.deform, "[icon_name][gender ? "_[gender]" : ""]")
else
- mob_icon = new /icon(owner.species.icobase, "[icon_name][gender ? "_[gender]" : ""]")
+ mob_icon = new /icon(species.icobase, "[icon_name][gender ? "_[gender]" : ""]")
if(status & ORGAN_DEAD)
mob_icon.ColorTone(rgb(10,50,0))
diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm
index f7875a1e25f..a67e74c8f97 100644
--- a/code/modules/organs/organ_internal.dm
+++ b/code/modules/organs/organ_internal.dm
@@ -79,15 +79,6 @@
owner.b_eyes ? owner.b_eyes : 0
)
-/obj/item/organ/eyes/process() //Eye damage replaces the old eye_stat var.
- ..()
- if(!owner)
- return
- if(is_bruised())
- owner.eye_blurry = 20
- if(is_broken())
- owner.eye_blind = 20
-
/obj/item/organ/liver
name = "liver"
icon_state = "liver"
@@ -135,20 +126,12 @@
if(is_broken())
filter_effect -= 2
- // Do some reagent filtering/processing.
- for(var/datum/reagent/R in owner.reagents.reagent_list)
- // Damaged liver means some chemicals are very dangerous
- // The liver is also responsible for clearing out alcohol and toxins.
- // Ethanol and all drinks are bad.K
- if(istype(R, /datum/reagent/ethanol))
- if(filter_effect < 3)
- owner.adjustToxLoss(0.1 * PROCESS_ACCURACY)
- owner.reagents.remove_reagent(R.id, R.custom_metabolism*filter_effect)
- // Can't cope with toxins at all
- else if(istype(R, /datum/reagent/toxin))
- if(filter_effect < 3)
- owner.adjustToxLoss(0.3 * PROCESS_ACCURACY)
- owner.reagents.remove_reagent(R.id, ALCOHOL_METABOLISM*filter_effect)
+ // Do some reagent processing.
+ if(owner.chem_effects[CE_ALCOHOL_TOXIC])
+ if(filter_effect < 3)
+ owner.adjustToxLoss(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY)
+ else
+ take_damage(owner.chem_effects[CE_ALCOHOL_TOXIC] * 0.1 * PROCESS_ACCURACY, prob(1)) // Chance to warn them
/obj/item/organ/appendix
name = "appendix"
@@ -157,7 +140,6 @@
organ_tag = "appendix"
/obj/item/organ/appendix/removed()
-
if(owner)
var/inflamed = 0
for(var/datum/disease/appendicitis/appendicitis in owner.viruses)
@@ -167,4 +149,4 @@
if(inflamed)
icon_state = "appendixinflamed"
name = "inflamed appendix"
- ..()
\ No newline at end of file
+ ..()
diff --git a/code/modules/organs/organ_stump.dm b/code/modules/organs/organ_stump.dm
index 728f9cd1bc1..4f353e193cd 100644
--- a/code/modules/organs/organ_stump.dm
+++ b/code/modules/organs/organ_stump.dm
@@ -2,7 +2,6 @@
name = "limb stump"
icon_name = ""
dislocated = -1
- cannot_amputate = 1
/obj/item/organ/external/stump/New(var/mob/living/carbon/holder, var/internal, var/obj/item/organ/external/limb)
if(istype(limb))
@@ -15,6 +14,8 @@
..(holder, internal)
if(istype(limb))
max_damage = limb.max_damage
+ if((limb.status & ORGAN_ROBOT) && (!parent || (parent.status & ORGAN_ROBOT)))
+ robotize() //if both limb and the parent are robotic, the stump is robotic too
/obj/item/organ/external/stump/is_stump()
return 1
diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm
index 31cb0c4e434..e4e024be104 100644
--- a/code/modules/organs/pain.dm
+++ b/code/modules/organs/pain.dm
@@ -8,14 +8,11 @@ mob/var/next_pain_time = 0
// partname is the name of a body part
// amount is a num from 1 to 100
mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0)
- if(stat >= 2) return
- if(reagents.has_reagent("paracetamol"))
+ if(stat >= 1)
return
- if(reagents.has_reagent("tramadol"))
+ if(species && (species.flags & NO_PAIN))
return
- if(reagents.has_reagent("oxycodone"))
- return
- if(analgesic)
+ if(analgesic > 40)
return
if(world.time < next_pain_time && !force)
return
@@ -54,10 +51,10 @@ mob/living/carbon/proc/pain(var/partname, var/amount, var/force, var/burning = 0
// message is the custom message to be displayed
// flash_strength is 0 for weak pain flash, 1 for strong pain flash
mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength)
- if(stat >= 1) return
-
- if(species && species.flags & NO_PAIN) return
-
+ if(stat >= 1)
+ return
+ if(species.flags & NO_PAIN)
+ return
if(reagents.has_reagent("tramadol"))
return
if(reagents.has_reagent("oxycodone"))
@@ -77,19 +74,15 @@ mob/living/carbon/human/proc/custom_pain(var/message, var/flash_strength)
mob/living/carbon/human/proc/handle_pain()
// not when sleeping
- if(species && species.flags & NO_PAIN) return
+ if(species.flags & NO_PAIN) return
if(stat >= 2) return
- if(reagents.has_reagent("tramadol"))
- return
- if(reagents.has_reagent("oxycodone"))
- return
- if(analgesic)
+ if(analgesic > 70)
return
var/maxdam = 0
var/obj/item/organ/external/damaged_organ = null
for(var/obj/item/organ/external/E in organs)
- if(E.status & ORGAN_DEAD) continue
+ if(E.status & (ORGAN_DEAD|ORGAN_ROBOT)) continue
var/dam = E.get_damage()
// make the choice of the organ depend on damage,
// but also sometimes use one of the less damaged ones
@@ -101,6 +94,7 @@ mob/living/carbon/human/proc/handle_pain()
// Damage to internal organs hurts a lot.
for(var/obj/item/organ/I in internal_organs)
+ if(I.status & (ORGAN_DEAD|ORGAN_ROBOT)) continue
if(I.damage > 2) if(prob(2))
var/obj/item/organ/external/parent = get_organ(I.parent_organ)
src.custom_pain("You feel a sharp pain in your [parent.name]", 1)
diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm
index 8d19d60b491..87da7f03534 100644
--- a/code/modules/organs/robolimbs.dm
+++ b/code/modules/organs/robolimbs.dm
@@ -7,6 +7,7 @@ var/global/datum/robolimb/basic_robolimb
for(var/limb_type in typesof(/datum/robolimb))
var/datum/robolimb/R = new limb_type()
all_robolimbs[R.company] = R
+ world << "Adding [R.company] as [R], [R.type]"
if(!R.unavailable_at_chargen)
chargen_robolimbs[R.company] = R
@@ -35,3 +36,9 @@ var/global/datum/robolimb/basic_robolimb
company = "Xion Manufacturing Group"
desc = "This limb has a minimalist black and red casing."
icon = 'icons/mob/human_races/cyberlimbs/xion.dmi'
+
+/datum/robolimb/ipc
+ company = "Morpheus Cyberkinetics"
+ desc = "This limb is simple and functional; no effort has been made to make it look human."
+ icon = 'icons/mob/human_races/cyberlimbs/ipc.dmi'
+ unavailable_at_chargen = 1
diff --git a/code/modules/organs/organ_alien.dm b/code/modules/organs/subtypes/diona.dm
similarity index 52%
rename from code/modules/organs/organ_alien.dm
rename to code/modules/organs/subtypes/diona.dm
index 4e2610f584a..6f19c7eee80 100644
--- a/code/modules/organs/organ_alien.dm
+++ b/code/modules/organs/subtypes/diona.dm
@@ -1,16 +1,21 @@
/proc/spawn_diona_nymph_from_organ(var/obj/item/organ/organ)
if(!istype(organ))
- return
+ return 0
//This is a terrible hack and I should be ashamed.
var/datum/seed/diona = plant_controller.seeds["diona"]
if(!diona)
- qdel(src)
+ return 0
spawn(1) // So it has time to be thrown about by the gib() proc.
var/mob/living/carbon/alien/diona/D = new(get_turf(organ))
- diona.request_player(D)
- qdel(organ)
+ var/datum/ghosttrap/plant/P = get_ghost_trap("living plant")
+ P.request_player(D, "A diona nymph has split off from its gestalt. ")
+ spawn(60)
+ if(D)
+ if(!D.ckey || !D.client)
+ D.death()
+ return 1
/obj/item/organ/external/diona
name = "tendril"
@@ -23,8 +28,9 @@
name = "core trunk"
limb_name = "chest"
icon_name = "torso"
- health = 200
+ max_damage = 200
min_broken_damage = 50
+ w_class = 5
body_part = UPPER_TORSO
vital = 1
cannot_amputate = 1
@@ -34,8 +40,9 @@
name = "fork"
limb_name = "groin"
icon_name = "groin"
- health = 100
+ max_damage = 100
min_broken_damage = 50
+ w_class = 4
body_part = LOWER_TORSO
parent_organ = "chest"
@@ -43,8 +50,9 @@
name = "left upper tendril"
limb_name = "l_arm"
icon_name = "l_arm"
- health = 35
+ max_damage = 35
min_broken_damage = 20
+ w_class = 3
body_part = ARM_LEFT
parent_organ = "chest"
can_grasp = 1
@@ -59,8 +67,9 @@
name = "left lower tendril"
limb_name = "l_leg"
icon_name = "l_leg"
- health = 35
+ max_damage = 35
min_broken_damage = 20
+ w_class = 3
body_part = LEG_LEFT
icon_position = LEFT
parent_organ = "groin"
@@ -77,8 +86,9 @@
name = "left foot"
limb_name = "l_foot"
icon_name = "l_foot"
- health = 20
+ max_damage = 20
min_broken_damage = 10
+ w_class = 2
body_part = FOOT_LEFT
icon_position = LEFT
parent_organ = "l_leg"
@@ -98,8 +108,9 @@
name = "left grasper"
limb_name = "l_hand"
icon_name = "l_hand"
- health = 30
+ max_damage = 30
min_broken_damage = 15
+ w_class = 2
body_part = HAND_LEFT
parent_organ = "l_arm"
can_grasp = 1
@@ -115,8 +126,9 @@
limb_name = "head"
icon_name = "head"
name = "head"
- health = 50
+ max_damage = 50
min_broken_damage = 25
+ w_class = 3
body_part = HEAD
parent_organ = "chest"
@@ -128,16 +140,13 @@
//DIONA ORGANS.
/obj/item/organ/external/diona/removed()
+ var/mob/living/carbon/human/H = owner
..()
- if(!istype(owner))
+ if(!istype(H) || !H.organs || !H.organs.len)
+ H.death()
+ if(prob(50) && spawn_diona_nymph_from_organ(src))
qdel(src)
- if(!owner.organs.len)
- owner.death()
-
- if(prob(50))
- spawn_diona_nymph_from_organ(src)
-
/obj/item/organ/diona/process()
return
@@ -172,16 +181,13 @@
organ_tag = "special" // Turns into a nymph instantly, no transplanting possible.
/obj/item/organ/diona/removed(var/mob/living/user)
-
+ var/mob/living/carbon/human/H = owner
..()
- if(!istype(owner))
+ if(!istype(H) || !H.organs || !H.organs.len)
+ H.death()
+ if(prob(50) && spawn_diona_nymph_from_organ(src))
qdel(src)
- if(!owner.internal_organs.len)
- owner.death()
-
- spawn_diona_nymph_from_organ(src)
-
// These are different to the standard diona organs as they have a purpose in other
// species (absorbing radiation and light respectively)
/obj/item/organ/diona/nutrients
@@ -201,144 +207,3 @@
/obj/item/organ/diona/node/removed()
return
-
-//CORTICAL BORER ORGANS.
-/obj/item/organ/borer
- name = "cortical borer"
- parent_organ = "head"
- vital = 1
-
-/obj/item/organ/borer/process()
-
- // Borer husks regenerate health, feel no pain, and are resistant to stuns and brainloss.
- for(var/chem in list("tricordrazine","tramadol","hyperzine","alkysine"))
- if(owner.reagents.get_reagent_amount(chem) < 3)
- owner.reagents.add_reagent(chem, 5)
-
- // They're also super gross and ooze ichor.
- if(prob(5))
- var/mob/living/carbon/human/H = owner
- if(!istype(H))
- return
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in H.vessel.reagent_list
- blood_splatter(H,B,1)
- var/obj/effect/decal/cleanable/blood/splatter/goo = locate() in get_turf(owner)
- if(goo)
- goo.name = "husk ichor"
- goo.desc = "It's thick and stinks of decay."
- goo.basecolor = "#412464"
- goo.update_icon()
-
-/obj/item/organ/borer
- name = "cortical borer"
- icon = 'icons/obj/objects.dmi'
- icon_state = "borer"
- organ_tag = "brain"
- desc = "A disgusting space slug."
-
-/obj/item/organ/borer/removed(var/mob/living/user)
-
- ..()
-
- var/mob/living/simple_animal/borer/B = owner.has_brain_worms()
- if(B)
- B.leave_host()
- B.ckey = owner.ckey
-
- spawn(0)
- qdel(src)
-
-//XENOMORPH ORGANS
-/obj/item/organ/xenos/eggsac
- name = "egg sac"
- parent_organ = "groin"
-
-/obj/item/organ/xenos/plasmavessel
- name = "plasma vessel"
- parent_organ = "chest"
- var/stored_plasma = 0
- var/max_plasma = 500
-
-/obj/item/organ/xenos/plasmavessel/queen
- name = "bloated plasma vessel"
- stored_plasma = 200
- max_plasma = 500
-
-/obj/item/organ/xenos/plasmavessel/sentinel
- stored_plasma = 100
- max_plasma = 250
-
-/obj/item/organ/xenos/plasmavessel/hunter
- name = "tiny plasma vessel"
- stored_plasma = 100
- max_plasma = 150
-
-/obj/item/organ/xenos/acidgland
- name = "acid gland"
- parent_organ = "head"
-
-/obj/item/organ/xenos/hivenode
- name = "hive node"
- parent_organ = "chest"
-
-/obj/item/organ/xenos/resinspinner
- name = "resin spinner"
- parent_organ = "head"
-
-/obj/item/organ/xenos
- name = "xeno organ"
- icon = 'icons/effects/blood.dmi'
- desc = "It smells like an accident in a chemical factory."
-
-/obj/item/organ/xenos/eggsac
- name = "egg sac"
- icon_state = "xgibmid1"
- organ_tag = "egg sac"
-
-/obj/item/organ/xenos/plasmavessel
- name = "plasma vessel"
- icon_state = "xgibdown1"
- organ_tag = "plasma vessel"
-
-/obj/item/organ/xenos/acidgland
- name = "acid gland"
- icon_state = "xgibtorso"
- organ_tag = "acid gland"
-
-/obj/item/organ/xenos/hivenode
- name = "hive node"
- icon_state = "xgibmid2"
- organ_tag = "hive node"
-
-/obj/item/organ/xenos/resinspinner
- name = "hive node"
- icon_state = "xgibmid2"
- organ_tag = "resin spinner"
-
-//VOX ORGANS.
-/obj/item/organ/stack
- name = "cortical stack"
- parent_organ = "head"
- robotic = 2
- vital = 1
- var/backup_time = 0
- var/datum/mind/backup
-
-/obj/item/organ/stack/process()
- if(owner && owner.stat != 2 && !is_broken())
- backup_time = world.time
- if(owner.mind) backup = owner.mind
-
-/obj/item/organ/stack/vox
-
-/obj/item/organ/stack/vox/stack
-
-/obj/item/organ/stack
- name = "cortical stack"
- icon_state = "brain-prosthetic"
- organ_tag = "stack"
- robotic = 2
-
-/obj/item/organ/stack/vox
- name = "vox cortical stack"
\ No newline at end of file
diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm
new file mode 100644
index 00000000000..fd94c2c7590
--- /dev/null
+++ b/code/modules/organs/subtypes/machine.dm
@@ -0,0 +1,157 @@
+// IPC limbs.
+/obj/item/organ/external/head/ipc
+ dislocated = -1
+ can_intake_reagents = 0
+ vital = 0
+ max_damage = 50 //made same as arm, since it is not vital
+ min_broken_damage = 30
+ encased = null
+
+/obj/item/organ/external/head/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/chest/ipc
+ dislocated = -1
+ encased = null
+/obj/item/organ/external/chest/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/groin/ipc
+ dislocated = -1
+/obj/item/organ/external/groin/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/arm/ipc
+ dislocated = -1
+/obj/item/organ/external/arm/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/arm/right/ipc
+ dislocated = -1
+/obj/item/organ/external/arm/right/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/leg/ipc
+ dislocated = -1
+/obj/item/organ/external/leg/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/leg/right/ipc
+ dislocated = -1
+/obj/item/organ/external/leg/right/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/foot/ipc
+ dislocated = -1
+/obj/item/organ/external/foot/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/foot/right/ipc
+ dislocated = -1
+/obj/item/organ/external/foot/right/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/hand/ipc
+ dislocated = -1
+/obj/item/organ/external/hand/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/external/hand/right/ipc
+ dislocated = -1
+/obj/item/organ/external/hand/right/ipc/New()
+ robotize("Morpheus Cyberkinetics")
+ ..()
+
+/obj/item/organ/cell
+ name = "microbattery"
+ desc = "A small, powerful cell for use in fully prosthetic bodies."
+ icon = 'icons/obj/power.dmi'
+ icon_state = "scell"
+ organ_tag = "cell"
+ parent_organ = "chest"
+ vital = 1
+
+/obj/item/organ/cell/New()
+ robotize()
+ ..()
+
+/obj/item/organ/cell/replaced()
+ ..()
+ // This is very ghetto way of rebooting an IPC. TODO better way.
+ if(owner && owner.stat == DEAD)
+ owner.stat = 0
+ owner.visible_message("\The [owner] twitches visibly!")
+
+/obj/item/organ/optical_sensor
+ name = "optical sensor"
+ organ_tag = "eyes"
+ parent_organ = "head"
+ icon = 'icons/obj/robot_component.dmi'
+ icon_state = "camera"
+ dead_icon = "camera_broken"
+
+/obj/item/organ/optical_sensor/New()
+ robotize()
+ ..()
+
+// Used for an MMI or posibrain being installed into a human.
+/obj/item/organ/mmi_holder
+ name = "brain"
+ organ_tag = "brain"
+ parent_organ = "chest"
+ vital = 1
+ var/obj/item/device/mmi/stored_mmi
+
+/obj/item/organ/mmi_holder/proc/update_from_mmi()
+ if(!stored_mmi)
+ return
+ name = stored_mmi.name
+ desc = stored_mmi.desc
+ icon = stored_mmi.icon
+ icon_state = stored_mmi.icon_state
+
+/obj/item/organ/mmi_holder/removed(var/mob/living/user)
+
+ if(stored_mmi)
+ stored_mmi.loc = get_turf(src)
+ if(owner.mind)
+ owner.mind.transfer_to(stored_mmi.brainmob)
+ ..()
+
+ var/mob/living/holder_mob = loc
+ if(istype(holder_mob))
+ holder_mob.drop_from_inventory(src)
+ qdel(src)
+
+/obj/item/organ/mmi_holder/New()
+ ..()
+ // This is very ghetto way of rebooting an IPC. TODO better way.
+ spawn(1)
+ if(owner && owner.stat == DEAD)
+ owner.stat = 0
+ owner.visible_message("\The [owner] twitches visibly!")
+
+/obj/item/organ/mmi_holder/posibrain/New()
+ robotize()
+ stored_mmi = new /obj/item/device/mmi/digital/posibrain(src)
+ ..()
+ spawn(1)
+ if(owner)
+ stored_mmi.name = "positronic brain ([owner.name])"
+ stored_mmi.brainmob.real_name = owner.name
+ stored_mmi.brainmob.name = stored_mmi.brainmob.real_name
+ stored_mmi.icon_state = "posibrain-occupied"
+ update_from_mmi()
+ else
+ stored_mmi.loc = get_turf(src)
+ qdel(src)
\ No newline at end of file
diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm
new file mode 100644
index 00000000000..54ec34ae70c
--- /dev/null
+++ b/code/modules/organs/subtypes/standard.dm
@@ -0,0 +1,170 @@
+/****************************************************
+ ORGAN DEFINES
+****************************************************/
+
+/obj/item/organ/external/chest
+ name = "upper body"
+ limb_name = "chest"
+ icon_name = "torso"
+ max_damage = 100
+ min_broken_damage = 35
+ w_class = 5
+ body_part = UPPER_TORSO
+ vital = 1
+ amputation_point = "spine"
+ joint = "neck"
+ dislocated = -1
+ gendered_icon = 1
+ cannot_amputate = 1
+ parent_organ = null
+ encased = "ribcage"
+
+/obj/item/organ/external/groin
+ name = "lower body"
+ limb_name = "groin"
+ icon_name = "groin"
+ max_damage = 100
+ min_broken_damage = 35
+ w_class = 4
+ body_part = LOWER_TORSO
+ vital = 1
+ parent_organ = "chest"
+ amputation_point = "lumbar"
+ joint = "hip"
+ dislocated = -1
+ gendered_icon = 1
+
+/obj/item/organ/external/arm
+ limb_name = "l_arm"
+ name = "left arm"
+ icon_name = "l_arm"
+ max_damage = 50
+ min_broken_damage = 30
+ w_class = 3
+ body_part = ARM_LEFT
+ parent_organ = "chest"
+ joint = "left elbow"
+ amputation_point = "left shoulder"
+ can_grasp = 1
+
+/obj/item/organ/external/arm/right
+ limb_name = "r_arm"
+ name = "right arm"
+ icon_name = "r_arm"
+ body_part = ARM_RIGHT
+ joint = "right elbow"
+ amputation_point = "right shoulder"
+
+/obj/item/organ/external/leg
+ limb_name = "l_leg"
+ name = "left leg"
+ icon_name = "l_leg"
+ max_damage = 50
+ min_broken_damage = 30
+ w_class = 3
+ body_part = LEG_LEFT
+ icon_position = LEFT
+ parent_organ = "groin"
+ joint = "left knee"
+ amputation_point = "left hip"
+ can_stand = 1
+
+/obj/item/organ/external/leg/right
+ limb_name = "r_leg"
+ name = "right leg"
+ icon_name = "r_leg"
+ body_part = LEG_RIGHT
+ icon_position = RIGHT
+ joint = "right knee"
+ amputation_point = "right hip"
+
+/obj/item/organ/external/foot
+ limb_name = "l_foot"
+ name = "left foot"
+ icon_name = "l_foot"
+ max_damage = 30
+ min_broken_damage = 15
+ w_class = 2
+ body_part = FOOT_LEFT
+ icon_position = LEFT
+ parent_organ = "l_leg"
+ joint = "left ankle"
+ amputation_point = "left ankle"
+ can_stand = 1
+
+/obj/item/organ/external/foot/removed()
+ if(owner) owner.u_equip(owner.shoes)
+ ..()
+
+/obj/item/organ/external/foot/right
+ limb_name = "r_foot"
+ name = "right foot"
+ icon_name = "r_foot"
+ body_part = FOOT_RIGHT
+ icon_position = RIGHT
+ parent_organ = "r_leg"
+ joint = "right ankle"
+ amputation_point = "right ankle"
+
+/obj/item/organ/external/hand
+ limb_name = "l_hand"
+ name = "left hand"
+ icon_name = "l_hand"
+ max_damage = 30
+ min_broken_damage = 15
+ w_class = 2
+ body_part = HAND_LEFT
+ parent_organ = "l_arm"
+ joint = "left wrist"
+ amputation_point = "left wrist"
+ can_grasp = 1
+
+/obj/item/organ/external/hand/removed()
+ owner.u_equip(owner.gloves)
+ ..()
+
+/obj/item/organ/external/hand/right
+ limb_name = "r_hand"
+ name = "right hand"
+ icon_name = "r_hand"
+ body_part = HAND_RIGHT
+ parent_organ = "r_arm"
+ joint = "right wrist"
+ amputation_point = "right wrist"
+
+/obj/item/organ/external/head
+ limb_name = "head"
+ icon_name = "head"
+ name = "head"
+ max_damage = 75
+ min_broken_damage = 35
+ w_class = 3
+ body_part = HEAD
+ vital = 1
+ parent_organ = "chest"
+ joint = "jaw"
+ amputation_point = "neck"
+ gendered_icon = 1
+ encased = "skull"
+ var/can_intake_reagents = 1
+
+/obj/item/organ/external/head/removed()
+ if(owner)
+ name = "[owner.real_name]'s head"
+ owner.u_equip(owner.glasses)
+ owner.u_equip(owner.head)
+ owner.u_equip(owner.l_ear)
+ owner.u_equip(owner.r_ear)
+ owner.u_equip(owner.wear_mask)
+ spawn(1)
+ owner.update_hair()
+ ..()
+
+/obj/item/organ/external/head/take_damage(brute, burn, sharp, edge, used_weapon = null, list/forbidden_limbs = list())
+ ..(brute, burn, sharp, edge, used_weapon, forbidden_limbs)
+ if (!disfigured)
+ if (brute_dam > 40)
+ if (prob(50))
+ disfigure("brute")
+ if (burn_dam > 40)
+ disfigure("burn")
diff --git a/code/modules/organs/subtypes/unbreakable.dm b/code/modules/organs/subtypes/unbreakable.dm
new file mode 100644
index 00000000000..137249e7473
--- /dev/null
+++ b/code/modules/organs/subtypes/unbreakable.dm
@@ -0,0 +1,44 @@
+// Slime limbs.
+/obj/item/organ/external/chest/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/groin/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/arm/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/arm/right/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/leg/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/leg/right/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/foot/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/foot/right/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/hand/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/hand/right/unbreakable
+ cannot_break = 1
+ dislocated = -1
+
+/obj/item/organ/external/head/unbreakable
+ cannot_break = 1
+ dislocated = -1
diff --git a/code/modules/organs/subtypes/xenos.dm b/code/modules/organs/subtypes/xenos.dm
new file mode 100644
index 00000000000..0b1233085fd
--- /dev/null
+++ b/code/modules/organs/subtypes/xenos.dm
@@ -0,0 +1,52 @@
+//XENOMORPH ORGANS
+/obj/item/organ/xenos
+ name = "xeno organ"
+ icon = 'icons/effects/blood.dmi'
+ desc = "It smells like an accident in a chemical factory."
+
+/obj/item/organ/xenos/eggsac
+ name = "egg sac"
+ parent_organ = "groin"
+ icon_state = "xgibmid1"
+ organ_tag = "egg sac"
+
+/obj/item/organ/xenos/plasmavessel
+ name = "plasma vessel"
+ parent_organ = "chest"
+ icon_state = "xgibdown1"
+ organ_tag = "plasma vessel"
+ var/stored_plasma = 0
+ var/max_plasma = 500
+
+/obj/item/organ/xenos/plasmavessel/queen
+ name = "bloated plasma vessel"
+ stored_plasma = 200
+ max_plasma = 500
+
+/obj/item/organ/xenos/plasmavessel/sentinel
+ stored_plasma = 100
+ max_plasma = 250
+
+/obj/item/organ/xenos/plasmavessel/hunter
+ name = "tiny plasma vessel"
+ stored_plasma = 100
+ max_plasma = 150
+
+/obj/item/organ/xenos/acidgland
+ name = "acid gland"
+ parent_organ = "head"
+ icon_state = "xgibtorso"
+ organ_tag = "acid gland"
+
+/obj/item/organ/xenos/hivenode
+ name = "hive node"
+ parent_organ = "chest"
+ icon_state = "xgibmid2"
+ organ_tag = "hive node"
+
+/obj/item/organ/xenos/resinspinner
+ name = "resin spinner"
+ parent_organ = "head"
+ icon_state = "xgibmid2"
+ organ_tag = "resin spinner"
+
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 3b56cf92b83..b7b34d8a8f3 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -20,7 +20,7 @@
w_class = 1.0
throw_speed = 7
throw_range = 15
- matter = list("metal" = 10)
+ matter = list(DEFAULT_WALL_MATERIAL = 10)
var/colour = "black" //what colour the ink is!
pressure_resistance = 2
@@ -51,66 +51,55 @@
msg_admin_attack("[user.name] ([user.ckey]) Used the [name] to stab [M.name] ([M.ckey]) (JMP)")
return
+/*
+ * Reagent pens
+ */
+
+/obj/item/weapon/pen/reagent
+ flags = OPENCONTAINER
+ slot_flags = SLOT_BELT
+ origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
+
+/obj/item/weapon/pen/reagent/New()
+ ..()
+ create_reagents(30)
+
+/obj/item/weapon/pen/reagent/attack(mob/living/M as mob, mob/user as mob)
+
+ if(!istype(M))
+ return
+
+ . = ..()
+
+ if(M.can_inject(user,1))
+ if(reagents.total_volume)
+ if(M.reagents)
+ var/contained_reagents = reagents.get_reagents()
+ var/trans = reagents.trans_to_mob(M, 30, CHEM_BLOOD)
+ admin_inject_log(user, M, src, contained_reagents, trans)
/*
* Sleepy Pens
*/
-/obj/item/weapon/pen/sleepypen
+/obj/item/weapon/pen/reagent/sleepy
desc = "It's a black ink pen with a sharp point and a carefully engraved \"Waffle Co.\""
- flags = OPENCONTAINER
- slot_flags = SLOT_BELT
- origin_tech = "materials=2;syndicate=5"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_ILLEGAL = 5)
-
-/obj/item/weapon/pen/sleepypen/New()
- var/datum/reagents/R = new/datum/reagents(30) //Used to be 300
- reagents = R
- R.my_atom = src
- R.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N
+/obj/item/weapon/pen/reagent/sleepy/New()
..()
- return
-
-
-/obj/item/weapon/pen/sleepypen/attack(mob/M as mob, mob/user as mob)
- if(!(istype(M,/mob)))
- return
- ..()
- if(reagents.total_volume)
- if(M.reagents) reagents.trans_to(M, 50) //used to be 150
- return
+ reagents.add_reagent("chloralhydrate", 22) //Used to be 100 sleep toxin//30 Chloral seems to be fatal, reducing it to 22./N
/*
* Parapens
*/
- /obj/item/weapon/pen/paralysis
- flags = OPENCONTAINER
- slot_flags = SLOT_BELT
+ /obj/item/weapon/pen/reagent/paralysis
origin_tech = "materials=2;syndicate=5"
-
-/obj/item/weapon/pen/paralysis/attack(mob/living/M as mob, mob/user as mob)
-
- if(!(istype(M,/mob)))
- return
-
+/obj/item/weapon/pen/reagent/paralysis/New()
..()
-
-
- if(M.can_inject(user,1))
- if(reagents.total_volume)
- if(M.reagents) reagents.trans_to(M, 50)
- return
-
-
-/obj/item/weapon/pen/paralysis/New()
- var/datum/reagents/R = new/datum/reagents(50)
- reagents = R
- R.my_atom = src
- R.add_reagent("zombiepowder", 10)
- R.add_reagent("cryptobiolin", 15)
- ..()
- return
+ reagents.add_reagent("zombiepowder", 10)
+ reagents.add_reagent("cryptobiolin", 15)
/*
* Chameleon pen
diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm
index 269d86c003d..46853a978c9 100644
--- a/code/modules/paperwork/photography.dm
+++ b/code/modules/paperwork/photography.dm
@@ -124,7 +124,7 @@ var/global/photo_count = 0
w_class = 2.0
flags = CONDUCT
slot_flags = SLOT_BELT
- matter = list("metal" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
var/pictures_max = 10
var/pictures_left = 10
var/on = 1
diff --git a/code/modules/paperwork/stamps.dm b/code/modules/paperwork/stamps.dm
index c200ff86cc5..a6954e9e2f0 100644
--- a/code/modules/paperwork/stamps.dm
+++ b/code/modules/paperwork/stamps.dm
@@ -8,7 +8,7 @@
w_class = 1.0
throw_speed = 7
throw_range = 15
- matter = list("metal" = 60)
+ matter = list(DEFAULT_WALL_MATERIAL = 60)
pressure_resistance = 2
attack_verb = list("stamped")
@@ -73,4 +73,4 @@
if(chosen_stamp)
name = chosen_stamp.name
- icon_state = chosen_stamp.icon_state
+ icon_state = chosen_stamp.icon_state
\ No newline at end of file
diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm
index 281f6a11175..700fad25ad0 100644
--- a/code/modules/power/antimatter/shielding.dm
+++ b/code/modules/power/antimatter/shielding.dm
@@ -210,7 +210,7 @@ proc/cardinalrange(var/center)
throwforce = 5
throw_speed = 1
throw_range = 2
- matter = list("metal" = 100, "waste" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 100, "waste" = 2000)
/obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user)
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index 26ab2b2e98c..08eb4416f65 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -37,6 +37,8 @@
//NOTE: STUFF STOLEN FROM AIRLOCK.DM thx
+/obj/machinery/power/apc/critical
+ is_critical = 1
/obj/machinery/power/apc/high
cell_type = /obj/item/weapon/cell/high
@@ -44,8 +46,8 @@
/obj/machinery/power/apc/super
cell_type = /obj/item/weapon/cell/super
-/obj/machinery/power/apc/super/equipment
- equipment = 2
+/obj/machinery/power/apc/super/critical
+ is_critical = 1
/obj/machinery/power/apc/hyper
cell_type = /obj/item/weapon/cell/hyper
@@ -83,21 +85,18 @@
var/lastused_charging = 0
var/lastused_total = 0
var/main_status = 0
+ var/mob/living/silicon/ai/hacker = null // Malfunction var. If set AI hacked the APC and has full control.
var/wiresexposed = 0
powernet = 0 // set so that APCs aren't found as powernet nodes //Hackish, Horrible, was like this before I changed it :(
- var/malfhack = 0 //New var for my changes to AI malf. --NeoFite
- var/mob/living/silicon/ai/malfai = null //See above --NeoFite
var/debug= 0
var/autoflag= 0 // 0 = off, 1= eqp and lights off, 2 = eqp off, 3 = all on.
-// luminosity = 1
var/has_electronics = 0 // 0 - none, 1 - plugged in, 2 - secured by screwdriver
- var/overload = 1 //used for the Blackout malf module
var/beenhit = 0 // used for counting how many times it has been hit, used for Aliens at the moment
- var/mob/living/silicon/ai/occupier = null
var/longtermpower = 10
var/datum/wires/apc/wires = null
var/update_state = -1
var/update_overlay = -1
+ var/is_critical = 0
var/global/status_overlays = 0
var/updating_icon = 0
var/global/list/status_overlays_lock
@@ -155,31 +154,34 @@
if (building==0)
init()
else
- area = src.loc.loc:master
- area.apc |= src
+ area = get_area(src)
+ area.apc = src
opened = 1
operating = 0
name = "[area.name] APC"
stat |= MAINT
src.update_icon()
- spawn(5)
- src.update()
/obj/machinery/power/apc/Destroy()
- if(operating && malf && src.z in config.station_levels) //if (is_type_in_list(get_area(src), the_station_areas))
- malf.hacked_apcs -= src
+ src.update()
+ area.apc = null
area.power_light = 0
area.power_equip = 0
area.power_environ = 0
area.power_change()
if(wires)
- wires.Destroy()
+ qdel(wires)
wires = null
if(cell)
cell.loc = loc
cell = null
if(terminal)
- disconnect_terminal()
+ qdel(terminal)
+ terminal = null
+
+ // Malf AI, removes the APC from AI's hacked APCs list.
+ if((hacker) && (hacker.hacked_apcs) && (src in hacker.hacked_apcs))
+ hacker.hacked_apcs -= src
..()
@@ -206,7 +208,7 @@
else
src.area = get_area_name(areastring)
name = "\improper [area.name] APC"
- area.apc |= src
+ area.apc = src
update_icon()
make_terminal()
@@ -233,8 +235,8 @@
else
if (stat & MAINT)
user << "The cover is closed. Something wrong with it: it doesn't work."
- else if (malfhack)
- user << "The cover is broken. It may be hard to force it open."
+ else if (hacker)
+ user << "The cover is locked."
else
user << "The cover is closed."
@@ -338,7 +340,7 @@
update_state |= UPSTATE_OPENED1
if(opened==2)
update_state |= UPSTATE_OPENED2
- else if(emagged || malfai)
+ else if(emagged || hacker)
update_state |= UPSTATE_BLUESCREEN
else if(wiresexposed)
update_state |= UPSTATE_WIREEXP
@@ -417,7 +419,7 @@
if(do_after(user, 50))
if (has_electronics==1)
has_electronics = 0
- if ((stat & BROKEN) || malfhack)
+ if ((stat & BROKEN))
user.visible_message(\
"[user.name] has broken the power control board inside [src.name]!",\
"You broke the charred power control board and remove the remains.",
@@ -431,7 +433,7 @@
else if (opened!=2) //cover isn't removed
opened = 0
update_icon()
- else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || malfhack) )
+ else if (istype(W, /obj/item/weapon/crowbar) && !((stat & BROKEN) || hacker) )
if(coverlocked && !(stat & MAINT))
user << "The cover is locked and cannot be opened."
return
@@ -442,18 +444,21 @@
if(cell)
user << "There is a power cell already installed."
return
- else
- if (stat & MAINT)
- user << "There is no connector for your power cell."
- return
- user.drop_item()
- W.loc = src
- cell = W
- user.visible_message(\
- "[user.name] has inserted the power cell to [src.name]!",\
- "You insert the power cell.")
- chargecount = 0
- update_icon()
+ if (stat & MAINT)
+ user << "There is no connector for your power cell."
+ return
+ if(W.w_class != 3)
+ user << "\The [W] is too [W.w_class < 3? "small" : "large"] to fit here."
+ return
+
+ user.drop_item()
+ W.loc = src
+ cell = W
+ user.visible_message(\
+ "[user.name] has inserted the power cell to [src.name]!",\
+ "You insert the power cell.")
+ chargecount = 0
+ update_icon()
else if (istype(W, /obj/item/weapon/screwdriver)) // haxing
if(opened)
if (cell)
@@ -490,6 +495,8 @@
user << "You must close the panel"
else if(stat & (BROKEN|MAINT))
user << "Nothing happens."
+ else if(hacker)
+ user << "Access denied."
else
if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN))
locked = !locked
@@ -497,7 +504,7 @@
update_icon()
else
user << "Access denied."
- else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || malfhack)) // trying to unlock with an emag card
+ else if (istype(W, /obj/item/weapon/card/emag) && !(emagged || hacker)) // trying to unlock with an emag card
if(opened)
user << "You must close the cover to swipe an ID card."
else if(wiresexposed)
@@ -559,7 +566,7 @@
new /obj/item/stack/cable_coil(loc,10)
user << "You cut the cables and dismantle the power terminal."
qdel(terminal)
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN) || malfhack))
+ else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && !((stat & BROKEN)))
user.visible_message("[user.name] inserts the power control board into [src].", \
"You start to insert the power control board into the frame...")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
@@ -568,7 +575,7 @@
has_electronics = 1
user << "You place the power control board inside the frame."
qdel(W)
- else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN) || malfhack))
+ else if (istype(W, /obj/item/weapon/module/power_control) && opened && has_electronics==0 && ((stat & BROKEN)))
user << "You cannot put the board inside, the frame is damaged."
return
else if (istype(W, /obj/item/weapon/weldingtool) && opened && has_electronics==0 && !terminal)
@@ -582,8 +589,8 @@
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
if(do_after(user, 50))
if(!src || !WT.remove_fuel(3, user)) return
- if (emagged || malfhack || (stat & BROKEN) || opened==2)
- new /obj/item/stack/sheet/metal(loc)
+ if (emagged || (stat & BROKEN) || opened==2)
+ new /obj/item/stack/material/steel(loc)
user.visible_message(\
"[src] has been cut apart by [user.name] with the weldingtool.",\
"You disassembled the broken APC frame.",\
@@ -605,7 +612,7 @@
"You replace the damaged APC frontal panel with a new one.")
qdel(W)
update_icon()
- else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || malfhack))
+ else if (istype(W, /obj/item/apc_frame) && opened && ((stat & BROKEN) || hacker))
if (has_electronics)
user << "You cannot repair this APC until you remove the electronics still inside."
return
@@ -617,13 +624,14 @@
"You replace the damaged APC frame with new one.")
qdel(W)
stat &= ~BROKEN
- malfai = null
- malfhack = 0
+ // Malf AI, removes the APC from AI's hacked APCs list.
+ if(hacker && hacker.hacked_apcs && src in hacker.hacked_apcs)
+ hacker.hacked_apcs -= src
if (opened==2)
opened = 1
update_icon()
else
- if (((stat & BROKEN) || malfhack) \
+ if (((stat & BROKEN) || hacker) \
&& !opened \
&& W.force >= 5 \
&& W.w_class >= 3.0 \
@@ -657,34 +665,7 @@
if(istype(user,/mob/living/carbon/human))
var/mob/living/carbon/human/H = user
- if(H.species.flags & IS_SYNTHETIC && H.a_intent == I_GRAB)
- if(emagged || stat & BROKEN)
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- H << "\red The APC power currents surge eratically, damaging your chassis!"
- H.adjustFireLoss(10,0)
- else if(src.cell && src.cell.charge > 0)
- if(H.nutrition < 450)
-
- if(src.cell.charge >= 500)
- H.nutrition += 50
- src.cell.charge -= 500
- else
- H.nutrition += src.cell.charge/10
- src.cell.charge = 0
-
- user << "\blue You slot your fingers into the APC interface and siphon off some of the stored charge for your own use."
- if(src.cell.charge < 0) src.cell.charge = 0
- if(H.nutrition > 500) H.nutrition = 500
- src.charging = 1
-
- else
- user << "\blue You are already fully charged."
- else
- user << "There is no charge to draw from that APC."
- return
- else if(H.species.can_shred(H))
+ if(H.species.can_shred(H))
user.visible_message("\red [user.name] slashes at the [src.name]!", "\blue You slash at the [src.name]!")
playsound(src.loc, 'sound/weapons/slash.ogg', 100, 1)
@@ -707,7 +688,7 @@
if(cell)
user.put_in_hands(cell)
cell.add_fingerprint(user)
- cell.updateicon()
+ cell.update_icon()
src.cell = null
user.visible_message("[user.name] removes the power cell from [src.name]!",\
@@ -736,21 +717,6 @@
return ui_interact(user)
-/obj/machinery/power/apc/proc/get_malf_status(mob/user)
- if (malf && (user.mind in malf.current_antagonists) && istype(user, /mob/living/silicon/ai))
- if (src.malfai == (user:parent ? user:parent : user))
- if (src.occupier == user)
- return 3 // 3 = User is shunted in this APC
- else if (istype(user.loc, /obj/machinery/power/apc))
- return 4 // 4 = User is shunted in another APC
- else
- return 2 // 2 = APC hacked by user, and user is in its core.
- else
- return 1 // 1 = APC not hacked.
- else
- return 0 // 0 = User is not a Malf AI
-
-
/obj/machinery/power/apc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
if(!user)
return
@@ -766,7 +732,6 @@
"totalCharging" = round(lastused_charging),
"coverLocked" = coverlocked,
"siliconUser" = istype(user, /mob/living/silicon),
- "malfStatus" = get_malf_status(user),
"powerChannels" = list(
list(
@@ -856,23 +821,22 @@
return 0
autoflag = 5
if (istype(user, /mob/living/silicon))
+ var/permit = 0 // Malfunction variable. If AI hacks APC it can control it even without AI control wire.
var/mob/living/silicon/ai/AI = user
var/mob/living/silicon/robot/robot = user
- if ( \
- src.aidisabled || \
- malfhack && istype(malfai) && \
- ( \
- (istype(AI) && (malfai!=AI && malfai != AI.parent)) || \
- (istype(robot) && (robot in malfai.connected_robots)) \
- ) \
- )
+ if(hacker)
+ if(hacker == AI)
+ permit = 1
+ else if(istype(robot) && robot.connected_ai && robot.connected_ai == hacker) // Cyborgs can use APCs hacked by their AI
+ permit = 1
+
+ if(aidisabled && !permit)
if(!loud)
user << "\The [src] have AI control disabled!"
return 0
else
- if ((!in_range(src, user) || !istype(src.loc, /turf)))
+ if ((!in_range(src, user) || !istype(src.loc, /turf) || hacker)) // AI-hacked APCs cannot be controlled by other AIs, unlinked cyborgs or humans.
return 0
-
var/mob/living/carbon/human/H = user
if (istype(H))
if(H.getBrainLoss() >= 60)
@@ -929,28 +893,6 @@
if(istype(usr, /mob/living/silicon))
src.overload_lighting()
- else if (href_list["malfhack"])
- var/mob/living/silicon/ai/malfai = usr
- if(get_malf_status(malfai)==1)
- if (malfai.malfhacking)
- malfai << "You are already hacking an APC."
- return 1
- malfai << "Beginning override of APC systems. This takes some time, and you cannot perform other actions during the process."
- malfai.malfhack = src
- malfai.malfhacking = 1
- sleep(600)
- if(src)
- if (!src.aidisabled)
- malfai.malfhack = null
- malfai.malfhacking = 0
- locked = 1
- if(usr:parent)
- src.malfai = usr:parent
- else
- src.malfai = usr
- malfai << "Hack complete. The APC is now under your exclusive control."
- update_icon()
-
else if (href_list["toggleaccess"])
if(istype(usr, /mob/living/silicon))
if(emagged || (stat & (BROKEN|MAINT)))
@@ -967,25 +909,21 @@
update_icon()
/obj/machinery/power/apc/proc/ion_act()
- //intended to be exactly the same as an AI malf attack
- if(!src.malfhack && src.z in config.station_levels)
- if(prob(3))
- src.locked = 1
- if (src.cell.charge > 0)
-// world << "\red blew APC in [src.loc.loc]"
- src.cell.charge = 0
- cell.corrupt()
- src.malfhack = 1
- update_icon()
- var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
- smoke.set_up(3, 0, src.loc)
- smoke.attach(src)
- smoke.start()
- var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
- s.set_up(3, 1, src)
- s.start()
- visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \
- "You hear sizzling electronics.")
+ if(prob(3))
+ src.locked = 1
+ if (src.cell.charge > 0)
+ src.cell.charge = 0
+ cell.corrupt()
+ update_icon()
+ var/datum/effect/effect/system/smoke_spread/smoke = new /datum/effect/effect/system/smoke_spread()
+ smoke.set_up(3, 0, src.loc)
+ smoke.attach(src)
+ smoke.start()
+ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread
+ s.set_up(3, 1, src)
+ s.start()
+ visible_message("The [src.name] suddenly lets out a blast of smoke and some sparks!", \
+ "You hear sizzling electronics.")
/obj/machinery/power/apc/surplus()
@@ -1188,8 +1126,6 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
/obj/machinery/power/apc/emp_act(severity)
if(cell)
cell.emp_act(severity)
- if(occupier)
- occupier.emp_act(severity)
lighting = 0
equipment = 0
@@ -1245,19 +1181,19 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
update_icon()
update()
-// overload all the lights in this APC area
+// overload the lights in this APC area
-/obj/machinery/power/apc/proc/overload_lighting()
+/obj/machinery/power/apc/proc/overload_lighting(var/chance = 100)
if(/* !get_connection() || */ !operating || shorted)
return
if( cell && cell.charge>=20)
cell.use(20);
spawn(0)
- for(var/area/A in area.related)
- for(var/obj/machinery/light/L in A)
+ for(var/obj/machinery/light/L in area)
+ if(prob(chance))
L.on = 1
L.broken()
- sleep(1)
+ sleep(1)
/obj/machinery/power/apc/proc/setsubsystem(val)
if(cell && cell.charge > 0)
@@ -1267,4 +1203,14 @@ obj/machinery/power/apc/proc/autoset(var/val, var/on)
else
return 0
+// Malfunction: Transfers APC under AI's control
+/obj/machinery/power/apc/proc/ai_hack(var/mob/living/silicon/ai/A = null)
+ if(!A || !A.hacked_apcs || hacker || aidisabled || A.stat == DEAD)
+ return 0
+ src.hacker = A
+ A.hacked_apcs += src
+ locked = 1
+ update_icon()
+ return 1
+
#undef APC_UPDATE_ICON_COOLDOWN
diff --git a/code/modules/power/batteryrack.dm b/code/modules/power/batteryrack.dm
index ee6a0dfd9c6..a70b19421ec 100644
--- a/code/modules/power/batteryrack.dm
+++ b/code/modules/power/batteryrack.dm
@@ -87,8 +87,6 @@
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
I.loc = src.loc
qdel(src)
return 1
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index abf5f0e1994..8960113159e 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -475,7 +475,7 @@ obj/structure/cable/proc/cableColor(var/colorC)
w_class = 2.0
throw_speed = 2
throw_range = 5
- matter = list("metal" = 50, "glass" = 20)
+ matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 20)
flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "coil"
@@ -512,24 +512,25 @@ obj/structure/cable/proc/cableColor(var/colorC)
///////////////////////////////////
//you can use wires to heal robotics
-/obj/item/stack/cable_coil/attack(mob/M as mob, mob/user as mob)
- if(istype(M,/mob/living/carbon/human))
+/obj/item/stack/cable_coil/afterattack(var/mob/M, var/mob/user)
+
+ if(ishuman(M))
var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/S = H.get_organ(user.zone_sel.selecting)
- if(!(S.status & ORGAN_ROBOT) || user.a_intent != "help")
+ var/obj/item/organ/external/S = H.organs_by_name[user.zone_sel.selecting]
+
+ if (!S) return
+ if(!(S.status & ORGAN_ROBOT) || user.a_intent != I_HELP)
return ..()
- if(H.species.flags & IS_SYNTHETIC)
- if(M == user)
- user << "\red You can't repair damage to your own body - it's against OH&S."
- return
-
- if(S.burn_dam > 0 && use(1))
- S.heal_damage(0,15,0,1)
- user.visible_message("\red \The [user] repairs some burn damage on \the [M]'s [S.name] with \the [src].")
- return
- else
- user << "Nothing to fix!"
+ if(S.burn_dam)
+ if(S.burn_dam < ROBOLIMB_SELF_REPAIR_CAP)
+ S.heal_damage(0,15,0,1)
+ user.visible_message("\The [user] repairs some burn damage on \the [M]'s [S.name] with \the [src].")
+ else if(S.open != 2)
+ user << "The damage is far too severe to patch over externally."
+ return 1
+ else if(S.open != 2)
+ user << "Nothing to fix!"
else
return ..()
@@ -612,6 +613,12 @@ obj/structure/cable/proc/cableColor(var/colorC)
// Items usable on a cable coil :
// - Wirecutters : cut them duh !
// - Cable coil : merge cables
+/obj/item/stack/cable_coil/proc/can_merge(var/obj/item/stack/cable_coil/C)
+ return color == C.color
+
+/obj/item/stack/cable_coil/cyborg/can_merge()
+ return 1
+
/obj/item/stack/cable_coil/attackby(obj/item/weapon/W, mob/user)
..()
if( istype(W, /obj/item/weapon/wirecutters) && src.get_amount() > 1)
@@ -622,6 +629,11 @@ obj/structure/cable/proc/cableColor(var/colorC)
return
else if(istype(W, /obj/item/stack/cable_coil))
var/obj/item/stack/cable_coil/C = W
+
+ if(!can_merge(C))
+ user << "These coils do not go together."
+ return
+
if(C.get_amount() >= get_max_amount())
user << "The coil is too long, you cannot add any more cable to it."
return
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index efccd0aa4f1..ebae74cd274 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -6,10 +6,11 @@
..()
charge = maxcharge
- spawn(5)
- updateicon()
+/obj/item/weapon/cell/initialize()
+ ..()
+ update_icon()
-/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/amount = 0)
+/obj/item/weapon/cell/drain_power(var/drain_check, var/surge, var/power = 0)
if(drain_check)
return 1
@@ -17,11 +18,11 @@
if(charge <= 0)
return 0
- var/cell_amt = min((amount * CELLRATE), charge)
- use(cell_amt)
- return cell_amt / CELLRATE
+ var/cell_amt = power * CELLRATE
-/obj/item/weapon/cell/proc/updateicon()
+ return use(cell_amt) / CELLRATE
+
+/obj/item/weapon/cell/update_icon()
overlays.Cut()
if(charge < 0.01)
@@ -37,14 +38,25 @@
/obj/item/weapon/cell/proc/fully_charged()
return (charge == maxcharge)
-// use power from a cell
+// checks if the power cell is able to provide the specified amount of charge
+/obj/item/weapon/cell/proc/check_charge(var/amount)
+ return (charge >= amount)
+
+// use power from a cell, returns the amount actually used
/obj/item/weapon/cell/proc/use(var/amount)
if(rigged && amount > 0)
explode()
return 0
+ var/used = min(charge, amount)
+ charge -= used
+ return used
- if(charge < amount) return 0
- charge = (charge - amount)
+// Checks if the specified amount can be provided. If it can, it removes the amount
+// from the cell and returns 1. Otherwise does nothing and returns 0.
+/obj/item/weapon/cell/proc/checked_use(var/amount)
+ if(!check_charge(amount))
+ return 0
+ use(amount)
return 1
// recharge the cell
@@ -55,12 +67,6 @@
if(maxcharge < amount) return 0
var/amount_used = min(maxcharge-charge,amount)
- if(crit_fail) return 0
- if(!prob(reliability))
- minor_fault++
- if(prob(minor_fault))
- crit_fail = 1
- return 0
charge += amount_used
return amount_used
@@ -73,8 +79,6 @@
user << "[desc]\nThe manufacturer's label states this cell has a power rating of [maxcharge], and that you should not swallow it.\nThe charge meter reads [round(src.percent() )]%."
else
user << "This power cell has an exciting chrome finish, as it is an uber-capacity cell type! It has a power rating of [maxcharge]!\nThe charge meter reads [round(src.percent() )]%."
- if(crit_fail)
- user << "\red This power cell seems to be faulty."
/obj/item/weapon/cell/attackby(obj/item/W, mob/user)
..()
@@ -135,8 +139,6 @@
charge -= maxcharge / severity
if (charge < 0)
charge = 0
- if(reliability != 100 && prob(50/severity))
- reliability -= 10 / severity
..()
/obj/item/weapon/cell/ex_act(severity)
diff --git a/code/modules/power/engine.dm b/code/modules/power/engine.dm
index a9095b3a783..6ffe6603390 100644
--- a/code/modules/power/engine.dm
+++ b/code/modules/power/engine.dm
@@ -18,12 +18,12 @@
/turf/simulated/floor/engine/ex_act(severity)
switch(severity)
if(1.0)
- ChangeTurf(/turf/space)
+ ChangeTurf(get_base_turf(src.z))
qdel(src)
return
if(2.0)
if (prob(50))
- ChangeTurf(/turf/space)
+ ChangeTurf(get_base_turf(src.z))
qdel(src)
return
else
@@ -31,7 +31,7 @@
/turf/simulated/floor/engine/blob_act()
if (prob(25))
- ChangeTurf(/turf/space)
+ ChangeTurf(get_base_turf(src.z))
qdel(src)
return
return
\ No newline at end of file
diff --git a/code/modules/power/gravitygenerator.dm b/code/modules/power/gravitygenerator.dm
index 53599073b2b..fe51b4152e1 100644
--- a/code/modules/power/gravitygenerator.dm
+++ b/code/modules/power/gravitygenerator.dm
@@ -50,8 +50,8 @@
for(var/area/A in range(src,effectiverange))
if(A.name == "Space")
continue // No (de)gravitizing space.
- if(A.master && !( A.master in localareas) )
- localareas += A.master
+ if(!(A in localareas))
+ localareas += A
/obj/machinery/computer/gravity_control_computer/proc/findgenerator()
var/obj/machinery/gravity_generator/foundgenerator = null
@@ -125,7 +125,7 @@
for(var/area/A in gravity_generator:localareas)
var/obj/machinery/gravity_generator/G
for(G in machines)
- if((A.master in G.localareas) && (G.on))
+ if((A in G.localareas) && (G.on))
break
if(!G)
A.gravitychange(0,A)
@@ -137,4 +137,4 @@
A.gravitychange(1,A)
src.updateUsrDialog()
- return
\ No newline at end of file
+ return
diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm
index ea390427ce4..37133f7ff3d 100644
--- a/code/modules/power/lighting.dm
+++ b/code/modules/power/lighting.dm
@@ -8,65 +8,8 @@
#define LIGHT_EMPTY 1
#define LIGHT_BROKEN 2
#define LIGHT_BURNED 3
-
#define LIGHT_BULB_TEMPERATURE 400 //K - used value for a 60W bulb
-/obj/item/light_fixture_frame
- name = "light fixture frame"
- desc = "Used for building lights."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "tube-construct-item"
- flags = CONDUCT
- var/fixture_type = "tube"
- var/obj/machinery/light/newlight = null
- var/sheets_refunded = 2
-
-/obj/item/light_fixture_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
- qdel(src)
- return
- ..()
-
-/obj/item/light_fixture_frame/proc/try_build(turf/on_wall)
- if (get_dist(on_wall,usr)>1)
- return
- var/ndir = get_dir(usr,on_wall)
- if (!(ndir in cardinal))
- return
- var/turf/loc = get_turf(usr)
- if (!istype(loc, /turf/simulated/floor))
- usr << "\red [src.name] cannot be placed on this spot."
- return
- usr << "Attaching [src] to the wall."
- playsound(src.loc, 'sound/machines/click.ogg', 75, 1)
- var/constrdir = usr.dir
- var/constrloc = usr.loc
- if (!do_after(usr, 30))
- return
- switch(fixture_type)
- if("bulb")
- newlight = new /obj/machinery/light_construct/small(constrloc)
- if("tube")
- newlight = new /obj/machinery/light_construct(constrloc)
- newlight.dir = constrdir
- newlight.fingerprints = src.fingerprints
- newlight.fingerprintshidden = src.fingerprintshidden
- newlight.fingerprintslast = src.fingerprintslast
-
- usr.visible_message("[usr.name] attaches [src] to the wall.", \
- "You attach [src] to the wall.")
- qdel(src)
-
-/obj/item/light_fixture_frame/small
- name = "small light fixture frame"
- desc = "Used for building small lights."
- icon = 'icons/obj/lighting.dmi'
- icon_state = "bulb-construct-item"
- flags = CONDUCT
- fixture_type = "bulb"
- sheets_refunded = 1
-
/obj/machinery/light_construct
name = "light fixture frame"
desc = "A light fixture under construction."
@@ -107,7 +50,7 @@
usr << "You begin deconstructing [src]."
if (!do_after(usr, 30))
return
- new /obj/item/stack/sheet/metal( get_turf(src.loc), sheets_refunded )
+ new /obj/item/stack/material/steel( get_turf(src.loc), sheets_refunded )
user.visible_message("[user.name] deconstructs [src].", \
"You deconstruct [src].", "You hear a noise.")
playsound(src.loc, 'sound/items/Deconstruct.ogg', 75, 1)
@@ -199,7 +142,9 @@
power_channel = LIGHT //Lights are calc'd via area so they dont need to be in the machine list
var/on = 0 // 1 if on, 0 if off
var/on_gs = 0
- var/brightness = 8 // luminosity when on, also used in power calculation
+ var/brightness_range = 8 // luminosity when on, also used in power calculation
+ var/brightness_power = 3
+ var/brightness_color = null
var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
var/flickering = 0
var/light_type = /obj/item/weapon/light/tube // the type of light item
@@ -215,7 +160,9 @@
icon_state = "bulb1"
base_state = "bulb"
fitting = "bulb"
- brightness = 4
+ brightness_range = 4
+ brightness_power = 2
+ brightness_color = "#a0a080"
desc = "A small lighting fixture."
light_type = /obj/item/weapon/light/bulb
@@ -224,7 +171,8 @@
name = "spotlight"
fitting = "large tube"
light_type = /obj/item/weapon/light/tube/large
- brightness = 12
+ brightness_range = 12
+ brightness_power = 4
/obj/machinery/light/built/New()
status = LIGHT_EMPTY
@@ -241,13 +189,20 @@
..()
spawn(2)
+ var/area/A = get_area(src)
+ if(A && !A.requires_power)
+ on = 1
+
switch(fitting)
if("tube")
- brightness = 8
+ brightness_range = 8
+ brightness_power = 3
if(prob(2))
broken(1)
if("bulb")
- brightness = 4
+ brightness_range = 4
+ brightness_power = 2
+ brightness_color = "#a0a080"
if(prob(5))
broken(1)
spawn(1)
@@ -281,7 +236,7 @@
update_icon()
if(on)
- if(luminosity != brightness)
+ if(light_range != brightness_range || light_power != brightness_power || light_color != brightness_color)
switchcount++
if(rigged)
if(status == LIGHT_OK && trigger)
@@ -295,15 +250,15 @@
status = LIGHT_BURNED
icon_state = "[base_state]-burned"
on = 0
- SetLuminosity(0)
+ set_light(0)
else
use_power = 2
- SetLuminosity(brightness)
+ set_light(brightness_range, brightness_power, brightness_color)
else
use_power = 1
- SetLuminosity(0)
+ set_light(0)
- active_power_usage = (luminosity * 10)
+ active_power_usage = ((light_range + light_power) * 10)
if(on != on_gs)
on_gs = on
@@ -316,6 +271,7 @@
if(!(status == LIGHT_OK||status == LIGHT_BURNED))
return
visible_message("[user] smashes the light!")
+ user.do_attack_animation(src)
broken()
return 1
@@ -364,8 +320,9 @@
user << "You insert the [L.name]."
switchcount = L.switchcount
rigged = L.rigged
- brightness = L.brightness
- l_color = L.color
+ brightness_range = L.brightness_range
+ brightness_power = L.brightness_power
+ brightness_color = L.brightness_color
on = has_power()
update()
@@ -441,7 +398,7 @@
// true if area has power and lightswitch is on
/obj/machinery/light/proc/has_power()
var/area/A = src.loc.loc
- return A.master.lightswitch && A.master.power_light
+ return A.lightswitch && A.power_light
/obj/machinery/light/proc/flicker(var/amount = rand(10, 20))
if(flickering) return
@@ -511,8 +468,9 @@
var/obj/item/weapon/light/L = new light_type()
L.status = status
L.rigged = rigged
- L.brightness = src.brightness
- L.color = l_color
+ L.brightness_range = brightness_range
+ L.brightness_power = brightness_power
+ L.brightness_color = brightness_color
// light item inherits the switchcount, then zero it
L.switchcount = switchcount
@@ -537,8 +495,9 @@
var/obj/item/weapon/light/L = new light_type()
L.status = status
L.rigged = rigged
- L.brightness = brightness
- L.color = l_color
+ L.brightness_range = brightness_range
+ L.brightness_power = brightness_power
+ L.brightness_color = brightness_color
// light item inherits the switchcount, then zero it
L.switchcount = switchcount
@@ -571,7 +530,6 @@
if(status == LIGHT_OK)
return
status = LIGHT_OK
- brightness = initial(brightness)
on = 1
update()
@@ -606,14 +564,13 @@
/obj/machinery/light/process()
if(on)
- use_power(luminosity * LIGHTING_POWER_FACTOR, LIGHT)
+ use_power(light_range * LIGHTING_POWER_FACTOR, LIGHT)
// called when area power state changes
/obj/machinery/light/power_change()
spawn(10)
var/area/A = src.loc.loc
- A = A.master
seton(A.lightswitch && A.power_light)
// called when on fire
@@ -645,9 +602,11 @@
var/status = 0 // LIGHT_OK, LIGHT_BURNED or LIGHT_BROKEN
var/base_state
var/switchcount = 0 // number of times switched
- matter = list("metal" = 60)
+ matter = list(DEFAULT_WALL_MATERIAL = 60)
var/rigged = 0 // true if rigged to explode
- var/brightness = 2 //how much light it gives off
+ var/brightness_range = 2 //how much light it gives off
+ var/brightness_power = 1
+ var/brightness_color = null
/obj/item/weapon/light/tube
name = "light tube"
@@ -656,12 +615,14 @@
base_state = "ltube"
item_state = "c_tube"
matter = list("glass" = 100)
- brightness = 8
+ brightness_range = 8
+ brightness_power = 3
/obj/item/weapon/light/tube/large
w_class = 2
name = "large light tube"
- brightness = 15
+ brightness_range = 15
+ brightness_power = 4
/obj/item/weapon/light/bulb
name = "light bulb"
@@ -670,7 +631,9 @@
base_state = "lbulb"
item_state = "contvapour"
matter = list("glass" = 100)
- brightness = 5
+ brightness_range = 5
+ brightness_power = 2
+ brightness_color = "#a0a080"
/obj/item/weapon/light/throw_impact(atom/hit_atom)
..()
@@ -683,7 +646,8 @@
base_state = "fbulb"
item_state = "egg4"
matter = list("glass" = 100)
- brightness = 5
+ brightness_range = 5
+ brightness_power = 2
// update the icon state and description of the light
@@ -704,9 +668,9 @@
..()
switch(name)
if("light tube")
- brightness = rand(6,9)
+ brightness_range = rand(6,9)
if("light bulb")
- brightness = rand(4,6)
+ brightness_range = rand(4,6)
update()
diff --git a/code/modules/power/pacman2.dm b/code/modules/power/pacman2.dm
index 0664c529d25..1060a466dee 100644
--- a/code/modules/power/pacman2.dm
+++ b/code/modules/power/pacman2.dm
@@ -43,21 +43,16 @@
RefreshParts()
var/temp_rating = 0
- var/temp_reliability = 0
for(var/obj/item/weapon/stock_parts/SP in component_parts)
if(istype(SP, /obj/item/weapon/stock_parts/matter_bin))
//max_coins = SP.rating * SP.rating * 1000
else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
temp_rating += SP.rating
- for(var/obj/item/weapon/CP in component_parts)
- temp_reliability += CP.reliability
- reliability = min(round(temp_reliability / 4), 100)
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
examine(mob/user)
..(user)
user << "\blue The generator has [P.air_contents.phoron] units of fuel left, producing [power_gen] per cycle."
- if(crit_fail) user << "\red The generator seems to have broken down."
handleInactive()
heat -= 2
@@ -108,8 +103,6 @@
else if(istype(O, /obj/item/weapon/crowbar) && !open)
var/obj/machinery/constructable_frame/machine_frame/new_frame = new /obj/machinery/constructable_frame/machine_frame(src.loc)
for(var/obj/item/I in component_parts)
- if(I.reliability < 100)
- I.crit_fail = 1
I.loc = src.loc
new_frame.state = 2
new_frame.icon_state = "box_1"
@@ -159,7 +152,7 @@
src.add_fingerprint(usr)
if(href_list["action"])
if(href_list["action"] == "enable")
- if(!active && HasFuel() && !crit_fail)
+ if(!active && HasFuel())
active = 1
icon_state = "portgen1"
src.updateUsrDialog()
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index bd113ff268b..a37c41a0aa1 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -15,7 +15,7 @@
var/power_output = 1
/obj/machinery/power/port_gen/proc/IsBroken()
- return (crit_fail || (stat & (BROKEN|EMPED)))
+ return (stat & (BROKEN|EMPED))
/obj/machinery/power/port_gen/proc/HasFuel() //Placeholder for fuel check.
return 1
@@ -87,7 +87,7 @@
desc = "A power generator that runs on solid phoron sheets. Rated for 80 kW max safe output."
var/sheet_name = "Phoron Sheets"
- var/sheet_path = /obj/item/stack/sheet/mineral/phoron
+ var/sheet_path = /obj/item/stack/material/phoron
var/board_path = "/obj/item/weapon/circuitboard/pacman"
/*
@@ -137,13 +137,6 @@
else if(istype(SP, /obj/item/weapon/stock_parts/micro_laser) || istype(SP, /obj/item/weapon/stock_parts/capacitor))
temp_rating += SP.rating
- var/temp_reliability = 0
- var/part_count = 0
- for(var/obj/item/weapon/CP in component_parts)
- temp_reliability += CP.reliability
- part_count++
-
- reliability = min(round(temp_reliability / part_count), 100)
power_gen = round(initial(power_gen) * (max(2, temp_rating) / 2))
/obj/machinery/power/port_gen/pacman/examine(mob/user)
@@ -162,19 +155,12 @@
//Removes one stack's worth of material from the generator.
/obj/machinery/power/port_gen/pacman/DropFuel()
if(sheets)
- var/obj/item/stack/sheet/S = new sheet_path(loc)
+ var/obj/item/stack/material/S = new sheet_path(loc)
var/amount = min(sheets, S.max_amount)
S.amount = amount
sheets -= amount
/obj/machinery/power/port_gen/pacman/UseFuel()
- //break down sometimes
- if (reliability < 100)
- if (prob(1) && prob(1) && prob(100 - reliability))
- stat |= BROKEN
- crit_fail = 1
- if (prob(100 - reliability))
- explode()
//how much material are we using this iteration?
var/needed_sheets = power_output / time_per_sheet
@@ -214,7 +200,11 @@
else if (temperature > upper_limit)
bias = max(round((temperature - average)/TEMPERATURE_DIVISOR, 1), -TEMPERATURE_CHANGE_MAX)
- temperature += rand(-7 + bias, 7 + bias)
+ //limit temperature increase so that it cannot raise temperature above upper_limit,
+ //or if it is already above upper_limit, limit the increase to 0.
+ var/inc_limit = max(upper_limit - temperature, 0)
+ var/dec_limit = min(temperature - lower_limit, 0)
+ temperature += between(dec_limit, rand(-7 + bias, 7 + bias), inc_limit)
if (temperature > max_temperature)
overheat()
@@ -403,7 +393,7 @@
name = "S.U.P.E.R.P.A.C.M.A.N.-type Portable Generator"
desc = "A power generator that utilizes uranium sheets as fuel. Can run for much longer than the standard PACMAN type generators. Rated for 80 kW max safe output."
icon_state = "portgen1"
- sheet_path = /obj/item/stack/sheet/mineral/uranium
+ sheet_path = /obj/item/stack/material/uranium
sheet_name = "Uranium Sheets"
time_per_sheet = 576 //same power output, but a 50 sheet stack will last 2 hours at max safe power
board_path = "/obj/item/weapon/circuitboard/pacman/super"
@@ -430,7 +420,7 @@
name = "M.R.S.P.A.C.M.A.N.-type Portable Generator"
desc = "An advanced power generator that runs on tritium. Rated for 200 kW maximum safe output!"
icon_state = "portgen2"
- sheet_path = /obj/item/stack/sheet/mineral/tritium
+ sheet_path = /obj/item/stack/material/tritium
sheet_name = "Tritium Fuel Sheets"
//I don't think tritium has any other use, so we might as well make this rewarding for players
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 9c24866b39d..3b9d094bda8 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -69,20 +69,20 @@
// return 1
var/area/A = src.loc.loc // make sure it's in an area
- if(!A || !isarea(A) || !A.master)
+ if(!A || !isarea(A))
return 0 // if not, then not powered
if(chan == -1)
chan = power_channel
- return A.master.powered(chan) // return power status of the area
+ return A.powered(chan) // return power status of the area
// increment the power usage stats for an area
/obj/machinery/proc/use_power(var/amount, var/chan = -1) // defaults to power_channel
var/area/A = get_area(src) // make sure it's in an area
- if(!A || !isarea(A) || !A.master)
+ if(!A || !isarea(A))
return
if(chan == -1)
chan = power_channel
- A.master.use_power(amount, chan)
+ A.use_power(amount, chan)
/obj/machinery/proc/power_change() // called whenever the power settings of the containing area change
// by default, check equipment channel & set flag
@@ -374,7 +374,7 @@
if (source_area)
source_area.use_power(drained_energy/CELLRATE)
else if (istype(power_source,/datum/powernet))
- var/drained_power = drained_energy/CELLRATE //convert from "joules" to "watts"
+ var/drained_power = drained_energy/CELLRATE
drained_power = PN.draw_power(drained_power)
else if (istype(power_source, /obj/item/weapon/cell))
cell.use(drained_energy)
diff --git a/code/modules/power/powernet.dm b/code/modules/power/powernet.dm
index 97d3afe572f..1d5711b4b32 100644
--- a/code/modules/power/powernet.dm
+++ b/code/modules/power/powernet.dm
@@ -149,8 +149,6 @@
return C
return null
+
/area/proc/get_apc()
- for(var/area/RA in src.related)
- var/obj/machinery/power/apc/FINDME = locate() in RA
- if (FINDME)
- return FINDME
\ No newline at end of file
+ return apc
diff --git a/code/modules/power/rust/circuits_and_design.dm b/code/modules/power/rust/circuits_and_design.dm
index 4c006730613..0b76e5eb41b 100644
--- a/code/modules/power/rust/circuits_and_design.dm
+++ b/code/modules/power/rust/circuits_and_design.dm
@@ -1,20 +1,10 @@
-#define IMPRINTER 1 //For circuits. Uses glass/chemicals.
//////////////////////////////////////
// RUST Core Control computer
/obj/item/weapon/circuitboard/rust_core_control
name = "Circuit board (RUST core controller)"
build_path = "/obj/machinery/computer/rust_core_control"
- origin_tech = "programming=4;engineering=4"
-
-datum/design/rust_core_control
- name = "Circuit Design (RUST core controller)"
- desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine."
- id = "rust_core_control"
- req_tech = list("programming" = 4, "engineering" = 4)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = "/obj/item/weapon/circuitboard/rust_core_control"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
//////////////////////////////////////
// RUST Fuel Control computer
@@ -22,16 +12,7 @@ datum/design/rust_core_control
/obj/item/weapon/circuitboard/rust_fuel_control
name = "Circuit board (RUST fuel controller)"
build_path = "/obj/machinery/computer/rust_fuel_control"
- origin_tech = "programming=4;engineering=4"
-
-datum/design/rust_fuel_control
- name = "Circuit Design (RUST fuel controller)"
- desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine."
- id = "rust_fuel_control"
- req_tech = list("programming" = 4, "engineering" = 4)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = "/obj/item/weapon/circuitboard/rust_fuel_control"
+ origin_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
//////////////////////////////////////
// RUST Fuel Port board
@@ -39,16 +20,7 @@ datum/design/rust_fuel_control
/obj/item/weapon/module/rust_fuel_port
name = "Internal circuitry (RUST fuel port)"
icon_state = "card_mod"
- origin_tech = "engineering=4;materials=5"
-
-datum/design/rust_fuel_port
- name = "Internal circuitry (RUST fuel port)"
- desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine."
- id = "rust_fuel_port"
- req_tech = list("engineering" = 4, "materials" = 5)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$uranium" = 3000)
- build_path = "/obj/item/weapon/module/rust_fuel_port"
+ origin_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 5)
//////////////////////////////////////
// RUST Fuel Compressor board
@@ -56,16 +28,7 @@ datum/design/rust_fuel_port
/obj/item/weapon/module/rust_fuel_compressor
name = "Internal circuitry (RUST fuel compressor)"
icon_state = "card_mod"
- origin_tech = "materials=6;phorontech=4"
-
-datum/design/rust_fuel_compressor
- name = "Circuit Design (RUST fuel compressor)"
- desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine."
- id = "rust_fuel_compressor"
- req_tech = list("materials" = 6, "phorontech" = 4)
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 3000, "$diamond" = 1000)
- build_path = "/obj/item/weapon/module/rust_fuel_compressor"
+ origin_tech = list(TECH_MATERIAL = 6, TECH_PHORON = 4)
//////////////////////////////////////
// RUST Tokamak Core board
@@ -74,8 +37,7 @@ datum/design/rust_fuel_compressor
name = "Internal circuitry (RUST tokamak core)"
build_path = "/obj/machinery/power/rust_core"
board_type = "machine"
- origin_tech = "bluespace=3;phorontech=4;magnets=5;powerstorage=6"
- frame_desc = "Requires 2 Pico Manipulators, 1 Ultra Micro-Laser, 5 Pieces of Cable, 1 Subspace Crystal and 1 Console Screen."
+ origin_tech = list(TECH_BLUESPACE = 3, TECH_PHORON = 4, TECH_MAGNET = 5, TECH_POWER = 6)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/micro_laser/ultra" = 1,
@@ -83,16 +45,6 @@ datum/design/rust_fuel_compressor
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
-datum/design/rust_core
- name = "Internal circuitry (RUST tokamak core)"
- desc = "The circuit board that for a RUST-pattern tokamak fusion core."
- id = "pacman"
- req_tech = list(bluespace = 3, phorontech = 4, magnets = 5, powerstorage = 6)
- build_type = IMPRINTER
- reliability_base = 79
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 3000, "$diamond" = 2000)
- build_path = "/obj/item/weapon/circuitboard/rust_core"
-
//////////////////////////////////////
// RUST Fuel Injector board
@@ -100,21 +52,10 @@ datum/design/rust_core
name = "Internal circuitry (RUST fuel injector)"
build_path = "/obj/machinery/power/rust_fuel_injector"
board_type = "machine"
- origin_tech = "powerstorage=3;engineering=4;phorontech=4;materials=6"
- frame_desc = "Requires 2 Pico Manipulators, 1 Phasic Scanning Module, 1 Super Matter Bin, 1 Console Screen and 5 Pieces of Cable."
+ origin_tech = list(TECH_POWER = 3, TECH_ENGINERING = 4, TECH_PHORON = 4, TECH_MATERIAL = 6)
req_components = list(
"/obj/item/weapon/stock_parts/manipulator/pico" = 2,
"/obj/item/weapon/stock_parts/scanning_module/phasic" = 1,
"/obj/item/weapon/stock_parts/matter_bin/super" = 1,
"/obj/item/weapon/stock_parts/console_screen" = 1,
"/obj/item/stack/cable_coil" = 5)
-
-datum/design/rust_injector
- name = "Internal circuitry (RUST tokamak core)"
- desc = "The circuit board that for a RUST-pattern particle accelerator."
- id = "pacman"
- req_tech = list(powerstorage = 3, engineering = 4, phorontech = 4, materials = 6)
- build_type = IMPRINTER
- reliability_base = 79
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 3000, "$uranium" = 2000)
- build_path = "/obj/item/weapon/circuitboard/rust_core"
diff --git a/code/modules/power/rust/fuel_assembly_port_construction.dm b/code/modules/power/rust/fuel_assembly_port_construction.dm
index 0438249e6df..fa4ededb3d7 100644
--- a/code/modules/power/rust/fuel_assembly_port_construction.dm
+++ b/code/modules/power/rust/fuel_assembly_port_construction.dm
@@ -1,37 +1,3 @@
-
-//frame assembly
-
-/obj/item/rust_fuel_assembly_port_frame
- name = "Fuel Assembly Port frame"
- icon = 'icons/rust.dmi'
- icon_state = "port2"
- w_class = 4
- flags = CONDUCT
-
-/obj/item/rust_fuel_assembly_port_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/plasteel( get_turf(src.loc), 12 )
- qdel(src)
- return
- ..()
-
-/obj/item/rust_fuel_assembly_port_frame/proc/try_build(turf/on_wall)
- if (get_dist(on_wall,usr)>1)
- return
- var/ndir = get_dir(usr,on_wall)
- if (!(ndir in cardinal))
- return
- var/turf/loc = get_turf(usr)
- var/area/A = loc.loc
- if (!istype(loc, /turf/simulated/floor))
- usr << "\red Port cannot be placed on this spot."
- return
- if (A.requires_power == 0 || A.name == "Space")
- usr << "\red Port cannot be placed in this area."
- return
- new /obj/machinery/rust_fuel_assembly_port(loc, ndir, 1)
- qdel(src)
-
//construction steps
/obj/machinery/rust_fuel_assembly_port/New(turf/loc, var/ndir, var/building=0)
..()
@@ -122,7 +88,7 @@
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
if(do_after(user, 50))
if(!src || !WT.remove_fuel(3, user)) return
- new /obj/item/rust_fuel_assembly_port_frame(loc)
+ new /obj/item/frame/rust/assembly(loc)
user.visible_message(\
"\red [src] has been cut away from the wall by [user.name].",\
"You detached the port frame.",\
diff --git a/code/modules/power/rust/fuel_compressor_construction.dm b/code/modules/power/rust/fuel_compressor_construction.dm
index 422a46116bb..9f52a2cf7cf 100644
--- a/code/modules/power/rust/fuel_compressor_construction.dm
+++ b/code/modules/power/rust/fuel_compressor_construction.dm
@@ -1,38 +1,3 @@
-
-//frame assembly
-
-/obj/item/rust_fuel_compressor_frame
- name = "Fuel Compressor frame"
- icon = 'icons/rust.dmi'
- icon_state = "fuel_compressor0"
- w_class = 4
- flags = CONDUCT
-
-/obj/item/rust_fuel_compressor_frame/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if (istype(W, /obj/item/weapon/wrench))
- new /obj/item/stack/sheet/plasteel( get_turf(src.loc), 12 )
- qdel(src)
- return
- ..()
-
-/obj/item/rust_fuel_compressor_frame/proc/try_build(turf/on_wall)
- if (get_dist(on_wall,usr)>1)
- return
- var/ndir = get_dir(usr,on_wall)
- if (!(ndir in cardinal))
- return
- var/turf/loc = get_turf(usr)
- var/area/A = loc.loc
- if (!istype(loc, /turf/simulated/floor))
- usr << "\red Compressor cannot be placed on this spot."
- return
- if (A.requires_power == 0 || A.name == "Space")
- usr << "\red Compressor cannot be placed in this area."
- return
- new /obj/machinery/rust_fuel_assembly_port(loc, ndir, 1)
- qdel(src)
-
-//construction steps
/obj/machinery/rust_fuel_compressor/New(turf/loc, var/ndir, var/building=0)
..()
@@ -149,7 +114,7 @@
playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
if(do_after(user, 50))
if(!src || !WT.remove_fuel(3, user)) return
- new /obj/item/rust_fuel_assembly_port_frame(loc)
+ new /obj/item/frame/rust(loc)
user.visible_message(\
"\red [src] has been cut away from the wall by [user.name].",\
"You detached the compressor frame.",\
diff --git a/code/modules/power/sensors/sensor_monitoring.dm b/code/modules/power/sensors/sensor_monitoring.dm
index 5f561fcde61..c4e9a191e93 100644
--- a/code/modules/power/sensors/sensor_monitoring.dm
+++ b/code/modules/power/sensors/sensor_monitoring.dm
@@ -8,6 +8,7 @@
desc = "Computer designed to remotely monitor power levels around the station"
icon = 'icons/obj/computer.dmi'
icon_state = "power"
+ light_color = "#ffcc33"
//computer stuff
density = 1
diff --git a/code/modules/power/singularity/act.dm b/code/modules/power/singularity/act.dm
index 8e505f107f1..0114269a761 100644
--- a/code/modules/power/singularity/act.dm
+++ b/code/modules/power/singularity/act.dm
@@ -38,17 +38,19 @@
..()
/obj/singularity_act()
- ex_act(1)
- if(src)
- qdel(src)
- return 2
+ if(simulated)
+ ex_act(1)
+ if(src)
+ qdel(src)
+ return 2
/obj/singularity_pull(S, current_size)
- if(anchored)
- if(current_size >= STAGE_FIVE)
+ if(simulated)
+ if(anchored)
+ if(current_size >= STAGE_FIVE)
+ step_towards(src, S)
+ else
step_towards(src, S)
- else
- step_towards(src, S)
/obj/effect/beam/singularity_pull()
return
@@ -76,6 +78,9 @@
return 5000
/obj/machinery/power/supermatter/singularity_act()
+ if(!src.loc)
+ return
+
var/prints = ""
if(src.fingerprintshidden)
prints = ", all touchers : " + src.fingerprintshidden
@@ -102,22 +107,23 @@
continue
if(O.invisibility == 101)
O.singularity_act(src, current_size)
- ChangeTurf(/turf/space)
+ ChangeTurf(get_base_turf(src.z))
return 2
/turf/simulated/wall/singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- if(prob(75))
- dismantle_wall()
- return
- if(current_size == STAGE_FOUR)
- if(prob(30))
- dismantle_wall()
-/turf/simulated/wall/r_wall/singularity_pull(S, current_size)
- if(current_size >= STAGE_FIVE)
- if(prob(30))
- dismantle_wall()
+ if(!reinf_material)
+ if(current_size >= STAGE_FIVE)
+ if(prob(75))
+ dismantle_wall()
+ return
+ if(current_size == STAGE_FOUR)
+ if(prob(30))
+ dismantle_wall()
+ else
+ if(current_size >= STAGE_FIVE)
+ if(prob(30))
+ dismantle_wall()
/turf/space/singularity_act()
return
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index 24758fc27e3..8b512644606 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -9,7 +9,7 @@
density = 0
unacidable = 1
use_power = 0
- luminosity = 4
+ light_range = 4
var/obj/machinery/field_generator/FG1 = null
var/obj/machinery/field_generator/FG2 = null
var/hasShocked = 0 //Used to add a delay between shocks. In some cases this used to crash servers by spawning hundreds of sparks every second.
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index e04268e0a94..76cdf04f0ad 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -8,7 +8,7 @@
anchored = 1
density = 1
layer = 6
- luminosity = 6
+ light_range = 6
unacidable = 1 //Don't comment this out.
var/current_size = 1
@@ -270,8 +270,6 @@
return 1
/obj/singularity/proc/eat()
- set background = BACKGROUND_ENABLED
-
for(var/atom/X in orange(grav_pull, src))
var/dist = get_dist(X, src)
var/obj/singularity/S = src
diff --git a/code/modules/power/smes_construction.dm b/code/modules/power/smes_construction.dm
index b2e584c1366..94e628bad9b 100644
--- a/code/modules/power/smes_construction.dm
+++ b/code/modules/power/smes_construction.dm
@@ -342,8 +342,6 @@
M.state = 2
M.icon_state = "box_1"
for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
I.loc = src.loc
qdel(src)
return
diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm
index 6bdef2c273c..214c4867cb7 100644
--- a/code/modules/power/solar.dm
+++ b/code/modules/power/solar.dm
@@ -50,10 +50,10 @@ var/list/solars_list = list()
/obj/machinery/power/solar/proc/Make(var/obj/item/solar_assembly/S)
if(!S)
S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
+ S.glass_type = /obj/item/stack/material/glass
S.anchored = 1
S.loc = src
- if(S.glass_type == /obj/item/stack/sheet/glass/reinforced) //if the panel is in reinforced glass
+ if(S.glass_type == /obj/item/stack/material/glass/reinforced) //if the panel is in reinforced glass
health *= 2 //this need to be placed here, because panels already on the map don't have an assembly linked to
update_icon()
@@ -91,8 +91,8 @@ var/list/solars_list = list()
if(!(stat & BROKEN))
broken()
else
- new /obj/item/weapon/shard(src.loc)
- new /obj/item/weapon/shard(src.loc)
+ new /obj/item/weapon/material/shard(src.loc)
+ new /obj/item/weapon/material/shard(src.loc)
qdel(src)
return
return
@@ -153,13 +153,13 @@ var/list/solars_list = list()
switch(severity)
if(1.0)
if(prob(15))
- new /obj/item/weapon/shard( src.loc )
+ new /obj/item/weapon/material/shard( src.loc )
qdel(src)
return
if(2.0)
if (prob(25))
- new /obj/item/weapon/shard( src.loc )
+ new /obj/item/weapon/material/shard( src.loc )
qdel(src)
return
@@ -231,7 +231,7 @@ var/list/solars_list = list()
// Give back the glass type we were supplied with
/obj/item/solar_assembly/proc/give_glass()
if(glass_type)
- var/obj/item/stack/sheet/S = new glass_type(src.loc)
+ var/obj/item/stack/material/S = new glass_type(src.loc)
S.amount = 2
glass_type = null
@@ -251,8 +251,8 @@ var/list/solars_list = list()
playsound(src.loc, 'sound/items/Ratchet.ogg', 75, 1)
return 1
- if(istype(W, /obj/item/stack/sheet/glass))
- var/obj/item/stack/sheet/S = W
+ if(istype(W, /obj/item/stack/material/glass))
+ var/obj/item/stack/material/S = W
if(S.use(2))
glass_type = W.type
playsound(src.loc, 'sound/machines/click.ogg', 50, 1)
@@ -420,7 +420,7 @@ var/list/solars_list = list()
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ new /obj/item/weapon/material/shard( src.loc )
var/obj/item/weapon/circuitboard/solar_control/M = new /obj/item/weapon/circuitboard/solar_control( A )
for (var/obj/C in src)
C.loc = src.loc
@@ -545,6 +545,17 @@ var/list/solars_list = list()
broken()
src.density = 0
+// Used for mapping in solar array which automatically starts itself (telecomms, for example)
+/obj/machinery/power/solar_control/autostart
+ track = 2 // Auto tracking mode
+
+/obj/machinery/power/solar_control/autostart/New()
+ ..()
+ spawn(150) // Wait 15 seconds to ensure everything was set up properly (such as, powernets, solar panels, etc.
+ src.search_for_connected()
+ if(connected_tracker && track == 2)
+ connected_tracker.set_angle(sun.angle)
+ src.set_panels(cdir)
//
// MISC
diff --git a/code/modules/power/terminal.dm b/code/modules/power/terminal.dm
index 24245f00e40..cec6bd57f60 100644
--- a/code/modules/power/terminal.dm
+++ b/code/modules/power/terminal.dm
@@ -23,6 +23,7 @@
/obj/machinery/power/terminal/Destroy()
if(master)
master.disconnect_terminal()
+ master = null
return ..()
/obj/machinery/power/terminal/hide(var/i)
@@ -36,4 +37,4 @@
// Needed so terminals are not removed from machines list.
// Powernet rebuilds need this to work properly.
/obj/machinery/power/terminal/process()
- return 1
+ return 1
diff --git a/code/modules/power/tracker.dm b/code/modules/power/tracker.dm
index ea572a2b97b..34e20d499c3 100644
--- a/code/modules/power/tracker.dm
+++ b/code/modules/power/tracker.dm
@@ -41,7 +41,7 @@
/obj/machinery/power/tracker/proc/Make(var/obj/item/solar_assembly/S)
if(!S)
S = new /obj/item/solar_assembly(src)
- S.glass_type = /obj/item/stack/sheet/glass
+ S.glass_type = /obj/item/stack/material/glass
S.tracker = 1
S.anchored = 1
S.loc = src
diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm
index 10d6d8238dc..0119de83088 100644
--- a/code/modules/power/turbine.dm
+++ b/code/modules/power/turbine.dm
@@ -234,7 +234,7 @@
if (src.stat & BROKEN)
user << "\blue The broken glass falls out."
var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc )
- new /obj/item/weapon/shard( src.loc )
+ new /obj/item/weapon/material/shard( src.loc )
var/obj/item/weapon/circuitboard/turbine_control/M = new /obj/item/weapon/circuitboard/turbine_control( A )
for (var/obj/C in src)
C.loc = src.loc
diff --git a/code/modules/projectiles/ammunition.dm b/code/modules/projectiles/ammunition.dm
index 01f6a55044a..52ca04e6554 100644
--- a/code/modules/projectiles/ammunition.dm
+++ b/code/modules/projectiles/ammunition.dm
@@ -66,7 +66,7 @@
flags = CONDUCT
slot_flags = SLOT_BELT
item_state = "syringe_kit"
- matter = list("metal" = 500)
+ matter = list(DEFAULT_WALL_MATERIAL = 500)
throwforce = 5
w_class = 2
throw_speed = 4
@@ -135,7 +135,7 @@
/obj/item/ammo_magazine/examine(mob/user)
..()
- user << "There [(stored_ammo.len > 1)? "are" : "is"] [stored_ammo.len] round\s left!"
+ user << "There [(stored_ammo.len == 1)? "is" : "are"] [stored_ammo.len] round\s left!"
//magazine icon state caching
/var/global/list/magazine_icondata_keys = list()
diff --git a/code/modules/projectiles/ammunition/boxes.dm b/code/modules/projectiles/ammunition/boxes.dm
index eb2e6f1c1d2..e909263d7b4 100644
--- a/code/modules/projectiles/ammunition/boxes.dm
+++ b/code/modules/projectiles/ammunition/boxes.dm
@@ -6,7 +6,7 @@
icon_state = "T38"
caliber = "357"
ammo_type = /obj/item/ammo_casing/a357
- matter = list("metal" = 1260)
+ matter = list(DEFAULT_WALL_MATERIAL = 1260)
max_ammo = 7
multiple_sprites = 1
@@ -14,7 +14,7 @@
name = "speed loader (.38)"
icon_state = "38"
caliber = "38"
- matter = list("metal" = 360)
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
ammo_type = /obj/item/ammo_casing/c38
max_ammo = 6
multiple_sprites = 1
@@ -28,7 +28,7 @@
icon_state = "45"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/c45
- matter = list("metal" = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
+ matter = list(DEFAULT_WALL_MATERIAL = 525) //metal costs are very roughly based around 1 .45 casing = 75 metal
caliber = ".45"
max_ammo = 7
multiple_sprites = 1
@@ -51,9 +51,9 @@
/obj/item/ammo_magazine/mc9mm
name = "magazine (9mm)"
icon_state = "9x19p"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
- matter = list("metal" = 600)
+ matter = list(DEFAULT_WALL_MATERIAL = 600)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/c9mm
max_ammo = 10
@@ -67,9 +67,9 @@
/obj/item/ammo_magazine/c9mm
name = "ammunition Box (9mm)"
- icon_state = "9mm"
- origin_tech = "combat=2"
- matter = list("metal" = 1800)
+ icon_state = "9mm"
+ origin_tech = list(TECH_COMBAT = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
caliber = "9mm"
ammo_type = /obj/item/ammo_casing/c9mm
max_ammo = 30
@@ -82,7 +82,7 @@
icon_state = "9mmt"
mag_type = MAGAZINE
ammo_type = /obj/item/ammo_casing/c9mm
- matter = list("metal" = 1200)
+ matter = list(DEFAULT_WALL_MATERIAL = 1200)
caliber = "9mm"
max_ammo = 20
multiple_sprites = 1
@@ -101,9 +101,9 @@
/obj/item/ammo_magazine/c45
name = "ammunition Box (.45)"
icon_state = "9mm"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
caliber = ".45"
- matter = list("metal" = 2250)
+ matter = list(DEFAULT_WALL_MATERIAL = 2250)
ammo_type = /obj/item/ammo_casing/c45
max_ammo = 30
@@ -113,10 +113,10 @@
/obj/item/ammo_magazine/a12mm
name = "magazine (12mm)"
icon_state = "12mm"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "12mm"
- matter = list("metal" = 1500)
+ matter = list(DEFAULT_WALL_MATERIAL = 1500)
ammo_type = "/obj/item/ammo_casing/a12mm"
max_ammo = 20
multiple_sprites = 1
@@ -127,10 +127,10 @@
/obj/item/ammo_magazine/a556
name = "magazine (5.56mm)"
icon_state = "5.56"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "a556"
- matter = list("metal" = 1800)
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
ammo_type = /obj/item/ammo_casing/a556
max_ammo = 10
multiple_sprites = 1
@@ -145,10 +145,10 @@
/obj/item/ammo_magazine/a50
name = "magazine (.50)"
icon_state = "50ae"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = ".50"
- matter = list("metal" = 1260)
+ matter = list(DEFAULT_WALL_MATERIAL = 1260)
ammo_type = /obj/item/ammo_casing/a50
max_ammo = 7
multiple_sprites = 1
@@ -171,10 +171,10 @@
/obj/item/ammo_magazine/a762
name = "magazine box (7.62mm)"
icon_state = "a762"
- origin_tech = "combat=2"
+ origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = "a762"
- matter = list("metal" = 4500)
+ matter = list(DEFAULT_WALL_MATERIAL = 4500)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 50
multiple_sprites = 1
@@ -187,7 +187,7 @@
icon_state = "c762"
mag_type = MAGAZINE
caliber = "a762"
- matter = list("metal" = 1800)
+ matter = list(DEFAULT_WALL_MATERIAL = 1800)
ammo_type = /obj/item/ammo_casing/a762
max_ammo = 20
multiple_sprites = 1
diff --git a/code/modules/projectiles/ammunition/bullets.dm b/code/modules/projectiles/ammunition/bullets.dm
index a07e5735c05..4bb8cbf10fc 100644
--- a/code/modules/projectiles/ammunition/bullets.dm
+++ b/code/modules/projectiles/ammunition/bullets.dm
@@ -76,21 +76,21 @@
icon_state = "slshell"
caliber = "shotgun"
projectile_type = /obj/item/projectile/bullet/shotgun
- matter = list("metal" = 360)
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
/obj/item/ammo_casing/shotgun/pellet
name = "shotgun shell"
desc = "A 12 gauge shell."
icon_state = "gshell"
projectile_type = /obj/item/projectile/bullet/pellet/shotgun
- matter = list("metal" = 360)
+ matter = list(DEFAULT_WALL_MATERIAL = 360)
/obj/item/ammo_casing/shotgun/blank
name = "shotgun shell"
desc = "A blank shell."
icon_state = "blshell"
projectile_type = /obj/item/projectile/bullet/blank
- matter = list("metal" = 90)
+ matter = list(DEFAULT_WALL_MATERIAL = 90)
/obj/item/ammo_casing/shotgun/practice
name = "shotgun shell"
@@ -104,7 +104,7 @@
desc = "A beanbag shell."
icon_state = "bshell"
projectile_type = /obj/item/projectile/bullet/shotgun/beanbag
- matter = list("metal" = 180)
+ matter = list(DEFAULT_WALL_MATERIAL = 180)
//Can stun in one hit if aimed at the head, but
//is blocked by clothing that stops tasers and is vulnerable to EMP
@@ -114,7 +114,7 @@
icon_state = "stunshell"
spent_icon = "stunshell-spent"
projectile_type = /obj/item/projectile/energy/electrode/stunshot
- matter = list("metal" = 360, "glass" = 720)
+ matter = list(DEFAULT_WALL_MATERIAL = 360, "glass" = 720)
/obj/item/ammo_casing/shotgun/stunshell/emp_act(severity)
if(prob(100/severity)) BB = null
@@ -126,7 +126,7 @@
desc = "A chemical shell used to signal distress or provide illumination."
icon_state = "fshell"
projectile_type = /obj/item/projectile/energy/flash/flare
- matter = list("metal" = 90, "glass" = 90)
+ matter = list(DEFAULT_WALL_MATERIAL = 90, "glass" = 90)
/obj/item/ammo_casing/a762
desc = "A 7.62mm bullet casing."
@@ -140,7 +140,7 @@
spent_icon = "lcasing-spent"
caliber = "14.5mm"
projectile_type = /obj/item/projectile/bullet/rifle/a145
- matter = list("metal" = 1250)
+ matter = list(DEFAULT_WALL_MATERIAL = 1250)
/obj/item/ammo_casing/a556
desc = "A 5.56mm bullet casing."
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index 2f17c0783d0..9e576409633 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -41,13 +41,13 @@
item_state = "gun"
flags = CONDUCT
slot_flags = SLOT_BELT|SLOT_HOLSTER
- matter = list("metal" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
w_class = 3
throwforce = 5
throw_speed = 4
throw_range = 5
force = 5
- origin_tech = "combat=1"
+ origin_tech = list(TECH_COMBAT = 1)
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
diff --git a/code/modules/projectiles/guns/energy.dm b/code/modules/projectiles/guns/energy.dm
index 161dd23e152..2a7fdad6475 100644
--- a/code/modules/projectiles/guns/energy.dm
+++ b/code/modules/projectiles/guns/energy.dm
@@ -13,8 +13,9 @@
firemode_type = /datum/firemode/energy
var/obj/item/weapon/cell/power_supply //What type of power cell this uses
- var/charge_cost = 100 //How much energy is needed to fire.
- var/cell_type = /obj/item/weapon/cell
+ var/charge_cost = 200 //How much energy is needed to fire.
+ var/max_shots = 10 //Determines the capacity of the weapon's power cell. Specifying a cell_type overrides this value.
+ var/cell_type = null
var/projectile_type = /obj/item/projectile/beam/practice
var/modifystate
var/charge_meter = 1 //if set, the icon state will be chosen based on the current charge
@@ -45,7 +46,8 @@
..()
if(cell_type)
power_supply = new cell_type(src)
- power_supply.give(power_supply.maxcharge)
+ else
+ power_supply = new /obj/item/weapon/cell/device/variable(src, max_shots*charge_cost)
if(self_recharge)
processing_objects.Add(src)
update_icon()
@@ -76,7 +78,7 @@
/obj/item/weapon/gun/energy/consume_next_projectile()
if(!power_supply) return null
if(!ispath(projectile_type)) return null
- if(!power_supply.use(charge_cost)) return null
+ if(!power_supply.checked_use(charge_cost)) return null
return new projectile_type(src)
/obj/item/weapon/gun/energy/proc/get_external_power_supply()
diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm
index dffc012998a..ba1340ea967 100644
--- a/code/modules/projectiles/guns/energy/laser.dm
+++ b/code/modules/projectiles/guns/energy/laser.dm
@@ -7,8 +7,8 @@
slot_flags = SLOT_BELT|SLOT_BACK
w_class = 3
force = 10
- matter = list("metal" = 2000)
- origin_tech = "combat=3;magnets=2"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
projectile_type = /obj/item/projectile/beam
fire_delay = 1 //rapid fire
@@ -43,7 +43,7 @@ obj/item/weapon/gun/energy/retro
w_class = 3
projectile_type = /obj/item/projectile/beam
origin_tech = null
- charge_cost = 200 //to compensate a bit for self-recharging
+ max_shots = 5 //to compensate a bit for self-recharging
self_recharge = 1
/obj/item/weapon/gun/energy/lasercannon
@@ -52,10 +52,11 @@ obj/item/weapon/gun/energy/retro
icon_state = "lasercannon"
item_state = null
fire_sound = 'sound/weapons/lasercannonfire.ogg'
- origin_tech = "combat=4;materials=3;powerstorage=3"
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
slot_flags = SLOT_BELT|SLOT_BACK
projectile_type = /obj/item/projectile/beam/heavylaser
- charge_cost = 250
+ charge_cost = 400
+ max_shots = 5
fire_delay = 20
/obj/item/weapon/gun/energy/lasercannon/mounted
@@ -70,9 +71,10 @@ obj/item/weapon/gun/energy/retro
icon_state = "xray"
item_state = "xray"
fire_sound = 'sound/weapons/laser3.ogg'
- origin_tech = "combat=5;materials=3;magnets=2;syndicate=2"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_ILLEGAL = 2)
projectile_type = /obj/item/projectile/beam/xray
- charge_cost = 50
+ charge_cost = 100
+ max_shots = 20
fire_delay = 1
/obj/item/weapon/gun/energy/sniperrifle
@@ -81,10 +83,11 @@ obj/item/weapon/gun/energy/retro
icon_state = "sniper"
item_state = "laser"
fire_sound = 'sound/weapons/marauder.ogg'
- origin_tech = "combat=6;materials=5;powerstorage=4"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
projectile_type = /obj/item/projectile/beam/sniper
slot_flags = SLOT_BACK
- charge_cost = 250
+ charge_cost = 400
+ max_shots = 4
fire_delay = 35
force = 10
w_class = 4
@@ -104,9 +107,9 @@ obj/item/weapon/gun/energy/retro
name = "laser tag gun"
item_state = "laser"
desc = "Standard issue weapon of the Imperial Guard"
- origin_tech = "combat=1;magnets=2"
+ origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
self_recharge = 1
- matter = list("metal" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
fire_sound = 'sound/weapons/Laser.ogg'
projectile_type = /obj/item/projectile/beam/lastertag/blue
var/required_vest
diff --git a/code/modules/projectiles/guns/energy/nuclear.dm b/code/modules/projectiles/guns/energy/nuclear.dm
index 1e6d22a510a..fe209aeadc3 100644
--- a/code/modules/projectiles/guns/energy/nuclear.dm
+++ b/code/modules/projectiles/guns/energy/nuclear.dm
@@ -4,10 +4,10 @@
icon_state = "energystun100"
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
+ max_shots = 10
- charge_cost = 100 //How much energy is needed to fire.
projectile_type = /obj/item/projectile/beam/stun
- origin_tech = "combat=3;magnets=2"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
modifystate = "energystun"
firemodes = list(
@@ -24,7 +24,7 @@
name = "advanced energy gun"
desc = "An energy gun with an experimental miniaturized reactor."
icon_state = "nucgun"
- origin_tech = "combat=3;materials=5;powerstorage=3"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
slot_flags = SLOT_BELT
force = 8 //looks heavier than a pistol
self_recharge = 1
@@ -44,46 +44,16 @@
charge_tick = 0
if(!power_supply) return 0
if((power_supply.charge / power_supply.maxcharge) != 1)
- if(!failcheck()) return 0
power_supply.give(charge_cost)
update_icon()
return 1
-/obj/item/weapon/gun/energy/gun/nuclear/proc/failcheck()
- lightfail = 0
- if (prob(src.reliability)) return 1 //No failure
- if (prob(src.reliability))
- for (var/mob/living/M in range(0,src)) //Only a minor failure, enjoy your radiation if you're in the same tile or carrying it
- if (src in M.contents)
- M << "Your gun feels pleasantly warm for a moment."
- else
- M << "You feel a warm sensation."
- M.apply_effect(rand(3,120), IRRADIATE)
- lightfail = 1
- else
- for (var/mob/living/M in range(rand(1,4),src)) //Big failure, TIME FOR RADIATION BITCHES
- if (src in M.contents)
- M << "Your gun's reactor overloads!"
- M << "You feel a wave of heat wash over you."
- M.apply_effect(300, IRRADIATE)
- crit_fail = 1 //break the gun so it stops recharging
- processing_objects.Remove(src)
- update_icon()
- return 0
-
-
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_charge()
- if (crit_fail)
- overlays += "nucgun-whee"
- return
var/ratio = power_supply.charge / power_supply.maxcharge
ratio = round(ratio, 0.25) * 100
overlays += "nucgun-[ratio]"
/obj/item/weapon/gun/energy/gun/nuclear/proc/update_reactor()
- if(crit_fail)
- overlays += "nucgun-crit"
- return
if(lightfail)
overlays += "nucgun-medium"
else if ((power_supply.charge/power_supply.maxcharge) <= 0.5)
@@ -97,10 +67,6 @@
if("stun") overlays += "nucgun-stun"
if("lethal") overlays += "nucgun-kill"
-/obj/item/weapon/gun/energy/gun/nuclear/emp_act(severity)
- ..()
- reliability -= round(15/severity)
-
/obj/item/weapon/gun/energy/gun/nuclear/update_icon()
overlays.Cut()
update_charge()
diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm
index 62c77cf4f3f..507bc22735b 100644
--- a/code/modules/projectiles/guns/energy/pulse.dm
+++ b/code/modules/projectiles/guns/energy/pulse.dm
@@ -6,14 +6,14 @@
slot_flags = SLOT_BELT|SLOT_BACK
force = 10
fire_sound='sound/weapons/Laser.ogg'
- charge_cost = 50
projectile_type = /obj/item/projectile/beam
sel_mode = 2
+ max_shots = 10
firemodes = list(
list(name="stun", projectile_type=/obj/item/projectile/beam/stun, fire_sound='sound/weapons/Taser.ogg'),
list(name="lethal", projectile_type=/obj/item/projectile/beam, fire_sound='sound/weapons/Laser.ogg'),
- list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=100),
+ list(name="DESTROY", projectile_type=/obj/item/projectile/beam/pulse, fire_sound='sound/weapons/pulse.ogg', fire_delay=25, charge_cost=400),
)
/obj/item/weapon/gun/energy/pulse_rifle/mounted
@@ -27,6 +27,7 @@
fire_delay = 25
fire_sound='sound/weapons/pulse.ogg'
projectile_type=/obj/item/projectile/beam/pulse
+ charge_cost=400
/obj/item/weapon/gun/energy/pulse_rifle/destroyer/attack_self(mob/living/user as mob)
user << "[src.name] has three settings, and they are all DESTROY."
@@ -37,4 +38,4 @@
desc = "It's not the size of the gun, it's the size of the hole it puts through people."
slot_flags = SLOT_BELT|SLOT_HOLSTER
icon_state = "m1911-p"
- cell_type = /obj/item/weapon/cell/crap
+ max_shots = 5
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 5525c25bbf7..7f1457d6387 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -4,12 +4,13 @@
icon_state = "ionrifle"
item_state = "ionrifle"
fire_sound = 'sound/weapons/Laser.ogg'
- origin_tech = "combat=2;magnets=4"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4)
w_class = 4
force = 10
flags = CONDUCT
slot_flags = SLOT_BACK
- charge_cost = 100
+ charge_cost = 300
+ max_shots = 10
projectile_type = /obj/item/projectile/ion
/obj/item/weapon/gun/energy/ionrifle/emp_act(severity)
@@ -27,9 +28,9 @@
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
icon_state = "decloner"
item_state = "decloner"
- fire_sound = 'sound/weapons/pulse3.ogg'
- origin_tech = "combat=5;materials=4;powerstorage=3"
- charge_cost = 100
+ fire_sound = 'sound/weapons/pulse3.ogg'
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 4, TECH_POWER = 3)
+ max_shots = 10
projectile_type = /obj/item/projectile/energy/declone
/obj/item/weapon/gun/energy/floragun
@@ -39,8 +40,9 @@
item_state = "floramut"
fire_sound = 'sound/effects/stealthoff.ogg'
charge_cost = 100
+ max_shots = 10
projectile_type = /obj/item/projectile/energy/floramut
- origin_tech = "materials=2;biotech=3;powerstorage=3"
+ origin_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
modifystate = "floramut"
self_recharge = 1
@@ -65,7 +67,6 @@
slot_flags = SLOT_BELT|SLOT_BACK
w_class = 4
projectile_type = /obj/item/projectile/meteor
- charge_cost = 100
cell_type = /obj/item/weapon/cell/potato
self_recharge = 1
recharge_time = 5 //Time it takes for shots to recharge (in ticks)
@@ -94,7 +95,7 @@
icon_state = "toxgun"
fire_sound = 'sound/effects/stealthoff.ogg'
w_class = 3.0
- origin_tech = "combat=5;phorontech=4"
+ origin_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
projectile_type = /obj/item/projectile/energy/phoron
/* Staves */
@@ -110,12 +111,19 @@
flags = CONDUCT
slot_flags = SLOT_BACK
w_class = 4.0
- charge_cost = 200
+ max_shots = 5
projectile_type = /obj/item/projectile/change
origin_tech = null
self_recharge = 1
charge_meter = 0
+/obj/item/weapon/gun/energy/staff/special_check(var/mob/user)
+ if((user.mind && !wizards.is_antagonist(user.mind)))
+ usr << "You focus your mind on \the [src], but nothing happens!"
+ return 0
+
+ return ..()
+
/obj/item/weapon/gun/energy/staff/handle_click_empty(mob/user = null)
if (user)
user.visible_message("*fizzle*", "*fizzle*")
@@ -127,7 +135,7 @@
name = "staff of animation"
desc = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines."
projectile_type = /obj/item/projectile/animate
- charge_cost = 100
+ max_shots = 10
obj/item/weapon/gun/energy/staff/focus
name = "mental focus"
@@ -140,11 +148,11 @@ obj/item/weapon/gun/energy/staff/focus
/*
attack_self(mob/living/user as mob)
if(projectile_type == "/obj/item/projectile/forcebolt")
- charge_cost = 200
+ charge_cost = 400
user << "The [src.name] will now strike a small area."
projectile_type = "/obj/item/projectile/forcebolt/strong"
else
- charge_cost = 100
+ charge_cost = 200
user << "The [src.name] will now strike only a single person."
projectile_type = "/obj/item/projectile/forcebolt"
*/
diff --git a/code/modules/projectiles/guns/energy/stun.dm b/code/modules/projectiles/guns/energy/stun.dm
index 1d51f7957e7..7c8e7cf3dc5 100644
--- a/code/modules/projectiles/guns/energy/stun.dm
+++ b/code/modules/projectiles/guns/energy/stun.dm
@@ -4,9 +4,8 @@
icon_state = "taser"
item_state = null //so the human update icon uses the icon_state instead.
fire_sound = 'sound/weapons/Taser.ogg'
- charge_cost = 100
+ max_shots = 5
projectile_type = /obj/item/projectile/beam/stun
- cell_type = /obj/item/weapon/cell/crap
/obj/item/weapon/gun/energy/taser/mounted
name = "mounted taser gun"
@@ -15,7 +14,7 @@
/obj/item/weapon/gun/energy/taser/mounted/cyborg
name = "taser gun"
- cell_type = /obj/item/weapon/cell/secborg
+ max_shots = 6
recharge_time = 10 //Time it takes for shots to recharge (in ticks)
@@ -24,11 +23,10 @@
desc = "A high-tech revolver that fires stun cartridges. The stun cartridges can be recharged using a conventional energy weapon recharger."
icon_state = "stunrevolver"
item_state = "stunrevolver"
- fire_sound = 'sound/weapons/Gunshot.ogg'
- origin_tech = "combat=3;materials=3;powerstorage=2"
- charge_cost = 125
+ fire_sound = 'sound/weapons/Gunshot.ogg'
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
projectile_type = /obj/item/projectile/energy/electrode/stunshot
- cell_type = /obj/item/weapon/cell
+ max_shots = 8
/obj/item/weapon/gun/energy/crossbow
@@ -37,13 +35,13 @@
icon_state = "crossbow"
w_class = 2.0
item_state = "crossbow"
- matter = list("metal" = 2000)
- origin_tech = "combat=2;magnets=2;syndicate=5"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2, TECH_ILLEGAL = 5)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
slot_flags = SLOT_BELT
silenced = 1
fire_sound = 'sound/weapons/Genhit.ogg'
projectile_type = /obj/item/projectile/energy/bolt
- cell_type = /obj/item/weapon/cell/crap
+ max_shots = 5
self_recharge = 1
charge_meter = 0
@@ -56,5 +54,5 @@
desc = "A weapon favored by mercenary infiltration teams."
w_class = 4
force = 10
- matter = list("metal" = 200000)
+ matter = list(DEFAULT_WALL_MATERIAL = 200000)
projectile_type = /obj/item/projectile/energy/bolt/large
diff --git a/code/modules/projectiles/guns/energy/temperature.dm b/code/modules/projectiles/guns/energy/temperature.dm
index 47bc2cfc00b..d4472e24885 100644
--- a/code/modules/projectiles/guns/energy/temperature.dm
+++ b/code/modules/projectiles/guns/energy/temperature.dm
@@ -6,7 +6,7 @@
var/temperature = T20C
var/current_temperature = T20C
charge_cost = 100
- origin_tech = "combat=3;materials=4;powerstorage=3;magnets=2"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
slot_flags = SLOT_BELT|SLOT_BACK
projectile_type = /obj/item/projectile/temp
diff --git a/code/modules/projectiles/guns/launcher/crossbow.dm b/code/modules/projectiles/guns/launcher/crossbow.dm
index 4736fc0c7bf..b199d4ad8b4 100644
--- a/code/modules/projectiles/guns/launcher/crossbow.dm
+++ b/code/modules/projectiles/guns/launcher/crossbow.dm
@@ -41,7 +41,7 @@
/obj/item/weapon/arrow/rod/removed(mob/user)
if(throwforce == 15) // The rod has been superheated - we don't want it to be useable when removed from the bow.
user << "[src] shatters into a scattering of overstressed metal shards as it leaves the crossbow."
- var/obj/item/weapon/shard/shrapnel/S = new()
+ var/obj/item/weapon/material/shard/shrapnel/S = new()
S.loc = get_turf(src)
qdel(src)
@@ -68,14 +68,14 @@
/obj/item/weapon/gun/launcher/crossbow/consume_next_projectile(mob/user=null)
if(tension <= 0)
- user << "\red \The [src] is not drawn back!"
+ user << "\The [src] is not drawn back!"
return null
return bolt
/obj/item/weapon/gun/launcher/crossbow/handle_post_fire(mob/user, atom/target)
bolt = null
- icon_state = "crossbow"
tension = 0
+ update_icon()
..()
/obj/item/weapon/gun/launcher/crossbow/attack_self(mob/living/user as mob)
@@ -89,7 +89,7 @@
else
user.visible_message("[user] relaxes the tension on [src]'s string.","You relax the tension on [src]'s string.")
tension = 0
- icon_state = "crossbow"
+ update_icon()
else
draw(user)
@@ -106,15 +106,19 @@
user.visible_message("[user] begins to draw back the string of [src].","You begin to draw back the string of [src].")
tension = 1
- while(bolt && tension && current_user == user)
+ while(bolt && tension && loc == current_user)
if(!do_after(user, 25)) //crossbow strings don't just magically pull back on their own.
user.visible_message("[usr] stops drawing and relaxes the string of [src].","You stop drawing back and relax the string of [src].")
tension = 0
- icon_state = "crossbow"
+ update_icon()
return
+ //double check that the user hasn't removed the bolt in the meantime
+ if(!(bolt && tension && loc == current_user))
+ return
+
tension++
- icon_state = "crossbow-drawn"
+ update_icon()
if(tension >= max_tension)
tension = max_tension
@@ -132,11 +136,10 @@
/obj/item/weapon/gun/launcher/crossbow/attackby(obj/item/W as obj, mob/user as mob)
if(!bolt)
if (istype(W,/obj/item/weapon/arrow))
- user.drop_item()
+ user.drop_from_inventory(W, src)
bolt = W
- bolt.loc = src
user.visible_message("[user] slides [bolt] into [src].","You slide [bolt] into [src].")
- icon_state = "crossbow-nocked"
+ update_icon()
return
else if(istype(W,/obj/item/stack/rods))
var/obj/item/stack/rods/R = W
@@ -144,7 +147,7 @@
bolt = new /obj/item/weapon/arrow/rod(src)
bolt.fingerprintslast = src.fingerprintslast
bolt.loc = src
- icon_state = "crossbow-nocked"
+ update_icon()
user.visible_message("[user] jams [bolt] into [src].","You jam [bolt] into [src].")
superheat_rod(user)
return
@@ -182,6 +185,14 @@
bolt.icon_state = "metal-rod-superheated"
cell.use(500)
+/obj/item/weapon/gun/launcher/crossbow/update_icon()
+ if(tension > 1)
+ icon_state = "crossbow-drawn"
+ else if(bolt)
+ icon_state = "crossbow-nocked"
+ else
+ icon_state = "crossbow"
+
// Crossbow construction.
/obj/item/weapon/crossbowframe
@@ -209,11 +220,11 @@
if(buildstate == 0)
var/obj/item/stack/rods/R = W
if(R.use(3))
- user << "\blue You assemble a backbone of rods around the wooden stock."
+ user << "You assemble a backbone of rods around the wooden stock."
buildstate++
update_icon()
else
- user << "\blue You need at least three rods to complete this task."
+ user << "You need at least three rods to complete this task."
return
else if(istype(W,/obj/item/weapon/weldingtool))
if(buildstate == 1)
@@ -221,7 +232,7 @@
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "\blue You weld the rods into place."
+ user << "You weld the rods into place."
buildstate++
update_icon()
return
@@ -229,33 +240,33 @@
var/obj/item/stack/cable_coil/C = W
if(buildstate == 2)
if(C.use(5))
- user << "\blue You wire a crude cell mount into the top of the crossbow."
+ user << "You wire a crude cell mount into the top of the crossbow."
buildstate++
update_icon()
else
- user << "\blue You need at least five segments of cable coil to complete this task."
+ user << "You need at least five segments of cable coil to complete this task."
return
else if(buildstate == 4)
if(C.use(5))
- user << "\blue You string a steel cable across the crossbow's lath."
+ user << "You string a steel cable across the crossbow's lath."
buildstate++
update_icon()
else
- user << "\blue You need at least five segments of cable coil to complete this task."
+ user << "You need at least five segments of cable coil to complete this task."
return
- else if(istype(W,/obj/item/stack/sheet/mineral/plastic))
+ else if(istype(W,/obj/item/stack/material/plastic))
if(buildstate == 3)
- var/obj/item/stack/sheet/mineral/plastic/P = W
+ var/obj/item/stack/material/plastic/P = W
if(P.use(3))
- user << "\blue You assemble and install a heavy plastic lath onto the crossbow."
+ user << "You assemble and install a heavy plastic lath onto the crossbow."
buildstate++
update_icon()
else
- user << "\blue You need at least three plastic sheets to complete this task."
+ user << "You need at least three plastic sheets to complete this task."
return
else if(istype(W,/obj/item/weapon/screwdriver))
if(buildstate == 5)
- user << "\blue You secure the crossbow's various parts."
+ user << "You secure the crossbow's various parts."
new /obj/item/weapon/gun/launcher/crossbow(get_turf(src))
qdel(src)
return
diff --git a/code/modules/projectiles/guns/launcher/grenade_launcher.dm b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
index 906e428e8d7..fe27d357906 100644
--- a/code/modules/projectiles/guns/launcher/grenade_launcher.dm
+++ b/code/modules/projectiles/guns/launcher/grenade_launcher.dm
@@ -15,7 +15,7 @@
var/obj/item/weapon/grenade/chambered
var/list/grenades = new/list()
var/max_grenades = 5 //holds this + one in the chamber
- matter = list("metal" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
//revolves the magazine, allowing players to choose between multiple grenade types
/obj/item/weapon/gun/launcher/grenade/proc/pump(mob/M as mob)
@@ -80,7 +80,7 @@
chambered.det_time = 10
chambered.activate(null)
return chambered
-
+
/obj/item/weapon/gun/launcher/grenade/handle_post_fire(mob/user)
message_admins("[key_name_admin(user)] fired a grenade ([chambered.name]) from a grenade launcher ([src.name]).")
log_game("[key_name_admin(user)] used a grenade ([chambered.name]).")
diff --git a/code/modules/projectiles/guns/launcher/pneumatic.dm b/code/modules/projectiles/guns/launcher/pneumatic.dm
index 863d3348e53..e7c3870ed07 100644
--- a/code/modules/projectiles/guns/launcher/pneumatic.dm
+++ b/code/modules/projectiles/guns/launcher/pneumatic.dm
@@ -14,17 +14,20 @@
var/max_w_class = 3 // Hopper intake size.
var/max_storage_space = 20 // Total internal storage size.
var/obj/item/weapon/tank/tank = null // Tank of gas for use in firing the cannon.
- var/obj/item/weapon/storage/tank_container // Something to hold the tank item so we don't accidentally fire it.
+
+ var/obj/item/weapon/storage/item_storage
var/pressure_setting = 10 // Percentage of the gas in the tank used to fire the projectile.
var/possible_pressure_amounts = list(5,10,20,25,50) // Possible pressure settings.
- var/minimum_tank_pressure = 10 // Minimum pressure to fire the gun.
var/force_divisor = 400 // Force equates to speed. Speed/5 equates to a damage multiplier for whoever you hit.
// For reference, a fully pressurized oxy tank at 50% gas release firing a health
// analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+.
/obj/item/weapon/gun/launcher/pneumatic/New()
..()
- tank_container = new(src)
- tank_container.tag = "gas_tank_holder"
+ item_storage = new(src)
+ item_storage.name = "hopper"
+ item_storage.max_w_class = max_w_class
+ item_storage.max_storage_space = max_storage_space
+ item_storage.use_sound = null
/obj/item/weapon/gun/launcher/pneumatic/verb/set_pressure() //set amount of tank pressure.
set name = "Set Valve Pressure"
@@ -35,69 +38,65 @@
pressure_setting = N
usr << "You dial the pressure valve to [pressure_setting]%."
-/obj/item/weapon/gun/launcher/pneumatic/verb/eject_tank() //Remove the tank.
- set name = "Eject Tank"
- set category = "Object"
- set src in range(0)
-
- if(tank)
- usr << "You twist the valve and pop the tank out of [src]."
- tank.loc = usr.loc
- tank = null
- icon_state = "pneumatic"
- item_state = "pneumatic"
- if (ismob(src.loc))
- var/mob/M = src.loc
- M.update_icons()
- else
- usr << "There's no tank in [src]."
-
-/obj/item/weapon/gun/launcher/pneumatic/attackby(obj/item/W as obj, mob/user as mob)
- if(!tank && istype(W,/obj/item/weapon/tank))
- user.drop_item()
- tank = W
- tank.loc = src.tank_container
- user.visible_message("[user] jams [W] into [src]'s valve and twists it closed.","You jam [W] into [src]'s valve and twist it closed.")
- icon_state = "pneumatic-tank"
- item_state = "pneumatic-tank"
- user.update_icons()
- else if(istype(W) && W.w_class <= max_w_class)
- var/total_stored = 0
- for(var/obj/item/O in src.contents)
- total_stored += O.get_storage_cost()
- if(total_stored + W.get_storage_cost() <= max_storage_space)
- user.remove_from_mob(W)
- W.loc = src
- user << "You shove [W] into the hopper."
- else
- user << "That won't fit into the hopper - it's too full."
+/obj/item/weapon/gun/launcher/pneumatic/proc/eject_tank(mob/user) //Remove the tank.
+ if(!tank)
+ user << "There's no tank in [src]."
return
- else
- user << "That won't fit into the hopper."
-/obj/item/weapon/gun/launcher/pneumatic/attack_self(mob/user as mob)
- if(contents.len > 0)
- var/obj/item/removing = contents[contents.len]
- removing.loc = get_turf(src)
+ user << "You twist the valve and pop the tank out of [src]."
+ user.put_in_hands(tank)
+ tank = null
+ update_icon()
+
+/obj/item/weapon/gun/launcher/pneumatic/proc/unload_hopper(mob/user)
+ if(item_storage.contents.len > 0)
+ var/obj/item/removing = item_storage.contents[item_storage.contents.len]
+ item_storage.remove_from_storage(removing, src.loc)
user.put_in_hands(removing)
user << "You remove [removing] from the hopper."
else
user << "There is nothing to remove in \the [src]."
- return
+
+/obj/item/weapon/gun/launcher/pneumatic/attack_hand(mob/user as mob)
+ if(user.get_inactive_hand() == src)
+ unload_hopper(user)
+ else
+ return ..()
+
+/obj/item/weapon/gun/launcher/pneumatic/attackby(obj/item/W as obj, mob/user as mob)
+ if(!tank && istype(W,/obj/item/weapon/tank))
+ user.drop_from_inventory(W, src)
+ tank = W
+ user.visible_message("[user] jams [W] into [src]'s valve and twists it closed.","You jam [W] into [src]'s valve and twist it closed.")
+ update_icon()
+ else if(istype(W) && item_storage.can_be_inserted(W))
+ item_storage.handle_item_insertion(W)
+
+/obj/item/weapon/gun/launcher/pneumatic/attack_self(mob/user as mob)
+ eject_tank(user)
/obj/item/weapon/gun/launcher/pneumatic/consume_next_projectile(mob/user=null)
- if(!contents.len)
+ if(!item_storage.contents.len)
return null
if (!tank)
user << "There is no gas tank in [src]!"
return null
- var/fire_pressure = (tank.air_contents.return_pressure()/100)*pressure_setting
- if(fire_pressure < minimum_tank_pressure)
+ var/environment_pressure = 10
+ var/turf/T = get_turf(src)
+ if(T)
+ var/datum/gas_mixture/environment = T.return_air()
+ if(environment)
+ environment_pressure = environment.return_pressure()
+
+ fire_pressure = (tank.air_contents.return_pressure() - environment_pressure)*pressure_setting/100
+ if(fire_pressure < 10)
user << "There isn't enough gas in the tank to fire [src]."
return null
- return contents[1]
+ var/obj/item/launched = item_storage.contents[1]
+ item_storage.remove_from_storage(launched, src)
+ return launched
/obj/item/weapon/gun/launcher/pneumatic/examine(mob/user)
if(!..(user, 2))
@@ -119,11 +118,24 @@
if(tank)
var/lost_gas_amount = tank.air_contents.total_moles*(pressure_setting/100)
var/datum/gas_mixture/removed = tank.air_contents.remove(lost_gas_amount)
-
+
var/turf/T = get_turf(src.loc)
if(T) T.assume_air(removed)
..()
+/obj/item/weapon/gun/launcher/pneumatic/update_icon()
+ if(tank)
+ icon_state = "pneumatic-tank"
+ item_state = "pneumatic-tank"
+ else
+ icon_state = "pneumatic"
+ item_state = "pneumatic"
+
+ if (ismob(src.loc))
+ var/mob/M = src.loc
+ M.update_inv_r_hand()
+ M.update_inv_l_hand()
+
//Constructable pneumatic cannon.
/obj/item/weapon/cannonframe
@@ -149,27 +161,27 @@
/obj/item/weapon/cannonframe/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/pipe))
if(buildstate == 0)
- user.drop_item()
+ user.drop_from_inventory(W)
qdel(W)
- user << "\blue You secure the piping inside the frame."
+ user << "You secure the piping inside the frame."
buildstate++
update_icon()
return
- else if(istype(W,/obj/item/stack/sheet/metal))
+ else if(istype(W,/obj/item/stack/material/steel))
if(buildstate == 2)
- var/obj/item/stack/sheet/metal/M = W
+ var/obj/item/stack/material/steel/M = W
if(M.use(5))
- user << "\blue You assemble a chassis around the cannon frame."
+ user << "You assemble a chassis around the cannon frame."
buildstate++
update_icon()
else
- user << "\blue You need at least five metal sheets to complete this task."
+ user << "You need at least five metal sheets to complete this task."
return
else if(istype(W,/obj/item/device/transfer_valve))
if(buildstate == 4)
- user.drop_item()
+ user.drop_from_inventory(W)
qdel(W)
- user << "\blue You install the transfer valve and connect it to the piping."
+ user << "You install the transfer valve and connect it to the piping."
buildstate++
update_icon()
return
@@ -179,7 +191,7 @@
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "\blue You weld the pipe into place."
+ user << "You weld the pipe into place."
buildstate++
update_icon()
if(buildstate == 3)
@@ -187,7 +199,7 @@
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "\blue You weld the metal chassis together."
+ user << "You weld the metal chassis together."
buildstate++
update_icon()
if(buildstate == 5)
@@ -195,7 +207,7 @@
if(T.remove_fuel(0,user))
if(!src || !T.isOn()) return
playsound(src.loc, 'sound/items/Welder2.ogg', 100, 1)
- user << "\blue You weld the valve into place."
+ user << "You weld the valve into place."
new /obj/item/weapon/gun/launcher/pneumatic(get_turf(src))
qdel(src)
return
diff --git a/code/modules/projectiles/guns/launcher/rocket.dm b/code/modules/projectiles/guns/launcher/rocket.dm
index fd86302fb8d..9747922caf2 100644
--- a/code/modules/projectiles/guns/launcher/rocket.dm
+++ b/code/modules/projectiles/guns/launcher/rocket.dm
@@ -9,7 +9,7 @@
force = 5.0
flags = CONDUCT | USEDELAY
slot_flags = 0
- origin_tech = "combat=8;materials=5"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 5)
fire_sound = 'sound/effects/bang.ogg'
release_force = 15
diff --git a/code/modules/projectiles/guns/launcher/syringe_gun.dm b/code/modules/projectiles/guns/launcher/syringe_gun.dm
index 099f8687a33..5dac7d4c9c5 100644
--- a/code/modules/projectiles/guns/launcher/syringe_gun.dm
+++ b/code/modules/projectiles/guns/launcher/syringe_gun.dm
@@ -4,7 +4,7 @@
icon = 'icons/obj/ammo.dmi'
icon_state = "syringe-cartridge"
var/icon_flight = "syringe-cartridge-flight" //so it doesn't look so weird when shot
- matter = list("metal" = 125, "glass" = 375)
+ matter = list(DEFAULT_WALL_MATERIAL = 125, "glass" = 375)
flags = CONDUCT
slot_flags = SLOT_BELT
throwforce = 3
@@ -52,11 +52,10 @@
//unfortuately we don't know where the dart will actually hit, since that's done by the parent.
if(L.can_inject())
if(syringe.reagents)
- syringe.reagents.trans_to(L, 15)
-
+ syringe.reagents.trans_to_mob(L, 15, CHEM_BLOOD)
syringe.break_syringe(iscarbon(hit_atom)? hit_atom : null)
syringe.update_icon()
-
+
icon_state = initial(icon_state) //reset icon state
update_icon()
@@ -67,15 +66,15 @@
item_state = "syringegun"
w_class = 3
force = 7
- matter = list("metal" = 2000)
+ matter = list(DEFAULT_WALL_MATERIAL = 2000)
slot_flags = SLOT_BELT
-
+
fire_sound = 'sound/weapons/empty.ogg'
fire_sound_text = "a metallic thunk"
recoil = 0
release_force = 10
throw_distance = 10
-
+
var/list/darts = list()
var/max_darts = 1
var/obj/item/weapon/syringe_cartridge/next
diff --git a/code/modules/projectiles/guns/projectile.dm b/code/modules/projectiles/guns/projectile.dm
index 31ea6b03359..2f48fcaf138 100644
--- a/code/modules/projectiles/guns/projectile.dm
+++ b/code/modules/projectiles/guns/projectile.dm
@@ -6,11 +6,11 @@
name = "gun"
desc = "A gun that fires bullets."
icon_state = "revolver"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
w_class = 3
- matter = list("metal" = 1000)
+ matter = list(DEFAULT_WALL_MATERIAL = 1000)
recoil = 1
-
+
var/caliber = "357" //determines which casings will fit
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
@@ -18,7 +18,7 @@
//For SINGLE_CASING or SPEEDLOADER guns
var/max_shells = 0 //the number of casings that will fit inside
- var/ammo_type = null //the type of ammo that the gun comes preloaded with
+ var/ammo_type = null //the type of ammo that the gun comes preloaded with
var/list/loaded = list() //stored ammo
//For MAGAZINE guns
@@ -50,7 +50,7 @@
chambered = ammo_magazine.stored_ammo[1]
if(handle_casings != HOLD_CASINGS)
ammo_magazine.stored_ammo -= chambered
-
+
if (chambered)
return chambered.BB
return null
@@ -186,7 +186,7 @@
)
if(auto_eject_sound)
playsound(user, auto_eject_sound, 40, 1)
- ammo_magazine.update_icon()
+ ammo_magazine.update_icon()
ammo_magazine = null
update_icon() //make sure to do this after unsetting ammo_magazine
@@ -213,8 +213,8 @@
set name = "Unload Ammo"
set category = "Object"
set src in usr
-
+
if(usr.stat || usr.restrained()) return
-
+
unload_ammo(usr)
-*/
\ No newline at end of file
+*/
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 2ad17537c26..bfbae584fa9 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -6,7 +6,7 @@
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
max_shells = 22
caliber = "9mm"
- origin_tech = "combat=4;materials=2"
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
ammo_type = /obj/item/ammo_casing/c9mm
multi_aim = 1
@@ -25,7 +25,7 @@
load_method = SPEEDLOADER //yup. until someone sprites a magazine for it.
max_shells = 15
caliber = ".45"
- origin_tech = "combat=5;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
ammo_type = /obj/item/ammo_casing/c45
/obj/item/weapon/gun/projectile/automatic/c20r
@@ -36,7 +36,7 @@
w_class = 3
force = 10
caliber = "12mm"
- origin_tech = "combat=5;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
slot_flags = SLOT_BELT|SLOT_BACK
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
load_method = MAGAZINE
@@ -60,7 +60,7 @@
w_class = 4
force = 10
caliber = "a762"
- origin_tech = "combat=6;materials=1;syndicate=4"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 4)
slot_flags = SLOT_BACK
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c762
@@ -83,7 +83,7 @@
item_state = "wt550"
w_class = 3
caliber = "9mm"
- origin_tech = "combat=5;materials=2"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
slot_flags = SLOT_BELT
ammo_type = "/obj/item/ammo_casing/c9mmr"
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
@@ -109,7 +109,7 @@
w_class = 4
force = 10
caliber = "a556"
- origin_tech = "combat=8;materials=3"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 3)
ammo_type = "/obj/item/ammo_casing/a556"
fire_sound = 'sound/weapons/Gunshot.ogg'
slot_flags = SLOT_BACK
@@ -179,7 +179,7 @@
slot_flags = 0
max_shells = 50
caliber = "a762"
- origin_tech = "combat=6;materials=1;syndicate=2"
+ origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 1, TECH_ILLEGAL = 2)
slot_flags = SLOT_BACK
ammo_type = "/obj/item/ammo_casing/a762"
fire_sound = 'sound/weapons/Gunshot_smg.ogg'
diff --git a/code/modules/projectiles/guns/projectile/dartgun.dm b/code/modules/projectiles/guns/projectile/dartgun.dm
index e6a81c70575..e484d95d70c 100644
--- a/code/modules/projectiles/guns/projectile/dartgun.dm
+++ b/code/modules/projectiles/guns/projectile/dartgun.dm
@@ -17,7 +17,7 @@
if(blocked < 2 && isliving(target))
var/mob/living/L = target
if(L.can_inject(target_zone=def_zone))
- reagents.trans_to(L, reagent_amount)
+ reagents.trans_to_mob(L, reagent_amount, CHEM_BLOOD)
/obj/item/ammo_casing/chemdart
name = "chemical dart"
@@ -34,7 +34,7 @@
desc = "A rack of hollow darts."
icon_state = "darts"
item_state = "rcdammo"
- origin_tech = "materials=2"
+ origin_tech = list(TECH_MATERIAL = 2)
mag_type = MAGAZINE
caliber = "dart"
ammo_type = /obj/item/ammo_casing/chemdart
@@ -125,7 +125,7 @@
if(mixing.len)
var/mix_amount = dart.reagent_amount/mixing.len
for(var/obj/item/weapon/reagent_containers/glass/beaker/B in mixing)
- B.reagents.trans_to(dart, mix_amount)
+ B.reagents.trans_to_obj(dart, mix_amount)
/obj/item/weapon/gun/projectile/dartgun/attack_self(mob/user)
user.set_machine(src)
diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm
index 2c116901ec3..e121cbe8fe2 100644
--- a/code/modules/projectiles/guns/projectile/pistol.dm
+++ b/code/modules/projectiles/guns/projectile/pistol.dm
@@ -4,7 +4,7 @@
magazine_type = /obj/item/ammo_magazine/c45m
icon_state = "colt"
caliber = ".45"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/colt/detective
@@ -35,7 +35,7 @@
icon_state = "secguncomp"
magazine_type = /obj/item/ammo_magazine/c45m/rubber
caliber = ".45"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
load_method = MAGAZINE
/obj/item/weapon/gun/projectile/sec/flash
@@ -54,7 +54,7 @@
w_class = 3
caliber = ".45"
silenced = 1
- origin_tech = "combat=2;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/c45m
@@ -89,7 +89,7 @@
max_shells = 8
caliber = "75"
fire_sound = 'sound/effects/Explosion1.ogg'
- origin_tech = "combat=3"
+ origin_tech = list(TECH_COMBAT = 3)
ammo_type = "/obj/item/ammo_casing/a75"
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/a75
@@ -111,7 +111,7 @@
w_class = 2
caliber = "9mm"
silenced = 0
- origin_tech = "combat=2;materials=2;syndicate=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2, TECH_ILLEGAL = 2)
load_method = MAGAZINE
magazine_type = /obj/item/ammo_magazine/mc9mm
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index f0291de0f87..c036c985f75 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -4,7 +4,7 @@
icon_state = "revolver"
item_state = "revolver"
caliber = "357"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 7
ammo_type = /obj/item/ammo_casing/a357
@@ -13,7 +13,7 @@
name = "mateba"
desc = "When you absolutely, positively need a 10mm hole in the other guy. Uses .357 ammo." //>10mm hole >.357
icon_state = "mateba"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
/obj/item/weapon/gun/projectile/revolver/detective
name = "revolver"
@@ -21,7 +21,7 @@
icon_state = "detective"
max_shells = 6
caliber = "38"
- origin_tech = "combat=2;materials=2"
+ origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
ammo_type = /obj/item/ammo_casing/c38
/obj/item/weapon/gun/projectile/revolver/detective/verb/rename_gun()
@@ -41,3 +41,24 @@
name = input
M << "You name the gun [input]. Say hello to your new friend."
return 1
+
+// Blade Runner pistol.
+/obj/item/weapon/gun/projectile/revolver/deckard
+ name = "Deckard .44"
+ desc = "A custom-built revolver, based off the semi-popular Detective Special model."
+ icon_state = "deckard-empty"
+ ammo_type = /obj/item/ammo_magazine/c38/rubber
+
+/obj/item/weapon/gun/projectile/revolver/deckard/update_icon()
+ ..()
+ if(loaded.len)
+ icon_state = "deckard-loaded"
+ else
+ icon_state = "deckard-empty"
+
+/obj/item/weapon/gun/projectile/revolver/deckard/load_ammo(var/obj/item/A, mob/user)
+ if(istype(A, /obj/item/ammo_magazine))
+ flick("deckard-reload",src)
+ ..()
+
+
diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm
index 1b3bb214519..21b074db7df 100644
--- a/code/modules/projectiles/guns/projectile/shotgun.dm
+++ b/code/modules/projectiles/guns/projectile/shotgun.dm
@@ -9,7 +9,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
- origin_tech = "combat=4;materials=2"
+ origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 2)
load_method = SINGLE_CASING
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
handle_casings = HOLD_CASINGS
@@ -43,7 +43,7 @@
name = "combat shotgun"
icon_state = "cshotgun"
item_state = "cshotgun"
- origin_tech = "combat=5;materials=2"
+ origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 2)
max_shells = 7 //match the ammo box capacity, also it can hold a round in the chamber anyways, for a total of 8.
ammo_type = /obj/item/ammo_casing/shotgun
@@ -63,7 +63,7 @@
flags = CONDUCT
slot_flags = SLOT_BACK
caliber = "shotgun"
- origin_tech = "combat=3;materials=1"
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 1)
ammo_type = /obj/item/ammo_casing/shotgun/beanbag
burst_delay = 0
diff --git a/code/modules/projectiles/guns/projectile/sniper.dm b/code/modules/projectiles/guns/projectile/sniper.dm
index 6c14edfaa55..b3a3c7580c9 100644
--- a/code/modules/projectiles/guns/projectile/sniper.dm
+++ b/code/modules/projectiles/guns/projectile/sniper.dm
@@ -6,7 +6,7 @@
w_class = 4
force = 10
slot_flags = SLOT_BACK
- origin_tech = "combat=8;materials=2;syndicate=8"
+ origin_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 2, TECH_ILLEGAL = 8)
caliber = "14.5mm"
recoil = 2 //extra kickback
//fire_sound = 'sound/weapons/sniper.ogg'
diff --git a/code/modules/projectiles/projectile.dm b/code/modules/projectiles/projectile.dm
index 8f24273eb29..d7c14829d98 100644
--- a/code/modules/projectiles/projectile.dm
+++ b/code/modules/projectiles/projectile.dm
@@ -180,16 +180,17 @@
visible_message("\The [target_mob] is hit by \the [src] in the [parse_zone(def_zone)]!")//X has fired Y is now given by the guns so you cant tell who shot you if you could not see the shooter
//admin logs
- if(istype(firer, /mob))
- target_mob.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]"
- firer.attack_log += "\[[time_stamp()]\] [firer]/[firer.ckey] shot [target_mob]/[target_mob.ckey] with a [src.type]"
- msg_admin_attack("[firer] ([firer.ckey]) shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG
- else if(firer)
- target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]"
- msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG
- else
- target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with a [src]"
- msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with a [src] (JMP)") //BS12 EDIT ALG
+ if(!no_attack_log)
+ if(istype(firer, /mob))
+
+ var/attacker_message = "shot with \a [src.type]"
+ var/victim_message = "shot with \a [src.type]"
+ var/admin_message = "shot (\a [src.type])"
+
+ admin_attack_log(firer, target_mob, attacker_message, victim_message, admin_message)
+ else
+ target_mob.attack_log += "\[[time_stamp()]\] UNKNOWN SUBJECT (No longer exists) shot [target_mob]/[target_mob.ckey] with \a [src]"
+ msg_admin_attack("UNKNOWN shot [target_mob] ([target_mob.ckey]) with \a [src] (JMP)")
//sometimes bullet_act() will want the projectile to continue flying
if (target_mob.bullet_act(src, def_zone) == -1)
diff --git a/code/modules/projectiles/projectile/beams.dm b/code/modules/projectiles/projectile/beams.dm
index cbe1ad5625b..eb515298ef3 100644
--- a/code/modules/projectiles/projectile/beams.dm
+++ b/code/modules/projectiles/projectile/beams.dm
@@ -68,6 +68,7 @@
icon_state = "bluelaser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
+ no_attack_log = 1
damage_type = BURN
check_armour = "laser"
@@ -87,6 +88,7 @@
icon_state = "laser"
pass_flags = PASSTABLE | PASSGLASS | PASSGRILLE
damage = 0
+ no_attack_log = 1
damage_type = BURN
check_armour = "laser"
diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm
index 80142b5f978..06e0a02c1f4 100644
--- a/code/modules/projectiles/projectile/bullets.dm
+++ b/code/modules/projectiles/projectile/bullets.dm
@@ -45,12 +45,12 @@
var/chance = 0
if(istype(A, /turf/simulated/wall))
var/turf/simulated/wall/W = A
- chance = round(damage/W.damage_cap*180)
+ chance = round(damage/W.material.integrity*180)
else if(istype(A, /obj/machinery/door))
var/obj/machinery/door/D = A
chance = round(damage/D.maxhealth*180)
if(D.glass) chance *= 2
- else if(istype(A, /obj/structure/girder) || istype(A, /obj/structure/cultgirder))
+ else if(istype(A, /obj/structure/girder))
chance = 100
else if(istype(A, /obj/machinery) || istype(A, /obj/structure))
chance = 25
@@ -196,4 +196,4 @@
/obj/item/projectile/bullet/shotgun/practice
name = "practice"
- damage = 5
\ No newline at end of file
+ damage = 5
diff --git a/code/modules/random_map/_random_map_setup.dm b/code/modules/random_map/_random_map_setup.dm
new file mode 100644
index 00000000000..01c57f2f76b
--- /dev/null
+++ b/code/modules/random_map/_random_map_setup.dm
@@ -0,0 +1,22 @@
+/*
+ This module is used to generate the debris fields/distribution maps/procedural stations.
+*/
+
+#define MIN_SURFACE_COUNT 500
+#define MIN_RARE_COUNT 200
+#define MIN_DEEP_COUNT 100
+#define RESOURCE_HIGH_MAX 4
+#define RESOURCE_HIGH_MIN 2
+#define RESOURCE_MID_MAX 3
+#define RESOURCE_MID_MIN 1
+#define RESOURCE_LOW_MAX 1
+#define RESOURCE_LOW_MIN 0
+
+#define FLOOR_CHAR 0
+#define WALL_CHAR 1
+#define DOOR_CHAR 2
+#define EMPTY_CHAR 3
+#define ROOM_TEMP_CHAR 4
+#define MONSTER_CHAR 5
+#define ARTIFACT_TURF_CHAR 6
+#define ARTIFACT_CHAR 7
\ No newline at end of file
diff --git a/code/modules/random_map/automata/automata.dm b/code/modules/random_map/automata/automata.dm
new file mode 100644
index 00000000000..f3867d78bdc
--- /dev/null
+++ b/code/modules/random_map/automata/automata.dm
@@ -0,0 +1,65 @@
+/datum/random_map/automata
+ descriptor = "generic caves"
+ initial_wall_cell = 55
+ var/iterations = 0 // Number of times to apply the automata rule.
+ var/cell_live_value = WALL_CHAR // Cell is alive if it has this value.
+ var/cell_dead_value = FLOOR_CHAR // As above for death.
+ var/cell_threshold = 5 // Cell becomes alive with this many live neighbors.
+
+// Automata-specific procs and processing.
+/datum/random_map/automata/generate_map()
+ for(var/i=1;i<=iterations;i++)
+ iterate(i)
+
+/datum/random_map/automata/get_additional_spawns(var/value, var/turf/T)
+ return
+
+/datum/random_map/automata/proc/iterate(var/iteration)
+ var/list/next_map[limit_x*limit_y]
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ var/current_cell = get_map_cell(x,y)
+ next_map[current_cell] = map[current_cell]
+ var/count = 0
+
+ // Every attempt to place this in a proc or a list has resulted in
+ // the generator being totally bricked and useless. Fuck it. We're
+ // hardcoding this shit. Feel free to rewrite and PR a fix. ~ Z
+ var/tmp_cell = get_map_cell(x,y)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x+1,y+1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x-1,y-1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x+1,y-1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x-1,y+1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x-1,y)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x,y-1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x+1,y)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+ tmp_cell = get_map_cell(x,y+1)
+ if(tmp_cell && cell_is_alive(map[tmp_cell])) count++
+
+ if(count >= cell_threshold)
+ revive_cell(current_cell, next_map, (iteration == iterations))
+ else
+ kill_cell(current_cell, next_map, (iteration == iterations))
+ map = next_map
+
+// Check if a given tile counts as alive for the automata generations.
+/datum/random_map/automata/proc/cell_is_alive(var/value)
+ return (value == cell_live_value) && (value != cell_dead_value)
+
+/datum/random_map/automata/proc/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
+ if(!use_next_map)
+ use_next_map = map
+ use_next_map[target_cell] = cell_live_value
+
+/datum/random_map/automata/proc/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
+ if(!use_next_map)
+ use_next_map = map
+ use_next_map[target_cell] = cell_dead_value
\ No newline at end of file
diff --git a/code/modules/random_map/automata/caves.dm b/code/modules/random_map/automata/caves.dm
new file mode 100644
index 00000000000..9c8f2a556eb
--- /dev/null
+++ b/code/modules/random_map/automata/caves.dm
@@ -0,0 +1,52 @@
+/datum/random_map/automata/cave_system
+ iterations = 5
+ descriptor = "moon caves"
+ wall_type = /turf/simulated/mineral
+ floor_type = /turf/simulated/floor/plating/airless/asteroid
+ target_turf_type = /turf/unsimulated/mask
+ var/mineral_sparse = /turf/simulated/mineral/random
+ var/mineral_rich = /turf/simulated/mineral/random/high_chance
+ var/list/ore_turfs = list()
+
+/datum/random_map/automata/cave_system/get_appropriate_path(var/value)
+ switch(value)
+ if(DOOR_CHAR)
+ return mineral_sparse
+ if(EMPTY_CHAR)
+ return mineral_rich
+ if(FLOOR_CHAR)
+ return floor_type
+ if(WALL_CHAR)
+ return wall_type
+
+/datum/random_map/automata/cave_system/get_map_char(var/value)
+ switch(value)
+ if(DOOR_CHAR)
+ return "x"
+ if(EMPTY_CHAR)
+ return "X"
+ return ..(value)
+
+/datum/random_map/automata/cave_system/revive_cell(var/target_cell, var/list/use_next_map, var/final_iter)
+ ..()
+ if(final_iter)
+ ore_turfs |= target_cell
+
+/datum/random_map/automata/cave_system/kill_cell(var/target_cell, var/list/use_next_map, var/final_iter)
+ ..()
+ if(final_iter)
+ ore_turfs -= target_cell
+
+// Create ore turfs.
+/datum/random_map/automata/cave_system/cleanup()
+ var/ore_count = round(map.len/20)
+ while((ore_count>0) && (ore_turfs.len>0))
+ if(!priority_process) sleep(-1)
+ var/check_cell = pick(ore_turfs)
+ ore_turfs -= check_cell
+ if(prob(75))
+ map[check_cell] = DOOR_CHAR // Mineral block
+ else
+ map[check_cell] = EMPTY_CHAR // Rare mineral block.
+ ore_count--
+ return 1
diff --git a/code/modules/random_map/building/building.dm b/code/modules/random_map/building/building.dm
new file mode 100644
index 00000000000..e5d3953af02
--- /dev/null
+++ b/code/modules/random_map/building/building.dm
@@ -0,0 +1,55 @@
+/datum/random_map/building
+ descriptor = "generic room"
+ limit_x = 7
+ limit_y = 7
+
+/datum/random_map/building/generate_map()
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ var/current_cell = get_map_cell(x,y)
+ if(!within_bounds(current_cell))
+ continue
+ if(x == 1 || y == 1 || x == limit_x || y == limit_y)
+ map[current_cell] = WALL_CHAR
+ else
+ map[current_cell] = FLOOR_CHAR
+
+/datum/random_map/building/handle_post_overlay_on(var/datum/random_map/target_map, var/tx, var/ty)
+ var/list/possible_doors
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ var/current_cell = get_map_cell(x,y)
+ if(!within_bounds(current_cell))
+ continue
+ if(!(x == 1 || y == 1 || x == limit_x || y == limit_y))
+ continue
+ if(tx+x > target_map.limit_x)
+ continue
+ if(ty+y > target_map.limit_y)
+ continue
+
+ var/place_door
+ // #.# ... .## ##.
+ // #X# #X# .X. .X. == place a door
+ // ... # # .## ##.
+
+ // (tx+x)-1,(ty+y-1) (tx+x),(ty+y)-1 (tx+x)+1,(ty+y)-1
+ // (tx+x)-1,(ty+y) (tx+x),(ty+y) (tx+x)+1,(ty+y)
+ // (tx+x)-1,(ty+y+1) (tx+x),(ty+y)+1 (tx+x)+1,(ty+y)+1
+
+
+ if(place_door)
+ possible_doors |= target_map.get_map_cell(tx+x,ty+y)
+
+ if(possible_doors.len)
+ // Place at least one door.
+ var/placing_door = pick(possible_doors)
+ possible_doors -= placing_door
+ target_map.map[placing_door] = DOOR_CHAR
+ // Keep placing doors until we get bored or lose interest.
+ while(possible_doors && !prob(30))
+ placing_door = pick(possible_doors)
+ possible_doors -= placing_door
+ target_map.map[placing_door] = DOOR_CHAR
+
+ return
\ No newline at end of file
diff --git a/code/modules/random_map/mazes/maze.dm b/code/modules/random_map/mazes/maze.dm
new file mode 100644
index 00000000000..557adbd6e8e
--- /dev/null
+++ b/code/modules/random_map/mazes/maze.dm
@@ -0,0 +1,65 @@
+/datum/random_map/maze
+ descriptor = "maze"
+ initial_wall_cell = 100
+ var/list/checked_coord_cache = list()
+ var/list/openlist = list()
+ var/list/closedlist = list()
+
+/datum/random_map/maze/set_map_size()
+ // Map has to be odd so that there are walls on all sides.
+ if(limit_x%2==0) limit_x++
+ if(limit_y%2==0) limit_y++
+ ..()
+
+/datum/random_map/maze/generate_map()
+
+ // Grab a random point on the map to begin the maze cutting at.
+ var/start_x = rand(1,limit_x-2)
+ var/start_y = rand(1,limit_y-2)
+ if(start_x%2!=0) start_x++
+ if(start_y%2!=0) start_y++
+
+ // Create the origin cell to start us off.
+ openlist += new /datum/maze_cell(start_x,start_y)
+
+ while(openlist.len)
+ // Grab a maze point to use and remove it from the open list.
+ var/datum/maze_cell/next = pick(openlist)
+ openlist -= next
+ if(!isnull(closedlist[next.name]))
+ continue
+
+ // Preliminary marking-off...
+ closedlist[next.name] = next
+ map[get_map_cell(next.x,next.y)] = FLOOR_CHAR
+
+ // Apply the values required and fill gap between this cell and origin point.
+ if(next.ox && next.oy)
+ if(next.ox < next.x)
+ map[get_map_cell(next.x-1,next.y)] = FLOOR_CHAR
+ else if(next.ox == next.x)
+ if(next.oy < next.y)
+ map[get_map_cell(next.x,next.y-1)] = FLOOR_CHAR
+ else
+ map[get_map_cell(next.x,next.y+1)] = FLOOR_CHAR
+ else
+ map[get_map_cell(next.x+1,next.y)] = FLOOR_CHAR
+
+ // Grab valid neighbors for use in the open list!
+ add_to_openlist(next.x,next.y+2,next.x,next.y)
+ add_to_openlist(next.x-2,next.y,next.x,next.y)
+ add_to_openlist(next.x+2,next.y,next.x,next.y)
+ add_to_openlist(next.x,next.y-2,next.x,next.y)
+
+ // Cleanup. Map stays in memory for display proc.
+ checked_coord_cache.Cut()
+ openlist.Cut()
+ closedlist.Cut()
+
+/datum/random_map/maze/proc/add_to_openlist(var/tx, var/ty, var/nx, var/ny)
+ if(tx < 1 || ty < 1 || tx > limit_x || ty > limit_y || !isnull(checked_coord_cache["[tx]-[ty]"]))
+ return 0
+ checked_coord_cache["[tx]-[ty]"] = 1
+ map[get_map_cell(tx,ty)] = DOOR_CHAR
+ var/datum/maze_cell/new_cell = new(tx,ty,nx,ny)
+ openlist |= new_cell
diff --git a/code/modules/random_map/mazes/maze_cell.dm b/code/modules/random_map/mazes/maze_cell.dm
new file mode 100644
index 00000000000..0b4fa1ac869
--- /dev/null
+++ b/code/modules/random_map/mazes/maze_cell.dm
@@ -0,0 +1,18 @@
+var/maze_cell_count = 0
+
+/datum/maze_cell
+ var/name
+ var/uid
+ var/x
+ var/y
+ var/ox
+ var/oy
+
+/datum/maze_cell/New(var/nx,var/ny,var/nox,var/noy)
+ maze_cell_count++
+ uid = maze_cell_count
+ name = "cell #[uid]"
+ x = nx
+ y = ny
+ ox = nox
+ oy = noy
\ No newline at end of file
diff --git a/code/modules/random_map/mining_distribution.dm b/code/modules/random_map/mining_distribution.dm
deleted file mode 100644
index 7973ff14ab9..00000000000
--- a/code/modules/random_map/mining_distribution.dm
+++ /dev/null
@@ -1,242 +0,0 @@
-#define MIN_SURFACE_COUNT 500
-#define MIN_RARE_COUNT 200
-#define MIN_DEEP_COUNT 100
-#define RESOURCE_HIGH_MAX 4
-#define RESOURCE_HIGH_MIN 2
-#define RESOURCE_MID_MAX 3
-#define RESOURCE_MID_MIN 1
-#define RESOURCE_LOW_MAX 1
-#define RESOURCE_LOW_MIN 0
-
-/*
-Surface minerals:
- silicates
- iron
- gold
- silver
-Rare minerals:
- uranium
- diamond
-Deep minerals:
- phoron
- osmium (platinum)
- tritium (hydrogen)
-*/
-
-/datum/random_map/ore
-
- descriptor = "resource distribution map"
- real_size = 65 // Must be (power of 2)+1 for diamond-square.
- cell_range = 255 // These values are used to seed ore values rather than to determine a turf type.
- iterations = 0 // We'll handle iterating on our end (recursive, with args).
-
- var/chunk_size = 4 // Size each cell represents on map
- var/random_variance_chance = 25 // % chance of applying random_element.
- var/random_element = 0.5 // Determines the variance when smoothing out cell values.
- var/deep_val = 0.8 // Threshold for deep metals, set in new as percentage of cell_range.
- var/rare_val = 0.7 // Threshold for rare metal, set in new as percentage of cell_range.
- var/cell_base // Set in New()
- var/initial_cell_range // Set in New()
-
-/datum/random_map/ore/New()
- rare_val = cell_range * rare_val
- deep_val = cell_range * deep_val
-
- initial_cell_range = cell_range/5
- cell_base = cell_range/2
- ..()
-
-/datum/random_map/ore/check_map_sanity()
-
- var/rare_count = 0
- var/surface_count = 0
- var/deep_count = 0
-
- // Increment map sanity counters.
- for(var/value in map)
- if(value < rare_val)
- surface_count++
- else if(value < deep_val)
- rare_count++
- else
- deep_count++
- // Sanity check.
- if(surface_count < MIN_SURFACE_COUNT)
- admin_notice("Insufficient surface minerals. Rerolling...", R_DEBUG)
- return 0
- else if(rare_count < MIN_RARE_COUNT)
- admin_notice("Insufficient rare minerals. Rerolling...", R_DEBUG)
- return 0
- else if(deep_count < MIN_DEEP_COUNT)
- admin_notice("Insufficient deep minerals. Rerolling...", R_DEBUG)
- return 0
- else
- return 1
-
-//Halfassed diamond-square algorithm with some fuckery since it's a single dimension array.
-/datum/random_map/ore/seed_map()
-
- // Instantiate the grid.
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- map[get_map_cell(x,y)] = 0
-
- // Now dump in the actual random data.
- map[get_map_cell(1,1)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(1,real_size)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(real_size,real_size)] = cell_base+rand(initial_cell_range)
- map[get_map_cell(real_size,1)] = cell_base+rand(initial_cell_range)
- iterate(1,1,1,(real_size-1)) // Start the recursion here.
-
-/datum/random_map/ore/display_map(atom/user)
-
- if(!user)
- user = world
-
- for(var/x = 1, x <= real_size, x++)
- var/line = ""
- for(var/y = 1, y <= real_size, y++)
- var/current_cell = get_map_cell(x,y)
- if(within_bounds(current_cell) && map[current_cell])
- if(map[current_cell] < rare_val)
- line += "S"
- else if(map[current_cell] < deep_val)
- line += "R"
- else
- line += "D"
- else
- line += "X"
- user << line
-
-/datum/random_map/ore/iterate(var/iteration,var/x,var/y,var/input_size)
-
- // Infinite loop check!
- if(iteration>=iterate_before_fail)
- admin_notice("Iteration count exceeded, aborting.", R_DEBUG)
- return
-
- var/isize = input_size
- var/hsize = round(input_size/2)
-
- /*
- (x,y+isize)----(x+hsize,y+isize)----(x+size,y+isize)
- | | |
- | | |
- | | |
- (x,y+hsize)----(x+hsize,y+hsize)----(x+isize,y)
- | | |
- | | |
- | | |
- (x,y)----------(x+hsize,y)----------(x+isize,y)
- */
- // Central edge values become average of corners.
- map[get_map_cell(x+hsize,y+isize)] = round((\
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x+isize,y+isize)] \
- )/2)
-
- map[get_map_cell(x+hsize,y)] = round(( \
- map[get_map_cell(x,y)] + \
- map[get_map_cell(x+isize,y)] \
- )/2)
-
- map[get_map_cell(x,y+hsize)] = round(( \
- map[get_map_cell(x,y+isize)] + \
- map[get_map_cell(x,y)] \
- )/2)
-
- map[get_map_cell(x+isize,y+hsize)] = round(( \
- map[get_map_cell(x+isize,y+isize)] + \
- map[get_map_cell(x+isize,y)] \
- )/2)
-
- // Centre value becomes the average of all other values + possible random variance.
- var/current_cell = get_map_cell(x+hsize,y+hsize)
- map[current_cell] = round((map[get_map_cell(x+hsize,y+isize)]+map[get_map_cell(x+hsize,y)]+map[get_map_cell(x,y+hsize)]+map[get_map_cell(x+isize,y)])/4)
-
- if(prob(random_variance_chance))
- map[current_cell] *= (rand(1,2)==1 ? (1.0-random_element) : (1.0+random_element))
- map[current_cell] = max(0,min(cell_range,map[current_cell]))
-
- // Recurse until size is too small to subdivide.
- if(isize>3)
- sleep(-1)
- iteration++
- iterate(iteration, x, y, hsize)
- iterate(iteration, x+hsize, y, hsize)
- iterate(iteration, x, y+hsize, hsize)
- iterate(iteration, x+hsize, y+hsize, hsize)
-
-/datum/random_map/ore/apply_to_map()
- for(var/x = 0, x < real_size, x++)
- if((origin_x + x) > limit_x) continue
- for(var/y = 0, y < real_size, y++)
- if((origin_y + y) > limit_y) continue
- sleep(-1)
- apply_to_turf(x,y)
-
-/datum/random_map/ore/apply_to_turf(var/x,var/y)
-
- var/tx = origin_x+((x-1)*chunk_size)
- var/ty = origin_y+((y-1)*chunk_size)
-
- for(var/i=0,ilimit_y)
- continue
- for(var/j=0,jlimit_x)
- continue
-
- var/turf/T = locate(tx+j, ty+i, origin_z)
- if(!T || !T.has_resources)
- continue
-
- sleep(-1)
-
- T.resources = list()
- T.resources["silicates"] = rand(3,5)
- T.resources["carbonaceous rock"] = rand(3,5)
-
- var/current_cell = map[get_map_cell(x,y)]
- if(current_cell < rare_val) // Surface metals.
- T.resources["iron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
- T.resources["gold"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
- T.resources["silver"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
- T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
- T.resources["diamond"] = 0
- T.resources["phoron"] = 0
- T.resources["osmium"] = 0
- T.resources["hydrogen"] = 0
- else if(current_cell < deep_val) // Rare metals.
- T.resources["gold"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["silver"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["uranium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["phoron"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["osmium"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["hydrogen"] = 0
- T.resources["diamond"] = 0
- T.resources["iron"] = 0
- else // Deep metals.
- T.resources["uranium"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
- T.resources["diamond"] = rand(RESOURCE_LOW_MIN, RESOURCE_LOW_MAX)
- T.resources["phoron"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
- T.resources["osmium"] = rand(RESOURCE_HIGH_MIN, RESOURCE_HIGH_MAX)
- T.resources["hydrogen"] = rand(RESOURCE_MID_MIN, RESOURCE_MID_MAX)
- T.resources["iron"] = 0
- T.resources["gold"] = 0
- T.resources["silver"] = 0
-
- return
-
-/datum/random_map/ore/cleanup()
- return 1
-
-#undef MIN_SURFACE_COUNT
-#undef MIN_RARE_COUNT
-#undef MIN_DEEP_COUNT
-#undef RESOURCE_HIGH_MAX
-#undef RESOURCE_HIGH_MIN
-#undef RESOURCE_MID_MAX
-#undef RESOURCE_MID_MIN
-#undef RESOURCE_LOW_MAX
-#undef RESOURCE_LOW_MIN
\ No newline at end of file
diff --git a/code/modules/random_map/noise/desert.dm b/code/modules/random_map/noise/desert.dm
new file mode 100644
index 00000000000..1c7ca229a41
--- /dev/null
+++ b/code/modules/random_map/noise/desert.dm
@@ -0,0 +1,40 @@
+/datum/random_map/noise/desert
+ descriptor = "desert"
+ smoothing_iterations = 3
+
+/datum/random_map/noise/desert/replace_space
+ descriptor = "desert (replacement)"
+ target_turf_type = /turf/space
+
+/datum/random_map/noise/desert/get_map_char(var/value)
+ return "[pick(list(",",".","'","`"))]"
+
+/datum/random_map/noise/desert/get_appropriate_path(var/value)
+ var/val = min(9,max(0,round((value/cell_range)*10)))
+ if(isnull(val)) val = 0
+ switch(val)
+ if(0 to 1)
+ return /turf/simulated/floor/beach/water
+ else
+ return /turf/simulated/floor/beach/sand/desert
+
+/datum/random_map/noise/desert/get_additional_spawns(var/value, var/turf/T)
+ var/val = min(9,max(0,round((value/cell_range)*10)))
+ if(isnull(val)) val = 0
+ switch(val)
+ if(2 to 3)
+ if(prob(60))
+ var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
+ new grass_path(T)
+ if(prob(5))
+ var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
+ new mob_type(T)
+ if(5 to 6)
+ if(prob(20))
+ var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
+ new grass_path(T)
+ if(7 to 9)
+ if(prob(60))
+ new /obj/structure/flora/bush(T)
+ else if(prob(20))
+ new /obj/structure/flora/tree/dead(T)
diff --git a/code/modules/random_map/noise/magma.dm b/code/modules/random_map/noise/magma.dm
new file mode 100644
index 00000000000..64d649fd4e6
--- /dev/null
+++ b/code/modules/random_map/noise/magma.dm
@@ -0,0 +1,44 @@
+// This is basically filler at this point. Subsidence and all kinds of fun
+// hazards will be included when it is done.
+/datum/random_map/noise/volcanism
+ descriptor = "volcanism"
+ smoothing_iterations = 6
+ target_turf_type = /turf/simulated
+
+// Get rid of those dumb little single-tile volcanic areas.
+/datum/random_map/noise/volcanism/cleanup()
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ var/current_cell = get_map_cell(x,y)
+ if(map[current_cell] < 178)
+ continue
+ var/count
+ var/tmp_cell = get_map_cell(x+1,y+1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x-1,y-1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x+1,y-1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x-1,y+1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x-1,y)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x,y-1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x+1,y)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ tmp_cell = get_map_cell(x,y+1)
+ if(tmp_cell && map[tmp_cell] >= 178) count++
+ if(!count)
+ map[current_cell] = 177
+
+/datum/random_map/noise/volcanism/get_appropriate_path(var/value)
+ return
+
+/datum/random_map/noise/volcanism/get_additional_spawns(var/value, var/turf/T)
+ if(value>=178)
+ if(istype(T,/turf/simulated/floor/plating/airless/asteroid))
+ T.ChangeTurf(/turf/simulated/floor/airless/lava)
+ else if(istype(T,/turf/simulated/mineral))
+ var/turf/simulated/mineral/M = T
+ M.mined_turf = /turf/simulated/floor/airless/lava
\ No newline at end of file
diff --git a/code/modules/random_map/noise/noise.dm b/code/modules/random_map/noise/noise.dm
new file mode 100644
index 00000000000..7e4323158e4
--- /dev/null
+++ b/code/modules/random_map/noise/noise.dm
@@ -0,0 +1,168 @@
+// NOTE: Maps generated with this datum as the base are not DIRECTLY compatible with maps generated from
+// the automata, building or maze datums, as the noise generator uses 0-255 instead of WALL_CHAR/FLOOR_CHAR.
+// TODO: Consider writing a conversion proc for noise-to-regular maps.
+/datum/random_map/noise
+ descriptor = "distribution map"
+ var/cell_range = 255 // These values are used to seed ore values rather than to determine a turf type.
+ var/cell_smooth_amt = 5
+ var/random_variance_chance = 25 // % chance of applying random_element.
+ var/random_element = 0.5 // Determines the variance when smoothing out cell values.
+ var/cell_base // Set in New()
+ var/initial_cell_range // Set in New()
+ var/smoothing_iterations = 0
+
+/datum/random_map/noise/New()
+ initial_cell_range = cell_range/5
+ cell_base = cell_range/2
+ ..()
+
+/datum/random_map/noise/set_map_size()
+ // Make sure the grid is a square with limits that are
+ // (n^2)+1, otherwise diamond-square won't work.
+ if(!IsPowerOfTwo((limit_x-1)))
+ limit_x = RoundUpToPowerOfTwo(limit_x) + 1
+ if(!IsPowerOfTwo((limit_y-1)))
+ limit_y = RoundUpToPowerOfTwo(limit_y) + 1
+ // Sides must be identical lengths.
+ if(limit_x > limit_y)
+ limit_y = limit_x
+ else if(limit_y > limit_x)
+ limit_x = limit_y
+ ..()
+
+// Diamond-square algorithm.
+/datum/random_map/noise/seed_map()
+ // Instantiate the grid.
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ map[get_map_cell(x,y)] = 0
+
+ // Now dump in the actual random data.
+ map[get_map_cell(1,1)] = cell_base+rand(initial_cell_range)
+ map[get_map_cell(1,limit_y)] = cell_base+rand(initial_cell_range)
+ map[get_map_cell(limit_x,limit_y)] = cell_base+rand(initial_cell_range)
+ map[get_map_cell(limit_x,1)] = cell_base+rand(initial_cell_range)
+
+/datum/random_map/noise/generate_map()
+ // Begin recursion.
+ subdivide(1,1,1,(limit_y-1))
+
+/datum/random_map/noise/get_map_char(var/value)
+ var/val = min(9,max(0,round((value/cell_range)*10)))
+ if(isnull(val)) val = 0
+ return "[val]"
+
+/datum/random_map/noise/proc/subdivide(var/iteration,var/x,var/y,var/input_size)
+
+ var/isize = input_size
+ var/hsize = round(input_size/2)
+
+ /*
+ (x,y+isize)----(x+hsize,y+isize)----(x+size,y+isize)
+ | | |
+ | | |
+ | | |
+ (x,y+hsize)----(x+hsize,y+hsize)----(x+isize,y)
+ | | |
+ | | |
+ | | |
+ (x,y)----------(x+hsize,y)----------(x+isize,y)
+ */
+ // Central edge values become average of corners.
+ map[get_map_cell(x+hsize,y+isize)] = round((\
+ map[get_map_cell(x,y+isize)] + \
+ map[get_map_cell(x+isize,y+isize)] \
+ )/2)
+
+ map[get_map_cell(x+hsize,y)] = round(( \
+ map[get_map_cell(x,y)] + \
+ map[get_map_cell(x+isize,y)] \
+ )/2)
+
+ map[get_map_cell(x,y+hsize)] = round(( \
+ map[get_map_cell(x,y+isize)] + \
+ map[get_map_cell(x,y)] \
+ )/2)
+
+ map[get_map_cell(x+isize,y+hsize)] = round(( \
+ map[get_map_cell(x+isize,y+isize)] + \
+ map[get_map_cell(x+isize,y)] \
+ )/2)
+
+ // Centre value becomes the average of all other values + possible random variance.
+ var/current_cell = get_map_cell(x+hsize,y+hsize)
+ map[current_cell] = round(( \
+ map[get_map_cell(x+hsize,y+isize)] + \
+ map[get_map_cell(x+hsize,y)] + \
+ map[get_map_cell(x,y+hsize)] + \
+ map[get_map_cell(x+isize,y)] \
+ )/4)
+
+ if(prob(random_variance_chance))
+ map[current_cell] *= (rand(1,2)==1 ? (1.0-random_element) : (1.0+random_element))
+ map[current_cell] = max(0,min(cell_range,map[current_cell]))
+
+ // Recurse until size is too small to subdivide.
+ if(isize>3)
+ if(!priority_process) sleep(-1)
+ iteration++
+ subdivide(iteration, x, y, hsize)
+ subdivide(iteration, x+hsize, y, hsize)
+ subdivide(iteration, x, y+hsize, hsize)
+ subdivide(iteration, x+hsize, y+hsize, hsize)
+
+/datum/random_map/noise/cleanup()
+
+ for(var/i = 1;i<=smoothing_iterations;i++)
+ var/list/next_map[limit_x*limit_y]
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+
+ var/current_cell = get_map_cell(x,y)
+ next_map[current_cell] = map[current_cell]
+ var/val_count = 0
+ var/total = 0
+
+ // Get the average neighboring value.
+ var/tmp_cell = get_map_cell(x+1,y+1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x-1,y-1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x+1,y-1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x-1,y+1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x-1,y)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x,y-1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x+1,y)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ tmp_cell = get_map_cell(x,y+1)
+ if(tmp_cell)
+ total += map[tmp_cell]
+ val_count++
+ total = round(total/val_count)
+
+ if(abs(map[current_cell]-total) <= cell_smooth_amt)
+ map[current_cell] = total
+ else if(map[current_cell] < total)
+ map[current_cell]+=cell_smooth_amt
+ else if(map[current_cell] < total)
+ map[current_cell]-=cell_smooth_amt
+ map[current_cell] = max(0,min(cell_range,map[current_cell]))
+ map = next_map
\ No newline at end of file
diff --git a/code/modules/random_map/noise/ore.dm b/code/modules/random_map/noise/ore.dm
new file mode 100644
index 00000000000..5e565df18b5
--- /dev/null
+++ b/code/modules/random_map/noise/ore.dm
@@ -0,0 +1,90 @@
+/datum/random_map/noise/ore
+ descriptor = "ore distribution map"
+ var/deep_val = 0.8 // Threshold for deep metals, set in new as percentage of cell_range.
+ var/rare_val = 0.7 // Threshold for rare metal, set in new as percentage of cell_range.
+ var/chunk_size = 4 // Size each cell represents on map
+
+/datum/random_map/noise/ore/New()
+ rare_val = cell_range * rare_val
+ deep_val = cell_range * deep_val
+ ..()
+
+/datum/random_map/noise/ore/check_map_sanity()
+
+ var/rare_count = 0
+ var/surface_count = 0
+ var/deep_count = 0
+
+ // Increment map sanity counters.
+ for(var/value in map)
+ if(value < rare_val)
+ surface_count++
+ else if(value < deep_val)
+ rare_count++
+ else
+ deep_count++
+ // Sanity check.
+ if(surface_count < MIN_SURFACE_COUNT)
+ admin_notice("Insufficient surface minerals. Rerolling...", R_DEBUG)
+ return 0
+ else if(rare_count < MIN_RARE_COUNT)
+ admin_notice("Insufficient rare minerals. Rerolling...", R_DEBUG)
+ return 0
+ else if(deep_count < MIN_DEEP_COUNT)
+ admin_notice("Insufficient deep minerals. Rerolling...", R_DEBUG)
+ return 0
+ else
+ return 1
+
+/datum/random_map/noise/ore/apply_to_turf(var/x,var/y)
+
+ var/tx = (origin_x+(x-1))*chunk_size
+ var/ty = (origin_y+(y-1))*chunk_size
+
+ for(var/i=0,i~"
+ if(1)
+ return "~"
+ if(2)
+ return "~"
+ if(3)
+ return "[pick(list(".",","))]"
+ if(4)
+ return "[pick(list(".",","))]"
+ if(5)
+ return "[pick(list(".",","))]"
+ if(6)
+ return "[pick(list(".",","))]"
+ if(7)
+ return "[pick(list("T","t"))]"
+ if(8)
+ return "[pick(list("T","t"))]"
+ if(9)
+ return "[pick(list("T","t"))]"
+
+/datum/random_map/noise/tundra/get_appropriate_path(var/value)
+ var/val = min(9,max(0,round((value/cell_range)*10)))
+ if(isnull(val)) val = 0
+ switch(val)
+ if(0 to 4)
+ return /turf/simulated/floor/beach/water/ocean
+ else
+ return /turf/simulated/floor/snow
+
+/datum/random_map/noise/tundra/get_additional_spawns(var/value, var/turf/T)
+ var/val = min(9,max(0,round((value/cell_range)*10)))
+ if(isnull(val)) val = 0
+ switch(val)
+ if(2)
+ if(prob(5))
+ new /mob/living/simple_animal/crab(T)
+ if(6)
+ if(prob(60))
+ var/grass_path = pick(typesof(/obj/structure/flora/grass)-/obj/structure/flora/grass)
+ new grass_path(T)
+ if(prob(5))
+ var/mob_type = pick(list(/mob/living/simple_animal/lizard, /mob/living/simple_animal/mouse))
+ new mob_type(T)
+ if(7)
+ if(prob(60))
+ new /obj/structure/flora/bush(T)
+ else if(prob(30))
+ new /obj/structure/flora/tree/pine(T)
+ else if(prob(20))
+ new /obj/structure/flora/tree/dead(T)
+ if(8)
+ if(prob(70))
+ new /obj/structure/flora/tree/pine(T)
+ else if(prob(30))
+ new /obj/structure/flora/tree/dead(T)
+ else
+ new /obj/structure/flora/bush(T)
+ if(9)
+ new /obj/structure/flora/tree/pine(T)
diff --git a/code/modules/random_map/random_map.dm b/code/modules/random_map/random_map.dm
index 81def6be14c..ced9f009b94 100644
--- a/code/modules/random_map/random_map.dm
+++ b/code/modules/random_map/random_map.dm
@@ -1,173 +1,206 @@
-#define ORE_COUNT 1000
-/*
- This module is used to generate the debris fields/distribution maps/procedural stations.
-*/
-
+// Generates cave systems for the asteroid, and places ore tiles.
var/global/list/random_maps = list()
+var/global/list/map_count = list()
/datum/random_map
- var/descriptor = "asteroid" // Display name.
- var/real_size = 246 // Size of each edge (must be square :().
- var/cell_range = 2 // Random range for initial cells.
- var/iterations = 5 // Number of times to apply the automata rule.
+
+ // Strings.
+ var/name // Set in New()
+ var/descriptor = "random map" // Display name.
+
+ // Locator/value vars.
+ var/initial_wall_cell = 100 // % Chance that a cell will be seeded as a wall.
var/max_attempts = 5 // Fail if a sane map isn't generated by this point.
- var/raw_map_size // Used for creating new maps each iteration. Value must be real_size^2
- var/list/map = list() // Actual map.
var/origin_x = 1 // Origin point, left.
var/origin_y = 1 // Origin point, bottom.
var/origin_z = 1 // Target Z-level.
- var/limit_x = 256 // Maximum x bound.
- var/limit_y = 256 // Maximum y bound.
- var/iterate_before_fail = 120 // Infinite loop safeguard.
+ var/limit_x = 128 // Default x size.
+ var/limit_y = 128 // Default y size.
+ var/auto_apply = 1
+
+ // Turf paths.
+ var/wall_type = /turf/simulated/wall
+ var/floor_type = /turf/simulated/floor
+ var/target_turf_type
+
+ // Storage for the final iteration of the map.
+ var/list/map = list() // Actual map.
+
+ // If set, all sleep(-1) calls will be skipped.
+ // Test to see if rand_seed() can be used reliably.
+ var/priority_process
+
+/datum/random_map/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly, var/do_not_apply, var/do_not_announce)
+
+ // Store this for debugging.
+ if(!map_count[descriptor])
+ map_count[descriptor] = 1
+ else
+ map_count[descriptor]++
+ name = "[descriptor] #[map_count[descriptor]]"
+ random_maps[name] = src
+
+ // Get origins for applying the map later.
+ origin_x = (!isnull(tx) ? tx : 1)
+ origin_y = (!isnull(ty) ? ty : 1)
+ origin_z = (!isnull(tz) ? tz : 1)
+ if(tlx) limit_x = tlx
+ if(tly) limit_y = tly
+
+ if(do_not_apply)
+ auto_apply = null
+
+ // Initialize map.
+ set_map_size()
+
+ var/start_time = world.timeofday
+ if(!do_not_announce) admin_notice("Generating [name].", R_DEBUG)
+ sleep(-1)
+
+ // Testing needed to see how reliable this is (asynchronous calls, called during worldgen), DM ref is not optimistic
+ if(seed)
+ rand_seed(seed)
+ priority_process = 1
+
+ for(var/i = 0;i[capitalize(name)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG)
+ return
+ if(!do_not_announce) admin_notice("[capitalize(name)] failed to generate ([round(0.1*(world.timeofday-start_time),0.1)] seconds): could not produce sane map.", R_DEBUG)
/datum/random_map/proc/get_map_cell(var/x,var/y)
- return ((y-1)*real_size)+x
+ var/cell = ((y-1)*limit_x)+x
+ if((cell < 1) || (cell > map.len))
+ return null
+ else
+ return cell
+
+/datum/random_map/proc/get_map_char(var/value)
+ switch(value)
+ if(WALL_CHAR)
+ return "#"
+ if(FLOOR_CHAR)
+ return "."
+ if(DOOR_CHAR)
+ return "D"
+ if(ROOM_TEMP_CHAR)
+ return "+"
+ if(MONSTER_CHAR)
+ return "M"
+ if(ARTIFACT_TURF_CHAR)
+ return "_"
+ if(ARTIFACT_CHAR)
+ return "A"
+ else
+ return " "
/datum/random_map/proc/display_map(atom/user)
if(!user)
user = world
- for(var/x = 1, x <= real_size, x++)
- var/line = ""
- for(var/y = 1, y <= real_size, y++)
+ var/dat = "+------+ "
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
var/current_cell = get_map_cell(x,y)
if(within_bounds(current_cell))
- if(map[current_cell] == 2)
- line += "#"
- else
- line += "."
- user << line
-
-/datum/random_map/New(var/seed, var/tx, var/ty, var/tz, var/tlx, var/tly)
-
- // Store this for debugging.
- random_maps |= src
-
- // Initialize map.
- set_map_size()
-
- // Get origins for applying the map later.
- if(tx) origin_x = tx
- if(ty) origin_y = ty
- if(tz) origin_z = tz
- if(tlx) limit_x = tlx
- if(tly) limit_y = tly
-
- // testing needed to see how reliable this is (asynchronous calls, called during worldgen), DM ref is not optimistic
- if(seed) rand_seed(seed)
-
- var/start_time = world.timeofday
- admin_notice("Generating [descriptor].", R_DEBUG)
- for(var/i = 0;i[capitalize(descriptor)] generation completed in [round(0.1*(world.timeofday-start_time),0.1)] seconds.", R_DEBUG)
- return
- admin_notice("[capitalize(descriptor)] generation failed in [round(0.1*(world.timeofday-start_time),0.1)] seconds: could not produce sane map.", R_DEBUG)
+ dat += get_map_char(map[current_cell])
+ dat += " "
+ user << "[dat]+------+"
/datum/random_map/proc/within_bounds(var/val)
- return (val>0) && (val<=raw_map_size)
+ if(!islist(map))
+ set_map_size()
+ return (val>0) && (val<=map.len)
-/datum/random_map/proc/set_map_size(var/raw_size)
- if(!raw_size)
- raw_size = real_size * real_size
- raw_map_size = raw_size
- map.len = raw_map_size
+/datum/random_map/proc/set_map_size()
+ map = list()
+ map.len = limit_x * limit_y
/datum/random_map/proc/seed_map()
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
var/current_cell = get_map_cell(x,y)
- if(prob(55))
- map[current_cell] = 2
+ if(prob(initial_wall_cell))
+ map[current_cell] = WALL_CHAR
else
- map[current_cell] = 1
+ map[current_cell] = FLOOR_CHAR
/datum/random_map/proc/clear_map()
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
map[get_map_cell(x,y)] = 0
/datum/random_map/proc/generate()
seed_map()
- for(var/i=1;i<=iterations;i++)
- iterate(i)
+ generate_map()
if(check_map_sanity())
cleanup()
- apply_to_map()
+ if(auto_apply)
+ apply_to_map()
return 1
return 0
-/datum/random_map/proc/iterate(var/iteration)
- var/list/next_map[raw_map_size]
- for(var/x = 1, x <= real_size, x++)
- for(var/y = 1, y <= real_size, y++)
- var/current_cell = get_map_cell(x,y)
- // Sanity check.
- if(!within_bounds(current_cell))
- continue
- // Copy over original value.
- next_map[current_cell] = map[current_cell]
- // Check all neighbors.
- var/count = 0
- for(var/cell in list(current_cell,get_map_cell(x+1,y+1),get_map_cell(x-1,y-1),get_map_cell(x+1,y-1),get_map_cell(x-1,y+1),get_map_cell(x-1,y),get_map_cell(x,y-1),get_map_cell(x+1,y),get_map_cell(x,y+1)))
- if(within_bounds(cell) && map[cell] == 2)
- count++
- if(count>=5)
- next_map[current_cell] = 2 // becomes a wall
- else
- next_map[current_cell] = 1 // becomes a floor
- map = next_map
+// Unused for basic map.
+/datum/random_map/proc/generate_map()
+ return 1
/datum/random_map/proc/check_map_sanity()
return 1
-/datum/random_map/proc/apply_to_map()
- for(var/x = 0, x < real_size, x++)
- if((origin_x + x) > limit_x) continue
- for(var/y = 0, y < real_size, y++)
- if((origin_y + y) > limit_y) continue
- sleep(-1)
- apply_to_turf(origin_x+x,origin_y+y)
+/datum/random_map/proc/apply_to_map(var/tx, var/ty, var/tz)
+ if(!tx) tx = isnull(origin_x) ? 1 : origin_x
+ if(!ty) ty = isnull(origin_y) ? 1 : origin_y
+ if(!tz) tz = isnull(origin_z) ? 1 : origin_z
-/datum/random_map/proc/apply_to_turf(var/x,var/y)
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ if(!priority_process) sleep(-1)
+ apply_to_turf((tx-1)+x,(ty-1)+y,tz)
+
+/datum/random_map/proc/apply_to_turf(var/x,var/y,var/z)
var/current_cell = get_map_cell(x,y)
if(!within_bounds(current_cell))
- return
- var/turf/T = locate(x,y,origin_z)
- if(!T || !istype(T,/turf/unsimulated/mask))
- return
- switch(map[current_cell])
- if(1)
- T.ChangeTurf(/turf/simulated/floor/plating/airless/asteroid)
- if(2)
- T.ChangeTurf(/turf/simulated/mineral)
- if(3)
- T.ChangeTurf(/turf/simulated/mineral/random)
- if(4)
- T.ChangeTurf(/turf/simulated/mineral/random/high_chance)
+ return 0
+ var/turf/T = locate(x,y,z)
+ if(!T || (target_turf_type && !istype(T,target_turf_type)))
+ return 0
+ var/newpath = get_appropriate_path(map[current_cell])
+ if(newpath)
+ T.ChangeTurf(newpath)
+ get_additional_spawns(map[current_cell],T)
+ return T
+
+/datum/random_map/proc/get_appropriate_path(var/value)
+ switch(value)
+ if(FLOOR_CHAR)
+ return floor_type
+ if(WALL_CHAR)
+ return wall_type
+
+/datum/random_map/proc/get_additional_spawns(var/value, var/turf/T)
+ if(value == DOOR_CHAR)
+ new /obj/machinery/door/airlock(T)
/datum/random_map/proc/cleanup()
+ return
- sleep(-1)
- // Create ore.
- var/ore_count = ORE_COUNT
- while(ore_count)
- var/check_cell = get_map_cell(rand(1,real_size),rand(1,real_size))
- if(!(within_bounds(check_cell)) || map[check_cell] != 2)
- continue
- if(prob(25))
- map[check_cell] = 4
- else
- map[check_cell] = 3
- ore_count--
+/datum/random_map/proc/overlay_with(var/datum/random_map/target_map, var/tx, var/ty)
+ if(!map.len || !istype(target_map))
+ return
+ tx-- // Update origin so that x/y index
+ ty-- // doesn't push it off-kilter by one.
+ for(var/x = 1, x <= limit_x, x++)
+ for(var/y = 1, y <= limit_y, y++)
+ var/current_cell = get_map_cell(x,y)
+ if(!within_bounds(current_cell))
+ continue
+ if(tx+x > target_map.limit_x)
+ continue
+ if(ty+y > target_map.limit_y)
+ continue
+ target_map.map[target_map.get_map_cell(tx+x,ty+y)] = map[current_cell]
+ handle_post_overlay_on(target_map,tx,ty)
- sleep(-1)
-
- // Place random asteroid rooms.
- var/rooms_placed = 0
- for(var/i = 0, i < max_secret_rooms, i++)
- if(make_mining_asteroid_secret())
- rooms_placed++
- admin_notice("Placed [rooms_placed] secrets.", R_DEBUG)
- return 1
\ No newline at end of file
+/datum/random_map/proc/handle_post_overlay_on(var/datum/random_map/target_map, var/tx, var/ty)
+ return
\ No newline at end of file
diff --git a/code/modules/random_map/random_map_verbs.dm b/code/modules/random_map/random_map_verbs.dm
new file mode 100644
index 00000000000..6ab98e20b7e
--- /dev/null
+++ b/code/modules/random_map/random_map_verbs.dm
@@ -0,0 +1,107 @@
+/client/proc/print_random_map()
+ set category = "Debug"
+ set name = "Display Random Map"
+ set desc = "Show the contents of a random map."
+
+ if(!holder) return
+
+ var/choice = input("Choose a map to display.") as null|anything in random_maps
+ if(!choice)
+ return
+ var/datum/random_map/M = random_maps[choice]
+ if(istype(M))
+ M.display_map(usr)
+
+/client/proc/delete_random_map()
+ set category = "Debug"
+ set name = "Delete Random Map"
+ set desc = "Delete a random map."
+
+ if(!holder) return
+
+ var/choice = input("Choose a map to delete.") as null|anything in random_maps
+ if(!choice)
+ return
+ var/datum/random_map/M = random_maps[choice]
+ random_maps[choice] = null
+ if(istype(M))
+ message_admins("[key_name_admin(usr)] has deleted [M.name].")
+ log_admin("[key_name(usr)] has deleted [M.name].")
+ qdel(M)
+
+/client/proc/create_random_map()
+ set category = "Debug"
+ set name = "Create Random Map"
+ set desc = "Create a random map."
+
+ if(!holder) return
+
+ var/map_datum = input("Choose a map to create.") as null|anything in typesof(/datum/random_map)-/datum/random_map
+ if(!map_datum)
+ return
+
+ var/datum/random_map/M
+ if(alert("Do you wish to customise the map?",,"Yes","No") == "Yes")
+ var/seed = input("Seed? (blank for none)") as text|null
+ var/lx = input("X-size? (blank for default)") as num|null
+ var/ly = input("Y-size? (blank for default)") as num|null
+ M = new map_datum(seed,null,null,null,lx,ly,1)
+ else
+ M = new map_datum(null,null,null,null,null,null,1)
+
+ if(M)
+ message_admins("[key_name_admin(usr)] has created [M.name].")
+ log_admin("[key_name(usr)] has created [M.name].")
+
+/client/proc/apply_random_map()
+ set category = "Debug"
+ set name = "Apply Random Map"
+ set desc = "Apply a map to the game world."
+
+ if(!holder) return
+
+ var/choice = input("Choose a map to apply.") as null|anything in random_maps
+ if(!choice)
+ return
+ var/datum/random_map/M = random_maps[choice]
+ if(istype(M))
+ var/tx = input("X? (default to current turf)") as num|null
+ var/ty = input("Y? (default to current turf)") as num|null
+ var/tz = input("Z? (default to current turf)") as num|null
+ if(isnull(tx) || isnull(ty) || isnull(tz))
+ var/turf/T = get_turf(usr)
+ tx = !isnull(tx) ? tx : T.x
+ ty = !isnull(ty) ? ty : T.y
+ tz = !isnull(tz) ? tz : T.z
+ message_admins("[key_name_admin(usr)] has applied [M.name] at x[tx],y[ty],z[tz].")
+ log_admin("[key_name(usr)] has applied [M.name] at x[tx],y[ty],z[tz].")
+ M.apply_to_map(tx,ty,tz)
+
+/client/proc/overlay_random_map()
+ set category = "Debug"
+ set name = "Overlay Random Map"
+ set desc = "Apply a map to another map."
+
+ if(!holder) return
+
+ var/choice = input("Choose a map as base.") as null|anything in random_maps
+ if(!choice)
+ return
+ var/datum/random_map/base_map = random_maps[choice]
+
+ choice = null
+ choice = input("Choose a map to overlay.") as null|anything in random_maps
+ if(!choice)
+ return
+
+ var/datum/random_map/overlay_map = random_maps[choice]
+
+ if(istype(base_map) && istype(overlay_map))
+ var/tx = input("X? (default to 1)") as num|null
+ var/ty = input("Y? (default to 1)") as num|null
+ if(!tx) tx = 1
+ if(!ty) ty = 1
+ message_admins("[key_name_admin(usr)] has applied [overlay_map.name] to [base_map.name] at x[tx],y[ty].")
+ log_admin("[key_name(usr)] has applied [overlay_map.name] to [base_map.name] at x[tx],y[ty].")
+ overlay_map.overlay_with(base_map,tx,ty)
+ base_map.display_map(usr)
diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm
index a9562ca8610..84c8affc945 100644
--- a/code/modules/reagents/Chemistry-Holder.dm
+++ b/code/modules/reagents/Chemistry-Holder.dm
@@ -1,54 +1,20 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32
-
-var/const/TOUCH = 1
-var/const/INGEST = 2
-
-///////////////////////////////////////////////////////////////////////////////////
+#define PROCESS_REACTION_ITER 5 //when processing a reaction, iterate this many times
/datum/reagents
- var/list/datum/reagent/reagent_list = new/list()
+ var/list/datum/reagent/reagent_list = list()
var/total_volume = 0
var/maximum_volume = 100
var/atom/my_atom = null
-/datum/reagents/New(maximum=100)
- maximum_volume = maximum
-
- //I dislike having these here but map-objects are initialised before world/New() is called. >_>
- if(!chemical_reagents_list)
- //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
- var/paths = typesof(/datum/reagent) - /datum/reagent
- chemical_reagents_list = list()
- for(var/path in paths)
- var/datum/reagent/D = new path()
- chemical_reagents_list[D.id] = D
- if(!chemical_reactions_list)
- //Chemical Reactions - Initialises all /datum/chemical_reaction into a list
- // It is filtered into multiple lists within a list.
- // For example:
- // chemical_reaction_list["phoron"] is a list of all reactions relating to phoron
-
- var/paths = typesof(/datum/chemical_reaction) - /datum/chemical_reaction
- chemical_reactions_list = list()
-
- for(var/path in paths)
-
- var/datum/chemical_reaction/D = new path()
- var/list/reaction_ids = list()
-
- if(D.required_reagents && D.required_reagents.len)
- for(var/reaction in D.required_reagents)
- reaction_ids += reaction
-
- // Create filters based on each reagent id in the required reagents list
- for(var/id in reaction_ids)
- if(!chemical_reactions_list[id])
- chemical_reactions_list[id] = list()
- chemical_reactions_list[id] += D
- break // Don't bother adding ourselves to other reagent ids, it is redundant.
+/datum/reagents/New(var/max = 100)
+ ..()
+ maximum_volume = max
/datum/reagents/Destroy()
..()
+ if(chemistryProcess)
+ chemistryProcess.active_holders -= src
+
for(var/datum/reagent/R in reagent_list)
qdel(R)
reagent_list.Cut()
@@ -56,31 +22,15 @@ var/const/INGEST = 2
if(my_atom && my_atom.reagents == src)
my_atom.reagents = null
-/datum/reagents/proc/remove_any(var/amount=1)
- var/total_transfered = 0
- var/current_list_element = 1
+/* Internal procs */
- current_list_element = rand(1,reagent_list.len)
+/datum/reagents/proc/get_free_space() // Returns free space.
+ return maximum_volume - total_volume
- while(total_transfered != amount)
- if(total_transfered >= amount) break
- if(total_volume <= 0 || !reagent_list.len) break
-
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
-
- src.remove_reagent(current_reagent.id, 1)
-
- current_list_element++
- total_transfered++
- src.update_total()
-
- handle_reactions()
- return total_transfered
-
-/datum/reagents/proc/get_master_reagent()
+/datum/reagents/proc/get_master_reagent() // Returns reference to the reagent with the biggest volume.
var/the_reagent = null
var/the_volume = 0
+
for(var/datum/reagent/A in reagent_list)
if(A.volume > the_volume)
the_volume = A.volume
@@ -88,7 +38,7 @@ var/const/INGEST = 2
return the_reagent
-/datum/reagents/proc/get_master_reagent_name()
+/datum/reagents/proc/get_master_reagent_name() // Returns the name of the reagent with the biggest volume.
var/the_name = null
var/the_volume = 0
for(var/datum/reagent/A in reagent_list)
@@ -98,7 +48,7 @@ var/const/INGEST = 2
return the_name
-/datum/reagents/proc/get_master_reagent_id()
+/datum/reagents/proc/get_master_reagent_id() // Returns the id of the reagent with the biggest volume.
var/the_id = null
var/the_volume = 0
for(var/datum/reagent/A in reagent_list)
@@ -108,520 +58,355 @@ var/const/INGEST = 2
return the_id
-/datum/reagents/proc/trans_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//if preserve_data=0, the reagents data will be lost. Usefull if you use data for some strange stuff and don't want it to be transferred.
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- if (!current_reagent)
- continue
- if (current_reagent.id == "blood" && ishuman(target))
- var/mob/living/carbon/human/H = target
- H.inject_blood(my_atom, amount)
- continue
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
-
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, safety = 1) //safety checks on these so all chemicals are transferred
- src.remove_reagent(current_reagent.id, current_reagent_transfer, safety = 1) // to the target container before handling reactions
-
- src.update_total()
- R.update_total()
- R.handle_reactions()
- src.handle_reactions()
- return amount
-
-/datum/reagents/proc/trans_to_ingest(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1)//For items ingested. A delay is added between ingestion and addition of the reagents
- if (!target )
- return
- if (!target.reagents || src.total_volume<=0)
- return
-
- /*var/datum/reagents/R = target.reagents
-
- var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
-
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- if (!current_reagent)
- continue
- //if (current_reagent.id == "blood" && ishuman(target))
- // var/mob/living/carbon/human/H = target
- // H.inject_blood(my_atom, amount)
- // continue
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = current_reagent.data
-
- B.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, safety = 1) //safety checks on these so all chemicals are transferred
- src.remove_reagent(current_reagent.id, current_reagent_transfer, safety = 1) // to the target container before handling reactions
-
- src.update_total()
- B.update_total()
- B.handle_reactions()
- src.handle_reactions()*/
-
- var/obj/item/weapon/reagent_containers/glass/beaker/noreact/B = new /obj/item/weapon/reagent_containers/glass/beaker/noreact //temporary holder
- B.volume = 1000
-
- var/datum/reagents/BR = B.reagents
- var/datum/reagents/R = target.reagents
-
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
-
- src.trans_to(B, amount)
-
- spawn(95)
- BR.reaction(target, INGEST)
- spawn(5)
- BR.trans_to(target, BR.total_volume)
- qdel(B)
-
- return amount
-
-/datum/reagents/proc/copy_to(var/obj/target, var/amount=1, var/multiplier=1, var/preserve_data=1, var/safety = 0)
- if(!target)
- return
- if(!target.reagents || src.total_volume<=0)
- return
- var/datum/reagents/R = target.reagents
- amount = min(min(amount, src.total_volume), R.maximum_volume-R.total_volume)
- var/part = amount / src.total_volume
- var/trans_data = null
- for (var/datum/reagent/current_reagent in src.reagent_list)
- var/current_reagent_transfer = current_reagent.volume * part
- if(preserve_data)
- trans_data = copy_data(current_reagent)
- R.add_reagent(current_reagent.id, (current_reagent_transfer * multiplier), trans_data, safety = 1) //safety check so all chemicals are transferred before reacting
-
- src.update_total()
- R.update_total()
- if(!safety)
- R.handle_reactions()
- src.handle_reactions()
- return amount
-
-/datum/reagents/proc/trans_id_to(var/obj/target, var/reagent, var/amount=1, var/preserve_data=1)//Not sure why this proc didn't exist before. It does now! /N
- if (!target)
- return
- if (!target.reagents || src.total_volume<=0 || !src.get_reagent_amount(reagent))
- return
-
- var/datum/reagents/R = target.reagents
- if(src.get_reagent_amount(reagent) R.maximum_volume) return 0
-
- current_list_element = rand(1,reagent_list.len) //Eh, bandaid fix.
-
- while(total_transfered != amount)
- if(total_transfered >= amount) break //Better safe than sorry.
- if(total_volume <= 0 || !reagent_list.len) break
- if(R.total_volume >= R.maximum_volume) break
-
- if(current_list_element > reagent_list.len) current_list_element = 1
- var/datum/reagent/current_reagent = reagent_list[current_list_element]
- if(preserve_data)
- trans_data = current_reagent.data
- R.add_reagent(current_reagent.id, (1 * multiplier), trans_data)
- src.remove_reagent(current_reagent.id, 1)
-
- current_list_element++
- total_transfered++
- src.update_total()
- R.update_total()
- R.handle_reactions()
- handle_reactions()
-
- return total_transfered
-*/
-
-/datum/reagents/proc/metabolize(var/mob/M,var/alien)
-
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if(M && R)
- R.on_mob_life(M,alien)
- update_total()
-
-/datum/reagents/proc/conditional_update_move(var/atom/A, var/Running = 0)
- for(var/datum/reagent/R in reagent_list)
- R.on_move (A, Running)
- update_total()
-
-/datum/reagents/proc/conditional_update(var/atom/A, )
- for(var/datum/reagent/R in reagent_list)
- R.on_update (A)
- update_total()
-
-/datum/reagents/proc/handle_reactions()
- if(my_atom.flags & NOREACT) return //Yup, no reactions here. No siree.
-
- var/reaction_occured = 0
- do
- reaction_occured = 0
- for(var/datum/reagent/R in reagent_list) // Usually a small list
- for(var/reaction in chemical_reactions_list[R.id]) // Was a big list but now it should be smaller since we filtered it with our reagent id
-
- if(!reaction)
- continue
-
- var/datum/chemical_reaction/C = reaction
-
- //check if this recipe needs to be heated to mix
- if(C.requires_heating)
- if(istype(my_atom.loc, /obj/machinery/bunsen_burner))
- if(!my_atom.loc:heated)
- continue
- else
- continue
-
- var/total_required_reagents = C.required_reagents.len
- var/total_matching_reagents = 0
- var/total_required_catalysts = C.required_catalysts.len
- var/total_matching_catalysts= 0
- var/matching_container = 0
- var/matching_other = 0
- var/list/multipliers = new/list()
-
- for(var/B in C.required_reagents)
- if(!has_reagent(B, C.required_reagents[B])) break
- total_matching_reagents++
- multipliers += round(get_reagent_amount(B) / C.required_reagents[B])
- for(var/B in C.required_catalysts)
- if(!has_reagent(B, C.required_catalysts[B])) break
- total_matching_catalysts++
-
- if(!C.required_container)
- matching_container = 1
-
- else
- if(my_atom.type == C.required_container)
- matching_container = 1
-
- if(!C.required_other)
- matching_other = 1
-
- else
- /*if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/M = my_atom
-
- if(M.POWERFLAG == C.required_other && M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1*/
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/M = my_atom
-
- if(M.Uses > 0) // added a limit to slime cores -- Muskets requested this
- matching_other = 1
-
-
-
-
- if(total_matching_reagents == total_required_reagents && total_matching_catalysts == total_required_catalysts && matching_container && matching_other)
- var/multiplier = min(multipliers)
- var/preserved_data = null
- for(var/B in C.required_reagents)
- if(!preserved_data)
- preserved_data = get_data(B)
- remove_reagent(B, (multiplier * C.required_reagents[B]), safety = 1)
-
- var/created_volume = C.result_amount*multiplier
- if(C.result)
- feedback_add_details("chemical_reaction","[C.result]|[C.result_amount*multiplier]")
- multiplier = max(multiplier, 1) //this shouldnt happen ...
- if(!isnull(C.resultcolor)) //paints
- add_reagent(C.result, C.result_amount*multiplier, C.resultcolor)
- else
- add_reagent(C.result, C.result_amount*multiplier)
- set_data(C.result, preserved_data)
-
- //add secondary products
- for(var/S in C.secondary_results)
- add_reagent(S, C.result_amount * C.secondary_results[S] * multiplier)
-
- var/list/seen = viewers(4, get_turf(my_atom))
- for(var/mob/M in seen)
- M << "\blue \icon[my_atom] The solution begins to bubble."
-
- /* if(istype(my_atom, /obj/item/slime_core))
- var/obj/item/slime_core/ME = my_atom
- ME.Uses--
- if(ME.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in viewers(4, get_turf(my_atom)) )
- M << "\blue \icon[my_atom] The innards begin to boil!"
- */
- if(istype(my_atom, /obj/item/slime_extract))
- var/obj/item/slime_extract/ME2 = my_atom
- ME2.Uses--
- if(ME2.Uses <= 0) // give the notification that the slime core is dead
- for(var/mob/M in seen)
- M << "\blue \icon[my_atom] The [my_atom]'s power is consumed in the reaction."
- ME2.name = "used slime extract"
- ME2.desc = "This extract has been used up."
-
- playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1)
-
- C.on_reaction(src, created_volume)
- reaction_occured = 1
- break
-
- while(reaction_occured)
- update_total()
- return 0
-
-/datum/reagents/proc/isolate_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id != reagent)
- del_reagent(R.id)
- update_total()
-
-/datum/reagents/proc/del_reagent(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- reagent_list -= A
- qdel(A)
- update_total()
- my_atom.on_reagent_change()
- return 0
-
-
- return 1
-
-/datum/reagents/proc/update_total()
+/datum/reagents/proc/update_total() // Updates volume.
total_volume = 0
for(var/datum/reagent/R in reagent_list)
- if(R.volume < 0.1)
+ if(R.volume < MINIMUM_CHEMICAL_VOLUME)
del_reagent(R.id)
else
total_volume += R.volume
-
- return 0
-
-/datum/reagents/proc/clear_reagents()
- for(var/datum/reagent/R in reagent_list)
- del_reagent(R.id)
- return 0
-
-/datum/reagents/proc/reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
-
- switch(method)
- if(TOUCH)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A))
- spawn(0)
- if(!R) return
- else R.reaction_mob(A, TOUCH, R.volume+volume_modifier)
- if(isturf(A))
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A))
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
- if(INGEST)
- for(var/datum/reagent/R in reagent_list)
- if(ismob(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_mob(A, INGEST, R.volume+volume_modifier)
- if(isturf(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_turf(A, R.volume+volume_modifier)
- if(isobj(A) && R)
- spawn(0)
- if(!R) return
- else R.reaction_obj(A, R.volume+volume_modifier)
return
-/datum/reagents/proc/add_reagent(var/reagent, var/amount, var/data=null, var/safety = 0)
- if(!isnum(amount)) return 1
- update_total()
- if(total_volume + amount > maximum_volume) amount = (maximum_volume - total_volume) //Doesnt fit in. Make it disappear. Shouldnt happen. Will happen.
-
- for(var/A in reagent_list)
-
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.on_merge(data, amount)
- R.volume += amount
- update_total()
- if(!safety)
- handle_reactions()
- my_atom.on_reagent_change()
- return 0
-
- var/datum/reagent/D = chemical_reagents_list[reagent]
- if(D)
-
- var/datum/reagent/R = new D.type()
- reagent_list += R
- R.holder = src
- R.volume = amount
- if(reagent == "paint")
- R.color = data
- else
- SetViruses(R, data) // Includes setting data for blood
-
- //debug
- //world << "Adding data"
- //for(var/D in R.data)
- // world << "Container data: [D] = [R.data[D]]"
- //debug
- update_total()
- my_atom.on_reagent_change()
- if(!safety)
- handle_reactions()
- return 0
- else
- warning("[my_atom] attempted to add a reagent called '[reagent]' which doesn't exist. ([usr])")
-
- if(!safety)
- handle_reactions()
-
- return 1
-
-/datum/reagents/proc/remove_reagent(var/reagent, var/amount, var/safety = 0)//Added a safety check for the trans_id_to
- if(!isnum(amount)) return 1
-
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- R.volume -= amount
- update_total()
- if(!safety)//So it does not handle reactions when it need not to
- handle_reactions()
- my_atom.on_reagent_change()
- return 0
-
- return 1
-
-/datum/reagents/proc/has_reagent(var/reagent, var/amount = -1)
-
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- if(!amount) return R
- else
- if(R.volume >= amount) return R
- else return 0
-
- return 0
-
-/datum/reagents/proc/get_reagent_amount(var/reagent)
- for(var/A in reagent_list)
- var/datum/reagent/R = A
- if (R.id == reagent)
- return R.volume
-
- return 0
-
-/datum/reagents/proc/get_reagents()
- var/res = ""
- for(var/datum/reagent/A in reagent_list)
- if (res != "") res += ","
- res += A.name
-
- return res
-
-/datum/reagents/proc/remove_all_type(var/reagent_type, var/amount, var/strict = 0, var/safety = 1) // Removes all reagent of X type. @strict set to 1 determines whether the childs of the type are included.
- if(!isnum(amount)) return 1
-
- var/has_removed_reagent = 0
-
- for(var/datum/reagent/R in reagent_list)
- var/matches = 0
- // Switch between how we check the reagent type
- if(strict)
- if(R.type == reagent_type)
- matches = 1
- else
- if(istype(R, reagent_type))
- matches = 1
- // We found a match, proceed to remove the reagent. Keep looping, we might find other reagents of the same type.
- if(matches)
- // Have our other proc handle removement
- has_removed_reagent = remove_reagent(R.id, amount, safety)
-
- return has_removed_reagent
-
-//two helper functions to preserve data across reactions (needed for xenoarch)
-/datum/reagents/proc/get_data(var/reagent_id)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "proffering a data-carrying reagent ([reagent_id])"
- return D.data
-
-/datum/reagents/proc/set_data(var/reagent_id, var/new_data)
- for(var/datum/reagent/D in reagent_list)
- if(D.id == reagent_id)
- //world << "reagent data set ([reagent_id])"
- D.data = new_data
-
/datum/reagents/proc/delete()
for(var/datum/reagent/R in reagent_list)
R.holder = null
if(my_atom)
my_atom.reagents = null
-/datum/reagents/proc/copy_data(var/datum/reagent/current_reagent)
- if (current_reagent.id == "paint") return current_reagent.color
- if (!current_reagent || !current_reagent.data) return null
- if (!istype(current_reagent.data, /list)) return current_reagent.data
+/datum/reagents/proc/handle_reactions()
+ if(chemistryProcess)
+ chemistryProcess.mark_for_update(src)
- var/list/trans_data = current_reagent.data.Copy()
+//returns 1 if the holder should continue reactiong, 0 otherwise.
+/datum/reagents/proc/process_reactions()
+ if(!my_atom) // No reactions in temporary holders
+ return 0
+ if(!my_atom.loc) //No reactions inside GC'd containers
+ return 0
+ if(my_atom.flags & NOREACT) // No reactions here
+ return 0
+
+ var/reaction_occured
+ var/list/effect_reactions = list()
+ var/list/eligible_reactions = list()
+ for(var/i in 1 to PROCESS_REACTION_ITER)
+ reaction_occured = 0
+
+ //need to rebuild this to account for chain reactions
+ for(var/datum/reagent/R in reagent_list)
+ eligible_reactions |= chemical_reactions_list[R.id]
+
+ for(var/datum/chemical_reaction/C in eligible_reactions)
+ if(C.can_happen(src) && C.process(src))
+ effect_reactions |= C
+ reaction_occured = 1
+
+ eligible_reactions.Cut()
+
+ if(!reaction_occured)
+ break
+
+ for(var/datum/chemical_reaction/C in effect_reactions)
+ C.post_reaction(src)
+
+ update_total()
+ return reaction_occured
- // We do this so that introducing a virus to a blood sample
- // doesn't automagically infect all other blood samples from
- // the same donor.
- //
- // Technically we should probably copy all data lists, but
- // that could possibly eat up a lot of memory needlessly
- // if most data lists are read-only.
- if (trans_data["virus2"])
- var/list/v = trans_data["virus2"]
- trans_data["virus2"] = v.Copy()
+/* Holder-to-chemical */
- return trans_data
+/datum/reagents/proc/add_reagent(var/id, var/amount, var/data = null, var/safety = 0)
+ if(!isnum(amount) || amount <= 0)
+ return 0
-///////////////////////////////////////////////////////////////////////////////////
+ update_total()
+ amount = min(amount, get_free_space())
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id == id)
+ current.volume += amount
+ if(!isnull(data)) // For all we know, it could be zero or empty string and meaningful
+ current.mix_data(data, amount)
+ update_total()
+ if(!safety)
+ handle_reactions()
+ if(my_atom)
+ my_atom.on_reagent_change()
+ return 1
+ var/datum/reagent/D = chemical_reagents_list[id]
+ if(D)
+ var/datum/reagent/R = new D.type()
+ reagent_list += R
+ R.holder = src
+ R.volume = amount
+ R.initialize_data(data)
+ update_total()
+ if(!safety)
+ handle_reactions()
+ if(my_atom)
+ my_atom.on_reagent_change()
+ return 1
+ else
+ warning("[my_atom] attempted to add a reagent called '[id]' which doesn't exist. ([usr])")
+ return 0
+
+/datum/reagents/proc/remove_reagent(var/id, var/amount, var/safety = 0)
+ if(!isnum(amount))
+ return 0
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id == id)
+ current.volume -= amount // It can go negative, but it doesn't matter
+ update_total() // Because this proc will delete it then
+ if(!safety)
+ handle_reactions()
+ if(my_atom)
+ my_atom.on_reagent_change()
+ return 1
+ return 0
+
+/datum/reagents/proc/del_reagent(var/id)
+ for(var/datum/reagent/current in reagent_list)
+ if (current.id == id)
+ reagent_list -= current
+ qdel(current)
+ update_total()
+ if(my_atom)
+ my_atom.on_reagent_change()
+ return 0
+
+/datum/reagents/proc/has_reagent(var/id, var/amount = 0)
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id == id)
+ if(current.volume >= amount)
+ return 1
+ else
+ return 0
+ return 0
+
+/datum/reagents/proc/has_any_reagent(var/list/check_reagents)
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id in check_reagents)
+ if(current.volume >= check_reagents[current.id])
+ return 1
+ else
+ return 0
+ return 0
+
+/datum/reagents/proc/has_all_reagents(var/list/check_reagents)
+ //this only works if check_reagents has no duplicate entries... hopefully okay since it expects an associative list
+ var/missing = check_reagents.len
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id in check_reagents)
+ if(current.volume >= check_reagents[current.id])
+ missing--
+ return !missing
+
+/datum/reagents/proc/clear_reagents()
+ for(var/datum/reagent/current in reagent_list)
+ del_reagent(current.id)
+ return
+
+/datum/reagents/proc/get_reagent_amount(var/id)
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id == id)
+ return current.volume
+ return 0
+
+/datum/reagents/proc/get_data(var/id)
+ for(var/datum/reagent/current in reagent_list)
+ if(current.id == id)
+ return current.get_data()
+ return 0
+
+/datum/reagents/proc/get_reagents()
+ var/res = ""
+ for(var/datum/reagent/current in reagent_list)
+ if (res != "") res += ","
+ res += "[current.id]([current.volume])"
+
+ return res
+
+/* Holder-to-holder and similar procs */
+
+/datum/reagents/proc/remove_any(var/amount = 1) // Removes up to [amount] of reagents from [src]. Returns actual amount removed.
+ amount = min(amount, total_volume)
+
+ if(!amount)
+ return
+
+ var/part = amount / total_volume
+
+ for(var/datum/reagent/current in reagent_list)
+ var/amount_to_remove = current.volume * part
+ remove_reagent(current.id, amount_to_remove, 1)
+
+ update_total()
+ handle_reactions()
+ return amount
+
+/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]).
+ if(!target || !istype(target))
+ return
+
+ amount = min(amount, total_volume, target.get_free_space() / multiplier)
+
+ if(!amount)
+ return
+
+ var/part = amount / total_volume
+
+ for(var/datum/reagent/current in reagent_list)
+ var/amount_to_transfer = current.volume * part
+ target.add_reagent(current.id, amount_to_transfer * multiplier, current.get_data(), safety = 1) // We don't react until everything is in place
+ if(!copy)
+ remove_reagent(current.id, amount_to_transfer, 1)
+
+ if(!copy)
+ handle_reactions()
+ target.handle_reactions()
+ return amount
+
+/* Holder-to-atom and similar procs */
+
+/datum/reagents/proc/touch(var/atom/target) // This picks the appropriate reaction. Reagents are not guaranteed to transfer to the target.
+ if(ismob(target))
+ touch_mob(target)
+ if(isturf(target))
+ touch_turf(target)
+ if(isobj(target))
+ touch_obj(target)
+ return
+
+/datum/reagents/proc/touch_mob(var/mob/target)
+ if(!target || !istype(target))
+ return
+
+ for(var/datum/reagent/current in reagent_list)
+ current.touch_mob(target)
+
+ update_total()
+
+/datum/reagents/proc/touch_turf(var/turf/target)
+ if(!target || !istype(target))
+ return
+
+ for(var/datum/reagent/current in reagent_list)
+ current.touch_turf(target)
+
+ update_total()
+
+/datum/reagents/proc/touch_obj(var/obj/target)
+ if(!target || !istype(target))
+ return
+
+ for(var/datum/reagent/current in reagent_list)
+ current.touch_obj(target)
+
+ update_total()
+
+/datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
+ if(ismob(target))
+ //warning("[my_atom] is trying to transfer reagents to [target], which is a mob, using trans_to()")
+ //return trans_to_mob(target, amount, multiplier, copy)
+ return splash_mob(target, amount)
+ if(isturf(target))
+ return trans_to_turf(target, amount, multiplier, copy)
+ if(isobj(target))
+ return trans_to_obj(target, amount, multiplier, copy)
+ return 0
+
+/datum/reagents/proc/trans_id_to(var/atom/target, var/id, var/amount = 1)
+ if (!target || !target.reagents)
+ return
+
+ amount = min(amount, get_reagent_amount(id))
+
+ if(!amount)
+ return
+
+ var/datum/reagents/F = new /datum/reagents(amount)
+ var/tmpdata = get_data(id)
+ F.add_reagent(id, amount, tmpdata)
+ remove_reagent(id, amount)
+
+ return F.trans_to(target, amount) // Let this proc check the atom's type
+
+/datum/reagents/proc/splash_mob(var/mob/target, var/amount = 1, var/clothes = 1)
+ var/perm = 0
+ var/list/L = list("head" = THERMAL_PROTECTION_HEAD, "upper_torso" = THERMAL_PROTECTION_UPPER_TORSO, "lower_torso" = THERMAL_PROTECTION_LOWER_TORSO, "legs" = THERMAL_PROTECTION_LEG_LEFT + THERMAL_PROTECTION_LEG_RIGHT, "feet" = THERMAL_PROTECTION_FOOT_LEFT + THERMAL_PROTECTION_FOOT_RIGHT, "arms" = THERMAL_PROTECTION_ARM_LEFT + THERMAL_PROTECTION_ARM_RIGHT, "hands" = THERMAL_PROTECTION_HAND_LEFT + THERMAL_PROTECTION_HAND_RIGHT)
+ if(clothes)
+ for(var/obj/item/clothing/C in target.get_equipped_items())
+ if(C.permeability_coefficient == 1 || C.body_parts_covered == 0)
+ continue
+ if(C.body_parts_covered & HEAD)
+ L["head"] *= C.permeability_coefficient
+ if(C.body_parts_covered & UPPER_TORSO)
+ L["upper_torso"] *= C.permeability_coefficient
+ if(C.body_parts_covered & LOWER_TORSO)
+ L["lower_torso"] *= C.permeability_coefficient
+ if(C.body_parts_covered & LEGS)
+ L["legs"] *= C.permeability_coefficient
+ if(C.body_parts_covered & FEET)
+ L["feet"] *= C.permeability_coefficient
+ if(C.body_parts_covered & ARMS)
+ L["arms"] *= C.permeability_coefficient
+ if(C.body_parts_covered & HANDS)
+ L["hands"] *= C.permeability_coefficient
+ for(var/t in L)
+ perm += L[t]
+ return trans_to_mob(target, amount, CHEM_TOUCH, perm)
+
+/datum/reagents/proc/trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) // Transfer after checking into which holder...
+ if(!target || !istype(target))
+ return
+ if(iscarbon(target))
+ var/mob/living/carbon/C = target
+ if(type == CHEM_BLOOD)
+ var/datum/reagents/R = C.reagents
+ return trans_to_holder(R, amount, multiplier, copy)
+ if(type == CHEM_INGEST)
+ var/datum/reagents/R = C.ingested
+ return trans_to_holder(R, amount, multiplier, copy)
+ if(type == CHEM_TOUCH)
+ var/datum/reagents/R = C.touching
+ return trans_to_holder(R, amount, multiplier, copy)
+ else
+ var/datum/reagents/R = new /datum/reagents(amount)
+ . = trans_to_holder(R, amount, multiplier, copy)
+ R.touch_mob(target)
+
+/datum/reagents/proc/trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Turfs don't have any reagents (at least, for now). Just touch it.
+ if(!target)
+ return
+
+ var/datum/reagents/R = new /datum/reagents(maximum_volume)
+ . = trans_to_holder(R, amount, multiplier, copy)
+ R.touch_turf(target)
+ return
+
+/datum/reagents/proc/trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch.
+ if(!target)
+ return
+
+ if(!target.reagents)
+ var/datum/reagents/R = new /datum/reagents(maximum_volume)
+ . = trans_to_holder(R, amount, multiplier, copy)
+ R.touch_obj(target)
+ return
+
+ return trans_to_holder(target.reagents, amount, multiplier, copy)
+
+/datum/reagents/proc/metabolize(var/alien, var/location)
+ if(!iscarbon(my_atom))
+ return
+ var/mob/living/carbon/C = my_atom
+ if(!C || !istype(C))
+ return
+ for(var/datum/reagent/current in reagent_list)
+ current.on_mob_life(C, alien, location)
+ update_total()
+
+/* Atom reagent creation - use it all the time */
-// Convenience proc to create a reagents holder for an atom
-// Max vol is maximum volume of holder
/atom/proc/create_reagents(var/max_vol)
reagents = new/datum/reagents(max_vol)
reagents.my_atom = src
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 5a79e2a3cde..7f6da07d671 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -189,7 +189,7 @@
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
P.icon_state = "pill"+pillsprite
- reagents.trans_to(P,amount_per_pill)
+ reagents.trans_to_obj(P,amount_per_pill)
if(src.loaded_pill_bottle)
if(loaded_pill_bottle.contents.len < loaded_pill_bottle.storage_slots)
P.loc = loaded_pill_bottle
@@ -204,11 +204,11 @@
P.pixel_x = rand(-7, 7) //random position
P.pixel_y = rand(-7, 7)
P.icon_state = bottlesprite
- reagents.trans_to(P,60)
+ reagents.trans_to_obj(P,60)
P.update_icon()
else
var/obj/item/weapon/reagent_containers/food/condiment/P = new/obj/item/weapon/reagent_containers/food/condiment(src.loc)
- reagents.trans_to(P,50)
+ reagents.trans_to_obj(P,50)
else if(href_list["change_pill"])
#define MAX_PILL_SPRITE 20 //max icon state of the pill sprites
var/dat = ""
@@ -587,12 +587,12 @@
var/limit = 10
var/list/holdingitems = list()
var/list/sheet_reagents = list(
- /obj/item/stack/sheet/mineral/iron = "iron",
- /obj/item/stack/sheet/mineral/uranium = "uranium",
- /obj/item/stack/sheet/mineral/phoron = "phoron",
- /obj/item/stack/sheet/mineral/gold = "gold",
- /obj/item/stack/sheet/mineral/silver = "silver",
- /obj/item/stack/sheet/mineral/mhydrogen = "hydrogen"
+ /obj/item/stack/material/iron = "iron",
+ /obj/item/stack/material/uranium = "uranium",
+ /obj/item/stack/material/phoron = "phoron",
+ /obj/item/stack/material/gold = "gold",
+ /obj/item/stack/material/silver = "silver",
+ /obj/item/stack/material/mhydrogen = "hydrogen"
)
/obj/machinery/reagentgrinder/New()
@@ -798,4 +798,4 @@
if (beaker.reagents.total_volume >= beaker.reagents.maximum_volume)
break
-#undef REAGENTS_PER_SHEET
+#undef REAGENTS_PER_SHEET
diff --git a/code/modules/reagents/Chemistry-Readme.dm b/code/modules/reagents/Chemistry-Readme.dm
index ac8792c1e76..399e856bf33 100644
--- a/code/modules/reagents/Chemistry-Readme.dm
+++ b/code/modules/reagents/Chemistry-Readme.dm
@@ -24,212 +24,258 @@ About the Holder:
The holder (reagents datum) is the datum that holds a list of all reagents
currently in the object.It also has all the procs needed to manipulate reagents
- remove_any(var/amount)
- This proc removes reagents from the holder until the passed amount
- is matched. It'll try to remove some of ALL reagents contained.
+ Vars:
+ list/datum/reagent/reagent_list
+ List of reagent datums.
- trans_to(var/obj/target, var/amount)
- This proc equally transfers the contents of the holder to another
- objects holder. You need to pass it the object (not the holder) you want
- to transfer to and the amount you want to transfer. Its return value is the
- actual amount transfered (if one of the objects is full/empty)
+ total_volume
+ Total volume of all reagents.
- trans_id_to(var/obj/target, var/reagent, var/amount)
- Same as above but only for a specific reagent in the reagent list.
- If the specified amount is greater than what is available, it will use
- the amount of the reagent that is available. If no reagent exists, returns null.
+ maximum_volume
+ Maximum volume.
- metabolize(var/mob/M)
- This proc is called by the mobs life proc. It simply calls on_mob_life for
- all contained reagents. You shouldnt have to use this one directly.
+ atom/my_atom
+ Reference to the object that contains this.
- handle_reactions()
- This proc check all recipes and, on a match, uses them.
- It will also call the recipe's on_reaction proc (for explosions or w/e).
- Currently, this proc is automatically called by trans_to.
- - Modified from the original to preserve reagent data across reactions (originally for xenoarchaeology)
+ Procs:
- isolate_reagent(var/reagent)
- Pass it a reagent id and it will remove all reagents but that one.
- It's that simple.
+ get_free_space()
+ Returns the remaining free volume in the holder.
- del_reagent(var/reagent)
- Completely remove the reagent with the matching id.
+ get_master_reagent()
+ Returns the reference to the reagent with the largest volume
- reaction_fire(exposed_temp)
- Simply calls the reaction_fire procs of all contained reagents.
+ get_master_reagent_name()
+ Ditto, but returns the name.
+
+ get_master_reagent_id()
+ Ditto, but returns ID.
update_total()
- This one simply updates the total volume of the holder.
- (the volume of all reagents added together)
+ Updates total volume, called automatically.
+
+ handle_reactions()
+ Checks reagents and triggers any reactions that happen. Usually called automatically.
+
+ add_reagent(var/id, var/amount, var/data = null, var/safety = 0)
+ Adds [amount] units of [id] reagent. [data] will be passed to reagent's mix_data() or initialize_data(). If [safety] is 0, handle_reactions() will be called. Returns 1 if successful, 0 otherwise.
+
+ remove_reagent(var/id, var/amount, var/safety = 0)
+ Ditto, but removes reagent. Returns 1 if successful, 0 otherwise.
+
+ del_reagent(var/id)
+ Removes all of the reagent.
+
+ has_reagent(var/id, var/amount = 0)
+ Checks if holder has at least [amount] of [id] reagent. Returns 1 if the reagent is found and volume is above [amount]. Returns 0 otherwise.
clear_reagents()
- This proc removes ALL reagents from the holder.
+ Removes all reagents.
- reaction(var/atom/A, var/method=TOUCH, var/volume_modifier=0)
- This proc calls the appropriate reaction procs of the reagents.
- I.e. if A is an object, it will call the reagents reaction_obj
- proc. The method var is used for reaction on mobs. It simply tells
- us if the mob TOUCHed the reagent or if it INGESTed the reagent.
- Since the volume can be checked in a reagents proc, you might want to
- use the volume_modifier var to modifiy the passed value without actually
- changing the volume of the reagents.
- If you're not sure if you need to use this the answer is very most likely 'No'.
- You'll want to use this proc whenever an atom first comes in
- contact with the reagents of a holder. (in the 'splash' part of a beaker i.e.)
- More on the reaction in the reagent part of this readme.
+ get_reagent_amount(var/id)
+ Returns reagent volume. Returns 0 if reagent is not found.
- add_reagent(var/reagent, var/amount, var/data)
- Attempts to add X of the matching reagent to the holder.
- You wont use this much. Mostly in new procs for pre-filled
- objects.
+ get_data(var/id)
+ Returns get_data() of the reagent.
- remove_reagent(var/reagent, var/amount)
- The exact opposite of the add_reagent proc.
- - Modified from original to return the reagent's data, in order to preserve reagent data across reactions (originally for xenoarchaeology)
+ get_reagents()
+ Returns a string containing all reagent ids and volumes, e.g. "carbon(4),nittrogen(5)".
- has_reagent(var/reagent, var/amount)
- Returns 1 if the holder contains this reagent.
- Or 0 if not.
- If you pass it an amount it will additionally check
- if the amount is matched. This is optional.
+ remove_any(var/amount = 1)
+ Removes up to [amount] of reagents from [src]. Returns actual amount removed.
- get_reagent_amount(var/reagent)
- Returns the amount of the matching reagent inside the
- holder. Returns 0 if the reagent is missing.
+ trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
+ Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). If [copy] is 1, copies reagents instead.
- Important variables:
+ touch(var/atom/target)
+ Not recommended to use. Calls touch_mob(target), touch_turf(target), or touch_obj(target), depending on target's type.
- total_volume
- This variable contains the total volume of all reagents in this holder.
+ touch_mob(var/mob/target)
+ Calls each reagent's touch_mob(target).
- reagent_list
- This is a list of all contained reagents. More specifically, references
- to the reagent datums.
+ touch_turf(var/turf/target)
+ Calls each reagent's touch_turf(target).
- maximum_volume
- This is the maximum volume of the holder.
+ touch_obj(var/obj/target)
+ Calls each reagent's touch_obj(target).
- my_atom
- This is the atom the holder is 'in'. Useful if you need to find the location.
- (i.e. for explosions)
+ trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
+ Checks the type of [target], calling splash_mob(target, amount), trans_to_turf(target, amount, multiplier, copy), or trans_to_obj(target, amount, multiplier, copy).
+ trans_id_to(var/atom/target, var/id, var/amount = 1)
+ Transfers [amount] of [id] to [target]. Returns amount transferred.
+
+ splash_mob(var/mob/target, var/amount = 1, var/clothes = 1)
+ Checks mob's clothing if [clothes] is 1 and transfers [amount] reagents to mob's skin.
+
+ trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0)
+ Transfers [amount] reagents to the mob's appropriate holder, depending on [type]. Ignores protection.
+
+ trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
+ Turfs don't currently have any reagents. Puts [amount] reagents into a temporary holder, calls touch_turf(target) from it, and deletes it.
+
+ trans_to_obj(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0)
+ If target has reagents, transfers [amount] to it. Otherwise, same as trans_to_turf().
+
+ /atom/proc/create_reagents(var/max_vol)
+ Creates a new reagent datum.
About Reagents:
Reagents are all the things you can mix and fille in bottles etc. This can be anything from
- rejuvs over water to ... iron. Each reagent also has a few procs - i'll explain those below.
+ rejuvs over water to... iron.
- reaction_mob(var/mob/M, var/method=TOUCH)
- This is called by the holder's reation proc.
- This version is only called when the reagent
- reacts with a mob. The method var can be either
- TOUCH or INGEST. You'll want to put stuff like
- acid-facemelting in here.
-
- reaction_obj(var/obj/O)
- This is called by the holder's reation proc.
- This version is called when the reagents reacts
- with an object. You'll want to put stuff like
- object melting in here ... or something. i dunno.
-
- reaction_turf(var/turf/T)
- This is called by the holder's reaction proc.
- This version is called when the reagents reacts
- with a turf. You'll want to put stuff like extra
- slippery floors for lube or something in here.
-
- on_mob_life(var/mob/M)
- This proc is called everytime the mobs life proc executes.
- This is the place where you put damage for toxins ,
- drowsyness for sleep toxins etc etc.
- You'll want to call the parents proc by using ..() .
- If you don't, the chemical will stay in the mob forever -
- unless you write your own piece of code to slowly remove it.
- (Should be pretty easy, 1 line of code)
-
- Important variables:
-
- holder
- This variable contains a reference to the holder the chemical is 'in'
-
- volume
- This is the volume of the reagent.
-
- id
- The id of the reagent
+ Vars:
name
- The name of the reagent.
+ Name that shows up in-game.
- data
- This var can be used for whatever the fuck you want. I used it for the sleep
- toxins to make them work slowly instead of instantly. You could also use this
- for DNA in a blood reagent or ... well whatever you want.
+ id
+ ID that is used for internal tracking. MUST BE UNIQUE.
+
+ description
+ Description that shows up in-game.
+
+ datum/reagents/holder
+ Reference to holder.
+
+ reagent_state
+ Could be GAS, LIQUID, or SOLID. Affects nothing. Reserved for future use.
+
+ list/data
+ Use varies by reagent. Custom variable. For example, blood stores blood group and viruses.
+
+ volume
+ Current volume.
+
+ metabolism
+ How quickly reagent is processed in mob's bloodstream; by default aslo affects ingest and touch metabolism.
+
+ ingest_met
+ How quickly reagent is processed when ingested; [metabolism] is used if zero.
+
+ touch_met
+ Ditto when touching.
+
+ dose
+ How much of the reagent has been processed, limited by [max_dose]. Used for reagents with varying effects (e.g. ethanol or rezadone) and overdosing.
+
+ max_dose
+ Maximum amount of reagent that has ever been in a mob. Exists so dose won't grow infinitely when small amounts of reagent are added over time.
+
+ overdose
+ If [dose] is bigger than [overdose], overdose() proc is called every tick.
+
+ scannable
+ If set to 1, will show up on health analyzers by name.
+
+ affects_dead
+ If set to 1, will affect dead players. Used by Adminordrazine.
+
+ glass_icon_state
+ Used by drinks. icon_state of the glass when this reagent is the master reagent.
+
+ glass_name
+ Ditto for glass name.
+
+ glass_desc
+ Ditto for glass desciption.
+
+ glass_center_of_mass
+ Used for glass placement on tables.
color
- This is a hexadecimal color that represents the reagent outside of containers,
- you define it as "#RRGGBB", or, red green blue. You can also define it using the
- rgb() proc, which returns a hexadecimal value too. The color is black by default.
+ "#RRGGBB" or "#RRGGBBAA" where A is alpha channel.
- A good website for color calculations: http://www.psyclops.com/tools/rgb/
+ color_weight
+ How much reagent affects color of holder. Used by paint.
+ Procs:
+ remove_self(var/amount)
+ Removes [amount] of itself.
+ touch_mob(var/mob/M)
+ Called when reagent is in another holder and not splashing the mob. Can be used with noncarbons.
+
+ touch_obj(var/obj/O)
+ How reagent reacts with objects.
+
+ touch_turf(var/turf/T)
+ How reagent reacts with turfs.
+
+ on_mob_life(var/mob/living/carbon/M, var/alien, var/location)
+ Makes necessary checks and calls one of affect procs.
+
+ affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ How reagent affects mob when injected. [removed] is the amount of reagent that has been removed this tick. [alien] is the mob's reagent flag.
+
+ affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ Ditto, ingested. Defaults to affect_blood with halved dose.
+
+ affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ Ditto, touching.
+
+ overdose(var/mob/living/carbon/M, var/alien)
+ Called when dose is above overdose. Defaults to M.adjustToxLoss(REM).
+
+ initialize_data(var/newdata)
+ Called when reagent is created. Defaults to setting [data] to [newdata].
+
+ mix_data(var/newdata, var/newamount)
+ Called when [newamount] of reagent with [newdata] data is added to the current reagent. Used by paint.
+
+ get_data()
+ Returns data. Can be overriden.
About Recipes:
Recipes are simple datums that contain a list of required reagents and a result.
They also have a proc that is called when the recipe is matched.
- on_reaction(var/datum/reagents/holder, var/created_volume)
- This proc is called when the recipe is matched.
- You'll want to add explosions etc here.
- To find the location you'll have to do something
- like get_turf(holder.my_atom)
+ Vars:
- name & id
- Should be pretty obvious.
+ name
+ Name of the reaction, currently unused.
+
+ id
+ ID of the reaction, must be unique.
result
- This var contains the id of the resulting reagent.
+ ID of the resulting reagent. Can be null.
- required_reagents
- This is a list of ids of the required reagents.
- Each id also needs an associated value that gives us the minimum required amount
- of that reagent. The handle_reaction proc can detect mutiples of the same recipes
- so for most cases you want to set the required amount to 1.
+ list/required_reagents
+ Reagents that are required for the reaction and are used up during it.
- required_catalysts (Added May 2011)
- This is a list of the ids of the required catalysts.
- Functionally similar to required_reagents, it is a list of reagents that are required
- for the reaction. However, unlike required_reagents, catalysts are NOT consumed.
- They mearly have to be present in the container.
+ list/catalysts
+ Ditto, but not used up.
+
+ list/inhibitors
+ Opposite, prevent the reaction from happening.
result_amount
- This is the amount of the resulting reagent this recipe will produce.
- I recommend you set this to the total volume of all required reagent.
+ Amount of resulting reagent.
- required_container
- The container the recipe has to take place in in order to happen. Leave this blank/null
- if you want the reaction to happen anywhere.
+ mix_message
+ Message that is shown to mobs when reaction happens.
- required_other
- Basically like a reagent's data variable. You can set extra requirements for a
- reaction with this.
+ Procs:
+ can_happen(var/datum/reagents/holder)
+ Customizable. If it returns 0, reaction will not happen. Defaults to always returning 1. Used by slime core reactions.
+
+ on_reaction(var/datum/reagents/holder, var/created_volume)
+ Called when reaction happens. Used by explosives.
+
+ send_data(var/datum/reagents/T)
+ Sets resulting reagent's data. Used by blood paint.
About the Tools:
By default, all atom have a reagents var - but its empty. if you want to use an object for the chem.
system you'll need to add something like this in its new proc:
- var/datum/reagents/R = new/datum/reagents(100) <<<<< create a new datum , 100 is the maximum_volume of the new holder datum.
- reagents = R <<<<< assign the new datum to the objects reagents var
- R.my_atom = src <<<<< set the holders my_atom to src so that we know where we are.
-
- This can also be done by calling a convenience proc:
- atom/proc/create_reagents(var/max_volume)
+ /atom/proc/create_reagents(var/max_volume)
Other important stuff:
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index b4e6248246c..80658f48645 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -1,103 +1,120 @@
-#define SOLID 1
-#define LIQUID 2
-#define GAS 3
-#define REAGENTS_OVERDOSE 30
-#define REM REAGENTS_EFFECT_MULTIPLIER
-//The reaction procs must ALWAYS set src = null, this detaches the proc from the object (the reagent)
-//so that it can continue working when the reagent is deleted while the proc is still active.
+//Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id
+/proc/initialize_chemical_reagents()
+ var/paths = typesof(/datum/reagent) - /datum/reagent
+ chemical_reagents_list = list()
+ for(var/path in paths)
+ var/datum/reagent/D = new path()
+ if(!D.name)
+ continue
+ chemical_reagents_list[D.id] = D
/datum/reagent
var/name = "Reagent"
var/id = "reagent"
- var/description = ""
+ var/description = "A non-descript chemical."
var/datum/reagents/holder = null
var/reagent_state = SOLID
var/list/data = null
var/volume = 0
- var/nutriment_factor = 0
- var/custom_metabolism = REAGENTS_METABOLISM
+ var/metabolism = REM // This would be 0.2 normally
+ var/ingest_met = 0
+ var/touch_met = 0
+ var/dose = 0
+ var/max_dose = 0
var/overdose = 0
- var/overdose_dam = 1
- var/scannable = 0 //shows up on health analyzers
+ var/scannable = 0 // Shows up on health analyzers.
+ var/affects_dead = 0
var/glass_icon_state = null
var/glass_name = null
var/glass_desc = null
var/glass_center_of_mass = null
- //var/list/viruses = list()
- var/color = "#000000" // rgb: 0, 0, 0, 0 - supports alpha channels
+ var/color = "#000000"
var/color_weight = 1
-/datum/reagent/proc/reaction_mob(var/mob/M, var/method=TOUCH, var/volume) //By default we have a chance to transfer some
- if(!istype(M, /mob/living)) return 0
- var/datum/reagent/self = src
- src = null //of the reagent to the mob on TOUCHING it.
+/datum/reagent/proc/remove_self(var/amount) // Shortcut
+ holder.remove_reagent(id, amount)
- if(self.holder) //for catching rare runtimes
- if(!istype(self.holder.my_atom, /obj/effect/effect/smoke/chem))
- // If the chemicals are in a smoke cloud, do not try to let the chemicals "penetrate" into the mob's system (balance station 13) -- Doohl
-
- if(method == TOUCH)
-
- var/chance = 1
- var/block = 0
-
- for(var/obj/item/clothing/C in M.get_equipped_items())
- if(C.permeability_coefficient < chance) chance = C.permeability_coefficient
- if(istype(C, /obj/item/clothing/suit/bio_suit))
- // bio suits are just about completely fool-proof - Doohl
- // kind of a hacky way of making bio suits more resistant to chemicals but w/e
- if(prob(75))
- block = 1
-
- if(istype(C, /obj/item/clothing/head/bio_hood))
- if(prob(75))
- block = 1
-
- chance = chance * 100
-
- if(prob(chance) && !block)
- if(M.reagents)
- M.reagents.add_reagent(self.id,self.volume/2)
- return 1
-
-/datum/reagent/proc/reaction_obj(var/obj/O, var/volume) //By default we transfer a small part of the reagent to the object
- src = null //if it can hold reagents. nope!
- //if(O.reagents)
- // O.reagents.add_reagent(id,volume/3)
+/datum/reagent/proc/touch_mob(var/mob/M) // This doesn't apply to being splashed - this is for, e.g. extinguishers and sprays. The difference is that reagent is not on the mob - it's in another object.
return
-/datum/reagent/proc/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/proc/touch_obj(var/obj/O) // Acid melting, cleaner cleaning, etc
return
-/datum/reagent/proc/on_mob_life(var/mob/living/M as mob, var/alien)
- if(!istype(M, /mob/living))
- return //Noticed runtime errors from pacid trying to damage ghosts, this should fix. --NEO
- if( (overdose > 0) && (volume >= overdose))//Overdosing, wooo
- M.adjustToxLoss(overdose_dam)
- holder.remove_reagent(src.id, custom_metabolism) //By default it slowly disappears.
+/datum/reagent/proc/touch_turf(var/turf/T) // Cleaner cleaning, lube lubbing, etc, all go here
return
-/datum/reagent/proc/on_move(var/mob/M)
+/datum/reagent/proc/on_mob_life(var/mob/living/carbon/M, var/alien, var/location) // Currently, on_mob_life is called on carbons. Any interaction with non-carbon mobs (lube) will need to be done in touch_mob.
+ if(!istype(M))
+ return
+ if(!affects_dead && M.stat == DEAD)
+ return
+ if(overdose && (location == CHEM_BLOOD))
+ overdose(M, alien)
+ var/removed = metabolism
+ if(ingest_met && (location == CHEM_INGEST))
+ removed = ingest_met
+ if(touch_met && (location == CHEM_TOUCH))
+ removed = touch_met
+ removed = min(removed, volume)
+ max_dose = max(volume, max_dose)
+ dose = min(dose + removed, max_dose)
+ if(removed >= (metabolism * 0.1) || removed >= 0.1) // If there's too little chemical, don't affect the mob, just remove it
+ switch(location)
+ if(CHEM_BLOOD)
+ affect_blood(M, alien, removed)
+ if(CHEM_INGEST)
+ affect_ingest(M, alien, removed)
+ if(CHEM_TOUCH)
+ affect_touch(M, alien, removed)
+ remove_self(removed)
return
-// Called after add_reagents creates a new reagent.
-/datum/reagent/proc/on_new(var/data)
+/datum/reagent/proc/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
return
-// Called when two reagents of the same are mixing. <-- Blatant lies
-/datum/reagent/proc/on_merge(var/newdata, var/newamount)
+/datum/reagent/proc/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ affect_blood(M, alien, removed * 0.5)
return
-/datum/reagent/proc/on_update(var/atom/A)
+/datum/reagent/proc/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
return
+/datum/reagent/proc/overdose(var/mob/living/carbon/M, var/alien) // Overdose effect. Doesn't happen instantly.
+ M.adjustToxLoss(REM)
+ return
+
+/datum/reagent/proc/initialize_data(var/newdata) // Called when the reagent is created.
+ if(!isnull(newdata))
+ data = newdata
+ return
+
+/datum/reagent/proc/mix_data(var/newdata, var/newamount) // You have a reagent with data, and new reagent with its own data get added, how do you deal with that?
+ return
+
+/datum/reagent/proc/get_data() // Just in case you have a reagent that handles data differently.
+ if(data && istype(data, /list))
+ return data.Copy()
+ else if(data)
+ return data
+ return null
+
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
..()
holder = null
+/* DEPRECATED - TODO: REMOVE EVERYWHERE */
+
+/datum/reagent/proc/reaction_turf(var/turf/target)
+ touch_turf(target)
+
+/datum/reagent/proc/reaction_obj(var/obj/target)
+ touch_obj(target)
+
+/datum/reagent/proc/reaction_mob(var/mob/target)
+ touch_mob(target)
+
/datum/reagent/woodpulp
name = "Wood Pulp"
id = "woodpulp"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
index 36749ef4086..c7afddee391 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Core.dm
@@ -1,119 +1,100 @@
/datum/reagent/blood
- data = new/list("donor"=null,"viruses"=null,"species"="Human","blood_DNA"=null,"blood_type"=null,"blood_colour"= "#A10808","resistances"=null,"trace_chem"=null, "antibodies" = list())
+ data = new/list("donor" = null, "viruses" = null, "species" = "Human", "blood_DNA" = null, "blood_type" = null, "blood_colour" = "#A10808", "resistances" = null, "trace_chem" = null, "antibodies" = list())
name = "Blood"
id = "blood"
reagent_state = LIQUID
- color = "#C80000" // rgb: 200, 0, 0
+ metabolism = REM * 5
+ color = "#C80000"
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
-/datum/reagent/blood/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/blood/self = src
- src = null
- if(self.data && self.data["viruses"])
- for(var/datum/disease/D in self.data["viruses"])
- //var/datum/disease/virus = new D.type(0, D, 1)
- // We don't spread.
- if(D.spread_type == SPECIAL || D.spread_type == NON_CONTAGIOUS) continue
-
- if(method == TOUCH)
- M.contract_disease(D)
- else //injected
- M.contract_disease(D, 1, 0)
- if(self.data && self.data["virus2"] && istype(M, /mob/living/carbon))//infecting...
- var/list/vlist = self.data["virus2"]
- if (vlist.len)
- for (var/ID in vlist)
- var/datum/disease2/disease/V = vlist[ID]
-
- if(method == TOUCH)
- infect_virus2(M,V.getcopy())
- else
- infect_virus2(M,V.getcopy(),1) //injected, force infection!
- if(self.data && self.data["antibodies"] && istype(M, /mob/living/carbon))//... and curing
- var/mob/living/carbon/C = M
- C.antibodies |= self.data["antibodies"]
-
-/datum/reagent/blood/on_merge(var/newdata, var/newamount)
- if(!data || !newdata)
- return
- if(newdata["blood_colour"])
- color = newdata["blood_colour"]
- if(data && newdata)
- if(data["viruses"] || newdata["viruses"])
-
- var/list/mix1 = data["viruses"]
- var/list/mix2 = newdata["viruses"]
-
- // Stop issues with the list changing during mixing.
- var/list/to_mix = list()
-
- for(var/datum/disease/advance/AD in mix1)
- to_mix += AD
- for(var/datum/disease/advance/AD in mix2)
- to_mix += AD
-
- var/datum/disease/advance/AD = Advance_Mix(to_mix)
- if(AD)
- var/list/preserve = list(AD)
- for(var/D in data["viruses"])
- if(!istype(D, /datum/disease/advance))
- preserve += D
- data["viruses"] = preserve
- return ..()
-
-/datum/reagent/blood/on_update(var/atom/A)
- if(data["blood_colour"])
+/datum/reagent/blood/initialize_data(var/newdata)
+ ..()
+ if(data && data["blood_colour"])
color = data["blood_colour"]
- return ..()
-
-/datum/reagent/blood/reaction_turf(var/turf/simulated/T, var/volume)//splash the blood all over the place
- if(!istype(T)) return
- var/datum/reagent/blood/self = src
- src = null
- if(!(volume >= 3)) return
-
- if(!self.data["donor"] || istype(self.data["donor"], /mob/living/carbon/human))
- blood_splatter(T,self,1)
- else if(istype(self.data["donor"], /mob/living/carbon/alien))
- var/obj/effect/decal/cleanable/blood/B = blood_splatter(T,self,1)
- if(B) B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
- if(volume >= 5 && !istype(T.loc, /area/chapel)) //blood desanctifies non-chapel tiles
- T.holy = 0
return
-/* Must check the transfering of reagents and their data first. They all can point to one disease datum.
+/datum/reagent/blood/get_data() // Just in case you have a reagent that handles data differently.
+ var/t = data.Copy()
+ if(t["virus2"])
+ var/list/v = t["virus2"]
+ t["virus2"] = v.Copy()
+ return t
-/datum/reagent/blood/Destroy()
- if(src.data["virus"])
- var/datum/disease/D = src.data["virus"]
- D.cure(0)
- ..()
-*/
+/datum/reagent/blood/mix_data(var/newdata, var/newamount) // You have a reagent with data, and new reagent with its own data get added, how do you deal with that?
+ if(data["viruses"] || newdata["viruses"])
+ var/list/mix1 = data["viruses"]
+ var/list/mix2 = newdata["viruses"]
+ var/list/to_mix = list() // Stop issues with the list changing during mixing.
+ for(var/datum/disease/advance/AD in mix1)
+ to_mix += AD
+ for(var/datum/disease/advance/AD in mix2)
+ to_mix += AD
+ var/datum/disease/advance/AD = Advance_Mix(to_mix)
+ if(AD)
+ var/list/preserve = list(AD)
+ for(var/D in data["viruses"])
+ if(!istype(D, /datum/disease/advance))
+ preserve += D
+ data["viruses"] = preserve
+
+/datum/reagent/blood/touch_turf(var/turf/simulated/T)
+ if(!istype(T) || volume < 3)
+ return
+ if(!data["donor"] || istype(data["donor"], /mob/living/carbon/human))
+ blood_splatter(T, src, 1)
+ else if(istype(data["donor"], /mob/living/carbon/alien))
+ var/obj/effect/decal/cleanable/blood/B = blood_splatter(T, src, 1)
+ if(B)
+ B.blood_DNA["UNKNOWN DNA STRUCTURE"] = "X*"
+
+/datum/reagent/blood/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(dose > 5)
+ M.adjustToxLoss(removed)
+ if(dose > 15)
+ M.adjustToxLoss(removed)
+
+/datum/reagent/blood/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_MACHINE)
+ return
+ if(data && data["viruses"])
+ for(var/datum/disease/D in data["viruses"])
+ if(D.spread_type == SPECIAL || D.spread_type == NON_CONTAGIOUS)
+ continue
+ M.contract_disease(D)
+ if(data && data["virus2"])
+ var/list/vlist = data["virus2"]
+ if(vlist.len)
+ for(var/ID in vlist)
+ var/datum/disease2/disease/V = vlist[ID]
+ infect_virus2(M, V.getcopy())
+ if(data && data["antibodies"])
+ M.antibodies |= data["antibodies"]
+
+/datum/reagent/blood/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.inject_blood(src, volume)
+ remove_self(volume)
/datum/reagent/vaccine
- //data must contain virus type
name = "Vaccine"
id = "vaccine"
reagent_state = LIQUID
- color = "#C81040" // rgb: 200, 16, 64
+ color = "#C81040"
-/datum/reagent/vaccine/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- var/datum/reagent/vaccine/self = src
- src = null
- if(self.data&&method == INGEST)
+/datum/reagent/vaccine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(data)
for(var/datum/disease/D in M.viruses)
if(istype(D, /datum/disease/advance))
var/datum/disease/advance/A = D
- if(A.GetDiseaseID() == self.data)
+ if(A.GetDiseaseID() == data)
D.cure()
else
- if(D.type == self.data)
+ if(D.type == data)
D.cure()
- M.resistances += self.data
+ M.resistances += data
return
#define WATER_LATENT_HEAT 19000 // How much heat is removed when applied to a hot turf, in J/unit (19000 makes 120 u of water roughly equivalent to 4L)
@@ -122,29 +103,37 @@
id = "water"
description = "A ubiquitous chemical substance that is composed of hydrogen and oxygen."
reagent_state = LIQUID
- color = "#0064C877" // rgb: 0, 100, 200
- custom_metabolism = 0.01
+ color = "#0064C877"
+ metabolism = REM * 10
glass_icon_state = "glass_clear"
glass_name = "glass of water"
glass_desc = "The father of all refreshments."
-/datum/reagent/water/reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
+/datum/reagent/water/touch_turf(var/turf/simulated/T)
+ if(!istype(T))
+ return
- //If the turf is hot enough, remove some heat
var/datum/gas_mixture/environment = T.return_air()
- var/min_temperature = T0C + 100 //100C, the boiling point of water
+ var/min_temperature = T0C + 100 // 100C, the boiling point of water
- if (environment && environment.temperature > min_temperature) //abstracted as steam or something
- var/removed_heat = between(0, volume*WATER_LATENT_HEAT, -environment.get_thermal_energy_change(min_temperature))
+ var/hotspot = (locate(/obj/fire) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles)
+ lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+
+ if (environment && environment.temperature > min_temperature) // Abstracted as steam or something
+ var/removed_heat = between(0, volume * WATER_LATENT_HEAT, -environment.get_thermal_energy_change(min_temperature))
environment.add_thermal_energy(-removed_heat)
if (prob(5))
- T.visible_message("\red The water sizzles as it lands on \the [T]!")
-
- else //otherwise, the turf gets wet
+ T.visible_message("The water sizzles as it lands on \the [T]!")
+ else
if(volume >= 3)
- if(T.wet >= 1) return
+ if(T.wet >= 1)
+ return
T.wet = 1
if(T.wet_overlay)
T.overlays -= T.wet_overlay
@@ -152,74 +141,61 @@
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
T.overlays += T.wet_overlay
- src = null
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
+ spawn(800) // This is terrible and needs to be changed when possible.
+ if(!T || !istype(T))
+ return
+ if(T.wet >= 2)
+ return
T.wet = 0
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
- //Put out fires.
- var/hotspot = (locate(/obj/fire) in T)
- if(hotspot)
- qdel(hotspot)
- if(environment)
- environment.react() //react at the new temperature
-
-/datum/reagent/water/reaction_obj(var/obj/O, var/volume)
- var/turf/T = get_turf(O)
- var/hotspot = (locate(/obj/fire) in T)
- if(hotspot && !istype(T, /turf/space))
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
- if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/monkeycube))
+/datum/reagent/water/touch_obj(var/obj/O)
+ if(istype(O, /obj/item/weapon/reagent_containers/food/snacks/monkeycube))
var/obj/item/weapon/reagent_containers/food/snacks/monkeycube/cube = O
if(!cube.wrapped)
cube.Expand()
-/datum/reagent/water/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if (istype(M, /mob/living/carbon/slime))
+/datum/reagent/water/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(istype(M, /mob/living/carbon/slime))
var/mob/living/carbon/slime/S = M
- S.apply_water(volume)
- if(method == TOUCH && isliving(M))
+ S.adjustToxLoss(15 * removed) // Babies have 150 health, adults have 200; So, 10 units and 13.5
+ if(!S.client)
+ if(S.Target) // Like cats
+ S.Target = null
+ ++S.Discipline
+ if(dose == removed)
+ S.visible_message("[S]'s flesh sizzles where the water touches it!", "Your flesh burns in the water!")
+ var/needed = M.fire_stacks * 10
+ if(volume > needed)
+ M.fire_stacks = 0
+ M.ExtinguishMob()
+ remove_self(needed)
+ else
M.adjust_fire_stacks(-(volume / 10))
- if(M.fire_stacks <= 0)
- M.ExtinguishMob()
- return
+ remove_self(volume)
+ return
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
description = "Required for welders. Flamable."
reagent_state = LIQUID
- color = "#660000" // rgb: 102, 0, 0
- overdose = REAGENTS_OVERDOSE
+ color = "#660000"
+ touch_met = 5
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of welder fuel"
glass_desc = "Unless you are an industrial tool, this is probably not safe for consumption."
-/datum/reagent/fuel/reaction_obj(var/obj/O, var/volume)
- var/turf/the_turf = get_turf(O)
- if(!the_turf)
- return //No sense trying to start a fire if you don't have a turf to set on fire. --NEO
- new /obj/effect/decal/cleanable/liquid_fuel(the_turf, volume)
-/datum/reagent/fuel/reaction_turf(var/turf/T, var/volume)
+/datum/reagent/fuel/touch_turf(var/turf/T)
new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
+ remove_self(volume)
return
-/datum/reagent/fuel/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1)
- ..()
- return
-/datum/reagent/fuel/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with welding fuel to make them easy to ignite!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 10)
- return
+
+/datum/reagent/fuel/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(2 * removed)
+
+/datum/reagent/fuel/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // Splashing people with welding fuel to make them easy to ignite!
+ M.adjust_fire_stacks(0.1 * removed)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
index c12ad11ebf0..a751b9df7e5 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm
@@ -1,287 +1,267 @@
+/datum/reagent/acetone
+ name = "Acetone"
+ id = "acetone"
+ description = "A colorless liquid solvent used in chemical synthesis."
+ reagent_state = LIQUID
+ color = "#808080"
+ metabolism = REM * 0.2
+
+/datum/reagent/acetone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(removed * 3)
+
+/datum/reagent/acetone/touch_obj(var/obj/O) //I copied this wholesale from ethanol and could likely be converted into a shared proc. ~Techhead
+ if(istype(O, /obj/item/weapon/paper))
+ var/obj/item/weapon/paper/paperaffected = O
+ paperaffected.clearpaper()
+ usr << "The solution dissolves the ink on the paper."
+ return
+ if(istype(O, /obj/item/weapon/book))
+ if(volume < 5)
+ return
+ if(istype(O, /obj/item/weapon/book/tome))
+ usr << "The solution does nothing. Whatever this is, it isn't normal ink."
+ return
+ var/obj/item/weapon/book/affectedbook = O
+ affectedbook.dat = null
+ usr << "The solution dissolves the ink on the book."
+ return
+
/datum/reagent/aluminum
name = "Aluminum"
id = "aluminum"
description = "A silvery white and ductile member of the boron group of chemical elements."
reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
+ color = "#A8A8A8"
+
+/datum/reagent/ammonia
+ name = "Ammonia"
+ id = "ammonia"
+ description = "A caustic substance commonly used in fertilizer or household cleaners."
+ reagent_state = LIQUID
+ color = "#404030"
+ metabolism = REM * 0.5
+
+/datum/reagent/ammonia/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_VOX)
+ M.adjustOxyLoss(-removed * 10)
+ else if(alien != IS_DIONA)
+ M.adjustToxLoss(removed * 1.5)
/datum/reagent/carbon
name = "Carbon"
id = "carbon"
description = "A chemical element, the builing block of life."
reagent_state = SOLID
- color = "#1C1300" // rgb: 30, 20, 0
+ color = "#1C1300"
+ ingest_met = REM * 5
- custom_metabolism = 0.01
+/datum/reagent/carbon/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(M.ingested && M.ingested.reagent_list.len > 1) // Need to have at least 2 reagents - cabon and something to remove
+ var/effect = 1 / (M.ingested.reagent_list.len - 1)
+ for(var/datum/reagent/R in M.ingested.reagent_list)
+ if(R == src)
+ continue
+ M.ingested.remove_reagent(R.id, removed * effect)
-/datum/reagent/carbon/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/carbon/touch_turf(var/turf/T)
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, T)
if (!dirtoverlay)
dirtoverlay = new/obj/effect/decal/cleanable/dirt(T)
- dirtoverlay.alpha = volume*30
+ dirtoverlay.alpha = volume * 30
else
- dirtoverlay.alpha = min(dirtoverlay.alpha+volume*30, 255)
-
-/datum/reagent/chlorine
- name = "Chlorine"
- id = "chlorine"
- description = "A chemical element with a characteristic odour."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
- overdose = REAGENTS_OVERDOSE
-
-/datum/reagent/chlorine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.take_organ_damage(1*REM, 0)
- ..()
- return
+ dirtoverlay.alpha = min(dirtoverlay.alpha + volume * 30, 255)
/datum/reagent/copper
name = "Copper"
id = "copper"
description = "A highly ductile metal."
- color = "#6E3B08" // rgb: 110, 59, 8
-
- custom_metabolism = 0.01
+ color = "#6E3B08"
/datum/reagent/ethanol
name = "Ethanol" //Parent class for all alcoholic reagents.
id = "ethanol"
description = "A well-known alcohol with a variety of applications."
reagent_state = LIQUID
- nutriment_factor = 0 //So alcohol can fill you up! If they want to.
- color = "#404030" // rgb: 64, 64, 48
- var/boozepwr = 5 //higher numbers mean the booze will have an effect faster.
- var/dizzy_adj = 3
- var/adj_drowsy = 0
- var/adj_sleepy = 0
- var/slurr_adj = 3
- var/confused_adj = 2
- var/slur_start = 90 //amount absorbed after which mob starts slurring
- var/confused_start = 150 //amount absorbed after which mob starts confusing directions
- var/blur_start = 300 //amount absorbed after which mob starts getting blurred vision
- var/pass_out = 400 //amount absorbed after which mob starts passing out
+ color = "#404030"
+ touch_met = 5
+ var/nutriment_factor = 0
+ var/strength = 10 // This is, essentially, units between stages - the lower, the stronger. Less fine tuning, more clarity.
+ var/toxicity = 1
+
+ var/druggy = 0
+ var/adj_temp = 0
+ var/targ_temp = 310
+ var/halluci = 0
glass_icon_state = "glass_clear"
glass_name = "glass of ethanol"
glass_desc = "A well-known alcohol with a variety of applications."
-/datum/reagent/ethanol/on_mob_life(var/mob/living/M as mob, var/alien)
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, (alien ? FOOD_METABOLISM : ALCOHOL_METABOLISM)) // Catch-all for creatures without livers.
-
- if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
- if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
-
- if(!src.data || (!isnum(src.data) && src.data.len)) data = 1 //if it doesn't exist we set it. if it's a list we're going to set it to 1 as well. This is to
- src.data += boozepwr //avoid a runtime error associated with drinking blood mixed in drinks (demon's blood).
-
- var/d = data
-
- // make all the beverages work together
- for(var/datum/reagent/ethanol/A in holder.reagent_list)
- if(A != src && isnum(A.data)) d += A.data
-
- if(alien && alien == IS_SKRELL) //Skrell get very drunk very quickly.
- d*=5
-
- M.dizziness += dizzy_adj.
- if(d >= slur_start && d < pass_out)
- if (!M:slurring) M:slurring = 1
- M:slurring += slurr_adj
- if(d >= confused_start && prob(33))
- if (!M:confused) M:confused = 1
- M.confused = max(M:confused+confused_adj,0)
- if(d >= blur_start)
- M.eye_blurry = max(M.eye_blurry, 10)
- M:drowsyness = max(M:drowsyness, 0)
- if(d >= pass_out)
- M:paralysis = max(M:paralysis, 20)
- M:drowsyness = max(M:drowsyness, 30)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/liver/L = H.internal_organs_by_name["liver"]
- if (!L)
- H.adjustToxLoss(5)
- else if(istype(L))
- L.take_damage(0.1, 1)
- H.adjustToxLoss(0.1)
- ..()
+/datum/reagent/ethanol/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjust_fire_stacks(removed / 15)
return
-/datum/reagent/ethanol/reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/item/weapon/paper))
+/datum/reagent/ethanol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(removed * 2 * toxicity)
+ return
+
+/datum/reagent/ethanol/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ M.nutrition += nutriment_factor * removed
+
+ var/strength_mod = 1
+ if(alien == IS_SKRELL)
+ strength_mod *= 5
+ if(alien == IS_DIONA)
+ strength_mod = 0
+
+ M.add_chemical_effect(CE_ALCOHOL, 1)
+
+ if(dose * strength_mod >= strength) // Early warning
+ M.make_dizzy(6) // It is decreased at the speed of 3 per tick
+ if(dose * strength_mod >= strength * 2) // Slurring
+ M.slurring = max(M.slurring, 30)
+ if(dose * strength_mod >= strength * 3) // Confusion - walking in random directions
+ M.confused = max(M.confused, 20)
+ if(dose * strength_mod >= strength * 4) // Blurry vision
+ M.eye_blurry = max(M.eye_blurry, 10)
+ if(dose * strength_mod >= strength * 5) // Drowsyness - periodically falling asleep
+ M.drowsyness = max(M.drowsyness, 20)
+ if(dose * strength_mod >= strength * 6) // Toxic dose
+ M.add_chemical_effect(CE_ALCOHOL_TOXIC, toxicity)
+ if(dose * strength_mod >= strength * 7) // Pass out
+ M.paralysis = max(M.paralysis, 20)
+ M.sleeping = max(M.sleeping, 30)
+
+ if(druggy != 0)
+ M.druggy = max(M.druggy, druggy)
+
+ if(adj_temp > 0 && M.bodytemperature < targ_temp) // 310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(targ_temp, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
+ if(adj_temp < 0 && M.bodytemperature > targ_temp)
+ M.bodytemperature = min(targ_temp, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
+
+ if(halluci)
+ M.hallucination = max(M.hallucination, halluci)
+
+/datum/reagent/ethanol/touch_obj(var/obj/O)
+ if(istype(O, /obj/item/weapon/paper))
var/obj/item/weapon/paper/paperaffected = O
paperaffected.clearpaper()
usr << "The solution dissolves the ink on the paper."
- if(istype(O,/obj/item/weapon/book))
- if(istype(O,/obj/item/weapon/book/tome))
- usr << "The solution does nothing. Whatever this is, it isn't normal ink."
+ return
+ if(istype(O, /obj/item/weapon/book))
+ if(volume < 5)
return
- if(volume >= 5)
- var/obj/item/weapon/book/affectedbook = O
- affectedbook.dat = null
- usr << "The solution dissolves the ink on the book."
- else
- usr << "It wasn't enough..."
+ if(istype(O, /obj/item/weapon/book/tome))
+ usr << "The solution does nothing. Whatever this is, it isn't normal ink."
+ return
+ var/obj/item/weapon/book/affectedbook = O
+ affectedbook.dat = null
+ usr << "The solution dissolves the ink on the book."
return
-/datum/reagent/ethanol/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with ethanol isn't quite as good as fuel.
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 15)
- return
+/datum/reagent/hydrazine
+ name = "Hydrazine"
+ id = "hydrazine"
+ description = "A toxic, colorless, flammable liquid with a strong ammonia-like odor, in hydrate form."
+ reagent_state = LIQUID
+ color = "#808080"
+ metabolism = REM * 0.2
+ touch_met = 5
-/datum/reagent/fluorine
- name = "Fluorine"
- id = "fluorine"
- description = "A highly-reactive chemical element."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
- overdose = REAGENTS_OVERDOSE
+/datum/reagent/hydrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(4 * removed)
-/datum/reagent/fluorine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustToxLoss(1*REM)
- ..()
+/datum/reagent/hydrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // Hydrazine is both toxic and flammable.
+ M.adjust_fire_stacks(removed / 12)
+ M.adjustToxLoss(0.2 * removed)
+
+/datum/reagent/hydrazine/touch_turf(var/turf/T)
+ new /obj/effect/decal/cleanable/liquid_fuel(T, volume)
+ remove_self(volume)
return
-/datum/reagent/hydrogen
- name = "Hydrogen"
- id = "hydrogen"
- description = "A colorless, odorless, nonmetallic, tasteless, highly combustible diatomic gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
- custom_metabolism = 0.01
-
/datum/reagent/iron
name = "Iron"
id = "iron"
description = "Pure iron is a metal."
reagent_state = SOLID
color = "#353535"
- overdose = REAGENTS_OVERDOSE
+
+/datum/reagent/iron/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.add_chemical_effect(CE_BLOODRESTORE, 8 * removed)
/datum/reagent/lithium
name = "Lithium"
id = "lithium"
description = "A chemical element, used as antidepressant."
reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
- overdose = REAGENTS_OVERDOSE
+ color = "#808080"
-/datum/reagent/lithium/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5)) M.emote(pick("twitch","drool","moan"))
- ..()
- return
+/datum/reagent/lithium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
+ if(prob(5))
+ M.emote(pick("twitch", "drool", "moan"))
/datum/reagent/mercury
name = "Mercury"
id = "mercury"
description = "A chemical element."
reagent_state = LIQUID
- color = "#484848" // rgb: 72, 72, 72
- overdose = REAGENTS_OVERDOSE
+ color = "#484848"
-/datum/reagent/mercury/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
- step(M, pick(cardinal))
- if(prob(5)) M.emote(pick("twitch","drool","moan"))
- M.adjustBrainLoss(2)
- ..()
- return
-
-/datum/reagent/nitrogen
- name = "Nitrogen"
- id = "nitrogen"
- description = "A colorless, odorless, tasteless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
- custom_metabolism = 0.01
-
-/datum/reagent/nitrogen/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(alien && alien == IS_VOX)
- M.adjustOxyLoss(-2*REM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
-
-/datum/reagent/oxygen
- name = "Oxygen"
- id = "oxygen"
- description = "A colorless, odorless gas."
- reagent_state = GAS
- color = "#808080" // rgb: 128, 128, 128
-
- custom_metabolism = 0.01
-
-/datum/reagent/oxygen/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2) return
- if(alien && alien == IS_VOX)
- M.adjustToxLoss(REAGENTS_METABOLISM)
- holder.remove_reagent(src.id, REAGENTS_METABOLISM) //By default it slowly disappears.
- return
- ..()
+/datum/reagent/mercury/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ if(M.canmove && !M.restrained() && istype(M.loc, /turf/space))
+ step(M, pick(cardinal))
+ if(prob(5))
+ M.emote(pick("twitch", "drool", "moan"))
+ M.adjustBrainLoss(2)
/datum/reagent/phosphorus
name = "Phosphorus"
id = "phosphorus"
description = "A chemical element, the backbone of biological energy carriers."
reagent_state = SOLID
- color = "#832828" // rgb: 131, 40, 40
-
- custom_metabolism = 0.01
+ color = "#832828"
/datum/reagent/potassium
name = "Potassium"
id = "potassium"
description = "A soft, low-melting solid that can easily be cut with a knife. Reacts violently with water."
reagent_state = SOLID
- color = "#A0A0A0" // rgb: 160, 160, 160
-
- custom_metabolism = 0.01
+ color = "#A0A0A0"
/datum/reagent/radium
name = "Radium"
id = "radium"
description = "Radium is an alkaline earth metal. It is extremely radioactive."
reagent_state = SOLID
- color = "#C7C7C7" // rgb: 199,199,199
+ color = "#C7C7C7"
-/datum/reagent/radium/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(2*REM,IRRADIATE,0)
- // radium may increase your chances to cure a disease
- if(istype(M,/mob/living/carbon)) // make sure to only use it on carbon mobs
- var/mob/living/carbon/C = M
- if(C.virus2.len)
- for (var/ID in C.virus2)
- var/datum/disease2/disease/V = C.virus2[ID]
- if(prob(5))
- C.antibodies |= V.antigen
- if(prob(50))
- M.radiation += 50 // curing it that way may kill you instead
- var/absorbed
- var/obj/item/organ/diona/nutrients/rad_organ = locate() in C.internal_organs
- if(rad_organ && !rad_organ.is_broken())
- absorbed = 1
- if(!absorbed)
- M.adjustToxLoss(100)
- ..()
- return
+/datum/reagent/radium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.apply_effect(10 * removed, IRRADIATE, 0) // Radium may increase your chances to cure a disease
+ if(M.virus2.len)
+ for(var/ID in M.virus2)
+ var/datum/disease2/disease/V = M.virus2[ID]
+ if(prob(5))
+ M.antibodies |= V.antigen
+ if(prob(50))
+ M.radiation += 50 // curing it that way may kill you instead
+ var/absorbed = 0
+ var/obj/item/organ/diona/nutrients/rad_organ = locate() in M.internal_organs
+ if(rad_organ && !rad_organ.is_broken())
+ absorbed = 1
+ if(!absorbed)
+ M.adjustToxLoss(100)
-/datum/reagent/radium/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/radium/touch_turf(var/turf/T)
if(volume >= 3)
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T)
@@ -289,117 +269,137 @@
new /obj/effect/decal/cleanable/greenglow(T)
return
-/datum/reagent/toxin/acid
+/datum/reagent/acid
name = "Sulphuric acid"
id = "sacid"
description = "A very corrosive mineral acid with the molecular formula H2SO4."
reagent_state = LIQUID
- color = "#DB5008" // rgb: 219, 80, 8
- toxpwr = 1
- var/meltprob = 10
+ color = "#DB5008"
+ metabolism = REM * 2
+ touch_met = 50 // It's acid!
+ var/power = 5
+ var/meltdose = 10 // How much is needed to melt
-/datum/reagent/toxin/acid/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.take_organ_damage(0, 1*REM)
- ..()
- return
+/datum/reagent/acid/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.take_organ_damage(0, removed * power * 2)
-/datum/reagent/toxin/acid/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//magic numbers everywhere
- if(!istype(M, /mob/living))
+/datum/reagent/acid/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) // This is the most interesting
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.head)
+ if(H.head.unacidable)
+ H << "Your [H.head] protects you from the acid."
+ remove_self(volume)
+ return
+ else if(removed > meltdose)
+ H << "Your [H.head] melts away!"
+ qdel(H.head)
+ H.update_inv_head(1)
+ H.update_hair(1)
+ removed -= meltdose
+ if(removed <= 0)
+ return
+
+ if(H.wear_mask)
+ if(H.wear_mask.unacidable)
+ H << "Your [H.wear_mask] protects you from the acid."
+ remove_self(volume)
+ return
+ else if(removed > meltdose)
+ H << "Your [H.wear_mask] melts away!"
+ qdel(H.wear_mask)
+ H.update_inv_wear_mask(1)
+ H.update_hair(1)
+ removed -= meltdose
+ if(removed <= 0)
+ return
+
+ if(H.glasses)
+ if(H.glasses.unacidable)
+ H << "Your [H.glasses] partially protect you from the acid!"
+ removed /= 2
+ else if(removed > meltdose)
+ H << "Your [H.glasses] melt away!"
+ qdel(H.glasses)
+ H.update_inv_glasses(1)
+ removed -= meltdose / 2
+ if(removed <= 0)
+ return
+
+ if(volume < meltdose) // Not enough to melt anything
+ M.take_organ_damage(removed * power * 0.2)
return
- if(method == TOUCH)
- if(ishuman(M))
+ if(!M.unacidable && removed > 0)
+ if(istype(M, /mob/living/carbon/human) && volume >= meltdose)
var/mob/living/carbon/human/H = M
+ var/obj/item/organ/external/affecting = H.get_organ("head")
+ if(affecting)
+ if(affecting.take_damage(0, removed * power * 0.1))
+ H.UpdateDamageIcon()
+ if(prob(100 * removed / meltdose)) // Applies disfigurement
+ if (!(H.species && (H.species.flags & NO_PAIN)))
+ H.emote("scream")
+ H.status_flags |= DISFIGURED
+ else
+ M.take_organ_damage(0, removed * power * 0.1) // Balance. The damage is instant, so it's weaker. 10 units -> 5 damage, double for pacid. 120 units beaker could deal 60, but a) it's burn, which is not as dangerous, b) it's a one-use weapon, c) missing with it will splash it over the ground and d) clothes give some protection, so not everything will hit
- if(H.head)
- if(prob(meltprob) && !H.head.unacidable)
- H << "Your headgear melts away but protects you from the acid!"
- qdel(H.head)
- H.update_inv_head(0)
- H.update_hair(0)
- else
- H << "Your headgear protects you from the acid."
- return
+/datum/reagent/acid/touch_obj(var/obj/O)
+ if(O.unacidable)
+ return
+ if((istype(O, /obj/item) || istype(O, /obj/effect/plant)) && (volume > meltdose))
+ var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
+ I.desc = "Looks like this was \an [O] some time ago."
+ for(var/mob/M in viewers(5, O))
+ M << "\The [O] melts."
+ qdel(O)
+ remove_self(meltdose) // 10 units of acid will not melt EVERYTHING on the tile
- if(H.wear_mask)
- if(prob(meltprob) && !H.wear_mask.unacidable)
- H << "Your mask melts away but protects you from the acid!"
- qdel (H.wear_mask)
- H.update_inv_wear_mask(0)
- H.update_hair(0)
- else
- H << "Your mask protects you from the acid."
- return
-
- if(H.glasses) //Doesn't protect you from the acid but can melt anyways!
- if(prob(meltprob) && !H.glasses.unacidable)
- H << "Your glasses melts away!"
- qdel (H.glasses)
- H.update_inv_glasses(0)
-
- if(!M.unacidable)
- if(istype(M, /mob/living/carbon/human) && volume >= 10)
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/external/affecting = H.get_organ("head")
- if(affecting)
- if(affecting.take_damage(4*toxpwr, 2*toxpwr))
- H.UpdateDamageIcon()
- if(prob(meltprob)) //Applies disfigurement
- if (!(H.species && (H.species.flags & NO_PAIN)))
- H.emote("scream")
- H.status_flags |= DISFIGURED
- else
- M.take_organ_damage(min(6*toxpwr, volume * toxpwr)) // uses min() and volume to make sure they aren't being sprayed in trace amounts (1 unit != insta rape) -- Doohl
- else
- if(!M.unacidable)
- M.take_organ_damage(min(6*toxpwr, volume * toxpwr))
-
-/datum/reagent/toxin/acid/reaction_obj(var/obj/O, var/volume)
- if((istype(O,/obj/item) || istype(O,/obj/effect/plant)) && prob(meltprob * 3))
- if(!O.unacidable)
- var/obj/effect/decal/cleanable/molten_item/I = new/obj/effect/decal/cleanable/molten_item(O.loc)
- I.desc = "Looks like this was \an [O] some time ago."
- for(var/mob/M in viewers(5, O))
- M << "\red \the [O] melts."
- qdel(O)
+/datum/reagent/acid/hydrochloric //Like sulfuric, but less toxic and more acidic.
+ name = "Hydrochloric Acid"
+ id = "hclacid"
+ description = "A very corrosive mineral acid with the molecular formula HCl."
+ reagent_state = LIQUID
+ color = "#808080"
+ power = 3
+ meltdose = 8
/datum/reagent/silicon
name = "Silicon"
id = "silicon"
description = "A tetravalent metalloid, silicon is less reactive than its chemical analog carbon."
reagent_state = SOLID
- color = "#A8A8A8" // rgb: 168, 168, 168
+ color = "#A8A8A8"
/datum/reagent/sodium
name = "Sodium"
id = "sodium"
description = "A chemical element, readily reacts with water."
reagent_state = SOLID
- color = "#808080" // rgb: 128, 128, 128
-
- custom_metabolism = 0.01
+ color = "#808080"
/datum/reagent/sugar
name = "Sugar"
id = "sugar"
description = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255, 255, 255
-
+ color = "#FFFFFF"
glass_icon_state = "iceglass"
glass_name = "glass of sugar"
glass_desc = "The organic compound commonly known as table sugar and sometimes called saccharose. This white, odorless, crystalline powder has a pleasing, sweet taste."
-/datum/reagent/sugar/on_mob_life(var/mob/living/M as mob)
- M.nutrition += 1*REM
- ..()
- return
+/datum/reagent/sugar/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.nutrition += removed * 3
/datum/reagent/sulfur
name = "Sulfur"
id = "sulfur"
description = "A chemical element with a pungent smell."
reagent_state = SOLID
- color = "#BF8C00" // rgb: 191, 140, 0
+ color = "#BF8C00"
- custom_metabolism = 0.01
+/datum/reagent/tungsten
+ name = "Tungsten"
+ id = "tungsten"
+ description = "A chemical element, and a strong oxidising agent."
+ reagent_state = SOLID
+ color = "#DCDCDC"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
index afb6585e1b0..2f9cc0f548e 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm
@@ -1,28 +1,35 @@
+/* Food */
/datum/reagent/nutriment
name = "Nutriment"
id = "nutriment"
description = "All the vitamins, minerals, and carbohydrates the body needs in pure form."
reagent_state = SOLID
- nutriment_factor = 15 * REAGENTS_METABOLISM
- color = "#664330" // rgb: 102, 67, 48
+ metabolism = REM * 4
+ var/nutriment_factor = 30 // Per unit
+ var/injectable = 0
+ color = "#664330"
-/datum/reagent/nutriment/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(50)) M.heal_organ_damage(1,0)
- M.nutrition += nutriment_factor // For hunger and fatness
- ..()
- return
+/datum/reagent/nutriment/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(!injectable)
+ M.adjustToxLoss(0.1 * removed)
+ return
+ affect_ingest(M, alien, removed)
+
+/datum/reagent/nutriment/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ M.heal_organ_damage(0.5 * removed, 0)
+ M.nutrition += nutriment_factor * removed // For hunger and fatness
+ M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed)
/datum/reagent/nutriment/protein // Bad for Skrell!
name = "animal protein"
id = "protein"
color = "#440000"
-/datum/reagent/nutriment/protein/on_mob_life(var/mob/living/M, var/alien)
+/datum/reagent/nutriment/protein/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien && alien == IS_SKRELL)
- M.adjustToxLoss(0.5)
- M.nutrition -= nutriment_factor
+ M.adjustToxLoss(0.5 * removed)
+ return
..()
/datum/reagent/nutriment/egg // Also bad for skrell. Not a child of protein because it might mess up, not sure.
@@ -30,103 +37,87 @@
id = "egg"
color = "#FFFFAA"
-/datum/reagent/nutriment/egg/on_mob_life(var/mob/living/M, var/alien)
+/datum/reagent/nutriment/egg/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien && alien == IS_SKRELL)
- M.adjustToxLoss(0.5)
- M.nutrition -= nutriment_factor
+ M.adjustToxLoss(0.5 * removed)
+ return
..()
-/datum/reagent/flour
+/datum/reagent/nutriment/flour
name = "flour"
id = "flour"
description = "This is what you rub all over yourself to pretend to be a ghost."
reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
+ nutriment_factor = 1
+ color = "#FFFFFF"
-/datum/reagent/flour/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
-/datum/reagent/flour/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T)
if(!istype(T, /turf/space))
new /obj/effect/decal/cleanable/flour(T)
-/datum/reagent/coco
+/datum/reagent/nutriment/coco
name = "Coco Powder"
id = "coco"
description = "A fatty, bitter paste made from coco beans."
reagent_state = SOLID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ nutriment_factor = 5
+ color = "#302000"
-/datum/reagent/coco/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
-/datum/reagent/soysauce
+/datum/reagent/nutriment/soysauce
name = "Soysauce"
id = "soysauce"
description = "A salty sauce made from the soy plant."
reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#792300" // rgb: 121, 35, 0
+ nutriment_factor = 2
+ color = "#792300"
-/datum/reagent/ketchup
+/datum/reagent/nutriment/ketchup
name = "Ketchup"
id = "ketchup"
description = "Ketchup, catsup, whatever. It's tomato paste."
reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#731008" // rgb: 115, 16, 8
+ nutriment_factor = 5
+ color = "#731008"
-/datum/reagent/rice
+/datum/reagent/nutriment/rice
name = "Rice"
id = "rice"
description = "Enjoy the great taste of nothing."
reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFFFF" // rgb: 0, 0, 0
+ nutriment_factor = 1
+ color = "#FFFFFF"
-/datum/reagent/rice/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
-/datum/reagent/cherryjelly
+/datum/reagent/nutriment/cherryjelly
name = "Cherry Jelly"
id = "cherryjelly"
description = "Totally the best. Only to be spread on foods with excellent lateral symmetry."
reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#801E28" // rgb: 128, 30, 40
+ nutriment_factor = 1
+ color = "#801E28"
-/datum/reagent/cherryjelly/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
-/datum/reagent/cornoil
+/datum/reagent/nutriment/cornoil
name = "Corn Oil"
id = "cornoil"
description = "An oil derived from various types of corn."
reagent_state = LIQUID
- nutriment_factor = 20 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ nutriment_factor = 20
+ color = "#302000"
-/datum/reagent/cornoil/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
+/datum/reagent/nutriment/cornoil/touch_turf(var/turf/simulated/T)
+ if(!istype(T))
return
-/datum/reagent/cornoil/reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
+ var/hotspot = (locate(/obj/fire) in T)
+ if(hotspot && !istype(T, /turf/space))
+ var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles)
+ lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0)
+ lowertemp.react()
+ T.assume_air(lowertemp)
+ qdel(hotspot)
+
if(volume >= 3)
- if(T.wet >= 1) return
+ if(T.wet >= 1)
+ return
T.wet = 1
if(T.wet_overlay)
T.overlays -= T.wet_overlay
@@ -134,92 +125,60 @@
T.wet_overlay = image('icons/effects/water.dmi',T,"wet_floor")
T.overlays += T.wet_overlay
- spawn(800)
- if (!istype(T)) return
- if(T.wet >= 2) return
+ spawn(800) // This is terrible and needs to be changed when possible.
+ if(!T || !istype(T))
+ return
+ if(T.wet >= 2)
+ return
T.wet = 0
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
- var/hotspot = (locate(/obj/fire) in T)
- if(hotspot)
- var/datum/gas_mixture/lowertemp = T.remove_air( T:air:total_moles )
- lowertemp.temperature = max( min(lowertemp.temperature-2000,lowertemp.temperature / 2) ,0)
- lowertemp.react()
- T.assume_air(lowertemp)
- qdel(hotspot)
-/datum/reagent/virus_food
+/datum/reagent/nutriment/virus_food
name = "Virus Food"
id = "virusfood"
description = "A mixture of water, milk, and oxygen. Virus cells can use this mixture to reproduce."
reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#899613" // rgb: 137, 150, 19
+ nutriment_factor = 2
+ color = "#899613"
-/datum/reagent/virus_food/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor*REM
- ..()
- return
-
-/datum/reagent/sprinkles
+/datum/reagent/nutriment/sprinkles
name = "Sprinkles"
id = "sprinkles"
description = "Multi-colored little bits of sugar, commonly found on donuts. Loved by cops."
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FF00FF" // rgb: 255, 0, 255
+ nutriment_factor = 1
+ color = "#FF00FF"
-/datum/reagent/sprinkles/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- /*if(istype(M, /mob/living/carbon/human) && M.job in list("Security Officer", "Head of Security", "Detective", "Warden"))
- if(!M) M = holder.my_atom
- M.heal_organ_damage(1,1)
- M.nutrition += nutriment_factor
- ..()
- return
- */
- ..()
-
-/datum/reagent/toxin/minttoxin
- name = "Mint Toxin"
- id = "minttoxin"
- description = "Useful for dealing with undesirable customers."
+/datum/reagent/nutriment/mint
+ name = "Mint"
+ id = "mint"
+ description = "Also known as Mentha."
reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
- toxpwr = 0
+ color = "#CF3600"
-/datum/reagent/toxin/minttoxin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if (FAT in M.mutations)
- M.gib()
- ..()
- return
-
-/datum/reagent/lipozine
- name = "Lipozine" // The anti-nutriment.
+/datum/reagent/lipozine // The anti-nutriment.
+ name = "Lipozine"
id = "lipozine"
description = "A chemical compound that causes a powerful fat-burning reaction."
reagent_state = LIQUID
- nutriment_factor = 10 * REAGENTS_METABOLISM
- color = "#BBEDA4" // rgb: 187, 237, 164
+ color = "#BBEDA4"
overdose = REAGENTS_OVERDOSE
-/datum/reagent/lipozine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition = max(M.nutrition - nutriment_factor, 0)
+/datum/reagent/lipozine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.nutrition = max(M.nutrition - 10 * removed, 0)
M.overeatduration = 0
- if(M.nutrition < 0)//Prevent from going into negatives.
+ if(M.nutrition < 0)
M.nutrition = 0
- ..()
- return
+
+/* Non-food stuff like condiments */
/datum/reagent/sodiumchloride
name = "Table Salt"
id = "sodiumchloride"
description = "A salt made of sodium chloride. Commonly used to season food."
reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255,255,255
+ color = "#FFFFFF"
overdose = REAGENTS_OVERDOSE
/datum/reagent/blackpepper
@@ -227,14 +186,14 @@
id = "blackpepper"
description = "A powder ground from peppercorns. *AAAACHOOO*"
reagent_state = SOLID
- // no color (ie, black)
+ color = "#000000"
/datum/reagent/enzyme
name = "Universal Enzyme"
id = "enzyme"
description = "A universal enzyme used in the preperation of certain chemicals and foods."
reagent_state = LIQUID
- color = "#365E30" // rgb: 54, 94, 48
+ color = "#365E30"
overdose = REAGENTS_OVERDOSE
/datum/reagent/frostoil
@@ -242,179 +201,159 @@
id = "frostoil"
description = "A special oil that noticably chills the body. Extracted from Ice Peppers."
reagent_state = LIQUID
- color = "#B31008" // rgb: 139, 166, 233
+ color = "#B31008"
-/datum/reagent/frostoil/on_mob_life(var/mob/living/M as mob)
- if(!M)
- M = holder.my_atom
+/datum/reagent/frostoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
if(prob(1))
M.emote("shiver")
if(istype(M, /mob/living/carbon/slime))
M.bodytemperature = max(M.bodytemperature - rand(10,20), 0)
holder.remove_reagent("capsaicin", 5)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
-/datum/reagent/frostoil/reaction_turf(var/turf/simulated/T, var/volume)
- for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(15,30))
/datum/reagent/capsaicin
name = "Capsaicin Oil"
id = "capsaicin"
description = "This is what makes chilis hot."
reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
+ color = "#B31008"
-/datum/reagent/capsaicin/on_mob_life(var/mob/living/M as mob)
- if(!M)
- M = holder.my_atom
- if(!data)
- data = 1
+/datum/reagent/capsaicin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.adjustToxLoss(0.5 * removed)
+
+/datum/reagent/capsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA || alien == IS_MACHINE)
+ return
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.species && !(H.species.flags & (NO_PAIN | IS_SYNTHETIC)) )
- switch(data)
- if(1 to 2)
- H << "\red Your insides feel uncomfortably hot !"
- if(2 to 20)
- if(prob(5))
- H << "\red Your insides feel uncomfortably hot !"
- if(20 to INFINITY)
- H.apply_effect(2,AGONY,0)
- if(prob(5))
- H.visible_message("[H] [pick("dry heaves!","coughs!","splutters!")]")
- H << "\red You feel like your insides are burning !"
- else if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(10,25)
+ if(H.species && (H.species.flags & (NO_PAIN)))
+ return
+ if(dose < 5 && (dose == metabolism || prob(5)))
+ M << "Your insides feel uncomfortably hot!"
+ if(dose >= 5)
+ M.apply_effect(2, AGONY, 0)
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", "You feel like your insides are burning!")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(10, 25)
holder.remove_reagent("frostoil", 5)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- data++
- ..()
- return
/datum/reagent/condensedcapsaicin
name = "Condensed Capsaicin"
id = "condensedcapsaicin"
description = "A chemical agent used for self-defense and in police work."
reagent_state = LIQUID
- color = "#B31008" // rgb: 179, 16, 8
+ touch_met = 50 // Get rid of it quickly
+ color = "#B31008"
-/datum/reagent/condensedcapsaicin/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if(!istype(M, /mob/living))
+/datum/reagent/condensedcapsaicin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
return
- if(method == TOUCH)
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/victim = M
- var/mouth_covered = 0
- var/eyes_covered = 0
- var/obj/item/safe_thing = null
- if( victim.wear_mask )
- if ( victim.wear_mask.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.wear_mask
- if ( victim.wear_mask.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
- eyes_covered = 1
- safe_thing = victim.head
- if ( victim.head.flags & MASKCOVERSMOUTH )
- mouth_covered = 1
- safe_thing = victim.head
- if(victim.glasses)
- eyes_covered = 1
- if ( !safe_thing )
- safe_thing = victim.glasses
- if ( eyes_covered && mouth_covered )
- victim << "\red Your [safe_thing] protects you from the pepperspray!"
- return
- else if ( eyes_covered ) // Reduced effects if partially protected
- victim << "\red Your [safe_thing] protect you from most of the pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 15)
- victim.eye_blind = max(M.eye_blind, 5)
- victim.Stun(5)
- victim.Weaken(5)
- //victim.Paralyse(10)
- //victim.drop_item()
- return
- else if ( mouth_covered ) // Mouth cover is better than eye cover
- victim << "\red Your [safe_thing] protects your face from the pepperspray!"
- if (!(victim.species && (victim.species.flags & NO_PAIN)))
- victim.emote("scream")
- victim.eye_blurry = max(M.eye_blurry, 5)
- return
- else // Oh dear :D
- if (!(victim.species && (victim.species.flags & NO_PAIN)))
- victim.emote("scream")
- victim << "\red You're sprayed directly in the eyes with pepperspray!"
- victim.eye_blurry = max(M.eye_blurry, 25)
- victim.eye_blind = max(M.eye_blind, 10)
- victim.Stun(5)
- victim.Weaken(5)
- //victim.Paralyse(10)
- //victim.drop_item()
+ M.adjustToxLoss(0.5 * removed)
-/datum/reagent/condensedcapsaicin/on_mob_life(var/mob/living/M as mob)
- if(!M)
- M = holder.my_atom
- if(!data)
- data = 1
+/datum/reagent/condensedcapsaicin/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ var/eyes_covered = 0
+ var/mouth_covered = 0
+ var/obj/item/safe_thing = null
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(H.species && (H.species.flags & NO_PAIN))
+ return
+ if(H.head)
+ if(H.head.flags & MASKCOVERSEYES)
+ eyes_covered = 1
+ safe_thing = H.head
+ if(H.head.flags & MASKCOVERSMOUTH)
+ mouth_covered = 1
+ safe_thing = H.head
+ if(H.wear_mask)
+ if(!eyes_covered && H.wear_mask.flags & MASKCOVERSEYES)
+ eyes_covered = 1
+ safe_thing = H.wear_mask
+ if(!mouth_covered && H.wear_mask.flags & MASKCOVERSMOUTH)
+ mouth_covered = 1
+ safe_thing = H.wear_mask
+ if(H.glasses)
+ if(!eyes_covered)
+ eyes_covered = 1
+ if(!safe_thing)
+ safe_thing = H.glasses
+ if(eyes_covered && mouth_covered)
+ M << "Your [safe_thing] protects you from the pepperspray!"
+ return
+ else if(eyes_covered)
+ M << "Your [safe_thing] protect you from most of the pepperspray!"
+ M.eye_blurry = max(M.eye_blurry, 15)
+ M.eye_blind = max(M.eye_blind, 5)
+ M.Stun(5)
+ M.Weaken(5)
+ return
+ else if (mouth_covered) // Mouth cover is better than eye cover
+ M << "Your [safe_thing] protects your face from the pepperspray!"
+ M.eye_blurry = max(M.eye_blurry, 5)
+ return
+ else // Oh dear :D
+ M << "You're sprayed directly in the eyes with pepperspray!"
+ M.eye_blurry = max(M.eye_blurry, 25)
+ M.eye_blind = max(M.eye_blind, 10)
+ M.Stun(5)
+ M.Weaken(5)
+ return
+
+/datum/reagent/condensedcapsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- if(H.species && !(H.species.flags & (NO_PAIN | IS_SYNTHETIC)) )
- switch(data)
- if(1)
- H << "\red You feel like your insides are burning !"
- if(2 to INFINITY)
- H.apply_effect(4,AGONY,0)
- if(prob(5))
- H.visible_message("[H] [pick("dry heaves!","coughs!","splutters!")]")
- H << "\red You feel like your insides are burning !"
- else if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature += rand(15,30)
+ if(H.species && (H.species.flags & (NO_PAIN)))
+ return
+ if(dose == metabolism)
+ M << "You feel like your insides are burning!"
+ else
+ M.apply_effect(4, AGONY, 0)
+ if(prob(5))
+ M.visible_message("[M] [pick("dry heaves!","coughs!","splutters!")]", "You feel like your insides are burning!")
+ if(istype(M, /mob/living/carbon/slime))
+ M.bodytemperature += rand(15, 30)
holder.remove_reagent("frostoil", 5)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- data++
- ..()
- return
+
+/* Drinks */
/datum/reagent/drink
name = "Drink"
id = "drink"
description = "Uh, some kind of drink."
reagent_state = LIQUID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#E78108" // rgb: 231, 129, 8
- var/adj_dizzy = 0
+ color = "#E78108"
+ var/nutrition = 0 // Per unit
+ var/adj_dizzy = 0 // Per tick
var/adj_drowsy = 0
var/adj_sleepy = 0
var/adj_temp = 0
-/datum/reagent/drink/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- // Drinks should be used up faster than other reagents.
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if (adj_dizzy) M.dizziness = max(0,M.dizziness + adj_dizzy)
- if (adj_drowsy) M.drowsyness = max(0,M.drowsyness + adj_drowsy)
- if (adj_sleepy) M.sleeping = max(0,M.sleeping + adj_sleepy)
- if (adj_temp)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (25 * TEMPERATURE_DAMAGE_COEFFICIENT))
-
- ..()
+/datum/reagent/drink/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustToxLoss(removed) // Probably not a good idea; not very deadly though
return
+/datum/reagent/drink/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ M.nutrition += nutrition * removed
+ M.dizziness = max(0, M.dizziness + adj_dizzy)
+ M.drowsyness = max(0, M.drowsyness + adj_drowsy)
+ M.sleeping = max(0, M.sleeping + adj_sleepy)
+ if(adj_temp > 0 && M.bodytemperature < 310) // 310 is the normal bodytemp. 310.055
+ M.bodytemperature = min(310, M.bodytemperature + (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
+ if(adj_temp < 0 && M.bodytemperature > 310)
+ M.bodytemperature = min(310, M.bodytemperature - (adj_temp * TEMPERATURE_DAMAGE_COEFFICIENT))
+
+// Juices
+
/datum/reagent/drink/banana
name = "Banana Juice"
id = "banana"
description = "The raw essence of a banana."
- color = "#C3AF00" // rgb: 195, 175, 0
+ color = "#C3AF00"
glass_icon_state = "banana"
glass_name = "glass of banana juice"
@@ -424,7 +363,7 @@
name = "Berry Juice"
id = "berryjuice"
description = "A delicious blend of several different kinds of berries."
- color = "#990066" // rgb: 153, 0, 102
+ color = "#990066"
glass_icon_state = "berryjuice"
glass_name = "glass of berry juice"
@@ -440,25 +379,15 @@
glass_name = "glass of carrot juice"
glass_desc = "It is just like a carrot but without crunching."
-/datum/reagent/drink/carrotjuice/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/carrotjuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- M.eye_blurry = max(M.eye_blurry-1 , 0)
- M.eye_blind = max(M.eye_blind-1 , 0)
- if(!data) data = 1
- switch(data)
- if(1 to 20)
- //nothing
- if(21 to INFINITY)
- if (prob(data-10))
- M.disabilities &= ~NEARSIGHTED
- data++
- return
+ M.reagents.add_reagent("imidazoline", removed * 0.2)
/datum/reagent/drink/grapejuice
name = "Grape Juice"
id = "grapejuice"
description = "It's grrrrrape!"
- color = "#863333" // rgb: 134, 51, 51
+ color = "#863333"
glass_icon_state = "grapejuice"
glass_name = "glass of grape juice"
@@ -468,7 +397,7 @@
name = "Lemon Juice"
id = "lemonjuice"
description = "This juice is VERY sour."
- color = "#AFAF00" // rgb: 175, 175, 0
+ color = "#AFAF00"
glass_icon_state = "lemonjuice"
glass_name = "glass of lemon juice"
@@ -478,53 +407,51 @@
name = "Lime Juice"
id = "limejuice"
description = "The sweet-sour juice of limes."
- color = "#365E30" // rgb: 54, 94, 48
+ color = "#365E30"
glass_icon_state = "glass_green"
glass_name = "glass of lime juice"
glass_desc = "A glass of sweet-sour lime juice"
-/datum/reagent/drink/limejuice/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/limejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- if(M.getToxLoss() && prob(20)) M.adjustToxLoss(-1*REM)
- return
+ if(alien == IS_DIONA)
+ return
+ M.adjustToxLoss(-0.5 * removed)
/datum/reagent/drink/orangejuice
name = "Orange juice"
id = "orangejuice"
description = "Both delicious AND rich in Vitamin C, what more do you need?"
- color = "#E78108" // rgb: 231, 129, 8
+ color = "#E78108"
glass_icon_state = "glass_orange"
glass_name = "glass of orange juice"
glass_desc = "Vitamins! Yay!"
-/datum/reagent/drink/orangejuice/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/orangejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- if(M.getOxyLoss() && prob(30)) M.adjustOxyLoss(-1)
- return
+ if(alien == IS_DIONA)
+ return
+ M.adjustOxyLoss(-2 * removed)
-/datum/reagent/drink/poisonberryjuice
+/datum/reagent/toxin/poisonberryjuice // It has more in common with toxins than drinks... but it's a juice
name = "Poison Berry Juice"
id = "poisonberryjuice"
description = "A tasty juice blended from various kinds of very deadly and toxic berries."
- color = "#863353" // rgb: 134, 51, 83
+ color = "#863353"
+ strength = 5
glass_icon_state = "poisonberryjuice"
glass_name = "glass of poison berry juice"
glass_desc = "A glass of deadly juice."
-/datum/reagent/drink/poisonberryjuice/on_mob_life(var/mob/living/M as mob)
- ..()
- M.adjustToxLoss(1)
- return
-
/datum/reagent/drink/potato_juice
name = "Potato Juice"
id = "potato"
description = "Juice of the potato. Bleh."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ nutrition = 2
+ color = "#302000"
glass_icon_state = "glass_brown"
glass_name = "glass of potato juice"
@@ -534,48 +461,52 @@
name = "Tomato Juice"
id = "tomatojuice"
description = "Tomatoes made into juice. What a waste of big, juicy tomatoes, huh?"
- color = "#731008" // rgb: 115, 16, 8
+ color = "#731008"
glass_icon_state = "glass_red"
glass_name = "glass of tomato juice"
glass_desc = "Are you sure this is tomato juice?"
-/datum/reagent/drink/tomatojuice/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/tomatojuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- if(M.getFireLoss() && prob(20)) M.heal_organ_damage(0,1)
- return
+ if(alien == IS_DIONA)
+ return
+ M.heal_organ_damage(0, 0.5 * removed)
/datum/reagent/drink/watermelonjuice
name = "Watermelon Juice"
id = "watermelonjuice"
description = "Delicious juice made from watermelon."
- color = "#B83333" // rgb: 184, 51, 51
+ color = "#B83333"
glass_icon_state = "glass_red"
glass_name = "glass of watermelon juice"
glass_desc = "Delicious juice made from watermelon."
+// Everything else
+
/datum/reagent/drink/milk
name = "Milk"
id = "milk"
description = "An opaque white liquid produced by the mammary glands of mammals."
- color = "#DFDFDF" // rgb: 223, 223, 223
+ color = "#DFDFDF"
glass_icon_state = "glass_white"
glass_name = "glass of milk"
glass_desc = "White and nutritious goodness!"
-/datum/reagent/drink/milk/on_mob_life(var/mob/living/M as mob)
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- holder.remove_reagent("capsaicin", 10*REAGENTS_METABOLISM)
+/datum/reagent/drink/milk/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ if(alien == IS_DIONA)
+ return
+ M.heal_organ_damage(0.5 * removed, 0)
+ holder.remove_reagent("capsaicin", 10 * removed)
/datum/reagent/drink/milk/cream
name = "Cream"
id = "cream"
description = "The fatty, still liquid part of milk. Why don't you mix this with sum scotch, eh?"
- color = "#DFD7AF" // rgb: 223, 215, 175
+ color = "#DFD7AF"
glass_icon_state = "glass_white"
glass_name = "glass of cream"
@@ -585,7 +516,7 @@
name = "Soy Milk"
id = "soymilk"
description = "An opaque white liquid made from soybeans."
- color = "#DFDFC7" // rgb: 223, 223, 199
+ color = "#DFDFC7"
glass_icon_state = "glass_white"
glass_name = "glass of soy milk"
@@ -595,7 +526,7 @@
name = "Tea"
id = "tea"
description = "Tasty black tea, it has antioxidants, it's good for you!"
- color = "#101000" // rgb: 16, 16, 0
+ color = "#101000"
adj_dizzy = -2
adj_drowsy = -1
adj_sleepy = -3
@@ -605,11 +536,11 @@
glass_name = "cup of tea"
glass_desc = "Tasty black tea, it has antioxidants, it's good for you!"
-/datum/reagent/drink/tea/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/tea/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- if(M.getToxLoss() && prob(20))
- M.adjustToxLoss(-1)
- return
+ if(alien == IS_DIONA)
+ return
+ M.adjustToxLoss(-0.5 * removed)
/datum/reagent/drink/tea/icetea
name = "Iced Tea"
@@ -627,7 +558,7 @@
name = "Coffee"
id = "coffee"
description = "Coffee is a brewed drink prepared from roasted seeds, commonly called coffee beans, of the coffee plant."
- color = "#482000" // rgb: 72, 32, 0
+ color = "#482000"
adj_dizzy = -5
adj_drowsy = -3
adj_sleepy = -2
@@ -637,19 +568,19 @@
glass_name = "cup of coffee"
glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere."
-/datum/reagent/drink/coffee/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
+ if(alien == IS_DIONA)
+ return
M.make_jittery(5)
if(adj_temp > 0)
- holder.remove_reagent("frostoil", 10*REAGENTS_METABOLISM)
-
- holder.remove_reagent(src.id, 0.1)
+ holder.remove_reagent("frostoil", 10 * removed)
/datum/reagent/drink/coffee/icecoffee
name = "Iced Coffee"
id = "icecoffee"
description = "Coffee and ice, refreshing and cool."
- color = "#102838" // rgb: 16, 40, 56
+ color = "#102838"
adj_temp = -5
glass_icon_state = "icedcoffeeglass"
@@ -660,8 +591,7 @@
name = "Soy Latte"
id = "soy_latte"
description = "A nice and tasty beverage while you are reading your hippie books."
- color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
+ color = "#664300"
adj_temp = 5
glass_icon_state = "soy_latte"
@@ -669,18 +599,15 @@
glass_desc = "A nice and refrshing beverage while you are reading."
glass_center_of_mass = list("x"=15, "y"=9)
-/datum/reagent/drink/coffee/soy_latte/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/coffee/soy_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
+ M.heal_organ_damage(0.5 * removed, 0)
/datum/reagent/drink/coffee/cafe_latte
name = "Cafe Latte"
id = "cafe_latte"
description = "A nice, strong and tasty beverage while you are reading."
color = "#664300" // rgb: 102, 67, 0
- adj_sleepy = 0
adj_temp = 5
glass_icon_state = "cafe_latte"
@@ -688,50 +615,31 @@
glass_desc = "A nice, strong and refreshing beverage while you are reading."
glass_center_of_mass = list("x"=15, "y"=9)
-/datum/reagent/drink/coffee/cafe_latte/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/coffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- M.sleeping = 0
- if(M.getBruteLoss() && prob(20)) M.heal_organ_damage(1,0)
- return
-
-/datum/reagent/hot_coco // there's also drink/hot_coco for whatever reason
- name = "Hot Chocolate"
- id = "hot_coco"
- description = "Made with love! And cocoa beans."
- reagent_state = LIQUID
- nutriment_factor = 2 * REAGENTS_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
-
- glass_icon_state = "chocolateglass"
- glass_name = "glass of hot chocolate"
- glass_desc = "Made with love! And cocoa beans."
-
-/datum/reagent/hot_coco/on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
- M.nutrition += nutriment_factor
- ..()
- return
+ M.heal_organ_damage(0.5 * removed, 0)
/datum/reagent/drink/hot_coco
name = "Hot Chocolate"
id = "hot_coco"
description = "Made with love! And cocoa beans."
- nutriment_factor = 2 * FOOD_METABOLISM
- color = "#403010" // rgb: 64, 48, 16
+ reagent_state = LIQUID
+ color = "#403010"
+ nutrition = 2
adj_temp = 5
glass_icon_state = "chocolateglass"
glass_name = "glass of hot chocolate"
glass_desc = "Made with love! And cocoa beans."
-/datum/reagent/drink/cold/sodawater
+/datum/reagent/drink/sodawater
name = "Soda Water"
id = "sodawater"
description = "A can of club soda. Why not make a scotch and soda?"
- color = "#619494" // rgb: 97, 148, 148
+ color = "#619494"
adj_dizzy = -5
adj_drowsy = -3
+ adj_temp = -5
glass_icon_state = "glass_clear"
glass_name = "glass of soda water"
@@ -741,63 +649,66 @@
name = "Grape Soda"
id = "grapesoda"
description = "Grapes made into a fine drank."
- color = "#421C52" // rgb: 98, 57, 53
- adj_drowsy = -3
+ color = "#421C52"
+ adj_drowsy = -3
glass_icon_state = "gsodaglass"
glass_name = "glass of grape soda"
glass_desc = "Looks like a delicious drink!"
-/datum/reagent/drink/cold/tonic
+/datum/reagent/drink/tonic
name = "Tonic Water"
id = "tonic"
description = "It tastes strange but at least the quinine keeps the Space Malaria at bay."
- color = "#664300" // rgb: 102, 67, 0
+ color = "#664300"
adj_dizzy = -5
adj_drowsy = -3
adj_sleepy = -2
+ adj_temp = -5
glass_icon_state = "glass_clear"
glass_name = "glass of tonic water"
glass_desc = "Quinine tastes funny, but at least it'll keep that Space Malaria away."
-/datum/reagent/drink/cold/lemonade
+/datum/reagent/drink/lemonade
name = "Lemonade"
description = "Oh the nostalgia..."
id = "lemonade"
- color = "#FFFF00" // rgb: 255, 255, 0
+ color = "#FFFF00"
+ adj_temp = -5
glass_icon_state = "lemonadeglass"
glass_name = "glass of lemonade"
glass_desc = "Oh the nostalgia..."
-/datum/reagent/drink/cold/kiraspecial
+/datum/reagent/drink/kiraspecial
name = "Kira Special"
description = "Long live the guy who everyone had mistaken for a girl. Baka!"
id = "kiraspecial"
- color = "#CCCC99" // rgb: 204, 204, 153
+ color = "#CCCC99"
+ adj_temp = -5
glass_icon_state = "kiraspecial"
glass_name = "glass of Kira Special"
glass_desc = "Long live the guy who everyone had mistaken for a girl. Baka!"
glass_center_of_mass = list("x"=16, "y"=12)
-/datum/reagent/drink/cold/brownstar
+/datum/reagent/drink/brownstar
name = "Brown Star"
description = "It's not what it sounds like..."
id = "brownstar"
- color = "#9F3400" // rgb: 159, 052, 000
- adj_temp = - 2
+ color = "#9F3400"
+ adj_temp = -2
glass_icon_state = "brownstar"
glass_name = "glass of Brown Star"
glass_desc = "It's not what it sounds like..."
-/datum/reagent/drink/cold/milkshake
+/datum/reagent/drink/milkshake
name = "Milkshake"
description = "Glorious brainfreezing mixture."
id = "milkshake"
- color = "#AEE5E4" // rgb" 174, 229, 228
+ color = "#AEE5E4"
adj_temp = -9
glass_icon_state = "milkshake"
@@ -805,40 +716,28 @@
glass_desc = "Glorious brainfreezing mixture."
glass_center_of_mass = list("x"=16, "y"=7)
-/datum/reagent/drink/cold/milkshake/on_mob_life(var/mob/living/M as mob)
- if(!M)
- M = holder.my_atom
- if(prob(1))
- M.emote("shiver")
- M.bodytemperature = max(M.bodytemperature - 10 * TEMPERATURE_DAMAGE_COEFFICIENT, 0)
- if(istype(M, /mob/living/carbon/slime))
- M.bodytemperature = max(M.bodytemperature - rand(10,20), 0)
- holder.remove_reagent("capsaicin", 5)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- ..()
- return
-
-/datum/reagent/drink/cold/rewriter
+/datum/reagent/drink/rewriter
name = "Rewriter"
description = "The secret of the sanctuary of the Libarian..."
id = "rewriter"
- color = "#485000" // rgb:72, 080, 0
+ color = "#485000"
+ adj_temp = -5
glass_icon_state = "rewriter"
glass_name = "glass of Rewriter"
glass_desc = "The secret of the sanctuary of the Libarian..."
glass_center_of_mass = list("x"=16, "y"=9)
-/datum/reagent/drink/cold/rewriter/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
M.make_jittery(5)
- return
-/datum/reagent/drink/cold/nuka_cola
+/datum/reagent/drink/nuka_cola
name = "Nuka Cola"
id = "nuka_cola"
description = "Cola, cola never changes."
- color = "#100800" // rgb: 16, 8, 0
+ color = "#100800"
+ adj_temp = -5
adj_sleepy = -2
glass_icon_state = "nuka_colaglass"
@@ -846,156 +745,148 @@
glass_desc = "Don't cry, Don't raise your eye, It's only nuclear wasteland"
glass_center_of_mass = list("x"=16, "y"=6)
-/datum/reagent/drink/cold/nuka_cola/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/drink/nuka_cola/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ M.add_chemical_effect(CE_SPEEDBOOST, 1)
M.make_jittery(20)
M.druggy = max(M.druggy, 30)
- M.dizziness +=5
+ M.dizziness += 5
M.drowsyness = 0
- ..()
- return
/datum/reagent/drink/grenadine
name = "Grenadine Syrup"
id = "grenadine"
description = "Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways?"
- color = "#FF004F" // rgb: 255, 0, 79
+ color = "#FF004F"
glass_icon_state = "grenadineglass"
glass_name = "glass of grenadine syrup"
glass_desc = "Sweet and tangy, a bar syrup used to add color or flavor to drinks."
glass_center_of_mass = list("x"=17, "y"=6)
-/datum/reagent/drink/cold/space_cola
+/datum/reagent/drink/space_cola
name = "Space Cola"
id = "cola"
description = "A refreshing beverage."
reagent_state = LIQUID
- color = "#100800" // rgb: 16, 8, 0
- adj_drowsy = -3
+ color = "#100800"
+ adj_drowsy = -3
+ adj_temp = -5
glass_icon_state = "glass_brown"
glass_name = "glass of Space Cola"
glass_desc = "A glass of refreshing Space Cola"
-/datum/reagent/drink/cold/spacemountainwind
+/datum/reagent/drink/spacemountainwind
name = "Mountain Wind"
id = "spacemountainwind"
description = "Blows right through you like a space wind."
- color = "#102000" // rgb: 16, 32, 0
+ color = "#102000"
adj_drowsy = -7
adj_sleepy = -1
+ adj_temp = -5
glass_icon_state = "Space_mountain_wind_glass"
glass_name = "glass of Space Mountain Wind"
glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind."
-/datum/reagent/drink/cold/dr_gibb
+/datum/reagent/drink/dr_gibb
name = "Dr. Gibb"
id = "dr_gibb"
description = "A delicious blend of 42 different flavours"
- color = "#102000" // rgb: 16, 32, 0
+ color = "#102000"
adj_drowsy = -6
+ adj_temp = -5
glass_icon_state = "dr_gibb_glass"
glass_name = "glass of Dr. Gibb"
glass_desc = "Dr. Gibb. Not as dangerous as the name might imply."
-/datum/reagent/drink/cold/space_up
+/datum/reagent/drink/space_up
name = "Space-Up"
id = "space_up"
description = "Tastes like a hull breach in your mouth."
- color = "#202800" // rgb: 32, 40, 0
+ color = "#202800"
adj_temp = -8
glass_icon_state = "space-up_glass"
glass_name = "glass of Space-up"
glass_desc = "Space-up. It helps keep your cool."
-/datum/reagent/drink/cold/lemon_lime
+/datum/reagent/drink/lemon_lime
name = "Lemon Lime"
description = "A tangy substance made of 0.5% natural citrus!"
id = "lemon_lime"
- color = "#878F00" // rgb: 135, 40, 0
+ color = "#878F00"
adj_temp = -8
glass_icon_state = "lemonlime"
glass_name = "glass of lemon lime soda"
glass_desc = "A tangy substance made of 0.5% natural citrus!"
-/datum/reagent/doctor_delight
+/datum/reagent/drink/doctor_delight
name = "The Doctor's Delight"
id = "doctorsdelight"
description = "A gulp a day keeps the MediBot away. That's probably for the best."
reagent_state = LIQUID
- color = "#FF8CFF" // rgb: 255, 140, 255
- nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#FF8CFF"
+ nutrition = 1
glass_icon_state = "doctorsdelightglass"
glass_name = "glass of The Doctor's Delight"
glass_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place."
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/doctor_delight/on_mob_life(var/mob/living/M as mob)
- M:nutrition += nutriment_factor
- holder.remove_reagent(src.id, FOOD_METABOLISM)
- if(!M) M = holder.my_atom
- if(M:getOxyLoss() && prob(50)) M:adjustOxyLoss(-2)
- if(M:getBruteLoss() && prob(60)) M:heal_organ_damage(2,0)
- if(M:getFireLoss() && prob(50)) M:heal_organ_damage(0,2)
- if(M:getToxLoss() && prob(50)) M:adjustToxLoss(-2)
- if(M.dizziness !=0) M.dizziness = max(0,M.dizziness-15)
- if(M.confused !=0) M.confused = max(0,M.confused - 5)
+/datum/reagent/drink/doctor_delight/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ if(alien == IS_DIONA)
+ return
+ M.adjustOxyLoss(-4 * removed)
+ M.heal_organ_damage(2 * removed, 2 * removed)
+ M.adjustToxLoss(-2 * removed)
+ if(M.dizziness)
+ M.dizziness = max(0, M.dizziness - 15)
+ if(M.confused)
+ M.confused = max(0, M.confused - 5)
-/datum/reagent/dry_ramen
+/datum/reagent/drink/dry_ramen
name = "Dry Ramen"
id = "dry_ramen"
description = "Space age food, since August 25, 1958. Contains dried noodles, vegetables, and chemicals that boil in contact with water."
reagent_state = SOLID
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ nutrition = 1
+ color = "#302000"
-/datum/reagent/dry_ramen/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- ..()
- return
-
-/datum/reagent/hot_ramen
+/datum/reagent/drink/hot_ramen
name = "Hot Ramen"
id = "hot_ramen"
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ color = "#302000"
+ nutrition = 5
+ adj_temp = 5
-/datum/reagent/hot_ramen/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- if (M.bodytemperature < 310)//310 is the normal bodytemp. 310.055
- M.bodytemperature = min(310, M.bodytemperature + (10 * TEMPERATURE_DAMAGE_COEFFICIENT))
- ..()
- return
-
-/datum/reagent/hell_ramen
+/datum/reagent/drink/hell_ramen
name = "Hell Ramen"
id = "hell_ramen"
description = "The noodles are boiled, the flavors are artificial, just like being back in school."
reagent_state = LIQUID
- nutriment_factor = 5 * REAGENTS_METABOLISM
- color = "#302000" // rgb: 48, 32, 0
+ color = "#302000"
+ nutrition = 5
-/datum/reagent/hell_ramen/on_mob_life(var/mob/living/M as mob)
- M.nutrition += nutriment_factor
- M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
+/datum/reagent/drink/hell_ramen/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ if(alien == IS_DIONA)
+ return
+ M.bodytemperature += 10 * TEMPERATURE_DAMAGE_COEFFICIENT
-/datum/reagent/drink/cold/ice
+/datum/reagent/drink/ice
name = "Ice"
id = "ice"
description = "Frozen water, your dentist wouldn't like you chewing this."
reagent_state = SOLID
- color = "#619494" // rgb: 97, 148, 148
+ color = "#619494"
+ adj_temp = -5
glass_icon_state = "iceglass"
glass_name = "glass of ice"
@@ -1010,19 +901,16 @@
glass_name = "glass of nothing"
glass_desc = "Absolutely nothing."
-/datum/reagent/drink/cold
- name = "Cold drink"
- adj_temp = -5
+/* Alcohol */
+
+// Basic
/datum/reagent/ethanol/absinthe
name = "Absinthe"
id = "absinthe"
description = "Watch out that the Green Fairy doesn't come for you!"
- color = "#33EE00" // rgb: 51, 238, 0
- boozepwr = 4
- dizzy_adj = 5
- slur_start = 15
- confused_start = 30
+ color = "#33EE00"
+ strength = 12
glass_icon_state = "absintheglass"
glass_name = "glass of absinthe"
@@ -1033,8 +921,8 @@
name = "Ale"
id = "ale"
description = "A dark alchoholic beverage made by malted barley and yeast."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
+ color = "#664300"
+ strength = 50
glass_icon_state = "aleglass"
glass_name = "glass of ale"
@@ -1045,26 +933,27 @@
name = "Beer"
id = "beer"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
- nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300"
+ strength = 50
+ nutriment_factor = 1
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer"
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/ethanol/beer/on_mob_life(var/mob/living/M as mob)
- M:jitteriness = max(M:jitteriness-3,0)
+/datum/reagent/ethanol/beer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ if(alien == IS_DIONA)
+ return
+ M.jitteriness = max(M.jitteriness - 3, 0)
/datum/reagent/ethanol/bluecuracao
name = "Blue Curacao"
id = "bluecuracao"
description = "Exotically blue, fruity drink, distilled from oranges."
- color = "#0000CD" // rgb: 0, 0, 205
- boozepwr = 1.5
+ color = "#0000CD"
+ strength = 15
glass_icon_state = "curacaoglass"
glass_name = "glass of blue curacao"
@@ -1075,10 +964,8 @@
name = "Cognac"
id = "cognac"
description = "A sweet and strongly alchoholic drink, made after numerous distillations and years of maturing. Classy as fornication."
- color = "#AB3C05" // rgb: 171, 60, 5
- boozepwr = 1.5
- dizzy_adj = 4
- confused_start = 115 //amount absorbed after which mob starts confusing directions
+ color = "#AB3C05"
+ strength = 15
glass_icon_state = "cognacglass"
glass_name = "glass of cognac"
@@ -1087,28 +974,28 @@
/datum/reagent/ethanol/deadrum
name = "Deadrum"
- id = "rum" // duplicate ids?
+ id = "deadrum"
description = "Popular with the sailors. Not very popular with everyone else."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
+ color = "#664300"
+ strength = 50
glass_icon_state = "rumglass"
glass_name = "glass of rum"
glass_desc = "Now you want to Pray for a pirate suit, don't you?"
glass_center_of_mass = list("x"=16, "y"=12)
-/datum/reagent/ethanol/deadrum/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/ethanol/deadrum/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
+ if(alien == IS_DIONA)
+ return
M.dizziness +=5
- return
/datum/reagent/ethanol/gin
name = "Gin"
id = "gin"
description = "It's gin. In space. I say, good sir."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
- dizzy_adj = 3
+ color = "#664300"
+ strength = 50
glass_icon_state = "ginvodkaglass"
glass_name = "glass of gin"
@@ -1119,28 +1006,31 @@
name = "Kahlua"
id = "kahlua"
description = "A widely known, Mexican coffee-flavoured liqueur. In production since 1936!"
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1.5
- dizzy_adj = -5
- adj_drowsy = -3
- adj_sleepy = -2
+ color = "#664300"
+ strength = 15
glass_icon_state = "kahluaglass"
glass_name = "glass of RR coffee liquor"
glass_desc = "DAMN, THIS THING LOOKS ROBUST"
glass_center_of_mass = list("x"=15, "y"=7)
-/datum/reagent/ethanol/kahlua/on_mob_life(var/mob/living/M as mob)
- M.make_jittery(5)
+/datum/reagent/ethanol/kahlua/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ if(alien == IS_DIONA)
+ return
+ M.dizziness = max(0, M.dizziness - 5)
+ M.drowsyness = max(0, M.drowsyness - 3)
+ M.sleeping = max(0, M.sleeping - 2)
+ if(M.bodytemperature > 310)
+ M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
+ M.make_jittery(5)
/datum/reagent/ethanol/melonliquor
name = "Melon Liquor"
id = "melonliquor"
description = "A relatively sweet and fruity 46 proof liquor."
color = "#138808" // rgb: 19, 136, 8
- boozepwr = 1
+ strength = 50
glass_icon_state = "emeraldglass"
glass_name = "glass of melon liquor"
@@ -1151,8 +1041,8 @@
name = "Rum"
id = "rum"
description = "Yohoho and all that."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1.5
+ color = "#664300"
+ strength = 15
glass_icon_state = "rumglass"
glass_name = "glass of rum"
@@ -1163,8 +1053,8 @@
name = "Sake"
id = "sake"
description = "Anime's favorite drink."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
+ color = "#664300"
+ strength = 25
glass_icon_state = "ginvodkaglass"
glass_name = "glass of sake"
@@ -1175,8 +1065,8 @@
name = "Tequila"
id = "tequilla"
description = "A strong and mildly flavoured, mexican produced spirit. Feeling thirsty hombre?"
- color = "#FFFF91" // rgb: 255, 255, 145
- boozepwr = 2
+ color = "#FFFF91"
+ strength = 25
glass_icon_state = "tequillaglass"
glass_name = "glass of Tequilla"
@@ -1187,28 +1077,29 @@
name = "Thirteen Loko"
id = "thirteenloko"
description = "A potent mixture of caffeine and alcohol."
- color = "#102000" // rgb: 16, 32, 0
- boozepwr = 2
- nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#102000"
+ strength = 25
+ nutriment_factor = 1
glass_icon_state = "thirteen_loko_glass"
glass_name = "glass of Thirteen Loko"
glass_desc = "This is a glass of Thirteen Loko, it appears to be of the highest quality. The drink, not the glass."
-/datum/reagent/ethanol/thirteenloko/on_mob_life(var/mob/living/M as mob)
- M:drowsyness = max(0,M:drowsyness-7)
+/datum/reagent/ethanol/thirteenloko/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ return
+ M.drowsyness = max(0, M.drowsyness - 7)
if (M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (5 * TEMPERATURE_DAMAGE_COEFFICIENT))
M.make_jittery(5)
- ..()
- return
/datum/reagent/ethanol/vermouth
name = "Vermouth"
id = "vermouth"
description = "You suddenly feel a craving for a martini..."
color = "#91FF91" // rgb: 145, 255, 145
- boozepwr = 1.5
+ strength = 15
glass_icon_state = "vermouthglass"
glass_name = "glass of vermouth"
@@ -1220,25 +1111,23 @@
id = "vodka"
description = "Number one drink AND fueling choice for Russians worldwide."
color = "#0064C8" // rgb: 0, 100, 200
- boozepwr = 2
+ strength = 15
glass_icon_state = "ginvodkaglass"
glass_name = "glass of vodka"
glass_desc = "The glass contain wodka. Xynta."
glass_center_of_mass = list("x"=16, "y"=12)
-/datum/reagent/ethanol/vodka/on_mob_life(var/mob/living/M as mob)
- M.radiation = max(M.radiation-1,0)
+/datum/reagent/ethanol/vodka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ M.radiation = max(M.radiation - 1 * removed, 0)
/datum/reagent/ethanol/whiskey
name = "Whiskey"
id = "whiskey"
description = "A superb and well-aged single-malt whiskey. Damn."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
- dizzy_adj = 4
+ color = "#664300"
+ strength = 25
glass_icon_state = "whiskeyglass"
glass_name = "glass of whiskey"
@@ -1250,23 +1139,22 @@
id = "wine"
description = "An premium alchoholic beverage made from distilled grape juice."
color = "#7E4043" // rgb: 126, 64, 67
- boozepwr = 1.5
- dizzy_adj = 2
- slur_start = 65 //amount absorbed after which mob starts slurring
- confused_start = 145 //amount absorbed after which mob starts confusing directions
+ strength = 15
glass_icon_state = "wineglass"
glass_name = "glass of wine"
glass_desc = "A very classy looking drink."
glass_center_of_mass = list("x"=15, "y"=7)
+// Cocktails
+
/datum/reagent/ethanol/acid_spit
name = "Acid Spit"
id = "acidspit"
description = "A drink for the daring, can be deadly if incorrectly prepared!"
reagent_state = LIQUID
- color = "#365000" // rgb: 54, 80, 0
- boozepwr = 1.5
+ color = "#365000"
+ strength = 30
glass_icon_state = "acidspitglass"
glass_name = "glass of Acid Spit"
@@ -1277,8 +1165,8 @@
name = "Allies Cocktail"
id = "alliescocktail"
description = "A drink made from your allies, not as sweet as when made from your enemies."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
+ color = "#664300"
+ strength = 25
glass_icon_state = "alliescocktail"
glass_name = "glass of Allies cocktail"
@@ -1289,8 +1177,8 @@
name = "Aloe"
id = "aloe"
description = "So very, very, very good."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "aloe"
glass_name = "glass of Aloe"
@@ -1302,79 +1190,60 @@
id = "amasec"
description = "Official drink of the NanoTrasen Gun-Club!"
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
-
-/datum/reagent/ethanol/andalusia
- name = "Andalusia"
- id = "andalusia"
- description = "A nice, strangely named drink."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
-
- glass_icon_state = "andalusia"
- glass_name = "glass of Andalusia"
- glass_desc = "A nice, strange named drink."
- glass_center_of_mass = list("x"=16, "y"=9)
+ color = "#664300"
+ strength = 25
glass_icon_state = "amasecglass"
glass_name = "glass of Amasec"
glass_desc = "Always handy before COMBAT!!!"
glass_center_of_mass = list("x"=16, "y"=9)
+/datum/reagent/ethanol/andalusia
+ name = "Andalusia"
+ id = "andalusia"
+ description = "A nice, strangely named drink."
+ color = "#664300"
+ strength = 15
+
+ glass_icon_state = "andalusia"
+ glass_name = "glass of Andalusia"
+ glass_desc = "A nice, strange named drink."
+ glass_center_of_mass = list("x"=16, "y"=9)
+
/datum/reagent/ethanol/antifreeze
name = "Anti-freeze"
id = "antifreeze"
description = "Ultimate refreshment."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
+ adj_temp = 20
+ targ_temp = 330
glass_icon_state = "antifreeze"
glass_name = "glass of Anti-freeze"
glass_desc = "The ultimate refreshment."
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/ethanol/antifreeze/on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 330)
- M.bodytemperature = min(330, M.bodytemperature + (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
- return
-
-/datum/reagent/atomicbomb
+/datum/reagent/ethanol/atomicbomb
name = "Atomic Bomb"
id = "atomicbomb"
description = "Nuclear proliferation never tasted so good."
reagent_state = LIQUID
- color = "#666300" // rgb: 102, 99, 0
+ color = "#666300"
+ strength = 10
+ druggy = 50
glass_icon_state = "atomicbombglass"
glass_name = "glass of Atomic Bomb"
glass_desc = "Nanotrasen cannot take legal responsibility for your actions after imbibing."
glass_center_of_mass = list("x"=15, "y"=7)
-/datum/reagent/atomicbomb/on_mob_life(var/mob/living/M as mob)
- M.druggy = max(M.druggy, 50)
- M.confused = max(M.confused+2,0)
- M.make_dizzy(10)
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 3
- if(!data) data = 1
- data++
- switch(data)
- if(51 to 200)
- M.sleeping += 1
- if(201 to INFINITY)
- M.sleeping += 1
- M.adjustToxLoss(2)
- ..()
- return
-
/datum/reagent/ethanol/b52
name = "B-52"
id = "b52"
description = "Coffee, Irish Cream, and cognac. You will get bombed."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
glass_icon_state = "b52glass"
glass_name = "glass of B-52"
@@ -1384,8 +1253,8 @@
name = "Bahama mama"
id = "bahama_mama"
description = "Tropical cocktail."
- color = "#FF7F3B" // rgb: 255, 127, 59
- boozepwr = 2
+ color = "#FF7F3B"
+ strength = 25
glass_icon_state = "bahama_mama"
glass_name = "glass of Bahama Mama"
@@ -1396,9 +1265,9 @@
name = "Banana Mama"
id = "bananahonk"
description = "A drink from Clown Heaven."
- nutriment_factor = 1 * REAGENTS_METABOLISM
- color = "#FFFF91" // rgb: 255, 255, 140
- boozepwr = 4
+ nutriment_factor = 1
+ color = "#FFFF91"
+ strength = 12
glass_icon_state = "bananahonkglass"
glass_name = "glass of Banana Honk"
@@ -1409,8 +1278,8 @@
name = "Barefoot"
id = "barefoot"
description = "Barefoot and pregnant"
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1.5
+ color = "#664300"
+ strength = 30
glass_icon_state = "b&p"
glass_name = "glass of Barefoot"
@@ -1422,26 +1291,25 @@
id = "beepskysmash"
description = "Deny drinking this and prepare for THE LAW."
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
glass_icon_state = "beepskysmashglass"
glass_name = "Beepsky Smash"
glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW."
glass_center_of_mass = list("x"=18, "y"=10)
-/datum/reagent/ethanol/beepsky_smash/on_mob_life(var/mob/living/M as mob)
- M.Stun(2)
+/datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ M.Stun(2)
/datum/reagent/ethanol/bilk
name = "Bilk"
id = "bilk"
description = "This appears to be beer mixed with milk. Disgusting."
- color = "#895C4C" // rgb: 137, 92, 76
- boozepwr = 1
- nutriment_factor = 2 * FOOD_METABOLISM
+ color = "#895C4C"
+ strength = 50
+ nutriment_factor = 2
glass_icon_state = "glass_brown"
glass_name = "glass of bilk"
@@ -1451,8 +1319,8 @@
name = "Black Russian"
id = "blackrussian"
description = "For the lactose-intolerant. Still as classy as a White Russian."
- color = "#360000" // rgb: 54, 0, 0
- boozepwr = 3
+ color = "#360000"
+ strength = 15
glass_icon_state = "blackrussianglass"
glass_name = "glass of Black Russian"
@@ -1463,8 +1331,8 @@
name = "Bloody Mary"
id = "bloodymary"
description = "A strange yet pleasurable mixture made of vodka, tomato and lime juice. Or at least you THINK the red stuff is tomato juice."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "bloodymaryglass"
glass_name = "glass of Bloody Mary"
@@ -1474,8 +1342,8 @@
name = "Booger"
id = "booger"
description = "Ewww..."
- color = "#8CFF8C" // rgb: 140, 255, 140
- boozepwr = 1.5
+ color = "#8CFF8C"
+ strength = 30
glass_icon_state = "booger"
glass_name = "glass of Booger"
@@ -1485,8 +1353,8 @@
name = "Brave Bull"
id = "bravebull"
description = "It's just as effective as Dutch-Courage!"
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "bravebullglass"
glass_name = "glass of Brave Bull"
@@ -1497,8 +1365,8 @@
name = "Changeling Sting"
id = "changelingsting"
description = "You take a tiny sip and feel a burning sensation..."
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 5
+ color = "#2E6671"
+ strength = 10
glass_icon_state = "changelingsting"
glass_name = "glass of Changeling Sting"
@@ -1508,8 +1376,8 @@
name = "Classic Martini"
id = "martini"
description = "Vermouth with Gin. Not quite how 007 enjoyed it, but still delicious."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
+ color = "#664300"
+ strength = 25
glass_icon_state = "martiniglass"
glass_name = "glass of classic martini"
@@ -1520,8 +1388,8 @@
name = "Cuba Libre"
id = "cubalibre"
description = "Rum, mixed with cola. Viva la revolucion."
- color = "#3E1B00" // rgb: 62, 27, 0
- boozepwr = 1.5
+ color = "#3E1B00"
+ strength = 30
glass_icon_state = "cubalibreglass"
glass_name = "glass of Cuba Libre"
@@ -1532,8 +1400,8 @@
name = "Demons Blood"
id = "demonsblood"
description = "AHHHH!!!!"
- color = "#820000" // rgb: 130, 0, 0
- boozepwr = 3
+ color = "#820000"
+ strength = 15
glass_icon_state = "demonsblood"
glass_name = "glass of Demons' Blood"
@@ -1544,8 +1412,8 @@
name = "Devils Kiss"
id = "devilskiss"
description = "Creepy time!"
- color = "#A68310" // rgb: 166, 131, 16
- boozepwr = 3
+ color = "#A68310"
+ strength = 15
glass_icon_state = "devilskiss"
glass_name = "glass of Devil's Kiss"
@@ -1556,9 +1424,9 @@
name = "Driest Martini"
id = "driestmartini"
description = "Only for the experienced. You think you see sand floating in the glass."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 4
+ nutriment_factor = 1
+ color = "#2E6671"
+ strength = 12
glass_icon_state = "driestmartiniglass"
glass_name = "glass of Driest Martini"
@@ -1569,10 +1437,8 @@
name = "Gin Fizz"
id = "ginfizz"
description = "Refreshingly lemony, deliciously dry."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1.5
- dizzy_adj = 4
- slurr_adj = 3
+ color = "#664300"
+ strength = 30
glass_icon_state = "ginfizzglass"
glass_name = "glass of gin fizz"
@@ -1584,8 +1450,8 @@
id = "grog"
description = "Watered down rum, NanoTrasen approves!"
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 0.5
+ color = "#664300"
+ strength = 100
glass_icon_state = "grogglass"
glass_name = "glass of grog"
@@ -1594,49 +1460,34 @@
/datum/reagent/ethanol/erikasurprise
name = "Erika Surprise"
id = "erikasurprise"
- description = "The surprise is it's green!"
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 3
+ description = "The surprise is, it's green!"
+ color = "#2E6671"
+ strength = 15
glass_icon_state = "erikasurprise"
glass_name = "glass of Erika Surprise"
glass_desc = "The surprise is, it's green!"
glass_center_of_mass = list("x"=16, "y"=9)
-/datum/reagent/gargle_blaster
+/datum/reagent/ethanol/gargle_blaster
name = "Pan-Galactic Gargle Blaster"
id = "gargleblaster"
description = "Whoah, this stuff looks volatile!"
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
+ color = "#664300"
+ strength = 10
glass_icon_state = "gargleblasterglass"
glass_name = "glass of Pan-Galactic Gargle Blaster"
glass_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy."
glass_center_of_mass = list("x"=17, "y"=6)
-/datum/reagent/gargle_blaster/on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.dizziness +=6
- switch(data)
- if(15 to 45)
- M.stuttering = max(M.stuttering+3,0)
- if(45 to 55)
- if (prob(50))
- M.confused = max(M.confused+3,0)
- if(55 to 200)
- M.druggy = max(M.druggy, 55)
- if(200 to INFINITY)
- M.adjustToxLoss(2)
- ..()
-
/datum/reagent/ethanol/gintonic
name = "Gin and Tonic"
id = "gintonic"
description = "An all time classic, mild cocktail."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
+ color = "#664300"
+ strength = 50
glass_icon_state = "gintonicglass"
glass_name = "glass of gin and tonic"
@@ -1647,69 +1498,35 @@
name = "Goldschlager"
id = "goldschlager"
description = "100 proof cinnamon schnapps, made for alcoholic teen girls on spring break."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "ginvodkaglass"
glass_name = "glass of Goldschlager"
glass_desc = "100 proof that teen girls will drink anything with gold in it."
glass_center_of_mass = list("x"=16, "y"=12)
-/datum/reagent/hippies_delight
+/datum/reagent/ethanol/hippies_delight
name = "Hippies' Delight"
id = "hippiesdelight"
description = "You just don't get it maaaan."
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
+ color = "#664300"
+ strength = 15
+ druggy = 50
glass_icon_state = "hippiesdelightglass"
glass_name = "glass of Hippie's Delight"
glass_desc = "A drink enjoyed by people during the 1960's."
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/hippies_delight/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 50)
- if(!data) data = 1
- data++
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.make_dizzy(10)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.make_jittery(20)
- M.make_dizzy(20)
- M.druggy = max(M.druggy, 45)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to 200)
- if (!M.stuttering) M.stuttering = 1
- M.make_jittery(40)
- M.make_dizzy(40)
- M.druggy = max(M.druggy, 60)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- if(200 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.make_jittery(60)
- M.make_dizzy(60)
- M.druggy = max(M.druggy, 75)
- if(prob(40)) M.emote(pick("twitch","giggle"))
- if(prob(30)) M.adjustToxLoss(2)
- holder.remove_reagent(src.id, 0.2)
- ..()
- return
-
/datum/reagent/ethanol/hooch
name = "Hooch"
id = "hooch"
description = "Either someone's failure at cocktail making or attempt in alchohol production. In any case, do you really want to drink that?"
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
- dizzy_adj = 6
- slurr_adj = 5
- slur_start = 35 //amount absorbed after which mob starts slurring
- confused_start = 90 //amount absorbed after which mob starts confusing directions
+ color = "#664300"
+ strength = 25
+ toxicity = 2
glass_icon_state = "glass_brown2"
glass_name = "glass of Hooch"
@@ -1719,39 +1536,46 @@
name = "Iced Beer"
id = "iced_beer"
description = "A beer which is so cold the air around it freezes."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1
+ color = "#664300"
+ strength = 50
+ adj_temp = -20
+ targ_temp = 270
glass_icon_state = "iced_beerglass"
glass_name = "glass of iced beer"
glass_desc = "A beer so frosty, the air around it freezes."
glass_center_of_mass = list("x"=16, "y"=7)
-/datum/reagent/ethanol/iced_beer/on_mob_life(var/mob/living/M as mob)
- if(M.bodytemperature > 270)
- M.bodytemperature = max(270, M.bodytemperature - (20 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
- return
-
/datum/reagent/ethanol/irishcarbomb
name = "Irish Car Bomb"
id = "irishcarbomb"
description = "Mmm, tastes like chocolate cake..."
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 3
- dizzy_adj = 5
+ color = "#2E6671"
+ strength = 15
glass_icon_state = "irishcarbomb"
glass_name = "glass of Irish Car Bomb"
glass_desc = "An irish car bomb."
glass_center_of_mass = list("x"=16, "y"=8)
+/datum/reagent/ethanol/irishcoffee
+ name = "Irish Coffee"
+ id = "irishcoffee"
+ description = "Coffee, and alcohol. More fun than a Mimosa to drink in the morning."
+ color = "#664300"
+ strength = 15
+
+ glass_icon_state = "irishcoffeeglass"
+ glass_name = "glass of Irish coffee"
+ glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning."
+ glass_center_of_mass = list("x"=15, "y"=10)
+
/datum/reagent/ethanol/irish_cream
name = "Irish Cream"
id = "irishcream"
description = "Whiskey-imbued cream, what else would you expect from the Irish."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
+ color = "#664300"
+ strength = 25
glass_icon_state = "irishcreamglass"
glass_name = "glass of Irish cream"
@@ -1762,8 +1586,8 @@
name = "Long Island Iced Tea"
id = "longislandicedtea"
description = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
glass_icon_state = "longislandicedteaglass"
glass_name = "glass of Long Island iced tea"
@@ -1774,8 +1598,8 @@
name = "Manhattan"
id = "manhattan"
description = "The Detective's undercover drink of choice. He never could stomach gin..."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "manhattanglass"
glass_name = "glass of Manhattan"
@@ -1786,25 +1610,21 @@
name = "Manhattan Project"
id = "manhattan_proj"
description = "A scientist's drink of choice, for pondering ways to blow up the station."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 5
+ color = "#664300"
+ strength = 10
+ druggy = 30
glass_icon_state = "proj_manhattanglass"
glass_name = "glass of Manhattan Project"
glass_desc = "A scienitst drink of choice, for thinking how to blow up the station."
glass_center_of_mass = list("x"=17, "y"=8)
-/datum/reagent/ethanol/manhattan_proj/on_mob_life(var/mob/living/M as mob)
- M.druggy = max(M.druggy, 30)
- ..()
- return
-
/datum/reagent/ethanol/manly_dorf
name = "The Manly Dorf"
id = "manlydorf"
description = "Beer and Ale, brought together in a delicious mix. Intended for true men only."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
+ color = "#664300"
+ strength = 25
glass_icon_state = "manlydorfglass"
glass_name = "glass of The Manly Dorf"
@@ -1814,8 +1634,8 @@
name = "Margarita"
id = "margarita"
description = "On the rocks with salt on the rim. Arriba~!"
- color = "#8CFF8C" // rgb: 140, 255, 140
- boozepwr = 3
+ color = "#8CFF8C"
+ strength = 15
glass_icon_state = "margaritaglass"
glass_name = "glass of margarita"
@@ -1827,9 +1647,9 @@
id = "mead"
description = "A Viking's drink, though a cheap one."
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 1.5
- nutriment_factor = 1 * FOOD_METABOLISM
+ color = "#664300"
+ strength = 30
+ nutriment_factor = 1
glass_icon_state = "meadglass"
glass_name = "glass of mead"
@@ -1840,49 +1660,36 @@
name = "Moonshine"
id = "moonshine"
description = "You've really hit rock bottom now... your liver packed its bags and left last night."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
glass_icon_state = "glass_clear"
glass_name = "glass of moonshine"
glass_desc = "You've really hit rock bottom now... your liver packed its bags and left last night."
-/datum/reagent/neurotoxin
+/datum/reagent/ethanol/neurotoxin
name = "Neurotoxin"
id = "neurotoxin"
description = "A strong neurotoxin that puts the subject into a death-like state."
reagent_state = LIQUID
- color = "#2E2E61" // rgb: 46, 46, 97
+ color = "#2E2E61"
+ strength = 10
glass_icon_state = "neurotoxinglass"
glass_name = "glass of Neurotoxin"
glass_desc = "A drink that is guaranteed to knock you silly."
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/neurotoxin/on_mob_life(var/mob/living/carbon/M as mob)
- if(!M) M = holder.my_atom
- M.weakened = max(M.weakened, 3)
- if(!data) data = 1
- data++
- M.dizziness +=6
- switch(data)
- if(15 to 45)
- M.stuttering = max(M.stuttering+3,0)
- if(45 to 55)
- if (prob(50))
- M.confused = max(M.confused+3,0)
- if(55 to 200)
- M.druggy = max(M.druggy, 55)
- if(200 to INFINITY)
- M.adjustToxLoss(2)
+/datum/reagent/ethanol/neurotoxin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
..()
+ M.Weaken(3)
/datum/reagent/ethanol/patron
name = "Patron"
id = "patron"
description = "Tequila with silver in it, a favorite of alcoholic women in the club scene."
- color = "#585840" // rgb: 88, 88, 64
- boozepwr = 1.5
+ color = "#585840"
+ strength = 30
glass_icon_state = "patronglass"
glass_name = "glass of Patron"
@@ -1893,70 +1700,35 @@
name = "Poison Wine"
id = "pwine"
description = "Is this even wine? Toxic! Hallucinogenic! Probably consumed in boatloads by your superiors!"
- color = "#000000" // rgb: 0, 0, 0 SHOCKER
- boozepwr = 1
- dizzy_adj = 1
- slur_start = 1
- confused_start = 1
+ color = "#000000"
+ strength = 10
+ druggy = 50
+ halluci = 10
glass_icon_state = "pwineglass"
glass_name = "glass of ???"
glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?"
glass_center_of_mass = list("x"=16, "y"=5)
-/datum/reagent/ethanol/pwine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.druggy = max(M.druggy, 50)
- if(!data) data = 1
- data++
- switch(data)
- if(1 to 25)
- if (!M.stuttering) M.stuttering = 1
- M.make_dizzy(1)
- M.hallucination = max(M.hallucination, 3)
- if(prob(1)) M.emote(pick("twitch","giggle"))
- if(25 to 75)
- if (!M.stuttering) M.stuttering = 1
- M.hallucination = max(M.hallucination, 10)
- M.make_jittery(2)
- M.make_dizzy(2)
- M.druggy = max(M.druggy, 45)
- if(prob(5)) M.emote(pick("twitch","giggle"))
- if (75 to 150)
- if (!M.stuttering) M.stuttering = 1
- M.hallucination = max(M.hallucination, 60)
- M.make_jittery(4)
- M.make_dizzy(4)
- M.druggy = max(M.druggy, 60)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(prob(30)) M.adjustToxLoss(2)
- if (150 to 300)
- if (!M.stuttering) M.stuttering = 1
- M.hallucination = max(M.hallucination, 60)
- M.make_jittery(4)
- M.make_dizzy(4)
- M.druggy = max(M.druggy, 60)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(prob(30)) M.adjustToxLoss(2)
- if(prob(5)) if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/heart/L = H.internal_organs_by_name["heart"]
- if (L && istype(L))
- L.take_damage(5, 0)
- if (300 to INFINITY)
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- var/obj/item/organ/heart/L = H.internal_organs_by_name["heart"]
- if (L && istype(L))
- L.take_damage(100, 0)
- holder.remove_reagent(src.id, FOOD_METABOLISM)
+/datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(dose > 30)
+ M.adjustToxLoss(2 * removed)
+ if(dose > 60 && ishuman(M) && prob(5))
+ var/mob/living/carbon/human/H = M
+ var/obj/item/organ/heart/L = H.internal_organs_by_name["heart"]
+ if (L && istype(L))
+ if(dose < 120)
+ L.take_damage(10 * removed, 0)
+ else
+ L.take_damage(100, 0)
/datum/reagent/ethanol/red_mead
name = "Red Mead"
id = "red_mead"
description = "The true Viking's drink! Even though it has a strange red color."
- color = "#C73C00" // rgb: 199, 60, 0
- boozepwr = 1.5
+ color = "#C73C00"
+ strength = 30
glass_icon_state = "red_meadglass"
glass_name = "glass of red mead"
@@ -1967,26 +1739,22 @@
name = "Sbiten"
id = "sbiten"
description = "A spicy Vodka! Might be a little hot for the little guys!"
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
+ adj_temp = 50
+ targ_temp = 360
glass_icon_state = "sbitenglass"
glass_name = "glass of Sbiten"
glass_desc = "A spicy mix of Vodka and Spice. Very hot."
glass_center_of_mass = list("x"=17, "y"=8)
-/datum/reagent/ethanol/sbiten/on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 360)
- M.bodytemperature = min(360, M.bodytemperature + (50 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
- return
-
/datum/reagent/ethanol/screwdrivercocktail
name = "Screwdriver"
id = "screwdrivercocktail"
description = "Vodka, mixed with plain ol' orange juice. The result is surprisingly delicious."
- color = "#A68310" // rgb: 166, 131, 16
- boozepwr = 3
+ color = "#A68310"
+ strength = 15
glass_icon_state = "screwdriverglass"
glass_name = "glass of Screwdriver"
@@ -1997,35 +1765,21 @@
name = "Silencer"
id = "silencer"
description = "A drink from Mime Heaven."
- nutriment_factor = 1 * FOOD_METABOLISM
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ nutriment_factor = 1
+ color = "#664300"
+ strength = 12
glass_icon_state = "silencerglass"
glass_name = "glass of Silencer"
glass_desc = "A drink from mime Heaven."
glass_center_of_mass = list("x"=16, "y"=9)
-/datum/reagent/ethanol/silencer/on_mob_life(var/mob/living/M as mob)
- if(!data) data = 1
- data++
- M.dizziness +=10
- if(data >= 55 && data <115)
- if (!M.stuttering) M.stuttering = 1
- M.stuttering += 10
- else if(data >= 115 && prob(33))
- M.confused = max(M.confused+15,15)
- ..()
- return
-
/datum/reagent/ethanol/singulo
name = "Singulo"
id = "singulo"
description = "A blue-space beverage!"
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 5
- dizzy_adj = 15
- slurr_adj = 15
+ color = "#2E6671"
+ strength = 10
glass_icon_state = "singulo"
glass_name = "glass of Singulo"
@@ -2036,8 +1790,8 @@
name = "Snow White"
id = "snowwhite"
description = "A cold refreshment"
- color = "#FFFFFF" // rgb: 255, 255, 255
- boozepwr = 1.5
+ color = "#FFFFFF"
+ strength = 30
glass_icon_state = "snowwhite"
glass_name = "glass of Snow White"
@@ -2048,8 +1802,8 @@
name = "Sui Dream"
id = "suidream"
description = "Comprised of: White soda, blue curacao, melon liquor."
- color = "#00A86B" // rgb: 0, 168, 107
- boozepwr = 0.5
+ color = "#00A86B"
+ strength = 100
glass_icon_state = "sdreamglass"
glass_name = "glass of Sui Dream"
@@ -2060,8 +1814,8 @@
name = "Syndicate Bomb"
id = "syndicatebomb"
description = "Tastes like terrorism!"
- color = "#2E6671" // rgb: 46, 102, 113
- boozepwr = 5
+ color = "#2E6671"
+ strength = 10
glass_icon_state = "syndicatebomb"
glass_name = "glass of Syndicate Bomb"
@@ -2072,8 +1826,8 @@
name = "Tequila Sunrise"
id = "tequillasunrise"
description = "Tequila and orange juice. Much like a Screwdriver, only Mexican~"
- color = "#FFE48C" // rgb: 255, 228, 140
- boozepwr = 2
+ color = "#FFE48C"
+ strength = 25
glass_icon_state = "tequillasunriseglass"
glass_name = "glass of Tequilla Sunrise"
@@ -2083,43 +1837,35 @@
name = "Three Mile Island Iced Tea"
id = "threemileisland"
description = "Made for a woman, strong enough for a man."
- color = "#666340" // rgb: 102, 99, 64
- boozepwr = 5
+ color = "#666340"
+ strength = 10
+ druggy = 50
glass_icon_state = "threemileislandglass"
glass_name = "glass of Three Mile Island iced tea"
glass_desc = "A glass of this is sure to prevent a meltdown."
glass_center_of_mass = list("x"=16, "y"=2)
-/datum/reagent/ethanol/threemileisland/on_mob_life(var/mob/living/M as mob)
- M.druggy = max(M.druggy, 50)
- ..()
- return
-
/datum/reagent/ethanol/toxins_special
name = "Toxins Special"
id = "phoronspecial"
description = "This thing is ON FIRE! CALL THE DAMN SHUTTLE!"
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 5
+ color = "#664300"
+ strength = 10
+ adj_temp = 15
+ targ_temp = 330
glass_icon_state = "toxinsspecialglass"
glass_name = "glass of Toxins Special"
glass_desc = "Whoah, this thing is on FIRE"
-/datum/reagent/ethanol/toxins_special/on_mob_life(var/mob/living/M as mob)
- if (M.bodytemperature < 330)
- M.bodytemperature = min(330, M.bodytemperature + (15 * TEMPERATURE_DAMAGE_COEFFICIENT)) //310 is the normal bodytemp. 310.055
- ..()
- return
-
/datum/reagent/ethanol/vodkamartini
name = "Vodka Martini"
id = "vodkamartini"
description = "Vodka with Gin. Not quite how 007 enjoyed it, but still delicious."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 4
+ color = "#664300"
+ strength = 12
glass_icon_state = "martiniglass"
glass_name = "glass of vodka martini"
@@ -2131,9 +1877,7 @@
id = "vodkatonic"
description = "For when a gin and tonic isn't russian enough."
color = "#0064C8" // rgb: 0, 100, 200
- boozepwr = 3
- dizzy_adj = 4
- slurr_adj = 3
+ strength = 15
glass_icon_state = "vodkatonicglass"
glass_name = "glass of vodka and tonic"
@@ -2144,8 +1888,8 @@
name = "White Russian"
id = "whiterussian"
description = "That's just, like, your opinion, man..."
- color = "#A68340" // rgb: 166, 131, 64
- boozepwr = 3
+ color = "#A68340"
+ strength = 15
glass_icon_state = "whiterussianglass"
glass_name = "glass of White Russian"
@@ -2156,8 +1900,8 @@
name = "Whiskey Cola"
id = "whiskeycola"
description = "Whiskey, mixed with cola. Surprisingly refreshing."
- color = "#3E1B00" // rgb: 62, 27, 0
- boozepwr = 2
+ color = "#3E1B00"
+ strength = 25
glass_icon_state = "whiskeycolaglass"
glass_name = "glass of whiskey cola"
@@ -2168,22 +1912,20 @@
name = "Whiskey Soda"
id = "whiskeysoda"
description = "For the more refined griffon."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 3
+ color = "#664300"
+ strength = 15
glass_icon_state = "whiskeysodaglass2"
glass_name = "glass of whiskey soda"
glass_desc = "Ultimate refreshment."
glass_center_of_mass = list("x"=16, "y"=9)
-/datum/reagent/ethanol/specialwhiskey
+/datum/reagent/ethanol/specialwhiskey // I have no idea what this is and where it comes from
name = "Special Blend Whiskey"
id = "specialwhiskey"
description = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything."
- color = "#664300" // rgb: 102, 67, 0
- boozepwr = 2
- dizzy_adj = 4
- slur_start = 30 //amount absorbed after which mob starts slurring
+ color = "#664300"
+ strength = 25
glass_icon_state = "whiskeyglass"
glass_name = "glass of special blend whiskey"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
index 11ea8f23a6f..0009684c309 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Medicine.dm
@@ -1,197 +1,154 @@
+/* General medicine */
+
/datum/reagent/inaprovaline
name = "Inaprovaline"
id = "inaprovaline"
description = "Inaprovaline is a synaptic stimulant and cardiostimulant. Commonly used to stabilize patients."
reagent_state = LIQUID
- color = "#00BFFF" // rgb: 200, 165, 220
- overdose = REAGENTS_OVERDOSE*2
+ color = "#00BFFF"
+ overdose = REAGENTS_OVERDOSE * 2
+ metabolism = REM * 0.5
scannable = 1
-/datum/reagent/inaprovaline/on_mob_life(var/mob/living/M as mob, var/alien)
- if(!M) M = holder.my_atom
-
- if(alien && alien == IS_VOX)
- M.adjustToxLoss(REAGENTS_METABOLISM)
- else
- if(M.losebreath >= 10)
- M.losebreath = max(10, M.losebreath-5)
-
- holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
- return
+/datum/reagent/inaprovaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.add_chemical_effect(CE_STABLE)
+ M.add_chemical_effect(CE_PAINKILLER, 25)
/datum/reagent/bicaridine
name = "Bicaridine"
id = "bicaridine"
description = "Bicaridine is an analgesic medication and can be used to treat blunt trauma."
reagent_state = LIQUID
- color = "#BF0000" // rgb: 200, 165, 220
+ color = "#BF0000"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/bicaridine/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
+/datum/reagent/bicaridine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien != IS_DIONA)
- M.heal_organ_damage(2*REM,0)
- ..()
- return
+ M.heal_organ_damage(6 * removed, 0)
/datum/reagent/kelotane
name = "Kelotane"
id = "kelotane"
description = "Kelotane is a drug used to treat burns."
reagent_state = LIQUID
- color = "#FFA800" // rgb: 200, 165, 220
+ color = "#FFA800"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/kelotane/on_mob_life(var/mob/living/M as mob)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
- //This needs a diona check but if one is added they won't be able to heal burn damage at all.
- M.heal_organ_damage(0,2*REM)
- ..()
- return
+/datum/reagent/kelotane/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.heal_organ_damage(0, 6 * removed)
/datum/reagent/dermaline
name = "Dermaline"
id = "dermaline"
description = "Dermaline is the next step in burn medication. Works twice as good as kelotane and enables the body to restore even the direst heat-damaged tissue."
reagent_state = LIQUID
- color = "#FF8000" // rgb: 200, 165, 220
- overdose = REAGENTS_OVERDOSE/2
+ color = "#FF8000"
+ overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
-/datum/reagent/dermaline/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2.0) //THE GUY IS **DEAD**! BEREFT OF ALL LIFE HE RESTS IN PEACE etc etc. He does NOT metabolise shit anymore, god DAMN
- return
- if(!M) M = holder.my_atom
- if(!alien || alien != IS_DIONA)
- M.heal_organ_damage(0,3*REM)
- ..()
- return
+/datum/reagent/dermaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.heal_organ_damage(0, 12 * removed)
-/datum/reagent/anti_toxin
+/datum/reagent/dylovene
name = "Dylovene"
id = "anti_toxin"
description = "Dylovene is a broad-spectrum antitoxin."
reagent_state = LIQUID
- color = "#00A000" // rgb: 200, 165, 220
+ color = "#00A000"
scannable = 1
-/datum/reagent/anti_toxin/on_mob_life(var/mob/living/M as mob, var/alien)
- if(!M) M = holder.my_atom
- if(!alien || alien != IS_DIONA)
- M.reagents.remove_all_type(/datum/reagent/toxin, 1*REM, 0, 1)
- M.drowsyness = max(M.drowsyness-2*REM, 0)
- M.hallucination = max(0, M.hallucination - 5*REM)
- M.adjustToxLoss(-2*REM)
- ..()
- return
+/datum/reagent/dylovene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.drowsyness = max(0, M.drowsyness - 6 * removed)
+ M.hallucination = max(0, M.hallucination - 9 * removed)
+ M.adjustToxLoss(-4 * removed)
/datum/reagent/dexalin
name = "Dexalin"
id = "dexalin"
description = "Dexalin is used in the treatment of oxygen deprivation."
reagent_state = LIQUID
- color = "#0080FF" // rgb: 200, 165, 220
+ color = "#0080FF"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/dexalin/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2.0)
- return //See above, down and around. --Agouri
- if(!M) M = holder.my_atom
+/datum/reagent/dexalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_VOX)
+ M.adjustToxLoss(removed * 6)
+ else if(alien != IS_DIONA)
+ M.adjustOxyLoss(-15 * removed)
- if(alien && alien == IS_VOX)
- M.adjustToxLoss(2*REM)
- else if(!alien || alien != IS_DIONA)
- M.adjustOxyLoss(-2*REM)
-
- holder.remove_reagent("lexorin", 2*REM)
- ..()
- return
+ holder.remove_reagent("lexorin", 2 * removed)
/datum/reagent/dexalinp
name = "Dexalin Plus"
id = "dexalinp"
description = "Dexalin Plus is used in the treatment of oxygen deprivation. It is highly effective."
reagent_state = LIQUID
- color = "#0040FF" // rgb: 200, 165, 220
- overdose = REAGENTS_OVERDOSE/2
+ color = "#0040FF"
+ overdose = REAGENTS_OVERDOSE * 0.5
scannable = 1
-/datum/reagent/dexalinp/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
+/datum/reagent/dexalinp/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_VOX)
+ M.adjustToxLoss(removed * 9)
+ else if(alien != IS_DIONA)
+ M.adjustOxyLoss(-300 * removed)
- if(alien && alien == IS_VOX)
- M.adjustOxyLoss()
- else if(!alien || alien != IS_DIONA)
- M.adjustOxyLoss(-M.getOxyLoss())
-
- holder.remove_reagent("lexorin", 2*REM)
- ..()
- return
+ holder.remove_reagent("lexorin", 3 * removed)
/datum/reagent/tricordrazine
name = "Tricordrazine"
id = "tricordrazine"
description = "Tricordrazine is a highly potent stimulant, originally derived from cordrazine. Can be used to treat a wide range of injuries."
reagent_state = LIQUID
- color = "#8040FF" // rgb: 200, 165, 220
+ color = "#8040FF"
scannable = 1
-/datum/reagent/tricordrazine/on_mob_life(var/mob/living/M as mob, var/alien)
- if(M.stat == 2.0)
- return
- if(!M) M = holder.my_atom
- if(!alien || alien != IS_DIONA)
- if(M.getOxyLoss()) M.adjustOxyLoss(-1*REM)
- if(M.getBruteLoss() && prob(80)) M.heal_organ_damage(1*REM,0)
- if(M.getFireLoss() && prob(80)) M.heal_organ_damage(0,1*REM)
- if(M.getToxLoss() && prob(80)) M.adjustToxLoss(-1*REM)
- ..()
- return
+/datum/reagent/tricordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien != IS_DIONA)
+ M.adjustOxyLoss(-6 * removed)
+ M.heal_organ_damage(3 * removed, 3 * removed)
+ M.adjustToxLoss(-3 * removed)
/datum/reagent/cryoxadone
name = "Cryoxadone"
id = "cryoxadone"
description = "A chemical mixture with almost magical healing powers. Its main limitation is that the targets body temperature must be under 170K for it to metabolise correctly."
reagent_state = LIQUID
- color = "#8080FF" // rgb: 200, 165, 220
+ color = "#8080FF"
+ metabolism = REM * 0.5
scannable = 1
-/datum/reagent/cryoxadone/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/cryoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.bodytemperature < 170)
- M.adjustCloneLoss(-1)
- M.adjustOxyLoss(-1)
- M.heal_organ_damage(1,1)
- M.adjustToxLoss(-1)
- ..()
- return
+ M.adjustCloneLoss(-10 * removed)
+ M.adjustOxyLoss(-10 * removed)
+ M.heal_organ_damage(10 * removed, 10 * removed)
+ M.adjustToxLoss(-10 * removed)
/datum/reagent/clonexadone
name = "Clonexadone"
id = "clonexadone"
description = "A liquid compound similar to that used in the cloning process. Can be used to 'finish' the cloning process when used in conjunction with a cryo tube."
reagent_state = LIQUID
- color = "#80BFFF" // rgb: 200, 165, 220
+ color = "#80BFFF"
+ metabolism = REM * 0.5
scannable = 1
-/datum/reagent/clonexadone/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/cryoxadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.bodytemperature < 170)
- M.adjustCloneLoss(-3)
- M.adjustOxyLoss(-3)
- M.heal_organ_damage(3,3)
- M.adjustToxLoss(-3)
- ..()
- return
+ M.adjustCloneLoss(-30 * removed)
+ M.adjustOxyLoss(-3 * removed)
+ M.heal_organ_damage(30 * removed, 30 * removed)
+ M.adjustToxLoss(-30 * removed)
+
+/* Painkillers */
/datum/reagent/paracetamol
name = "Paracetamol"
@@ -201,13 +158,14 @@
color = "#C8A5DC"
overdose = 60
scannable = 1
- custom_metabolism = 0.025 // Lasts 10 minutes for 15 units
+ metabolism = 0.02
-/datum/reagent/paracetamol/on_mob_life(var/mob/living/M as mob)
- if (volume > overdose)
- M.hallucination = max(M.hallucination, 2)
+/datum/reagent/paracetamol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.add_chemical_effect(CE_PAINKILLER, 50)
+
+/datum/reagent/paracetamol/overdose(var/mob/living/carbon/M, var/alien)
..()
- return
+ M.hallucination = max(M.hallucination, 2)
/datum/reagent/tramadol
name = "Tramadol"
@@ -217,13 +175,14 @@
color = "#CB68FC"
overdose = 30
scannable = 1
- custom_metabolism = 0.025 // Lasts 10 minutes for 15 units
+ metabolism = 0.02
-/datum/reagent/tramadol/on_mob_life(var/mob/living/M as mob)
- if (volume > overdose)
- M.hallucination = max(M.hallucination, 2)
+/datum/reagent/tramadol/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.add_chemical_effect(CE_PAINKILLER, 80)
+
+/datum/reagent/tramadol/overdose(var/mob/living/carbon/M, var/alien)
..()
- return
+ M.hallucination = max(M.hallucination, 2)
/datum/reagent/oxycodone
name = "Oxycodone"
@@ -232,106 +191,101 @@
reagent_state = LIQUID
color = "#800080"
overdose = 20
- custom_metabolism = 0.25 // Lasts 10 minutes for 15 units
+ metabolism = 0.02
-/datum/reagent/oxycodone/on_mob_life(var/mob/living/M as mob)
- if (volume > overdose)
- M.druggy = max(M.druggy, 10)
- M.hallucination = max(M.hallucination, 3)
+/datum/reagent/oxycodone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.add_chemical_effect(CE_PAINKILLER, 200)
+
+/datum/reagent/oxycodone/overdose(var/mob/living/carbon/M, var/alien)
..()
- return
+ M.druggy = max(M.druggy, 10)
+ M.hallucination = max(M.hallucination, 3)
+
+/* Other medicine */
/datum/reagent/synaptizine
name = "Synaptizine"
id = "synaptizine"
description = "Synaptizine is used to treat various diseases."
reagent_state = LIQUID
- color = "#99CCFF" // rgb: 200, 165, 220
- custom_metabolism = 0.01
+ color = "#99CCFF"
+ metabolism = REM * 0.05
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/synaptizine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.drowsyness = max(M.drowsyness-5, 0)
+/datum/reagent/synaptizine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.drowsyness = max(M.drowsyness - 5, 0)
M.AdjustParalysis(-1)
M.AdjustStunned(-1)
M.AdjustWeakened(-1)
holder.remove_reagent("mindbreaker", 5)
M.hallucination = max(0, M.hallucination - 10)
- if(prob(60)) M.adjustToxLoss(1)
- ..()
- return
+ M.adjustToxLoss(5 * removed) // It used to be incredibly deadly due to an oversight. Not anymore!
+ M.add_chemical_effect(CE_PAINKILLER, 40)
/datum/reagent/alkysine
name = "Alkysine"
id = "alkysine"
description = "Alkysine is a drug used to lessen the damage to neurological tissue after a catastrophic injury. Can heal brain tissue."
reagent_state = LIQUID
- color = "#FFFF66" // rgb: 200, 165, 220
- custom_metabolism = 0.05
+ color = "#FFFF66"
+ metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/alkysine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustBrainLoss(-3*REM)
- ..()
- return
+
+/datum/reagent/alkysine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.adjustBrainLoss(-30 * removed)
+ M.add_chemical_effect(CE_PAINKILLER, 10)
/datum/reagent/imidazoline
name = "Imidazoline"
id = "imidazoline"
description = "Heals eye damage"
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/imidazoline/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.eye_blurry = max(M.eye_blurry-5 , 0)
- M.eye_blind = max(M.eye_blind-5 , 0)
+/datum/reagent/imidazoline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.eye_blurry = max(M.eye_blurry - 5, 0)
+ M.eye_blind = max(M.eye_blind - 5, 0)
if(ishuman(M))
var/mob/living/carbon/human/H = M
var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"]
if(E && istype(E))
if(E.damage > 0)
- E.damage = max(E.damage - 1, 0)
- ..()
- return
+ E.damage = max(E.damage - 5 * removed, 0)
/datum/reagent/peridaxon
name = "Peridaxon"
id = "peridaxon"
description = "Used to encourage recovery of internal organs and nervous systems. Medicate cautiously."
reagent_state = LIQUID
- color = "#561EC3" // rgb: 200, 165, 220
+ color = "#561EC3"
overdose = 10
scannable = 1
-/datum/reagent/peridaxon/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/peridaxon/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
var/mob/living/carbon/human/H = M
- //Peridaxon heals only non-robotic organs
for(var/obj/item/organ/I in H.internal_organs)
- if((I.damage > 0) && (I.robotic != 2))
- I.damage = max(I.damage - 0.20, 0)
- ..()
- return
+ if((I.damage > 0) && (I.robotic != 2)) //Peridaxon heals only non-robotic organs
+ I.damage = max(I.damage - removed, 0)
/datum/reagent/ryetalyn
name = "Ryetalyn"
id = "ryetalyn"
description = "Ryetalyn can cure all genetic abnomalities via a catalytic process."
reagent_state = SOLID
- color = "#004000" // rgb: 200, 165, 220
+ color = "#004000"
overdose = REAGENTS_OVERDOSE
-/datum/reagent/ryetalyn/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
-
+/datum/reagent/ryetalyn/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
var/needs_update = M.mutations.len > 0
M.mutations = list()
@@ -343,261 +297,197 @@
var/mob/living/carbon/human/H = M
H.update_mutations()
- ..()
- return
-
/datum/reagent/hyperzine
name = "Hyperzine"
id = "hyperzine"
description = "Hyperzine is a highly effective, long lasting, muscle stimulant."
reagent_state = LIQUID
- color = "#FF3300" // rgb: 200, 165, 220
- custom_metabolism = 0.03
- overdose = REAGENTS_OVERDOSE/2
+ color = "#FF3300"
+ metabolism = REM * 0.15
+ overdose = REAGENTS_OVERDOSE * 0.5
-/datum/reagent/hyperzine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(prob(5)) M.emote(pick("twitch","blink_r","shiver"))
- ..()
- return
+/datum/reagent/hyperzine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(prob(5))
+ M.emote(pick("twitch", "blink_r", "shiver"))
+ M.add_chemical_effect(CE_SPEEDBOOST, 1)
-/datum/reagent/ethylredoxrazine // FUCK YOU, ALCOHOL
+/datum/reagent/ethylredoxrazine
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
description = "A powerful oxidizer that reacts with ethanol."
reagent_state = SOLID
- color = "#605048" // rgb: 96, 80, 72
+ color = "#605048"
overdose = REAGENTS_OVERDOSE
-/datum/reagent/ethylredoxrazine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/ethylredoxrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
M.dizziness = 0
M.drowsyness = 0
M.stuttering = 0
M.confused = 0
- M.reagents.remove_all_type(/datum/reagent/ethanol, 1*REM, 0, 1)
- ..()
- return
+ if(M.ingested)
+ for(var/datum/reagent/R in M.ingested.reagent_list)
+ if(istype(R, /datum/reagent/ethanol))
+ R.dose = max(R.dose - removed * 5, 0)
/datum/reagent/hyronalin
name = "Hyronalin"
id = "hyronalin"
description = "Hyronalin is a medicinal drug used to counter the effect of radiation poisoning."
reagent_state = LIQUID
- color = "#408000" // rgb: 200, 165, 220
- custom_metabolism = 0.05
+ color = "#408000"
+ metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/hyronalin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.radiation = max(M.radiation-3*REM,0)
- ..()
- return
+/datum/reagent/hyronalin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.radiation = max(M.radiation - 30 * removed, 0)
/datum/reagent/arithrazine
name = "Arithrazine"
id = "arithrazine"
description = "Arithrazine is an unstable medication used for the most extreme cases of radiation poisoning."
reagent_state = LIQUID
- color = "#008000" // rgb: 200, 165, 220
- custom_metabolism = 0.05
+ color = "#008000"
+ metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
+ scannable = 1
-/datum/reagent/arithrazine/on_mob_life(var/mob/living/M as mob)
- if(M.stat == 2.0)
- return //See above, down and around. --Agouri
- if(!M) M = holder.my_atom
- M.radiation = max(M.radiation-7*REM,0)
- M.adjustToxLoss(-1*REM)
- if(prob(15))
- M.take_organ_damage(1, 0)
- ..()
- return
+/datum/reagent/arithrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.radiation = max(M.radiation - 70 * removed, 0)
+ M.adjustToxLoss(-10 * removed)
+ if(prob(60))
+ M.take_organ_damage(4 * removed, 0)
/datum/reagent/spaceacillin
name = "Spaceacillin"
id = "spaceacillin"
description = "An all-purpose antiviral agent."
reagent_state = LIQUID
- color = "#C1C1C1" // rgb: 200, 165, 220
- custom_metabolism = 0.01
+ color = "#C1C1C1"
+ metabolism = REM * 0.05
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/spaceacillin/on_mob_life(var/mob/living/M as mob)
- ..()
- return
-
/datum/reagent/sterilizine
name = "Sterilizine"
id = "sterilizine"
description = "Sterilizes wounds in preparation for surgery."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
+ touch_met = 5
- //makes you squeaky clean
-/datum/reagent/sterilizine/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- if (method == TOUCH)
- M.germ_level -= min(volume*20, M.germ_level)
+/datum/reagent/sterilizine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ M.germ_level -= min(removed*20, M.germ_level)
-/datum/reagent/sterilizine/reaction_obj(var/obj/O, var/volume)
+/datum/reagent/sterilizine/touch_obj(var/obj/O)
O.germ_level -= min(volume*20, O.germ_level)
-/datum/reagent/sterilizine/reaction_turf(var/turf/T, var/volume)
+/datum/reagent/sterilizine/touch_turf(var/turf/T)
T.germ_level -= min(volume*20, T.germ_level)
-/* reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- src = null
- if (method==TOUCH)
- if(istype(M, /mob/living/carbon/human))
- if(M.health >= -100 && M.health <= 0)
- M.crit_op_stage = 0.0
- if (method==INGEST)
- usr << "Well, that was stupid."
- M.adjustToxLoss(3)
- return
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.radiation += 3
- ..()
- return
-*/
-
/datum/reagent/leporazine
name = "Leporazine"
id = "leporazine"
description = "Leporazine can be use to stabilize an individuals body temperature."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/leporazine/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/leporazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(M.bodytemperature > 310)
M.bodytemperature = max(310, M.bodytemperature - (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
else if(M.bodytemperature < 311)
M.bodytemperature = min(310, M.bodytemperature + (40 * TEMPERATURE_DAMAGE_COEFFICIENT))
- ..()
- return
+
+/* Antidepressants */
#define ANTIDEPRESSANT_MESSAGE_DELAY 5*60*10
-/datum/reagent/antidepressant/methylphenidate
+/datum/reagent/methylphenidate
name = "Methylphenidate"
id = "methylphenidate"
description = "Improves the ability to concentrate."
reagent_state = LIQUID
color = "#BF80BF"
- custom_metabolism = 0.01
+ metabolism = 0.01
data = 0
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(src.volume <= 0.1) if(data != -1)
- data = -1
- M << "\red You lose focus.."
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- M << "\blue Your mind feels focused and undivided."
- ..()
+/datum/reagent/methylphenidate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
return
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ M << "You lose focus..."
+ else
+ if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
+ data = world.time
+ M << "Your mind feels focused and undivided."
-/datum/chemical_reaction/methylphenidate
- name = "Methylphenidate"
- id = "methylphenidate"
- result = "methylphenidate"
- required_reagents = list("mindbreaker" = 1, "hydrogen" = 1)
- result_amount = 3
-
-/datum/reagent/antidepressant/citalopram
+/datum/reagent/citalopram
name = "Citalopram"
id = "citalopram"
description = "Stabilizes the mind a little."
reagent_state = LIQUID
color = "#FF80FF"
- custom_metabolism = 0.01
+ metabolism = 0.01
data = 0
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(src.volume <= 0.1) if(data != -1)
- data = -1
- M << "\red Your mind feels a little less stable.."
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- M << "\blue Your mind feels stable.. a little stable."
- ..()
+/datum/reagent/citalopram/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
return
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ M << "Your mind feels a little less stable..."
+ else
+ if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
+ data = world.time
+ M << "Your mind feels stable... a little stable."
-/datum/chemical_reaction/citalopram
- name = "Citalopram"
- id = "citalopram"
- result = "citalopram"
- required_reagents = list("mindbreaker" = 1, "carbon" = 1)
- result_amount = 3
-
-
-/datum/reagent/antidepressant/paroxetine
+/datum/reagent/paroxetine
name = "Paroxetine"
id = "paroxetine"
description = "Stabilizes the mind greatly, but has a chance of adverse effects."
reagent_state = LIQUID
color = "#FF80BF"
- custom_metabolism = 0.01
+ metabolism = 0.01
data = 0
- on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(src.volume <= 0.1) if(data != -1)
- data = -1
- M << "\red Your mind feels much less stable.."
- else
- if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
- data = world.time
- if(prob(90))
- M << "\blue Your mind feels much more stable."
- else
- M << "\red Your mind breaks apart.."
- M.hallucination += 200
- ..()
+/datum/reagent/paroxetine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
return
-
-/datum/chemical_reaction/paroxetine
- name = "Paroxetine"
- id = "paroxetine"
- result = "paroxetine"
- required_reagents = list("mindbreaker" = 1, "oxygen" = 1, "inaprovaline" = 1)
- result_amount = 3
+ if(volume <= 0.1 && data != -1)
+ data = -1
+ M << "Your mind feels much less stable..."
+ else
+ if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY)
+ data = world.time
+ if(prob(90))
+ M << "Your mind feels much more stable."
+ else
+ M << "Your mind breaks apart..."
+ M.hallucination += 200
/datum/reagent/rezadone
name = "Rezadone"
id = "rezadone"
- description = "A powder derived from fish toxin, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
+ description = "A powder with almost magical properties, this substance can effectively treat genetic damage in humanoids, though excessive consumption has side effects."
reagent_state = SOLID
- color = "#669900" // rgb: 102, 153, 0
+ color = "#669900"
overdose = REAGENTS_OVERDOSE
scannable = 1
-/datum/reagent/rezadone/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- switch(data)
- if(1 to 15)
- M.adjustCloneLoss(-1)
- M.heal_organ_damage(1,1)
- if(15 to 35)
- M.adjustCloneLoss(-2)
- M.heal_organ_damage(2,1)
- M.status_flags &= ~DISFIGURED
- if(35 to INFINITY)
- M.adjustToxLoss(1)
- M.make_dizzy(5)
- M.make_jittery(5)
-
- ..()
- return
+/datum/reagent/rezadone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustCloneLoss(-20 * removed)
+ M.adjustOxyLoss(-2 * removed)
+ M.heal_organ_damage(20 * removed, 20 * removed)
+ M.adjustToxLoss(-20 * removed)
+ if(dose > 3)
+ M.status_flags &= ~DISFIGURED
+ if(dose > 10)
+ M.make_dizzy(5)
+ M.make_jittery(5)
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
index 847c3ce4580..51c86f1b524 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Other.dm
@@ -1,3 +1,5 @@
+/* Paint and crayons */
+
/datum/reagent/crayon_dust
name = "Crayon dust"
id = "crayon_dust"
@@ -52,32 +54,32 @@
description = "This paint will stick to almost any object."
reagent_state = LIQUID
color = "#808080"
- overdose = 15
+ overdose = REAGENTS_OVERDOSE * 0.5
color_weight = 20
-/datum/reagent/paint/New()
- ..()
- data = color
-
-/datum/reagent/paint/reaction_turf(var/turf/T, var/volume)
- ..()
+/datum/reagent/paint/touch_turf(var/turf/T)
if(istype(T) && !istype(T, /turf/space))
T.color = color
-/datum/reagent/paint/reaction_obj(var/obj/O, var/volume)
- ..()
- if(istype(O,/obj))
+/datum/reagent/paint/touch_obj(var/obj/O)
+ if(istype(O))
O.color = color
-/datum/reagent/paint/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- ..()
- if(istype(M,/mob) && !istype(M,/mob/dead))
- //painting ghosts: not allowed
+/datum/reagent/paint/touch_mob(var/mob/M)
+ if(istype(M) && !istype(M, /mob/dead)) //painting ghosts: not allowed
M.color = color
-/datum/reagent/paint/on_merge(var/newdata, var/newamount)
- if(!data || !newdata)
- return
+/datum/reagent/paint/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ M.color = color
+
+/datum/reagent/paint/get_data()
+ return color
+
+/datum/reagent/paint/initialize_data(var/newdata)
+ color = newdata
+ return
+
+/datum/reagent/paint/mix_data(var/newdata, var/newamount)
var/list/colors = list(0, 0, 0, 0)
var/tot_w = 0
@@ -101,23 +103,26 @@
tot_w += newamount
color = rgb(colors[1] / tot_w, colors[2] / tot_w, colors[3] / tot_w, colors[4] / tot_w)
- data = color
return
+/* Things that didn't fit anywhere else */
+
/datum/reagent/adminordrazine //An OP chemical for admins
name = "Adminordrazine"
id = "adminordrazine"
description = "It's magic. We don't have to explain it."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
+ affects_dead = 1 //This can even heal dead people.
glass_icon_state = "golden_cup"
glass_name = "golden cup"
glass_desc = "It's magic. We don't have to explain it."
-/datum/reagent/adminordrazine/on_mob_life(var/mob/living/carbon/M as mob)
- if(!M) M = holder.my_atom ///This can even heal dead people.
- M.reagents.remove_all_type(/datum/reagent/toxin, 5*REM, 0, 1)
+/datum/reagent/adminordrazine/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ affect_blood(M, alien, removed)
+
+/datum/reagent/adminordrazine/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
M.setCloneLoss(0)
M.setOxyLoss(0)
M.radiation = 0
@@ -144,38 +149,35 @@
D.stage--
if(D.stage < 1)
D.cure()
- ..()
- return
/datum/reagent/gold
name = "Gold"
id = "gold"
description = "Gold is a dense, soft, shiny metal and the most malleable and ductile metal known."
reagent_state = SOLID
- color = "#F7C430" // rgb: 247, 196, 48
+ color = "#F7C430"
/datum/reagent/silver
name = "Silver"
id = "silver"
description = "A soft, white, lustrous transition metal, it has the highest electrical conductivity of any element and the highest thermal conductivity of any metal."
reagent_state = SOLID
- color = "#D0D0D0" // rgb: 208, 208, 208
+ color = "#D0D0D0"
/datum/reagent/uranium
name ="Uranium"
id = "uranium"
description = "A silvery-white metallic chemical element in the actinide series, weakly radioactive."
reagent_state = SOLID
- color = "#B8B8C0" // rgb: 184, 184, 192
+ color = "#B8B8C0"
-/datum/reagent/uranium/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.apply_effect(1,IRRADIATE,0)
- ..()
- return
+/datum/reagent/uranium/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ affect_ingest(M, alien, removed)
-/datum/reagent/uranium/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/uranium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.apply_effect(5 * removed, IRRADIATE, 0)
+
+/datum/reagent/uranium/touch_turf(var/turf/T)
if(volume >= 3)
if(!istype(T, /turf/space))
var/obj/effect/decal/cleanable/greenglow/glow = locate(/obj/effect/decal/cleanable/greenglow, T)
@@ -188,180 +190,166 @@
id = "adrenaline"
description = "Adrenaline is a hormone used as a drug to treat cardiac arrest and other cardiac dysrhythmias resulting in diminished or absent cardiac output."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
-/datum/reagent/adrenaline/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/adrenaline/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
M.SetParalysis(0)
M.SetWeakened(0)
M.adjustToxLoss(rand(3))
- ..()
- return
/datum/reagent/water/holywater
name = "Holy Water"
id = "holywater"
description = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
- color = "#E0E8EF" // rgb: 224, 232, 239
+ color = "#E0E8EF"
glass_icon_state = "glass_clear"
glass_name = "glass of holy water"
glass_desc = "An ashen-obsidian-water mix, this solution will alter certain sections of the brain's rationality."
-/datum/reagent/water/holywater/on_mob_life(var/mob/living/M as mob)
- if(ishuman(M))
+/datum/reagent/water/holywater/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(ishuman(M)) // Any location
if(M.mind && cult.is_antagonist(M.mind) && prob(10))
cult.remove_antagonist(M.mind)
- holder.remove_reagent(src.id, 10 * REAGENTS_METABOLISM) //high metabolism to prevent extended uncult rolls.
- return
-/datum/reagent/water/holywater/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/water/holywater/touch_turf(var/turf/T)
if(volume >= 5)
T.holy = 1
return
-/datum/reagent/ammonia
- name = "Ammonia"
- id = "ammonia"
- description = "A caustic substance commonly used in fertilizer or household cleaners."
- reagent_state = GAS
- color = "#404030" // rgb: 64, 64, 48
-
/datum/reagent/diethylamine
name = "Diethylamine"
id = "diethylamine"
description = "A secondary amine, mildly corrosive."
reagent_state = LIQUID
- color = "#604030" // rgb: 96, 64, 48
+ color = "#604030"
-/datum/reagent/fluorosurfactant//foam precursor
- name = "Fluorosurfactant"
- id = "fluorosurfactant"
- description = "A perfluoronated sulfonic acid that forms a foam when mixed with water."
+/datum/reagent/surfactant // Foam precursor
+ name = "Azosurfactant"
+ id = "surfactant"
+ description = "A isocyanate liquid that forms a foam when mixed with water."
reagent_state = LIQUID
- color = "#9E6B38" // rgb: 158, 107, 56
+ color = "#9E6B38"
-/datum/reagent/foaming_agent// Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
+/datum/reagent/foaming_agent // Metal foaming agent. This is lithium hydride. Add other recipes (e.g. LiH + H2O -> LiOH + H2) eventually.
name = "Foaming agent"
id = "foaming_agent"
description = "A agent that yields metallic foam when mixed with light metal and a strong acid."
reagent_state = SOLID
- color = "#664B63" // rgb: 102, 75, 99
+ color = "#664B63"
/datum/reagent/thermite
name = "Thermite"
id = "thermite"
description = "Thermite produces an aluminothermic reaction known as a thermite reaction. Can be used to melt walls."
reagent_state = SOLID
- color = "#673910" // rgb: 103, 57, 16
+ color = "#673910"
+ touch_met = 50
-/datum/reagent/thermite/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/thermite/touch_turf(var/turf/T)
if(volume >= 5)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
W.thermite = 1
W.overlays += image('icons/effects/effects.dmi',icon_state = "#673910")
+ remove_self(5)
return
-/datum/reagent/thermite/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustFireLoss(1)
- ..()
+/datum/reagent/thermite/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjust_fire_stacks(removed * 0.2)
return
+/datum/reagent/thermite/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.adjustFireLoss(3 * removed)
+
/datum/reagent/space_cleaner
name = "Space cleaner"
id = "cleaner"
description = "A compound used to clean things. Now with 50% more sodium hypochlorite!"
reagent_state = LIQUID
- color = "#A5F0EE" // rgb: 165, 240, 238
- overdose = REAGENTS_OVERDOSE
+ color = "#A5F0EE"
+ touch_met = 50
-/datum/reagent/space_cleaner/reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/effect/decal/cleanable))
+/datum/reagent/space_cleaner/touch_obj(var/obj/O)
+ if(istype(O, /obj/effect/decal/cleanable))
qdel(O)
else
- if(O)
- O.clean_blood()
+ O.clean_blood()
-/datum/reagent/space_cleaner/reaction_turf(var/turf/T, var/volume)
+/datum/reagent/space_cleaner/touch_turf(var/turf/T)
if(volume >= 1)
if(istype(T, /turf/simulated))
var/turf/simulated/S = T
S.dirt = 0
T.clean_blood()
- for(var/obj/effect/decal/cleanable/C in T.contents)
- src.reaction_obj(C, volume)
- qdel(C)
for(var/mob/living/carbon/slime/M in T)
- M.adjustToxLoss(rand(5,10))
+ M.adjustToxLoss(rand(5, 10))
-/datum/reagent/space_cleaner/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(C.r_hand)
- C.r_hand.clean_blood()
- if(C.l_hand)
- C.l_hand.clean_blood()
- if(C.wear_mask)
- if(C.wear_mask.clean_blood())
- C.update_inv_wear_mask(0)
- if(ishuman(M))
- var/mob/living/carbon/human/H = C
- if(H.head)
- if(H.head.clean_blood())
- H.update_inv_head(0)
- if(H.wear_suit)
- if(H.wear_suit.clean_blood())
- H.update_inv_wear_suit(0)
- else if(H.w_uniform)
- if(H.w_uniform.clean_blood())
- H.update_inv_w_uniform(0)
- if(H.shoes)
- if(H.shoes.clean_blood())
- H.update_inv_shoes(0)
- else
- H.clean_blood(1)
- return
- M.clean_blood()
+/datum/reagent/space_cleaner/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(M.r_hand)
+ M.r_hand.clean_blood()
+ if(M.l_hand)
+ M.l_hand.clean_blood()
+ if(M.wear_mask)
+ if(M.wear_mask.clean_blood())
+ M.update_inv_wear_mask(0)
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.head)
+ if(H.head.clean_blood())
+ H.update_inv_head(0)
+ if(H.wear_suit)
+ if(H.wear_suit.clean_blood())
+ H.update_inv_wear_suit(0)
+ else if(H.w_uniform)
+ if(H.w_uniform.clean_blood())
+ H.update_inv_w_uniform(0)
+ if(H.shoes)
+ if(H.shoes.clean_blood())
+ H.update_inv_shoes(0)
+ else
+ H.clean_blood(1)
+ return
+ M.clean_blood()
-/datum/reagent/lube
+/datum/reagent/lube // TODO: spraying on borgs speeds them up
name = "Space Lube"
id = "lube"
description = "Lubricant is a substance introduced between two moving surfaces to reduce the friction and wear between them. giggity."
reagent_state = LIQUID
- color = "#009CA8" // rgb: 0, 156, 168
- overdose = REAGENTS_OVERDOSE
+ color = "#009CA8"
-/datum/reagent/lube/reaction_turf(var/turf/simulated/T, var/volume)
- if (!istype(T)) return
- src = null
+/datum/reagent/lube/touch_turf(var/turf/simulated/T)
+ if(!istype(T))
+ return
if(volume >= 1)
- if(T.wet >= 2) return
+ if(T.wet >= 2)
+ return
T.wet = 2
spawn(800)
- if (!istype(T)) return
+ if(!T || !istype(T))
+ return
T.wet = 0
if(T.wet_overlay)
T.overlays -= T.wet_overlay
T.wet_overlay = null
- return
/datum/reagent/silicate
name = "Silicate"
id = "silicate"
description = "A compound that can be used to reinforce glass."
reagent_state = LIQUID
- color = "#C7FFFF" // rgb: 199, 255, 255
+ color = "#C7FFFF"
-/datum/reagent/silicate/reaction_obj(var/obj/O, var/volume)
- src = null
- if(istype(O,/obj/structure/window))
+/datum/reagent/silicate/touch_obj(var/obj/O)
+ if(istype(O, /obj/structure/window))
var/obj/structure/window/W = O
W.apply_silicate(volume)
+ remove_self(volume)
return
/datum/reagent/glycerol
@@ -369,21 +357,24 @@
id = "glycerol"
description = "Glycerol is a simple polyol compound. Glycerol is sweet-tasting and of low toxicity."
reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
-
- custom_metabolism = 0.01
+ color = "#808080"
/datum/reagent/nitroglycerin
name = "Nitroglycerin"
id = "nitroglycerin"
description = "Nitroglycerin is a heavy, colorless, oily, explosive liquid obtained by nitrating glycerol."
reagent_state = LIQUID
- color = "#808080" // rgb: 128, 128, 128
+ color = "#808080"
- custom_metabolism = 0.01
+/datum/reagent/coolant
+ name = "Coolant"
+ id = "coolant"
+ description = "Industrial cooling substance."
+ reagent_state = LIQUID
+ color = "#C8A5DC"
/datum/reagent/ultraglue
name = "Ultra Glue"
id = "glue"
description = "An extremely powerful bonding agent."
- color = "#FFFFCC" // rgb: 255, 255, 204
+ color = "#FFFFCC"
diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
index bea079a7555..9f8e05a20b6 100644
--- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
+++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Toxins.dm
@@ -1,49 +1,41 @@
+/* Toxins, poisons, venoms */
+
/datum/reagent/toxin
name = "Toxin"
id = "toxin"
description = "A toxic chemical."
reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
- var/toxpwr = 0.7 // Toxins are really weak, but without being treated, last very long.
- custom_metabolism = 0.1
+ color = "#CF3600"
+ metabolism = REM * 0.05 // 0.01 by default. They last a while and slowly kill you.
+ var/strength = 4 // How much damage it deals per unit
-/datum/reagent/toxin/on_mob_life(var/mob/living/M as mob,var/alien)
- if(!M) M = holder.my_atom
- if(toxpwr)
- M.adjustToxLoss(toxpwr*REM)
- if(alien) ..() // Kind of a catch-all for aliens without the liver. Because this does not metabolize 'naturally', only removed by the liver.
- return
+/datum/reagent/toxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(strength && alien != IS_DIONA)
+ M.adjustToxLoss(strength * removed)
-/datum/reagent/plasticide
+/datum/reagent/toxin/plasticide
name = "Plasticide"
id = "plasticide"
description = "Liquid plastic, do not eat."
reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
- custom_metabolism = 0.01
-
-/datum/reagent/plasticide/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- // Toxins are really weak, but without being treated, last very long.
- M.adjustToxLoss(0.2)
- ..()
- return
+ color = "#CF3600"
+ strength = 5
/datum/reagent/toxin/amatoxin
name = "Amatoxin"
id = "amatoxin"
description = "A powerful poison derived from certain species of mushroom."
reagent_state = LIQUID
- color = "#792300" // rgb: 121, 35, 0
- toxpwr = 1
+ color = "#792300"
+ strength = 10
/datum/reagent/toxin/carpotoxin
name = "Carpotoxin"
id = "carpotoxin"
description = "A deadly neurotoxin produced by the dreaded space carp."
reagent_state = LIQUID
- color = "#003333" // rgb: 0, 51, 51
- toxpwr = 2
+ color = "#003333"
+ strength = 10
/datum/reagent/toxin/phoron
name = "Phoron"
@@ -51,82 +43,65 @@
description = "Phoron in its liquid form."
reagent_state = LIQUID
color = "#9D14DB"
- toxpwr = 3
+ strength = 30
+ touch_met = 5
-/datum/reagent/toxin/phoron/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- holder.remove_reagent("inaprovaline", 2*REM)
+/datum/reagent/toxin/phoron/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ M.adjust_fire_stacks(removed / 5)
+ if(prob(50))
+ M.pl_effects()
-/datum/reagent/toxin/phoron/reaction_obj(var/obj/O, var/volume)
- src = null
- /*if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/egg/slime))
- var/obj/item/weapon/reagent_containers/food/snacks/egg/slime/egg = O
- if (egg.grown)
- egg.Hatch()*/
- if((!O) || (!volume)) return 0
- var/turf/the_turf = get_turf(O)
- the_turf.assume_gas("volatile_fuel", volume, T20C)
-
-/datum/reagent/toxin/phoron/reaction_turf(var/turf/T, var/volume)
- src = null
+/datum/reagent/toxin/phoron/touch_turf(var/turf/simulated/T)
+ if(!istype(T))
+ return
T.assume_gas("volatile_fuel", volume, T20C)
- return
-
-/datum/reagent/toxin/phoron/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)//Splashing people with plasma is stronger than fuel!
- if(!istype(M, /mob/living))
- return
- if(method == TOUCH)
- M.adjust_fire_stacks(volume / 5)
- return
+ remove_self(volume)
/datum/reagent/toxin/cyanide //Fast and Lethal
name = "Cyanide"
id = "cyanide"
description = "A highly toxic chemical."
reagent_state = LIQUID
- color = "#CF3600" // rgb: 207, 54, 0
- toxpwr = 4
- custom_metabolism = 0.4
+ color = "#CF3600"
+ strength = 20
+ metabolism = REM * 2
-/datum/reagent/toxin/cyanide/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.adjustOxyLoss(4*REM)
- M.sleeping += 1
+/datum/reagent/toxin/cyanide/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
..()
- return
+ M.adjustOxyLoss(20 * removed)
+ M.sleeping += 1
/datum/reagent/toxin/potassium_chloride
name = "Potassium Chloride"
id = "potassium_chloride"
description = "A delicious salt that stops the heart when injected into cardiac muscle."
reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255,255,255
- toxpwr = 0
- overdose = 30
+ color = "#FFFFFF"
+ strength = 0
+ overdose = REAGENTS_OVERDOSE
-/datum/reagent/toxin/potassium_chloride/on_mob_life(var/mob/living/carbon/M as mob)
- var/mob/living/carbon/human/H = M
- if(H.stat != 1)
- if (volume >= overdose)
+/datum/reagent/toxin/potassium_chloride/overdose(var/mob/living/carbon/M, var/alien)
+ ..()
+ if(ishuman(M))
+ var/mob/living/carbon/human/H = M
+ if(H.stat != 1)
if(H.losebreath >= 10)
- H.losebreath = max(10, H.losebreath-10)
+ H.losebreath = max(10, H.losebreath - 10)
H.adjustOxyLoss(2)
H.Weaken(10)
- ..()
- return
/datum/reagent/toxin/potassium_chlorophoride
name = "Potassium Chlorophoride"
id = "potassium_chlorophoride"
description = "A specific chemical based on Potassium Chloride to stop the heart for surgery. Not safe to eat!"
reagent_state = SOLID
- color = "#FFFFFF" // rgb: 255,255,255
- toxpwr = 2
+ color = "#FFFFFF"
+ strength = 10
overdose = 20
-/datum/reagent/toxin/potassium_chlorophoride/on_mob_life(var/mob/living/carbon/M as mob)
+/datum/reagent/toxin/potassium_chlorophoride/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
if(ishuman(M))
var/mob/living/carbon/human/H = M
if(H.stat != 1)
@@ -134,41 +109,39 @@
H.losebreath = max(10, M.losebreath-10)
H.adjustOxyLoss(2)
H.Weaken(10)
- ..()
- return
/datum/reagent/toxin/zombiepowder
name = "Zombie Powder"
id = "zombiepowder"
description = "A strong neurotoxin that puts the subject into a death-like state."
reagent_state = SOLID
- color = "#669900" // rgb: 102, 153, 0
- toxpwr = 0.5
+ color = "#669900"
+ metabolism = REM
+ strength = 3
-/datum/reagent/toxin/zombiepowder/on_mob_life(var/mob/living/carbon/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/toxin/zombiepowder/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ return
M.status_flags |= FAKEDEATH
- M.adjustOxyLoss(0.5*REM)
+ M.adjustOxyLoss(3 * removed)
M.Weaken(10)
M.silent = max(M.silent, 10)
M.tod = worldtime2text()
- ..()
- return
/datum/reagent/toxin/zombiepowder/Destroy()
- if(holder && ismob(holder.my_atom))
+ if(holder && holder.my_atom && ismob(holder.my_atom))
var/mob/M = holder.my_atom
M.status_flags &= ~FAKEDEATH
..()
-//Reagents used for plant fertilizers.
-/datum/reagent/toxin/fertilizer
+/datum/reagent/toxin/fertilizer //Reagents used for plant fertilizers.
name = "fertilizer"
id = "fertilizer"
description = "A chemical mix good for growing plants with."
reagent_state = LIQUID
- toxpwr = 0.2 //It's not THAT poisonous.
- color = "#664330" // rgb: 102, 67, 48
+ strength = 0.5 // It's not THAT poisonous.
+ color = "#664330"
/datum/reagent/toxin/fertilizer/eznutrient
name = "EZ Nutrient"
@@ -187,242 +160,200 @@
id = "plantbgone"
description = "A harmful toxic mixture to kill plantlife. Do not ingest!"
reagent_state = LIQUID
- color = "#49002E" // rgb: 73, 0, 46
- toxpwr = 1
+ color = "#49002E"
+ strength = 4
- // Clear off wallrot fungi
-/datum/reagent/toxin/plantbgone/reaction_turf(var/turf/T, var/volume)
+/datum/reagent/toxin/plantbgone/touch_turf(var/turf/T)
if(istype(T, /turf/simulated/wall))
var/turf/simulated/wall/W = T
- if(W.rotting)
- W.rotting = 0
- for(var/obj/effect/E in W) if(E.name == "Wallrot") qdel(E)
+ if(locate(/obj/effect/overlay/wallrot) in W)
+ for(var/obj/effect/overlay/wallrot/E in W)
+ qdel(E)
+ W.visible_message("The fungi are completely dissolved by the solution!")
- for(var/mob/O in viewers(W, null))
- O.show_message(text("\blue The fungi are completely dissolved by the solution!"), 1)
-
-/datum/reagent/toxin/plantbgone/reaction_obj(var/obj/O, var/volume)
- if(istype(O,/obj/effect/alien/weeds/))
+/datum/reagent/toxin/plantbgone/touch_obj(var/obj/O, var/volume)
+ if(istype(O, /obj/effect/alien/weeds/))
var/obj/effect/alien/weeds/alien_weeds = O
- alien_weeds.health -= rand(15,35) // Kills alien weeds pretty fast
+ alien_weeds.health -= rand(15, 35)
alien_weeds.healthcheck()
- else if(istype(O,/obj/effect/plant))
- var/obj/effect/plant/plant = O
- plant.die_off()
- else if(istype(O,/obj/machinery/portable_atmospherics/hydroponics))
- var/obj/machinery/portable_atmospherics/hydroponics/tray = O
+ else if(istype(O, /obj/effect/plant))
+ qdel(O)
- if(tray.seed)
- tray.health -= rand(30,50)
- if(tray.pestlevel > 0)
- tray.pestlevel -= 2
- if(tray.weedlevel > 0)
- tray.weedlevel -= 3
- tray.toxins += 4
- tray.check_level_sanity()
- tray.update_icon()
+/datum/reagent/toxin/plantbgone/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ M.adjustToxLoss(50 * removed)
-/datum/reagent/toxin/plantbgone/reaction_mob(var/mob/living/M, var/method=TOUCH, var/volume)
- src = null
- if(iscarbon(M))
- var/mob/living/carbon/C = M
- if(!C.wear_mask) // If not wearing a mask
- C.adjustToxLoss(2) // 4 toxic damage per application, doubled for some reason
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(H.dna)
- if(H.species.flags & IS_PLANT) //plantmen take a LOT of damage
- H.adjustToxLoss(50)
+/datum/reagent/toxin/plantbgone/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ ..()
+ if(alien == IS_DIONA)
+ M.adjustToxLoss(50 * removed)
-/datum/reagent/toxin/acid/polyacid
+/datum/reagent/acid/polyacid
name = "Polytrinic acid"
id = "pacid"
description = "Polytrinic acid is a an extremely corrosive chemical substance."
reagent_state = LIQUID
- color = "#8E18A9" // rgb: 142, 24, 169
- toxpwr = 2
- meltprob = 30
+ color = "#8E18A9"
+ power = 10
+ meltdose = 4
-/datum/reagent/toxin/lexorin
+/datum/reagent/lexorin
name = "Lexorin"
id = "lexorin"
description = "Lexorin temporarily stops respiration. Causes tissue damage."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
- toxpwr = 0
+ color = "#C8A5DC"
overdose = REAGENTS_OVERDOSE
-/datum/reagent/toxin/lexorin/on_mob_life(var/mob/living/M as mob)
- if(M.stat == 2.0)
+/datum/reagent/lexorin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
return
- if(!M) M = holder.my_atom
- if(prob(33))
- M.take_organ_damage(1*REM, 0)
+ M.take_organ_damage(3 * removed, 0)
if(M.losebreath < 15)
M.losebreath++
- ..()
- return
-/datum/reagent/toxin/mutagen
+/datum/reagent/mutagen
name = "Unstable mutagen"
id = "mutagen"
description = "Might cause unpredictable mutations. Keep away from children."
reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
- toxpwr = 0
+ color = "#13BC5E"
-/datum/reagent/toxin/mutagen/reaction_mob(var/mob/living/carbon/M, var/method=TOUCH, var/volume)
- if(!..()) return
- if(!istype(M) || !M.dna) return //No robots, AIs, aliens, Ians or other mobs should be affected by this.
- src = null
- if((method==TOUCH && prob(33)) || method==INGEST)
- randmuti(M)
- if(prob(98)) randmutb(M)
- else randmutg(M)
- domutcheck(M, null)
- M.UpdateAppearance()
- return
+/datum/reagent/mutagen/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(prob(33))
+ affect_blood(M, alien, removed)
-/datum/reagent/toxin/mutagen/on_mob_life(var/mob/living/carbon/M)
- if(!istype(M)) return
- if(!M) M = holder.my_atom
- M.apply_effect(10,IRRADIATE,0)
- ..()
- return
+/datum/reagent/mutagen/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
+ if(prob(67))
+ affect_blood(M, alien, removed)
-/datum/reagent/toxin/slimejelly
+/datum/reagent/mutagen/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ var/mob/living/carbon/human/H = M
+ if(istype(H) && (H.species.flags & NO_SCAN))
+ return
+ if(M.dna)
+ if(prob(removed * 0.1)) // Approx. one mutation per 10 injected/20 ingested/30 touching units
+ randmuti(M)
+ if(prob(98))
+ randmutb(M)
+ else
+ randmutg(M)
+ domutcheck(M, null)
+ M.UpdateAppearance()
+ M.apply_effect(10 * removed, IRRADIATE, 0)
+
+/datum/reagent/slimejelly
name = "Slime Jelly"
id = "slimejelly"
description = "A gooey semi-liquid produced from one of the deadliest lifeforms in existence. SO REAL."
reagent_state = LIQUID
- color = "#801E28" // rgb: 128, 30, 40
- toxpwr = 0
+ color = "#801E28"
-/datum/reagent/toxin/slimejelly/on_mob_life(var/mob/living/M as mob)
+/datum/reagent/slimejelly/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
if(prob(10))
- M << "\red Your insides are burning!"
- M.adjustToxLoss(rand(20,60)*REM)
+ M << "Your insides are burning!"
+ M.adjustToxLoss(rand(100, 300) * removed)
else if(prob(40))
- M.heal_organ_damage(5*REM,0)
- ..()
- return
+ M.heal_organ_damage(25 * removed, 0)
-/datum/reagent/toxin/stoxin
+/datum/reagent/soporific
name = "Soporific"
id = "stoxin"
description = "An effective hypnotic used to treat insomnia."
reagent_state = LIQUID
- color = "#009CA8" // rgb: 232, 149, 204
- toxpwr = 0
- custom_metabolism = 0.1
+ color = "#009CA8"
+ metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE
-/datum/reagent/toxin/stoxin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1 to 12)
- if(prob(5)) M.emote("yawn")
- if(12 to 15)
- M.eye_blurry = max(M.eye_blurry, 10)
- if(15 to 49)
- if(prob(50))
- M.Weaken(2)
- M.drowsyness = max(M.drowsyness, 20)
- if(50 to INFINITY)
- M.sleeping = max(M.sleeping, 20)
- M.drowsyness = max(M.drowsyness, 60)
- data++
- ..()
- return
+/datum/reagent/soporific/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(dose < 1)
+ if(dose == metabolism * 2 || prob(5))
+ M.emote("yawn")
+ else if(dose < 1.5)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else if(dose < 5)
+ if(prob(50))
+ M.Weaken(2)
+ M.drowsyness = max(M.drowsyness, 20)
+ else
+ M.sleeping = max(M.sleeping, 20)
+ M.drowsyness = max(M.drowsyness, 60)
-/datum/reagent/toxin/chloralhydrate
+/datum/reagent/chloralhydrate
name = "Chloral Hydrate"
id = "chloralhydrate"
description = "A powerful sedative."
reagent_state = SOLID
- color = "#000067" // rgb: 0, 0, 103
- toxpwr = 1
- custom_metabolism = 0.1 //Default 0.2
- overdose = 15
- overdose_dam = 5
+ color = "#000067"
+ metabolism = REM * 0.5
+ overdose = REAGENTS_OVERDOSE * 0.5
-/datum/reagent/toxin/chloralhydrate/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- data++
- switch(data)
- if(1)
- M.confused += 2
- M.drowsyness += 2
- if(2 to 20)
- M.Weaken(30)
- M.eye_blurry = max(M.eye_blurry, 10)
- if(20 to INFINITY)
- M.sleeping = max(M.sleeping, 30)
- ..()
- return
+/datum/reagent/chloralhydrate/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(dose == metabolism)
+ M.confused += 2
+ M.drowsyness += 2
+ else if(dose < 2)
+ M.Weaken(30)
+ M.eye_blurry = max(M.eye_blurry, 10)
+ else
+ M.sleeping = max(M.sleeping, 30)
-/datum/reagent/toxin/beer2 //disguised as normal beer for use by emagged brobots
+ if(dose > 1)
+ M.adjustToxLoss(removed)
+
+/datum/reagent/chloralhydrate/beer2 //disguised as normal beer for use by emagged brobots
name = "Beer"
id = "beer2"
description = "An alcoholic beverage made from malted grains, hops, yeast, and water. The fermentation appears to be incomplete." //If the players manage to analyze this, they deserve to know something is wrong.
reagent_state = LIQUID
- color = "#664300" // rgb: 102, 67, 0
- custom_metabolism = 0.15 // Sleep toxins should always be consumed pretty fast
- overdose = REAGENTS_OVERDOSE/2
+ color = "#664300"
glass_icon_state = "beerglass"
glass_name = "glass of beer"
glass_desc = "A freezing pint of beer"
glass_center_of_mass = list("x"=16, "y"=8)
-/datum/reagent/toxin/beer2/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(!data) data = 1
- switch(data)
- if(1)
- M.confused += 2
- M.drowsyness += 2
- if(2 to 50)
- M.sleeping += 1
- if(51 to INFINITY)
- M.sleeping += 1
- M.adjustToxLoss((data - 50)*REM)
- data++
- ..()
- return
+/* Drugs */
/datum/reagent/space_drugs
name = "Space drugs"
id = "space_drugs"
description = "An illegal chemical compound used as drug."
reagent_state = LIQUID
- color = "#60A584" // rgb: 96, 165, 132
+ color = "#60A584"
+ metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE
-/datum/reagent/space_drugs/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/space_drugs/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
M.druggy = max(M.druggy, 15)
- if(isturf(M.loc) && !istype(M.loc, /turf/space))
- if(M.canmove && !M.restrained())
- if(prob(10)) step(M, pick(cardinal))
- if(prob(7)) M.emote(pick("twitch","drool","moan","giggle"))
- holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
- return
+ if(prob(10) && isturf(M.loc) && !istype(M.loc, /turf/space) && M.canmove && !M.restrained())
+ step(M, pick(cardinal))
+ if(prob(7))
+ M.emote(pick("twitch", "drool", "moan", "giggle"))
/datum/reagent/serotrotium
name = "Serotrotium"
id = "serotrotium"
description = "A chemical compound that promotes concentrated production of the serotonin neurotransmitter in humans."
reagent_state = LIQUID
- color = "#202040" // rgb: 20, 20, 40
+ color = "#202040"
+ metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
-/datum/reagent/serotrotium/on_mob_life(var/mob/living/M as mob)
- if(ishuman(M))
- if(prob(7)) M.emote(pick("twitch","drool","moan","gasp"))
- holder.remove_reagent(src.id, 0.25 * REAGENTS_METABOLISM)
+/datum/reagent/serotrotium/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ if(prob(7))
+ M.emote(pick("twitch", "drool", "moan", "gasp"))
return
/datum/reagent/cryptobiolin
@@ -430,165 +361,160 @@
id = "cryptobiolin"
description = "Cryptobiolin causes confusion and dizzyness."
reagent_state = LIQUID
- color = "#000055" // rgb: 200, 165, 220
+ color = "#000055"
+ metabolism = REM * 0.5
overdose = REAGENTS_OVERDOSE
-/datum/reagent/cryptobiolin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.make_dizzy(1)
- if(!M.confused) M.confused = 1
+/datum/reagent/cryptobiolin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.make_dizzy(4)
M.confused = max(M.confused, 20)
- holder.remove_reagent(src.id, 0.5 * REAGENTS_METABOLISM)
- ..()
- return
/datum/reagent/impedrezene
name = "Impedrezene"
id = "impedrezene"
description = "Impedrezene is a narcotic that impedes one's ability by slowing down the higher brain cell functions."
reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
+ color = "#C8A5DC"
overdose = REAGENTS_OVERDOSE
-/datum/reagent/impedrezene/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- M.jitteriness = max(M.jitteriness-5,0)
- if(prob(80)) M.adjustBrainLoss(1*REM)
- if(prob(50)) M.drowsyness = max(M.drowsyness, 3)
- if(prob(10)) M.emote("drool")
- ..()
- return
+/datum/reagent/impedrezene/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.jitteriness = max(M.jitteriness - 5, 0)
+ if(prob(80))
+ M.adjustBrainLoss(3 * removed)
+ if(prob(50))
+ M.drowsyness = max(M.drowsyness, 3)
+ if(prob(10))
+ M.emote("drool")
-/datum/reagent/toxin/mindbreaker
+/datum/reagent/mindbreaker
name = "Mindbreaker Toxin"
id = "mindbreaker"
description = "A powerful hallucinogen, it can cause fatal effects in users."
reagent_state = LIQUID
- color = "#B31008" // rgb: 139, 166, 233
- toxpwr = 0
- custom_metabolism = 0.05
+ color = "#B31008"
+ metabolism = REM * 0.25
overdose = REAGENTS_OVERDOSE
-/datum/reagent/toxin/mindbreaker/on_mob_life(var/mob/living/M)
- if(!M) M = holder.my_atom
- M.hallucination += 10
- ..()
- return
+/datum/reagent/mindbreaker/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
+ M.hallucination = max(M.hallucination, 100)
/datum/reagent/psilocybin
name = "Psilocybin"
id = "psilocybin"
description = "A strong psycotropic derived from certain species of mushroom."
- color = "#E700E7" // rgb: 231, 0, 231
+ color = "#E700E7"
overdose = REAGENTS_OVERDOSE
+ metabolism = REM * 0.5
-/datum/reagent/psilocybin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/psilocybin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ if(alien == IS_DIONA)
+ return
M.druggy = max(M.druggy, 30)
- if(!data) data = 1
- switch(data)
- if(1 to 5)
- if (!M.stuttering) M.stuttering = 1
- M.make_dizzy(5)
- if(prob(10)) M.emote(pick("twitch","giggle"))
- if(5 to 10)
- if (!M.stuttering) M.stuttering = 1
- M.make_jittery(10)
- M.make_dizzy(10)
- M.druggy = max(M.druggy, 35)
- if(prob(20)) M.emote(pick("twitch","giggle"))
- if (10 to INFINITY)
- if (!M.stuttering) M.stuttering = 1
- M.make_jittery(20)
- M.make_dizzy(20)
- M.druggy = max(M.druggy, 40)
- if(prob(30)) M.emote(pick("twitch","giggle"))
- holder.remove_reagent(src.id, 0.2)
- data++
- ..()
- return
+ if(dose < 1)
+ M.stuttering = max(M.stuttering, 3)
+ M.make_dizzy(5)
+ if(prob(10))
+ M.emote(pick("twitch", "giggle"))
+ else if(dose < 2)
+ M.stuttering = max(M.stuttering, 3)
+ M.make_jittery(10)
+ M.make_dizzy(10)
+ M.druggy = max(M.druggy, 35)
+ if(prob(20))
+ M.emote(pick("twitch","giggle"))
+ else
+ M.stuttering = max(M.stuttering, 3)
+ M.make_jittery(20)
+ M.make_dizzy(20)
+ M.druggy = max(M.druggy, 40)
+ if(prob(30))
+ M.emote(pick("twitch", "giggle"))
/datum/reagent/nicotine
name = "Nicotine"
id = "nicotine"
description = "A highly addictive stimulant extracted from the tobacco plant."
reagent_state = LIQUID
- color = "#181818" // rgb: 24, 24, 24
+ color = "#181818"
+
+/* Transformations */
/datum/reagent/slimetoxin
name = "Mutation Toxin"
id = "mutationtoxin"
description = "A corruptive toxin produced by slimes."
reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
- overdose = REAGENTS_OVERDOSE
+ color = "#13BC5E"
-/datum/reagent/slimetoxin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
+/datum/reagent/slimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(ishuman(M))
- var/mob/living/carbon/human/human = M
- if(human.species.name != "Slime")
+ var/mob/living/carbon/human/H = M
+ if(H.species.name != "Slime")
M << "Your flesh rapidly mutates!"
- human.set_species("Slime")
- ..()
- return
+ H.set_species("Slime")
/datum/reagent/aslimetoxin
name = "Advanced Mutation Toxin"
id = "amutationtoxin"
description = "An advanced corruptive toxin produced by slimes."
reagent_state = LIQUID
- color = "#13BC5E" // rgb: 19, 188, 94
- overdose = REAGENTS_OVERDOSE
+ color = "#13BC5E"
-/datum/reagent/aslimetoxin/on_mob_life(var/mob/living/M as mob)
- if(!M) M = holder.my_atom
- if(istype(M, /mob/living/carbon) && M.stat != DEAD)
- M << "\red Your flesh rapidly mutates!"
- if(M.monkeyizing) return
- M.monkeyizing = 1
- M.canmove = 0
- M.icon = null
- M.overlays.Cut()
- M.invisibility = 101
- for(var/obj/item/W in M)
- if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
- qdel(W)
- continue
- W.layer = initial(W.layer)
- W.loc = M.loc
- W.dropped(M)
- var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
- new_mob.a_intent = I_HURT
- new_mob.universal_speak = 1
- if(M.mind)
- M.mind.transfer_to(new_mob)
- else
- new_mob.key = M.key
- qdel(M)
- ..()
- return
+/datum/reagent/aslimetoxin/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) // TODO: check if there's similar code anywhere else
+ if(M.monkeyizing)
+ return
+ M << "Your flesh rapidly mutates!"
+ M.monkeyizing = 1
+ M.canmove = 0
+ M.icon = null
+ M.overlays.Cut()
+ M.invisibility = 101
+ for(var/obj/item/W in M)
+ if(istype(W, /obj/item/weapon/implant)) //TODO: Carn. give implants a dropped() or something
+ qdel(W)
+ continue
+ W.layer = initial(W.layer)
+ W.loc = M.loc
+ W.dropped(M)
+ var/mob/living/carbon/slime/new_mob = new /mob/living/carbon/slime(M.loc)
+ new_mob.a_intent = "hurt"
+ new_mob.universal_speak = 1
+ if(M.mind)
+ M.mind.transfer_to(new_mob)
+ else
+ new_mob.key = M.key
+ qdel(M)
/datum/reagent/nanites
name = "Nanomachines"
id = "nanites"
description = "Microscopic construction robots."
reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
+ color = "#535E66"
-/datum/reagent/nanites/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/robotic_transformation(0),1)
+/datum/reagent/nanites/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(prob(10))
+ M.contract_disease(new /datum/disease/robotic_transformation(0), 1)
+
+/datum/reagent/nanites/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.contract_disease(new /datum/disease/robotic_transformation(0), 1)
/datum/reagent/xenomicrobes
name = "Xenomicrobes"
id = "xenomicrobes"
description = "Microbes with an entirely alien cellular structure."
reagent_state = LIQUID
- color = "#535E66" // rgb: 83, 94, 102
+ color = "#535E66"
-/datum/reagent/xenomicrobes/reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
- src = null
- if( (prob(10) && method==TOUCH) || method==INGEST)
- M.contract_disease(new /datum/disease/xeno_transformation(0),1)
+/datum/reagent/xenomicrobes/affect_touch(var/mob/living/carbon/M, var/alien, var/removed)
+ if(prob(10))
+ M.contract_disease(new /datum/disease/xeno_transformation(0), 1)
+
+/datum/reagent/xenomicrobes/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
+ M.contract_disease(new /datum/disease/xeno_transformation(0), 1)
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index d5690610378..ce9ea05717a 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -1,107 +1,169 @@
+
+//Chemical Reactions - Initialises all /datum/chemical_reaction into a list
+// It is filtered into multiple lists within a list.
+// For example:
+// chemical_reaction_list["phoron"] is a list of all reactions relating to phoron
+// Note that entries in the list are NOT duplicated. So if a reaction pertains to
+// more than one chemical it will still only appear in only one of the sublists.
+/proc/initialize_chemical_reactions()
+ var/paths = typesof(/datum/chemical_reaction) - /datum/chemical_reaction
+ chemical_reactions_list = list()
+
+ for(var/path in paths)
+ var/datum/chemical_reaction/D = new path()
+ if(D.required_reagents && D.required_reagents.len)
+ var/reagent_id = D.required_reagents[1]
+ if(!chemical_reactions_list[reagent_id])
+ chemical_reactions_list[reagent_id] = list()
+ chemical_reactions_list[reagent_id] += D
+
+//helper that ensures the reaction rate holds after iterating
+//Ex. REACTION_RATE(0.3) means that 30% of the reagents will react each chemistry tick (~2 seconds by default).
+#define REACTION_RATE(rate) (1.0 - (1.0-rate)**(1.0/PROCESS_REACTION_ITER))
+
+//helper to define reaction rate in terms of half-life
+//Ex.
+//HALF_LIFE(0) -> Reaction completes immediately (default chems)
+//HALF_LIFE(1) -> Half of the reagents react immediately, the rest over the following ticks.
+//HALF_LIFE(2) -> Half of the reagents are consumed after 2 chemistry ticks.
+//HALF_LIFE(3) -> Half of the reagents are consumed after 3 chemistry ticks.
+#define HALF_LIFE(ticks) (ticks? 1.0 - (0.5)**(1.0/(ticks*PROCESS_REACTION_ITER)) : 1.0)
+
/datum/chemical_reaction
var/name = null
var/id = null
var/result = null
- var/resultcolor = null //for paint
- var/list/required_reagents = new/list()
- var/list/required_catalysts = new/list()
-
- // Both of these variables are mostly going to be used with slime cores - but if you want to, you can use them for other things
- var/atom/required_container = null // the container required for the reaction to happen
- var/required_other = 0 // an integer required for the reaction to happen
-
+ var/list/required_reagents = list()
+ var/list/catalysts = list()
+ var/list/inhibitors = list()
var/result_amount = 0
- var/secondary = 0 // set to nonzero if secondary reaction
- var/list/secondary_results = list() //additional reagents produced by the reaction
- var/requires_heating = 0
+ //how far the reaction proceeds each time it is processed. Used with either REACTION_RATE or HALF_LIFE macros.
+ var/reaction_rate = HALF_LIFE(0)
+
+ //if less than 1, the reaction will be inhibited if the ratio of products/reagents is too high.
+ //0.5 = 50% yield -> reaction will only proceed halfway until products are removed.
+ var/yield = 1.0
+
+ //If limits on reaction rate would leave less than this amount of any reagent (adjusted by the reaction ratios),
+ //the reaction goes to completion. This is to prevent reactions from going on forever with tiny reagent amounts.
+ var/min_reaction = 2
+
+ var/mix_message = "The solution begins to bubble."
+ var/reaction_sound = 'sound/effects/bubbles.ogg'
+
+/datum/chemical_reaction/proc/can_happen(var/datum/reagents/holder)
+ //check that all the required reagents are present
+ if(!holder.has_all_reagents(required_reagents))
+ return 0
+
+ //check that all the required catalysts are present in the required amount
+ if(!holder.has_all_reagents(catalysts))
+ return 0
+
+ //check that none of the inhibitors are present in the required amount
+ if(holder.has_any_reagent(inhibitors))
+ return 0
+
+ return 1
+
+/datum/chemical_reaction/proc/calc_reaction_progress(var/datum/reagents/holder, var/reaction_limit)
+ var/progress = reaction_limit * reaction_rate //simple exponential progression
+
+ //calculate yield
+ if(1-yield > 0.001) //if yield ratio is big enough just assume it goes to completion
+ /*
+ Determine the max amount of product by applying the yield condition:
+ (max_product/result_amount) / reaction_limit == yield/(1-yield)
+
+ We make use of the fact that:
+ reaction_limit = (holder.get_reagent_amount(reactant) / required_reagents[reactant]) of the limiting reagent.
+ */
+ var/yield_ratio = yield/(1-yield)
+ var/max_product = yield_ratio * reaction_limit * result_amount //rearrange to obtain max_product
+ var/yield_limit = max(0, max_product - holder.get_reagent_amount(result))/result_amount
+
+ progress = min(progress, yield_limit) //apply yield limit
+
+ //apply min reaction progress - wasn't sure if this should go before or after applying yield
+ //I guess people can just have their miniscule reactions go to completion regardless of yield.
+ for(var/reactant in required_reagents)
+ var/remainder = holder.get_reagent_amount(reactant) - progress*required_reagents[reactant]
+ if(remainder <= min_reaction*required_reagents[reactant])
+ progress = reaction_limit
+ break
+
+ return progress
+
+/datum/chemical_reaction/proc/process(var/datum/reagents/holder)
+ //determine how far the reaction can proceed
+ var/list/reaction_limits = list()
+ for(var/reactant in required_reagents)
+ reaction_limits += holder.get_reagent_amount(reactant) / required_reagents[reactant]
+
+ //determine how far the reaction proceeds
+ var/reaction_limit = min(reaction_limits)
+ var/progress_limit = calc_reaction_progress(holder, reaction_limit)
+
+ var/reaction_progress = min(reaction_limit, progress_limit) //no matter what, the reaction progress cannot exceed the stoichiometric limit.
+
+ //need to obtain the new reagent's data before anything is altered
+ var/data = send_data(holder, reaction_progress)
+
+ //remove the reactants
+ for(var/reactant in required_reagents)
+ var/amt_used = required_reagents[reactant] * reaction_progress
+ holder.remove_reagent(reactant, amt_used, safety = 1)
+
+ //add the product
+ var/amt_produced = result_amount * reaction_progress
+ if(result)
+ holder.add_reagent(result, amt_produced, data, safety = 1)
+
+ on_reaction(holder, amt_produced)
+
+ return reaction_progress
+
+//called when a reaction processes
/datum/chemical_reaction/proc/on_reaction(var/datum/reagents/holder, var/created_volume)
return
- //I recommend you set the result amount to the total volume of all components.
+//called after processing reactions, if they occurred
+/datum/chemical_reaction/proc/post_reaction(var/datum/reagents/holder)
+ var/atom/container = holder.my_atom
+ if(mix_message && container && !ismob(container))
+ var/turf/T = get_turf(container)
+ var/list/seen = viewers(4, T)
+ for(var/mob/M in seen)
+ M.show_message("\icon[container] [mix_message]", 1)
+ playsound(T, reaction_sound, 80, 1)
-/datum/chemical_reaction/explosion_potassium
- name = "Explosion"
- id = "explosion_potassium"
- result = null
- required_reagents = list("water" = 1, "potassium" = 1)
- result_amount = 2
+//obtains any special data that will be provided to the reaction products
+//this is called just before reactants are removed.
+/datum/chemical_reaction/proc/send_data(var/datum/reagents/holder, var/reaction_limit)
+ return null
-/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
- e.holder_damage(holder.my_atom)
- if(isliving(holder.my_atom))
- e.amount *= 0.5
- var/mob/living/L = holder.my_atom
- if(L.stat!=DEAD)
- e.amount *= 0.5
- e.start()
- holder.clear_reagents()
- return
-
-/datum/chemical_reaction/emp_pulse
- name = "EMP Pulse"
- id = "emp_pulse"
- result = null
- required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
- result_amount = 2
-
-/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
- // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
- empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
- holder.clear_reagents()
- return
-
-/datum/chemical_reaction/silicate
- name = "Silicate"
- id = "silicate"
- result = "silicate"
- required_reagents = list("aluminum" = 1, "silicon" = 1, "oxygen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/stoxin
- name = "Soporific"
- id = "stoxin"
- result = "stoxin"
- required_reagents = list("chloralhydrate" = 1, "sugar" = 4)
- result_amount = 5
-
-/datum/chemical_reaction/sterilizine
- name = "Sterilizine"
- id = "sterilizine"
- result = "sterilizine"
- required_reagents = list("ethanol" = 1, "anti_toxin" = 1, "chlorine" = 1)
- result_amount = 3
+/* Common reactions */
/datum/chemical_reaction/inaprovaline
name = "Inaprovaline"
id = "inaprovaline"
result = "inaprovaline"
- required_reagents = list("oxygen" = 1, "carbon" = 1, "sugar" = 1)
+ required_reagents = list("acetone" = 1, "carbon" = 1, "sugar" = 1)
result_amount = 3
-/datum/chemical_reaction/anti_toxin
+/datum/chemical_reaction/dylovene
name = "Dylovene"
id = "anti_toxin"
result = "anti_toxin"
- required_reagents = list("silicon" = 1, "potassium" = 1, "nitrogen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/mutagen
- name = "Unstable mutagen"
- id = "mutagen"
- result = "mutagen"
- required_reagents = list("radium" = 1, "phosphorus" = 1, "chlorine" = 1)
+ required_reagents = list("silicon" = 1, "potassium" = 1, "ammonia" = 1)
result_amount = 3
/datum/chemical_reaction/tramadol
name = "Tramadol"
id = "tramadol"
result = "tramadol"
- required_reagents = list("inaprovaline" = 1, "ethanol" = 1, "oxygen" = 1)
+ required_reagents = list("inaprovaline" = 1, "ethanol" = 1, "acetone" = 1)
result_amount = 3
/datum/chemical_reaction/paracetamol
@@ -116,35 +178,35 @@
id = "oxycodone"
result = "oxycodone"
required_reagents = list("ethanol" = 1, "tramadol" = 1)
- required_catalysts = list("phoron" = 1)
+ catalysts = list("phoron" = 5)
result_amount = 1
-//cyanide
-// name = "Cyanide"
-// id = "cyanide"
-// result = "cyanide"
-// required_reagents = list("hydrogen" = 1, "carbon" = 1, "nitrogen" = 1)
-// result_amount = 1
+/datum/chemical_reaction/sterilizine
+ name = "Sterilizine"
+ id = "sterilizine"
+ result = "sterilizine"
+ required_reagents = list("ethanol" = 1, "anti_toxin" = 1, "hclacid" = 1)
+ result_amount = 3
-/datum/chemical_reaction/water //I can't believe we never had this.
- name = "Water"
- id = "water"
- result = "water"
- required_reagents = list("oxygen" = 1, "hydrogen" = 2)
- result_amount = 1
+/datum/chemical_reaction/silicate
+ name = "Silicate"
+ id = "silicate"
+ result = "silicate"
+ required_reagents = list("aluminum" = 1, "silicon" = 1, "acetone" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/mutagen
+ name = "Unstable mutagen"
+ id = "mutagen"
+ result = "mutagen"
+ required_reagents = list("radium" = 1, "phosphorus" = 1, "hclacid" = 1)
+ result_amount = 3
/datum/chemical_reaction/thermite
name = "Thermite"
id = "thermite"
result = "thermite"
- required_reagents = list("aluminum" = 1, "iron" = 1, "oxygen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/lexorin
- name = "Lexorin"
- id = "lexorin"
- result = "lexorin"
- required_reagents = list("phoron" = 1, "hydrogen" = 1, "nitrogen" = 1)
+ required_reagents = list("aluminum" = 1, "iron" = 1, "acetone" = 1)
result_amount = 3
/datum/chemical_reaction/space_drugs
@@ -158,14 +220,14 @@
name = "Space Lube"
id = "lube"
result = "lube"
- required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1)
+ required_reagents = list("water" = 1, "silicon" = 1, "acetone" = 1)
result_amount = 4
/datum/chemical_reaction/pacid
name = "Polytrinic acid"
id = "pacid"
result = "pacid"
- required_reagents = list("sacid" = 1, "chlorine" = 1, "potassium" = 1)
+ required_reagents = list("sacid" = 1, "hclacid" = 1, "potassium" = 1)
result_amount = 3
/datum/chemical_reaction/synaptizine
@@ -186,14 +248,14 @@
name = "Arithrazine"
id = "arithrazine"
result = "arithrazine"
- required_reagents = list("hyronalin" = 1, "hydrogen" = 1)
+ required_reagents = list("hyronalin" = 1, "hydrazine" = 1)
result_amount = 2
/datum/chemical_reaction/impedrezene
name = "Impedrezene"
id = "impedrezene"
result = "impedrezene"
- required_reagents = list("mercury" = 1, "oxygen" = 1, "sugar" = 1)
+ required_reagents = list("mercury" = 1, "acetone" = 1, "sugar" = 1)
result_amount = 2
/datum/chemical_reaction/kelotane
@@ -208,22 +270,29 @@
id = "peridaxon"
result = "peridaxon"
required_reagents = list("bicaridine" = 2, "clonexadone" = 2)
- required_catalysts = list("phoron" = 5)
+ catalysts = list("phoron" = 5)
result_amount = 2
+/datum/chemical_reaction/virus_food
+ name = "Virus Food"
+ id = "virusfood"
+ result = "virusfood"
+ required_reagents = list("water" = 1, "milk" = 1)
+ result_amount = 5
+
/datum/chemical_reaction/leporazine
name = "Leporazine"
id = "leporazine"
result = "leporazine"
required_reagents = list("silicon" = 1, "copper" = 1)
- required_catalysts = list("phoron" = 5)
+ catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/cryptobiolin
name = "Cryptobiolin"
id = "cryptobiolin"
result = "cryptobiolin"
- required_reagents = list("potassium" = 1, "oxygen" = 1, "sugar" = 1)
+ required_reagents = list("potassium" = 1, "acetone" = 1, "sugar" = 1)
result_amount = 3
/datum/chemical_reaction/tricordrazine
@@ -237,22 +306,23 @@
name = "Alkysine"
id = "alkysine"
result = "alkysine"
- required_reagents = list("chlorine" = 1, "nitrogen" = 1, "anti_toxin" = 1)
+ required_reagents = list("hclacid" = 1, "ammonia" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/dexalin
name = "Dexalin"
id = "dexalin"
- result = "dexalin"
- required_reagents = list("oxygen" = 2, "phoron" = 0.1)
- required_catalysts = list("phoron" = 5)
+ result = "dexalin"
+ required_reagents = list("acetone" = 2, "phoron" = 0.1)
+ catalysts = list("phoron" = 1)
+ inhibitors = list("water" = 1) // Messes with cryox
result_amount = 1
/datum/chemical_reaction/dermaline
name = "Dermaline"
id = "dermaline"
result = "dermaline"
- required_reagents = list("oxygen" = 1, "phosphorus" = 1, "kelotane" = 1)
+ required_reagents = list("acetone" = 1, "phosphorus" = 1, "kelotane" = 1)
result_amount = 3
/datum/chemical_reaction/dexalinp
@@ -267,13 +337,14 @@
id = "bicaridine"
result = "bicaridine"
required_reagents = list("inaprovaline" = 1, "carbon" = 1)
+ inhibitors = list("sugar" = 1) // Messes up with inaprovaline
result_amount = 2
/datum/chemical_reaction/hyperzine
name = "Hyperzine"
id = "hyperzine"
result = "hyperzine"
- required_reagents = list("sugar" = 1, "phosphorus" = 1, "sulfur" = 1,)
+ required_reagents = list("sugar" = 1, "phosphorus" = 1, "sulfur" = 1)
result_amount = 3
/datum/chemical_reaction/ryetalyn
@@ -287,7 +358,7 @@
name = "Cryoxadone"
id = "cryoxadone"
result = "cryoxadone"
- required_reagents = list("dexalin" = 1, "water" = 1, "oxygen" = 1)
+ required_reagents = list("dexalin" = 1, "water" = 1, "acetone" = 1)
result_amount = 3
/datum/chemical_reaction/clonexadone
@@ -295,7 +366,7 @@
id = "clonexadone"
result = "clonexadone"
required_reagents = list("cryoxadone" = 1, "sodium" = 1, "phoron" = 0.1)
- required_catalysts = list("phoron" = 5)
+ catalysts = list("phoron" = 5)
result_amount = 2
/datum/chemical_reaction/spaceacillin
@@ -309,23 +380,101 @@
name = "imidazoline"
id = "imidazoline"
result = "imidazoline"
- required_reagents = list("carbon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
+ required_reagents = list("carbon" = 1, "hydrazine" = 1, "anti_toxin" = 1)
result_amount = 2
/datum/chemical_reaction/ethylredoxrazine
name = "Ethylredoxrazine"
id = "ethylredoxrazine"
result = "ethylredoxrazine"
- required_reagents = list("oxygen" = 1, "anti_toxin" = 1, "carbon" = 1)
+ required_reagents = list("acetone" = 1, "anti_toxin" = 1, "carbon" = 1)
result_amount = 3
-/datum/chemical_reaction/ethanoloxidation
- name = "ethanoloxidation" //Kind of a placeholder in case someone ever changes it so that chemicals
- id = "ethanoloxidation" // react in the body. Also it would be silly if it didn't exist.
- result = "water"
- required_reagents = list("ethylredoxrazine" = 1, "ethanol" = 1)
+/datum/chemical_reaction/soporific
+ name = "Soporific"
+ id = "stoxin"
+ result = "stoxin"
+ required_reagents = list("chloralhydrate" = 1, "sugar" = 4)
+ inhibitors = list("phosphorus") // Messes with the smoke
+ result_amount = 5
+
+/datum/chemical_reaction/chloralhydrate
+ name = "Chloral Hydrate"
+ id = "chloralhydrate"
+ result = "chloralhydrate"
+ required_reagents = list("ethanol" = 1, "hclacid" = 3, "water" = 1)
+ result_amount = 1
+
+/datum/chemical_reaction/potassium_chloride
+ name = "Potassium Chloride"
+ id = "potassium_chloride"
+ result = "potassium_chloride"
+ required_reagents = list("sodiumchloride" = 1, "potassium" = 1)
result_amount = 2
+/datum/chemical_reaction/potassium_chlorophoride
+ name = "Potassium Chlorophoride"
+ id = "potassium_chlorophoride"
+ result = "potassium_chlorophoride"
+ required_reagents = list("potassium_chloride" = 1, "phoron" = 1, "chloralhydrate" = 1)
+ result_amount = 4
+
+/datum/chemical_reaction/zombiepowder
+ name = "Zombie Powder"
+ id = "zombiepowder"
+ result = "zombiepowder"
+ required_reagents = list("carpotoxin" = 5, "stoxin" = 5, "copper" = 5)
+ result_amount = 2
+
+/datum/chemical_reaction/mindbreaker
+ name = "Mindbreaker Toxin"
+ id = "mindbreaker"
+ result = "mindbreaker"
+ required_reagents = list("silicon" = 1, "hydrazine" = 1, "anti_toxin" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/lipozine
+ name = "Lipozine"
+ id = "Lipozine"
+ result = "lipozine"
+ required_reagents = list("sodiumchloride" = 1, "ethanol" = 1, "radium" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/surfactant
+ name = "Azosurfactant"
+ id = "surfactant"
+ result = "surfactant"
+ required_reagents = list("hydrazine" = 2, "carbon" = 2, "sacid" = 1)
+ result_amount = 5
+
+/datum/chemical_reaction/diethylamine
+ name = "Diethylamine"
+ id = "diethylamine"
+ result = "diethylamine"
+ required_reagents = list ("ammonia" = 1, "ethanol" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/space_cleaner
+ name = "Space cleaner"
+ id = "cleaner"
+ result = "cleaner"
+ required_reagents = list("ammonia" = 1, "water" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/plantbgone
+ name = "Plant-B-Gone"
+ id = "plantbgone"
+ result = "plantbgone"
+ required_reagents = list("toxin" = 1, "water" = 4)
+ result_amount = 5
+
+/datum/chemical_reaction/foaming_agent
+ name = "Foaming Agent"
+ id = "foaming_agent"
+ result = "foaming_agent"
+ required_reagents = list("lithium" = 1, "hydrazine" = 1)
+ result_amount = 1
+
/datum/chemical_reaction/glycerol
name = "Glycerol"
id = "glycerol"
@@ -333,34 +482,111 @@
required_reagents = list("cornoil" = 3, "sacid" = 1)
result_amount = 1
-/datum/chemical_reaction/nitroglycerin
- name = "Nitroglycerin"
- id = "nitroglycerin"
- result = "nitroglycerin"
- required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1)
- result_amount = 2
-
-/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
- e.holder_damage(holder.my_atom)
- if(isliving(holder.my_atom))
- e.amount *= 0.5
- var/mob/living/L = holder.my_atom
- if(L.stat!=DEAD)
- e.amount *= 0.5
- e.start()
-
- holder.clear_reagents()
- return
-
/datum/chemical_reaction/sodiumchloride
name = "Sodium Chloride"
id = "sodiumchloride"
result = "sodiumchloride"
- required_reagents = list("sodium" = 1, "chlorine" = 1)
+ required_reagents = list("sodium" = 1, "hclacid" = 1)
result_amount = 2
+/datum/chemical_reaction/condensedcapsaicin
+ name = "Condensed Capsaicin"
+ id = "condensedcapsaicin"
+ result = "condensedcapsaicin"
+ required_reagents = list("capsaicin" = 2)
+ catalysts = list("phoron" = 5)
+ result_amount = 1
+
+/datum/chemical_reaction/coolant
+ name = "Coolant"
+ id = "coolant"
+ result = "coolant"
+ required_reagents = list("tungsten" = 1, "acetone" = 1, "water" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/rezadone
+ name = "Rezadone"
+ id = "rezadone"
+ result = "rezadone"
+ required_reagents = list("carpotoxin" = 1, "cryptobiolin" = 1, "copper" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/lexorin
+ name = "Lexorin"
+ id = "lexorin"
+ result = "lexorin"
+ required_reagents = list("phoron" = 1, "hydrazine" = 1, "ammonia" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/methylphenidate
+ name = "Methylphenidate"
+ id = "methylphenidate"
+ result = "methylphenidate"
+ required_reagents = list("mindbreaker" = 1, "hydrazine" = 1)
+ result_amount = 3
+
+/datum/chemical_reaction/citalopram
+ name = "Citalopram"
+ id = "citalopram"
+ result = "citalopram"
+ required_reagents = list("mindbreaker" = 1, "carbon" = 1)
+ result_amount = 3
+
+
+/datum/chemical_reaction/paroxetine
+ name = "Paroxetine"
+ id = "paroxetine"
+ result = "paroxetine"
+ required_reagents = list("mindbreaker" = 1, "acetone" = 1, "inaprovaline" = 1)
+ result_amount = 3
+
+/* Solidification */
+
+/datum/chemical_reaction/phoronsolidification
+ name = "Solid Phoron"
+ id = "solidphoron"
+ result = null
+ required_reagents = list("iron" = 5, "frostoil" = 5, "phoron" = 20)
+ result_amount = 1
+
+/datum/chemical_reaction/phoronsolidification/on_reaction(var/datum/reagents/holder, var/created_volume)
+ new /obj/item/stack/material/phoron(get_turf(holder.my_atom), created_volume)
+ return
+
+/datum/chemical_reaction/plastication
+ name = "Plastic"
+ id = "solidplastic"
+ result = null
+ required_reagents = list("pacid" = 1, "plasticide" = 2)
+ result_amount = 1
+
+/datum/chemical_reaction/plastication/on_reaction(var/datum/reagents/holder, var/created_volume)
+ new /obj/item/stack/material/plastic(get_turf(holder.my_atom), created_volume)
+ return
+
+/* Grenade reactions */
+
+/datum/chemical_reaction/explosion_potassium
+ name = "Explosion"
+ id = "explosion_potassium"
+ result = null
+ required_reagents = list("water" = 1, "potassium" = 1)
+ result_amount = 2
+ mix_message = null
+
+/datum/chemical_reaction/explosion_potassium/on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/datum/effect/effect/system/reagents_explosion/e = new()
+ e.set_up(round (created_volume/10, 1), holder.my_atom, 0, 0)
+ e.holder_damage(holder.my_atom)
+ if(isliving(holder.my_atom))
+ e.amount *= 0.5
+ var/mob/living/L = holder.my_atom
+ if(L.stat != DEAD)
+ e.amount *= 0.5
+ e.start()
+ holder.clear_reagents()
+ return
+
/datum/chemical_reaction/flash_powder
name = "Flash powder"
id = "flash_powder"
@@ -391,6 +617,42 @@
flick("e_flash", M.flash)
M.Stun(5)
+/datum/chemical_reaction/emp_pulse
+ name = "EMP Pulse"
+ id = "emp_pulse"
+ result = null
+ required_reagents = list("uranium" = 1, "iron" = 1) // Yes, laugh, it's the best recipe I could think of that makes a little bit of sense
+ result_amount = 2
+
+/datum/chemical_reaction/emp_pulse/on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/location = get_turf(holder.my_atom)
+ // 100 created volume = 4 heavy range & 7 light range. A few tiles smaller than traitor EMP grandes.
+ // 200 created volume = 8 heavy range & 14 light range. 4 tiles larger than traitor EMP grenades.
+ empulse(location, round(created_volume / 24), round(created_volume / 14), 1)
+ holder.clear_reagents()
+ return
+
+/datum/chemical_reaction/nitroglycerin
+ name = "Nitroglycerin"
+ id = "nitroglycerin"
+ result = "nitroglycerin"
+ required_reagents = list("glycerol" = 1, "pacid" = 1, "sacid" = 1)
+ result_amount = 2
+
+/datum/chemical_reaction/nitroglycerin/on_reaction(var/datum/reagents/holder, var/created_volume)
+ var/datum/effect/effect/system/reagents_explosion/e = new()
+ e.set_up(round (created_volume/2, 1), holder.my_atom, 0, 0)
+ e.holder_damage(holder.my_atom)
+ if(isliving(holder.my_atom))
+ e.amount *= 0.5
+ var/mob/living/L = holder.my_atom
+ if(L.stat!=DEAD)
+ e.amount *= 0.5
+ e.start()
+
+ holder.clear_reagents()
+ return
+
/datum/chemical_reaction/napalm
name = "Napalm"
id = "napalm"
@@ -406,40 +668,12 @@
holder.del_reagent("napalm")
return
-/*
-/datum/chemical_reaction/smoke
- name = "Smoke"
- id = "smoke"
- result = null
- required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1 )
- result_amount = null
- secondary = 1
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- var/datum/effect/system/bad_smoke_spread/S = new /datum/effect/system/bad_smoke_spread
- S.attach(location)
- S.set_up(10, 0, location)
- playsound(location, 'sound/effects/smoke.ogg', 50, 1, -3)
- spawn(0)
- S.start()
- sleep(10)
- S.start()
- sleep(10)
- S.start()
- sleep(10)
- S.start()
- sleep(10)
- S.start()
- holder.clear_reagents()
- return */
-
/datum/chemical_reaction/chemsmoke
name = "Chemsmoke"
id = "chemsmoke"
result = null
required_reagents = list("potassium" = 1, "sugar" = 1, "phosphorus" = 1)
result_amount = 0.4
- secondary = 1
/datum/chemical_reaction/chemsmoke/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
@@ -452,178 +686,19 @@
holder.clear_reagents()
return
-/datum/chemical_reaction/chloralhydrate
- name = "Chloral Hydrate"
- id = "chloralhydrate"
- result = "chloralhydrate"
- required_reagents = list("ethanol" = 1, "chlorine" = 3, "water" = 1)
- result_amount = 1
-
-/datum/chemical_reaction/potassium_chloride
- name = "Potassium Chloride"
- id = "potassium_chloride"
- result = "potassium_chloride"
- required_reagents = list("sodiumchloride" = 1, "potassium" = 1)
- result_amount = 2
-
-/datum/chemical_reaction/potassium_chlorophoride
- name = "Potassium Chlorophoride"
- id = "potassium_chlorophoride"
- result = "potassium_chlorophoride"
- required_reagents = list("potassium_chloride" = 1, "phoron" = 1, "chloralhydrate" = 1)
- result_amount = 4
-
-/datum/chemical_reaction/stoxin
- name = "Soporific"
- id = "stoxin"
- result = "stoxin"
- required_reagents = list("chloralhydrate" = 1, "sugar" = 4)
- result_amount = 5
-
-/datum/chemical_reaction/zombiepowder
- name = "Zombie Powder"
- id = "zombiepowder"
- result = "zombiepowder"
- required_reagents = list("carpotoxin" = 5, "stoxin" = 5, "copper" = 5)
- result_amount = 2
-
-/datum/chemical_reaction/rezadone
- name = "Rezadone"
- id = "rezadone"
- result = "rezadone"
- required_reagents = list("carpotoxin" = 1, "cryptobiolin" = 1, "copper" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/mindbreaker
- name = "Mindbreaker Toxin"
- id = "mindbreaker"
- result = "mindbreaker"
- required_reagents = list("silicon" = 1, "hydrogen" = 1, "anti_toxin" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/lipozine
- name = "Lipozine"
- id = "Lipozine"
- result = "lipozine"
- required_reagents = list("sodiumchloride" = 1, "ethanol" = 1, "radium" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/phoronsolidification
- name = "Solid Phoron"
- id = "solidphoron"
- result = null
- required_reagents = list("iron" = 5, "frostoil" = 5, "phoron" = 20)
- result_amount = 1
-
-/datum/chemical_reaction/phoronsolidification/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/stack/sheet/mineral/phoron(location)
- return
-
-/datum/chemical_reaction/plastication
- name = "Plastic"
- id = "solidplastic"
- result = null
- required_reagents = list("pacid" = 10, "plasticide" = 20)
- result_amount = 1
-
-/datum/chemical_reaction/plastication/on_reaction(var/datum/reagents/holder)
- new /obj/item/stack/sheet/mineral/plastic(get_turf(holder.my_atom),10)
- return
-
-/datum/chemical_reaction/virus_food
- name = "Virus Food"
- id = "virusfood"
- result = "virusfood"
- required_reagents = list("water" = 1, "milk" = 1, "oxygen" = 1)
- result_amount = 3
-/*
-/datum/chemical_reaction/mix_virus
- name = "Mix Virus"
- id = "mixvirus"
- result = "blood"
- required_reagents = list("virusfood" = 5)
- required_catalysts = list("blood")
- var/level = 2
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Evolve(level - rand(0, 1))
-
-
- mix_virus_2
-
- name = "Mix Virus 2"
- id = "mixvirus2"
- required_reagents = list("mutagen" = 5)
- level = 4
-
- rem_virus
-
- name = "Devolve Virus"
- id = "remvirus"
- required_reagents = list("synaptizine" = 5)
-
- on_reaction(var/datum/reagents/holder, var/created_volume)
-
- var/datum/reagent/blood/B = locate(/datum/reagent/blood) in holder.reagent_list
- if(B && B.data)
- var/datum/disease/advance/D = locate(/datum/disease/advance) in B.data["viruses"]
- if(D)
- D.Devolve()
-*/
-/datum/chemical_reaction/condensedcapsaicin
- name = "Condensed Capsaicin"
- id = "condensedcapsaicin"
- result = "condensedcapsaicin"
- required_reagents = list("capsaicin" = 2)
- required_catalysts = list("phoron" = 5)
- result_amount = 1
-
-/datum/chemical_reaction/ketchup
- name = "Ketchup"
- id = "ketchup"
- result = "ketchup"
- required_reagents = list("tomatojuice" = 2, "water" = 1, "sugar" = 1)
- result_amount = 4
-
-///////////////////////////////////////////////////////////////////////////////////
-
-// foam and foam precursor
-
-/datum/chemical_reaction/surfactant
- name = "Foam surfactant"
- id = "foam surfactant"
- result = "fluorosurfactant"
- required_reagents = list("fluorine" = 2, "carbon" = 2, "sacid" = 1)
- result_amount = 5
-
-
/datum/chemical_reaction/foam
name = "Foam"
id = "foam"
result = null
- required_reagents = list("fluorosurfactant" = 1, "water" = 1)
+ required_reagents = list("surfactant" = 1, "water" = 1)
result_amount = 2
+ mix_message = "The solution violently bubbles!"
/datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume)
-
var/location = get_turf(holder.my_atom)
- for(var/mob/M in viewers(5, location))
- M << "\red The solution violently bubbles!"
-
- location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out foam!"
-
- //world << "Holder volume is [holder.total_volume]"
- //for(var/datum/reagent/R in holder.reagent_list)
- // world << "[R.name] = [R.volume]"
+ M << "The solution spews out foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 0)
@@ -639,12 +714,10 @@
result_amount = 5
/datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
-
-
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
+ M << "The solution spews out a metalic foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 1)
@@ -659,468 +732,351 @@
result_amount = 5
/datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume)
-
-
var/location = get_turf(holder.my_atom)
for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out a metalic foam!"
+ M << "The solution spews out a metalic foam!"
var/datum/effect/effect/system/foam_spread/s = new()
s.set_up(created_volume, location, holder, 2)
s.start()
return
+/* Paint */
-
-/datum/chemical_reaction/foaming_agent
- name = "Foaming Agent"
- id = "foaming_agent"
- result = "foaming_agent"
- required_reagents = list("lithium" = 1, "hydrogen" = 1)
- result_amount = 1
-
-// Synthesizing these three chemicals is pretty complex in real life, but fuck it, it's just a game!
-/datum/chemical_reaction/ammonia
- name = "Ammonia"
- id = "ammonia"
- result = "ammonia"
- required_reagents = list("hydrogen" = 3, "nitrogen" = 1)
- result_amount = 3
-
-/datum/chemical_reaction/diethylamine
- name = "Diethylamine"
- id = "diethylamine"
- result = "diethylamine"
- required_reagents = list ("ammonia" = 1, "ethanol" = 1)
- result_amount = 2
-
-/datum/chemical_reaction/space_cleaner
- name = "Space cleaner"
- id = "cleaner"
- result = "cleaner"
- required_reagents = list("ammonia" = 1, "water" = 1)
- result_amount = 2
-
-/datum/chemical_reaction/plantbgone
- name = "Plant-B-Gone"
- id = "plantbgone"
- result = "plantbgone"
- required_reagents = list("toxin" = 1, "water" = 4)
+/datum/chemical_reaction/red_paint
+ name = "Red paint"
+ id = "red_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_red" = 1)
result_amount = 5
+/datum/chemical_reaction/red_paint/send_data()
+ return "#FE191A"
-/////////////////////////////////////OLD SLIME CORE REACTIONS ///////////////////////////////
-/*
-slimepepper
- name = "Slime Condensedcapaicin"
- id = "m_condensedcapaicin"
- result = "condensedcapsaicin"
- required_reagents = list("sugar" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 1
-slimefrost
- name = "Slime Frost Oil"
- id = "m_frostoil"
- result = "frostoil"
- required_reagents = list("water" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 1
-slimeglycerol
- name = "Slime Glycerol"
- id = "m_glycerol"
- result = "glycerol"
- required_reagents = list("blood" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 1
+/datum/chemical_reaction/orange_paint
+ name = "Orange paint"
+ id = "orange_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_orange" = 1)
+ result_amount = 5
-slime_explosion
- name = "Slime Explosion"
- id = "m_explosion"
- result = null
- required_reagents = list("blood" = 1)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 2
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- var/datum/effect/effect/system/reagents_explosion/e = new()
- e.set_up(round (created_volume/10, 1), location, 0, 0)
- e.start()
+/datum/chemical_reaction/orange_paint/send_data()
+ return "#FFBE4F"
- holder.clear_reagents()
- return
-slimejam
- name = "Slime Jam"
- id = "m_jam"
- result = "slimejelly"
- required_reagents = list("water" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 2
-slimesynthi
- name = "Slime Synthetic Flesh"
- id = "m_flesh"
- result = null
- required_reagents = list("sugar" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 2
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
- return
+/datum/chemical_reaction/yellow_paint
+ name = "Yellow paint"
+ id = "yellow_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_yellow" = 1)
+ result_amount = 5
-slimeenzyme
- name = "Slime Enzyme"
- id = "m_enzyme"
- result = "enzyme"
- required_reagents = list("blood" = 1, "water" = 1)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 3
-slimeplasma
- name = "Slime Plasma"
- id = "m_plasma"
- result = "plasma"
- required_reagents = list("sugar" = 1, "blood" = 2)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 3
-slimevirus
- name = "Slime Virus"
- id = "m_virus"
- result = null
- required_reagents = list("sugar" = 1, "sacid" = 1)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 3
- on_reaction(var/datum/reagents/holder, var/created_volume)
- holder.clear_reagents()
+/datum/chemical_reaction/yellow_paint/send_data()
+ return "#FDFE7D"
- var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \
- /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \
- /datum/disease/brainrot, /datum/disease/magnitis)
+/datum/chemical_reaction/green_paint
+ name = "Green paint"
+ id = "green_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_green" = 1)
+ result_amount = 5
+/datum/chemical_reaction/green_paint/send_data()
+ return "#18A31A"
- var/datum/disease/F = new virus(0)
- var/list/data = list("viruses"= list(F))
- holder.add_reagent("blood", 20, data)
+/datum/chemical_reaction/blue_paint
+ name = "Blue paint"
+ id = "blue_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_blue" = 1)
+ result_amount = 5
- holder.add_reagent("cyanide", rand(1,10))
+/datum/chemical_reaction/blue_paint/send_data()
+ return "#247CFF"
- return
+/datum/chemical_reaction/purple_paint
+ name = "Purple paint"
+ id = "purple_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_purple" = 1)
+ result_amount = 5
-slimeteleport
- name = "Slime Teleport"
- id = "m_tele"
- result = null
- required_reagents = list("pacid" = 2, "mutagen" = 2)
- required_catalysts = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 4
- on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/purple_paint/send_data()
+ return "#CC0099"
- // Calculate new position (searches through beacons in world)
- var/obj/item/device/radio/beacon/chosen
- var/list/possible = list()
- for(var/obj/item/device/radio/beacon/W in world)
- possible += W
+/datum/chemical_reaction/grey_paint //mime
+ name = "Grey paint"
+ id = "grey_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_grey" = 1)
+ result_amount = 5
- if(possible.len > 0)
- chosen = pick(possible)
+/datum/chemical_reaction/grey_paint/send_data()
+ return "#808080"
- if(chosen)
- // Calculate previous position for transition
+/datum/chemical_reaction/brown_paint
+ name = "Brown paint"
+ id = "brown_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_brown" = 1)
+ result_amount = 5
- var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM
- var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO
+/datum/chemical_reaction/brown_paint/send_data()
+ return "#846F35"
- playsound(TO, 'sound/effects/phasein.ogg', 100, 1)
+/datum/chemical_reaction/blood_paint
+ name = "Blood paint"
+ id = "blood_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "blood" = 2)
+ result_amount = 5
- var/list/flashers = list()
- for(var/mob/living/carbon/human/M in viewers(TO, null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
- flashers += M
+/datum/chemical_reaction/blood_paint/send_data(var/datum/reagents/T)
+ var/t = T.get_data("blood")
+ if(t && t["blood_colour"])
+ return t["blood_colour"]
+ return "#FE191A" // Probably red
- var/y_distance = TO.y - FROM.y
- var/x_distance = TO.x - FROM.x
- for (var/atom/movable/A in range(2, FROM )) // iterate thru list of mobs in the area
- if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid
- if( A.anchored && !istype(A, /mob/dead/observer) ) continue // don't teleport anchored things (computers, tables, windows, grilles, etc) because this causes problems!
- // do teleport ghosts however because hell why not
+/datum/chemical_reaction/milk_paint
+ name = "Milk paint"
+ id = "milk_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "milk" = 5)
+ result_amount = 5
- var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place
- if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving
- A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z)
+/datum/chemical_reaction/milk_paint/send_data()
+ return "#F0F8FF"
- spawn()
- if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect
- var/mob/M = A
- if(M.client)
- var/obj/blueeffect = new /obj(src)
- blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH"
- blueeffect.icon = 'icons/effects/effects.dmi'
- blueeffect.icon_state = "shieldsparkles"
- blueeffect.layer = 17
- blueeffect.mouse_opacity = 0
- M.client.screen += blueeffect
- sleep(20)
- M.client.screen -= blueeffect
- qdel(blueeffect)
-slimecrit
- name = "Slime Crit"
- id = "m_tele"
- result = null
- required_reagents = list("sacid" = 1, "blood" = 1)
- required_catalysts = list("plasma" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 4
- on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/orange_juice_paint
+ name = "Orange juice paint"
+ id = "orange_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "orangejuice" = 5)
+ result_amount = 5
- var/blocked = list(/mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/clown
- )//exclusion list for things you don't want the reaction to create.
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
+/datum/chemical_reaction/orange_juice_paint/send_data()
+ return "#E78108"
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+/datum/chemical_reaction/tomato_juice_paint
+ name = "Tomato juice paint"
+ id = "tomato_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "tomatojuice" = 5)
+ result_amount = 5
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
+/datum/chemical_reaction/tomato_juice_paint/send_data()
+ return "#731008"
- for(var/i = 1, i <= created_volume, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))
-slimebork
- name = "Slime Bork"
- id = "m_tele"
- result = null
- required_reagents = list("sugar" = 1, "water" = 1)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 4
- on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/lime_juice_paint
+ name = "Lime juice paint"
+ id = "lime_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "limejuice" = 5)
+ result_amount = 5
- var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks
- // BORK BORK BORK
+/datum/chemical_reaction/lime_juice_paint/send_data()
+ return "#365E30"
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
+/datum/chemical_reaction/carrot_juice_paint
+ name = "Carrot juice paint"
+ id = "carrot_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "carrotjuice" = 5)
+ result_amount = 5
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
+/datum/chemical_reaction/carrot_juice_paint/send_data()
+ return "#973800"
- for(var/i = 1, i <= created_volume + rand(1,2), i++)
- var/chosen = pick(borks)
- var/obj/B = new chosen
- if(B)
- B.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
+/datum/chemical_reaction/berry_juice_paint
+ name = "Berry juice paint"
+ id = "berry_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "berryjuice" = 5)
+ result_amount = 5
+/datum/chemical_reaction/berry_juice_paint/send_data()
+ return "#990066"
+/datum/chemical_reaction/grape_juice_paint
+ name = "Grape juice paint"
+ id = "grape_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "grapejuice" = 5)
+ result_amount = 5
-slimechloral
- name = "Slime Chloral"
- id = "m_bunch"
- result = "chloralhydrate"
- required_reagents = list("blood" = 1, "water" = 2)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 5
-slimeretro
- name = "Slime Retro"
- id = "m_xeno"
- result = null
- required_reagents = list("sugar" = 1)
- result_amount = 1
- required_container = /obj/item/slime_core
- required_other = 5
- on_reaction(var/datum/reagents/holder, var/created_volume)
- var/datum/disease/F = new /datum/disease/dna_retrovirus(0)
- var/list/data = list("viruses"= list(F))
- holder.add_reagent("blood", 20, data)
-slimefoam
- name = "Slime Foam"
- id = "m_foam"
- result = null
- required_reagents = list("sacid" = 1)
- result_amount = 2
- required_container = /obj/item/slime_core
- required_other = 5
+/datum/chemical_reaction/grape_juice_paint/send_data()
+ return "#863333"
- on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/poisonberry_juice_paint
+ name = "Poison berry juice paint"
+ id = "poisonberry_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "poisonberryjuice" = 5)
+ result_amount = 5
+/datum/chemical_reaction/poisonberry_juice_paint/send_data()
+ return "#863353"
- var/location = get_turf(holder.my_atom)
- for(var/mob/M in viewers(5, location))
- M << "\red The solution violently bubbles!"
+/datum/chemical_reaction/watermelon_juice_paint
+ name = "Watermelon juice paint"
+ id = "watermelon_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "watermelonjuice" = 5)
+ result_amount = 5
- location = get_turf(holder.my_atom)
+/datum/chemical_reaction/watermelon_juice_paint/send_data()
+ return "#B83333"
- for(var/mob/M in viewers(5, location))
- M << "\red The solution spews out foam!"
+/datum/chemical_reaction/lemon_juice_paint
+ name = "Lemon juice paint"
+ id = "lemon_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "lemonjuice" = 5)
+ result_amount = 5
- //world << "Holder volume is [holder.total_volume]"
- //for(var/datum/reagent/R in holder.reagent_list)
- // world << "[R.name] = [R.volume]"
+/datum/chemical_reaction/lemon_juice_paint/send_data()
+ return "#AFAF00"
- var/datum/effect/effect/system/foam_spread/s = new()
- s.set_up(created_volume, location, holder, 0)
- s.start()
- holder.clear_reagents()
- return
-*/
-/////////////////////////////////////////////NEW SLIME CORE REACTIONS/////////////////////////////////////////////
+/datum/chemical_reaction/banana_juice_paint
+ name = "Banana juice paint"
+ id = "banana_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "banana" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/banana_juice_paint/send_data()
+ return "#C3AF00"
+
+/datum/chemical_reaction/potato_juice_paint
+ name = "Potato juice paint"
+ id = "potato_juice_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "potatojuice" = 5)
+ result_amount = 5
+
+/datum/chemical_reaction/potato_juice_paint/send_data()
+ return "#302000"
+
+/datum/chemical_reaction/carbon_paint
+ name = "Carbon paint"
+ id = "carbon_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "carbon" = 1)
+ result_amount = 5
+
+/datum/chemical_reaction/carbon_paint/send_data()
+ return "#333333"
+
+/datum/chemical_reaction/aluminum_paint
+ name = "Aluminum paint"
+ id = "aluminum_paint"
+ result = "paint"
+ required_reagents = list("plasticide" = 1, "water" = 3, "aluminum" = 1)
+ result_amount = 5
+
+/datum/chemical_reaction/aluminum_paint/send_data()
+ return "#F0F8FF"
+
+/* Slime cores */
+
+/datum/chemical_reaction/slime
+ var/required = null
+
+/datum/chemical_reaction/slime/can_happen(var/datum/reagents/holder)
+ if(holder.my_atom && istype(holder.my_atom, required))
+ var/obj/item/slime_extract/T = holder.my_atom
+ if(T.Uses > 0)
+ return ..()
+ return 0
+
+/datum/chemical_reaction/slime/on_reaction(var/datum/reagents/holder)
+ var/obj/item/slime_extract/T = holder.my_atom
+ T.Uses--
+ if(T.Uses <= 0)
+ T.visible_message("\icon[T]\The [T]'s power is consumed in the reaction.")
+ T.name = "used slime extract"
+ T.desc = "This extract has been used up."
//Grey
-/datum/chemical_reaction/slimespawn
+/datum/chemical_reaction/slime/spawn
name = "Slime Spawn"
id = "m_spawn"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
+ required = /obj/item/slime_extract/grey
-/datum/chemical_reaction/slimespawn/on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it!"), 1)
+/datum/chemical_reaction/slime/spawn/on_reaction(var/datum/reagents/holder)
+ holder.my_atom.visible_message("Infused with phoron, the core begins to quiver and grow, and soon a new baby slime emerges from it!")
var/mob/living/carbon/slime/S = new /mob/living/carbon/slime
S.loc = get_turf(holder.my_atom)
+ ..()
-
-/datum/chemical_reaction/slimemonkey
+/datum/chemical_reaction/slime/monkey
name = "Slime Monkey"
id = "m_monkey"
result = null
- required_reagents = list("blood" = 5)
+ required_reagents = list("blood" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/grey
- required_other = 1
+ required = /obj/item/slime_extract/grey
-/datum/chemical_reaction/slimemonkey/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/monkey/on_reaction(var/datum/reagents/holder)
for(var/i = 1, i <= 3, i++)
var /obj/item/weapon/reagent_containers/food/snacks/monkeycube/M = new /obj/item/weapon/reagent_containers/food/snacks/monkeycube
M.loc = get_turf(holder.my_atom)
+ ..()
//Green
-/datum/chemical_reaction/slimemutate
+/datum/chemical_reaction/slime/mutate
name = "Mutation Toxin"
id = "mutationtoxin"
result = "mutationtoxin"
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/green
+ required = /obj/item/slime_extract/green
//Metal
-/datum/chemical_reaction/slimemetal
+/datum/chemical_reaction/slime/metal
name = "Slime Metal"
id = "m_metal"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/metal
- required_other = 1
+ required = /obj/item/slime_extract/metal
-/datum/chemical_reaction/slimemetal/on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal
+/datum/chemical_reaction/slime/metal/on_reaction(var/datum/reagents/holder)
+ var/obj/item/stack/material/steel/M = new /obj/item/stack/material/steel
M.amount = 15
M.loc = get_turf(holder.my_atom)
- var/obj/item/stack/sheet/plasteel/P = new /obj/item/stack/sheet/plasteel
+ var/obj/item/stack/material/plasteel/P = new /obj/item/stack/material/plasteel
P.amount = 5
P.loc = get_turf(holder.my_atom)
+ ..()
-//Gold
-/datum/chemical_reaction/slimecrit
+//Gold - removed
+/datum/chemical_reaction/slime/crit
name = "Slime Crit"
id = "m_tele"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/gold
- required_other = 1
-
-/datum/chemical_reaction/slimecrit/on_reaction(var/datum/reagents/holder)
-
- /*var/blocked = list(/mob/living/simple_animal/hostile,
- /mob/living/simple_animal/hostile/pirate,
- /mob/living/simple_animal/hostile/pirate/ranged,
- /mob/living/simple_animal/hostile/russian,
- /mob/living/simple_animal/hostile/russian/ranged,
- /mob/living/simple_animal/hostile/syndicate,
- /mob/living/simple_animal/hostile/syndicate/melee,
- /mob/living/simple_animal/hostile/syndicate/melee/space,
- /mob/living/simple_animal/hostile/syndicate/ranged,
- /mob/living/simple_animal/hostile/syndicate/ranged/space,
- /mob/living/simple_animal/hostile/alien/queen/large,
- /mob/living/simple_animal/hostile/faithless,
- /mob/living/simple_animal/hostile/panther,
- /mob/living/simple_animal/hostile/snake,
- /mob/living/simple_animal/hostile/retaliate,
- /mob/living/simple_animal/hostile/retaliate/clown
- )//exclusion list for things you don't want the reaction to create.
- var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs
-
- playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
- for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
- flick("e_flash", M.flash)
-
- for(var/i = 1, i <= 5, i++)
- var/chosen = pick(critters)
- var/mob/living/simple_animal/hostile/C = new chosen
- C.faction = "slimesummon"
- C.loc = get_turf(holder.my_atom)
- if(prob(50))
- for(var/j = 1, j <= rand(1, 3), j++)
- step(C, pick(NORTH,SOUTH,EAST,WEST))*/
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime core fizzles disappointingly,"), 1)
+ required = /obj/item/slime_extract/gold
+ mix_message = "The slime core fizzles disappointingly."
//Silver
-/datum/chemical_reaction/slimebork
+/datum/chemical_reaction/slime/bork
name = "Slime Bork"
id = "m_tele2"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/silver
- required_other = 1
-
-/datum/chemical_reaction/slimebork/on_reaction(var/datum/reagents/holder)
+ required = /obj/item/slime_extract/silver
+/datum/chemical_reaction/slime/bork/on_reaction(var/datum/reagents/holder)
var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks
- // BORK BORK BORK
-
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
-
for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null))
- if(M:eyecheck() <= 0)
+ if(M.eyecheck() <= 0)
flick("e_flash", M.flash)
for(var/i = 1, i <= 4 + rand(1,2), i++)
@@ -1130,444 +1086,237 @@ slimefoam
B.loc = get_turf(holder.my_atom)
if(prob(50))
for(var/j = 1, j <= rand(1, 3), j++)
- step(B, pick(NORTH,SOUTH,EAST,WEST))
-
+ step(B, pick(NORTH, SOUTH, EAST, WEST))
+ ..()
//Blue
-/datum/chemical_reaction/slimefrost
+/datum/chemical_reaction/slime/frost
name = "Slime Frost Oil"
id = "m_frostoil"
result = "frostoil"
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 10
- required_container = /obj/item/slime_extract/blue
- required_other = 1
+ required = /obj/item/slime_extract/blue
+
//Dark Blue
-/datum/chemical_reaction/slimefreeze
+/datum/chemical_reaction/slime/freeze
name = "Slime Freeze"
id = "m_freeze"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/darkblue
- required_other = 1
+ required = /obj/item/slime_extract/darkblue
+ mix_message = "The slime extract begins to vibrate violently!"
-/datum/chemical_reaction/slimefreeze/on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+/datum/chemical_reaction/slime/freeze/on_reaction(var/datum/reagents/holder)
+ ..()
sleep(50)
playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1)
for(var/mob/living/M in range (get_turf(holder.my_atom), 7))
M.bodytemperature -= 140
- M << "\blue You feel a chill!"
+ M << "You feel a chill!"
//Orange
-/datum/chemical_reaction/slimecasp
+/datum/chemical_reaction/slime/casp
name = "Slime Capsaicin Oil"
id = "m_capsaicinoil"
result = "capsaicin"
- required_reagents = list("blood" = 5)
+ required_reagents = list("blood" = 1)
result_amount = 10
- required_container = /obj/item/slime_extract/orange
- required_other = 1
+ required = /obj/item/slime_extract/orange
-/datum/chemical_reaction/slimefire
+/datum/chemical_reaction/slime/fire
name = "Slime fire"
id = "m_fire"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/orange
- required_other = 1
+ required = /obj/item/slime_extract/orange
+ mix_message = "The slime extract begins to vibrate violently!"
-/datum/chemical_reaction/slimefire/on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+/datum/chemical_reaction/slime/fire/on_reaction(var/datum/reagents/holder)
+ ..()
sleep(50)
var/turf/location = get_turf(holder.my_atom.loc)
- for(var/turf/simulated/floor/target_tile in range(0,location))
+ for(var/turf/simulated/floor/target_tile in range(0, location))
target_tile.assume_gas("phoron", 25, 1400)
- spawn (0) target_tile.hotspot_expose(700, 400)
+ spawn (0)
+ target_tile.hotspot_expose(700, 400)
//Yellow
-/datum/chemical_reaction/slimeoverload
+/datum/chemical_reaction/slime/overload
name = "Slime EMP"
id = "m_emp"
result = null
- required_reagents = list("blood" = 5)
+ required_reagents = list("blood" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
+ required = /obj/item/slime_extract/yellow
-/datum/chemical_reaction/slimeoverload/on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/slime/overload/on_reaction(var/datum/reagents/holder, var/created_volume)
+ ..()
empulse(get_turf(holder.my_atom), 3, 7)
-
-/datum/chemical_reaction/slimecell
+/datum/chemical_reaction/slime/cell
name = "Slime Powercell"
id = "m_cell"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
+ required = /obj/item/slime_extract/yellow
-/datum/chemical_reaction/slimecell/on_reaction(var/datum/reagents/holder, var/created_volume)
+/datum/chemical_reaction/slime/cell/on_reaction(var/datum/reagents/holder, var/created_volume)
var/obj/item/weapon/cell/slime/P = new /obj/item/weapon/cell/slime
P.loc = get_turf(holder.my_atom)
-/datum/chemical_reaction/slimeglow
+/datum/chemical_reaction/slime/glow
name = "Slime Glow"
id = "m_glow"
result = null
- required_reagents = list("water" = 5)
+ required_reagents = list("water" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/yellow
- required_other = 1
+ required = /obj/item/slime_extract/yellow
+ mix_message = "The contents of the slime core harden and begin to emit a warm, bright light."
-/datum/chemical_reaction/slimeglow/on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The contents of the slime core harden and begin to emit a warm, bright light."), 1)
+/datum/chemical_reaction/slime/glow/on_reaction(var/datum/reagents/holder, var/created_volume)
+ ..()
var/obj/item/device/flashlight/slime/F = new /obj/item/device/flashlight/slime
F.loc = get_turf(holder.my_atom)
//Purple
-
-/datum/chemical_reaction/slimepsteroid
+/datum/chemical_reaction/slime/psteroid
name = "Slime Steroid"
id = "m_steroid"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/purple
- required_other = 1
+ required = /obj/item/slime_extract/purple
-/datum/chemical_reaction/slimepsteroid/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/psteroid/on_reaction(var/datum/reagents/holder, var/created_volume)
+ ..()
var/obj/item/weapon/slimesteroid/P = new /obj/item/weapon/slimesteroid
P.loc = get_turf(holder.my_atom)
-
-
-/datum/chemical_reaction/slimejam
+/datum/chemical_reaction/slime/jam
name = "Slime Jam"
id = "m_jam"
result = "slimejelly"
- required_reagents = list("sugar" = 5)
+ required_reagents = list("sugar" = 1)
result_amount = 10
- required_container = /obj/item/slime_extract/purple
- required_other = 1
-
+ required = /obj/item/slime_extract/purple
//Dark Purple
-/datum/chemical_reaction/slimeplasma
+/datum/chemical_reaction/slime/plasma
name = "Slime Plasma"
id = "m_plasma"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/darkpurple
- required_other = 1
+ required = /obj/item/slime_extract/darkpurple
-/datum/chemical_reaction/slimeplasma/on_reaction(var/datum/reagents/holder)
- var/obj/item/stack/sheet/mineral/phoron/P = new /obj/item/stack/sheet/mineral/phoron
+/datum/chemical_reaction/slime/plasma/on_reaction(var/datum/reagents/holder)
+ ..()
+ var/obj/item/stack/material/phoron/P = new /obj/item/stack/material/phoron
P.amount = 10
P.loc = get_turf(holder.my_atom)
//Red
-/datum/chemical_reaction/slimeglycerol
+/datum/chemical_reaction/slime/glycerol
name = "Slime Glycerol"
id = "m_glycerol"
result = "glycerol"
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 8
- required_container = /obj/item/slime_extract/red
- required_other = 1
+ required = /obj/item/slime_extract/red
-
-/datum/chemical_reaction/slimebloodlust
+/datum/chemical_reaction/slime/bloodlust
name = "Bloodlust"
id = "m_bloodlust"
result = null
- required_reagents = list("blood" = 5)
+ required_reagents = list("blood" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/red
- required_other = 1
+ required = /obj/item/slime_extract/red
-/datum/chemical_reaction/slimebloodlust/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/bloodlust/on_reaction(var/datum/reagents/holder)
+ ..()
for(var/mob/living/carbon/slime/slime in viewers(get_turf(holder.my_atom), null))
slime.rabid = 1
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The [slime] is driven into a frenzy!"), 1)
+ slime.visible_message("The [slime] is driven into a frenzy!")
//Pink
-/datum/chemical_reaction/slimeppotion
+/datum/chemical_reaction/slime/ppotion
name = "Slime Potion"
id = "m_potion"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/pink
- required_other = 1
+ required = /obj/item/slime_extract/pink
-/datum/chemical_reaction/slimeppotion/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/ppotion/on_reaction(var/datum/reagents/holder)
+ ..()
var/obj/item/weapon/slimepotion/P = new /obj/item/weapon/slimepotion
P.loc = get_turf(holder.my_atom)
-
//Black
-/datum/chemical_reaction/slimemutate2
+/datum/chemical_reaction/slime/mutate2
name = "Advanced Mutation Toxin"
id = "mutationtoxin2"
result = "amutationtoxin"
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_other = 1
- required_container = /obj/item/slime_extract/black
+ required = /obj/item/slime_extract/black
//Oil
-/datum/chemical_reaction/slimeexplosion
+/datum/chemical_reaction/slime/explosion
name = "Slime Explosion"
id = "m_explosion"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/oil
- required_other = 1
+ required = /obj/item/slime_extract/oil
+ mix_message = "The slime extract begins to vibrate violently!"
-/datum/chemical_reaction/slimeexplosion/on_reaction(var/datum/reagents/holder)
- for(var/mob/O in viewers(get_turf(holder.my_atom), null))
- O.show_message(text("\red The slime extract begins to vibrate violently !"), 1)
+/datum/chemical_reaction/slime/explosion/on_reaction(var/datum/reagents/holder)
+ ..()
sleep(50)
- explosion(get_turf(holder.my_atom), 1 ,3, 6)
+ explosion(get_turf(holder.my_atom), 1, 3, 6)
+
//Light Pink
-/datum/chemical_reaction/slimepotion2
+/datum/chemical_reaction/slime/potion2
name = "Slime Potion 2"
id = "m_potion2"
result = null
result_amount = 1
- required_container = /obj/item/slime_extract/lightpink
- required_reagents = list("phoron" = 5)
- required_other = 1
+ required = /obj/item/slime_extract/lightpink
+ required_reagents = list("phoron" = 1)
-/datum/chemical_reaction/slimepotion2/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/potion2/on_reaction(var/datum/reagents/holder)
+ ..()
var/obj/item/weapon/slimepotion2/P = new /obj/item/weapon/slimepotion2
P.loc = get_turf(holder.my_atom)
+
//Adamantine
-/datum/chemical_reaction/slimegolem
+/datum/chemical_reaction/slime/golem
name = "Slime Golem"
id = "m_golem"
result = null
- required_reagents = list("phoron" = 5)
+ required_reagents = list("phoron" = 1)
result_amount = 1
- required_container = /obj/item/slime_extract/adamantine
- required_other = 1
+ required = /obj/item/slime_extract/adamantine
-/datum/chemical_reaction/slimegolem/on_reaction(var/datum/reagents/holder)
+/datum/chemical_reaction/slime/golem/on_reaction(var/datum/reagents/holder)
+ ..()
var/obj/effect/golemrune/Z = new /obj/effect/golemrune
Z.loc = get_turf(holder.my_atom)
Z.announce_to_ghosts()
-//////////////////////////////////////////PAINT///////////////////////////////////////////
-//Crayon dust -> paint
-/datum/chemical_reaction/red_paint
- name = "Red paint"
- id = "red_paint"
- result = "paint"
- resultcolor = "#FE191A"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_red" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/orange_paint
- name = "Orange paint"
- id = "orange_paint"
- result = "paint"
- resultcolor = "#FFBE4F"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_orange" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/yellow_paint
- name = "Yellow paint"
- id = "yellow_paint"
- result = "paint"
- resultcolor = "#FDFE7D"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_yellow" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/green_paint
- name = "Green paint"
- id = "green_paint"
- result = "paint"
- resultcolor = "#18A31A"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_green" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/blue_paint
- name = "Blue paint"
- id = "blue_paint"
- result = "paint"
- resultcolor = "#247CFF"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_blue" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/purple_paint
- name = "Purple paint"
- id = "purple_paint"
- result = "paint"
- resultcolor = "#CC0099"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_purple" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/grey_paint //mime
- name = "Grey paint"
- id = "grey_paint"
- result = "paint"
- resultcolor = "#808080"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_grey" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/brown_paint
- name = "Brown paint"
- id = "brown_paint"
- result = "paint"
- resultcolor = "#846F35"
- required_reagents = list("plasticide" = 1, "water" = 3, "crayon_dust_brown" = 1)
- result_amount = 5
-
-//Ghetto reactions
-
-/* Ideally the paint should take on the blood's colour (for each of the species)
-but I could not think of a way. - RKF
-
-blood_paint
- name = "Blood paint"
- id = "blood_paint"
- result = "paint"
- resultcolor = "#C80000"
- required_reagents = list("plasticide" = 1, "water" = 3, "blood" = 2)
- result_amount = 5
-*/
-/datum/chemical_reaction/milk_paint
- name = "Milk paint"
- id = "milk_paint"
- result = "paint"
- resultcolor = "#F0F8FF"
- required_reagents = list("plasticide" = 1, "water" = 3, "milk" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/orange_juice_paint
- name = "Orange juice paint"
- id = "orange_juice_paint"
- result = "paint"
- resultcolor = "#E78108"
- required_reagents = list("plasticide" = 1, "water" = 3, "orangejuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/tomato_juice_paint
- name = "Tomato juice paint"
- id = "tomato_juice_paint"
- result = "paint"
- resultcolor = "#731008"
- required_reagents = list("plasticide" = 1, "water" = 3, "tomatojuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/lime_juice_paint
- name = "Lime juice paint"
- id = "lime_juice_paint"
- result = "paint"
- resultcolor = "#365E30"
- required_reagents = list("plasticide" = 1, "water" = 3, "limejuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/carrot_juice_paint
- name = "Carrot juice paint"
- id = "carrot_juice_paint"
- result = "paint"
- resultcolor = "#973800"
- required_reagents = list("plasticide" = 1, "water" = 3, "carrotjuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/berry_juice_paint
- name = "Berry juice paint"
- id = "berry_juice_paint"
- result = "paint"
- resultcolor = "#990066"
- required_reagents = list("plasticide" = 1, "water" = 3, "berryjuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/grape_juice_paint
- name = "Grape juice paint"
- id = "grape_juice_paint"
- result = "paint"
- resultcolor = "#863333"
- required_reagents = list("plasticide" = 1, "water" = 3, "grapejuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/poisonberry_juice_paint
- name = "Poison berry juice paint"
- id = "poisonberry_juice_paint"
- result = "paint"
- resultcolor = "#863353"
- required_reagents = list("plasticide" = 1, "water" = 3, "poisonberryjuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/watermelon_juice_paint
- name = "Watermelon juice paint"
- id = "watermelon_juice_paint"
- result = "paint"
- resultcolor = "#B83333"
- required_reagents = list("plasticide" = 1, "water" = 3, "watermelonjuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/lemon_juice_paint
- name = "Lemon juice paint"
- id = "lemon_juice_paint"
- result = "paint"
- resultcolor = "#AFAF00"
- required_reagents = list("plasticide" = 1, "water" = 3, "lemonjuice" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/banana_juice_paint
- name = "Banana juice paint"
- id = "banana_juice_paint"
- result = "paint"
- resultcolor = "#C3AF00"
- required_reagents = list("plasticide" = 1, "water" = 3, "banana" = 5)
- result_amount = 5
-
-/datum/chemical_reaction/potato_juice_paint
- name = "Potato juice paint"
- id = "potato_juice_paint"
- result = "paint"
- resultcolor = "#302000"
- required_reagents = list("plasticide" = 1, "water" = 3, "potatojuice" = 5)
- result_amount = 5
-
-//Other paint
-
-/datum/chemical_reaction/carbon_paint
- name = "Carbon paint"
- id = "carbon_paint"
- result = "paint"
- resultcolor = "#333333"
- required_reagents = list("plasticide" = 1, "water" = 3, "carbon" = 1)
- result_amount = 5
-
-/datum/chemical_reaction/aluminum_paint
- name = "Aluminum paint"
- id = "aluminum_paint"
- result = "paint"
- resultcolor = "#F0F8FF"
- required_reagents = list("plasticide" = 1, "water" = 3, "aluminum" = 1)
- result_amount = 5
-
-//////////////////////////////////////////FOOD MIXTURES////////////////////////////////////
+/* Food */
/datum/chemical_reaction/tofu
name = "Tofu"
id = "tofu"
result = null
required_reagents = list("soymilk" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/tofu/on_reaction(var/datum/reagents/holder, var/created_volume)
@@ -1621,12 +1370,13 @@ blood_paint
id = "cheesewheel"
result = null
required_reagents = list("milk" = 40)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 1
/datum/chemical_reaction/cheesewheel/on_reaction(var/datum/reagents/holder, var/created_volume)
var/location = get_turf(holder.my_atom)
- new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel(location)
return
/datum/chemical_reaction/meatball
@@ -1637,7 +1387,9 @@ blood_paint
result_amount = 3
/datum/chemical_reaction/meatball/on_reaction(var/datum/reagents/holder, var/created_volume)
- new /obj/item/weapon/reagent_containers/food/snacks/meatball(get_turf(holder.my_atom))
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/meatball(location)
return
/datum/chemical_reaction/dough
@@ -1648,9 +1400,9 @@ blood_paint
result_amount = 1
/datum/chemical_reaction/dough/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/turf/T = get_turf(holder.my_atom)
- for(var/i = 1 to created_volume)
- new /obj/item/weapon/reagent_containers/food/snacks/dough(T)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/dough(location)
return
/datum/chemical_reaction/syntiflesh
@@ -1661,9 +1413,9 @@ blood_paint
result_amount = 1
/datum/chemical_reaction/syntiflesh/on_reaction(var/datum/reagents/holder, var/created_volume)
- var/turf/T = get_turf(holder.my_atom)
- for(var/i = 1 to created_volume)
- new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(T)
+ var/location = get_turf(holder.my_atom)
+ for(var/i = 1, i <= created_volume, i++)
+ new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location)
return
/datum/chemical_reaction/hot_ramen
@@ -1680,9 +1432,7 @@ blood_paint
required_reagents = list("capsaicin" = 1, "hot_ramen" = 6)
result_amount = 6
-
-////////////////////////////////////////// COCKTAILS //////////////////////////////////////
-
+/* Alcohol */
/datum/chemical_reaction/goldschlager
name = "Goldschlager"
@@ -1731,7 +1481,7 @@ blood_paint
id = "moonshine"
result = "moonshine"
required_reagents = list("nutriment" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/grenadine
@@ -1739,7 +1489,7 @@ blood_paint
id = "grenadine"
result = "grenadine"
required_reagents = list("berryjuice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/wine
@@ -1747,7 +1497,7 @@ blood_paint
id = "wine"
result = "wine"
required_reagents = list("grapejuice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/pwine
@@ -1755,7 +1505,7 @@ blood_paint
id = "pwine"
result = "pwine"
required_reagents = list("poisonberryjuice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/melonliquor
@@ -1763,7 +1513,7 @@ blood_paint
id = "melonliquor"
result = "melonliquor"
required_reagents = list("watermelonjuice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/bluecuracao
@@ -1771,7 +1521,7 @@ blood_paint
id = "bluecuracao"
result = "bluecuracao"
required_reagents = list("orangejuice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/spacebeer
@@ -1779,7 +1529,7 @@ blood_paint
id = "spacebeer"
result = "beer"
required_reagents = list("cornoil" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/vodka
@@ -1787,14 +1537,15 @@ blood_paint
id = "vodka"
result = "vodka"
required_reagents = list("potato" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
+
/datum/chemical_reaction/sake
name = "Sake"
id = "sake"
result = "sake"
required_reagents = list("rice" = 10)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 10
/datum/chemical_reaction/kahlua
@@ -1802,7 +1553,7 @@ blood_paint
id = "kahlua"
result = "kahlua"
required_reagents = list("coffee" = 5, "sugar" = 5)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 5
/datum/chemical_reaction/gin_tonic
@@ -1819,10 +1570,10 @@ blood_paint
required_reagents = list("rum" = 2, "cola" = 1)
result_amount = 3
-/datum/chemical_reaction/martini
+/datum/chemical_reaction/classicmartini
name = "Classic Martini"
- id = "martini"
- result = "martini"
+ id = "classicmartini"
+ result = "classicmartini"
required_reagents = list("gin" = 2, "vermouth" = 1)
result_amount = 3
@@ -2033,7 +1784,7 @@ blood_paint
name = "Allies Cocktail"
id = "alliescocktail"
result = "alliescocktail"
- required_reagents = list("martini" = 1, "vodka" = 1)
+ required_reagents = list("classicmartini" = 1, "vodka" = 1)
result_amount = 2
/datum/chemical_reaction/demonsblood
@@ -2071,10 +1822,6 @@ blood_paint
required_reagents = list("grapejuice" = 2, "cola" = 1)
result_amount = 3
-
-
-////DRINKS THAT REQUIRED IMPROVED SPRITES BELOW:: -Agouri/////
-
/datum/chemical_reaction/sbiten
name = "Sbiten"
id = "sbiten"
@@ -2094,7 +1841,7 @@ blood_paint
id = "mead"
result = "mead"
required_reagents = list("sugar" = 1, "water" = 1)
- required_catalysts = list("enzyme" = 5)
+ catalysts = list("enzyme" = 5)
result_amount = 2
/datum/chemical_reaction/iced_beer
@@ -2278,3 +2025,31 @@ blood_paint
result = "suidream"
required_reagents = list("space_up" = 2, "bluecuracao" = 1, "melonliquor" = 1)
result_amount = 4
+
+/* Removed xenoarcheology stuff
+datum
+ chemical_reaction
+ lithiumsodiumtungstate //LiNa2WO4, not the easiest chem to mix
+ name = "Lithium Sodium Tungstate"
+ id = "lithiumsodiumtungstate"
+ result = "lithiumsodiumtungstate"
+ required_reagents = list("lithium" = 1, "sodium" = 2, "tungsten" = 1, "acetone" = 4)
+ result_amount = 8
+
+ density_separated_liquid
+ name = "Density separated sample"
+ id = "density_separated_sample"
+ result = "density_separated_sample"
+ secondary_results = list("chemical_waste" = 1)
+ required_reagents = list("ground_rock" = 1, "lithiumsodiumtungstate" = 2)
+ result_amount = 2
+
+ analysis_liquid
+ name = "Analysis sample"
+ id = "analysis_sample"
+ result = "analysis_sample"
+ secondary_results = list("chemical_waste" = 1)
+ required_reagents = list("density_separated_sample" = 5)
+ result_amount = 4
+ requires_heating = 1
+*/
diff --git a/code/modules/reagents/dispenser/cartridge.dm b/code/modules/reagents/dispenser/cartridge.dm
index fdb5e1fe766..569da4cc731 100644
--- a/code/modules/reagents/dispenser/cartridge.dm
+++ b/code/modules/reagents/dispenser/cartridge.dm
@@ -30,19 +30,23 @@
if(!is_open_container())
user << "The cap is sealed."
-/obj/item/weapon/reagent_containers/chem_disp_cartridge/verb/setLabel(L as text)
+/obj/item/weapon/reagent_containers/chem_disp_cartridge/verb/verb_set_label(L as text)
set name = "Set Cartridge Label"
set category = "Object"
set src in view(usr, 1)
+
+ setLabel(L, usr)
+
+/obj/item/weapon/reagent_containers/chem_disp_cartridge/proc/setLabel(L, mob/user = null)
if(L)
- if(usr)
- usr << "You set the label on \the [src] to '[L]'."
+ if(user)
+ user << "You set the label on \the [src] to '[L]'."
label = L
name = "[initial(name)] - '[L]'"
else
- if(usr)
- usr << "You clear the label on \the [src]."
+ if(user)
+ user << "You clear the label on \the [src]."
label = ""
name = initial(name)
@@ -87,4 +91,4 @@
user << "You transfer [trans] units of the solution to \the [target]."
else
- return ..()
\ No newline at end of file
+ return ..()
diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm
index 007660c1e9a..3683a89af05 100644
--- a/code/modules/reagents/dispenser/cartridge_presets.dm
+++ b/code/modules/reagents/dispenser/cartridge_presets.dm
@@ -10,18 +10,17 @@
sugar spawn_reagent = "sugar"
// Chemistry
- hydrogen spawn_reagent = "hydrogen"
+ hydrazine spawn_reagent = "hydrazine"
lithium spawn_reagent = "lithium"
carbon spawn_reagent = "carbon"
- nitrogen spawn_reagent = "nitrogen"
- oxygen spawn_reagent = "oxygen"
- fluorine spawn_reagent = "fluorine"
+ ammonia spawn_reagent = "ammonia"
+ acetone spawn_reagent = "acetone"
sodium spawn_reagent = "sodium"
aluminum spawn_reagent = "aluminum"
silicon spawn_reagent = "silicon"
phosphorus spawn_reagent = "phosphorus"
sulfur spawn_reagent = "sulfur"
- chlorine spawn_reagent = "chlorine"
+ hclacid spawn_reagent = "hclacid"
potassium spawn_reagent = "potassium"
iron spawn_reagent = "iron"
copper spawn_reagent = "copper"
diff --git a/code/modules/reagents/dispenser/cartridge_spawn.dm b/code/modules/reagents/dispenser/cartridge_spawn.dm
new file mode 100644
index 00000000000..730e191891c
--- /dev/null
+++ b/code/modules/reagents/dispenser/cartridge_spawn.dm
@@ -0,0 +1,13 @@
+/client/proc/spawn_chemdisp_cartridge(size in list("small", "medium", "large"), reagent in chemical_reagents_list)
+ set name = "Spawn Chemical Dispenser Cartridge"
+ set category = "Admin"
+
+ var/obj/item/weapon/reagent_containers/chem_disp_cartridge/C
+ switch(size)
+ if("small") C = new /obj/item/weapon/reagent_containers/chem_disp_cartridge/small(usr.loc)
+ if("medium") C = new /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium(usr.loc)
+ if("large") C = new /obj/item/weapon/reagent_containers/chem_disp_cartridge(usr.loc)
+ C.reagents.add_reagent(reagent, C.volume)
+ var/datum/reagent/R = chemical_reagents_list[reagent]
+ C.setLabel(R.name)
+ log_admin("[key_name(usr)] spawned a [size] reagent container containing [reagent] at ([usr.x],[usr.y],[usr.z])")
diff --git a/code/modules/reagents/dispenser/dispenser_presets.dm b/code/modules/reagents/dispenser/dispenser_presets.dm
index 60d30506920..01c92fcb662 100644
--- a/code/modules/reagents/dispenser/dispenser_presets.dm
+++ b/code/modules/reagents/dispenser/dispenser_presets.dm
@@ -1,17 +1,16 @@
/obj/machinery/chemical_dispenser/full
spawn_cartridges = list(
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrazine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/ammonia,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/acetone,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/hclacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper,
diff --git a/code/modules/reagents/dispenser/supply.dm b/code/modules/reagents/dispenser/supply.dm
index f208991712f..b413242fa49 100644
--- a/code/modules/reagents/dispenser/supply.dm
+++ b/code/modules/reagents/dispenser/supply.dm
@@ -31,18 +31,17 @@
/datum/supply_packs/reagents
name = "Chemistry dispenser refill"
contains = list(
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrazine,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/ammonia,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/acetone,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur,
- /obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine,
+ /obj/item/weapon/reagent_containers/chem_disp_cartridge/hclacid,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/iron,
/obj/item/weapon/reagent_containers/chem_disp_cartridge/copper,
@@ -144,7 +143,7 @@
_tname {\
name = _name ;\
containername = _cname ;\
- containertype = /obj/structure/closet/crate/secure;\
+ containertype = /obj/structure/closet/crate;\
cost = _cost ;\
contains = list( _type , _type );\
group = "Reagent Cartridges"\
@@ -153,18 +152,17 @@
// Chemistry-restricted (raw reagents excluding sugar/water)
// Datum path Contents type Supply pack name Container name Cost Container access
-SEC_PACK(hydrogen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrogen, "Reagent refill - Hydrogen", "hydrogen reagent cartridge crate", 15, access_chemistry)
+SEC_PACK(hydrazine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/hydrazine, "Reagent refill - Hydrazine", "hydrazine reagent cartridge crate", 15, access_chemistry)
SEC_PACK(lithium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/lithium, "Reagent refill - Lithium", "lithium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(carbon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/carbon, "Reagent refill - Carbon", "carbon reagent cartridge crate", 15, access_chemistry)
-SEC_PACK(nitrogen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/nitrogen, "Reagent refill - Nitrogen", "nitrogen reagent cartridge crate", 15, access_chemistry)
-SEC_PACK(oxygen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/oxygen, "Reagent refill - Oxygen", "oxygen reagent cartridge crate", 15, access_chemistry)
-SEC_PACK(fluorine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/fluorine, "Reagent refill - Fluorine", "fluorine reagent cartridge crate", 15, access_chemistry)
+SEC_PACK(ammonia, /obj/item/weapon/reagent_containers/chem_disp_cartridge/ammonia, "Reagent refill - Ammonia", "ammonia reagent cartridge crate", 15, access_chemistry)
+SEC_PACK(oxygen, /obj/item/weapon/reagent_containers/chem_disp_cartridge/acetone, "Reagent refill - Acetone", "acetone reagent cartridge crate", 15, access_chemistry)
SEC_PACK(sodium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sodium, "Reagent refill - Sodium", "sodium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(aluminium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/aluminum, "Reagent refill - Aluminum", "aluminum reagent cartridge crate", 15, access_chemistry)
SEC_PACK(silicon, /obj/item/weapon/reagent_containers/chem_disp_cartridge/silicon, "Reagent refill - Silicon", "silicon reagent cartridge crate", 15, access_chemistry)
SEC_PACK(phosphorus,/obj/item/weapon/reagent_containers/chem_disp_cartridge/phosphorus, "Reagent refill - Phosphorus", "phosphorus reagent cartridge crate", 15, access_chemistry)
SEC_PACK(sulfur, /obj/item/weapon/reagent_containers/chem_disp_cartridge/sulfur, "Reagent refill - Sulfur", "sulfur reagent cartridge crate", 15, access_chemistry)
-SEC_PACK(chlorine, /obj/item/weapon/reagent_containers/chem_disp_cartridge/chlorine, "Reagent refill - Chlorine", "chlorine reagent cartridge crate", 15, access_chemistry)
+SEC_PACK(hclacid, /obj/item/weapon/reagent_containers/chem_disp_cartridge/hclacid, "Reagent refill - Hydrochloric Acid", "hydrochloric acid reagent cartridge crate", 15, access_chemistry)
SEC_PACK(potassium, /obj/item/weapon/reagent_containers/chem_disp_cartridge/potassium, "Reagent refill - Potassium", "potassium reagent cartridge crate", 15, access_chemistry)
SEC_PACK(iron, /obj/item/weapon/reagent_containers/chem_disp_cartridge/iron, "Reagent refill - Iron", "iron reagent cartridge crate", 15, access_chemistry)
SEC_PACK(copper, /obj/item/weapon/reagent_containers/chem_disp_cartridge/copper, "Reagent refill - Copper", "copper reagent cartridge crate", 15, access_chemistry)
diff --git a/code/modules/reagents/reagent_containers.dm b/code/modules/reagents/reagent_containers.dm
index 72bb60b4c62..17de69ae346 100644
--- a/code/modules/reagents/reagent_containers.dm
+++ b/code/modules/reagents/reagent_containers.dm
@@ -13,39 +13,142 @@
set category = "Object"
set src in range(0)
var/N = input("Amount per transfer from this:","[src]") as null|anything in possible_transfer_amounts
- if (N)
+ if(N)
amount_per_transfer_from_this = N
/obj/item/weapon/reagent_containers/New()
..()
- if (!possible_transfer_amounts)
+ if(!possible_transfer_amounts)
src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
- var/datum/reagents/R = new/datum/reagents(volume)
- reagents = R
- R.my_atom = src
+ create_reagents(volume)
/obj/item/weapon/reagent_containers/attack_self(mob/user as mob)
return
/obj/item/weapon/reagent_containers/attack(mob/M as mob, mob/user as mob, def_zone)
- if(can_operate(M)) //Checks if mob is lying down on table for surgery
- if(do_surgery(M,user,src))
+ if(can_operate(M))//Checks if mob is lying down on table for surgery
+ if(do_surgery(M, user, src))
return
-// this prevented pills, food, and other things from being picked up by bags.
-// possibly intentional, but removing it allows us to not duplicate functionality.
-// -Sayu (storage conslidation)
-/*
-/obj/item/weapon/reagent_containers/attackby(obj/item/I as obj, mob/user as mob)
- return
-*/
-/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user , flag)
+/obj/item/weapon/reagent_containers/afterattack(obj/target, mob/user, flag)
return
-/obj/item/weapon/reagent_containers/proc/reagentlist(var/obj/item/weapon/reagent_containers/snack) //Attack logs for regents in pills
- var/data
- if(snack.reagents.reagent_list && snack.reagents.reagent_list.len) //find a reagent list if there is and check if it has entries
- for (var/datum/reagent/R in snack.reagents.reagent_list) //no reagents will be left behind
- data += "[R.id]([R.volume] units); " //Using IDs because SOME chemicals(I'm looking at you, chlorhydrate-beer) have the same names as other chemicals.
- return data
- else return "No reagents"
\ No newline at end of file
+/obj/item/weapon/reagent_containers/proc/reagentlist() // For attack logs
+ if(reagents)
+ return reagents.get_reagents()
+ return "No reagent holder"
+
+/obj/item/weapon/reagent_containers/proc/standard_dispenser_refill(var/mob/user, var/obj/structure/reagent_dispensers/target) // This goes into afterattack
+ if(!istype(target))
+ return 0
+
+ if(!target.reagents || !target.reagents.total_volume)
+ user << "[target] is empty."
+ return 1
+
+ if(reagents && !reagents.get_free_space())
+ user << "[src] is full."
+ return 1
+
+ var/trans = target.reagents.trans_to_obj(src, target:amount_per_transfer_from_this)
+ user << "You fill [src] with [trans] units of the contents of [target]."
+ return 1
+
+/obj/item/weapon/reagent_containers/proc/standard_splash_mob(var/mob/user, var/mob/target) // This goes into afterattack
+ if(!istype(target))
+ return
+
+ if(!reagents || !reagents.total_volume)
+ user << "[src] is empty."
+ return 1
+
+ if(target.reagents && !target.reagents.get_free_space())
+ user << "[target] is full."
+ return 1
+
+ var/contained = reagentlist()
+ target.attack_log += text("\[[time_stamp()]\] Has been splashed with [name] by [user.name] ([user.ckey]). Reagents: [contained]")
+ user.attack_log += text("\[[time_stamp()]\] Used the [name] to splash [target.name] ([target.key]). Reagents: [contained]")
+ msg_admin_attack("[user.name] ([user.ckey]) splashed [target.name] ([target.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+
+ user.visible_message("[target] has been splashed with something by [user]!", "You splash the solution onto [target].")
+ reagents.splash_mob(target, reagents.total_volume)
+ return 1
+
+/obj/item/weapon/reagent_containers/proc/self_feed_message(var/mob/user)
+ user << "You eat \the [src]"
+
+/obj/item/weapon/reagent_containers/proc/other_feed_message_start(var/mob/user, var/mob/target)
+ user.visible_message("[user] is trying to feed [target] \the [src]!")
+
+/obj/item/weapon/reagent_containers/proc/other_feed_message_finish(var/mob/user, var/mob/target)
+ user.visible_message("[user] has fed [target] \the [src]!")
+
+/obj/item/weapon/reagent_containers/proc/feed_sound(var/mob/user)
+ return
+
+/obj/item/weapon/reagent_containers/proc/standard_feed_mob(var/mob/user, var/mob/target) // This goes into attack
+ if(!istype(target))
+ return 0
+
+ if(!reagents || !reagents.total_volume)
+ user << "\The [src] is empty."
+ return 1
+
+ if(target == user)
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = user
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? You don't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
+ return
+
+ self_feed_message(user)
+ reagents.trans_to_mob(user, amount_per_transfer_from_this, CHEM_INGEST)
+ feed_sound(user)
+ return 1
+ else
+ if(istype(user, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = target
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
+ return
+
+ other_feed_message_start(user, target)
+
+ if(!do_mob(user, target))
+ return
+
+ other_feed_message_finish(user, target)
+
+ var/contained = reagentlist()
+ target.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [user.name] ([user.ckey]). Reagents: [contained]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [name] by [target.name] ([target.ckey]). Reagents: [contained]")
+ msg_admin_attack("[key_name(user)] fed [key_name(target)] with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+
+ reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_INGEST)
+ feed_sound(user)
+ return 1
+
+/obj/item/weapon/reagent_containers/proc/standard_pour_into(var/mob/user, var/atom/target) // This goes into afterattack and yes, it's atom-level
+ if(!target.is_open_container() || !target.reagents)
+ return 0
+
+ if(!reagents || !reagents.total_volume)
+ user << "[src] is empty."
+ return 1
+
+ if(!target.reagents.get_free_space())
+ user << "[target] is full."
+ return 1
+
+ var/trans = reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You transfer [trans] units of the solution to [target]."
+ return 1
diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm
index e53d1188988..b57830e1d62 100644
--- a/code/modules/reagents/reagent_containers/borghydro.dm
+++ b/code/modules/reagents/reagent_containers/borghydro.dm
@@ -1,4 +1,3 @@
-
/obj/item/weapon/reagent_containers/borghypo
name = "Cyborg Hypospray"
desc = "An advanced chemical synthesizer and injection system, designed for heavy-duty medical equipment."
@@ -15,7 +14,6 @@
var/list/datum/reagents/reagent_list = list()
var/list/reagent_ids = list("tricordrazine", "inaprovaline", "spaceacillin")
- //var/list/reagent_ids = list("dexalin", "kelotane", "bicaridine", "anti_toxin", "inaprovaline", "spaceacillin")
/obj/item/weapon/reagent_containers/borghypo/surgeon
reagent_ids = list("bicaridine", "inaprovaline", "dexalin")
@@ -40,23 +38,15 @@
if(charge_tick < recharge_time) return 0
charge_tick = 0
- if(isrobot(src.loc))
- var/mob/living/silicon/robot/R = src.loc
+ if(isrobot(loc))
+ var/mob/living/silicon/robot/R = loc
if(R && R.cell)
var/datum/reagents/RG = reagent_list[mode]
if(RG.total_volume < RG.maximum_volume) //Don't recharge reagents and drain power if the storage is full.
R.cell.use(charge_cost) //Take power from borg...
RG.add_reagent(reagent_ids[mode], 5) //And fill hypo with reagent.
- //update_icon()
return 1
-// Purely for testing purposes I swear~
-/*
-/obj/item/weapon/reagent_containers/borghypo/verb/add_cyanide()
- set src in world
- add_reagent("cyanide")
-*/
-
// Use this to add more chemicals for the borghypo to produce.
/obj/item/weapon/reagent_containers/borghypo/proc/add_reagent(var/reagent)
reagent_ids |= reagent
@@ -70,19 +60,28 @@
/obj/item/weapon/reagent_containers/borghypo/attack(mob/living/M as mob, mob/user as mob)
var/datum/reagents/R = reagent_list[mode]
if(!R.total_volume)
- user << "\red The injector is empty."
+ user << "The injector is empty."
return
- if (!(istype(M)))
+ if (!istype(M))
return
- if (R.total_volume && M.can_inject(user,1))
- user << "\blue You inject [M] with the injector."
- M << "\red You feel a tiny prick!"
+ var/mob/living/carbon/human/H = M
+ if(istype(H))
+ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if(!affected)
+ user << "\The [H] is missing that limb!"
+ return
+ else if(affected.status & ORGAN_ROBOT)
+ user << "You cannot inject a robotic limb."
+ return
+
+ if (R.total_volume && M.can_inject(user, 1))
+ user << "You inject [M] with the injector."
+ M << "You feel a tiny prick!"
- R.reaction(M, INGEST)
if(M.reagents)
- var/trans = R.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [R.total_volume] units remaining."
+ var/trans = R.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD)
+ user << "[trans] units injected. [R.total_volume] units remaining."
return
/obj/item/weapon/reagent_containers/borghypo/attack_self(mob/user as mob)
@@ -93,7 +92,7 @@
charge_tick = 0 //Prevents wasted chems/cell charge if you're cycling through modes.
var/datum/reagent/R = chemical_reagents_list[reagent_ids[mode]]
- user << "\blue Synthesizer is now producing '[R.name]'."
+ user << "Synthesizer is now producing '[R.name]'."
return
/obj/item/weapon/reagent_containers/borghypo/examine(mob/user)
@@ -105,8 +104,8 @@
for(var/datum/reagents/RS in reagent_list)
var/datum/reagent/R = locate() in RS.reagent_list
if(R)
- user << "\blue It currently has [R.volume] units of [R.name] stored."
+ user << "It currently has [R.volume] units of [R.name] stored."
empty = 0
if(empty)
- user << "\blue It is currently empty. Allow some time for the internal syntheszier to produce more."
+ user << "It is currently empty. Allow some time for the internal syntheszier to produce more."
diff --git a/code/modules/reagents/reagent_containers/dropper.dm b/code/modules/reagents/reagent_containers/dropper.dm
index 1cfe480ff97..c67c6ab7de6 100644
--- a/code/modules/reagents/reagent_containers/dropper.dm
+++ b/code/modules/reagents/reagent_containers/dropper.dm
@@ -10,19 +10,18 @@
possible_transfer_amounts = list(1,2,3,4,5)
w_class = 1
volume = 5
- var/filled = 0
- afterattack(obj/target, mob/user , flag)
+ afterattack(var/obj/target, var/mob/user, var/flag)
if(!target.reagents || !flag) return
- if(filled)
+ if(reagents.total_volume)
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
+ if(!target.reagents.get_free_space())
+ user << "[target] is full."
return
- if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
- user << "\red You cannot directly fill this object."
+ if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/clothing/mask/smokable/cigarette)) //You can inject humans and food but you cant remove the shit.
+ user << "You cannot directly fill this object."
return
var/trans = 0
@@ -30,80 +29,76 @@
if(ismob(target))
var/time = 20 //2/3rds the time of a syringe
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to squirt something into []'s eyes!", user, target), 1)
+ user.visible_message("[user] is trying to squirt something into [target]'s eyes!")
- if(!do_mob(user, target, time)) return
+ if(!do_mob(user, target, time))
+ return
- if(istype(target , /mob/living/carbon/human))
+ if(istype(target, /mob/living/carbon/human))
var/mob/living/carbon/human/victim = target
var/obj/item/safe_thing = null
- if( victim.wear_mask )
- if ( victim.wear_mask.flags & MASKCOVERSEYES )
+ if(victim.wear_mask)
+ if (victim.wear_mask.flags & MASKCOVERSEYES)
safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
+ if(victim.head)
+ if (victim.head.flags & MASKCOVERSEYES)
safe_thing = victim.head
if(victim.glasses)
- if ( !safe_thing )
+ if (!safe_thing)
safe_thing = victim.glasses
if(safe_thing)
- if(!safe_thing.reagents)
- safe_thing.create_reagents(100)
- trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
- spawn(5)
- src.reagents.reaction(safe_thing, TOUCH)
-
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
+ trans = reagents.trans_to_obj(safe_thing, amount_per_transfer_from_this)
+ user.visible_message("[user] tries to squirt something into [target]'s eyes, but fails!", "You transfer [trans] units of the solution.")
return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
- src.reagents.reaction(target, TOUCH)
+ trans = reagents.trans_to_mob(target, reagents.total_volume, CHEM_INGEST)
+ user.visible_message("[user] squirts something into [target]'s eyes!", "You transfer [trans] units of the solution.")
var/mob/living/M = target
+ var/contained = reagentlist()
+ M.attack_log += text("\[[time_stamp()]\] Has been squirted with [name] by [user.name] ([user.ckey]). Reagents: [contained]")
+ user.attack_log += text("\[[time_stamp()]\] Used the [name] to squirt [M.name] ([M.key]). Reagents: [contained]")
+ msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+ return
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been squirted with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to squirt [M.name] ([M.key]). Reagents: [contained]")
- msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+ else
+ trans = reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You transfer [trans] units of the solution."
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
-
- else
+ else // Taking from something
if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from [target]."
+ user << "You cannot directly remove reagents from [target]."
return
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
+ if(!target.reagents || !target.reagents.total_volume)
+ user << "[target] is empty."
return
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
+ var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
- user << "\blue You fill the dropper with [trans] units of the solution."
-
- filled = 1
- icon_state = "dropper[filled]"
+ user << "You fill the dropper with [trans] units of the solution."
return
+ on_reagent_change()
+ update_icon()
+
+ update_icon()
+ if(reagents.total_volume)
+ icon_state = "dropper1"
+ else
+ icon_state = "dropper0"
+
+/obj/item/weapon/reagent_containers/dropper/industrial
+ name = "Industrial Dropper"
+ desc = "A larger dropper. Transfers 10 units."
+ amount_per_transfer_from_this = 10
+ possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
+ volume = 10
+
////////////////////////////////////////////////////////////////////////////////
/// Droppers. END
////////////////////////////////////////////////////////////////////////////////
diff --git a/code/modules/reagents/reagent_containers/food/cans.dm b/code/modules/reagents/reagent_containers/food/cans.dm
index 15bb64089d0..8155207b7e4 100644
--- a/code/modules/reagents/reagent_containers/food/cans.dm
+++ b/code/modules/reagents/reagent_containers/food/cans.dm
@@ -1,104 +1,39 @@
/obj/item/weapon/reagent_containers/food/drinks/cans
- var canopened = 0
+ amount_per_transfer_from_this = 5
+ flags = 0
attack_self(mob/user as mob)
- if (canopened == 0)
- playsound(src.loc,'sound/effects/canopen.ogg', rand(10,50), 1)
+ if (!is_open_container())
+ playsound(loc,'sound/effects/canopen.ogg', rand(10,50), 1)
user << "You open the drink with an audible pop!"
- canopened = 1
+ flags |= OPENCONTAINER
else
return
attack(mob/M as mob, mob/user as mob, def_zone)
- if (canopened == 0)
+ if(!is_open_container())
user << "You need to open the drink!"
return
- var/datum/reagents/R = src.reagents
- var/fillevel = gulp_size
- if(!R.total_volume || !R)
- user << "\red The [src.name] is empty!"
- return 0
-
- if(M == user)
- M << "\blue You swallow a gulp of [src]."
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, gulp_size)
- reagents.reaction(M, INGEST)
- spawn(5)
- reagents.trans_to(M, gulp_size)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
- if (canopened == 0)
- user << "You need to open the drink!"
- return
-
- else if (canopened == 1)
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
- msg_admin_attack("[key_name(user)] fed [key_name(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, gulp_size)
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = R.get_master_reagent_id()
- spawn(600)
- R.add_reagent(refill, fillevel)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
-
- return 0
+ return ..()
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
- if (canopened == 0)
+ if(!is_open_container())
user << "You need to open the drink!"
return
else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
- if (canopened == 0)
+ if(!is_open_container())
user << "You need to open the drink!"
return
- if (istype(target, /obj/item/weapon/reagent_containers/food/drinks/cans))
- var/obj/item/weapon/reagent_containers/food/drinks/cans/cantarget = target
- if(cantarget.canopened == 0)
- user << "You need to open the drink you want to pour into!"
- return
-
return ..()
-/* examine(mob/user)
- if(!..(user, 1))
- return
- if(!reagents || reagents.total_volume==0)
- user << "\blue \The [src] is empty!"
- else if (reagents.total_volume<=src.volume/4)
- user << "\blue \The [src] is almost empty!"
- else if (reagents.total_volume<=src.volume*0.66)
- user << "\blue \The [src] is half full!"
- else if (reagents.total_volume<=src.volume*0.90)
- user << "\blue \The [src] is almost full!"
- else
- user << "\blue \The [src] is full!"*/
-
-
//DRINKS
/obj/item/weapon/reagent_containers/food/drinks/cans/cola
diff --git a/code/modules/reagents/reagent_containers/food/condiment.dm b/code/modules/reagents/reagent_containers/food/condiment.dm
index 2b9cf560dcf..a8184ac8157 100644
--- a/code/modules/reagents/reagent_containers/food/condiment.dm
+++ b/code/modules/reagents/reagent_containers/food/condiment.dm
@@ -15,72 +15,39 @@
center_of_mass = list("x"=16, "y"=6)
volume = 50
- attackby(obj/item/weapon/W as obj, mob/user as mob)
-
- return
- attack_self(mob/user as mob)
- return
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
-
- if(!R || !R.total_volume)
- user << "\red The [src.name] is empty!"
- return 0
-
- if(M == user)
- M << "\blue You swallow some of contents of the [src]."
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, 10)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
- msg_admin_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, 10)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- return 0
-
- attackby(obj/item/I as obj, mob/user as mob)
-
+ attackby(var/obj/item/weapon/W as obj, var/mob/user as mob)
return
- afterattack(obj/target, mob/user , flag)
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
+ attack_self(var/mob/user as mob)
+ return
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
+ attack(var/mob/M as mob, var/mob/user as mob, var/def_zone)
+ if(standard_feed_mob(user, M))
+ return
+
+ afterattack(var/obj/target, var/mob/user, var/flag)
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ return
+
+ if(istype(target, /obj/item/weapon/reagent_containers/food/snacks)) // These are not opencontainers but we can transfer to them
+ if(!reagents || !reagents.total_volume)
+ user << "There is no condiment left in \the [src]."
return
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
+ if(!target.reagents.get_free_space())
+ user << "You can't add more condiment to \the [target]."
return
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
+ var/trans = reagents.trans_to_obj(target, amount_per_transfer_from_this)
+ user << "You add [trans] units of the condiment to \the [target]."
- //Something like a glass or a food item. Player probably wants to transfer TO it.
- else if(target.is_open_container() || istype(target, /obj/item/weapon/reagent_containers/food/snacks))
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red you can't add anymore to [target]."
- return
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the condiment to [target]."
+ feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
+
+ self_feed_message(var/mob/user)
+ user << "You swallow some of contents of \the [src]."
on_reagent_change()
if(icon_state == "saltshakersmall" || icon_state == "peppermillsmall" || icon_state == "flour")
@@ -191,4 +158,4 @@
..()
reagents.add_reagent("flour", 30)
src.pixel_x = rand(-10.0, 10)
- src.pixel_y = rand(-10.0, 10)
\ No newline at end of file
+ src.pixel_y = rand(-10.0, 10)
diff --git a/code/modules/reagents/reagent_containers/food/drinks.dm b/code/modules/reagents/reagent_containers/food/drinks.dm
index 58b11a61acf..43a406153c1 100644
--- a/code/modules/reagents/reagent_containers/food/drinks.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks.dm
@@ -7,134 +7,63 @@
icon = 'icons/obj/drinks.dmi'
icon_state = null
flags = OPENCONTAINER
- var/gulp_size = 5 //This is now officially broken ... need to think of a nice way to fix it.
- possible_transfer_amounts = list(5,10,25)
+ amount_per_transfer_from_this = 5
volume = 50
on_reagent_change()
- if (gulp_size < 5) gulp_size = 5
- else gulp_size = max(round(reagents.total_volume / 5), 5)
+ return
attack_self(mob/user as mob)
return
- attack(mob/M as mob, mob/user as mob, def_zone)
- var/datum/reagents/R = src.reagents
- var/fillevel = gulp_size
-
- if(!R.total_volume || !R)
- user << "\red The [src.name] is empty!"
- return 0
-
- if(M == user)
-
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red You have a monitor for a head, where do you think you're going to put that?"
- return
-
- M << "\blue You swallow a gulp from \the [src]."
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, gulp_size)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
- else if( istype(M, /mob/living/carbon/human) )
-
- var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red They have a monitor for a head, where do you think you're going to put that?"
- return
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
- if(!do_mob(user, M)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
-
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
- msg_admin_attack("[key_name(user)] fed [key_name(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
- if(reagents.total_volume)
- reagents.trans_to_ingest(M, gulp_size)
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- bro.cell.use(30)
- var/refill = R.get_master_reagent_id()
- spawn(600)
- R.add_reagent(refill, fillevel)
-
- playsound(M.loc,'sound/items/drink.ogg', rand(10,50), 1)
- return 1
+ attack(mob/M as mob, mob/user as mob, def_zone)
+ if(standard_feed_mob(user, M))
+ robot_refill(user)
+ return
return 0
-
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
- if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container()) //Something like a glass. Player probably wants to transfer TO it.
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
-
-
- var/datum/reagent/refill
- var/datum/reagent/refillName
- if(isrobot(user))
- refill = reagents.get_master_reagent_id()
- refillName = reagents.get_master_reagent_name()
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- if(isrobot(user)) //Cyborg modules that include drinks automatically refill themselves, but drain the borg's cell
- var/mob/living/silicon/robot/bro = user
- var/chargeAmount = max(30,4*trans)
- bro.cell.use(chargeAmount)
- user << "Now synthesizing [trans] units of [refillName]..."
-
-
- spawn(300)
- reagents.add_reagent(refill, trans)
- user << "Cyborg [src] refilled."
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
+ robot_refill(user)
+ return
return ..()
+ proc/robot_refill(var/mob/living/silicon/robot/user)
+ if(!istype(user))
+ return 0
+
+ user.cell.use(30)
+ var/refill = reagents.get_master_reagent_id()
+ user << "Now synthesizing [amount_per_transfer_from_this] units of [refill]..."
+ spawn(300)
+ reagents.add_reagent(refill, amount_per_transfer_from_this)
+ user << "Cyborg [src] refilled."
+
+ self_feed_message(var/mob/user)
+ user << "You swallow a gulp from \the [src]."
+
+ feed_sound(var/mob/user)
+ playsound(user.loc, 'sound/items/drink.ogg', rand(10, 50), 1)
+
examine(mob/user)
if(!..(user, 1))
return
- if(!reagents || reagents.total_volume==0)
- user << "\blue \The [src] is empty!"
- else if (reagents.total_volume<=src.volume/4)
- user << "\blue \The [src] is almost empty!"
- else if (reagents.total_volume<=src.volume*0.66)
- user << "\blue \The [src] is half full!"
- else if (reagents.total_volume<=src.volume*0.90)
- user << "\blue \The [src] is almost full!"
+ if(!reagents || reagents.total_volume == 0)
+ user << "\The [src] is empty!"
+ else if (reagents.total_volume <= volume * 0.25)
+ user << "\The [src] is almost empty!"
+ else if (reagents.total_volume <= volume * 0.66)
+ user << "\The [src] is half full!"
+ else if (reagents.total_volume <= volume * 0.90)
+ user << "\The [src] is almost full!"
else
- user << "\blue \The [src] is full!"
+ user << "\The [src] is full!"
////////////////////////////////////////////////////////////////////////////////
@@ -260,6 +189,15 @@
volume = 120
center_of_mass = list("x"=17, "y"=10)
+/obj/item/weapon/reagent_containers/food/drinks/teapot
+ name = "teapot"
+ desc = "An elegant teapot. It simply oozes class."
+ icon_state = "teapot"
+ item_state = "teapot"
+ amount_per_transfer_from_this = 10
+ volume = 120
+ center_of_mass = list("x"=17, "y"=7)
+
/obj/item/weapon/reagent_containers/food/drinks/flask
name = "Captain's Flask"
desc = "A metal flask belonging to the captain"
@@ -267,6 +205,16 @@
volume = 60
center_of_mass = list("x"=17, "y"=7)
+/obj/item/weapon/reagent_containers/food/drinks/flask/shiny
+ name = "shiny flask"
+ desc = "A shiny metal flask. It appears to have a Greek symbol inscribed on it."
+ icon_state = "shinyflask"
+
+/obj/item/weapon/reagent_containers/food/drinks/flask/lithium
+ name = "lithium flask"
+ desc = "A flask with a Lithium Atom symbol on it."
+ icon_state = "lithiumflask"
+
/obj/item/weapon/reagent_containers/food/drinks/flask/detflask
name = "Detective's Flask"
desc = "A metal flask with a leather band and golden badge belonging to the detective."
diff --git a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
index 6be4fce8e42..e6b1308603d 100644
--- a/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
+++ b/code/modules/reagents/reagent_containers/food/drinks/bottle.dm
@@ -1,5 +1,3 @@
-
-
///////////////////////////////////////////////Alchohol bottles! -Agouri //////////////////////////
//Functionally identical to regular drinks. The only difference is that the default bottle size is 100. - Darem
//Bottles now weaken and break when smashed on people's heads. - Giacom
@@ -18,7 +16,7 @@
var/obj/item/weapon/broken_bottle/B = new /obj/item/weapon/broken_bottle(user.loc)
user.put_in_active_hand(B)
if(prob(33))
- new/obj/item/weapon/shard(target.loc) // Create a glass shard at the target's location!
+ new/obj/item/weapon/material/shard(target.loc) // Create a glass shard at the target's location!
B.icon_state = src.icon_state
var/icon/I = new('icons/obj/drinks.dmi', src.icon_state)
@@ -78,10 +76,9 @@
msg_admin_attack("[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with a bottle. (INTENT: [uppertext(user.a_intent)]) (JMP)")
//The reagents in the bottle splash all over the target, thanks for the idea Nodrak
- if(src.reagents)
- for(var/mob/O in viewers(user, null))
- O.show_message(text("\blue The contents of the [src] splashes all over [target]!"), 1)
- src.reagents.reaction(target, TOUCH)
+ if(reagents)
+ user.visible_message("The contents of the [src] splash all over [target]!")
+ reagents.splash_mob(target, reagents.total_volume)
//Finally, smash the bottle. This kills (qdel) the bottle.
src.smash(target, user)
diff --git a/code/modules/reagents/reagent_containers/food/sandwich.dm b/code/modules/reagents/reagent_containers/food/sandwich.dm
index 3be62c7d7cd..c853706ad54 100644
--- a/code/modules/reagents/reagent_containers/food/sandwich.dm
+++ b/code/modules/reagents/reagent_containers/food/sandwich.dm
@@ -1,6 +1,6 @@
/obj/item/weapon/reagent_containers/food/snacks/breadslice/attackby(obj/item/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks))
+ if(istype(W,/obj/item/weapon/material/shard) || istype(W,/obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/csandwich/S = new(get_turf(src))
S.attackby(W,user)
qdel(src)
@@ -25,7 +25,7 @@
if(src.contents.len > sandwich_limit)
user << "\red If you put anything else on \the [src] it's going to collapse."
return
- else if(istype(W,/obj/item/weapon/shard))
+ else if(istype(W,/obj/item/weapon/material/shard))
user << "\blue You hide [W] in \the [src]."
user.drop_item()
W.loc = src
@@ -34,7 +34,7 @@
else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks))
user << "\blue You layer [W] over \the [src]."
var/obj/item/weapon/reagent_containers/F = W
- F.reagents.trans_to(src, F.reagents.total_volume)
+ F.reagents.trans_to_obj(src, F.reagents.total_volume)
user.drop_item()
W.loc = src
ingredients += W
@@ -87,7 +87,7 @@
var/obj/item/shard
for(var/obj/item/O in contents)
- if(istype(O,/obj/item/weapon/shard))
+ if(istype(O,/obj/item/weapon/material/shard))
shard = O
break
diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm
index 3af092f0cca..b7e7f948d5b 100644
--- a/code/modules/reagents/reagent_containers/food/snacks.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks.dm
@@ -34,7 +34,6 @@
return
/obj/item/weapon/reagent_containers/food/snacks/attack(mob/M as mob, mob/user as mob, def_zone)
-
if(!reagents.total_volume)
user << "None of [src] left!"
user.drop_from_inventory(src)
@@ -46,36 +45,43 @@
if(M == user) //If you're eating it yourself
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red You have a monitor for a head, where do you think you're going to put that?"
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? You don't have a mouth!"
return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
+ return
+
if (fullness <= 50)
- M << "\red You hungrily chew out a piece of [src] and gobble it!"
+ M << "You hungrily chew out a piece of [src] and gobble it!"
if (fullness > 50 && fullness <= 150)
- M << "\blue You hungrily begin to eat [src]."
+ M << "You hungrily begin to eat [src]."
if (fullness > 150 && fullness <= 350)
- M << "\blue You take a bite of [src]."
+ M << "You take a bite of [src]."
if (fullness > 350 && fullness <= 550)
- M << "\blue You unwillingly chew a bit of [src]."
+ M << "You unwillingly chew a bit of [src]."
if (fullness > (550 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
- M << "\red You cannot force any more of [src] to go down your throat."
+ M << "You cannot force any more of [src] to go down your throat."
return 0
else
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red They have a monitor for a head, where do you think you're going to put that?"
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
return
if(!istype(M, /mob/living/carbon/slime)) //If you're feeding it to someone else.
if (fullness <= (550 * (1 + M.overeatduration / 1000)))
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to feed [M] [src].", 1)
+ user.visible_message("[user] attempts to feed [M] [src].")
else
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] cannot force anymore of [src] down [M]'s throat.", 1)
- return 0
+ user.visible_message("[user] cannot force anymore of [src] down [M]'s throat.")
+ return 0
if(!do_mob(user, M)) return
@@ -83,8 +89,7 @@
user.attack_log += text("\[[time_stamp()]\] Fed [src.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
msg_admin_attack("[key_name(user)] fed [key_name(M)] with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)])")
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] feeds [M] [src].", 1)
+ user.visible_message("[user] feeds [M] [src].")
else
user << "This creature does not seem to have a mouth!"
@@ -94,15 +99,9 @@
playsound(M.loc,'sound/items/eatfood.ogg', rand(10,50), 1)
if(reagents.total_volume)
if(reagents.total_volume > bitesize)
- /*
- * I totally cannot understand what this code supposed to do.
- * Right now every snack consumes in 2 bites, my popcorn does not work right, so I simplify it. -- rastaf0
- var/temp_bitesize = max(reagents.total_volume /2, bitesize)
- reagents.trans_to(M, temp_bitesize)
- */
- reagents.trans_to_ingest(M, bitesize)
+ reagents.trans_to_mob(M, bitesize, CHEM_INGEST)
else
- reagents.trans_to_ingest(M, reagents.total_volume)
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
bitecount++
On_Consume(M)
return 1
@@ -127,8 +126,8 @@
return
// Eating with forks
- if(istype(W,/obj/item/weapon/kitchen/utensil))
- var/obj/item/weapon/kitchen/utensil/U = W
+ if(istype(W,/obj/item/weapon/material/kitchen/utensil))
+ var/obj/item/weapon/material/kitchen/utensil/U = W
if(!U.reagents)
U.create_reagents(5)
@@ -149,7 +148,7 @@
I.color = src.filling_color
U.overlays += I
- reagents.trans_to(U,min(reagents.total_volume,5))
+ reagents.trans_to_obj(U, min(reagents.total_volume,5))
if (reagents.total_volume <= 0)
qdel(src)
@@ -161,7 +160,7 @@
var/hide_item = !has_edge(W) || !can_slice_here
if (hide_item)
- if (W.w_class >= src.w_class || W.is_robot_module())
+ if (W.w_class >= src.w_class || is_robot_module(W))
return
user << "\red You slip [W] inside [src]."
@@ -186,7 +185,7 @@
var/reagents_per_slice = reagents.total_volume/slices_num
for(var/i=1 to (slices_num-slices_lost))
var/obj/slice = new slice_path (src.loc)
- reagents.trans_to(slice,reagents_per_slice)
+ reagents.trans_to_obj(slice, reagents_per_slice)
qdel(src)
return
@@ -208,7 +207,7 @@
user.visible_message("[user] nibbles away at \the [src].","You nibble away at \the [src].")
bitecount++
if(reagents && user.reagents)
- reagents.trans_to_ingest(user, bitesize)
+ reagents.trans_to_mob(user, bitesize, CHEM_INGEST)
spawn(5)
if(!src && !user.client)
user.custom_emote(1,"[pick("burps", "cries for more", "burps twice", "looks at the area where the food was")]")
@@ -482,7 +481,7 @@
/obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom)
..()
new/obj/effect/decal/cleanable/egg_smudge(src.loc)
- src.reagents.reaction(hit_atom, TOUCH)
+ src.reagents.trans_to(hit_atom, reagents.total_volume)
src.visible_message("\red [src.name] has been squashed.","\red You hear a smack.")
qdel(src)
@@ -2035,7 +2034,7 @@
New()
..()
- reagents.add_reagent("minttoxin", 1)
+ reagents.add_reagent("mint", 1)
bitesize = 1
/obj/item/weapon/reagent_containers/food/snacks/mushroomsoup
@@ -2559,7 +2558,7 @@
slices_num = 6
New()
..()
- reagents.add_reagent("protein", 50)
+ reagents.add_reagent("protein", 44)
reagents.add_reagent("tomatojuice", 6)
bitesize = 2
@@ -2597,7 +2596,7 @@
slices_num = 6
New()
..()
- reagents.add_reagent("nutriment", 30)
+ reagents.add_reagent("nutriment", 25)
reagents.add_reagent("protein", 5)
reagents.add_reagent("tomatojuice", 6)
reagents.add_reagent("imidazoline", 12)
@@ -2818,7 +2817,7 @@
// Dough + rolling pin = flat dough
/obj/item/weapon/reagent_containers/food/snacks/dough/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/kitchen/rollingpin))
+ if(istype(W,/obj/item/weapon/material/kitchen/rollingpin))
new /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough(src)
user << "You flatten the dough."
qdel(src)
@@ -2963,7 +2962,7 @@
// potato + knife = raw sticks
/obj/item/weapon/reagent_containers/food/snacks/grown/potato/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/kitchen/utensil/knife))
+ if(istype(W,/obj/item/weapon/material/kitchen/utensil/knife))
new /obj/item/weapon/reagent_containers/food/snacks/rawsticks(src)
user << "You cut the potato."
qdel(src)
diff --git a/code/modules/reagents/reagent_containers/food/snacks/meat.dm b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
index 797f605b081..46bf9e4bafe 100644
--- a/code/modules/reagents/reagent_containers/food/snacks/meat.dm
+++ b/code/modules/reagents/reagent_containers/food/snacks/meat.dm
@@ -10,7 +10,7 @@
src.bitesize = 3
/obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob)
- if(istype(W,/obj/item/weapon/kitchenknife))
+ if(istype(W,/obj/item/weapon/material/knife))
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
new /obj/item/weapon/reagent_containers/food/snacks/rawcutlet(src)
diff --git a/code/modules/reagents/reagent_containers/glass.dm b/code/modules/reagents/reagent_containers/glass.dm
index fba5d8ac39c..836b500df34 100644
--- a/code/modules/reagents/reagent_containers/glass.dm
+++ b/code/modules/reagents/reagent_containers/glass.dm
@@ -41,116 +41,71 @@
/obj/machinery/sleeper,
/obj/machinery/smartfridge/,
/obj/machinery/biogenerator,
- /obj/machinery/constructable_frame
+ /obj/machinery/constructable_frame,
+ /obj/machinery/bunsen_burner,
+ /obj/machinery/radiocarbon_spectrometer
)
New()
..()
base_name = name
- examine(mob/user)
+ examine(var/mob/user)
if(!..(user, 2))
return
if(reagents && reagents.reagent_list.len)
- user << "\blue It contains [src.reagents.total_volume] units of liquid."
+ user << "It contains [reagents.total_volume] units of liquid."
else
- user << "\blue It is empty."
- if (!is_open_container())
- user << "\blue Airtight lid seals it completely."
+ user << "It is empty."
+ if(!is_open_container())
+ user << "Airtight lid seals it completely."
attack_self()
..()
- if (is_open_container())
- usr << "You put the lid on \the [src]."
+ if(is_open_container())
+ usr << "You put the lid on \the [src]."
flags ^= OPENCONTAINER
else
- usr << "You take the lid off \the [src]."
+ usr << "You take the lid off \the [src]."
flags |= OPENCONTAINER
update_icon()
- afterattack(obj/target, mob/user , flag)
+ afterattack(var/obj/target, var/mob/user, var/flag)
- if (!is_open_container() || !flag)
+ if(!is_open_container() || !flag)
return
- for(var/type in src.can_be_placed_into)
+ for(var/type in can_be_placed_into)
if(istype(target, type))
return
- if(ismob(target) && target.reagents && reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
-
- var/mob/living/M = target
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been splashed with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to splash [M.name] ([M.key]). Reagents: [contained]")
- msg_admin_attack("[user.name] ([user.ckey]) splashed [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] has been splashed with something by []!", target, user), 1)
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
+ if(standard_splash_mob(user, target))
return
- else if(istype(target, /obj/structure/reagent_dispensers)) //A dispenser. Transfer FROM it TO us.
- target.add_fingerprint(user)
-
- if(!target.reagents.total_volume && target.reagents)
- user << "\red [target] is empty."
- return
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red [src] is full."
- return
-
- var/trans = target.reagents.trans_to(src, target:amount_per_transfer_from_this)
- user << "\blue You fill [src] with [trans] units of the contents of [target]."
-
- else if(target.is_open_container() && target.reagents) //Something like a glass. Player probably wants to transfer TO it.
-
- if(!reagents.total_volume)
- user << "\red [src] is empty."
- return
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution to [target]."
-
- else if(istype(target, /obj/machinery/bunsen_burner))
+ if(standard_dispenser_refill(user, target))
+ return
+ if(standard_pour_into(user, target))
return
- else if(istype(target, /obj/machinery/smartfridge))
- return
-
- else if(istype(target, /obj/machinery/radiocarbon_spectrometer))
- return
-
- else if(reagents.total_volume)
- user << "\blue You splash the solution onto [target]."
- src.reagents.reaction(target, TOUCH)
- spawn(5) src.reagents.clear_reagents()
+ if(reagents.total_volume)
+ user << "You splash the solution onto [target]."
+ reagents.trans_to(target, reagents.total_volume)
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
- var/tmp_label = sanitizeSafe(input(user, "Enter a label for [src.name]","Label",src.label_text), MAX_NAME_LEN)
+ var/tmp_label = sanitizeSafe(input(user, "Enter a label for [name]", "Label", label_text), MAX_NAME_LEN)
if(length(tmp_label) > 10)
- user << "\red The label can be at most 10 characters long."
+ user << "The label can be at most 10 characters long."
else
- user << "\blue You set the label to \"[tmp_label]\"."
- src.label_text = tmp_label
- src.update_name_label()
+ user << "You set the label to \"[tmp_label]\"."
+ label_text = tmp_label
+ update_name_label()
proc/update_name_label()
- if(src.label_text == "")
- src.name = src.base_name
+ if(label_text == "")
+ name = base_name
else
- src.name = "[src.base_name] ([src.label_text])"
+ name = "[base_name] ([label_text])"
/obj/item/weapon/reagent_containers/glass/beaker
name = "beaker"
@@ -231,7 +186,6 @@
possible_transfer_amounts = list(5,10,15,25,30,60,120,300)
flags = OPENCONTAINER
-
/obj/item/weapon/reagent_containers/glass/beaker/vial
name = "vial"
desc = "A small glass vial."
@@ -260,7 +214,7 @@
icon = 'icons/obj/janitor.dmi'
icon_state = "bucket"
item_state = "bucket"
- matter = list("metal" = 200)
+ matter = list(DEFAULT_WALL_MATERIAL = 200)
w_class = 3.0
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60,120)
@@ -282,18 +236,6 @@
var/image/lid = image(icon, src, "lid_[initial(icon_state)]")
overlays += lid
-// vials are defined twice, what?
-/*
-/obj/item/weapon/reagent_containers/glass/beaker/vial
- name = "vial"
- desc = "Small glass vial. Looks fragile."
- icon_state = "vial"
- g_amt = 500
- volume = 15
- amount_per_transfer_from_this = 5
- possible_transfer_amounts = list(1,5,15)
- flags = OPENCONTAINER */
-
/*
/obj/item/weapon/reagent_containers/glass/blender_jug
name = "Blender Jug"
@@ -324,21 +266,4 @@
amount_per_transfer_from_this = 20
possible_transfer_amounts = list(10,20,30,60)
volume = 120
-
-/obj/item/weapon/reagent_containers/glass/dispenser
- name = "reagent glass"
- desc = "A reagent glass."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "beaker0"
- amount_per_transfer_from_this = 10
- flags = OPENCONTAINER
-
-/obj/item/weapon/reagent_containers/glass/dispenser/surfactant
- name = "reagent glass (surfactant)"
- icon_state = "liquid"
-
- New()
- ..()
- reagents.add_reagent("fluorosurfactant", 20)
-
*/
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index fd3557b62f9..ec5923c73d7 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -14,34 +14,36 @@
flags = OPENCONTAINER
slot_flags = SLOT_BELT
-/obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
- ..()
- reagents.add_reagent("tricordrazine", 30)
- return
+///obj/item/weapon/reagent_containers/hypospray/New() //comment this to make hypos start off empty
+// ..()
+// reagents.add_reagent("tricordrazine", 30)
+// return
-/obj/item/weapon/reagent_containers/hypospray/attack(mob/M as mob, mob/user as mob)
+/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob)
if(!reagents.total_volume)
- user << "\red [src] is empty."
+ user << "[src] is empty."
return
- if (!( istype(M, /mob) ))
+ if (!istype(M))
return
- if (reagents.total_volume)
- user << "\blue You inject [M] with [src]."
- M << "\red You feel a tiny prick!"
- src.reagents.reaction(M, INGEST)
- if(M.reagents)
+ var/mob/living/carbon/human/H = M
+ if(istype(H))
+ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if(!affected)
+ user << "\The [H] is missing that limb!"
+ return
+ else if(affected.status & ORGAN_ROBOT)
+ user << "You cannot inject a robotic limb."
+ return
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.key]). Reagents: [contained]")
- msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+ user << "You inject [M] with [src]."
+ M << "You feel a tiny prick!"
- var/trans = reagents.trans_to(M, amount_per_transfer_from_this)
- user << "\blue [trans] units injected. [reagents.total_volume] units remaining in [src]."
+ if(M.reagents)
+ var/contained = reagentlist()
+ var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD)
+ admin_inject_log(user, M, src, contained, trans)
+ user << "[trans] units injected. [reagents.total_volume] units remaining in \the [src]."
return
@@ -55,7 +57,6 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/New()
..()
- reagents.remove_reagent("tricordrazine", 30)
reagents.add_reagent("inaprovaline", 5)
update_icon()
return
@@ -76,6 +77,6 @@
/obj/item/weapon/reagent_containers/hypospray/autoinjector/examine(mob/user)
..(user)
if(reagents && reagents.reagent_list.len)
- user << "\blue It is currently loaded."
+ user << "It is currently loaded."
else
- user << "\blue It is spent."
+ user << "It is spent."
diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm
index d0f678ddd91..0891468cd10 100644
--- a/code/modules/reagents/reagent_containers/pill.dm
+++ b/code/modules/reagents/reagent_containers/pill.dm
@@ -14,53 +14,55 @@
New()
..()
if(!icon_state)
- icon_state = "pill[rand(1,20)]"
+ icon_state = "pill[rand(1, 20)]"
- attack_self(mob/user as mob)
- return
attack(mob/M as mob, mob/user as mob, def_zone)
if(M == user)
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red You have a monitor for a head, where do you think you're going to put that?"
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? You don't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
return
- M << "\blue You swallow [src]."
+ M << "You swallow \the [src]."
M.drop_from_inventory(src) //icon update
if(reagents.total_volume)
- reagents.trans_to_ingest(M, reagents.total_volume)
- qdel(src)
- else
- qdel(src)
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
+ qdel(src)
return 1
- else if(istype(M, /mob/living/carbon/human) )
+ else if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
- if(H.species.flags & IS_SYNTHETIC)
- H << "\red They have a monitor for a head, where do you think you're going to put that?"
+ if(!H.check_has_mouth())
+ user << "Where do you intend to put \the [src]? \The [H] doesn't have a mouth!"
+ return
+ var/obj/item/blocked = H.check_mouth_coverage()
+ if(blocked)
+ user << "\The [blocked] is in the way!"
return
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] attempts to force [M] to swallow [src].", 1)
+ user.visible_message("[user] attempts to force [M] to swallow \the [src].")
- if(!do_mob(user, M)) return
+ if(!do_mob(user, M))
+ return
user.drop_from_inventory(src) //icon update
- for(var/mob/O in viewers(world.view, user))
- O.show_message("\red [user] forces [M] to swallow [src].", 1)
+ user.visible_message("[user] forces [M] to swallow \the [src].")
- M.attack_log += text("\[[time_stamp()]\] Has been fed [src.name] by [user.name] ([user.ckey]) Reagents: [reagentlist(src)]")
- user.attack_log += text("\[[time_stamp()]\] Fed [M.name] by [M.name] ([M.ckey]) Reagents: [reagentlist(src)]")
- msg_admin_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [src.name] Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+ var/contained = reagentlist()
+ M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [user.name] ([user.ckey]) Reagents: [contained]")
+ user.attack_log += text("\[[time_stamp()]\] Fed [name] by [M.name] ([M.ckey]) Reagents: [contained]")
+ msg_admin_attack("[user.name] ([user.ckey]) fed [M.name] ([M.ckey]) with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
if(reagents.total_volume)
- reagents.trans_to_ingest(M, reagents.total_volume)
- qdel(src)
- else
- qdel(src)
+ reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST)
+ qdel(src)
return 1
@@ -69,21 +71,20 @@
afterattack(obj/target, mob/user, proximity)
if(!proximity) return
- if(target.is_open_container() != 0 && target.reagents)
+ if(target.is_open_container() && target.reagents)
if(!target.reagents.total_volume)
- user << "\red [target] is empty. Cant dissolve pill."
+ user << "[target] is empty. Can't dissolve \the [src]."
return
- user << "\blue You dissolve the pill in [target]"
+ user << "You dissolve \the [src] in [target]."
- user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist(src)]")
- msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist(src)] (INTENT: [uppertext(user.a_intent)]) (JMP)")
+ user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]")
+ msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)")
reagents.trans_to(target, reagents.total_volume)
for(var/mob/O in viewers(2, user))
- O.show_message("\red [user] puts something in \the [target].", 1)
+ O.show_message("[user] puts something in \the [target].", 1)
- spawn(5)
- qdel(src)
+ qdel(src)
return
diff --git a/code/modules/reagents/reagent_containers/robodropper.dm b/code/modules/reagents/reagent_containers/robodropper.dm
deleted file mode 100644
index 475a29c331e..00000000000
--- a/code/modules/reagents/reagent_containers/robodropper.dm
+++ /dev/null
@@ -1,98 +0,0 @@
-
-/obj/item/weapon/reagent_containers/robodropper
- name = "Industrial Dropper"
- desc = "A larger dropper. Transfers 10 units."
- icon = 'icons/obj/chemical.dmi'
- icon_state = "dropper0"
- amount_per_transfer_from_this = 10
- possible_transfer_amounts = list(1,2,3,4,5,6,7,8,9,10)
- volume = 10
- var/filled = 0
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- if(filled)
-
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(!target.is_open_container() && !ismob(target) && !istype(target,/obj/item/weapon/reagent_containers/food)) //You can inject humans and food but you cant remove the shit.
- user << "\red You cannot directly fill this object."
- return
-
-
- var/trans = 0
-
- if(ismob(target))
- if(istype(target , /mob/living/carbon/human))
- var/mob/living/carbon/human/victim = target
-
- var/obj/item/safe_thing = null
- if( victim.wear_mask )
- if ( victim.wear_mask.flags & MASKCOVERSEYES )
- safe_thing = victim.wear_mask
- if( victim.head )
- if ( victim.head.flags & MASKCOVERSEYES )
- safe_thing = victim.head
- if(victim.glasses)
- if ( !safe_thing )
- safe_thing = victim.glasses
-
- if(safe_thing)
- if(!safe_thing.reagents)
- safe_thing.create_reagents(100)
- trans = src.reagents.trans_to(safe_thing, amount_per_transfer_from_this)
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] tries to squirt something into []'s eyes, but fails!", user, target), 1)
- spawn(5)
- src.reagents.reaction(safe_thing, TOUCH)
-
-
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
- return
-
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] squirts something into []'s eyes!", user, target), 1)
- src.reagents.reaction(target, TOUCH)
-
- var/mob/M = target
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been squirted with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to squirt [M.name] ([M.key]). Reagents: [contained]")
- msg_admin_attack("[user.name] ([user.ckey]) squirted [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
-
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You transfer [trans] units of the solution."
- if (src.reagents.total_volume<=0)
- filled = 0
- icon_state = "dropper[filled]"
-
- else
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from [target]."
- return
-
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this)
-
- user << "\blue You fill the dropper with [trans] units of the solution."
-
- filled = 1
- icon_state = "dropper[filled]"
-
- return
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/spray.dm b/code/modules/reagents/reagent_containers/spray.dm
index 2e929c6d12d..79247f82520 100644
--- a/code/modules/reagents/reagent_containers/spray.dm
+++ b/code/modules/reagents/reagent_containers/spray.dm
@@ -16,32 +16,21 @@
var/list/spray_sizes = list(1,3)
volume = 250
-
/obj/item/weapon/reagent_containers/spray/New()
..()
src.verbs -= /obj/item/weapon/reagent_containers/verb/set_APTFT
/obj/item/weapon/reagent_containers/spray/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
- if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) \
- || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
+ if(istype(A, /obj/item/weapon/storage) || istype(A, /obj/structure/table) || istype(A, /obj/structure/closet) || istype(A, /obj/item/weapon/reagent_containers) || istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart))
return
if(istype(A, /spell))
return
- if(istype(A, /obj/structure/reagent_dispensers) && get_dist(src,A) <= 1) //this block copypasted from reagent_containers/glass, for lack of a better solution
- if(!A.reagents.total_volume && A.reagents)
- user << "\The [A] is empty."
+ if(proximity)
+ if(standard_dispenser_refill(user, A))
return
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\The [src] is full."
- return
-
- var/trans = A.reagents.trans_to(src, A:amount_per_transfer_from_this)
- user << "You fill \the [src] with [trans] units of the contents of \the [A]."
- return
-
if(reagents.total_volume < amount_per_transfer_from_this)
user << "\The [src] is empty!"
return
@@ -63,38 +52,18 @@
/obj/item/weapon/reagent_containers/spray/proc/Spray_at(atom/A as mob|obj, mob/user as mob, proximity)
if (A.density && proximity)
- A.visible_message("[usr] sprays [A] with [src].")
- var/obj/D = new/obj()
- D.create_reagents(amount_per_transfer_from_this)
- reagents.trans_to(D, amount_per_transfer_from_this)
- D.icon += D.reagents.get_color()
- spawn(0)
- D.reagents.reaction(A)
- sleep(5)
- qdel(D)
+ A.visible_message("[usr] sprays [A] with [src].")
+ reagents.trans_to(A, amount_per_transfer_from_this)
else
- var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
- D.create_reagents(amount_per_transfer_from_this)
- reagents.trans_to(D, amount_per_transfer_from_this, 1/spray_size)
- D.icon += D.reagents.get_color()
-
- var/turf/A_turf = get_turf(A)//BS12
-
spawn(0)
- for(var/i=0, iYou adjusted the pressure nozzle. You'll now use [amount_per_transfer_from_this] units per spray."
-
/obj/item/weapon/reagent_containers/spray/examine(mob/user)
- if(..(user, 0) && user==src.loc)
- user << "[round(src.reagents.total_volume)] units left."
+ if(..(user, 0) && loc == user)
+ user << "[round(reagents.total_volume)] units left."
return
/obj/item/weapon/reagent_containers/spray/verb/empty()
@@ -120,8 +88,7 @@
return
if(isturf(usr.loc))
usr << "You empty \the [src] onto the floor."
- reagents.reaction(usr.loc)
- spawn(5) src.reagents.clear_reagents()
+ reagents.trans_to(usr.loc, reagents.total_volume)
//space cleaner
/obj/item/weapon/reagent_containers/spray/cleaner
@@ -135,8 +102,8 @@
/obj/item/weapon/reagent_containers/spray/cleaner/New()
..()
- reagents.add_reagent("cleaner", src.volume)
-//pepperspray
+ reagents.add_reagent("cleaner", volume)
+
/obj/item/weapon/reagent_containers/spray/pepper
name = "pepperspray"
desc = "Manufactured by UhangInc, used to blind and down an opponent quickly."
@@ -147,7 +114,6 @@
volume = 40
var/safety = 1
-
/obj/item/weapon/reagent_containers/spray/pepper/New()
..()
reagents.add_reagent("condensedcapsaicin", 40)
@@ -166,7 +132,6 @@
return
..()
-//water flower
/obj/item/weapon/reagent_containers/spray/waterflower
name = "water flower"
desc = "A seemingly innocent sunflower...with a twist."
@@ -181,7 +146,6 @@
..()
reagents.add_reagent("water", 10)
-//chemsprayer
/obj/item/weapon/reagent_containers/spray/chemsprayer
name = "chem sprayer"
desc = "A utility used to spray large amounts of reagent in a given area."
@@ -192,49 +156,29 @@
w_class = 3.0
possible_transfer_amounts = null
volume = 600
- origin_tech = "combat=3;materials=3;engineering=3"
-
-
-//this is a big copypasta clusterfuck, but it's still better than it used to be!
-/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
- var/Sprays[3]
- for(var/i=1, i<=3, i++) // intialize sprays
- if(src.reagents.total_volume < 1) break
- var/obj/effect/decal/chempuff/D = new/obj/effect/decal/chempuff(get_turf(src))
- D.create_reagents(amount_per_transfer_from_this)
- src.reagents.trans_to(D, amount_per_transfer_from_this)
-
- D.icon += D.reagents.get_color()
-
- Sprays[i] = D
+ origin_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3)
+/obj/item/weapon/reagent_containers/spray/chemsprayer/Spray_at(atom/A as mob|obj)
var/direction = get_dir(src, A)
var/turf/T = get_turf(A)
var/turf/T1 = get_step(T,turn(direction, 90))
- var/turf/T2 = get_step(T,turn(direction, -90))
- var/list/the_targets = list(T,T1,T2)
-
- for(var/i=1, i<=Sprays.len, i++)
- spawn()
- var/obj/effect/decal/chempuff/D = Sprays[i]
- if(!D) continue
-
- // Spreads the sprays a little bit
- var/turf/my_target = pick(the_targets)
- the_targets -= my_target
-
- for(var/j=1, j<=rand(6,8), j++)
- step_towards(D, my_target)
- D.reagents.reaction(get_turf(D))
- for(var/atom/t in get_turf(D))
- D.reagents.reaction(t)
- sleep(2)
- qdel(D)
+ var/turf/T2 = get_step(T,turn(direction, -90))
+ var/list/the_targets = list(T, T1, T2)
+ for(var/a = 1 to 3)
+ spawn(0)
+ if(reagents.total_volume < 1) break
+ var/obj/effect/effect/water/chempuff/D = new/obj/effect/effect/water/chempuff(get_turf(src))
+ var/turf/my_target = the_targets[a]
+ D.create_reagents(amount_per_transfer_from_this)
+ if(!src)
+ return
+ reagents.trans_to_obj(D, amount_per_transfer_from_this)
+ D.set_color()
+ D.set_up(my_target, rand(6, 8), 2)
return
-// Plant-B-Gone
-/obj/item/weapon/reagent_containers/spray/plantbgone // -- Skie
+/obj/item/weapon/reagent_containers/spray/plantbgone
name = "Plant-B-Gone"
desc = "Kills those pesky weeds!"
icon = 'icons/obj/hydroponics_machines.dmi'
@@ -242,16 +186,14 @@
item_state = "plantbgone"
volume = 100
-
/obj/item/weapon/reagent_containers/spray/plantbgone/New()
..()
reagents.add_reagent("plantbgone", 100)
-
/obj/item/weapon/reagent_containers/spray/plantbgone/afterattack(atom/A as mob|obj, mob/user as mob, proximity)
if(!proximity) return
- if (istype(A, /obj/effect/blob)) // blob damage in blob code
+ if(istype(A, /obj/effect/blob)) // blob damage in blob code
return
..()
\ No newline at end of file
diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm
index 9b2eee7d65e..3a1cb76522e 100644
--- a/code/modules/reagents/reagent_containers/syringes.dm
+++ b/code/modules/reagents/reagent_containers/syringes.dm
@@ -13,12 +13,14 @@
icon_state = "0"
matter = list("glass" = 150)
amount_per_transfer_from_this = 5
- possible_transfer_amounts = null //list(5,10,15)
+ possible_transfer_amounts = null
volume = 15
w_class = 1
sharp = 1
var/mode = SYRINGE_DRAW
var/image/filling //holds a reference to the current filling overlay
+ var/visible_name = "a syringe"
+ var/time = 30
on_reagent_change()
update_icon()
@@ -47,18 +49,17 @@
update_icon()
attackby(obj/item/I as obj, mob/user as mob)
-
return
afterattack(obj/target, mob/user, proximity)
- if(!proximity) return
- if(!target.reagents) return
-
- if(mode == SYRINGE_BROKEN)
- user << "\red This syringe is broken!"
+ if(!proximity || !target.reagents)
return
- if (user.a_intent == I_HURT && ismob(target))
+ if(mode == SYRINGE_BROKEN)
+ user << "This syringe is broken!"
+ return
+
+ if(user.a_intent == I_HURT && ismob(target))
if((CLUMSY in user.mutations) && prob(50))
target = user
syringestab(target, user)
@@ -68,86 +69,97 @@
switch(mode)
if(SYRINGE_DRAW)
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
+ if(!reagents.get_free_space())
+ user << "The syringe is full."
+ mode = SYRINGE_INJECT
return
if(ismob(target))//Blood!
- if(istype(target, /mob/living/carbon/slime))
- user << "\red You are unable to locate any blood."
+ if(reagents.has_reagent("blood"))
+ user << "There is already a blood sample in this syringe."
return
- if(src.reagents.has_reagent("blood"))
- user << "\red There is already a blood sample in this syringe"
- return
- if(istype(target, /mob/living/carbon))//maybe just add a blood reagent to all mobs. Then you can suck them dry...With hundreds of syringes. Jolly good idea.
- var/amount = src.reagents.maximum_volume - src.reagents.total_volume
+ if(istype(target, /mob/living/carbon))
+ if(istype(target, /mob/living/carbon/slime))
+ user << "You are unable to locate any blood."
+ return
+ var/amount = reagents.get_free_space()
var/mob/living/carbon/T = target
if(!T.dna)
- usr << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)"
+ user << "You are unable to locate any blood. (To be specific, your target seems to be missing their DNA datum)."
return
if(NOCLONE in T.mutations) //target done been et, no more blood in him
- user << "\red You are unable to locate any blood."
+ user << "You are unable to locate any blood."
return
var/datum/reagent/B
- if(istype(T,/mob/living/carbon/human))
+ if(istype(T, /mob/living/carbon/human))
var/mob/living/carbon/human/H = T
if(H.species && H.species.flags & NO_BLOOD)
- H.reagents.trans_to(src,amount)
+ H.reagents.trans_to_obj(src, amount)
else
- B = T.take_blood(src,amount)
+ B = T.take_blood(src, amount)
else
B = T.take_blood(src,amount)
if (B)
- src.reagents.reagent_list += B
- src.reagents.update_total()
- src.on_reagent_change()
- src.reagents.handle_reactions()
- user << "\blue You take a blood sample from [target]"
+ reagents.reagent_list += B
+ reagents.update_total()
+ on_reagent_change()
+ reagents.handle_reactions()
+ user << "You take a blood sample from [target]."
for(var/mob/O in viewers(4, user))
- O.show_message("\red [user] takes a blood sample from [target].", 1)
+ O.show_message("[user] takes a blood sample from [target].", 1)
else //if not mob
if(!target.reagents.total_volume)
- user << "\red [target] is empty."
+ user << "[target] is empty."
return
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers) && !istype(target,/obj/item/slime_extract))
- user << "\red You cannot directly remove reagents from this object."
+ if(!target.is_open_container() && !istype(target, /obj/structure/reagent_dispensers) && !istype(target, /obj/item/slime_extract))
+ user << "You cannot directly remove reagents from this object."
return
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
+ var/trans = target.reagents.trans_to_obj(src, amount_per_transfer_from_this)
+ user << "You fill the syringe with [trans] units of the solution."
+ update_icon()
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
+ if(!reagents.get_free_space())
+ mode = SYRINGE_INJECT
update_icon()
if(SYRINGE_INJECT)
if(!reagents.total_volume)
- user << "\red The syringe is empty."
+ user << "The syringe is empty."
+ mode = SYRINGE_DRAW
return
if(istype(target, /obj/item/weapon/implantcase/chem))
return
if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food) && !istype(target, /obj/item/slime_extract) && !istype(target, /obj/item/clothing/mask/smokable/cigarette) && !istype(target, /obj/item/weapon/storage/fancy/cigarettes))
- user << "\red You cannot directly fill this object."
+ user << "You cannot directly fill this object."
return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
+ if(!target.reagents.get_free_space())
+ user << "[target] is full."
return
+ var/mob/living/carbon/human/H = target
+ if(istype(H))
+ var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
+ if(!affected)
+ user << "\The [H] is missing that limb!"
+ return
+ else if(affected.status & ORGAN_ROBOT)
+ user << "You cannot inject a robotic limb."
+ return
+
if(ismob(target) && target != user)
- var/time = 30 //Injecting through a hardsuit takes longer due to needing to find a port.
+ var/injtime = time //Injecting through a hardsuit takes longer due to needing to find a port.
- if(istype(target,/mob/living/carbon/human))
-
- var/mob/living/carbon/human/H = target
+ if(istype(H))
if(H.wear_suit)
- if(istype(H.wear_suit,/obj/item/clothing/suit/space))
- time = 60
+ if(istype(H.wear_suit, /obj/item/clothing/suit/space))
+ injtime = injtime * 2
else if(!H.can_inject(user, 1))
return
@@ -157,55 +169,38 @@
if(!M.can_inject(user, 1))
return
- for(var/mob/O in viewers(world.view, user))
- if(time == 30)
- O.show_message(text("\red [] is trying to inject []!", user, target), 1)
- else
- O.show_message(text("\red [] begins hunting for an injection port on []'s suit!", user, target), 1)
-
- if(!do_mob(user, target, time)) return
-
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with the syringe!", user, target), 1)
-
- if(istype(target,/mob/living))
- var/mob/living/M = target
- var/list/injected = list()
- for(var/datum/reagent/R in src.reagents.reagent_list)
- injected += R.name
- var/contained = english_list(injected)
- M.attack_log += text("\[[time_stamp()]\] Has been injected with [src.name] by [user.name] ([user.ckey]). Reagents: [contained]")
- user.attack_log += text("\[[time_stamp()]\] Used the [src.name] to inject [M.name] ([M.key]). Reagents: [contained]")
- msg_admin_attack("[user.name] ([user.ckey]) injected [M.name] ([M.key]) with [src.name]. Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
- src.reagents.reaction(target, INGEST)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/datum/reagent/blood/B
- for(var/datum/reagent/blood/d in src.reagents.reagent_list)
- B = d
- break
- var/trans
- if(B && istype(target,/mob/living/carbon))
- var/mob/living/carbon/C = target
- C.inject_blood(src,5)
+ if(injtime == time)
+ user.visible_message("[user] is trying to inject [target] with [visible_name]!")
else
- trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
+ user.visible_message("[user] begins hunting for an injection port on [target]'s suit!")
+
+ if(!do_mob(user, target, injtime))
+ return
+
+ user.visible_message("[user] injects [target] with the syringe!")
+
+ var/trans
+ if(ismob(target))
+ var/contained = reagentlist()
+ trans = reagents.trans_to_mob(target, amount_per_transfer_from_this, CHEM_BLOOD)
+ admin_inject_log(user, target, src, contained, trans)
+ else
+ trans = reagents.trans_to(target, amount_per_transfer_from_this)
+ user << "You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
+ if (reagents.total_volume <= 0 && mode == SYRINGE_INJECT)
+ mode = SYRINGE_DRAW
+ update_icon()
return
update_icon()
+ overlays.Cut()
+
if(mode == SYRINGE_BROKEN)
icon_state = "broken"
- overlays.Cut()
return
- var/rounded_vol = round(reagents.total_volume,5)
- overlays.Cut()
+
+ var/rounded_vol = round(reagents.total_volume, round(reagents.maximum_volume / 3))
if(ismob(loc))
var/injoverlay
switch(mode)
@@ -225,17 +220,14 @@
filling.color = reagents.get_color()
overlays += filling
-
proc/syringestab(mob/living/carbon/target as mob, mob/living/carbon/user as mob)
- user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])"
- target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)])"
- msg_admin_attack("[user.name] ([user.ckey]) attacked [target.name] ([target.ckey]) with [src.name] (INTENT: [uppertext(user.a_intent)]) (JMP)")
-
if(istype(target, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = target
+
var/target_zone = ran_zone(check_zone(user.zone_sel.selecting, target))
- var/obj/item/organ/external/affecting = target:get_organ(target_zone)
+ var/obj/item/organ/external/affecting = H.get_organ(target_zone)
if (!affecting || (affecting.status & ORGAN_DESTROYED) || affecting.is_stump())
user << "They are missing that limb!"
@@ -243,160 +235,68 @@
var/hit_area = affecting.name
- var/mob/living/carbon/human/H = target
if((user != target) && H.check_shields(7, "the [src.name]"))
return
- if (target != user && target.getarmor(target_zone, "melee") > 5 && prob(50))
+ if (target != user && H.getarmor(target_zone, "melee") > 5 && prob(50))
for(var/mob/O in viewers(world.view, user))
O.show_message(text("\red [user] tries to stab [target] in \the [hit_area] with [src.name], but the attack is deflected by armor!"), 1)
user.remove_from_mob(src)
qdel(src)
+
+ user.attack_log += "\[[time_stamp()]\] Attacked [target.name] ([target.ckey]) with \the [src] (INTENT: HARM)."
+ target.attack_log += "\[[time_stamp()]\] Attacked by [user.name] ([user.ckey]) with [src.name] (INTENT: HARM)."
+ msg_admin_attack("[key_name_admin(user)] attacked [key_name_admin(target)] with [src.name] (INTENT: HARM) (JMP)")
+
return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [user] stabs [target] in \the [hit_area] with [src.name]!"), 1)
+ user.visible_message("[user] stabs [target] in \the [hit_area] with [src.name]!")
if(affecting.take_damage(3))
- target:UpdateDamageIcon()
+ H.UpdateDamageIcon()
else
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [user] stabs [target] with [src.name]!"), 1)
+ user.visible_message("[user] stabs [target] with [src.name]!")
target.take_organ_damage(3)// 7 is the same as crowbar punch
- src.reagents.reaction(target, INGEST)
+
+
var/syringestab_amount_transferred = rand(0, (reagents.total_volume - 5)) //nerfed by popular demand
- src.reagents.trans_to(target, syringestab_amount_transferred)
- src.break_syringe(target, user)
+ var/contained_reagents = reagents.get_reagents()
+ var/trans = reagents.trans_to_mob(target, syringestab_amount_transferred, CHEM_BLOOD)
+ if(isnull(trans)) trans = 0
+ admin_inject_log(user, target, src, contained_reagents, trans, violent=1)
+ break_syringe(target, user)
proc/break_syringe(mob/living/carbon/target, mob/living/carbon/user)
- src.desc += " It is broken."
- src.mode = SYRINGE_BROKEN
+ desc += " It is broken."
+ mode = SYRINGE_BROKEN
if(target)
- src.add_blood(target)
+ add_blood(target)
if(user)
- src.add_fingerprint(user)
- src.update_icon()
+ add_fingerprint(user)
+ update_icon()
-
-
-/obj/item/weapon/reagent_containers/ld50_syringe
+/obj/item/weapon/reagent_containers/syringe/ld50_syringe
name = "Lethal Injection Syringe"
desc = "A syringe used for lethal injections."
- icon = 'icons/obj/syringe.dmi'
- item_state = "syringe_0"
- icon_state = "0"
amount_per_transfer_from_this = 50
- possible_transfer_amounts = null //list(5,10,15)
volume = 50
- var/mode = SYRINGE_DRAW
+ visible_name = "a giant syringe"
+ time = 300
- on_reagent_change()
- update_icon()
-
- pickup(mob/user)
+ afterattack(obj/target, mob/user, flag)
+ if(mode == SYRINGE_DRAW && ismob(target)) // No drawing 50 units of blood at once
+ user << "This needle isn't designed for drawing blood."
+ return
+ if(user.a_intent == "hurt" && ismob(target)) // No instant injecting
+ user << "This syringe is too big to stab someone with it."
..()
- update_icon()
-
- dropped(mob/user)
- ..()
- update_icon()
-
- attack_self(mob/user as mob)
- mode = !mode
- update_icon()
-
- attack_hand()
- ..()
- update_icon()
-
- attackby(obj/item/I as obj, mob/user as mob)
-
- return
-
- afterattack(obj/target, mob/user , flag)
- if(!target.reagents) return
-
- switch(mode)
- if(SYRINGE_DRAW)
-
- if(reagents.total_volume >= reagents.maximum_volume)
- user << "\red The syringe is full."
- return
-
- if(ismob(target))
- if(istype(target, /mob/living/carbon))//I Do not want it to suck 50 units out of people
- usr << "This needle isn't designed for drawing blood."
- return
- else //if not mob
- if(!target.reagents.total_volume)
- user << "\red [target] is empty."
- return
-
- if(!target.is_open_container() && !istype(target,/obj/structure/reagent_dispensers))
- user << "\red You cannot directly remove reagents from this object."
- return
-
- var/trans = target.reagents.trans_to(src, amount_per_transfer_from_this) // transfer from, transfer to - who cares?
-
- user << "\blue You fill the syringe with [trans] units of the solution."
- if (reagents.total_volume >= reagents.maximum_volume)
- mode=!mode
- update_icon()
-
- if(SYRINGE_INJECT)
- if(!reagents.total_volume)
- user << "\red The Syringe is empty."
- return
- if(istype(target, /obj/item/weapon/implantcase/chem))
- return
- if(!target.is_open_container() && !ismob(target) && !istype(target, /obj/item/weapon/reagent_containers/food))
- user << "\red You cannot directly fill this object."
- return
- if(target.reagents.total_volume >= target.reagents.maximum_volume)
- user << "\red [target] is full."
- return
-
- if(ismob(target) && target != user)
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] is trying to inject [] with a giant syringe!", user, target), 1)
- if(!do_mob(user, target, 300)) return
- for(var/mob/O in viewers(world.view, user))
- O.show_message(text("\red [] injects [] with a giant syringe!", user, target), 1)
- src.reagents.reaction(target, INGEST)
- if(ismob(target) && target == user)
- src.reagents.reaction(target, INGEST)
- spawn(5)
- var/trans = src.reagents.trans_to(target, amount_per_transfer_from_this)
- user << "\blue You inject [trans] units of the solution. The syringe now contains [src.reagents.total_volume] units."
- if (reagents.total_volume >= reagents.maximum_volume && mode==SYRINGE_INJECT)
- mode = SYRINGE_DRAW
- update_icon()
- return
-
-
- update_icon()
- var/rounded_vol = round(reagents.total_volume,50)
- if(ismob(loc))
- var/mode_t
- switch(mode)
- if (SYRINGE_DRAW)
- mode_t = "d"
- if (SYRINGE_INJECT)
- mode_t = "i"
- icon_state = "[mode_t][rounded_vol]"
- else
- icon_state = "[rounded_vol]"
- item_state = "syringe_[rounded_vol]"
-
////////////////////////////////////////////////////////////////////////////////
/// Syringes. END
////////////////////////////////////////////////////////////////////////////////
-
-
/obj/item/weapon/reagent_containers/syringe/inaprovaline
name = "Syringe (inaprovaline)"
desc = "Contains inaprovaline - used to stabilize patients."
@@ -435,40 +335,9 @@
mode = SYRINGE_INJECT
update_icon()
-/obj/item/weapon/reagent_containers/ld50_syringe/choral
+/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral
New()
..()
reagents.add_reagent("chloralhydrate", 50)
mode = SYRINGE_INJECT
update_icon()
-
-
-//Robot syringes
-//Not special in any way, code wise. They don't have added variables or procs.
-/obj/item/weapon/reagent_containers/syringe/robot/antitoxin
- name = "Syringe (anti-toxin)"
- desc = "Contains anti-toxins."
- New()
- ..()
- reagents.add_reagent("anti_toxin", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/robot/inoprovaline
- name = "Syringe (inoprovaline)"
- desc = "Contains inaprovaline - used to stabilize patients."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 15)
- mode = SYRINGE_INJECT
- update_icon()
-
-/obj/item/weapon/reagent_containers/syringe/robot/mixed
- name = "Syringe (mixed)"
- desc = "Contains inaprovaline & anti-toxins."
- New()
- ..()
- reagents.add_reagent("inaprovaline", 7)
- reagents.add_reagent("anti_toxin", 8)
- mode = SYRINGE_INJECT
- update_icon()
\ No newline at end of file
diff --git a/code/modules/recycling/disposal-construction.dm b/code/modules/recycling/disposal-construction.dm
index d95921bb2c1..d88d5cb5947 100644
--- a/code/modules/recycling/disposal-construction.dm
+++ b/code/modules/recycling/disposal-construction.dm
@@ -10,11 +10,12 @@
anchored = 0
density = 0
pressure_resistance = 5*ONE_ATMOSPHERE
- matter = list("metal" = 1850)
+ matter = list(DEFAULT_WALL_MATERIAL = 1850)
level = 2
+ var/sortType = ""
var/ptype = 0
- // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet
-
+ // 0=straight, 1=bent, 2=junction-j1, 3=junction-j2, 4=junction-y, 5=trunk, 6=disposal bin, 7=outlet, 8=inlet 9=pipe-j1s 10=pipe-j2s
+ var/subtype = 0
var/dpdir = 0 // directions as disposalpipe
var/base_state = "pipe-s"
@@ -154,9 +155,21 @@
if(8)
return /obj/machinery/disposal/deliveryChute
if(9)
- return /obj/structure/disposalpipe/sortjunction
+ switch(subtype)
+ if(0)
+ return /obj/structure/disposalpipe/sortjunction
+ if(1)
+ return /obj/structure/disposalpipe/sortjunction/wildcard
+ if(2)
+ return /obj/structure/disposalpipe/sortjunction/untagged
if(10)
- return /obj/structure/disposalpipe/sortjunction/flipped
+ switch(subtype)
+ if(0)
+ return /obj/structure/disposalpipe/sortjunction/flipped
+ if(1)
+ return /obj/structure/disposalpipe/sortjunction/wildcard/flipped
+ if(2)
+ return /obj/structure/disposalpipe/sortjunction/untagged/flipped
///// Z-Level stuff
if(11)
return /obj/structure/disposalpipe/up
@@ -187,7 +200,13 @@
if(8)
nicetype = "delivery chute"
if(9, 10)
- nicetype = "sorting pipe"
+ switch(subtype)
+ if(0)
+ nicetype = "sorting pipe"
+ if(1)
+ nicetype = "wildcard sorting pipe"
+ if(2)
+ nicetype = "untagged sorting pipe"
ispipe = 1
if(13)
nicetype = "tagging pipe"
@@ -267,7 +286,10 @@
//Needs some special treatment ;)
if(ptype==9 || ptype==10)
var/obj/structure/disposalpipe/sortjunction/SortP = P
+ SortP.sortType = sortType
SortP.updatedir()
+ SortP.updatedesc()
+ SortP.updatename()
else if(ptype==6) // Disposal bin
var/obj/machinery/disposal/P = new /obj/machinery/disposal(src.loc)
diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm
index ead3ba3d91d..525a79d9d17 100644
--- a/code/modules/recycling/disposal.dm
+++ b/code/modules/recycling/disposal.dm
@@ -663,7 +663,8 @@
var/health = 10 // health points 0-10
layer = 2.3 // slightly lower than wires and other pipes
var/base_icon_state // initial icon state on map
-
+ var/sortType = ""
+ var/subtype = 0
// new pipe, set the icon_state as on map
New()
..()
@@ -910,8 +911,10 @@
C.ptype = 5
if("pipe-j1s")
C.ptype = 9
+ C.sortType = sortType
if("pipe-j2s")
C.ptype = 10
+ C.sortType = sortType
///// Z-Level stuff
if("pipe-u")
C.ptype = 11
@@ -922,6 +925,7 @@
C.ptype = 13
if("pipe-tagger-partial")
C.ptype = 14
+ C.subtype = src.subtype
src.transfer_fingerprints_to(C)
C.set_dir(dir)
C.density = 0
@@ -1187,7 +1191,6 @@
icon_state = "pipe-j1s"
desc = "An underfloor disposal pipe with a package sorting mechanism."
- var/sortType = ""
var/posdir = 0
var/negdir = 0
var/sortdir = 0
@@ -1278,7 +1281,7 @@
/obj/structure/disposalpipe/sortjunction/wildcard
name = "wildcard sorting junction"
desc = "An underfloor disposal pipe which filters all wrapped and tagged items."
-
+ subtype = 1
divert_check(var/checkTag)
return checkTag != ""
@@ -1286,7 +1289,7 @@
/obj/structure/disposalpipe/sortjunction/untagged
name = "untagged sorting junction"
desc = "An underfloor disposal pipe which filters all untagged items."
-
+ subtype = 2
divert_check(var/checkTag)
return checkTag == ""
diff --git a/code/modules/research/circuitprinter.dm b/code/modules/research/circuitprinter.dm
index aacdbbb3453..57812535b65 100644
--- a/code/modules/research/circuitprinter.dm
+++ b/code/modules/research/circuitprinter.dm
@@ -1,20 +1,21 @@
/*///////////////Circuit Imprinter (By Darem)////////////////////////
Used to print new circuit boards (for computers and similar systems) and AI modules. Each circuit board pattern are stored in
a /datum/desgin on the linked R&D console. You can then print them out in a fasion similar to a regular lathe. However, instead of
-using metal and glass, it uses glass and reagents (usually sulfuric acis).
-
+using metal and glass, it uses glass and reagents (usually sulphuric acid).
*/
+
/obj/machinery/r_n_d/circuit_imprinter
name = "Circuit Imprinter"
icon_state = "circuit_imprinter"
flags = OPENCONTAINER
- var/g_amount = 0
- var/gold_amount = 0
- var/diamond_amount = 0
- var/uranium_amount = 0
- var/max_material_amount = 75000.0
+ var/list/materials = list("metal" = 0, "glass" = 0, "gold" = 0, "silver" = 0, "phoron" = 0, "uranium" = 0, "diamond" = 0)
+ var/list/datum/design/queue = list()
+ var/progress = 0
+
+ var/max_material_storage = 75000
var/mat_efficiency = 1
+ var/speed = 1
use_power = 1
idle_power_usage = 30
@@ -30,25 +31,51 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
RefreshParts()
+/obj/machinery/r_n_d/circuit_imprinter/process()
+ ..()
+ if(stat)
+ update_icon()
+ return
+ if(queue.len == 0)
+ busy = 0
+ update_icon()
+ return
+ var/datum/design/D = queue[1]
+ if(canBuild(D))
+ busy = 1
+ progress += speed
+ if(progress >= D.time)
+ build(D)
+ progress = 0
+ removeFromQueue(1)
+ if(linked_console)
+ linked_console.updateUsrDialog()
+ update_icon()
+ else
+ if(busy)
+ visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].")
+ busy = 0
+ update_icon()
+
/obj/machinery/r_n_d/circuit_imprinter/RefreshParts()
var/T = 0
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
T += G.reagents.maximum_volume
- var/datum/reagents/R = new/datum/reagents(T) //Holder for the reagents used as materials.
- reagents = R
- R.my_atom = src
- T = 0
+ create_reagents(T)
+ max_material_storage = 0
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
- T += M.rating
- max_material_amount = T * 75000.0
+ max_material_storage += M.rating * 75000
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
mat_efficiency = 1 - (T - 1) / 4
+ speed = T
/obj/machinery/r_n_d/circuit_imprinter/update_icon()
if(panel_open)
icon_state = "circuit_imprinter_t"
+ else if(busy)
+ icon_state = "circuit_imprinter_ani"
else
icon_state = "circuit_imprinter"
@@ -61,29 +88,27 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
return
/obj/machinery/r_n_d/circuit_imprinter/proc/TotalMaterials()
- return g_amount + gold_amount + diamond_amount + uranium_amount
+ var/t = 0
+ for(var/f in materials)
+ t += materials[f]
+ return t
/obj/machinery/r_n_d/circuit_imprinter/dismantle()
for(var/obj/I in component_parts)
- if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to(I, reagents.total_volume)
- if(g_amount >= 3750)
- var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(loc)
- G.amount = round(g_amount / 3750)
- if(gold_amount >= 2000)
- var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(loc)
- G.amount = round(gold_amount / 2000)
- if(diamond_amount >= 2000)
- var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(loc)
- G.amount = round(diamond_amount / 2000)
- if(uranium_amount >= 2000)
- var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(loc)
- G.amount = round(uranium_amount / 2000)
+ if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
+ reagents.trans_to_obj(I, reagents.total_volume)
+ for(var/f in materials)
+ if(materials[f] >= SHEET_MATERIAL_AMOUNT)
+ var/path = getMaterialType(f)
+ if(path)
+ var/obj/item/stack/S = new f(loc)
+ S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
..()
/obj/machinery/r_n_d/circuit_imprinter/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy. Please wait for completion of previous operation."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_imprinter = null
@@ -96,60 +121,91 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- user << "\The [src] appears to not be working!"
- return
if(!linked_console)
- user << "\The [src] must be linked to an R&D console first!"
+ user << "\The [src] must be linked to an R&D console first."
return 1
- if(O.is_open_container())
- return 0
-// if(!istype(O, /obj/item/stack/sheet/glass) && !istype(O, /obj/item/stack/sheet/mineral/gold) && !istype(O, /obj/item/stack/sheet/mineral/diamond) && !istype(O, /obj/item/stack/sheet/mineral/uranium))
-// user << "You cannot insert this item into \the [src]!"
-// return 1
+ if(O.is_open_container())
+ return 0
+ if(!istype(O, /obj/item/stack/material/glass) && !istype(O, /obj/item/stack/material/gold) && !istype(O, /obj/item/stack/material/diamond) && !istype(O, /obj/item/stack/material/uranium))
+ user << "You cannot insert this item into \the [src]."
+ return 1
if(stat)
return 1
- if(busy)
- user << "\The [src] is busy. Please wait for completion of previous operation."
- return 1
- if(istype(O, /obj/item/stack/sheet/glass) || istype(O, /obj/item/stack/sheet/mineral/gold) || istype(O, /obj/item/stack/sheet/mineral/diamond) || istype(O, /obj/item/stack/sheet/mineral/uranium))
+ if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
+ user << "\The [src]'s material bin is full. Please remove material before adding more."
+ return 1
- var/obj/item/stack/sheet/stack = O
- if((TotalMaterials() + stack.perunit) > max_material_amount)
- user << "\The [src] is full. Please remove glass from \the [src] in order to insert more."
- return 1
+ var/obj/item/stack/stack = O
- var/amount = round(input("How many sheets do you want to add?") as num)
- if(amount < 0)
- amount = 0
- if(amount == 0)
- return
- if(amount > stack.amount)
- amount = min(stack.amount, round((max_material_amount - TotalMaterials()) / stack.perunit))
+ var/amount = round(input("How many sheets do you want to add?") as num)
+ if(!O)
+ return
+ if(amount <= 0)//No negative numbers
+ return
+ if(amount > stack.get_amount())
+ amount = stack.get_amount()
+ if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill
+ amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
- busy = 1
- use_power(max(1000, (3750 * amount / 10)))
- var/stacktype = stack.type
- stack.use(amount)
- if(do_after(usr, 16))
- user << "You add [amount] sheets to \the [src]."
- switch(stacktype)
- if(/obj/item/stack/sheet/glass)
- g_amount += amount * 3750
- if(/obj/item/stack/sheet/mineral/gold)
- gold_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/diamond)
- diamond_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/uranium)
- uranium_amount += amount * 2000
- else
- new stacktype(loc, amount)
- busy = 0
- updateUsrDialog()
+ busy = 1
+ use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
+ var/stacktype = stack.type
+ var/t = getMaterialName(stacktype)
+ if(t)
+ if(do_after(usr, 16))
+ if(stack.use(amount))
+ user << "You add [amount] sheets to \the [src]."
+ materials[t] += amount * SHEET_MATERIAL_AMOUNT
+ busy = 0
+ updateUsrDialog()
- ..()
+/obj/machinery/r_n_d/circuit_imprinter/proc/addToQueue(var/datum/design/D)
+ queue += D
+ return
-//This is to stop these machines being hackable via clicking.
-/obj/machinery/r_n_d/circuit_imprinter/attack_hand(mob/user as mob)
- return
\ No newline at end of file
+/obj/machinery/r_n_d/circuit_imprinter/proc/removeFromQueue(var/index)
+ queue.Cut(index, index + 1)
+ return
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/canBuild(var/datum/design/D)
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ return 0
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ return 0
+ return 1
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/getLackingMaterials(var/datum/design/D)
+ var/ret = ""
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ if(ret != "")
+ ret += ", "
+ ret += "[D.materials[M] - materials[M]] [M]"
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ if(ret != "")
+ ret += ", "
+ ret += C
+ return ret
+
+/obj/machinery/r_n_d/circuit_imprinter/proc/build(var/datum/design/D)
+ var/power = active_power_usage
+ for(var/M in D.materials)
+ power += round(D.materials[M] / 5)
+ power = max(active_power_usage, power)
+ use_power(power)
+ for(var/M in D.materials)
+ materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
+ for(var/C in D.chemicals)
+ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency)
+
+ if(D.build_path)
+ var/obj/new_item = new D.build_path(src)
+ new_item.loc = loc
+ if(mat_efficiency != 1) // No matter out of nowhere
+ if(new_item.matter && new_item.matter.len > 0)
+ for(var/i in new_item.matter)
+ new_item.matter[i] = new_item.matter[i] * mat_efficiency
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index 86eb5cce555..6be92f41409 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
/***************************************************************
** Design Datums **
** All the data for building stuff and tracking reliability. **
@@ -7,1579 +5,1645 @@
/*
For the materials datum, it assumes you need reagents unless specified otherwise. To designate a material that isn't a reagent,
you use one of the material IDs below. These are NOT ids in the usual sense (they aren't defined in the object or part of a datum),
-they are simply references used as part of a "has materials?" type proc. They all start with a $ to denote that they aren't reagents.
+they are simply references used as part of a "has materials?" type proc. They all start with a to denote that they aren't reagents.
The currently supporting non-reagent materials:
-- $metal (/obj/item/stack/metal). One sheet = 3750 units.
-- $glass (/obj/item/stack/glass). One sheet = 3750 units.
-- $phoron (/obj/item/stack/phoron). One sheet = 3750 units.
-- $silver (/obj/item/stack/silver). One sheet = 3750 units.
-- $gold (/obj/item/stack/gold). One sheet = 3750 units.
-- $uranium (/obj/item/stack/uranium). One sheet = 3750 units.
-- $diamond (/obj/item/stack/diamond). One sheet = 3750 units.
-(Insert new ones here)
Don't add new keyword/IDs if they are made from an existing one (such as rods which are made from metal). Only add raw materials.
Design Guidlines
-- The reliability formula for all R&D built items is reliability_base (a fixed number) + total tech levels required to make it +
-reliability_mod (starts at 0, gets improved through experimentation). Example: PACMAN generator. 79 base reliablity + 6 tech
-(3 phorontech, 3 powerstorage) + 0 (since it's completely new) = 85% reliability. Reliability is the chance it works CORRECTLY.
- When adding new designs, check rdreadme.dm to see what kind of things have already been made and where new stuff is needed.
-- A single sheet of anything is 3750 units of material. Materials besides metal/glass require help from other jobs (mining for
+- A single sheet of anything is 2000 units of material. Materials besides metal/glass require help from other jobs (mining for
other types of metals and chemistry for reagents).
-- Add the AUTOLATHE tag to
-
*/
-#define IMPRINTER 1 //For circuits. Uses glass/chemicals.
-#define PROTOLATHE 2 //New stuff. Uses glass/metal/chemicals
-#define AUTOLATHE 4 //Uses glass/metal only.
-#define CRAFTLATHE 8 //Uses fuck if I know. For use eventually.
-#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
-//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
+//Note: More then one of these can be added to a design.
-datum/design //Datum for object designs, used in construction
+/datum/design //Datum for object designs, used in construction
var/name = null //Name of the created object. If null it will be 'guessed' from build_path if possible.
var/desc = null //Description of the created object. If null it will use group_desc and name where applicable.
var/item_name = null //An item name before it is modified by various name-modifying procs
var/id = "id" //ID of the created object for easy refernece. Alphanumeric, lower-case, no symbols.
var/list/req_tech = list() //IDs of that techs the object originated from and the minimum level requirements.
- var/reliability_mod = 0 //Reliability modifier of the device at it's starting point.
- var/reliability_base = 100 //Base reliability of a device before modifiers.
- var/reliability = 100 //Reliability of the device.
var/build_type = null //Flag as to what kind machine the design is built in. See defines.
var/list/materials = list() //List of materials. Format: "id" = amount.
+ var/list/chemicals = list() //List of chemicals.
var/build_path = null //The path of the object that gets created.
- var/locked = 0 //If true it will spawn inside a lockbox with currently sec access.
+ var/time = 10 //How many ticks it requires to build
var/category = null //Primarily used for Mech Fabricators, but can be used for anything.
+ var/sort_string = "ZZZZZ" //Sorting order
-//A proc to calculate the reliability of a design based on tech levels and innate modifiers.
-//Input: A list of /datum/tech; Output: The new reliabilty.
-datum/design/proc/CalcReliability(var/list/temp_techs)
- var/new_reliability = reliability_mod + reliability_base
- for(var/datum/tech/T in temp_techs)
- if(T.id in req_tech)
- new_reliability += T.level
- new_reliability = between(reliability_base, new_reliability, 100)
- reliability = new_reliability
- return
-
-datum/design/New()
+/datum/design/New()
..()
item_name = name
AssembleDesignInfo()
//These procs are used in subtypes for assigning names and descriptions dynamically
-datum/design/proc/AssembleDesignInfo()
+/datum/design/proc/AssembleDesignInfo()
AssembleDesignName()
AssembleDesignDesc()
return
-datum/design/proc/AssembleDesignName()
+/datum/design/proc/AssembleDesignName()
if(!name && build_path) //Get name from build path if posible
var/atom/movable/A = build_path
name = initial(A.name)
item_name = name
return
-datum/design/proc/AssembleDesignDesc()
+/datum/design/proc/AssembleDesignDesc()
if(!desc) //Try to make up a nice description if we don't have one
desc = "Allows for the construction of \a [item_name]."
return
-///////////////////////////////////
-/////General Type Definitions//////
-///////////////////////////////////
-datum/design/circuit
- build_type = IMPRINTER
- req_tech = list("programming" = 2)
- materials = list("$glass" = 2000, "sacid" = 20)
-
-datum/design/circuit/AssembleDesignName()
- ..()
- name = "Circuit design ([item_name])"
-
-datum/design/circuit/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [item_name] circuit board."
-
-datum/design/item
+/datum/design/item
build_type = PROTOLATHE
-///////////////////////////////////
-//////////Computer Boards//////////
-///////////////////////////////////
-datum/design/circuit/seccamera
- name = "security camera monitor"
- id = "seccamera"
- build_path = /obj/item/weapon/circuitboard/security
-
-datum/design/circuit/aicore
- name = "AI core"
- id = "aicore"
- req_tech = list("programming" = 4, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/aicore
-
-datum/design/circuit/aiupload
- name = "AI upload console"
- id = "aiupload"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/aiupload
-
-datum/design/circuit/borgupload
- name = "cyborg upload console"
- id = "borgupload"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/borgupload
-
-datum/design/circuit/operating
- name = "patient monitoring console"
- id = "operating"
- build_path = /obj/item/weapon/circuitboard/operating
-
-datum/design/circuit/pandemic
- name = "PanD.E.M.I.C. 2200"
- id = "pandemic"
- build_path = /obj/item/weapon/circuitboard/pandemic
-
-datum/design/circuit/scan_console
- name = "DNA machine"
- id = "scan_console"
- build_path = /obj/item/weapon/circuitboard/scan_consolenew
-
-datum/design/circuit/comconsole
- name = "communications console"
- id = "comconsole"
- build_path = /obj/item/weapon/circuitboard/communications
-
-datum/design/circuit/idcardconsole
- name = "ID card modification console"
- id = "idcardconsole"
- build_path = /obj/item/weapon/circuitboard/card
-
-datum/design/circuit/crewconsole
- name = "crew monitoring console"
- id = "crewconsole"
- req_tech = list("programming" = 3, "magnets" = 2, "biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/crew
-
-datum/design/circuit/teleconsole
- name = "teleporter control console"
- id = "teleconsole"
- req_tech = list("programming" = 3, "bluespace" = 2)
-
-datum/design/circuit/emp_data
- name = "employment records console"
- id = "emp_data"
- build_path = /obj/item/weapon/circuitboard/skills
-
-datum/design/circuit/med_data
- name = "medical records console"
- id = "med_data"
- build_path = /obj/item/weapon/circuitboard/med_data
-
-datum/design/circuit/secdata
- name = "security records console"
- id = "sec_data"
- build_path = /obj/item/weapon/circuitboard/secure_data
-
-datum/design/circuit/atmosalerts
- name = "atmosphere alert console"
- id = "atmosalerts"
- build_path = /obj/item/weapon/circuitboard/atmos_alert
-
-datum/design/circuit/air_management
- name = "atmosphere monitoring console"
- id = "air_management"
- build_path = /obj/item/weapon/circuitboard/air_management
-
-datum/design/circuit/rcon_console
- name = "RCON remote control console"
- id = "rcon_console"
- req_tech = list("programming" = 4, "engineering" = 3, "powerstorage" = 5)
- build_path = /obj/item/weapon/circuitboard/rcon_console
-
-/* Uncomment if someone makes these buildable
-datum/design/circuit/general_alert
- name = "general alert console"
- id = "general_alert"
- build_path = /obj/item/weapon/circuitboard/general_alert
-*/
-
-datum/design/circuit/robocontrol
- name = "robotics control console"
- id = "robocontrol"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/robotics
-
-datum/design/circuit/dronecontrol
- name = "drone control console"
- id = "dronecontrol"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/drone_control
-
-datum/design/circuit/clonecontrol
- name = "cloning control console"
- id = "clonecontrol"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/cloning
-
-datum/design/circuit/clonepod
- name = "clone pod"
- id = "clonepod"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/clonepod
-
-datum/design/circuit/clonescanner
- name = "cloning scanner"
- id = "clonescanner"
- req_tech = list("programming" = 3, "biotech" = 3)
- build_path = /obj/item/weapon/circuitboard/clonescanner
-
-datum/design/circuit/arcademachine
- name = "arcade machine"
- id = "arcademachine"
- req_tech = list("programming" = 1)
- build_path = /obj/item/weapon/circuitboard/arcade
-
-datum/design/circuit/powermonitor
- name = "power monitoring console"
- id = "powermonitor"
- build_path = /obj/item/weapon/circuitboard/powermonitor
-
-datum/design/circuit/solarcontrol
- name = "solar control console"
- id = "solarcontrol"
- build_path = /obj/item/weapon/circuitboard/solar_control
-
-datum/design/circuit/prisonmanage
- name = "prisoner management console"
- id = "prisonmanage"
- build_path = /obj/item/weapon/circuitboard/prisoner
-
-datum/design/circuit/mechacontrol
- name = "exosuit control console"
- id = "mechacontrol"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/mecha_control
-
-datum/design/circuit/mechapower
- name = "mech bay power control console"
- id = "mechapower"
- build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
-
-datum/design/circuit/rdconsole
- name = "R&D control console"
- id = "rdconsole"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/rdconsole
-
-datum/design/circuit/ordercomp
- name = "supply ordering console"
- id = "ordercomp"
- build_path = /obj/item/weapon/circuitboard/ordercomp
-
-datum/design/circuit/supplycomp
- name = "supply control console"
- id = "supplycomp"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/supplycomp
-
-datum/design/circuit/comm_monitor
- name = "telecommunications monitoring console"
- id = "comm_monitor"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/comm_monitor
-
-datum/design/circuit/comm_server
- name = "telecommunications server monitoring console"
- id = "comm_server"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/comm_server
-
-datum/design/circuit/message_monitor
- name = "messaging monitor console"
- id = "message_monitor"
- req_tech = list("programming" = 5)
- build_path = /obj/item/weapon/circuitboard/message_monitor
-
-datum/design/circuit/aifixer
- name = "AI integrity restorer"
- id = "aifixer"
- req_tech = list("programming" = 3, "biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/aifixer
-
-///////////////////////////////////
-/////////Shield Generators/////////
-///////////////////////////////////
-datum/design/circuit/shield
- req_tech = list("bluespace" = 4, "phorontech" = 3)
- materials = list("$glass" = 2000, "sacid" = 20, "$phoron" = 10000, "$diamond" = 5000, "$gold" = 10000)
-
-datum/design/circuit/shield/AssembleDesignName()
- name = "Shield generator circuit design ([name])"
-datum/design/circuit/shield/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a [name] shield generator."
-
-datum/design/circuit/shield/bubble
- name = "bubble"
- id = "shield_gen"
- build_path = /obj/item/weapon/circuitboard/shield_gen
-
-datum/design/circuit/shield/hull
- name = "hull"
- id = "shield_gen_ex"
- build_path = /obj/item/weapon/circuitboard/shield_gen_ex
-
-datum/design/circuit/shield/capacitor
- name = "capacitor"
- desc = "Allows for the construction of a shield capacitor circuit board."
- id = "shield_cap"
- req_tech = list("magnets" = 3, "powerstorage" = 4)
- build_path = /obj/item/weapon/circuitboard/shield_cap
-
-///////////////////////////////////
-//////////AI Module Disks//////////
-///////////////////////////////////
-datum/design/aimodule/
- build_type = IMPRINTER
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 100)
-
-datum/design/aimodule/AssembleDesignName()
- name = "AI module design ([name])"
-datum/design/aimodule/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI module."
-
-datum/design/aimodule/safeguard
- name = "Safeguard"
- id = "safeguard"
- req_tech = list("programming" = 3, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/safeguard
-
-datum/design/aimodule/onehuman
- name = "OneCrewMember"
- id = "onehuman"
- req_tech = list("programming" = 4, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/oneHuman
-
-datum/design/aimodule/protectstation
- name = "ProtectStation"
- id = "protectstation"
- req_tech = list("programming" = 3, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/protectStation
-
-datum/design/aimodule/notele
- name = "TeleporterOffline"
- id = "notele"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/aiModule/teleporterOffline
-
-datum/design/aimodule/quarantine
- name = "Quarantine"
- id = "quarantine"
- req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/quarantine
-
-datum/design/aimodule/oxygen
- name = "OxygenIsToxicToHumans"
- id = "oxygen"
- req_tech = list("programming" = 3, "biotech" = 2, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/oxygen
-
-datum/design/aimodule/freeform
- name = "Freeform"
- id = "freeform"
- req_tech = list("programming" = 4, "materials" = 4)
- build_path = /obj/item/weapon/aiModule/freeform
-
-datum/design/aimodule/reset
- name = "Reset"
- id = "reset"
- req_tech = list("programming" = 3, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/reset
-
-datum/design/aimodule/purge
- name = "Purge"
- id = "purge"
- req_tech = list("programming" = 4, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/purge
-
-// *** Core modules
-datum/design/aimodule/core
- req_tech = list("programming" = 4, "materials" = 6)
-
-datum/design/aimodule/core/AssembleDesignName()
- name = "AI core module design ([name])"
-datum/design/aimodule/core/AssembleDesignDesc()
- desc = "Allows for the construction of \a '[name]' AI core module."
-
-datum/design/aimodule/core/freeformcore
- name = "Freeform"
- id = "freeformcore"
- build_path = /obj/item/weapon/aiModule/freeformcore
-
-datum/design/aimodule/core/asimov
- name = "Asimov"
- id = "asimov"
- build_path = /obj/item/weapon/aiModule/asimov
-
-datum/design/aimodule/core/paladin
- name = "P.A.L.A.D.I.N."
- id = "paladin"
- build_path = /obj/item/weapon/aiModule/paladin
-
-datum/design/aimodule/core/tyrant
- name = "T.Y.R.A.N.T."
- id = "tyrant"
- req_tech = list("programming" = 4, "syndicate" = 2, "materials" = 6)
- build_path = /obj/item/weapon/aiModule/tyrant
-
-///////////////////////////////////
-////////Telecomms Machinery////////
-///////////////////////////////////
-datum/design/circuit/tcom
- req_tech = list("programming" = 4, "engineering" = 4)
-
-datum/design/circuit/tcom/AssembleDesignName()
- name = "Telecommunications machinery circuit design ([name])"
-datum/design/circuit/tcom/AssembleDesignDesc()
- desc = "Allows for the construction of a telecommunications [name] circuit board."
-
-
-datum/design/circuit/tcom/server
- name = "server mainframe"
- id = "tcom-server"
- build_path = /obj/item/weapon/circuitboard/telecomms/server
-
-datum/design/circuit/tcom/processor
- name = "processor unit"
- id = "tcom-processor"
- build_path = /obj/item/weapon/circuitboard/telecomms/processor
-
-datum/design/circuit/tcom/bus
- name = "bus mainframe"
- id = "tcom-bus"
- build_path = /obj/item/weapon/circuitboard/telecomms/bus
-
-datum/design/circuit/tcom/hub
- name = "hub mainframe"
- id = "tcom-hub"
- build_path = /obj/item/weapon/circuitboard/telecomms/hub
-
-datum/design/circuit/tcom/relay
- name = "relay mainframe"
- id = "tcom-relay"
- req_tech = list("programming" = 3, "engineering" = 4, "bluespace" = 3)
- build_path = /obj/item/weapon/circuitboard/telecomms/relay
-
-datum/design/circuit/tcom/broadcaster
- name = "subspace broadcaster"
- id = "tcom-broadcaster"
- req_tech = list("programming" = 4, "engineering" = 4, "bluespace" = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
-
-datum/design/circuit/tcom/receiver
- name = "subspace receiver"
- id = "tcom-receiver"
- req_tech = list("programming" = 4, "engineering" = 3, "bluespace" = 2)
- build_path = /obj/item/weapon/circuitboard/telecomms/receiver
-
-///////////////////////////////////
-////////////Mecha Modules//////////
-///////////////////////////////////
-datum/design/circuit/mecha
- req_tech = list("programming" = 3)
-
-datum/design/circuit/mecha/AssembleDesignName()
- name = "Exosuit module circuit design ([name])"
-datum/design/circuit/mecha/AssembleDesignDesc()
- desc = "Allows for the construction of \a [name] module."
-
-
-datum/design/circuit/mecha/ripley_main
- name = "APLU 'Ripley' central control"
- id = "ripley_main"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
-
-datum/design/circuit/mecha/ripley_peri
- name = "APLU 'Ripley' peripherals control"
- id = "ripley_peri"
- build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
-
-datum/design/circuit/mecha/odysseus_main
- name = "'Odysseus' central control"
- id = "odysseus_main"
- req_tech = list("programming" = 3,"biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
-
-datum/design/circuit/mecha/odysseus_peri
- name = "'Odysseus' peripherals control"
- id = "odysseus_peri"
- req_tech = list("programming" = 3,"biotech" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
-
-datum/design/circuit/mecha/gygax_main
- name = "'Gygax' central control"
- id = "gygax_main"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
-
-datum/design/circuit/mecha/gygax_peri
- name = "'Gygax' peripherals control"
- id = "gygax_peri"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
-
-datum/design/circuit/mecha/gygax_targ
- name = "'Gygax' weapon control and targeting"
- id = "gygax_targ"
- req_tech = list("programming" = 4, "combat" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
-
-datum/design/circuit/mecha/durand_main
- name = "'Durand' central control"
- id = "durand_main"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/main
-
-datum/design/circuit/mecha/durand_peri
- name = "'Durand' peripherals control"
- id = "durand_peri"
- req_tech = list("programming" = 4)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
-
-datum/design/circuit/mecha/durand_targ
- name = "'Durand' weapon control and targeting"
- id = "durand_targ"
- req_tech = list("programming" = 4, "combat" = 2)
- build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
-
-datum/design/circuit/mecha/honker_main
- name = "'H.O.N.K' central control"
- id = "honker_main"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/main
-
-datum/design/circuit/mecha/honker_peri
- name = "'H.O.N.K' peripherals control"
- id = "honker_peri"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/peripherals
-
-datum/design/circuit/mecha/honker_targ
- name = "'H.O.N.K' weapon control and targeting"
- id = "honker_targ"
- build_path = /obj/item/weapon/circuitboard/mecha/honker/targeting
-
-////////////////////////////////////////
-/////////// Mecha Equpment /////////////
-////////////////////////////////////////
-
-datum/design/item/mecha
- build_type = MECHFAB
- req_tech = list("combat" = 3)
- category = "Exosuit Equipment"
-
-datum/design/item/mecha/AssembleDesignName()
- ..()
- name = "Exosuit module design ([item_name])"
-datum/design/item/mecha/weapon/AssembleDesignName()
- ..()
- name = "Exosuit weapon design ([item_name])"
-datum/design/item/mecha/AssembleDesignDesc()
- if(!desc)
- desc = "Allows for the construction of \a '[item_name]' exosuit module."
-
-// *** Weapon modules
-datum/design/item/mecha/weapon/scattershot
- id = "mech_scattershot"
- req_tech = list("combat" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
-
-datum/design/item/mecha/weapon/laser
- id = "mech_laser"
- req_tech = list("combat" = 3, "magnets" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
-
-datum/design/item/mecha/weapon/laser_rigged
- desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits."
- id = "mech_laser_rigged"
- req_tech = list("combat" = 2, "magnets" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
-
-datum/design/item/mecha/weapon/laser_heavy
- id = "mech_laser_heavy"
- req_tech = list("combat" = 4, "magnets" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
-
-datum/design/item/mecha/weapon/ion
- id = "mech_ion"
- req_tech = list("combat" = 4, "magnets" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
-
-datum/design/item/mecha/weapon/grenade_launcher
- id = "mech_grenade_launcher"
- req_tech = list("combat" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
-
-datum/design/item/mecha/weapon/clusterbang_launcher
- desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
- id = "clusterbang_launcher"
- req_tech = list("combat"= 5, "materials" = 5, "syndicate" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
-
-// *** Nonweapon modules
-datum/design/item/mecha/wormhole_gen
- desc = "An exosuit module that can generate small quasi-stable wormholes."
- id = "mech_wormhole_gen"
- req_tech = list("bluespace" = 3, "magnets" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
-
-datum/design/item/mecha/teleporter
- desc = "An exosuit module that allows teleportation to any position in view."
- id = "mech_teleporter"
- req_tech = list("bluespace" = 10, "magnets" = 5)
- build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
-
-datum/design/item/mecha/rcd
- desc = "An exosuit-mounted rapid construction device."
- id = "mech_rcd"
- req_tech = list("materials" = 4, "bluespace" = 3, "magnets" = 4, "powerstorage"=4, "engineering" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
-
-datum/design/item/mecha/gravcatapult
- desc = "An exosuit-mounted gravitational catapult."
- id = "mech_gravcatapult"
- req_tech = list("bluespace" = 2, "magnets" = 3, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
-
-datum/design/item/mecha/repair_droid
- desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
- id = "mech_repair_droid"
- req_tech = list("magnets" = 3, "programming" = 3, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
-
-datum/design/item/mecha/phoron_generator
- desc = "Exosuit-mounted phoron generator."
- id = "mech_phoron_generator"
- req_tech = list("phorontech" = 2, "powerstorage"= 2, "engineering" = 2)
- build_path = /obj/item/mecha_parts/mecha_equipment/generator
-
-datum/design/item/mecha/energy_relay
- id = "mech_energy_relay"
- req_tech = list("magnets" = 4, "powerstorage" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
-
-datum/design/item/mecha/ccw_armor
- desc = "Exosuit close-combat armor booster."
- id = "mech_ccw_armor"
- req_tech = list("materials" = 5, "combat" = 4)
- build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
-
-datum/design/item/mecha/proj_armor
- desc = "Exosuit projectile armor booster."
- id = "mech_proj_armor"
- req_tech = list("materials" = 5, "combat" = 5, "engineering"=3)
- build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
-
-datum/design/item/mecha/syringe_gun
- desc = "Exosuit-mounted syringe gun and chemical synthesizer."
- id = "mech_syringe_gun"
- req_tech = list("materials" = 3, "biotech"=4, "magnets"=4, "programming"=3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
-
-datum/design/item/mecha/diamond_drill
- desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
- id = "mech_diamond_drill"
- req_tech = list("materials" = 4, "engineering" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
-
-datum/design/item/mecha/generator_nuclear
- desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
- id = "mech_generator_nuclear"
- req_tech = list("powerstorage"= 3, "engineering" = 3, "materials" = 3)
- build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
-
-
-////////////////////////////////////////
-//////////Disk Construction Disks///////
-////////////////////////////////////////
-datum/design/design_disk
+/datum/design/item/design_disk
name = "Design Storage Disk"
desc = "Produce additional disks for storing device designs."
id = "design_disk"
- req_tech = list("programming" = 1)
- build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ req_tech = list(TECH_DATA = 1)
+ materials = list("metal" = 30, "glass" = 10)
build_path = /obj/item/weapon/disk/design_disk
+ sort_string = "GAAAA"
-datum/design/tech_disk
+/datum/design/item/tech_disk
name = "Technology Data Storage Disk"
desc = "Produce additional disks for storing technology data."
id = "tech_disk"
- req_tech = list("programming" = 1)
- build_type = PROTOLATHE | AUTOLATHE
- materials = list("$metal" = 30, "$glass" = 10)
+ req_tech = list(TECH_DATA = 1)
+ materials = list("metal" = 30, "glass" = 10)
build_path = /obj/item/weapon/disk/tech_disk
+ sort_string = "GAAAB"
-///////////////////////////////////
-/////Non-Board Computer Stuff//////
-///////////////////////////////////
-
-datum/design/item/intellicard
- name = "'intelliCard', AI preservation and transportation system"
- desc = "Allows for the construction of an intelliCard."
- id = "intellicard"
- req_tech = list("programming" = 4, "materials" = 4)
- materials = list("$glass" = 1000, "$gold" = 200)
- build_path = /obj/item/device/aicard
-
-datum/design/item/paicard
- name = "'pAI', personal artificial intelligence device"
- id = "paicard"
- req_tech = list("programming" = 2)
- materials = list("$glass" = 500, "$metal" = 500)
- build_path = /obj/item/device/paicard
-
-datum/design/item/posibrain
- id = "posibrain"
- req_tech = list("engineering" = 4, "materials" = 6, "bluespace" = 2, "programming" = 4)
- materials = list("$metal" = 2000, "$glass" = 1000, "$silver" = 1000, "$gold" = 500, "$phoron" = 500, "$diamond" = 100)
- build_path = /obj/item/device/mmi/digital/posibrain
-
-////////////////////////////////////////
-/////////////Stock Parts////////////////
-////////////////////////////////////////
-datum/design/item/stock_part
+/datum/design/item/stock_part
build_type = PROTOLATHE
-datum/design/item/stock_part/AssembleDesignName()
+/datum/design/item/stock_part/AssembleDesignName()
..()
name = "Component design ([item_name])"
-datum/design/item/stock_part/AssembleDesignDesc()
+/datum/design/item/stock_part/AssembleDesignDesc()
if(!desc)
desc = "A stock part used in the construction of various devices."
+/datum/design/item/stock_part/basic_capacitor
+ id = "basic_capacitor"
+ req_tech = list(TECH_POWER = 1)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor
+ sort_string = "CAAAA"
+
+/datum/design/item/stock_part/adv_capacitor
+ id = "adv_capacitor"
+ req_tech = list(TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/weapon/stock_parts/capacitor/adv
+ sort_string = "CAAAB"
+
+/datum/design/item/stock_part/super_capacitor
+ id = "super_capacitor"
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list("metal" = 50, "glass" = 50, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/capacitor/super
+ sort_string = "CAAAC"
+
+/datum/design/item/stock_part/micro_mani
+ id = "micro_mani"
+ req_tech = list(TECH_MATERIAL = 1, TECH_DATA = 1)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator
+ sort_string = "CAABA"
+
+/datum/design/item/stock_part/nano_mani
+ id = "nano_mani"
+ req_tech = list(TECH_MATERIAL = 3, TECH_DATA = 2)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/nano
+ sort_string = "CAABB"
+
+/datum/design/item/stock_part/pico_mani
+ id = "pico_mani"
+ req_tech = list(TECH_MATERIAL = 5, TECH_DATA = 2)
+ materials = list("metal" = 30)
+ build_path = /obj/item/weapon/stock_parts/manipulator/pico
+ sort_string = "CAABC"
+
+/datum/design/item/stock_part/basic_matter_bin
+ id = "basic_matter_bin"
+ req_tech = list(TECH_MATERIAL = 1)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin
+ sort_string = "CAACA"
+
+/datum/design/item/stock_part/adv_matter_bin
+ id = "adv_matter_bin"
+ req_tech = list(TECH_MATERIAL = 3)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/adv
+ sort_string = "CAACB"
+
+/datum/design/item/stock_part/super_matter_bin
+ id = "super_matter_bin"
+ req_tech = list(TECH_MATERIAL = 5)
+ materials = list("metal" = 80)
+ build_path = /obj/item/weapon/stock_parts/matter_bin/super
+ sort_string = "CAACC"
+
+/datum/design/item/stock_part/basic_micro_laser
+ id = "basic_micro_laser"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list("metal" = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser
+ sort_string = "CAADA"
+
+/datum/design/item/stock_part/high_micro_laser
+ id = "high_micro_laser"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list("metal" = 10, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/high
+ sort_string = "CAADB"
+
+/datum/design/item/stock_part/ultra_micro_laser
+ id = "ultra_micro_laser"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5)
+ materials = list("metal" = 10, "glass" = 20, "uranium" = 10)
+ build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
+ sort_string = "CAADC"
+
+/datum/design/item/stock_part/basic_sensor
+ id = "basic_sensor"
+ req_tech = list(TECH_MAGNET = 1)
+ materials = list("metal" = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module
+ sort_string = "CAAEA"
+
+/datum/design/item/stock_part/adv_sensor
+ id = "adv_sensor"
+ req_tech = list(TECH_MAGNET = 3)
+ materials = list("metal" = 50, "glass" = 20)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/adv
+ sort_string = "CAAEB"
+
+/datum/design/item/stock_part/phasic_sensor
+ id = "phasic_sensor"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 3)
+ materials = list("metal" = 50, "glass" = 20, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
+ sort_string = "CAAEC"
+
/datum/design/item/stock_part/RPED
name = "Rapid Part Exchange Device"
desc = "Special mechanical module made to store, sort, and apply standard machine parts."
id = "rped"
- req_tech = list("engineering" = 3, "materials" = 3)
- materials = list("$metal" = 15000, "$glass" = 5000)
+ req_tech = list(TECH_ENGINERING = 3, TECH_MATERIAL = 3)
+ materials = list("metal" = 15000, "glass" = 5000)
build_path = /obj/item/weapon/storage/part_replacer
+ sort_string = "CBAAA"
-datum/design/item/stock_part/basic_capacitor
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_capacitor"
- req_tech = list("powerstorage" = 1)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor
-
-datum/design/item/stock_part/basic_sensor
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_sensor"
- req_tech = list("magnets" = 1)
- materials = list("$metal" = 50, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module
-
-datum/design/item/stock_part/micro_mani
- build_type = PROTOLATHE | AUTOLATHE
- id = "micro_mani"
- req_tech = list("materials" = 1, "programming" = 1)
- materials = list("$metal" = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator
-
-datum/design/item/stock_part/basic_micro_laser
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_micro_laser"
- req_tech = list("magnets" = 1)
- materials = list("$metal" = 10, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser
-
-datum/design/item/stock_part/basic_matter_bin
- build_type = PROTOLATHE | AUTOLATHE
- id = "basic_matter_bin"
- req_tech = list("materials" = 1)
- materials = list("$metal" = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin
-
-datum/design/item/stock_part/adv_capacitor
- id = "adv_capacitor"
- req_tech = list("powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/weapon/stock_parts/capacitor/adv
-
-datum/design/item/stock_part/adv_sensor
- id = "adv_sensor"
- req_tech = list("magnets" = 3)
- materials = list("$metal" = 50, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/scanning_module/adv
-
-datum/design/item/stock_part/nano_mani
- id = "nano_mani"
- req_tech = list("materials" = 3, "programming" = 2)
- materials = list("$metal" = 30)
- build_path = /obj/item/weapon/stock_parts/manipulator/nano
-
-datum/design/item/stock_part/high_micro_laser
- id = "high_micro_laser"
- req_tech = list("magnets" = 3)
- materials = list("$metal" = 10, "$glass" = 20)
- build_path = /obj/item/weapon/stock_parts/micro_laser/high
-
-datum/design/item/stock_part/adv_matter_bin
- id = "adv_matter_bin"
- req_tech = list("materials" = 3)
- materials = list("$metal" = 80)
- build_path = /obj/item/weapon/stock_parts/matter_bin/adv
-
-datum/design/item/stock_part/super_capacitor
- id = "super_capacitor"
- req_tech = list("powerstorage" = 5, "materials" = 4)
- reliability_base = 71
- materials = list("$metal" = 50, "$glass" = 50, "$gold" = 20)
- build_path = /obj/item/weapon/stock_parts/capacitor/super
-
-datum/design/item/stock_part/phasic_sensor
- id = "phasic_sensor"
- req_tech = list("magnets" = 5, "materials" = 3)
- materials = list("$metal" = 50, "$glass" = 20, "$silver" = 10)
- reliability_base = 72
- build_path = /obj/item/weapon/stock_parts/scanning_module/phasic
-
-datum/design/item/stock_part/pico_mani
- id = "pico_mani"
- req_tech = list("materials" = 5, "programming" = 2)
- materials = list("$metal" = 30)
- reliability_base = 73
- build_path = /obj/item/weapon/stock_parts/manipulator/pico
-
-datum/design/item/stock_part/ultra_micro_laser
- id = "ultra_micro_laser"
- req_tech = list("magnets" = 5, "materials" = 5)
- materials = list("$metal" = 10, "$glass" = 20, "$uranium" = 10)
- reliability_base = 70
- build_path = /obj/item/weapon/stock_parts/micro_laser/ultra
-
-datum/design/item/stock_part/super_matter_bin
- id = "super_matter_bin"
- req_tech = list("materials" = 5)
- materials = list("$metal" = 80)
- reliability_base = 75
- build_path = /obj/item/weapon/stock_parts/matter_bin/super
-
-/////////////////////////////////////////
-//////////Tcommsat Stock Parts///////////
-/////////////////////////////////////////
-
-datum/design/item/stock_part/subspace_ansible
- id = "s-ansible"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 80, "$silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/ansible
-
-datum/design/item/stock_part/hyperwave_filter
- id = "s-filter"
- req_tech = list("programming" = 3, "magnets" = 3)
- materials = list("$metal" = 40, "$silver" = 10)
- build_path = /obj/item/weapon/stock_parts/subspace/filter
-
-datum/design/item/stock_part/subspace_amplifier
- id = "s-amplifier"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$gold" = 30, "$uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/amplifier
-
-datum/design/item/stock_part/subspace_treatment
- id = "s-treatment"
- req_tech = list("programming" = 3, "magnets" = 2, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$silver" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/treatment
-
-datum/design/item/stock_part/subspace_analyzer
- id = "s-analyzer"
- req_tech = list("programming" = 3, "magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$metal" = 10, "$gold" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/analyzer
-
-datum/design/item/stock_part/subspace_crystal
- id = "s-crystal"
- req_tech = list("magnets" = 4, "materials" = 4, "bluespace" = 2)
- materials = list("$glass" = 1000, "$silver" = 20, "$gold" = 20)
- build_path = /obj/item/weapon/stock_parts/subspace/crystal
-
-datum/design/item/stock_part/subspace_transmitter
- id = "s-transmitter"
- req_tech = list("magnets" = 5, "materials" = 5, "bluespace" = 3)
- materials = list("$glass" = 100, "$silver" = 10, "$uranium" = 15)
- build_path = /obj/item/weapon/stock_parts/subspace/transmitter
-
-////////////////////////////////////////
-//////////Misc Circuit Boards///////////
-////////////////////////////////////////
-
-datum/design/circuit/destructive_analyzer
- name = "destructive analyzer"
- id = "destructive_analyzer"
- req_tech = list("programming" = 2, "magnets" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/destructive_analyzer
-
-datum/design/circuit/protolathe
- name = "protolathe"
- id = "protolathe"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/protolathe
-
-datum/design/circuit/circuit_imprinter
- name = "circuit imprinter"
- id = "circuit_imprinter"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/circuit_imprinter
-
-datum/design/circuit/autolathe
- name = "autolathe board"
- id = "autolathe"
- req_tech = list("programming" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/autolathe
-
-datum/design/circuit/rdservercontrol
- name = "R&D server control console"
- id = "rdservercontrol"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/rdservercontrol
-
-datum/design/circuit/rdserver
- name = "R&D server"
- id = "rdserver"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/circuitboard/rdserver
-
-datum/design/circuit/mechfab
- name = "exosuit fabricator"
- id = "mechfab"
- req_tech = list("programming" = 3, "engineering" = 3)
- build_path = /obj/item/weapon/circuitboard/mechfab
-
-datum/design/circuit/gas_heater
- name = "gas heating system"
- id = "gasheater"
- req_tech = list("powerstorage" = 2, "engineering" = 1)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
-
-datum/design/circuit/gas_cooler
- name = "gas cooling system"
- id = "gascooler"
- req_tech = list("magnets" = 2, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
-
-datum/design/circuit/secure_airlock
- name = "secure airlock electronics"
- desc = "Allows for the construction of a tamper-resistant airlock electronics."
- id = "securedoor"
- req_tech = list("programming" = 3)
- build_path = /obj/item/weapon/airlock_electronics/secure
-
-datum/design/circuit/biogenerator
- name = "biogenerator"
- id = "biogenerator"
- req_tech = list("programming" = 2)
- build_path = /obj/item/weapon/circuitboard/biogenerator
-
-datum/design/circuit/recharge_station
- name = "cyborg recharge station"
- id = "recharge_station"
- req_tech = list("programming" = 3, "engineering" = 2)
- build_path = /obj/item/weapon/circuitboard/recharge_station
-
-/////////////////////////////////////////
-////////Power Stuff Circuitboards////////
-/////////////////////////////////////////
-datum/design/circuit/pacman
- name = "PACMAN-type generator"
- id = "pacman"
- req_tech = list("programming" = 3, "phorontech" = 3, "powerstorage" = 3, "engineering" = 3)
- reliability_base = 79
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman
-
-datum/design/circuit/superpacman
- name = "SUPERPACMAN-type generator"
- id = "superpacman"
- req_tech = list("programming" = 3, "powerstorage" = 4, "engineering" = 4)
- reliability_base = 76
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman/super
-
-datum/design/circuit/mrspacman
- name = "MRSPACMAN-type generator"
- id = "mrspacman"
- req_tech = list("programming" = 3, "powerstorage" = 5, "engineering" = 5)
- reliability_base = 74
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/pacman/mrs
-
-datum/design/circuit/batteryrack
- name = "cell rack PSU"
- id = "batteryrack"
- req_tech = list("powerstorage" = 3, "engineering" = 2)
- materials = list("$glass" = 2000, "sacid" = 20)
- build_path = /obj/item/weapon/circuitboard/batteryrack
-
-datum/design/circuit/smes_cell
- name = "'SMES' superconductive magnetic energy storage"
- desc = "Allows for the construction of circuit boards used to build a SMES."
- id = "smes_cell"
- req_tech = list("powerstorage" = 7, "engineering" = 5)
- //A uniquely-priced board; probably not the best idea
- materials = list("$glass" = 2000, "sacid" = 20, "$gold" = 1000, "$silver" = 1000, "$diamond" = 500)
- build_path = /obj/item/weapon/circuitboard/smes
-
-////////////////////////////////////////
-///////////////Power Items//////////////
-////////////////////////////////////////
-datum/design/item/light_replacer
- name = "Light replacer"
- desc = "A device to automatically replace lights. Refill with working lightbulbs."
- id = "light_replacer"
- req_tech = list("magnets" = 3, "materials" = 4)
- materials = list("$metal" = 1500, "$silver" = 150, "$glass" = 3000)
- build_path = /obj/item/device/lightreplacer
-
-// *** Power cells
-datum/design/item/powercell
+/datum/design/item/powercell
build_type = PROTOLATHE | MECHFAB
-datum/design/item/powercell/AssembleDesignName()
+/datum/design/item/powercell/AssembleDesignName()
name = "Power cell model ([item_name])"
-datum/design/item/powercell/AssembleDesignDesc()
+/datum/design/item/powercell/AssembleDesignDesc()
if(build_path)
var/obj/item/weapon/cell/C = build_path
desc = "Allows the construction of power cells that can hold [initial(C.maxcharge)] units of energy."
-datum/design/item/powercell/basic
+/datum/design/item/powercell/basic
name = "basic"
- build_type = PROTOLATHE | AUTOLATHE | MECHFAB
+ build_type = PROTOLATHE | MECHFAB
id = "basic_cell"
- req_tech = list("powerstorage" = 1)
- materials = list("$metal" = 700, "$glass" = 50)
+ req_tech = list(TECH_POWER = 1)
+ materials = list("metal" = 700, "glass" = 50)
build_path = /obj/item/weapon/cell
category = "Misc"
+ sort_string = "DAAAA"
-datum/design/item/powercell/high
+/datum/design/item/powercell/high
name = "high-capacity"
- build_type = PROTOLATHE | AUTOLATHE | MECHFAB
+ build_type = PROTOLATHE | MECHFAB
id = "high_cell"
- req_tech = list("powerstorage" = 2)
- materials = list("$metal" = 700, "$glass" = 60)
+ req_tech = list(TECH_POWER = 2)
+ materials = list("metal" = 700, "glass" = 60)
build_path = /obj/item/weapon/cell/high
category = "Misc"
+ sort_string = "DAAAB"
-datum/design/item/powercell/super
+/datum/design/item/powercell/super
name = "super-capacity"
id = "super_cell"
- req_tech = list("powerstorage" = 3, "materials" = 2)
- reliability_base = 75
- materials = list("$metal" = 700, "$glass" = 70)
+ req_tech = list(TECH_POWER = 3, TECH_MATERIAL = 2)
+ materials = list("metal" = 700, "glass" = 70)
build_path = /obj/item/weapon/cell/super
category = "Misc"
+ sort_string = "DAAAC"
-datum/design/item/powercell/hyper
+/datum/design/item/powercell/hyper
name = "hyper-capacity"
id = "hyper_cell"
- req_tech = list("powerstorage" = 5, "materials" = 4)
- reliability_base = 70
- materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70)
+ req_tech = list(TECH_POWER = 5, TECH_MATERIAL = 4)
+ materials = list("metal" = 400, "gold" = 150, "silver" = 150, "glass" = 70)
build_path = /obj/item/weapon/cell/hyper
category = "Misc"
+ sort_string = "DAAAD"
-/////////////////////////////////////////
-////////////Medical Tools////////////////
-/////////////////////////////////////////
-datum/design/item/medical
- materials = list("$metal" = 30, "$glass" = 20)
+/datum/design/item/hud
+ materials = list("metal" = 50, "glass" = 50)
-datum/design/item/medical/AssembleDesignName()
+/datum/design/item/hud/AssembleDesignName()
+ ..()
+ name = "HUD glasses prototype ([item_name])"
+
+/datum/design/item/hud/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [item_name] HUD glasses."
+
+/datum/design/item/hud/health
+ name = "health scanner"
+ id = "health_hud"
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 3)
+ build_path = /obj/item/clothing/glasses/hud/health
+ sort_string = "GAAAA"
+
+/datum/design/item/hud/security
+ name = "security records"
+ id = "security_hud"
+ req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
+ build_path = /obj/item/clothing/glasses/hud/security
+ sort_string = "GAAAB"
+
+/datum/design/item/mesons
+ name = "Optical meson scanners design"
+ desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
+ id = "mesons"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ materials = list("metal" = 50, "glass" = 50)
+ build_path = /obj/item/clothing/glasses/meson
+ sort_string = "GAAAC"
+
+/datum/design/item/weapon/mining/AssembleDesignName()
+ ..()
+ name = "Mining equipment design ([item_name])"
+
+/datum/design/item/weapon/mining/jackhammer
+ id = "jackhammer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_POWER = 2, TECH_ENGINERING = 2)
+ materials = list("metal" = 2000, "glass" = 500, "silver" = 500)
+ build_path = /obj/item/weapon/pickaxe/jackhammer
+ sort_string = "KAAAA"
+
+/datum/design/item/weapon/mining/drill
+ id = "drill"
+ req_tech = list(TECH_MATERIAL = 2, TECH_POWER = 3, TECH_ENGINERING = 2)
+ materials = list("metal" = 6000, "glass" = 1000) //expensive, but no need for miners.
+ build_path = /obj/item/weapon/pickaxe/drill
+ sort_string = "KAAAB"
+
+/datum/design/item/weapon/mining/plasmacutter
+ id = "plasmacutter"
+ req_tech = list(TECH_MATERIAL = 4, TECH_PHORON = 3, TECH_ENGINERING = 3)
+ materials = list("metal" = 1500, "glass" = 500, "gold" = 500, "phoron" = 500)
+ build_path = /obj/item/weapon/pickaxe/plasmacutter
+ sort_string = "KAAAC"
+
+/datum/design/item/weapon/mining/pick_diamond
+ id = "pick_diamond"
+ req_tech = list(TECH_MATERIAL = 6)
+ materials = list("diamond" = 3000)
+ build_path = /obj/item/weapon/pickaxe/diamond
+ sort_string = "KAAAD"
+
+/datum/design/item/weapon/mining/drill_diamond
+ id = "drill_diamond"
+ req_tech = list(TECH_MATERIAL = 6, TECH_POWER = 4, TECH_ENGINERING = 4)
+ materials = list("metal" = 3000, "glass" = 1000, "diamond" = 2000)
+ build_path = /obj/item/weapon/pickaxe/diamonddrill
+ sort_string = "KAAAE"
+
+/datum/design/item/medical
+ materials = list("metal" = 30, "glass" = 20)
+
+/datum/design/item/medical/AssembleDesignName()
..()
name = "Biotech device prototype ([item_name])"
-datum/design/item/medical/robot_scanner
+/datum/design/item/medical/robot_scanner
desc = "A hand-held scanner able to diagnose robotic injuries."
id = "robot_scanner"
- req_tech = list("magnets" = 3, "biotech" = 2, "engineering" = 3)
- materials = list("$metal" = 500, "$glass" = 200)
+ req_tech = list(TECH_MAGNET = 3, TECH_BIO = 2, TECH_ENGINERING = 3)
+ materials = list("metal" = 500, "glass" = 200)
build_path = /obj/item/device/robotanalyzer
+ sort_string = "MACFA"
-datum/design/item/medical/mass_spectrometer
+/datum/design/item/medical/mass_spectrometer
desc = "A device for analyzing chemicals in blood."
id = "mass_spectrometer"
- req_tech = list("biotech" = 2, "magnets" = 2)
- reliability_base = 76
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
build_path = /obj/item/device/mass_spectrometer
+ sort_string = "MACAA"
-datum/design/item/medical/adv_mass_spectrometer
+/datum/design/item/medical/adv_mass_spectrometer
desc = "A device for analyzing chemicals in blood and their quantities."
id = "adv_mass_spectrometer"
- req_tech = list("biotech" = 2, "magnets" = 4)
- reliability_base = 74
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
build_path = /obj/item/device/mass_spectrometer/adv
+ sort_string = "MACAB"
-datum/design/item/medical/reagent_scanner
+/datum/design/item/medical/reagent_scanner
desc = "A device for identifying chemicals."
id = "reagent_scanner"
- req_tech = list("biotech" = 2, "magnets" = 2)
- reliability_base = 76
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 2)
build_path = /obj/item/device/reagent_scanner
+ sort_string = "MACBA"
-datum/design/item/medical/adv_reagent_scanner
+/datum/design/item/medical/adv_reagent_scanner
desc = "A device for identifying chemicals and their proportions."
id = "adv_reagent_scanner"
- req_tech = list("biotech" = 2, "magnets" = 4)
- reliability_base = 74
+ req_tech = list(TECH_BIO = 2, TECH_MAGNET = 4)
build_path = /obj/item/device/reagent_scanner/adv
+ sort_string = "MACBB"
-datum/design/item/medical/mmi
- id = "mmi"
- req_tech = list("programming" = 2, "biotech" = 3)
- build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1000, "$glass" = 500)
- reliability_base = 76
- build_path = /obj/item/device/mmi
- category = "Misc"
-
-datum/design/item/medical/mmi_radio
- id = "mmi_radio"
- req_tech = list("programming" = 2, "biotech" = 4)
- build_type = PROTOLATHE | MECHFAB
- materials = list("$metal" = 1200, "$glass" = 500)
- reliability_base = 74
- build_path = /obj/item/device/mmi/radio_enabled
- category = "Misc"
-
-datum/design/item/medical/synthetic_flash
- id = "sflash"
- req_tech = list("magnets" = 3, "combat" = 2)
- build_type = MECHFAB
- materials = list("$metal" = 750, "$glass" = 750)
- reliability_base = 76
- build_path = /obj/item/device/flash/synthetic
- category = "Misc"
-
-datum/design/item/medical/nanopaste
- desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
- id = "nanopaste"
- req_tech = list("materials" = 4, "engineering" = 3)
- materials = list("$metal" = 7000, "$glass" = 7000)
- build_path = /obj/item/stack/nanopaste
-
-datum/design/item/scalpel_laser1
- name = "Basic Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
- id = "scalpel_laser1"
- req_tech = list("biotech" = 2, "materials" = 2, "magnets" = 2)
- materials = list("$metal" = 12500, "$glass" = 7500)
- build_path = /obj/item/weapon/scalpel/laser1
-
-datum/design/item/scalpel_laser2
- name = "Improved Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
- id = "scalpel_laser2"
- req_tech = list("biotech" = 3, "materials" = 4, "magnets" = 4)
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2500)
- build_path = /obj/item/weapon/scalpel/laser2
-
-datum/design/item/scalpel_laser3
- name = "Advanced Laser Scalpel"
- desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
- id = "scalpel_laser3"
- req_tech = list("biotech" = 4, "materials" = 6, "magnets" = 5)
- materials = list("$metal" = 12500, "$glass" = 7500, "$silver" = 2000, "$gold" = 1500)
- build_path = /obj/item/weapon/scalpel/laser3
-
-datum/design/item/scalpel_manager
- name = "Incision Management System"
- desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
- id = "scalpel_manager"
- req_tech = list("biotech" = 4, "materials" = 7, "magnets" = 5, "programming" = 4)
- materials = list ("$metal" = 12500, "$glass" = 7500, "$silver" = 1500, "$gold" = 1500, "$diamond" = 750)
- build_path = /obj/item/weapon/scalpel/manager
-
-// *** Beakers (not really a subtype of design/item/medical)
-datum/design/item/beaker/AssembleDesignName()
+/datum/design/item/beaker/AssembleDesignName()
name = "Beaker prototype ([item_name])"
-datum/design/item/beaker/bluespace
- name = "bluespace"
- desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
- id = "bluespacebeaker"
- req_tech = list("bluespace" = 2, "materials" = 6)
- materials = list("$metal" = 3000, "$phoron" = 3000, "$diamond" = 500)
- reliability_base = 76
- build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
-
-datum/design/item/beaker/noreact
+/datum/design/item/beaker/noreact
name = "cryostasis"
desc = "A cryostasis beaker that allows for chemical storage without reactions. Can hold up to 50 units."
id = "splitbeaker"
- req_tech = list("materials" = 2)
- materials = list("$metal" = 3000)
- reliability_base = 76
+ req_tech = list(TECH_MATERIAL = 2)
+ materials = list("metal" = 3000)
build_path = /obj/item/weapon/reagent_containers/glass/beaker/noreact
- category = "Misc"
+ sort_string = "MADAA"
-// *** Implants (not really a subtype of design/item/medical)
-datum/design/item/implant
- materials = list("$metal" = 50, "$glass" = 50)
+/datum/design/item/beaker/bluespace
+ name = TECH_BLUESPACE
+ desc = "A bluespace beaker, powered by experimental bluespace technology and Element Cuban combined with the Compound Pete. Can hold up to 300 units."
+ id = "bluespacebeaker"
+ req_tech = list(TECH_BLUESPACE = 2, TECH_MATERIAL = 6)
+ materials = list("metal" = 3000, "phoron" = 3000, "diamond" = 500)
+ build_path = /obj/item/weapon/reagent_containers/glass/beaker/bluespace
+ sort_string = "MADAB"
-datum/design/item/implant/AssembleDesignName()
+/datum/design/item/medical/nanopaste
+ desc = "A tube of paste containing swarms of repair nanites. Very effective in repairing robotic machinery."
+ id = "nanopaste"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
+ materials = list("metal" = 7000, "glass" = 7000)
+ build_path = /obj/item/stack/nanopaste
+ sort_string = "MBAAA"
+
+/datum/design/item/scalpel_laser1
+ name = "Basic Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks basic and could be improved."
+ id = "scalpel_laser1"
+ req_tech = list(TECH_BIO = 2, TECH_MATERIAL = 2, TECH_MAGNET = 2)
+ materials = list("metal" = 12500, "glass" = 7500)
+ build_path = /obj/item/weapon/scalpel/laser1
+ sort_string = "MBBAA"
+
+/datum/design/item/scalpel_laser2
+ name = "Improved Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks somewhat advanced."
+ id = "scalpel_laser2"
+ req_tech = list(TECH_BIO = 3, TECH_MATERIAL = 4, TECH_MAGNET = 4)
+ materials = list("metal" = 12500, "glass" = 7500, "silver" = 2500)
+ build_path = /obj/item/weapon/scalpel/laser2
+ sort_string = "MBBAB"
+
+/datum/design/item/scalpel_laser3
+ name = "Advanced Laser Scalpel"
+ desc = "A scalpel augmented with a directed laser, for more precise cutting without blood entering the field. This one looks to be the pinnacle of precision energy cutlery!"
+ id = "scalpel_laser3"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 6, TECH_MAGNET = 5)
+ materials = list("metal" = 12500, "glass" = 7500, "silver" = 2000, "gold" = 1500)
+ build_path = /obj/item/weapon/scalpel/laser3
+ sort_string = "MBBAC"
+
+/datum/design/item/scalpel_manager
+ name = "Incision Management System"
+ desc = "A true extension of the surgeon's body, this marvel instantly and completely prepares an incision allowing for the immediate commencement of therapeutic steps."
+ id = "scalpel_manager"
+ req_tech = list(TECH_BIO = 4, TECH_MATERIAL = 7, TECH_MAGNET = 5, TECH_DATA = 4)
+ materials = list ("metal" = 12500, "glass" = 7500, "silver" = 1500, "gold" = 1500, "diamond" = 750)
+ build_path = /obj/item/weapon/scalpel/manager
+ sort_string = "MBBAD"
+
+/datum/design/item/implant
+ materials = list("metal" = 50, "glass" = 50)
+
+/datum/design/item/implant/AssembleDesignName()
..()
name = "Implantable biocircuit design ([item_name])"
-/* // Removal of loyalty implants. Can't think of a way to add this to the config option.
-datum/design/item/implant/loyalty
- name = "loyalty"
- id = "implant_loyal"
- req_tech = list("materials" = 2, "biotech" = 3)
- materials = list("$metal" = 7000, "$glass" = 7000)
- build_path = /obj/item/weapon/implantcase/loyalty"
-*/
-
-datum/design/item/implant/chemical
+/datum/design/item/implant/chemical
name = "chemical"
id = "implant_chem"
- req_tech = list("materials" = 2, "biotech" = 3)
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
build_path = /obj/item/weapon/implantcase/chem
+ sort_string = "MFAAA"
-datum/design/item/implant/freedom
+/datum/design/item/implant/freedom
name = "freedom"
id = "implant_free"
- req_tech = list("syndicate" = 2, "biotech" = 3)
+ req_tech = list(TECH_ILLEGAL = 2, TECH_BIO = 3)
build_path = /obj/item/weapon/implantcase/freedom
+ sort_string = "MFAAB"
-/////////////////////////////////////////
-/////////////////Weapons/////////////////
-/////////////////////////////////////////
-datum/design/item/weapon/AssembleDesignName()
+/datum/design/item/weapon/AssembleDesignName()
..()
name = "Weapon prototype ([item_name])"
-datum/design/item/weapon/AssembleDesignDesc()
+/datum/design/item/weapon/AssembleDesignDesc()
if(!desc)
if(build_path)
var/obj/item/I = build_path
desc = initial(I.desc)
..()
-datum/design/item/weapon/nuclear_gun
- id = "nuclear_gun"
- req_tech = list("combat" = 3, "materials" = 5, "powerstorage" = 3)
- materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 500)
- reliability_base = 76
- build_path = /obj/item/weapon/gun/energy/gun/nuclear
- locked = 1
-
-datum/design/item/weapon/stunrevolver
+/datum/design/item/weapon/stunrevolver
id = "stunrevolver"
- req_tech = list("combat" = 3, "materials" = 3, "powerstorage" = 2)
- materials = list("$metal" = 4000)
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
+ materials = list("metal" = 4000)
build_path = /obj/item/weapon/gun/energy/stunrevolver
- locked = 1
+ sort_string = "TAAAA"
-datum/design/item/weapon/lasercannon
+/datum/design/item/weapon/nuclear_gun
+ id = "nuclear_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_POWER = 3)
+ materials = list("metal" = 5000, "glass" = 1000, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/gun/nuclear
+ sort_string = "TAAAB"
+
+/datum/design/item/weapon/lasercannon
desc = "The lasing medium of this prototype is enclosed in a tube lined with uranium-235 and subjected to high neutron flux in a nuclear reactor core."
id = "lasercannon"
- req_tech = list("combat" = 4, "materials" = 3, "powerstorage" = 3)
- materials = list("$metal" = 10000, "$glass" = 1000, "$diamond" = 2000)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
+ materials = list("metal" = 10000, "glass" = 1000, "diamond" = 2000)
build_path = /obj/item/weapon/gun/energy/lasercannon
- locked = 1
+ sort_string = "TAAAC"
-datum/design/item/weapon/decloner
+/datum/design/item/weapon/phoronpistol
+ id = "ppistol"
+ req_tech = list(TECH_COMBAT = 5, TECH_PHORON = 4)
+ materials = list("metal" = 5000, "glass" = 1000, "phoron" = 3000)
+ build_path = /obj/item/weapon/gun/energy/toxgun
+ sort_string = "TAAAD"
+
+/datum/design/item/weapon/decloner
id = "decloner"
- req_tech = list("combat" = 8, "materials" = 7, "biotech" = 5, "powerstorage" = 6)
- materials = list("$gold" = 5000,"$uranium" = 10000, "mutagen" = 40)
+ req_tech = list(TECH_COMBAT = 8, TECH_MATERIAL = 7, TECH_BIO = 5, TECH_POWER = 6)
+ materials = list("gold" = 5000,"uranium" = 10000, "mutagen" = 40)
build_path = /obj/item/weapon/gun/energy/decloner
- locked = 1
+ sort_string = "TAAAE"
-datum/design/item/weapon/chemsprayer
- desc = "An advanced chem spraying device."
- id = "chemsprayer"
- req_tech = list("materials" = 3, "engineering" = 3, "biotech" = 2)
- materials = list("$metal" = 5000, "$glass" = 1000)
- reliability_base = 100
- build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
-
-datum/design/item/weapon/rapidsyringe
- id = "rapidsyringe"
- req_tech = list("combat" = 3, "materials" = 3, "engineering" = 3, "biotech" = 2)
- materials = list("$metal" = 5000, "$glass" = 1000)
- build_path = /obj/item/weapon/gun/launcher/syringe/rapid
-/*
-datum/design/item/weapon/largecrossbow
- name = "Energy Crossbow"
- desc = "A weapon favoured by syndicate infiltration teams."
- id = "largecrossbow"
- req_tech = list("combat" = 4, "materials" = 5, "engineering" = 3, "biotech" = 4, "syndicate" = 3)
- materials = list("$metal" = 5000, "$glass" = 1000, "$uranium" = 1000, "$silver" = 1000)
- build_path = /obj/item/weapon/gun/energy/crossbow/largecrossbow"
-*/
-datum/design/item/weapon/temp_gun
- desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
- id = "temp_gun"
- req_tech = list("combat" = 3, "materials" = 4, "powerstorage" = 3, "magnets" = 2)
- materials = list("$metal" = 5000, "$glass" = 500, "$silver" = 3000)
- build_path = /obj/item/weapon/gun/energy/temperature
- locked = 1
-
-datum/design/item/weapon/flora_gun
- id = "flora_gun"
- req_tech = list("materials" = 2, "biotech" = 3, "powerstorage" = 3)
- materials = list("$metal" = 2000, "$glass" = 500, "$uranium" = 500)
- build_path = /obj/item/weapon/gun/energy/floragun
-
-datum/design/item/weapon/large_grenade
- id = "large_Grenade"
- req_tech = list("combat" = 3, "materials" = 2)
- materials = list("$metal" = 3000)
- reliability_base = 79
- build_path = /obj/item/weapon/grenade/chem_grenade/large
-
-datum/design/item/weapon/smg
+/datum/design/item/weapon/smg
id = "smg"
- req_tech = list("combat" = 4, "materials" = 3)
- materials = list("$metal" = 8000, "$silver" = 2000, "$diamond" = 1000)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list("metal" = 8000, "silver" = 2000, "diamond" = 1000)
build_path = /obj/item/weapon/gun/projectile/automatic
- locked = 1
+ sort_string = "TAABA"
-datum/design/item/weapon/ammo_9mm
+/datum/design/item/weapon/ammo_9mm
id = "ammo_9mm"
- req_tech = list("combat" = 4, "materials" = 3)
- materials = list("$metal" = 3750, "$silver" = 100)
+ req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3)
+ materials = list("metal" = 3750, "silver" = 100)
build_path = /obj/item/ammo_magazine/c9mm
+ sort_string = "TAACA"
-datum/design/item/weapon/stunshell
+/datum/design/item/weapon/stunshell
desc = "A stunning shell for a shotgun."
id = "stunshell"
- req_tech = list("combat" = 3, "materials" = 3)
- materials = list("$metal" = 4000)
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3)
+ materials = list("metal" = 4000)
build_path = /obj/item/ammo_casing/shotgun/stunshell
+ sort_string = "TAACB"
-datum/design/item/weapon/phoronpistol
- id = "ppistol"
- req_tech = list("combat" = 5, "phorontech" = 4)
- materials = list("$metal" = 5000, "$glass" = 1000, "$phoron" = 3000)
- build_path = /obj/item/weapon/gun/energy/toxgun
+/datum/design/item/weapon/chemsprayer
+ desc = "An advanced chem spraying device."
+ id = "chemsprayer"
+ req_tech = list(TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
+ materials = list("metal" = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/reagent_containers/spray/chemsprayer
+ sort_string = "TABAA"
-/////////////////////////////////////////
-/////////////////Mining//////////////////
-/////////////////////////////////////////
-//Subtype of item/weapon/, because we get the nice desc update
-datum/design/item/weapon/mining/AssembleDesignName()
- ..()
- name = "Mining equipment design ([item_name])"
+/datum/design/item/weapon/rapidsyringe
+ id = "rapidsyringe"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_ENGINERING = 3, TECH_BIO = 2)
+ materials = list("metal" = 5000, "glass" = 1000)
+ build_path = /obj/item/weapon/gun/launcher/syringe/rapid
+ sort_string = "TABAB"
-datum/design/item/weapon/mining/jackhammer
- id = "jackhammer"
- req_tech = list("materials" = 3, "powerstorage" = 2, "engineering" = 2)
- materials = list("$metal" = 2000, "$glass" = 500, "$silver" = 500)
- build_path = /obj/item/weapon/pickaxe/jackhammer
+/datum/design/item/weapon/temp_gun
+ desc = "A gun that shoots high-powered glass-encased energy temperature bullets."
+ id = "temp_gun"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 4, TECH_POWER = 3, TECH_MAGNET = 2)
+ materials = list("metal" = 5000, "glass" = 500, "silver" = 3000)
+ build_path = /obj/item/weapon/gun/energy/temperature
+ sort_string = "TABAC"
+/datum/design/item/weapon/large_grenade
+ id = "large_Grenade"
+ req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 2)
+ materials = list("metal" = 3000)
+ build_path = /obj/item/weapon/grenade/chem_grenade/large
+ sort_string = "TACAA"
-datum/design/item/weapon/mining/drill
- id = "drill"
- req_tech = list("materials" = 2, "powerstorage" = 3, "engineering" = 2)
- materials = list("$metal" = 6000, "$glass" = 1000) //expensive, but no need for miners.
- build_path = /obj/item/weapon/pickaxe/drill
+/datum/design/item/weapon/flora_gun
+ id = "flora_gun"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3, TECH_POWER = 3)
+ materials = list("metal" = 2000, "glass" = 500, "uranium" = 500)
+ build_path = /obj/item/weapon/gun/energy/floragun
+ sort_string = "TBAAA"
-datum/design/item/weapon/mining/plasmacutter
- id = "plasmacutter"
- req_tech = list("materials" = 4, "phorontech" = 3, "engineering" = 3)
- materials = list("$metal" = 1500, "$glass" = 500, "$gold" = 500, "$phoron" = 500)
- reliability_base = 79
- build_path = /obj/item/weapon/pickaxe/plasmacutter
+/datum/design/item/stock_part/subspace_ansible
+ id = "s-ansible"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 80, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/ansible
+ sort_string = "UAAAA"
-datum/design/item/weapon/mining/pick_diamond
- id = "pick_diamond"
- req_tech = list("materials" = 6)
- materials = list("$diamond" = 3000)
- build_path = /obj/item/weapon/pickaxe/diamond
+/datum/design/item/stock_part/hyperwave_filter
+ id = "s-filter"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 3)
+ materials = list("metal" = 40, "silver" = 10)
+ build_path = /obj/item/weapon/stock_parts/subspace/filter
+ sort_string = "UAAAB"
-datum/design/item/weapon/mining/drill_diamond
- id = "drill_diamond"
- req_tech = list("materials" = 6, "powerstorage" = 4, "engineering" = 4)
- materials = list("$metal" = 3000, "$glass" = 1000, "$diamond" = 3750) //Yes, a whole diamond is needed.
- reliability_base = 79
- build_path = /obj/item/weapon/pickaxe/diamonddrill
+/datum/design/item/stock_part/subspace_amplifier
+ id = "s-amplifier"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "gold" = 30, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/amplifier
+ sort_string = "UAAAC"
-/////////////////////////////////////////
-//////////////Blue Space/////////////////
-/////////////////////////////////////////
-datum/design/item/beacon
+/datum/design/item/stock_part/subspace_treatment
+ id = "s-treatment"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "silver" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/treatment
+ sort_string = "UAAAD"
+
+/datum/design/item/stock_part/subspace_analyzer
+ id = "s-analyzer"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("metal" = 10, "gold" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/analyzer
+ sort_string = "UAAAE"
+
+/datum/design/item/stock_part/subspace_crystal
+ id = "s-crystal"
+ req_tech = list(TECH_MAGNET = 4, TECH_MATERIAL = 4, TECH_BLUESPACE = 2)
+ materials = list("glass" = 1000, "silver" = 20, "gold" = 20)
+ build_path = /obj/item/weapon/stock_parts/subspace/crystal
+ sort_string = "UAAAF"
+
+/datum/design/item/stock_part/subspace_transmitter
+ id = "s-transmitter"
+ req_tech = list(TECH_MAGNET = 5, TECH_MATERIAL = 5, TECH_BLUESPACE = 3)
+ materials = list("glass" = 100, "silver" = 10, "uranium" = 15)
+ build_path = /obj/item/weapon/stock_parts/subspace/transmitter
+ sort_string = "UAAAG"
+
+/datum/design/item/light_replacer
+ name = "Light replacer"
+ desc = "A device to automatically replace lights. Refill with working lightbulbs."
+ id = "light_replacer"
+ req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4)
+ materials = list("metal" = 1500, "silver" = 150, "glass" = 3000)
+ build_path = /obj/item/device/lightreplacer
+ sort_string = "VAAAH"
+
+/datum/design/item/paicard
+ name = "'pAI', personal artificial intelligence device"
+ id = "paicard"
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 500, "metal" = 500)
+ build_path = /obj/item/device/paicard
+ sort_string = "VABAI"
+
+/datum/design/item/intellicard
+ name = "'intelliCard', AI preservation and transportation system"
+ desc = "Allows for the construction of an intelliCard."
+ id = "intellicard"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ materials = list("glass" = 1000, "gold" = 200)
+ build_path = /obj/item/device/aicard
+ sort_string = "VACAA"
+
+/datum/design/item/posibrain
+ id = "posibrain"
+ req_tech = list(TECH_ENGINERING = 4, TECH_MATERIAL = 6, TECH_BLUESPACE = 2, TECH_DATA = 4)
+ materials = list("metal" = 2000, "glass" = 1000, "silver" = 1000, "gold" = 500, "phoron" = 500, "diamond" = 100)
+ build_path = /obj/item/device/mmi/digital/posibrain
+ sort_string = "VACAB"
+
+/datum/design/item/medical/mmi
+ id = "mmi"
+ req_tech = list(TECH_DATA = 2, TECH_BIO = 3)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("metal" = 1000, "glass" = 500)
+ build_path = /obj/item/device/mmi
+ category = "Misc"
+ sort_string = "VACBA"
+
+/datum/design/item/medical/mmi_radio
+ id = "mmi_radio"
+ req_tech = list(TECH_DATA = 2, TECH_BIO = 4)
+ build_type = PROTOLATHE | MECHFAB
+ materials = list("metal" = 1200, "glass" = 500)
+ build_path = /obj/item/device/mmi/radio_enabled
+ category = "Misc"
+ sort_string = "VACBB"
+
+/datum/design/item/beacon
name = "Bluespace tracking beacon design"
id = "beacon"
- req_tech = list("bluespace" = 1)
- materials = list ("$metal" = 20, "$glass" = 10)
+ req_tech = list(TECH_BLUESPACE = 1)
+ materials = list ("metal" = 20, "glass" = 10)
build_path = /obj/item/device/radio/beacon
+ sort_string = "VADAA"
-datum/design/item/bag_holding
+/datum/design/item/bag_holding
name = "'Bag of Holding', an infinite capacity bag prototype"
desc = "Using localized pockets of bluespace this bag prototype offers incredible storage capacity with the contents weighting nothing. It's a shame the bag itself is pretty heavy."
id = "bag_holding"
- req_tech = list("bluespace" = 4, "materials" = 6)
- materials = list("$gold" = 3000, "$diamond" = 1500, "$uranium" = 250)
- reliability_base = 80
+ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6)
+ materials = list("gold" = 3000, "diamond" = 1500, "uranium" = 250)
build_path = /obj/item/weapon/storage/backpack/holding
+ sort_string = "VAEAA"
+
+/datum/design/item/binaryencrypt
+ name = "Binary encryption key"
+ desc = "Allows for deciphering the binary channel on-the-fly."
+ id = "binaryencrypt"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list("metal" = 300, "glass" = 300)
+ build_path = /obj/item/device/encryptionkey/binary
+ sort_string = "VASAA"
+
+/datum/design/item/chameleon
+ name = "Holographic equipment kit"
+ desc = "A kit of dangerous, high-tech equipment with changeable looks."
+ id = "chameleon"
+ req_tech = list(TECH_ILLEGAL = 2)
+ materials = list("metal" = 500)
+ build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
+ sort_string = "VASBA"
/*
-datum/design/bluespace_crystal
- name = "Artificial bluespace crystal"
- desc = "A small blue crystal with mystical properties."
- id = "bluespace_crystal"
- req_tech = list("bluespace" = 5, "materials" = 7)
- build_type = PROTOLATHE
- materials = list("$gold" = 1500, "$diamond" = 3000, "$phoron" = 1500)
- reliability_base = 100
- build_path = /obj/item/bluespace_crystal/artificial"
+CIRCUITS BELOW
*/
-/////////////////////////////////////////
-/////////////////HUDs////////////////////
-/////////////////////////////////////////
-datum/design/item/hud
- materials = list("$metal" = 50, "$glass" = 50)
+/datum/design/circuit
+ build_type = IMPRINTER
+ req_tech = list(TECH_DATA = 2)
+ materials = list("glass" = 2000)
+ chemicals = list("sacid" = 20)
+ time = 5
-datum/design/item/hud/AssembleDesignName()
+/datum/design/circuit/AssembleDesignName()
..()
- name = "HUD glasses prototype ([item_name])"
+ if(build_path)
+ var/obj/item/weapon/circuitboard/C = new build_path()
+ if(C && istype(C))
+ if(C.board_type == "machine")
+ name = "Machine circuit design ([item_name])"
+ qdel(C)
+ return
+ else if(C.board_type == "computer")
+ name = "Computer circuit design ([item_name])"
+ qdel(C)
+ return
+ name = "Circuit design ([item_name])"
-datum/design/item/hud/AssembleDesignDesc()
- desc = "Allows for the construction of \a [item_name] HUD glasses."
+/datum/design/circuit/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [item_name] circuit board."
-datum/design/item/hud/health
- name = "health scanner"
- id = "health_hud"
- req_tech = list("biotech" = 2, "magnets" = 3)
- build_path = /obj/item/clothing/glasses/hud/health
+/datum/design/circuit/arcademachine
+ name = "arcade machine"
+ id = "arcademachine"
+ req_tech = list(TECH_DATA = 1)
+ build_path = /obj/item/weapon/circuitboard/arcade
+ sort_string = "MAAAA"
-datum/design/item/hud/security
- name = "security records"
- id = "security_hud"
- req_tech = list("magnets" = 3, "combat" = 2)
- build_path = /obj/item/clothing/glasses/hud/security
- locked = 1
+/datum/design/circuit/seccamera
+ name = "security camera monitor"
+ id = "seccamera"
+ build_path = /obj/item/weapon/circuitboard/security
+ sort_string = "DAAAA"
-/////////////////////////////////////////
-////////////////PDA Stuff////////////////
-/////////////////////////////////////////
-datum/design/item/pda
+/datum/design/circuit/secdata
+ name = "security records console"
+ id = "sec_data"
+ build_path = /obj/item/weapon/circuitboard/secure_data
+ sort_string = "DABAA"
+
+/datum/design/circuit/prisonmanage
+ name = "prisoner management console"
+ id = "prisonmanage"
+ build_path = /obj/item/weapon/circuitboard/prisoner
+ sort_string = "DACAA"
+
+/datum/design/circuit/med_data
+ name = "medical records console"
+ id = "med_data"
+ build_path = /obj/item/weapon/circuitboard/med_data
+ sort_string = "FAAAA"
+
+/datum/design/circuit/operating
+ name = "patient monitoring console"
+ id = "operating"
+ build_path = /obj/item/weapon/circuitboard/operating
+ sort_string = "FACAA"
+
+/datum/design/circuit/pandemic
+ name = "PanD.E.M.I.C. 2200"
+ id = "pandemic"
+ build_path = /obj/item/weapon/circuitboard/pandemic
+ sort_string = "FAEAA"
+
+/datum/design/circuit/scan_console
+ name = "DNA machine"
+ id = "scan_console"
+ build_path = /obj/item/weapon/circuitboard/scan_consolenew
+ sort_string = "FAGAA"
+
+/datum/design/circuit/clonecontrol
+ name = "cloning control console"
+ id = "clonecontrol"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/cloning
+ sort_string = "FAGAC"
+
+/datum/design/circuit/clonepod
+ name = "clone pod"
+ id = "clonepod"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonepod
+ sort_string = "FAGAE"
+
+/datum/design/circuit/clonescanner
+ name = "cloning scanner"
+ id = "clonescanner"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/clonescanner
+ sort_string = "FAGAG"
+
+/datum/design/circuit/crewconsole
+ name = "crew monitoring console"
+ id = "crewconsole"
+ req_tech = list(TECH_DATA = 3, TECH_MAGNET = 2, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/crew
+ sort_string = "FAGAI"
+
+/datum/design/circuit/teleconsole
+ name = "teleporter control console"
+ id = "teleconsole"
+ req_tech = list(TECH_DATA = 3, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/teleporter
+ sort_string = "HAAAA"
+
+/datum/design/circuit/robocontrol
+ name = "robotics control console"
+ id = "robocontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/robotics
+ sort_string = "HAAAB"
+
+/datum/design/circuit/mechacontrol
+ name = "exosuit control console"
+ id = "mechacontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/mecha_control
+ sort_string = "HAAAC"
+
+/datum/design/circuit/mechapower
+ name = "mech bay power control console"
+ id = "mechapower"
+ build_path = /obj/item/weapon/circuitboard/mech_bay_power_console
+ sort_string = "HAAAD"
+
+/datum/design/circuit/rdconsole
+ name = "R&D control console"
+ id = "rdconsole"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/rdconsole
+ sort_string = "HAAAE"
+
+/datum/design/circuit/aifixer
+ name = "AI integrity restorer"
+ id = "aifixer"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/aifixer
+ sort_string = "HAAAF"
+
+/datum/design/circuit/comm_monitor
+ name = "telecommunications monitoring console"
+ id = "comm_monitor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_monitor
+ sort_string = "HAACA"
+
+/datum/design/circuit/comm_server
+ name = "telecommunications server monitoring console"
+ id = "comm_server"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/comm_server
+ sort_string = "HAACB"
+
+/datum/design/circuit/message_monitor
+ name = "messaging monitor console"
+ id = "message_monitor"
+ req_tech = list(TECH_DATA = 5)
+ build_path = /obj/item/weapon/circuitboard/message_monitor
+ sort_string = "HAACC"
+
+/datum/design/circuit/aiupload
+ name = "AI upload console"
+ id = "aiupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/aiupload
+ sort_string = "HAABA"
+
+/datum/design/circuit/borgupload
+ name = "cyborg upload console"
+ id = "borgupload"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/borgupload
+ sort_string = "HAABB"
+
+/datum/design/circuit/destructive_analyzer
+ name = "destructive analyzer"
+ id = "destructive_analyzer"
+ req_tech = list(TECH_DATA = 2, TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/destructive_analyzer
+ sort_string = "HABAA"
+
+/datum/design/circuit/protolathe
+ name = "protolathe"
+ id = "protolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/protolathe
+ sort_string = "HABAB"
+
+/datum/design/circuit/circuit_imprinter
+ name = "circuit imprinter"
+ id = "circuit_imprinter"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/circuit_imprinter
+ sort_string = "HABAC"
+
+/datum/design/circuit/autolathe
+ name = "autolathe board"
+ id = "autolathe"
+ req_tech = list(TECH_DATA = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/autolathe
+ sort_string = "HABAD"
+
+/datum/design/circuit/rdservercontrol
+ name = "R&D server control console"
+ id = "rdservercontrol"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdservercontrol
+ sort_string = "HABBA"
+
+/datum/design/circuit/rdserver
+ name = "R&D server"
+ id = "rdserver"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/rdserver
+ sort_string = "HABBB"
+
+/datum/design/circuit/mechfab
+ name = "exosuit fabricator"
+ id = "mechfab"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/weapon/circuitboard/mechfab
+ sort_string = "HABAE"
+
+/datum/design/circuit/recharge_station
+ name = "cyborg recharge station"
+ id = "recharge_station"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/recharge_station
+ sort_string = "HACAA"
+
+/datum/design/circuit/atmosalerts
+ name = "atmosphere alert console"
+ id = "atmosalerts"
+ build_path = /obj/item/weapon/circuitboard/atmos_alert
+ sort_string = "JAAAA"
+
+/datum/design/circuit/air_management
+ name = "atmosphere monitoring console"
+ id = "air_management"
+ build_path = /obj/item/weapon/circuitboard/air_management
+ sort_string = "JAAAB"
+
+/datum/design/circuit/rcon_console
+ name = "RCON remote control console"
+ id = "rcon_console"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_POWER = 5)
+ build_path = /obj/item/weapon/circuitboard/rcon_console
+ sort_string = "JAAAC"
+
+/datum/design/circuit/dronecontrol
+ name = "drone control console"
+ id = "dronecontrol"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/drone_control
+ sort_string = "JAAAD"
+
+/datum/design/circuit/powermonitor
+ name = "power monitoring console"
+ id = "powermonitor"
+ build_path = /obj/item/weapon/circuitboard/powermonitor
+ sort_string = "JAAAE"
+
+/datum/design/circuit/solarcontrol
+ name = "solar control console"
+ id = "solarcontrol"
+ build_path = /obj/item/weapon/circuitboard/solar_control
+ sort_string = "JAAAF"
+
+/datum/design/circuit/pacman
+ name = "PACMAN-type generator"
+ id = "pacman"
+ req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/weapon/circuitboard/pacman
+ sort_string = "JBAAA"
+
+/datum/design/circuit/superpacman
+ name = "SUPERPACMAN-type generator"
+ id = "superpacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINERING = 4)
+ build_path = /obj/item/weapon/circuitboard/pacman/super
+ sort_string = "JBAAB"
+
+/datum/design/circuit/mrspacman
+ name = "MRSPACMAN-type generator"
+ id = "mrspacman"
+ req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINERING = 5)
+ build_path = /obj/item/weapon/circuitboard/pacman/mrs
+ sort_string = "JBAAC"
+
+/datum/design/circuit/batteryrack
+ name = "cell rack PSU"
+ id = "batteryrack"
+ req_tech = list(TECH_POWER = 3, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/batteryrack
+ sort_string = "JBABA"
+
+/datum/design/circuit/smes_cell
+ name = "'SMES' superconductive magnetic energy storage"
+ desc = "Allows for the construction of circuit boards used to build a SMES."
+ id = "smes_cell"
+ req_tech = list(TECH_POWER = 7, TECH_ENGINERING = 5)
+ build_path = /obj/item/weapon/circuitboard/smes
+ sort_string = "JBABB"
+
+/datum/design/circuit/gas_heater
+ name = "gas heating system"
+ id = "gasheater"
+ req_tech = list(TECH_POWER = 2, TECH_ENGINERING = 1)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/heater
+ sort_string = "JCAAA"
+
+/datum/design/circuit/gas_cooler
+ name = "gas cooling system"
+ id = "gascooler"
+ req_tech = list(TECH_MAGNET = 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/weapon/circuitboard/unary_atmos/cooler
+ sort_string = "JCAAB"
+
+/datum/design/circuit/secure_airlock
+ name = "secure airlock electronics"
+ desc = "Allows for the construction of a tamper-resistant airlock electronics."
+ id = "securedoor"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/airlock_electronics/secure
+ sort_string = "JDAAA"
+
+/datum/design/circuit/ordercomp
+ name = "supply ordering console"
+ id = "ordercomp"
+ build_path = /obj/item/weapon/circuitboard/ordercomp
+ sort_string = "KAAAA"
+
+/datum/design/circuit/supplycomp
+ name = "supply control console"
+ id = "supplycomp"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/circuitboard/supplycomp
+ sort_string = "KAAAB"
+
+/datum/design/circuit/biogenerator
+ name = "biogenerator"
+ id = "biogenerator"
+ req_tech = list(TECH_DATA = 2)
+ build_path = /obj/item/weapon/circuitboard/biogenerator
+ sort_string = "KBAAA"
+
+/datum/design/circuit/comconsole
+ name = "communications console"
+ id = "comconsole"
+ build_path = /obj/item/weapon/circuitboard/communications
+ sort_string = "LAAAA"
+
+/datum/design/circuit/idcardconsole
+ name = "ID card modification console"
+ id = "idcardconsole"
+ build_path = /obj/item/weapon/circuitboard/card
+ sort_string = "LAAAB"
+
+/datum/design/circuit/emp_data
+ name = "employment records console"
+ id = "emp_data"
+ build_path = /obj/item/weapon/circuitboard/skills
+ sort_string = "LAAAC"
+
+/datum/design/circuit/mecha
+ req_tech = list(TECH_DATA = 3)
+
+/datum/design/circuit/mecha/AssembleDesignName()
+ name = "Exosuit module circuit design ([name])"
+/datum/design/circuit/mecha/AssembleDesignDesc()
+ desc = "Allows for the construction of \a [name] module."
+
+/datum/design/circuit/mecha/ripley_main
+ name = "APLU 'Ripley' central control"
+ id = "ripley_main"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/main
+ sort_string = "NAAAA"
+
+/datum/design/circuit/mecha/ripley_peri
+ name = "APLU 'Ripley' peripherals control"
+ id = "ripley_peri"
+ build_path = /obj/item/weapon/circuitboard/mecha/ripley/peripherals
+ sort_string = "NAAAB"
+
+/datum/design/circuit/mecha/odysseus_main
+ name = "'Odysseus' central control"
+ id = "odysseus_main"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/main
+ sort_string = "NAABA"
+
+/datum/design/circuit/mecha/odysseus_peri
+ name = "'Odysseus' peripherals control"
+ id = "odysseus_peri"
+ req_tech = list(TECH_DATA = 3,TECH_BIO = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/odysseus/peripherals
+ sort_string = "NAABB"
+
+/datum/design/circuit/mecha/gygax_main
+ name = "'Gygax' central control"
+ id = "gygax_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/main
+ sort_string = "NAACA"
+
+/datum/design/circuit/mecha/gygax_peri
+ name = "'Gygax' peripherals control"
+ id = "gygax_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/peripherals
+ sort_string = "NAACB"
+
+/datum/design/circuit/mecha/gygax_targ
+ name = "'Gygax' weapon control and targeting"
+ id = "gygax_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/gygax/targeting
+ sort_string = "NAACC"
+
+/datum/design/circuit/mecha/durand_main
+ name = "'Durand' central control"
+ id = "durand_main"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/main
+ sort_string = "NAADA"
+
+/datum/design/circuit/mecha/durand_peri
+ name = "'Durand' peripherals control"
+ id = "durand_peri"
+ req_tech = list(TECH_DATA = 4)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/peripherals
+ sort_string = "NAADB"
+
+/datum/design/circuit/mecha/durand_targ
+ name = "'Durand' weapon control and targeting"
+ id = "durand_targ"
+ req_tech = list(TECH_DATA = 4, TECH_COMBAT = 2)
+ build_path = /obj/item/weapon/circuitboard/mecha/durand/targeting
+ sort_string = "NAADC"
+
+/datum/design/circuit/tcom
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4)
+
+/datum/design/circuit/tcom/AssembleDesignName()
+ name = "Telecommunications machinery circuit design ([name])"
+/datum/design/circuit/tcom/AssembleDesignDesc()
+ desc = "Allows for the construction of a telecommunications [name] circuit board."
+
+/datum/design/circuit/tcom/server
+ name = "server mainframe"
+ id = "tcom-server"
+ build_path = /obj/item/weapon/circuitboard/telecomms/server
+ sort_string = "PAAAA"
+
+/datum/design/circuit/tcom/processor
+ name = "processor unit"
+ id = "tcom-processor"
+ build_path = /obj/item/weapon/circuitboard/telecomms/processor
+ sort_string = "PAAAB"
+
+/datum/design/circuit/tcom/bus
+ name = "bus mainframe"
+ id = "tcom-bus"
+ build_path = /obj/item/weapon/circuitboard/telecomms/bus
+ sort_string = "PAAAC"
+
+/datum/design/circuit/tcom/hub
+ name = "hub mainframe"
+ id = "tcom-hub"
+ build_path = /obj/item/weapon/circuitboard/telecomms/hub
+ sort_string = "PAAAD"
+
+/datum/design/circuit/tcom/relay
+ name = "relay mainframe"
+ id = "tcom-relay"
+ req_tech = list(TECH_DATA = 3, TECH_ENGINERING = 4, TECH_BLUESPACE = 3)
+ build_path = /obj/item/weapon/circuitboard/telecomms/relay
+ sort_string = "PAAAE"
+
+/datum/design/circuit/tcom/broadcaster
+ name = "subspace broadcaster"
+ id = "tcom-broadcaster"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 4, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/broadcaster
+ sort_string = "PAAAF"
+
+/datum/design/circuit/tcom/receiver
+ name = "subspace receiver"
+ id = "tcom-receiver"
+ req_tech = list(TECH_DATA = 4, TECH_ENGINERING = 3, TECH_BLUESPACE = 2)
+ build_path = /obj/item/weapon/circuitboard/telecomms/receiver
+ sort_string = "PAAAG"
+
+/datum/design/circuit/shield
+ req_tech = list(TECH_BLUESPACE = 4, TECH_PHORON = 3)
+ materials = list("glass" = 2000, "gold" = 1000)
+
+/datum/design/circuit/shield/AssembleDesignName()
+ name = "Shield generator circuit design ([name])"
+/datum/design/circuit/shield/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a [name] shield generator."
+
+/datum/design/circuit/shield/bubble
+ name = "bubble"
+ id = "shield_gen"
+ build_path = /obj/item/weapon/circuitboard/shield_gen
+ sort_string = "VAAAA"
+
+/datum/design/circuit/shield/hull
+ name = "hull"
+ id = "shield_gen_ex"
+ build_path = /obj/item/weapon/circuitboard/shield_gen_ex
+ sort_string = "VAAAB"
+
+/datum/design/circuit/shield/capacitor
+ name = "capacitor"
+ desc = "Allows for the construction of a shield capacitor circuit board."
+ id = "shield_cap"
+ req_tech = list(TECH_MAGNET = 3, TECH_POWER = 4)
+ build_path = /obj/item/weapon/circuitboard/shield_cap
+ sort_string = "VAAAC"
+
+/datum/design/circuit/aicore
+ name = "AI core"
+ id = "aicore"
+ req_tech = list(TECH_DATA = 4, TECH_BIO = 3)
+ build_path = /obj/item/weapon/circuitboard/aicore
+ sort_string = "XAAAA"
+
+/datum/design/aimodule
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "gold" = 100)
+
+/datum/design/aimodule/AssembleDesignName()
+ name = "AI module design ([name])"
+
+/datum/design/aimodule/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI module."
+
+/datum/design/aimodule/safeguard
+ name = "Safeguard"
+ id = "safeguard"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/safeguard
+ sort_string = "XABAA"
+
+/datum/design/aimodule/onehuman
+ name = "OneCrewMember"
+ id = "onehuman"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/oneHuman
+ sort_string = "XABAB"
+
+/datum/design/aimodule/protectstation
+ name = "ProtectStation"
+ id = "protectstation"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/protectStation
+ sort_string = "XABAC"
+
+/datum/design/aimodule/notele
+ name = "TeleporterOffline"
+ id = "notele"
+ req_tech = list(TECH_DATA = 3)
+ build_path = /obj/item/weapon/aiModule/teleporterOffline
+ sort_string = "XABAD"
+
+/datum/design/aimodule/quarantine
+ name = "Quarantine"
+ id = "quarantine"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/quarantine
+ sort_string = "XABAE"
+
+/datum/design/aimodule/oxygen
+ name = "OxygenIsToxicToHumans"
+ id = "oxygen"
+ req_tech = list(TECH_DATA = 3, TECH_BIO = 2, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/oxygen
+ sort_string = "XABAF"
+
+/datum/design/aimodule/freeform
+ name = "Freeform"
+ id = "freeform"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4)
+ build_path = /obj/item/weapon/aiModule/freeform
+ sort_string = "XABAG"
+
+/datum/design/aimodule/reset
+ name = "Reset"
+ id = "reset"
+ req_tech = list(TECH_DATA = 3, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/reset
+ sort_string = "XAAAA"
+
+/datum/design/aimodule/purge
+ name = "Purge"
+ id = "purge"
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/purge
+ sort_string = "XAAAB"
+
+// Core modules
+/datum/design/aimodule/core
+ req_tech = list(TECH_DATA = 4, TECH_MATERIAL = 6)
+
+/datum/design/aimodule/core/AssembleDesignName()
+ name = "AI core module design ([name])"
+
+/datum/design/aimodule/core/AssembleDesignDesc()
+ desc = "Allows for the construction of \a '[name]' AI core module."
+
+/datum/design/aimodule/core/freeformcore
+ name = "Freeform"
+ id = "freeformcore"
+ build_path = /obj/item/weapon/aiModule/freeformcore
+ sort_string = "XACAA"
+
+/datum/design/aimodule/core/asimov
+ name = "Asimov"
+ id = "asimov"
+ build_path = /obj/item/weapon/aiModule/asimov
+ sort_string = "XACAB"
+
+/datum/design/aimodule/core/paladin
+ name = "P.A.L.A.D.I.N."
+ id = "paladin"
+ build_path = /obj/item/weapon/aiModule/paladin
+ sort_string = "XACAC"
+
+/datum/design/aimodule/core/tyrant
+ name = "T.Y.R.A.N.T."
+ id = "tyrant"
+ req_tech = list(TECH_DATA = 4, TECH_ILLEGAL = 2, TECH_MATERIAL = 6)
+ build_path = /obj/item/weapon/aiModule/tyrant
+ sort_string = "XACAD"
+
+/datum/design/item/pda
name = "PDA design"
desc = "Cheaper than whiny non-digital assistants."
id = "pda"
- req_tech = list("engineering" = 2, "powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
+ req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
build_path = /obj/item/device/pda
+ sort_string = "VAAAA"
-// *** Cartridges
-datum/design/item/pda_cartridge
- req_tech = list("engineering" = 2, "powerstorage" = 3)
- materials = list("$metal" = 50, "$glass" = 50)
+// Cartridges
+/datum/design/item/pda_cartridge
+ req_tech = list(TECH_ENGINERING = 2, TECH_POWER = 3)
+ materials = list("metal" = 50, "glass" = 50)
-datum/design/item/pda_cartridge/AssembleDesignName()
+/datum/design/item/pda_cartridge/AssembleDesignName()
..()
name = "PDA accessory ([item_name])"
-datum/design/item/pda_cartridge/cart_basic
+/datum/design/item/pda_cartridge/cart_basic
id = "cart_basic"
build_path = /obj/item/weapon/cartridge
-datum/design/item/pda_cartridge/engineering
+ sort_string = "VBAAA"
+
+/datum/design/item/pda_cartridge/engineering
id = "cart_engineering"
build_path = /obj/item/weapon/cartridge/engineering
-datum/design/item/pda_cartridge/atmos
+ sort_string = "VBAAB"
+
+/datum/design/item/pda_cartridge/atmos
id = "cart_atmos"
build_path = /obj/item/weapon/cartridge/atmos
-datum/design/item/pda_cartridge/medical
+ sort_string = "VBAAC"
+
+/datum/design/item/pda_cartridge/medical
id = "cart_medical"
build_path = /obj/item/weapon/cartridge/medical
-datum/design/item/pda_cartridge/chemistry
+ sort_string = "VBAAD"
+
+/datum/design/item/pda_cartridge/chemistry
id = "cart_chemistry"
build_path = /obj/item/weapon/cartridge/chemistry
-datum/design/item/pda_cartridge/security
+ sort_string = "VBAAE"
+
+/datum/design/item/pda_cartridge/security
id = "cart_security"
build_path = /obj/item/weapon/cartridge/security
- locked = 1
-datum/design/item/pda_cartridge/janitor
+ sort_string = "VBAAF"
+
+/datum/design/item/pda_cartridge/janitor
id = "cart_janitor"
build_path = /obj/item/weapon/cartridge/janitor
-/*
-datum/design/item/pda_cartridge/clown
- id = "cart_clown"
- build_path = /obj/item/weapon/cartridge/clown"
-datum/design/item/pda_cartridge/mime
- id = "cart_mime"
- build_path = /obj/item/weapon/cartridge/mime"
-*/
-datum/design/item/pda_cartridge/science
+ sort_string = "VBAAG"
+
+/datum/design/item/pda_cartridge/science
id = "cart_science"
build_path = /obj/item/weapon/cartridge/signal/science
-datum/design/item/pda_cartridge/quartermaster
+ sort_string = "VBAAH"
+
+/datum/design/item/pda_cartridge/quartermaster
id = "cart_quartermaster"
build_path = /obj/item/weapon/cartridge/quartermaster
- locked = 1
-datum/design/item/pda_cartridge/hop
+ sort_string = "VBAAI"
+
+/datum/design/item/pda_cartridge/hop
id = "cart_hop"
build_path = /obj/item/weapon/cartridge/hop
- locked = 1
-datum/design/item/pda_cartridge/hos
+ sort_string = "VBAAJ"
+
+/datum/design/item/pda_cartridge/hos
id = "cart_hos"
build_path = /obj/item/weapon/cartridge/hos
- locked = 1
-datum/design/item/pda_cartridge/ce
+ sort_string = "VBAAK"
+
+/datum/design/item/pda_cartridge/ce
id = "cart_ce"
build_path = /obj/item/weapon/cartridge/ce
- locked = 1
-datum/design/item/pda_cartridge/cmo
+ sort_string = "VBAAL"
+
+/datum/design/item/pda_cartridge/cmo
id = "cart_cmo"
build_path = /obj/item/weapon/cartridge/cmo
- locked = 1
-datum/design/item/pda_cartridge/rd
+ sort_string = "VBAAM"
+
+/datum/design/item/pda_cartridge/rd
id = "cart_rd"
build_path = /obj/item/weapon/cartridge/rd
- locked = 1
-datum/design/item/pda_cartridge/captain
+ sort_string = "VBAAN"
+
+/datum/design/item/pda_cartridge/captain
id = "cart_captain"
build_path = /obj/item/weapon/cartridge/captain
- locked = 1
+ sort_string = "VBAAO"
-/////////////////////////////////////////
-///////////////Misc Stuff////////////////
-/////////////////////////////////////////
-datum/design/item/borg_syndicate_module
+/*
+MECHAS BELOW
+*/
+
+/datum/design/item/mecha
+ build_type = MECHFAB
+ req_tech = list(TECH_COMBAT = 3)
+ category = "Exosuit Equipment"
+
+/datum/design/item/mecha/AssembleDesignName()
+ ..()
+ name = "Exosuit module design ([item_name])"
+
+/datum/design/item/mecha/weapon/AssembleDesignName()
+ ..()
+ name = "Exosuit weapon design ([item_name])"
+
+/datum/design/item/mecha/AssembleDesignDesc()
+ if(!desc)
+ desc = "Allows for the construction of \a '[item_name]' exosuit module."
+
+// *** Weapon modules
+/datum/design/item/mecha/weapon/scattershot
+ id = "mech_scattershot"
+ req_tech = list(TECH_COMBAT = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
+
+/datum/design/item/mecha/weapon/laser
+ id = "mech_laser"
+ req_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
+
+/datum/design/item/mecha/weapon/laser_rigged
+ desc = "Allows for the construction of a welder-laser assembly package for non-combat exosuits."
+ id = "mech_laser_rigged"
+ req_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/riggedlaser
+
+/datum/design/item/mecha/weapon/laser_heavy
+ id = "mech_laser_heavy"
+ req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
+
+/datum/design/item/mecha/weapon/ion
+ id = "mech_ion"
+ req_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/ion
+
+/datum/design/item/mecha/weapon/grenade_launcher
+ id = "mech_grenade_launcher"
+ req_tech = list(TECH_COMBAT = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
+
+/datum/design/item/mecha/weapon/clusterbang_launcher
+ desc = "A weapon that violates the Geneva Convention at 6 rounds per minute."
+ id = "clusterbang_launcher"
+ req_tech = list(TECH_COMBAT= 5, TECH_MATERIAL = 5, TECH_ILLEGAL = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang/limited
+
+// *** Nonweapon modules
+/datum/design/item/mecha/wormhole_gen
+ desc = "An exosuit module that can generate small quasi-stable wormholes."
+ id = "mech_wormhole_gen"
+ req_tech = list(TECH_BLUESPACE = 3, TECH_MAGNET = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/wormhole_generator
+
+/datum/design/item/mecha/teleporter
+ desc = "An exosuit module that allows teleportation to any position in view."
+ id = "mech_teleporter"
+ req_tech = list(TECH_BLUESPACE = 10, TECH_MAGNET = 5)
+ build_path = /obj/item/mecha_parts/mecha_equipment/teleporter
+
+/datum/design/item/mecha/rcd
+ desc = "An exosuit-mounted rapid construction device."
+ id = "mech_rcd"
+ req_tech = list(TECH_MATERIAL = 4, TECH_BLUESPACE = 3, TECH_MAGNET = 4, TECH_POWER=4, TECH_ENGINERING = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/rcd
+
+/datum/design/item/mecha/gravcatapult
+ desc = "An exosuit-mounted gravitational catapult."
+ id = "mech_gravcatapult"
+ req_tech = list(TECH_BLUESPACE = 2, TECH_MAGNET = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/gravcatapult
+
+/datum/design/item/mecha/repair_droid
+ desc = "Automated repair droid, exosuits' best companion. BEEP BOOP"
+ id = "mech_repair_droid"
+ req_tech = list(TECH_MAGNET = 3, TECH_DATA = 3, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/repair_droid
+
+/datum/design/item/mecha/phoron_generator
+ desc = "Exosuit-mounted phoron generator."
+ id = "mech_phoron_generator"
+ req_tech = list(TECH_PHORON = 2, TECH_POWER= 2, TECH_ENGINERING = 2)
+ build_path = /obj/item/mecha_parts/mecha_equipment/generator
+
+/datum/design/item/mecha/energy_relay
+ id = "mech_energy_relay"
+ req_tech = list(TECH_MAGNET = 4, TECH_POWER = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tesla_energy_relay
+
+/datum/design/item/mecha/ccw_armor
+ desc = "Exosuit close-combat armor booster."
+ id = "mech_ccw_armor"
+ req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 4)
+ build_path = /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster
+
+/datum/design/item/mecha/proj_armor
+ desc = "Exosuit projectile armor booster."
+ id = "mech_proj_armor"
+ req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_ENGINERING=3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
+
+/datum/design/item/mecha/syringe_gun
+ desc = "Exosuit-mounted syringe gun and chemical synthesizer."
+ id = "mech_syringe_gun"
+ req_tech = list(TECH_MATERIAL = 3, TECH_BIO=4, TECH_MAGNET=4, TECH_DATA=3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/syringe_gun
+
+/datum/design/item/mecha/diamond_drill
+ desc = "A diamond version of the exosuit drill. It's harder, better, faster, stronger."
+ id = "mech_diamond_drill"
+ req_tech = list(TECH_MATERIAL = 4, TECH_ENGINERING = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/tool/drill/diamonddrill
+
+/datum/design/item/mecha/generator_nuclear
+ desc = "Exosuit-held nuclear reactor. Converts uranium and everyone's health to energy."
+ id = "mech_generator_nuclear"
+ req_tech = list(TECH_POWER= 3, TECH_ENGINERING = 3, TECH_MATERIAL = 3)
+ build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
+
+/datum/design/item/synthetic_flash
+ id = "sflash"
+ req_tech = list(TECH_MAGNET = 3, TECH_COMBAT = 2)
+ build_type = MECHFAB
+ materials = list("metal" = 750, "glass" = 750)
+ build_path = /obj/item/device/flash/synthetic
+ category = "Misc"
+
+/datum/design/item/borg_syndicate_module
name = "Cyborg lethal weapons upgrade"
desc = "Allows for the construction of lethal upgrades for cyborgs."
id = "borg_syndicate_module"
build_type = MECHFAB
- req_tech = list("combat" = 4, "syndicate" = 3)
+ req_tech = list(TECH_COMBAT = 4, TECH_ILLEGAL = 3)
build_path = /obj/item/borg/upgrade/syndicate
category = "Cyborg Upgrade Modules"
-datum/design/item/mesons
- name = "Optical meson scanners design"
- desc = "Using the meson-scanning technology those glasses allow you to see through walls, floor or anything else."
- id = "mesons"
- req_tech = list("magnets" = 2, "engineering" = 2)
- materials = list("$metal" = 50, "$glass" = 50)
- build_path = /obj/item/clothing/glasses/meson
+/* Uncomment if someone makes these buildable
+/datum/design/circuit/general_alert
+ name = "general alert console"
+ id = "general_alert"
+ build_path = /obj/item/weapon/circuitboard/general_alert
-datum/design/item/binaryencrypt
- name = "Binary encryption key"
- desc = "Allows for deciphering the binary channel on-the-fly."
- id = "binaryencrypt"
- req_tech = list("syndicate" = 2)
- materials = list("$metal" = 300, "$glass" = 300)
- build_path = /obj/item/device/encryptionkey/binary
+// Removal of loyalty implants. Can't think of a way to add this to the config option.
+/datum/design/item/implant/loyalty
+ name = "loyalty"
+ id = "implant_loyal"
+ req_tech = list(TECH_MATERIAL = 2, TECH_BIO = 3)
+ materials = list("metal" = 7000, "glass" = 7000)
+ build_path = /obj/item/weapon/implantcase/loyalty"
-datum/design/item/chameleon
- name = "Holographic equipment kit"
- desc = "A kit of dangerous, high-tech equipment with changeable looks."
- id = "chameleon"
- req_tech = list("syndicate" = 2)
- materials = list("$metal" = 500)
- build_path = /obj/item/weapon/storage/box/syndie_kit/chameleon
+/datum/design/rust_core_control
+ name = "Circuit Design (RUST core controller)"
+ desc = "Allows for the construction of circuit boards used to build a core control console for the RUST fusion engine."
+ id = "rust_core_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_core_control"
+
+datum/design/rust_fuel_control
+ name = "Circuit Design (RUST fuel controller)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injector control console for the RUST fusion engine."
+ id = "rust_fuel_control"
+ req_tech = list("programming" = 4, "engineering" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20)
+ build_path = "/obj/item/weapon/circuitboard/rust_fuel_control"
+
+datum/design/rust_fuel_port
+ name = "Internal circuitry (RUST fuel port)"
+ desc = "Allows for the construction of circuit boards used to build a fuel injection port for the RUST fusion engine."
+ id = "rust_fuel_port"
+ req_tech = list("engineering" = 4, "materials" = 5)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "uranium" = 3000)
+ build_path = "/obj/item/weapon/module/rust_fuel_port"
+
+datum/design/rust_fuel_compressor
+ name = "Circuit Design (RUST fuel compressor)"
+ desc = "Allows for the construction of circuit boards used to build a fuel compressor of the RUST fusion engine."
+ id = "rust_fuel_compressor"
+ req_tech = list("materials" = 6, "phorontech" = 4)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 1000)
+ build_path = "/obj/item/weapon/module/rust_fuel_compressor"
+
+datum/design/rust_core
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern tokamak fusion core."
+ id = "pacman"
+ req_tech = list(bluespace = 3, phorontech = 4, magnets = 5, powerstorage = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "diamond" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+
+datum/design/rust_injector
+ name = "Internal circuitry (RUST tokamak core)"
+ desc = "The circuit board that for a RUST-pattern particle accelerator."
+ id = "pacman"
+ req_tech = list(powerstorage = 3, engineering = 4, phorontech = 4, materials = 6)
+ build_type = IMPRINTER
+ materials = list("glass" = 2000, "sacid" = 20, "phoron" = 3000, "uranium" = 2000)
+ build_path = "/obj/item/weapon/circuitboard/rust_core"
+*/
diff --git a/code/modules/research/destructive_analyzer.dm b/code/modules/research/destructive_analyzer.dm
index b8d0fca2094..9b97fecd951 100644
--- a/code/modules/research/destructive_analyzer.dm
+++ b/code/modules/research/destructive_analyzer.dm
@@ -1,5 +1,3 @@
-//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:33
-
/*
Destructive Analyzer
@@ -7,12 +5,12 @@ It is used to destroy hand-held objects and advance technological research. Cont
Note: Must be placed within 3 tiles of the R&D Console
*/
+
/obj/machinery/r_n_d/destructive_analyzer
name = "destructive analyzer"
icon_state = "d_analyzer"
- var/obj/item/weapon/loaded_item = null
- var/decon_mod = 1
- var/min_reliability = 90
+ var/obj/item/weapon/loaded_item = null
+ var/decon_mod = 0
use_power = 1
idle_power_usage = 30
@@ -32,7 +30,6 @@ Note: Must be placed within 3 tiles of the R&D Console
for(var/obj/item/weapon/stock_parts/S in src)
T += S.rating
decon_mod = T * 0.1
- min_reliability = 93 - T
/obj/machinery/r_n_d/destructive_analyzer/meteorhit()
qdel(src)
@@ -47,8 +44,12 @@ Note: Must be placed within 3 tiles of the R&D Console
icon_state = "d_analyzer"
/obj/machinery/r_n_d/destructive_analyzer/attackby(var/obj/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy right now."
+ return
+ if(loaded_item)
+ user << "There is something already loaded into \the [src]."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_destroy = null
@@ -61,32 +62,23 @@ Note: Must be placed within 3 tiles of the R&D Console
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- return
if(!linked_console)
- user << "\The [src] must be linked to an R&D console first!"
- return
- if(busy)
- user << "\The [src] is busy right now."
+ user << "\The [src] must be linked to an R&D console first."
return
if(istype(O, /obj/item) && !loaded_item)
if(isrobot(user)) //Don't put your module items in there!
return
if(!O.origin_tech)
- user << "This doesn't seem to have a tech origin!"
+ user << "This doesn't seem to have a tech origin."
return
- var/list/temp_tech = ConvertReqString2List(O.origin_tech)
- if(temp_tech.len == 0)
- user << "You cannot deconstruct this item!"
- return
- if(O.reliability < min_reliability && O.crit_fail == 0)
- usr << "Item is neither reliable enough nor broken enough to learn from."
+ if(O.origin_tech.len == 0)
+ user << "You cannot deconstruct this item."
return
busy = 1
loaded_item = O
user.drop_item()
O.loc = src
- user << "You add \the [O] to \the [src]!"
+ user << "You add \the [O] to \the [src]."
flick("d_analyzer_la", src)
spawn(10)
update_icon()
diff --git a/code/modules/research/message_server.dm b/code/modules/research/message_server.dm
index aa1e1a52e45..7e3ec70149d 100644
--- a/code/modules/research/message_server.dm
+++ b/code/modules/research/message_server.dm
@@ -108,6 +108,34 @@ var/global/list/obj/machinery/message_server/message_servers = list()
/obj/machinery/message_server/proc/send_rc_message(var/recipient = "",var/sender = "",var/message = "",var/stamp = "", var/id_auth = "", var/priority = 1)
rc_msgs += new/datum/data_rc_msg(recipient,sender,message,stamp,id_auth)
+ var/authmsg = "[message] "
+ if (id_auth)
+ authmsg += "[id_auth] "
+ if (stamp)
+ authmsg += "[stamp] "
+ for (var/obj/machinery/requests_console/Console in allConsoles)
+ if (ckey(Console.department) == ckey(recipient))
+ if(Console.newmessagepriority < priority)
+ Console.newmessagepriority = priority
+ Console.icon_state = "req_comp[priority]"
+ switch(priority)
+ if(2)
+ if(!Console.silent)
+ playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1)
+ Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'PRIORITY Alert in [sender]'"),,5)
+ Console.messages += "High Priority message from [sender] [authmsg]"
+ if(3)
+ if(!Console.silent)
+ playsound(Console.loc, 'sound/machines/twobeep.ogg', 70, 1)
+ Console.audible_message(text("\icon[Console] *The Requests Console yells: 'EXTREME PRIORITY alert in [sender]'"),,7)
+ Console.messages += "Extreme Priority message from [sender] [authmsg]"
+ else
+ if(!Console.silent)
+ playsound(Console.loc, 'sound/machines/twobeep.ogg', 50, 1)
+ Console.audible_message(text("\icon[Console] *The Requests Console beeps: 'Message from [sender]'"),,4)
+ Console.messages += "Message from [sender] [authmsg]"
+ Console.set_light(2)
+
/obj/machinery/message_server/attack_hand(user as mob)
// user << "\blue There seem to be some parts missing from this server. They should arrive on the station in a few days, give or take a few CentCom delays."
diff --git a/code/modules/research/protolathe.dm b/code/modules/research/protolathe.dm
index 06f3f7b760e..5ff3d23c746 100644
--- a/code/modules/research/protolathe.dm
+++ b/code/modules/research/protolathe.dm
@@ -1,12 +1,3 @@
-/*
-Protolathe
-
-Similar to an autolathe, you load glass and metal sheets (but not other objects) into it to be used as raw materials for the stuff
-it creates. All the menus and other manipulation commands are in the R&D console.
-
-Note: Must be placed west/left of and R&D console to function.
-
-*/
/obj/machinery/r_n_d/protolathe
name = "Protolathe"
icon_state = "protolathe"
@@ -16,16 +7,14 @@ Note: Must be placed west/left of and R&D console to function.
idle_power_usage = 30
active_power_usage = 5000
- var/max_material_storage = 100000 //All this could probably be done better with a list but meh.
- var/m_amount = 0.0
- var/g_amount = 0.0
- var/gold_amount = 0.0
- var/silver_amount = 0.0
- var/phoron_amount = 0.0
- var/uranium_amount = 0.0
- var/diamond_amount = 0.0
+ var/max_material_storage = 100000
+ var/list/materials = list("metal" = 0, "glass" = 0, "gold" = 0, "silver" = 0, "phoron" = 0, "uranium" = 0, "diamond" = 0)
+
+ var/list/datum/design/queue = list()
+ var/progress = 0
var/mat_efficiency = 1
+ var/speed = 1
/obj/machinery/r_n_d/protolathe/New()
..()
@@ -39,61 +28,76 @@ Note: Must be placed west/left of and R&D console to function.
component_parts += new /obj/item/weapon/reagent_containers/glass/beaker(src)
RefreshParts()
+/obj/machinery/r_n_d/protolathe/process()
+ ..()
+ if(stat)
+ update_icon()
+ return
+ if(queue.len == 0)
+ busy = 0
+ update_icon()
+ return
+ var/datum/design/D = queue[1]
+ if(canBuild(D))
+ busy = 1
+ progress += speed
+ if(progress >= D.time)
+ build(D)
+ progress = 0
+ removeFromQueue(1)
+ if(linked_console)
+ linked_console.updateUsrDialog()
+ update_icon()
+ else
+ if(busy)
+ visible_message("\icon [src] flashes: insufficient materials: [getLackingMaterials(D)].")
+ busy = 0
+ update_icon()
+
/obj/machinery/r_n_d/protolathe/proc/TotalMaterials() //returns the total of all the stored materials. Makes code neater.
- return m_amount + g_amount + gold_amount + silver_amount + phoron_amount + uranium_amount + diamond_amount
+ var/t = 0
+ for(var/f in materials)
+ t += materials[f]
+ return t
/obj/machinery/r_n_d/protolathe/RefreshParts()
var/T = 0
for(var/obj/item/weapon/reagent_containers/glass/G in component_parts)
T += G.reagents.maximum_volume
- var/datum/reagents/R = new/datum/reagents(T) //Holder for the reagents used as materials.
- reagents = R
- R.my_atom = src
- T = 0
+ create_reagents(T)
+ max_material_storage = 0
for(var/obj/item/weapon/stock_parts/matter_bin/M in component_parts)
- T += M.rating
- max_material_storage = T * 75000
+ max_material_storage += M.rating * 75000
T = 0
for(var/obj/item/weapon/stock_parts/manipulator/M in component_parts)
T += M.rating
mat_efficiency = 1 - (T - 2) / 8
+ speed = T / 2
/obj/machinery/r_n_d/protolathe/dismantle()
for(var/obj/I in component_parts)
if(istype(I, /obj/item/weapon/reagent_containers/glass/beaker))
- reagents.trans_to(I, reagents.total_volume)
- if(m_amount >= 3750)
- var/obj/item/stack/sheet/metal/G = new /obj/item/stack/sheet/metal(loc)
- G.amount = round(m_amount / G.perunit)
- if(g_amount >= 3750)
- var/obj/item/stack/sheet/glass/G = new /obj/item/stack/sheet/glass(loc)
- G.amount = round(g_amount / G.perunit)
- if(phoron_amount >= 2000)
- var/obj/item/stack/sheet/mineral/phoron/G = new /obj/item/stack/sheet/mineral/phoron(loc)
- G.amount = round(phoron_amount / G.perunit)
- if(silver_amount >= 2000)
- var/obj/item/stack/sheet/mineral/silver/G = new /obj/item/stack/sheet/mineral/silver(loc)
- G.amount = round(silver_amount / G.perunit)
- if(gold_amount >= 2000)
- var/obj/item/stack/sheet/mineral/gold/G = new /obj/item/stack/sheet/mineral/gold(loc)
- G.amount = round(gold_amount / G.perunit)
- if(uranium_amount >= 2000)
- var/obj/item/stack/sheet/mineral/uranium/G = new /obj/item/stack/sheet/mineral/uranium(loc)
- G.amount = round(uranium_amount / G.perunit)
- if(diamond_amount >= 2000)
- var/obj/item/stack/sheet/mineral/diamond/G = new /obj/item/stack/sheet/mineral/diamond(loc)
- G.amount = round(diamond_amount / G.perunit)
+ reagents.trans_to_obj(I, reagents.total_volume)
+ for(var/f in materials)
+ if(materials[f] >= SHEET_MATERIAL_AMOUNT)
+ var/path = getMaterialType(f)
+ if(path)
+ var/obj/item/stack/S = new f(loc)
+ S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
..()
/obj/machinery/r_n_d/protolathe/update_icon()
if(panel_open)
icon_state = "protolathe_t"
+ else if(busy)
+ icon_state = "protolathe_n"
else
icon_state = "protolathe"
/obj/machinery/r_n_d/protolathe/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if(shocked)
- shock(user, 50)
+ if(busy)
+ user << "\The [src] is busy. Please wait for completion of previous operation."
+ return 1
if(default_deconstruction_screwdriver(user, O))
if(linked_console)
linked_console.linked_lathe = null
@@ -108,69 +112,93 @@ Note: Must be placed west/left of and R&D console to function.
if(panel_open)
user << "You can't load \the [src] while it's opened."
return 1
- if(disabled)
- return
if(!linked_console)
user << "\The [src] must be linked to an R&D console first!"
return 1
- if(busy)
- user << "\The [src] is busy. Please wait for completion of previous operation."
+ if(!istype(O, /obj/item/stack/material))
+ user << "You cannot insert this item into \the [src]!"
return 1
if(stat)
return 1
- if(istype(O,/obj/item/stack/sheet))
- var/obj/item/stack/sheet/S = O
- if(TotalMaterials() + S.perunit > max_material_storage)
- user << "\The [src]'s material bin is full. Please remove material before adding more."
- return 1
- var/obj/item/stack/sheet/stack = O
- var/amount = round(input("How many sheets do you want to add?") as num)//No decimals
- if(!O)
- return
- if(amount < 0)//No negative numbers
- amount = 0
- if(amount == 0)
- return
- if(amount > stack.get_amount())
- amount = stack.get_amount()
- if(max_material_storage - TotalMaterials() < (amount * stack.perunit))//Can't overfill
- amount = min(stack.amount, round((max_material_storage - TotalMaterials()) / stack.perunit))
+ if(TotalMaterials() + SHEET_MATERIAL_AMOUNT > max_material_storage)
+ user << "\The [src]'s material bin is full. Please remove material before adding more."
+ return 1
- overlays += "protolathe_[stack.name]"
- sleep(10)
- overlays -= "protolathe_[stack.name]"
-
- icon_state = "protolathe"
- busy = 1
- use_power(max(1000, (3750 * amount / 10)))
- var/stacktype = stack.type
- stack.use(amount)
- if(do_after(user, 16))
- user << "You add [amount] sheets to \the [src]."
- icon_state = "protolathe"
- switch(stacktype)
- if(/obj/item/stack/sheet/metal)
- m_amount += amount * 3750
- if(/obj/item/stack/sheet/glass)
- g_amount += amount * 3750
- if(/obj/item/stack/sheet/mineral/gold)
- gold_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/silver)
- silver_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/phoron)
- phoron_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/uranium)
- uranium_amount += amount * 2000
- if(/obj/item/stack/sheet/mineral/diamond)
- diamond_amount += amount * 2000
- else
- new stacktype(loc, amount)
- busy = 0
- updateUsrDialog()
+ var/obj/item/stack/material/stack = O
+ var/amount = round(input("How many sheets do you want to add?") as num)//No decimals
+ if(!O)
return
- ..()
+ if(amount <= 0)//No negative numbers
+ return
+ if(amount > stack.get_amount())
+ amount = stack.get_amount()
+ if(max_material_storage - TotalMaterials() < (amount * SHEET_MATERIAL_AMOUNT)) //Can't overfill
+ amount = min(stack.get_amount(), round((max_material_storage - TotalMaterials()) / SHEET_MATERIAL_AMOUNT))
-//This is to stop these machines being hackable via clicking.
-/obj/machinery/r_n_d/protolathe/attack_hand(mob/user as mob)
- return
\ No newline at end of file
+ var/stacktype = stack.type
+ var/t = getMaterialName(stacktype)
+ overlays += "protolathe_[t]"
+ spawn(10)
+ overlays -= "protolathe_[t]"
+
+ busy = 1
+ use_power(max(1000, (SHEET_MATERIAL_AMOUNT * amount / 10)))
+ if(t)
+ if(do_after(user, 16))
+ if(stack.use(amount))
+ user << "You add [amount] sheets to \the [src]."
+ materials[t] += amount * SHEET_MATERIAL_AMOUNT
+ busy = 0
+ updateUsrDialog()
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/addToQueue(var/datum/design/D)
+ queue += D
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/removeFromQueue(var/index)
+ queue.Cut(index, index + 1)
+ return
+
+/obj/machinery/r_n_d/protolathe/proc/canBuild(var/datum/design/D)
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ return 0
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ return 0
+ return 1
+
+/obj/machinery/r_n_d/protolathe/proc/getLackingMaterials(var/datum/design/D)
+ var/ret = ""
+ for(var/M in D.materials)
+ if(materials[M] < D.materials[M])
+ if(ret != "")
+ ret += ", "
+ ret += "[D.materials[M] - materials[M]] [M]"
+ for(var/C in D.chemicals)
+ if(!reagents.has_reagent(C, D.chemicals[C]))
+ if(ret != "")
+ ret += ", "
+ ret += C
+ return ret
+
+/obj/machinery/r_n_d/protolathe/proc/build(var/datum/design/D)
+ var/power = active_power_usage
+ for(var/M in D.materials)
+ power += round(D.materials[M] / 5)
+ power = max(active_power_usage, power)
+ use_power(power)
+ for(var/M in D.materials)
+ materials[M] = max(0, materials[M] - D.materials[M] * mat_efficiency)
+ for(var/C in D.chemicals)
+ reagents.remove_reagent(C, D.chemicals[C] * mat_efficiency)
+
+ if(D.build_path)
+ var/obj/new_item = new D.build_path(src)
+ new_item.loc = loc
+ if(mat_efficiency != 1) // No matter out of nowhere
+ if(new_item.matter && new_item.matter.len > 0)
+ for(var/i in new_item.matter)
+ new_item.matter[i] = new_item.matter[i] * mat_efficiency
diff --git a/code/modules/research/rd-readme.dm b/code/modules/research/rd-readme.dm
index 92e2c5b28ec..0f983951451 100644
--- a/code/modules/research/rd-readme.dm
+++ b/code/modules/research/rd-readme.dm
@@ -3,7 +3,7 @@ Research and Development System. (Designed specifically for the /tg/station 13 (
///////////////Overview///////////////////
This system is a "tech tree" research and development system designed for SS13. It allows a "researcher" job (this document assumes
-the "scientist" job is given this role) the tools necessiary to research new and better technologies. In general, the system works
+the "scientist" job is given this role) the tools necessary to research new and better technologies. In general, the system works
by breaking existing technology and using what you learn from to advance your knowledge of SCIENCE! As your knowledge progresses,
you can build newer (and better?) devices (which you can also, eventually, deconstruct to advance your knowledge).
@@ -29,211 +29,4 @@ Each tech path should have at LEAST one item at every level (levels 1 - 20). Thi
researching. Existing tech (ie, anything you can find on the station or get from the quartermaster) shouldn't go higher then
level 5 or 7. Everything past that should be stuff you research.
-Below is a checklist to make sure every tree is filled. As new items get added to R&D, add them here if there is an empty slot.
-When thinking about new stuff, check here to see if there are any slots unfilled.
-
-//MATERIALS
-1 | Metal
-2 | Solid Phoron
-3 | Silver
-4 | Gold, Super Capacitor
-5 | Uranium, Nuclear Gun, SUPERPACMAN
-6 | Diamond, MRSPACMAN
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//PHORON TECH
-1 |
-2 | Solid Phoron
-3 | Pacman Generator
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//POWER TECH
-1 | Basic Capacitor, Basic Cell
-2 | High-Capacity Cell (10,000)
-3 | Super-Capacity Cell (20,000), Powersink, PACMAN
-4 | SUPERPACMAN
-5 | MRSPACMAN, Super Capacitor
-6 | Hyper-Capacity Cell (30,000)
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//BLUE SPACE
-1 |
-2 | Teleporter Console Board
-3 | Teleport Gun, Hand Tele
-4 | Teleportation Scroll
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//BIOTECH
-1 | Bruise Pack, Scalpel
-2 | PANDEMIC Board, Mass Spectrometer
-3 | AI Core, Brains (MMI)
-4 | MMI+Radio
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//MAGNETS
-1 | Basic Sensor
-2 | Comm Console Board
-3 | Adv Sensor
-4 | Adv Mass Spectrometer, Chameleon Projector
-5 | Phasic Sensor
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//PROGRAMMING
-1 | Arcade Board
-2 | Sec Camera
-3 | Cloning Machine Console Board
-4 | AI Core, Intellicard
-5 | Pico-Manipulator, Ultra-Micro-Laser
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//SYNDICATE
-1 | Sleepypen
-2 | TYRANT Module, Emag
-3 | Cloaking Device, Power Sink
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-//COMBAT
-1 | Flashbang, Mousetrap, Nettle
-2 | Stun Baton
-3 | Power Axe, Death Nettle, Nuclear Gun
-4 |
-5 |
-6 |
-7 |
-8 |
-9 |
-10 |
-11 |
-12 |
-13 |
-14 |
-15 |
-16 |
-17 |
-18 |
-19 |
-20 |
-
-
-
-
-
-
-
*/
\ No newline at end of file
diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm
index 6f47ca5bb2f..c82c00e4a04 100644
--- a/code/modules/research/rdconsole.dm
+++ b/code/modules/research/rdconsole.dm
@@ -30,6 +30,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole
name = "R&D control console"
icon_state = "rdcomp"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/rdconsole
var/datum/research/files //Stores all the collected research data.
var/obj/item/weapon/disk/tech_disk/t_disk = null //Stores the technology disk.
@@ -42,7 +43,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/screen = 1.0 //Which screen is currently showing.
var/id = 0 //ID of the computer (for server restrictions).
var/sync = 1 //If sync = 0, it doesn't show up on Server Control Console
- var/errored = 0 //Errored during item construction.
req_access = list(access_research) //Data and setting manipulation requires scientist access.
@@ -57,43 +57,43 @@ won't update every console in existence) but it's more of a hassle to do. Also,
qdel(check_tech)
check_tech = null
break
-
return return_name
/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
+ var/return_name = ID
+ switch(return_name)
+ if("metal")
+ return_name = "Metal"
+ if("glass")
+ return_name = "Glass"
+ if("gold")
+ return_name = "Gold"
+ if("silver")
+ return_name = "Silver"
+ if("phoron")
+ return_name = "Solid Phoron"
+ if("uranium")
+ return_name = "Uranium"
+ if("diamond")
+ return_name = "Diamond"
+ return return_name
+
+/obj/machinery/computer/rdconsole/proc/CallReagentName(var/ID)
+ var/return_name = ID
var/datum/reagent/temp_reagent
- var/return_name = null
- if (copytext(ID, 1, 2) == "$")
- return_name = copytext(ID, 2)
- switch(return_name)
- if("metal")
- return_name = "Metal"
- if("glass")
- return_name = "Glass"
- if("gold")
- return_name = "Gold"
- if("silver")
- return_name = "Silver"
- if("phoron")
- return_name = "Solid Phoron"
- if("uranium")
- return_name = "Uranium"
- if("diamond")
- return_name = "Diamond"
- else
- for(var/R in typesof(/datum/reagent) - /datum/reagent)
+ for(var/R in (typesof(/datum/reagent) - /datum/reagent))
+ temp_reagent = null
+ temp_reagent = new R()
+ if(temp_reagent.id == ID)
+ return_name = temp_reagent.name
+ qdel(temp_reagent)
temp_reagent = null
- temp_reagent = new R()
- if(temp_reagent.id == ID)
- return_name = temp_reagent.name
- qdel(temp_reagent)
- temp_reagent = null
- break
+ break
return return_name
/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
- for(var/obj/machinery/r_n_d/D in oview(3,src))
- if(D.linked_console != null || D.disabled || D.panel_open)
+ for(var/obj/machinery/r_n_d/D in range(3, src))
+ if(D.linked_console != null || D.panel_open)
continue
if(istype(D, /obj/machinery/r_n_d/destructive_analyzer))
if(linked_destroy == null)
@@ -109,8 +109,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
D.linked_console = src
return
-//Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work --NEO
-/obj/machinery/computer/rdconsole/proc/griefProtection()
+/obj/machinery/computer/rdconsole/proc/griefProtection() //Have it automatically push research to the centcomm server so wild griffins can't fuck up R&D's work
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
for(var/datum/tech/T in files.known_tech)
C.files.AddTech2Known(T)
@@ -129,11 +128,6 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/initialize()
SyncRDevices()
-/* Instead of calling this every tick, it is only being called when needed
-/obj/machinery/computer/rdconsole/process()
- griefProtection()
-*/
-
/obj/machinery/computer/rdconsole/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob)
//Loading a disk into it.
if(istype(D, /obj/item/weapon/disk))
@@ -141,18 +135,20 @@ won't update every console in existence) but it's more of a hassle to do. Also,
user << "A disk is already loaded into the machine."
return
- if(istype(D, /obj/item/weapon/disk/tech_disk)) t_disk = D
- else if (istype(D, /obj/item/weapon/disk/design_disk)) d_disk = D
+ if(istype(D, /obj/item/weapon/disk/tech_disk))
+ t_disk = D
+ else if (istype(D, /obj/item/weapon/disk/design_disk))
+ d_disk = D
else
- user << "\red Machine cannot accept disks in that format."
+ user << "Machine cannot accept disks in that format."
return
user.drop_item()
D.loc = src
- user << "\blue You add the disk to the machine!"
+ user << "You add \the [D] to the machine."
else if(istype(D, /obj/item/weapon/card/emag) && !emagged)
playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1)
emagged = 1
- user << "\blue You you disable the security protocols"
+ user << "You you disable the security protocols."
else
//The construction/deconstruction of the console code.
..()
@@ -169,17 +165,11 @@ won't update every console in existence) but it's more of a hassle to do. Also,
usr.set_machine(src)
if(href_list["menu"]) //Switches menu screens. Converts a sent text string into a number. Saves a LOT of code.
var/temp_screen = text2num(href_list["menu"])
- if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || src.allowed(usr) || emagged) //Unless you are making something, you need access.
+ if(temp_screen <= 1.1 || (3 <= temp_screen && 4.9 >= temp_screen) || allowed(usr) || emagged) //Unless you are making something, you need access.
screen = temp_screen
else
usr << "Unauthorized Access."
- else if(href_list["reset"])
- warning("RnD console has errored during protolathe operation. Resetting.")
- errored = 0
- screen = 1.0
- updateUsrDialog()
-
else if(href_list["updt_tech"]) //Update the research holder with information from the technology disk.
screen = 0.0
spawn(50)
@@ -192,7 +182,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
t_disk.stored = null
else if(href_list["eject_tech"]) //Eject the technology disk.
- t_disk:loc = src.loc
+ t_disk.loc = loc
t_disk = null
screen = 1.0
@@ -215,7 +205,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
d_disk.blueprint = null
else if(href_list["eject_design"]) //Eject the design disk.
- d_disk:loc = src.loc
+ d_disk.loc = loc
d_disk = null
screen = 1.0
@@ -229,7 +219,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["eject_item"]) //Eject the item inside the destructive analyzer.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "\red The destructive analyzer is busy at the moment."
+ usr << "The destructive analyzer is busy at the moment."
else if(linked_destroy.loaded_item)
linked_destroy.loaded_item.loc = linked_destroy.loc
@@ -240,9 +230,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["deconstruct"]) //Deconstruct the item in the destructive analyzer and update the research holder.
if(linked_destroy)
if(linked_destroy.busy)
- usr << "\red The destructive analyzer is busy at the moment."
+ usr << "The destructive analyzer is busy at the moment."
else
- if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy) return
+ if(alert("Proceeding will destroy loaded item. Continue?", "Destructive analyzer confirmation", "Yes", "No") == "No" || !linked_destroy)
+ return
linked_destroy.busy = 1
screen = 0.1
updateUsrDialog()
@@ -250,26 +241,24 @@ won't update every console in existence) but it's more of a hassle to do. Also,
spawn(24)
if(linked_destroy)
linked_destroy.busy = 0
- if(!linked_destroy.hacked)
- if(!linked_destroy.loaded_item)
- usr <<"\red The destructive analyzer appears to be empty."
- screen = 1.0
- return
- if(linked_destroy.loaded_item.reliability >= linked_destroy.min_reliability)
- var/list/temp_tech = ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
- for(var/T in temp_tech)
- files.UpdateTech(T, temp_tech[T])
- if(linked_destroy.loaded_item.reliability < 100 && linked_destroy.loaded_item.crit_fail)
- files.UpdateDesign(linked_destroy.loaded_item.type)
- if(linked_lathe && linked_destroy.loaded_item.matter) //Also sends salvaged materials to a linked protolathe, if any.
- linked_lathe.m_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter["metal"]*linked_destroy.decon_mod))
- linked_lathe.g_amount += min((linked_lathe.max_material_storage - linked_lathe.TotalMaterials()), (linked_destroy.loaded_item.matter["glass"]*linked_destroy.decon_mod))
- linked_destroy.loaded_item = null
+ if(!linked_destroy.loaded_item)
+ usr <<"The destructive analyzer appears to be empty."
+ screen = 1.0
+ return
+
+ for(var/T in linked_destroy.loaded_item.origin_tech)
+ files.UpdateTech(T, linked_destroy.loaded_item.origin_tech[T])
+ if(linked_lathe && linked_destroy.loaded_item.matter) // Also sends salvaged materials to a linked protolathe, if any.
+ for(var/t in linked_destroy.loaded_item.matter)
+ if(t in linked_lathe.materials)
+ linked_lathe.materials[t] += min(linked_lathe.max_material_storage - linked_lathe.TotalMaterials(), linked_destroy.loaded_item.matter[t] * linked_destroy.decon_mod)
+
+ linked_destroy.loaded_item = null
for(var/obj/I in linked_destroy.contents)
for(var/mob/M in I.contents)
- M.death()
- if(istype(I,/obj/item/stack/sheet))//Only deconsturcts one sheet at a time instead of the entire stack
- var/obj/item/stack/sheet/S = I
+ M.death()
+ if(istype(I,/obj/item/stack/material))//Only deconsturcts one sheet at a time instead of the entire stack
+ var/obj/item/stack/material/S = I
if(S.get_amount() > 1)
S.use(1)
linked_destroy.loaded_item = S
@@ -280,12 +269,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!(I in linked_destroy.component_parts))
qdel(I)
linked_destroy.icon_state = "d_analyzer"
+
use_power(linked_destroy.active_power_usage)
screen = 1.0
updateUsrDialog()
else if(href_list["lock"]) //Lock the console from use by anyone without tox access.
- if(src.allowed(usr))
+ if(allowed(usr))
screen = text2num(href_list["lock"])
else
usr << "Unauthorized Access."
@@ -293,15 +283,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["sync"]) //Sync the research holder with all the R&D consoles in the game that aren't sync protected.
screen = 0.0
if(!sync)
- usr << "\red You must connect to the network first!"
+ usr << "You must connect to the network first."
else
griefProtection() //Putting this here because I dont trust the sync process
spawn(30)
if(src)
for(var/obj/machinery/r_n_d/server/S in machines)
var/server_processed = 0
- if(S.disabled)
- continue
if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
for(var/datum/tech/T in files.known_tech)
S.files.AddTech2Known(T)
@@ -309,7 +297,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
S.files.AddDesign2Known(D)
S.files.RefreshResearch()
server_processed = 1
- if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked)
+ if((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom))
for(var/datum/tech/T in S.files.known_tech)
files.AddTech2Known(T)
for(var/datum/design/D in S.files.known_designs)
@@ -332,57 +320,10 @@ won't update every console in existence) but it's more of a hassle to do. Also,
being_built = D
break
if(being_built)
- var/power = linked_lathe.active_power_usage
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] / 5)
- power = max(linked_lathe.active_power_usage, power)
- screen = 0.3
- linked_lathe.busy = 1
- flick("protolathe_n",linked_lathe)
- var/key = usr.key //so we don't lose the info during the spawn delay
- spawn(16)
- use_power(power)
- spawn(16)
- errored = 1
- for(var/M in being_built.materials)
- switch(M)
- if("$metal")
- linked_lathe.m_amount = max(0, (linked_lathe.m_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$glass")
- linked_lathe.g_amount = max(0, (linked_lathe.g_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$gold")
- linked_lathe.gold_amount = max(0, (linked_lathe.gold_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$silver")
- linked_lathe.silver_amount = max(0, (linked_lathe.silver_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$phoron")
- linked_lathe.phoron_amount = max(0, (linked_lathe.phoron_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$uranium")
- linked_lathe.uranium_amount = max(0, (linked_lathe.uranium_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- if("$diamond")
- linked_lathe.diamond_amount = max(0, (linked_lathe.diamond_amount-being_built.materials[M]*linked_lathe.mat_efficiency))
- else
- linked_lathe.reagents.remove_reagent(M, being_built.materials[M]*linked_lathe.mat_efficiency)
+ linked_lathe.addToQueue(being_built)
- if(being_built.build_path)
- var/obj/new_item = new being_built.build_path(src)
- if( new_item.type == /obj/item/weapon/storage/backpack/holding )
- new_item.investigate_log("built by [key]","singulo")
- new_item.reliability = being_built.reliability
- if(linked_lathe.hacked) being_built.reliability = max((reliability / 2), 0)
- /*if(being_built.locked)
- var/obj/item/weapon/storage/lockbox/L = new/obj/item/weapon/storage/lockbox(linked_lathe.loc)
- new_item.loc = L
- L.name += " ([new_item.name])"*/
- else
- new_item.loc = linked_lathe.loc
- if(linked_lathe.mat_efficiency != 1) // No matter out of nowhere
- if(new_item.matter && new_item.matter.len > 0)
- for(var/i in new_item.matter)
- new_item.matter[i] = new_item.matter[i] * linked_lathe.mat_efficiency
- linked_lathe.busy = 0
- screen = 3.1
- errored = 0
- updateUsrDialog()
+ screen = 3.1
+ updateUsrDialog()
else if(href_list["imprint"]) //Causes the Circuit Imprinter to build something.
if(linked_imprinter)
@@ -392,36 +333,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
being_built = D
break
if(being_built)
- var/power = linked_imprinter.active_power_usage
- for(var/M in being_built.materials)
- power += round(being_built.materials[M] / 5)
- power = max(linked_imprinter.active_power_usage, power)
- screen = 0.4
- linked_imprinter.busy = 1
- flick("circuit_imprinter_ani",linked_imprinter)
- spawn(16)
- errored = 1
- use_power(power)
- for(var/M in being_built.materials)
- switch(M)
- if("$glass")
- linked_imprinter.g_amount = max(0, (linked_imprinter.g_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$gold")
- linked_imprinter.gold_amount = max(0, (linked_imprinter.gold_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$diamond")
- linked_imprinter.diamond_amount = max(0, (linked_imprinter.diamond_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- if("$uranium")
- linked_imprinter.uranium_amount = max(0, (linked_imprinter.uranium_amount-being_built.materials[M]*linked_imprinter.mat_efficiency))
- else
- linked_imprinter.reagents.remove_reagent(M, being_built.materials[M]*linked_imprinter.mat_efficiency)
- var/obj/new_item = new being_built.build_path(src)
- new_item.reliability = being_built.reliability
- if(linked_imprinter.hacked) being_built.reliability = max((reliability / 2), 0)
- new_item.loc = linked_imprinter.loc
- linked_imprinter.busy = 0
- screen = 4.1
- errored = 0
- updateUsrDialog()
+ linked_imprinter.addToQueue(being_built)
+ screen = 4.1
+ updateUsrDialog()
else if(href_list["disposeI"] && linked_imprinter) //Causes the circuit imprinter to dispose of a single reagent (all of it)
linked_imprinter.reagents.del_reagent(href_list["dispose"])
@@ -429,44 +343,47 @@ won't update every console in existence) but it's more of a hassle to do. Also,
else if(href_list["disposeallI"] && linked_imprinter) //Causes the circuit imprinter to dispose of all it's reagents.
linked_imprinter.reagents.clear_reagents()
+ else if(href_list["removeI"] && linked_lathe)
+ linked_imprinter.removeFromQueue(text2num(href_list["removeI"]))
+
else if(href_list["disposeP"] && linked_lathe) //Causes the protolathe to dispose of a single reagent (all of it)
linked_lathe.reagents.del_reagent(href_list["dispose"])
else if(href_list["disposeallP"] && linked_lathe) //Causes the protolathe to dispose of all it's reagents.
linked_lathe.reagents.clear_reagents()
+ else if(href_list["removeP"] && linked_lathe)
+ linked_lathe.removeFromQueue(text2num(href_list["removeP"]))
+
else if(href_list["lathe_ejectsheet"] && linked_lathe) //Causes the protolathe to eject a sheet of material
var/desired_num_sheets = text2num(href_list["amount"])
var/res_amount, type
- switch(href_list["lathe_ejectsheet"])
- if("metal")
- type = /obj/item/stack/sheet/metal
+ var/material/M = name_to_material[href_list["lathe_ejectsheet"]]
+ if(istype(M))
+ type = M.stack_type
+
+ switch(name_to_material[href_list["lathe_ejectsheet"]])
+ if(DEFAULT_WALL_MATERIAL)
res_amount = "m_amount"
if("glass")
- type = /obj/item/stack/sheet/glass
res_amount = "g_amount"
if("gold")
- type = /obj/item/stack/sheet/mineral/gold
res_amount = "gold_amount"
if("silver")
- type = /obj/item/stack/sheet/mineral/silver
res_amount = "silver_amount"
if("phoron")
- type = /obj/item/stack/sheet/mineral/phoron
res_amount = "phoron_amount"
if("uranium")
- type = /obj/item/stack/sheet/mineral/uranium
res_amount = "uranium_amount"
if("diamond")
- type = /obj/item/stack/sheet/mineral/diamond
res_amount = "diamond_amount"
if(ispath(type) && hasvar(linked_lathe, res_amount))
- var/obj/item/stack/sheet/sheet = new type(linked_lathe.loc)
+ var/obj/item/stack/material/sheet = new type(linked_lathe.loc)
var/available_num_sheets = round(linked_lathe.vars[res_amount]/sheet.perunit)
- if(available_num_sheets>0)
+ if(available_num_sheets > 0)
sheet.amount = min(available_num_sheets, desired_num_sheets)
- linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount]-sheet.amount * sheet.perunit))
+ linked_lathe.vars[res_amount] = max(0, (linked_lathe.vars[res_amount] - sheet.amount * sheet.perunit))
else
qdel(sheet)
else if(href_list["imprinter_ejectsheet"] && linked_imprinter) //Causes the protolathe to eject a sheet of material
@@ -474,29 +391,29 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/res_amount, type
switch(href_list["imprinter_ejectsheet"])
if("glass")
- type = /obj/item/stack/sheet/glass
+ type = /obj/item/stack/material/glass
res_amount = "g_amount"
if("gold")
- type = /obj/item/stack/sheet/mineral/gold
+ type = /obj/item/stack/material/gold
res_amount = "gold_amount"
if("diamond")
- type = /obj/item/stack/sheet/mineral/diamond
+ type = /obj/item/stack/material/diamond
res_amount = "diamond_amount"
if("uranium")
- type = /obj/item/stack/sheet/mineral/uranium
+ type = /obj/item/stack/material/uranium
res_amount = "uranium_amount"
if(ispath(type) && hasvar(linked_imprinter, res_amount))
- var/obj/item/stack/sheet/sheet = new type(linked_imprinter.loc)
+ var/obj/item/stack/material/sheet = new type(linked_imprinter.loc)
var/available_num_sheets = round(linked_imprinter.vars[res_amount]/sheet.perunit)
if(available_num_sheets>0)
sheet.amount = min(available_num_sheets, desired_num_sheets)
- linked_imprinter.vars[res_amount] = max(0, (linked_imprinter.vars[res_amount]-sheet.amount * sheet.perunit))
+ linked_imprinter.vars[res_amount] = max(0, (linked_imprinter.vars[res_amount] - sheet.amount * sheet.perunit))
else
qdel(sheet)
else if(href_list["find_device"]) //The R&D console looks for devices nearby to link up with.
screen = 0.0
- spawn(20)
+ spawn(10)
SyncRDevices()
screen = 1.7
updateUsrDialog()
@@ -550,6 +467,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
var/dat
dat += ""
for(var/datum/tech/T in files.known_tech)
+ if(T.level < 1)
+ continue
dat += "- "
dat += "[T.name]"
dat += "
"
@@ -589,17 +508,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(linked_imprinter == null)
screen = 4.0
- if(errored)
- dat += "An error has occured when constructing prototype. Try refreshing the console."
- dat += " If problem persists submit bug report stating which item you tried to build."
- dat += " RESET CONSOLE
"
-
switch(screen)
//////////////////////R&D CONSOLE SCREENS//////////////////
- if(0.0) dat += "Updating Database...."
+ if(0.0)
+ dat += "Updating Database..."
- if(0.1) dat += "Processing and Updating Database..."
+ if(0.1)
+ dat += "Processing and Updating Database..."
if(0.2)
dat += "SYSTEM LOCKED
"
@@ -678,11 +594,9 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Load Design to Disk || "
else
dat += "Name: [d_disk.blueprint.name] "
- dat += "Level: [between(0, (d_disk.blueprint.reliability + rand(-15,15)), 100)] "
switch(d_disk.blueprint.build_type)
if(IMPRINTER) dat += "Lathe Type: Circuit Imprinter "
if(PROTOLATHE) dat += "Lathe Type: Proto-lathe "
- if(AUTOLATHE) dat += "Lathe Type: Auto-lathe "
dat += "Required Materials: "
for(var/M in d_disk.blueprint.materials)
if(copytext(M, 1, 2) == "$") dat += "* [copytext(M, 2)] x [d_disk.blueprint.materials[M]] "
@@ -753,9 +667,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Name: [linked_destroy.loaded_item.name] "
dat += "Origin Tech:"
dat += ""
- var/list/temp_tech = ConvertReqString2List(linked_destroy.loaded_item.origin_tech)
- for(var/T in temp_tech)
- dat += "- [CallTechName(T)] [temp_tech[T]]"
+ for(var/T in linked_destroy.loaded_item.origin_tech)
+ dat += "
- [CallTechName(T)] [linked_destroy.loaded_item.origin_tech[T]]"
for(var/datum/tech/F in files.known_tech)
if(F.name == CallTechName(T))
dat += " (Current: [F.level])"
@@ -771,6 +684,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(3.1)
dat += "Main Menu || "
+ dat += "View Queue || "
dat += "Material Storage || "
dat += "Chemical Storage
"
dat += "Protolathe Menu:
"
@@ -781,35 +695,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!D.build_path || !(D.build_type & PROTOLATHE))
continue
var/temp_dat
- var/check_materials = 1
for(var/M in D.materials)
- temp_dat += ", [D.materials[M]*linked_lathe.mat_efficiency] [CallMaterialName(M)]"
- if(copytext(M, 1, 2) == "$")
- switch(M)
- if("$glass")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.g_amount) check_materials = 0
- if("$metal")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.m_amount) check_materials = 0
- if("$gold")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.gold_amount) check_materials = 0
- if("$silver")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.silver_amount) check_materials = 0
- if("$phoron")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.phoron_amount) check_materials = 0
- if("$uranium")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.uranium_amount) check_materials = 0
- if("$diamond")
- if(D.materials[M]*linked_lathe.mat_efficiency > linked_lathe.diamond_amount) check_materials = 0
- else if (!linked_lathe.reagents.has_reagent(M, D.materials[M]*linked_lathe.mat_efficiency))
- check_materials = 0
+ temp_dat += ", [D.materials[M]] [CallMaterialName(M)]"
+ for(var/T in D.chemicals)
+ temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
if(temp_dat)
- temp_dat = " \[[copytext(temp_dat,3)]\]"
- if(check_materials)
+ temp_dat = " \[[copytext(temp_dat, 3)]\]"
+ if(linked_lathe.canBuild(D))
dat += " - [D.name][temp_dat]"
else
dat += "
- [D.name][temp_dat]"
- if(D.reliability < 100)
- dat += " (Reliability: [D.reliability])"
dat += "
"
if(3.2) //Protolathe Material Storage Sub-menu
@@ -817,33 +712,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Protolathe Menu "
dat += "Material Storage
"
dat += ""
- for(var/M in list("metal", "glass", "gold", "silver", "phoron", "uranium", "diamond"))
- var/amount
- var/sheetsize = 2000
- switch(M)
- if("metal")
- amount = linked_lathe.m_amount
- sheetsize = 3750
- if("glass")
- amount = linked_lathe.g_amount
- sheetsize = 3750
- if("gold")
- amount = linked_lathe.gold_amount
- if("silver")
- amount = linked_lathe.silver_amount
- if("phoron")
- amount = linked_lathe.phoron_amount
- if("uranium")
- amount = linked_lathe.uranium_amount
- if("diamond")
- amount = linked_lathe.diamond_amount
- else
- continue
+ for(var/M in linked_lathe.materials)
+ var/amount = linked_lathe.materials[M]
dat += "- [capitalize(M)]: [amount] cm3"
- if(amount >= sheetsize)
+ if(amount >= SHEET_MATERIAL_AMOUNT)
dat += " || Eject "
- for (var/C in list(1,3,5,10,15,20,25,30,40))
- if(amount < C * sheetsize)
+ for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
+ if(amount < C * SHEET_MATERIAL_AMOUNT)
break
dat += "[C > 1 ? ", " : ""][C] "
@@ -860,6 +735,24 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "(Purge)
"
dat += "Disposal All Chemicals in Storage "
+ if(3.4) // Protolathe queue
+ dat += "Main Menu || "
+ dat += "Protolathe Menu "
+ dat += "Queue
"
+ if(!linked_lathe.queue.len)
+ dat += "Empty"
+ else
+ var/tmp = 1
+ for(var/datum/design/D in linked_lathe.queue)
+ if(tmp == 1)
+ if(linked_lathe.busy)
+ dat += "1: [D.name] "
+ else
+ dat += "1: [D.name] (Awaiting materials) (Remove) "
+ else
+ dat += "[tmp]: [D.name] (Remove) "
+ ++tmp
+
///////////////////CIRCUIT IMPRINTER SCREENS////////////////////
if(4.0)
dat += "Main Menu "
@@ -867,6 +760,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(4.1)
dat += "Main Menu || "
+ dat += "View Queue || "
dat += "Material Storage || "
dat += "Chemical Storage "
dat += "Circuit Imprinter Menu:
"
@@ -877,29 +771,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!D.build_path || !(D.build_type & IMPRINTER))
continue
var/temp_dat
- var/check_materials = 1
for(var/M in D.materials)
temp_dat += ", [D.materials[M]*linked_imprinter.mat_efficiency] [CallMaterialName(M)]"
- if(copytext(M, 1, 2) == "$")
- switch(M)
- if("$glass")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.g_amount) check_materials = 0
- if("$gold")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.gold_amount) check_materials = 0
- if("$diamond")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.diamond_amount) check_materials = 0
- if("$uranium")
- if(D.materials[M]*linked_imprinter.mat_efficiency > linked_imprinter.uranium_amount) check_materials = 0
- else if (!linked_imprinter.reagents.has_reagent(M, D.materials[M]*linked_imprinter.mat_efficiency))
- check_materials = 0
+ for(var/T in D.chemicals)
+ temp_dat += ", [D.chemicals[T]*linked_imprinter.mat_efficiency] [CallReagentName(T)]"
if(temp_dat)
temp_dat = " \[[copytext(temp_dat,3)]\]"
- if (check_materials)
+ if(linked_imprinter.canBuild(D))
dat += " - [D.name][temp_dat]"
else
dat += "
- [D.name][temp_dat]"
- if(D.reliability < 100)
- dat += " (Reliability: [D.reliability])"
dat += "
"
if(4.2)
@@ -916,24 +797,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += "Circuit Imprinter Menu "
dat += "Material Storage
"
dat += ""
- for(var/M in list("glass", "gold", "diamond", "uranium"))
- var/amount
- var/sheetsize = 2000
- switch(M)
- if("glass")
- amount = linked_imprinter.g_amount
- sheetsize = 3750
- if("gold")
- amount = linked_imprinter.gold_amount
- if("diamond")
- amount = linked_imprinter.diamond_amount
- if("uranium")
- amount = linked_imprinter.uranium_amount
+ for(var/M in linked_imprinter.materials)
+ var/amount = linked_imprinter.materials[M]
dat += "- [capitalize(M)]: [amount] cm3"
- if(amount >= sheetsize)
+ if(amount >= SHEET_MATERIAL_AMOUNT)
dat += " || Eject: "
- for (var/C in list(1,3,5,10,15,20,25,30,40))
- if(amount < C * sheetsize)
+ for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
+ if(amount < C * SHEET_MATERIAL_AMOUNT)
break
dat += "[C > 1 ? ", " : ""][C] "
@@ -941,6 +811,21 @@ won't update every console in existence) but it's more of a hassle to do. Also,
dat += ""
dat += "
"
+ if(4.4)
+ dat += "Main Menu || "
+ dat += "Circuit Imprinter Menu "
+ dat += "Queue
"
+ if(linked_imprinter.queue.len == 0)
+ dat += "Empty"
+ else
+ var/tmp = 1
+ for(var/datum/design/D in linked_imprinter.queue)
+ if(tmp == 1)
+ dat += "1: [D.name] "
+ else
+ dat += "[tmp]: [D.name] (Remove) "
+ ++tmp
+
///////////////////Research Information Browser////////////////////
if(5.0)
dat += "Main Menu || "
diff --git a/code/modules/research/rdmachines.dm b/code/modules/research/rdmachines.dm
index 4f0b81e5315..3f73929aadd 100644
--- a/code/modules/research/rdmachines.dm
+++ b/code/modules/research/rdmachines.dm
@@ -2,7 +2,6 @@
//All devices that link into the R&D console fall into thise type for easy identification and some shared procs.
-
/obj/machinery/r_n_d
name = "R&D Device"
icon = 'icons/obj/machines/research.dmi'
@@ -10,83 +9,42 @@
anchored = 1
use_power = 1
var/busy = 0
- var/hacked = 0
- var/disabled = 0
- var/shocked = 0
- var/list/wires = list()
- var/hack_wire
- var/disable_wire
- var/shock_wire
var/obj/machinery/computer/rdconsole/linked_console
-/obj/machinery/r_n_d/New()
- ..()
- wires["Red"] = 0
- wires["Blue"] = 0
- wires["Green"] = 0
- wires["Yellow"] = 0
- wires["Black"] = 0
- wires["White"] = 0
- var/list/w = list("Red","Blue","Green","Yellow","Black","White")
- src.hack_wire = pick(w)
- w -= src.hack_wire
- src.shock_wire = pick(w)
- w -= src.shock_wire
- src.disable_wire = pick(w)
- w -= src.disable_wire
-
/obj/machinery/r_n_d/attack_hand(mob/user as mob)
- if (shocked)
- shock(user,50)
- if(panel_open)
- var/dat as text
- dat += "[src.name] Wires: "
- for(var/wire in src.wires)
- dat += text("[wire] Wire: [src.wires[wire] ? "Mend" : "Cut"] Pulse ")
-
- dat += text("The red light is [src.disabled ? "off" : "on"]. ")
- dat += text("The green light is [src.shocked ? "off" : "on"]. ")
- dat += text("The blue light is [src.hacked ? "off" : "on"]. ")
- user << browse("[src.name] Hacking[dat]","window=hack_win")
return
+/obj/machinery/r_n_d/proc/getMaterialType(var/name)
+ switch(name)
+ if("metal")
+ return /obj/item/stack/material/steel
+ if("glass")
+ return /obj/item/stack/material/glass
+ if("gold")
+ return /obj/item/stack/material/gold
+ if("silver")
+ return /obj/item/stack/material/silver
+ if("phoron")
+ return /obj/item/stack/material/phoron
+ if("uranium")
+ return /obj/item/stack/material/uranium
+ if("diamond")
+ return /obj/item/stack/material/diamond
+ return null
-/obj/machinery/r_n_d/Topic(href, href_list)
- if(..())
- return
- usr.set_machine(src)
- src.add_fingerprint(usr)
- if(href_list["pulse"])
- var/temp_wire = href_list["wire"]
- if (!istype(usr.get_active_hand(), /obj/item/device/multitool))
- usr << "You need a multitool!"
- else
- if(src.wires[temp_wire])
- usr << "You can't pulse a cut wire."
- else
- if(src.hack_wire == href_list["wire"])
- src.hacked = !src.hacked
- spawn(100) src.hacked = !src.hacked
- if(src.disable_wire == href_list["wire"])
- src.disabled = !src.disabled
- src.shock(usr,50)
- spawn(100) src.disabled = !src.disabled
- if(src.shock_wire == href_list["wire"])
- src.shocked = !src.shocked
- src.shock(usr,50)
- spawn(100) src.shocked = !src.shocked
- if(href_list["cut"])
- if (!istype(usr.get_active_hand(), /obj/item/weapon/wirecutters))
- usr << "You need wirecutters!"
- else
- var/temp_wire = href_list["wire"]
- wires[temp_wire] = !wires[temp_wire]
- if(src.hack_wire == temp_wire)
- src.hacked = !src.hacked
- if(src.disable_wire == temp_wire)
- src.disabled = !src.disabled
- src.shock(usr,50)
- if(src.shock_wire == temp_wire)
- src.shocked = !src.shocked
- src.shock(usr,50)
- src.updateUsrDialog()
+/obj/machinery/r_n_d/proc/getMaterialName(var/type)
+ switch(type)
+ if(/obj/item/stack/material/steel)
+ return "metal"
+ if(/obj/item/stack/material/glass)
+ return "glass"
+ if(/obj/item/stack/material/gold)
+ return "gold"
+ if(/obj/item/stack/material/silver)
+ return "silver"
+ if(/obj/item/stack/material/phoron)
+ return "phoron"
+ if(/obj/item/stack/material/uranium)
+ return "uranium"
+ if(/obj/item/stack/material/diamond)
+ return "diamond"
\ No newline at end of file
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 72127cfa89b..702b4d882f7 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -45,16 +45,13 @@ research holder datum.
***************************************************************/
/datum/research //Holder for all the existing, archived, and known tech. Individual to console.
-
- //Datum/tech go here.
- var/list/possible_tech = list() //List of all tech in the game that players have access to (barring special events).
- var/list/known_tech = list() //List of locally known tech.
- var/list/possible_designs = list() //List of all designs (at base reliability).
- var/list/known_designs = list() //List of available designs (at base reliability).
+ var/list/known_tech = list() //List of locally known tech. Datum/tech go here.
+ var/list/possible_designs = list() //List of all designs.
+ var/list/known_designs = list() //List of available designs.
/datum/research/New() //Insert techs into possible_tech here. Known_tech automatically updated.
for(var/T in typesof(/datum/tech) - /datum/tech)
- possible_tech += new T(src)
+ known_tech += new T(src)
for(var/D in typesof(/datum/design) - /datum/design)
possible_designs += new D(src)
RefreshResearch()
@@ -63,59 +60,26 @@ research holder datum.
/datum/research/techonly/New()
for(var/T in typesof(/datum/tech) - /datum/tech)
- possible_tech += new T(src)
+ known_tech += new T(src)
RefreshResearch()
-
-//Checks to see if tech has all the required pre-reqs.
-//Input: datum/tech; Output: 0/1 (false/true)
-/datum/research/proc/TechHasReqs(var/datum/tech/T)
- if(T.req_tech.len == 0)
- return 1
- var/matches = 0
- for(var/req in T.req_tech)
- for(var/datum/tech/known in known_tech)
- if((req == known.id) && (known.level >= T.req_tech[req]))
- matches++
- break
- if(matches == T.req_tech.len)
- return 1
- else
- return 0
-
//Checks to see if design has all the required pre-reqs.
//Input: datum/design; Output: 0/1 (false/true)
/datum/research/proc/DesignHasReqs(var/datum/design/D)
if(D.req_tech.len == 0)
return 1
- var/matches = 0
+
var/list/k_tech = list()
+
for(var/datum/tech/known in known_tech)
k_tech[known.id] = known.level
+
for(var/req in D.req_tech)
- if(!isnull(k_tech[req]) && k_tech[req] >= D.req_tech[req])
- matches++
- if(matches == D.req_tech.len)
- return 1
- else
- return 0
-/*
-//Checks to see if design has all the required pre-reqs.
-//Input: datum/design; Output: 0/1 (false/true)
-/datum/research/proc/DesignHasReqs(var/datum/design/D)
- if(D.req_tech.len == 0)
- return 1
- var/matches = 0
- for(var/req in D.req_tech)
- for(var/datum/tech/known in known_tech)
- if((req == known.id) && (known.level >= D.req_tech[req]))
- matches++
- break
- if(matches == D.req_tech.len)
- return 1
- else
- return 0
-*/
+ if(isnull(k_tech[req]) || k_tech[req] < D.req_tech[req])
+ return 0
+
+ return 1
+
//Adds a tech to known_tech list. Checks to make sure there aren't duplicates and updates existing tech's levels if needed.
//Input: datum/tech; Output: Null
/datum/research/proc/AddTech2Known(var/datum/tech/T)
@@ -124,143 +88,107 @@ research holder datum.
if(T.level > known.level)
known.level = T.level
return
- known_tech += T
return
/datum/research/proc/AddDesign2Known(var/datum/design/D)
- for(var/datum/design/known in known_designs)
- if(D.id == known.id)
- if(D.reliability_mod > known.reliability_mod)
- known.reliability_mod = D.reliability_mod
+ if(!known_designs.len) // Special case
+ known_designs.Add(D)
+ return
+ for(var/i = 1 to known_designs.len)
+ var/datum/design/A = known_designs[i]
+ if(A.id == D.id) // We are guaranteed to reach this if the ids are the same, because sort_string will also be the same
return
- known_designs += D
+ if(A.sort_string > D.sort_string)
+ known_designs.Insert(i, D)
+ return
+ known_designs.Add(D)
return
-//Refreshes known_tech and known_designs list. Then updates the reliability vars of the designs in the known_designs list.
+//Refreshes known_tech and known_designs list
//Input/Output: n/a
/datum/research/proc/RefreshResearch()
- for(var/datum/tech/PT in possible_tech)
- if(TechHasReqs(PT))
- AddTech2Known(PT)
for(var/datum/design/PD in possible_designs)
if(DesignHasReqs(PD))
AddDesign2Known(PD)
for(var/datum/tech/T in known_tech)
- T = between(1,T.level,20)
- for(var/datum/design/D in known_designs)
- D.CalcReliability(known_tech)
+ T = between(0, T.level, 20)
return
//Refreshes the levels of a given tech.
//Input: Tech's ID and Level; Output: null
/datum/research/proc/UpdateTech(var/ID, var/level)
for(var/datum/tech/KT in known_tech)
- if(KT.id == ID)
- if(KT.level <= level) KT.level = max((KT.level + 1), (level - 1))
+ if(KT.id == ID && KT.level <= level)
+ KT.level = max(KT.level + 1, level - 1)
return
-/datum/research/proc/UpdateDesign(var/path)
- for(var/datum/design/KD in known_designs)
- if(KD.build_path == path)
- KD.reliability_mod += rand(1,2)
- break
- return
-
-
-
-
/***************************************************************
** Technology Datums **
** Includes all the various technoliges and what they make. **
***************************************************************/
-datum/tech //Datum of individual technologies.
+/datum/tech //Datum of individual technologies.
var/name = "name" //Name of the technology.
var/desc = "description" //General description of what it does and what it makes.
var/id = "id" //An easily referenced ID. Must be alphanumeric, lower-case, and no symbols.
var/level = 1 //A simple number scale of the research level. Level 0 = Secret tech.
- var/list/req_tech = list() //List of ids associated values of techs required to research this tech. "id" = #
-
-//Trunk Technologies (don't require any other techs and you start knowning them).
-
-datum/tech/materials
+/datum/tech/materials
name = "Materials Research"
desc = "Development of new and improved materials."
- id = "materials"
+ id = TECH_MATERIAL
-datum/tech/engineering
+/datum/tech/engineering
name = "Engineering Research"
desc = "Development of new and improved engineering parts."
- id = "engineering"
+ id = TECH_ENGINERING
-datum/tech/phorontech
+/datum/tech/phorontech
name = "Phoron Research"
desc = "Research into the mysterious substance colloqually known as 'phoron'."
- id = "phorontech"
+ id = TECH_PHORON
-datum/tech/powerstorage
+/datum/tech/powerstorage
name = "Power Manipulation Technology"
desc = "The various technologies behind the storage and generation of electicity."
- id = "powerstorage"
+ id = TECH_POWER
-datum/tech/bluespace
+/datum/tech/bluespace
name = "'Blue-space' Research"
desc = "Research into the sub-reality known as 'blue-space'"
- id = "bluespace"
+ id = TECH_BLUESPACE
-datum/tech/biotech
+/datum/tech/biotech
name = "Biological Technology"
desc = "Research into the deeper mysteries of life and organic substances."
- id = "biotech"
+ id = TECH_BIO
-datum/tech/combat
+/datum/tech/combat
name = "Combat Systems Research"
desc = "The development of offensive and defensive systems."
- id = "combat"
+ id = TECH_COMBAT
-datum/tech/magnets
+/datum/tech/magnets
name = "Electromagnetic Spectrum Research"
desc = "Research into the electromagnetic spectrum. No clue how they actually work, though."
- id = "magnets"
+ id = TECH_MAGNET
-datum/tech/programming
+/datum/tech/programming
name = "Data Theory Research"
desc = "The development of new computer and artificial intelligence and data storage systems."
- id = "programming"
+ id = TECH_DATA
-datum/tech/syndicate
+/datum/tech/syndicate
name = "Illegal Technologies Research"
desc = "The study of technologies that violate standard Nanotrasen regulations."
- id = "syndicate"
+ id = TECH_ILLEGAL
+ level = 0
-/*
-datum/tech/arcane
+/datum/tech/arcane
name = "Arcane Research"
desc = "Research into the occult and arcane field for use in practical science"
- id = "arcane"
- level = 0 //It didn't become "secret" as advertised.
-
-//Branch Techs
-datum/tech/explosives
- name = "Explosives Research"
- desc = "The creation and application of explosive materials."
- id = "explosives"
- req_tech = list("materials" = 3)
-
-datum/tech/generators
- name = "Power Generation Technology"
- desc = "Research into more powerful and more reliable sources."
- id = "generators"
- req_tech = list("powerstorage" = 2)
-
-datum/tech/robotics
- name = "Robotics Technology"
- desc = "The development of advanced automated, autonomous machines."
- id = "robotics"
- req_tech = list("materials" = 3, "programming" = 3)
-*/
-
+ id = TECH_ARCANE
+ level = 0
/obj/item/weapon/disk/tech_disk
name = "technology disk"
@@ -269,12 +197,12 @@ datum/tech/robotics
icon_state = "datadisk2"
item_state = "card-id"
w_class = 2.0
- matter = list("metal" = 30, "glass" = 10)
+ matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10)
var/datum/tech/stored
/obj/item/weapon/disk/tech_disk/New()
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
+ pixel_x = rand(-5.0, 5)
+ pixel_y = rand(-5.0, 5)
/obj/item/weapon/disk/design_disk
name = "component design disk"
@@ -283,9 +211,9 @@ datum/tech/robotics
icon_state = "datadisk2"
item_state = "card-id"
w_class = 2.0
- matter = list("metal" = 30,"glass" = 10)
+ matter = list(DEFAULT_WALL_MATERIAL = 30, "glass" = 10)
var/datum/design/blueprint
/obj/item/weapon/disk/design_disk/New()
- src.pixel_x = rand(-5.0, 5)
- src.pixel_y = rand(-5.0, 5)
+ pixel_x = rand(-5.0, 5)
+ pixel_y = rand(-5.0, 5)
diff --git a/code/modules/research/server.dm b/code/modules/research/server.dm
index 62da7ef49bd..cca8f65b161 100644
--- a/code/modules/research/server.dm
+++ b/code/modules/research/server.dm
@@ -4,7 +4,7 @@
icon_state = "server"
var/datum/research/files
var/health = 100
- var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
+ var/list/id_with_upload = list() //List of R&D consoles with upload to server access.
var/list/id_with_download = list() //List of R&D consoles with download from server access.
var/id_with_upload_string = "" //String versions for easy editing in map editor.
var/id_with_download_string = ""
@@ -22,7 +22,7 @@
component_parts += new /obj/item/stack/cable_coil(src)
component_parts += new /obj/item/stack/cable_coil(src)
RefreshParts()
- src.initialize(); //Agouri
+ initialize();
/obj/machinery/r_n_d/server/Destroy()
griefProtection()
@@ -35,7 +35,8 @@
idle_power_usage /= max(1, tot_rating)
/obj/machinery/r_n_d/server/initialize()
- if(!files) files = new /datum/research(src)
+ if(!files)
+ files = new /datum/research(src)
var/list/temp_list
if(!id_with_upload.len)
temp_list = list()
@@ -74,23 +75,18 @@
griefProtection()
..()
-
/obj/machinery/r_n_d/server/emp_act(severity)
griefProtection()
..()
-
/obj/machinery/r_n_d/server/ex_act(severity)
griefProtection()
..()
-
/obj/machinery/r_n_d/server/blob_act()
griefProtection()
..()
-
-
//Backup files to centcomm to help admins recover data after greifer attacks
/obj/machinery/r_n_d/server/proc/griefProtection()
for(var/obj/machinery/r_n_d/server/centcom/C in machines)
@@ -101,10 +97,10 @@
C.files.RefreshResearch()
/obj/machinery/r_n_d/server/proc/produce_heat()
- if (!produces_heat)
+ if(!produces_heat)
return
- if (!use_power)
+ if(!use_power)
return
if(!(stat & (NOPOWER|BROKEN))) //Blatently stolen from telecoms
@@ -124,43 +120,12 @@
env.merge(removed)
/obj/machinery/r_n_d/server/attackby(var/obj/item/O as obj, var/mob/user as mob)
- if (disabled)
+ if(default_deconstruction_screwdriver(user, O))
return
- if (shocked)
- shock(user,50)
- if (istype(O, /obj/item/weapon/screwdriver))
- if (!panel_open)
- panel_open = 1
- icon_state = "server_o"
- user << "You open the maintenance hatch of [src]."
- else
- panel_open = 0
- icon_state = "server"
- user << "You close the maintenance hatch of [src]."
+ if(default_deconstruction_crowbar(user, O))
+ return
+ if(default_part_replacement(user, O))
return
- if (panel_open)
- if(istype(O, /obj/item/weapon/crowbar))
- griefProtection()
- playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1)
- var/obj/machinery/constructable_frame/machine_frame/M = new /obj/machinery/constructable_frame/machine_frame(src.loc)
- M.state = 2
- M.icon_state = "box_1"
- for(var/obj/I in component_parts)
- if(I.reliability != 100 && crit_fail)
- I.crit_fail = 1
- I.loc = src.loc
- qdel(src)
- return 1
-
-/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
- if (disabled)
- return
- if (shocked)
- shock(user,50)
- return
-
-
-
/obj/machinery/r_n_d/server/centcom
name = "Centcom Central R&D Database"
@@ -190,12 +155,12 @@
no_id_servers -= S
/obj/machinery/r_n_d/server/centcom/process()
- return PROCESS_KILL //don't need process()
-
+ return PROCESS_KILL //don't need process()
/obj/machinery/computer/rdservercontrol
name = "R&D Server Controller"
icon_state = "rdcomp"
+ light_color = "#a97faa"
circuit = /obj/item/weapon/circuitboard/rdservercontrol
var/screen = 0
var/obj/machinery/r_n_d/server/temp_server
@@ -209,8 +174,8 @@
add_fingerprint(usr)
usr.set_machine(src)
- if(!src.allowed(usr) && !emagged)
- usr << "\red You do not have the required access level"
+ if(!allowed(usr) && !emagged)
+ usr << "You do not have the required access level"
return
if(href_list["main"])
@@ -266,7 +231,6 @@
if(choice == "Continue")
for(var/datum/design/D in temp_server.files.known_designs)
if(D.id == href_list["reset_design"])
- D.reliability_mod = 0
temp_server.files.known_designs -= D
break
temp_server.files.RefreshResearch()
@@ -343,16 +307,14 @@
src.updateUsrDialog()
return ..()
-
/obj/machinery/r_n_d/server/robotics
name = "Robotics R&D Server"
id_with_upload_string = "1;2"
id_with_download_string = "1;2"
server_id = 2
-
/obj/machinery/r_n_d/server/core
name = "Core R&D Server"
id_with_upload_string = "1"
id_with_download_string = "1"
- server_id = 1
\ No newline at end of file
+ server_id = 1
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
index 44f257060af..081683b0443 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_crystal.dm
@@ -20,17 +20,17 @@
/obj/structure/crystal/Destroy()
src.visible_message("\red[src] shatters!")
if(prob(75))
- new /obj/item/weapon/shard/phoron(src.loc)
+ new /obj/item/weapon/material/shard/phoron(src.loc)
if(prob(50))
- new /obj/item/weapon/shard/phoron(src.loc)
+ new /obj/item/weapon/material/shard/phoron(src.loc)
if(prob(25))
- new /obj/item/weapon/shard/phoron(src.loc)
+ new /obj/item/weapon/material/shard/phoron(src.loc)
if(prob(75))
- new /obj/item/weapon/shard(src.loc)
+ new /obj/item/weapon/material/shard(src.loc)
if(prob(50))
- new /obj/item/weapon/shard(src.loc)
+ new /obj/item/weapon/material/shard(src.loc)
if(prob(25))
- new /obj/item/weapon/shard(src.loc)
+ new /obj/item/weapon/material/shard(src.loc)
..()
//todo: laser_act
diff --git a/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm b/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm
index 7617468b414..66b5f7dc7df 100644
--- a/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm
+++ b/code/modules/research/xenoarchaeology/artifact/artifact_replicator.dm
@@ -43,23 +43,22 @@
/obj/item/weapon/autopsy_scanner,\
/obj/item/weapon/bikehorn,\
/obj/item/weapon/bonesetter,\
- /obj/item/weapon/butch,\
+ /obj/item/weapon/material/knife/butch,\
/obj/item/weapon/caution,\
/obj/item/weapon/caution/cone,\
/obj/item/weapon/crowbar,\
/obj/item/weapon/clipboard,\
/obj/item/weapon/cell,\
/obj/item/weapon/circular_saw,\
- /obj/item/weapon/hatchet,\
+ /obj/item/weapon/material/hatchet,\
/obj/item/weapon/handcuffs,\
/obj/item/weapon/hemostat,\
- /obj/item/weapon/kitchenknife,\
+ /obj/item/weapon/material/knife,\
/obj/item/weapon/flame/lighter,\
/obj/item/weapon/light/bulb,\
/obj/item/weapon/light/tube,\
/obj/item/weapon/pickaxe,\
/obj/item/weapon/shovel,\
- /obj/item/weapon/table_parts,\
/obj/item/weapon/weldingtool,\
/obj/item/weapon/wirecutters,\
/obj/item/weapon/wrench,\
diff --git a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm
index b8d1c9a87cd..6f6d7f88f35 100644
--- a/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm
+++ b/code/modules/research/xenoarchaeology/artifact/effects/unknown_effect_teleport.dm
@@ -34,7 +34,7 @@
sparks.set_up(3, 0, get_turf(M))
sparks.start()
//
- M.loc = pick(orange(get_turf(T), 50))
+ M.Move(pick(trange(50, get_turf(holder))))
sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(3, 0, get_turf(M))
sparks.start()
diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm
index eae7b0afc0b..7556369b11e 100644
--- a/code/modules/research/xenoarchaeology/chemistry.dm
+++ b/code/modules/research/xenoarchaeology/chemistry.dm
@@ -1,74 +1,5 @@
//chemistry stuff here so that it can be easily viewed/modified
-datum
- reagent
- tungsten
- name = "Tungsten"
- id = "tungsten"
- description = "A chemical element, and a strong oxidising agent."
- reagent_state = SOLID
- color = "#DCDCDC" // rgb: 220, 220, 220, silver
-
- lithiumsodiumtungstate
- name = "Lithium Sodium Tungstate"
- id = "lithiumsodiumtungstate"
- description = "A reducing agent for geological compounds."
- reagent_state = LIQUID
- color = "#C0C0C0" // rgb: 192, 192, 192, darker silver
-
- ground_rock
- name = "Ground Rock"
- id = "ground_rock"
- description = "A fine dust made of ground up rock."
- reagent_state = SOLID
- color = "#A0522D" //rgb: 160, 82, 45, brown
-
- density_separated_sample
- name = "Density separated sample"
- id = "density_separated_sample"
- description = "A watery paste used in chemical analysis, there are some chunks floating in it."
- reagent_state = LIQUID
- color = "#DEB887" //rgb: 222, 184, 135, light brown
-
- analysis_sample
- name = "Analysis liquid"
- id = "analysis_sample"
- description = "A watery paste used in chemical analysis."
- reagent_state = LIQUID
- color = "#F5FFFA" //rgb: 245, 255, 250, almost white
-
- chemical_waste
- name = "Chemical Waste"
- id = "chemical_waste"
- description = "A viscous, toxic liquid left over from many chemical processes."
- reagent_state = LIQUID
- color = "#ADFF2F" //rgb: 173, 255, 47, toxic green
-
-datum
- chemical_reaction
- lithiumsodiumtungstate //LiNa2WO4, not the easiest chem to mix
- name = "Lithium Sodium Tungstate"
- id = "lithiumsodiumtungstate"
- result = "lithiumsodiumtungstate"
- required_reagents = list("lithium" = 1, "sodium" = 2, "tungsten" = 1, "oxygen" = 4)
- result_amount = 8
-
- density_separated_liquid
- name = "Density separated sample"
- id = "density_separated_sample"
- result = "density_separated_sample"
- secondary_results = list("chemical_waste" = 1)
- required_reagents = list("ground_rock" = 1, "lithiumsodiumtungstate" = 2)
- result_amount = 2
-
- analysis_liquid
- name = "Analysis sample"
- id = "analysis_sample"
- result = "analysis_sample"
- secondary_results = list("chemical_waste" = 1)
- required_reagents = list("density_separated_sample" = 5)
- result_amount = 4
- requires_heating = 1
/obj/item/weapon/reagent_containers/glass/solution_tray
name = "solution tray"
diff --git a/code/modules/research/xenoarchaeology/finds/finds.dm b/code/modules/research/xenoarchaeology/finds/finds.dm
index 521da5e4aad..33cb2d52ff4 100644
--- a/code/modules/research/xenoarchaeology/finds/finds.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds.dm
@@ -30,7 +30,7 @@
icon_state = "strange"
var/obj/item/weapon/inside
var/method = 0// 0 = fire, 1 = brush, 2 = pick
- origin_tech = "materials=5"
+ origin_tech = list(TECH_MATERIAL = 5)
/obj/item/weapon/ore/strangerock/New(loc, var/inside_item_type = 0)
..(loc)
@@ -101,7 +101,7 @@
var/apply_prefix = 1
if(prob(40))
material_descriptor = pick("rusted ","dusty ","archaic ","fragile ")
- source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium")
+ source_material = pick("cordite","quadrinium",DEFAULT_WALL_MATERIAL,"titanium","aluminium","ferritic-alloy","plasteel","duranium")
var/talkative = 0
if(prob(5))
@@ -136,11 +136,11 @@
if(3)
item_type = "[pick("fork","spoon","knife")]"
if(prob(25))
- new_item = new /obj/item/weapon/kitchen/utensil/fork(src.loc)
+ new_item = new /obj/item/weapon/material/kitchen/utensil/fork(src.loc)
else if(prob(50))
- new_item = new /obj/item/weapon/kitchen/utensil/knife(src.loc)
+ new_item = new /obj/item/weapon/material/kitchen/utensil/knife(src.loc)
else
- new_item = new /obj/item/weapon/kitchen/utensil/spoon(src.loc)
+ new_item = new /obj/item/weapon/material/kitchen/utensil/spoon(src.loc)
additional_desc = "[pick("It's like no [item_type] you've ever seen before",\
"It's a mystery how anyone is supposed to eat with this",\
"You wonder what the creator's mouth was shaped like")]."
@@ -167,7 +167,7 @@
"You wonder what kind of music was made with it")]."
if(6)
item_type = "[pick("bladed knife","serrated blade","sharp cutting implement")]"
- new_item = new /obj/item/weapon/kitchenknife(src.loc)
+ new_item = new /obj/item/weapon/material/knife(src.loc)
additional_desc = "[pick("It doesn't look safe.",\
"It looks wickedly jagged",\
"There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along the edges")]."
@@ -191,7 +191,7 @@
if(9)
item_type = "[pick("wicked","evil","byzantine","dangerous")] looking [pick("device","contraption","thing","trap")]"
apply_prefix = 0
- new_item = new /obj/item/weapon/legcuffs/beartrap(src.loc)
+ new_item = new /obj/item/weapon/beartrap(src.loc)
additional_desc = "[pick("It looks like it could take a limb off",\
"Could be some kind of animal trap",\
"There appear to be [pick("dark red","dark purple","dark green","dark blue")] stains along part of it")]."
@@ -236,16 +236,16 @@
if(14)
apply_material_decorations = 0
var/list/possible_spawns = list()
- possible_spawns += /obj/item/stack/sheet/metal
- possible_spawns += /obj/item/stack/sheet/plasteel
- possible_spawns += /obj/item/stack/sheet/glass
- possible_spawns += /obj/item/stack/sheet/glass/reinforced
- possible_spawns += /obj/item/stack/sheet/mineral/phoron
- possible_spawns += /obj/item/stack/sheet/mineral/gold
- possible_spawns += /obj/item/stack/sheet/mineral/silver
- possible_spawns += /obj/item/stack/sheet/mineral/enruranium
- possible_spawns += /obj/item/stack/sheet/mineral/sandstone
- possible_spawns += /obj/item/stack/sheet/mineral/silver
+ possible_spawns += /obj/item/stack/material/steel
+ possible_spawns += /obj/item/stack/material/plasteel
+ possible_spawns += /obj/item/stack/material/glass
+ possible_spawns += /obj/item/stack/material/glass/reinforced
+ possible_spawns += /obj/item/stack/material/phoron
+ possible_spawns += /obj/item/stack/material/gold
+ possible_spawns += /obj/item/stack/material/silver
+ possible_spawns += /obj/item/stack/material/uranium
+ possible_spawns += /obj/item/stack/material/sandstone
+ possible_spawns += /obj/item/stack/material/silver
var/new_type = pick(possible_spawns)
new_item = new new_type(src.loc)
@@ -254,7 +254,7 @@
if(prob(75))
new_item = new /obj/item/weapon/pen(src.loc)
else
- new_item = new /obj/item/weapon/pen/sleepypen(src.loc)
+ new_item = new /obj/item/weapon/pen/reagent/sleepy(src.loc)
if(prob(30))
apply_image_decorations = 1
if(16)
@@ -294,7 +294,7 @@
new_item.desc = ""
if(19)
apply_prefix = 0
- new_item = new /obj/item/weapon/claymore(src.loc)
+ new_item = new /obj/item/weapon/material/sword(src.loc)
new_item.force = 10
item_type = new_item.name
if(20)
@@ -315,9 +315,9 @@
apply_material_decorations = 0
if(22)
if(prob(50))
- new_item = new /obj/item/weapon/shard(src.loc)
+ new_item = new /obj/item/weapon/material/shard(src.loc)
else
- new_item = new /obj/item/weapon/shard/phoron(src.loc)
+ new_item = new /obj/item/weapon/material/shard/phoron(src.loc)
apply_prefix = 0
apply_image_decorations = 0
apply_material_decorations = 0
@@ -337,7 +337,7 @@
apply_material_decorations = 0
if(25)
apply_prefix = 0
- new_item = new /obj/item/weapon/katana(src.loc)
+ new_item = new /obj/item/weapon/material/sword/katana(src.loc)
new_item.force = 10
item_type = new_item.name
if(26)
@@ -490,7 +490,7 @@
new_item = new /obj/item/clothing/mask/gas(src.loc)
var/decorations = ""
if(apply_material_decorations)
- source_material = pick("cordite","quadrinium","steel","titanium","aluminium","ferritic-alloy","plasteel","duranium")
+ source_material = pick("cordite","quadrinium",DEFAULT_WALL_MATERIAL,"titanium","aluminium","ferritic-alloy","plasteel","duranium")
desc = "A [material_descriptor ? "[material_descriptor] " : ""][item_type] made of [source_material], all craftsmanship is of [pick("the lowest","low","average","high","the highest")] quality."
var/list/descriptors = list()
diff --git a/code/modules/research/xenoarchaeology/finds/finds_misc.dm b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
index 8b7dd3fdfac..f494505b63f 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_misc.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_misc.dm
@@ -1,46 +1,5 @@
-/obj/item/weapon/shard/phoron
- name = "phoron shard"
- desc = "A shard of phoron glass. Considerably tougher then normal glass shards. Apparently not tough enough to be a window."
- force = 8.0
- throwforce = 15.0
- icon_state = "phoronlarge"
- sharp = 1
- edge = 1
-
-/obj/item/weapon/shard/phoron/New()
-
- src.icon_state = pick("phoronlarge", "phoronmedium", "phoronsmall")
- switch(src.icon_state)
- if("phoronsmall")
- src.pixel_x = rand(-12, 12)
- src.pixel_y = rand(-12, 12)
- if("phoronmedium")
- src.pixel_x = rand(-8, 8)
- src.pixel_y = rand(-8, 8)
- if("phoronlarge")
- src.pixel_x = rand(-5, 5)
- src.pixel_y = rand(-5, 5)
- else
- return
-
-/obj/item/weapon/shard/phoron/attackby(obj/item/weapon/W as obj, mob/user as mob)
- ..()
- if ( istype(W, /obj/item/weapon/weldingtool))
- var/obj/item/weapon/weldingtool/WT = W
- if(WT.remove_fuel(0, user))
- var/obj/item/stack/sheet/glass/phoronglass/NG = new (user.loc)
- for (var/obj/item/stack/sheet/glass/phoronglass/G in user.loc)
- if(G==NG)
- continue
- if(G.amount>=G.max_amount)
- continue
- G.attackby(NG, user)
- usr << "You add the newly-formed phoron glass to the stack. It now contains [NG.amount] sheets."
- //SN src = null
- qdel(src)
- return
- return ..()
+// Phoron shards have been moved to code/game/objects/items/weapons/shards.dm
//legacy crystal
/obj/machinery/crystal
diff --git a/code/modules/research/xenoarchaeology/finds/finds_special.dm b/code/modules/research/xenoarchaeology/finds/finds_special.dm
index b2c0fb38986..af73f541d60 100644
--- a/code/modules/research/xenoarchaeology/finds/finds_special.dm
+++ b/code/modules/research/xenoarchaeology/finds/finds_special.dm
@@ -127,7 +127,7 @@
playsound(src.loc, pick('sound/hallucinations/wail.ogg','sound/hallucinations/veryfar_noise.ogg','sound/hallucinations/far_noise.ogg'), 50, 1, -3)
nearby_mobs.Add(M)
- var/target = pick("chest","groin","head","l_arm","r_arm","r_leg","l_leg","l_hand","r_hand","l_foot","r_foot")
+ var/target = pick(M.organs_by_name)
M.apply_damage(rand(5, 10), BRUTE, target)
M << "\red The skin on your [parse_zone(target)] feels like it's ripping apart, and a stream of blood flies out."
var/obj/effect/decal/cleanable/blood/splatter/animated/B = new(M.loc)
diff --git a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm b/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
deleted file mode 100644
index 14b84fd805c..00000000000
--- a/code/modules/research/xenoarchaeology/genetics/prehistoric_animals.dm
+++ /dev/null
@@ -1,77 +0,0 @@
-/mob/living/simple_animal/hostile/samak
- name = "samak"
- desc = "A fast, armoured predator accustomed to hiding and ambushing in cold terrain."
- faction = "samak"
- icon_state = "samak"
- icon_living = "samak"
- icon_dead = "samak_dead"
- icon = 'icons/jungle.dmi'
- move_to_delay = 2
- maxHealth = 125
- health = 125
- speed = 2
- melee_damage_lower = 5
- melee_damage_upper = 15
- attacktext = "mauled"
- cold_damage_per_tick = 0
- speak_chance = 5
- speak = list("Hruuugh!","Hrunnph")
- emote_see = list("paws the ground","shakes its mane","stomps")
- emote_hear = list("snuffles")
-
-/mob/living/simple_animal/hostile/diyaab
- name = "diyaab"
- desc = "A small pack animal. Although omnivorous, it will hunt meat on occasion."
- faction = "diyaab"
- icon_state = "diyaab"
- icon_living = "diyaab"
- icon_dead = "diyaab_dead"
- icon = 'icons/jungle.dmi'
- move_to_delay = 1
- maxHealth = 25
- health = 25
- speed = 1
- melee_damage_lower = 1
- melee_damage_upper = 8
- attacktext = "gouged"
- cold_damage_per_tick = 0
- speak_chance = 5
- speak = list("Awrr?","Aowrl!","Worrl")
- emote_see = list("sniffs the air cautiously","looks around")
- emote_hear = list("snuffles")
-
-/mob/living/simple_animal/hostile/shantak
- name = "shantak"
- desc = "A piglike creature with a bright iridiscent mane that sparkles as though lit by an inner light. Don't be fooled by its beauty though."
- faction = "shantak"
- icon_state = "shantak"
- icon_living = "shantak"
- icon_dead = "shantak_dead"
- icon = 'icons/jungle.dmi'
- move_to_delay = 1
- maxHealth = 75
- health = 75
- speed = 1
- melee_damage_lower = 3
- melee_damage_upper = 12
- attacktext = "gouged"
- cold_damage_per_tick = 0
- speak_chance = 5
- speak = list("Shuhn","Shrunnph?","Shunpf")
- emote_see = list("scratches the ground","shakes out it's mane","tinkles gently")
-
-/mob/living/simple_animal/yithian
- name = "yithian"
- desc = "A friendly creature vaguely resembling an oversized snail without a shell."
- icon_state = "yithian"
- icon_living = "yithian"
- icon_dead = "yithian_dead"
- icon = 'icons/jungle.dmi'
-
-/mob/living/simple_animal/tindalos
- name = "tindalos"
- desc = "It looks like a large, flightless grasshopper."
- icon_state = "tindalos"
- icon_living = "tindalos"
- icon_dead = "tindalos_dead"
- icon = 'icons/jungle.dmi'
diff --git a/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm b/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm
deleted file mode 100644
index 284f2cc0e68..00000000000
--- a/code/modules/research/xenoarchaeology/genetics/reconstitutor.dm
+++ /dev/null
@@ -1,321 +0,0 @@
-//gene sequence datum
-datum/genesequence
- var/spawned_type
- var/spawned_type_text
- var/list/full_genome_sequence = list()
-
-
-
-#define SCANFOSSIL_RETVAL_WRONGTYPE 1
-#define SCANFOSSIL_RETVAL_NOMOREGENESEQ 2
-#define SCANFOSSIL_RETVAL_SUCCESS 4
-
-/obj/machinery/computer/reconstitutor
- name = "Flora reconstitution console"
- icon = 'icons/obj/computer.dmi'
- icon_state = "dna"
- circuit = "/obj/item/weapon/circuitboard/reconstitutor"
- req_access = list(access_heads) //Only used for record deletion right now.
- var/obj/machinery/clonepod/pod1 = 1 //Linked cloning pod.
- var/temp = ""
- var/menu = 1 //Which menu screen to display
- var/list/records = list()
- var/datum/dna2/record/active_record = null
- var/obj/item/weapon/disk/data/diskette = null //Mostly so the geneticist can steal everything.
- var/loading = 0 // Nice loading text
- var/list/undiscovered_genesequences = null
- var/list/discovered_genesequences = list()
- var/list/completed_genesequences = list()
- var/list/undiscovered_genomes = list()
- var/list/manually_placed_genomes = list()
- var/list/discovered_genomes = list("! Clear !")
- var/list/accepted_fossil_types = list(/obj/item/weapon/fossil/plant)
-
-
-/obj/machinery/computer/reconstitutor/initialize()
- spawn(50)
- if(!undiscovered_genesequences)
- undiscovered_genesequences = master_controller.all_plant_genesequences.Copy()
- ..()
-
-/obj/machinery/computer/reconstitutor/animal
- name = "Fauna reconstitution console"
- accepted_fossil_types = list(/obj/item/weapon/fossil/bone,/obj/item/weapon/fossil/shell,/obj/item/weapon/fossil/skull)
- pod1 = null
- circuit = "/obj/item/weapon/circuitboard/reconstitutor/animal"
-
-/obj/machinery/computer/reconstitutor/animal/initialize()
- spawn(50)
- undiscovered_genesequences = master_controller.all_animal_genesequences.Copy()
- ..()
-
-/obj/machinery/computer/reconstitutor/attackby(obj/item/W, mob/user)
- if(istype(W,/obj/item/weapon/fossil))
- user.drop_item()
- W.loc = src.loc
- switch(scan_fossil(W))
- if(1)
- src.visible_message("\red \icon[src] [src] scans the fossil and rejects it.")
- if(2)
- visible_message("\red \icon[src] [src] can not extract any more genetic data from new fossils.")
- if(4)
- src.visible_message("\blue \icon[src] [user] inserts [W] into [src], the fossil is consumed as [src] extracts genetic data from it.")
- qdel(W)
- updateDialog()
- else if (istype(W, /obj/item/weapon/storage))
- var/obj/item/weapon/storage/S = W
- S.hide_from(usr)
- var/numaccepted = 0
- var/numrejected = 0
- var/full = 0
- for(var/obj/item/weapon/fossil/F in S.contents)
- switch(scan_fossil(F))
- if(SCANFOSSIL_RETVAL_WRONGTYPE)
- numrejected += 1
- if(SCANFOSSIL_RETVAL_NOMOREGENESEQ)
- full = 1
- if(SCANFOSSIL_RETVAL_SUCCESS)
- numaccepted += 1
- S.remove_from_storage(F, src) //This will move the item to this item's contents
- qdel(F)
- updateDialog()
-
- user.visible_message("[user] empties all the fossils from [S] into [src].", "\blue You empty all the fossils from [S] into [src].", "You hear the sound of rocks being poured into a container")
-
- var/outmsg = ""
- if(numaccepted)
- outmsg += " \blue[numaccepted] fossils were accepted and consumed as [src] extracts genetic data from them."
- if(numrejected)
- outmsg += " \red[numrejected] fossils were rejected."
- if(full)
- outmsg += " \red[src] can not extract any more genetic data from new fossils."
- user << outmsg
-
- else
- ..()
-
-/obj/machinery/computer/reconstitutor/attack_hand(var/mob/user as mob)
- src.add_fingerprint(user)
- interact(user)
-
-/obj/machinery/computer/reconstitutor/interact(mob/user)
- if(stat & (NOPOWER|BROKEN) || get_dist(src, user) > 1)
- user.unset_machine(src)
- return
-
- var/dat = "Garland Corp genetic reconstitutor "
- dat += " "
- if(!pod1)
- pod1 = locate() in orange(1, src)
-
- if(!pod1)
- dat += "Unable to locate cloning pod. "
- else if(istype(pod1))
- dat += "Cloning pod connected. "
-
- dat += ""
- dat += ""
- dat += "| GENE1 | "
- dat += "GENE2 | "
- dat += "GENE3 | "
- dat += "GENE4 | "
- dat += "GENE5 | "
- dat += "GENE6 | "
- dat += "GENE7 | "
- dat += " | "
- dat += " | "
- dat += " "
-
- //WIP gene sequences
- for(var/sequence_num = 1, sequence_num <= discovered_genesequences.len, sequence_num += 1)
- var/datum/genesequence/cur_genesequence = discovered_genesequences[sequence_num]
- dat += ""
- var/num_correct = 0
- for(var/curindex = 1, curindex <= 7, curindex++)
- var/bgcolour = "#ffffff"//white ffffff, red ff0000
-
- //background colour hints at correct positioning
- if(manually_placed_genomes[sequence_num][curindex])
- //green background if slot is correctly filled
- if(manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex])
- bgcolour = "#008000"
- num_correct += 1
- if(num_correct == 7)
- discovered_genesequences -= cur_genesequence
- completed_genesequences += cur_genesequence
- manually_placed_genomes[sequence_num] = new/list(7)
- interact(user)
- return
- //yellow background if adjacent to correct slot
- if(curindex > 1 && manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex - 1])
- bgcolour = "#ffff00"
- else if(curindex < 7 && manually_placed_genomes[sequence_num][curindex] == cur_genesequence.full_genome_sequence[curindex + 1])
- bgcolour = "#ffff00"
-
- var/this_genome_slot = manually_placed_genomes[sequence_num][curindex]
- if(!this_genome_slot)
- this_genome_slot = "- - - - -"
- dat += "| [this_genome_slot] | "
- dat += "Reset | "
- //dat += "Clone | "
- dat += " "
-
- //completed gene sequences
- for(var/sequence_num = 1, sequence_num <= completed_genesequences.len, sequence_num += 1)
- var/datum/genesequence/cur_genesequence = completed_genesequences[sequence_num]
- dat += ""
- for(var/curindex = 1, curindex <= 7, curindex++)
- var/this_genome_slot = cur_genesequence.full_genome_sequence[curindex]
- dat += "| [this_genome_slot] | "
- dat += "Wipe | "
- dat += "Clone | "
- dat += " "
-
- dat += " "
-
- dat += " "
- dat += " "
- dat += "Close"
- user << browse(dat, "window=reconstitutor;size=600x500")
- user.set_machine(src)
- onclose(user, "reconstitutor")
-
-/obj/machinery/computer/reconstitutor/animal/Topic(href, href_list)
- if(..()) return 1
- if(href_list["clone"])
- var/sequence_num = text2num(href_list["sequence_num"])
- var/datum/genesequence/cloned_genesequence = completed_genesequences[sequence_num]
- if(pod1)
- if(pod1.occupant)
- visible_message("\red \icon[src] The cloning pod is currently occupied.")
- else if(pod1.biomass < CLONE_BIOMASS)
- visible_message("\red \icon[src] Not enough biomass in the cloning pod.")
- else if(pod1.mess)
- visible_message("\red \icon[src] Error: clonepod malfunction.")
- else
- visible_message("\blue \icon[src] [src] clones something from a reconstituted gene sequence!")
- playsound(src.loc, 'sound/effects/screech.ogg', 50, 1, -3)
- pod1.occupant = new cloned_genesequence.spawned_type(pod1)
- pod1.locked = 1
- pod1.icon_state = "pod_1"
- //pod1.occupant.name = "[pod1.occupant.name] ([rand(0,999)])"
- pod1.biomass -= CLONE_BIOMASS
- else
- usr << "\red \icon[src] Unable to locate cloning pod!"
-
-/obj/machinery/computer/reconstitutor/Topic(href, href_list)
- if(..()) return 1
- if(href_list["insertpos"])
- //world << "inserting gene for genesequence [href_list["insertgenome"]] at pos [text2num(href_list["insertpos"])]"
- var/sequence_num = text2num(href_list["sequence_num"])
- var/insertpos = text2num(href_list["insertpos"])
-
- var/old_genome = manually_placed_genomes[sequence_num][insertpos]
- discovered_genomes = sortList(discovered_genomes)
- var/new_genome = input(usr, "Which genome do you want to insert here?") as null|anything in discovered_genomes
- if(new_genome == "! Clear !")
- manually_placed_genomes[sequence_num][insertpos] = null
- else if(new_genome)
- manually_placed_genomes[sequence_num][insertpos] = new_genome
- discovered_genomes.Remove(new_genome)
- if(old_genome)
- discovered_genomes.Add(old_genome)
- updateDialog()
-
- else if(href_list["reset"])
- var/sequence_num = text2num(href_list["sequence_num"])
- for(var/curindex = 1, curindex <= 7, curindex++)
- var/old_genome = manually_placed_genomes[sequence_num][curindex]
- manually_placed_genomes[sequence_num][curindex] = null
- if(old_genome)
- discovered_genomes.Add(old_genome)
- updateDialog()
-
- else if(href_list["wipe"])
- var/sequence_num = text2num(href_list["sequence_num"])
- var/datum/genesequence/wiped_genesequence = completed_genesequences[sequence_num]
- completed_genesequences.Remove(wiped_genesequence)
- discovered_genesequences.Add(wiped_genesequence)
-
- discovered_genomes.Add(wiped_genesequence.full_genome_sequence)
- discovered_genomes = sortList(discovered_genomes)
- updateDialog()
-
- else if(href_list["clone"])
- var/sequence_num = text2num(href_list["sequence_num"])
- var/datum/genesequence/cloned_genesequence = completed_genesequences[sequence_num]
- visible_message("\blue \icon[src] [src] clones a packet of seeds from a reconstituted gene sequence!")
- playsound(src.loc, 'sound/effects/screech.ogg', 50, 1, -3)
- new cloned_genesequence.spawned_type(src.loc)
-
- else if(href_list["close"])
- usr.unset_machine(src)
- usr << browse(null, "window=reconstitutor")
-
-/obj/machinery/computer/reconstitutor/proc/scan_fossil(var/obj/item/weapon/fossil/scan_fossil)
- //see whether we accept these kind of fossils
- if(accepted_fossil_types.len && !accepted_fossil_types.Find(scan_fossil.type))
- return SCANFOSSIL_RETVAL_WRONGTYPE
-
- //see whether we are going to discover a new sequence, new genome for existing sequence or nothing
- var/new_genome_prob = discovered_genesequences.len * 50
-
- if( (new_genome_prob >= 100 || prob(new_genome_prob)) && undiscovered_genomes.len)
- //create a new genome for an existing gene sequence
- var/newly_discovered_genome = pick(undiscovered_genomes)
- undiscovered_genomes -= newly_discovered_genome
- discovered_genomes.Add(newly_discovered_genome)
-
- //chance to discover a second genome
- if(prob(75))
- newly_discovered_genome = pick(undiscovered_genomes)
- undiscovered_genomes -= newly_discovered_genome
- discovered_genomes.Add(newly_discovered_genome)
- //chance to discover a third genome
- if(prob(50))
- newly_discovered_genome = pick(undiscovered_genomes)
- undiscovered_genomes -= newly_discovered_genome
- discovered_genomes.Add(newly_discovered_genome)
-
- else if(undiscovered_genesequences.len)
- //discover new gene sequence
- var/datum/genesequence/newly_discovered_genesequence = pick(undiscovered_genesequences)
- undiscovered_genesequences -= newly_discovered_genesequence
- discovered_genesequences += newly_discovered_genesequence
- //add genomes for new gene sequence to pool of discoverable genomes
- undiscovered_genomes.Add(newly_discovered_genesequence.full_genome_sequence)
- manually_placed_genomes.Add(null)
- manually_placed_genomes[manually_placed_genomes.len] = new/list(7)
-
- else
- //there's no point scanning any more fossils, we've already discovered everything
- return SCANFOSSIL_RETVAL_NOMOREGENESEQ
-
- return SCANFOSSIL_RETVAL_SUCCESS
-
-#undef SCANFOSSIL_RETVAL_WRONGTYPE
-#undef SCANFOSSIL_RETVAL_NOMOREGENESEQ
-#undef SCANFOSSIL_RETVAL_SUCCESS
-
-
-/obj/item/weapon/circuitboard/reconstitutor
- name = "Circuit board (Flora Reconstitution Console)"
- build_path = "/obj/machinery/computer/reconstitutor"
- origin_tech = "programming=2;biotech=4;materials=6"
- frame_desc = "Requires 2 Advanced Scanning Module, 1 Nano Manipulator, 1 Matter Bin and 1 Advanced Capacitor."
- req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module/adv" = 2,
- "/obj/item/weapon/stock_parts/manipulator/nano" = 1,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor/adv" = 1)
-
-/obj/item/weapon/circuitboard/reconstitutor/animal
- name = "Circuit board (Fauna Reconstitution Console)"
- build_path = "/obj/machinery/computer/reconstitutor/animal"
- origin_tech = "programming=2;biotech=4;materials=6"
- frame_desc = "Requires 2 Advanced Scanning Module, 1 Nano Manipulator, 1 Matter Bin and 1 Advanced Capacitor."
- req_components = list(
- "/obj/item/weapon/stock_parts/scanning_module/adv" = 2,
- "/obj/item/weapon/stock_parts/manipulator/nano" = 1,
- "/obj/item/weapon/stock_parts/matter_bin" = 1,
- "/obj/item/weapon/stock_parts/capacitor/adv" = 1)
diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm
index 689f61b888f..535a0b4f073 100644
--- a/code/modules/research/xenoarchaeology/geosample.dm
+++ b/code/modules/research/xenoarchaeology/geosample.dm
@@ -61,44 +61,19 @@
age = rand(1,999)
if(container.mineral)
- switch(container.mineral.name)
- if("Uranium")
- age_million = rand(1, 704)
- age_thousand = rand(1,999)
- find_presence["potassium"] = rand(1,1000) / 100
- source_mineral = "potassium"
- if("Iron")
- age_thousand = rand(1, 999)
- age_million = rand(1, 999)
- find_presence["iron"] = rand(1,1000) / 100
- source_mineral = "iron"
- if("Diamond")
- age_thousand = rand(1,999)
- age_million = rand(1,999)
- find_presence["nitrogen"] = rand(1,1000) / 100
- source_mineral = "nitrogen"
- if("Gold")
- age_thousand = rand(1,999)
- age_million = rand(1,999)
- age_billion = rand(3,4)
- find_presence["iron"] = rand(1,1000) / 100
- source_mineral = "iron"
- if("Silver")
- age_thousand = rand(1,999)
- age_million = rand(1,999)
- find_presence["iron"] = rand(1,1000) / 100
- source_mineral = "iron"
- if("Phoron")
- age_thousand = rand(1,999)
- age_million = rand(1,999)
- age_billion = rand(10, 13)
- find_presence["phoron"] = rand(1,1000) / 100
- source_mineral = "phoron"
- if("Clown")
- age = rand(-1,-999) //thats the joke
- age_thousand = rand(-1,-999)
- find_presence["phoron"] = rand(1,1000) / 100
- source_mineral = "phoron"
+ if(islist(container.mineral.xarch_ages))
+ var/list/ages = container.mineral.xarch_ages
+ if(ages["thousand"])
+ age_thousand = rand(1,ages["thousand"])
+ if(ages["million"])
+ age_million = rand(1,ages["million"])
+ if(ages["billion"])
+ if(ages["billion_lower"])
+ age_billion = rand(ages["billion_lower"],ages["billion"])
+ else
+ age_billion = rand(1,ages["billion"])
+ if(container.mineral.xarch_source_mineral)
+ source_mineral = container.mineral.xarch_source_mineral
if(prob(75))
find_presence["phosphorus"] = rand(1,500) / 100
diff --git a/code/modules/research/xenoarchaeology/machinery/coolant.dm b/code/modules/research/xenoarchaeology/machinery/coolant.dm
index a1690aa83ea..ccd8293ed02 100644
--- a/code/modules/research/xenoarchaeology/machinery/coolant.dm
+++ b/code/modules/research/xenoarchaeology/machinery/coolant.dm
@@ -1,20 +1,3 @@
-
-datum/reagent/coolant
- name = "Coolant"
- id = "coolant"
- description = "Industrial cooling substance."
- reagent_state = LIQUID
- color = "#C8A5DC" // rgb: 200, 165, 220
-
-datum/chemical_reaction/coolant
- name = "Coolant"
- id = "coolant"
- result = "coolant"
- required_reagents = list("tungsten" = 1, "oxygen" = 1, "water" = 1)
- result_amount = 3
-
-
-
/obj/structure/reagent_dispensers/coolanttank
name = "coolant tank"
desc = "A tank of industrial coolant"
diff --git a/code/modules/research/xenoarchaeology/master_controller.dm b/code/modules/research/xenoarchaeology/master_controller.dm
index fa09ca64709..332b1ce06ae 100644
--- a/code/modules/research/xenoarchaeology/master_controller.dm
+++ b/code/modules/research/xenoarchaeology/master_controller.dm
@@ -1,37 +1,8 @@
/datum/controller/game_controller
- var/list/all_animal_genesequences = list()
- var/list/all_plant_genesequences = list()
- var/list/genome_prefixes = null
var/list/artifact_spawning_turfs = list()
var/list/digsite_spawning_turfs = list()
- var/list/spawn_types_animal = list("/mob/living/carbon/slime",\
- "/mob/living/simple_animal/hostile/alien",\
- "/mob/living/simple_animal/hostile/alien/drone",\
- "/mob/living/simple_animal/hostile/alien/sentinel",\
- "/mob/living/simple_animal/hostile/giant_spider",\
- "/mob/living/simple_animal/hostile/giant_spider/hunter",\
- "/mob/living/simple_animal/hostile/giant_spider/nurse",\
- "/mob/living/simple_animal/hostile/creature",\
- "/mob/living/simple_animal/hostile/samak",\
- "/mob/living/simple_animal/hostile/diyaab",\
- "/mob/living/simple_animal/hostile/shantak",\
- "/mob/living/simple_animal/tindalos",\
- "/mob/living/simple_animal/yithian")
-
- var/list/spawn_types_plant = list("/obj/item/seeds/walkingmushroommycelium",\
- "/obj/item/seeds/killertomatoseed",\
- "/obj/item/seeds/shandseed",
- "/obj/item/seeds/mtearseed",
- "/obj/item/seeds/thaadra",\
- "/obj/item/seeds/telriis",\
- "/obj/item/seeds/jurlmah",\
- "/obj/item/seeds/amauri",\
- "/obj/item/seeds/gelthi",\
- "/obj/item/seeds/vale",\
- "/obj/item/seeds/surik")
-
#define XENOARCH_SPAWN_CHANCE 0.5
#define DIGSITESIZE_LOWER 4
#define DIGSITESIZE_UPPER 12
@@ -104,40 +75,6 @@ datum/controller/game_controller/proc/SetupXenoarch()
var/turf/simulated/mineral/artifact_turf = pop(artifacts_spawnturf_temp)
artifact_turf.artifact_find = new()
- //make sure we have some prefixes for the gene sequences
- if(!genome_prefixes)
- genome_prefixes = alphabet_uppercase.Copy()
- if(!genome_prefixes.len)
- qdel(genome_prefixes)
- genome_prefixes = alphabet_uppercase.Copy()
-
- //create animal gene sequences
- while(spawn_types_animal.len && genome_prefixes.len)
- var/datum/genesequence/new_sequence = new/datum/genesequence()
- new_sequence.spawned_type_text = pick(spawn_types_animal)
- new_sequence.spawned_type = text2path(new_sequence.spawned_type_text)
- spawn_types_animal -= new_sequence.spawned_type_text
-
- var/prefixletter = pick(genome_prefixes)
- genome_prefixes -= prefixletter
- while(new_sequence.full_genome_sequence.len < 7)
- new_sequence.full_genome_sequence.Add("[prefixletter][pick(alphabet_uppercase)][pick(alphabet_uppercase)][pick(1,2,3,4,5,6,7,8,9,0)][pick(1,2,3,4,5,6,7,8,9,0)]")
-
- all_animal_genesequences.Add(new_sequence)
-
- //create plant gene sequences
- while(spawn_types_plant.len && genome_prefixes.len)
- var/datum/genesequence/new_sequence = new/datum/genesequence()
- new_sequence.spawned_type = pick(spawn_types_plant)
- spawn_types_plant -= new_sequence.spawned_type_text
-
- var/prefixletter = pick(genome_prefixes)
- genome_prefixes -= prefixletter
- while(new_sequence.full_genome_sequence.len < 7)
- new_sequence.full_genome_sequence.Add("[prefixletter][pick(1,2,3,4,5,6,7,8,9,0)][pick(1,2,3,4,5,6,7,8,9,0)][pick(alphabet_uppercase)][pick(alphabet_uppercase)]")
-
- all_plant_genesequences.Add(new_sequence)
-
#undef XENOARCH_SPAWN_CHANCE
#undef DIGSITESIZE_LOWER
#undef DIGSITESIZE_UPPER
diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm
index c66e57f3de3..b2d8cef42c8 100644
--- a/code/modules/research/xenoarchaeology/misc.dm
+++ b/code/modules/research/xenoarchaeology/misc.dm
@@ -73,7 +73,7 @@
..()
sleep(2)
new /obj/item/clothing/under/rank/scientist(src)
- new /obj/item/clothing/suit/storage/labcoat(src)
+ new /obj/item/clothing/suit/storage/toggle/labcoat(src)
new /obj/item/clothing/shoes/white(src)
new /obj/item/clothing/glasses/science(src)
new /obj/item/device/radio/headset/headset_sci(src)
diff --git a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
index b14c892cd03..7450dd06032 100644
--- a/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
+++ b/code/modules/research/xenoarchaeology/tools/suspension_generator.dm
@@ -159,7 +159,7 @@
else if(cell)
cell.loc = loc
cell.add_fingerprint(user)
- cell.updateicon()
+ cell.update_icon()
icon_state = "suspension0"
cell = null
diff --git a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
index 1762cfbb0dc..e8bedc09878 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_pickaxe.dm
@@ -107,7 +107,7 @@
icon_state = "excavation"
desc = "A set of picks for excavation."
item_state = "syringe_kit"
- foldable = /obj/item/stack/sheet/cardboard //BubbleWrap
+ foldable = /obj/item/stack/material/cardboard //BubbleWrap
storage_slots = 7
w_class = 2
can_hold = list(/obj/item/weapon/pickaxe/brush,\
diff --git a/code/modules/shieldgen/emergency_shield.dm b/code/modules/shieldgen/emergency_shield.dm
index 2400070ba3a..15bfa973ed8 100644
--- a/code/modules/shieldgen/emergency_shield.dm
+++ b/code/modules/shieldgen/emergency_shield.dm
@@ -12,6 +12,21 @@
var/shield_generate_power = 7500 //how much power we use when regenerating
var/shield_idle_power = 1500 //how much power we use when just being sustained.
+/obj/machinery/shield/malfai
+ name = "emergency forcefield"
+ desc = "A weak forcefield which seems to be projected by the station's emergency atmosphere containment field"
+ health = max_health/2 // Half health, it's not suposed to resist much.
+
+/obj/machinery/shield/malfai/process()
+ health -= 0.5 // Slowly lose integrity over time
+ check_failure()
+
+/obj/machinery/shield/proc/check_failure()
+ if (src.health <= 0)
+ visible_message("\The [src] dissipates!")
+ qdel(src)
+ return
+
/obj/machinery/shield/New()
src.set_dir(pick(1,2,3,4))
..()
@@ -38,12 +53,7 @@
//Play a fitting sound
playsound(src.loc, 'sound/effects/EMPulse.ogg', 75, 1)
-
- if (src.health <= 0)
- visible_message("\blue The [src] dissipates!")
- qdel(src)
- return
-
+ check_failure()
opacity = 1
spawn(20) if(src) opacity = 0
@@ -51,12 +61,7 @@
/obj/machinery/shield/meteorhit()
src.health -= max_health*0.75 //3/4 health as damage
-
- if(src.health <= 0)
- visible_message("\blue The [src] dissipates!")
- qdel(src)
- return
-
+ check_failure()
opacity = 1
spawn(20) if(src) opacity = 0
return
@@ -64,10 +69,7 @@
/obj/machinery/shield/bullet_act(var/obj/item/projectile/Proj)
health -= Proj.damage
..()
- if(health <=0)
- visible_message("\blue The [src] dissipates!")
- qdel(src)
- return
+ check_failure()
opacity = 1
spawn(20) if(src) opacity = 0
@@ -98,7 +100,7 @@
/obj/machinery/shield/hitby(AM as mob|obj)
//Let everyone know we've been hit!
- visible_message("\red [src] was hit by [AM].")
+ visible_message("\[src] was hit by [AM].")
//Super realistic, resource-intensive, real-time damage calculations.
var/tforce = 0
@@ -112,11 +114,7 @@
//This seemed to be the best sound for hitting a force field.
playsound(src.loc, 'sound/effects/EMPulse.ogg', 100, 1)
- //Handle the destruction of the shield
- if (src.health <= 0)
- visible_message("\blue The [src] dissipates!")
- qdel(src)
- return
+ check_failure()
//The shield becomes dense to absorb the blow.. purely asthetic.
opacity = 1
@@ -124,9 +122,6 @@
..()
return
-
-
-
/obj/machinery/shieldgen
name = "Emergency shield projector"
desc = "Used to seal minor hull breaches."
diff --git a/code/modules/shieldgen/sheldwallgen.dm b/code/modules/shieldgen/sheldwallgen.dm
index d20e2743fdf..7ca422bed4e 100644
--- a/code/modules/shieldgen/sheldwallgen.dm
+++ b/code/modules/shieldgen/sheldwallgen.dm
@@ -228,7 +228,7 @@
anchored = 1
density = 1
unacidable = 1
- luminosity = 3
+ light_range = 3
var/needs_power = 0
var/active = 1
// var/power = 10
diff --git a/code/modules/shieldgen/shield_gen.dm b/code/modules/shieldgen/shield_gen.dm
index 9f89ede0394..544998ce615 100644
--- a/code/modules/shieldgen/shield_gen.dm
+++ b/code/modules/shieldgen/shield_gen.dm
@@ -214,7 +214,7 @@
for(var/turf/O in covered_turfs)
var/obj/effect/energy_field/E = new(O)
field.Add(E)
- qdel(covered_turfs)
+ covered_turfs = null
for(var/mob/M in view(5,src))
M << "\icon[src] You hear heavy droning start up."
diff --git a/code/modules/shuttles/shuttle_emergency.dm b/code/modules/shuttles/shuttle_emergency.dm
index 5215400a4e1..ea572e8fb43 100644
--- a/code/modules/shuttles/shuttle_emergency.dm
+++ b/code/modules/shuttles/shuttle_emergency.dm
@@ -62,7 +62,11 @@
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
if (emergency_shuttle.autopilot)
emergency_shuttle.autopilot = 0
- world << "\blue Alert: The shuttle autopilot has been overridden. Launch sequence initiated!"
+ world << "Alert: The shuttle autopilot has been overridden. Launch sequence initiated!"
+
+ if(usr)
+ log_admin("[key_name(usr)] has overridden the shuttle autopilot and activated launch sequence")
+ message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and activated launch sequence")
..(user)
@@ -72,7 +76,11 @@
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
if (emergency_shuttle.autopilot)
emergency_shuttle.autopilot = 0
- world << "\blue Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!"
+ world << "Alert: The shuttle autopilot has been overridden. Bluespace drive engaged!"
+
+ if(usr)
+ log_admin("[key_name(usr)] has overridden the shuttle autopilot and forced immediate launch")
+ message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and forced immediate launch")
..(user)
@@ -82,7 +90,11 @@
if (istype(user, /obj/machinery/computer/shuttle_control/emergency)) //if we were given a command by an emergency shuttle console
if (emergency_shuttle.autopilot)
emergency_shuttle.autopilot = 0
- world << "\blue Alert: The shuttle autopilot has been overridden. Launch sequence aborted!"
+ world << "Alert: The shuttle autopilot has been overridden. Launch sequence aborted!"
+
+ if(usr)
+ log_admin("[key_name(usr)] has overridden the shuttle autopilot and cancelled launch sequence")
+ message_admins("[key_name_admin(usr)] has overridden the shuttle autopilot and cancelled launch sequence")
..(user)
@@ -102,8 +114,8 @@
authorized = initial(authorized)
//returns 1 if the ID was accepted and a new authorization was added, 0 otherwise
-/obj/machinery/computer/shuttle_control/emergency/proc/read_authorization(var/ident)
- if (!ident)
+/obj/machinery/computer/shuttle_control/emergency/proc/read_authorization(var/obj/item/ident)
+ if (!ident || !istype(ident))
return 0
if (authorized.len >= req_authorizations)
return 0 //don't need any more
@@ -112,33 +124,35 @@
var/auth_name
var/dna_hash
- if(istype(ident, /obj/item/weapon/card/id))
- var/obj/item/weapon/card/id/ID = ident
- access = ID.access
- auth_name = "[ID.registered_name] ([ID.assignment])"
- dna_hash = ID.dna_hash
+ var/obj/item/weapon/card/id/ID = ident.GetID()
- if(istype(ident, /obj/item/device/pda))
- var/obj/item/device/pda/PDA = ident
- access = PDA.id.access
- auth_name = "[PDA.id.registered_name] ([PDA.id.assignment])"
- dna_hash = PDA.id.dna_hash
+ if(!ID)
+ return
+
+ access = ID.access
+ auth_name = "[ID.registered_name] ([ID.assignment])"
+ dna_hash = ID.dna_hash
if (!access || !istype(access))
return 0 //not an ID
if (dna_hash in authorized)
- src.visible_message("[src] buzzes. That ID has already been scanned.")
+ src.visible_message("\The [src] buzzes. That ID has already been scanned.")
return 0
if (!(access_heads in access))
- src.visible_message("[src] buzzes, rejecting [ident].")
+ src.visible_message("\The [src] buzzes, rejecting [ident].")
return 0
- src.visible_message("[src] beeps as it scans [ident].")
+ src.visible_message("\The [src] beeps as it scans [ident].")
authorized[dna_hash] = auth_name
if (req_authorizations - authorized.len)
- world << "\blue Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot."
+ world << "Alert: [req_authorizations - authorized.len] authorization\s needed to override the shuttle autopilot."
+
+ if(usr)
+ log_admin("[key_name(usr)] has inserted [ID] into the shuttle control computer - [req_authorizations - authorized.len] authorisation\s needed")
+ message_admins("[key_name_admin(usr)] has inserted [ID] into the shuttle control computer - [req_authorizations - authorized.len] authorisation\s needed")
+
return 1
@@ -146,7 +160,7 @@
/obj/machinery/computer/shuttle_control/emergency/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/card/emag) && !emagged)
- user << "\blue You short out the [src]'s authorization protocols."
+ user << "You short out \the [src]'s authorization protocols."
emagged = 1
return
diff --git a/code/modules/spells/aoe_turf/conjure/construct.dm b/code/modules/spells/aoe_turf/conjure/construct.dm
index d5a2de92e2f..e33d1f2b3cb 100644
--- a/code/modules/spells/aoe_turf/conjure/construct.dm
+++ b/code/modules/spells/aoe_turf/conjure/construct.dm
@@ -130,8 +130,8 @@
name = "Juggerwall"
icon = 'icons/effects/effects.dmi'
icon_state = "m_shield_cult"
- l_color = "#B40000"
- luminosity = 2
+ light_color = "#B40000"
+ light_range = 2
/obj/effect/forcefield/cult/cultify()
return
diff --git a/code/modules/spells/artifacts.dm b/code/modules/spells/artifacts.dm
index 0a96b6aa2ea..9790dc3dbe7 100644
--- a/code/modules/spells/artifacts.dm
+++ b/code/modules/spells/artifacts.dm
@@ -13,7 +13,11 @@
hitsound = 'sound/items/welder2.ogg'
/obj/item/weapon/scrying/attack_self(mob/user as mob)
+ if((user.mind && !wizards.is_antagonist(user.mind)))
+ user << "You stare into the orb and see nothing but your own reflection."
+ return
+
user << "You can see... everything!"
- visible_message("[usr] stares into [src], their eyes glazing over.")
+ visible_message("[user] stares into [src], their eyes glazing over.")
announce_ghost_joinleave(user.ghostize(1), 1, "You feel that they used a powerful artifact to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place with their presence.")
return
diff --git a/code/modules/spells/spellbook.dm b/code/modules/spells/spellbook.dm
index 169d7509448..0c13e4ac93a 100644
--- a/code/modules/spells/spellbook.dm
+++ b/code/modules/spells/spellbook.dm
@@ -14,6 +14,10 @@
/obj/item/weapon/spellbook/attack_self(mob/user = usr)
if(!user)
return
+ if((user.mind && !wizards.is_antagonist(user.mind)))
+ usr << "You stare at the book but cannot make sense of the markings!"
+ return
+
user.set_machine(src)
var/dat
if(temp)
diff --git a/code/modules/supermatter/supermatter.dm b/code/modules/supermatter/supermatter.dm
index e9a23bb23b0..c08f85b2982 100644
--- a/code/modules/supermatter/supermatter.dm
+++ b/code/modules/supermatter/supermatter.dm
@@ -37,7 +37,7 @@
icon_state = "darkmatter"
density = 1
anchored = 0
- luminosity = 4
+ light_range = 4
var/gasefficency = 0.25
@@ -54,7 +54,7 @@
var/emergency_alert = "CRYSTAL DELAMINATION IMMINENT."
var/explosion_point = 1000
- l_color = "#8A8A00"
+ light_color = "#8A8A00"
var/warning_color = "#B8B800"
var/emergency_color = "#D9D900"
@@ -117,17 +117,20 @@
//Changes color and luminosity of the light to these values if they were not already set
/obj/machinery/power/supermatter/proc/shift_light(var/lum, var/clr)
- if(l_color != clr)
- l_color = clr
- if(luminosity != lum)
- SetLuminosity(lum)
+ if(lum != light_range || clr != light_color)
+ set_light(lum, l_color = clr)
-/obj/machinery/power/supermatter/proc/announce_warning()
+/obj/machinery/power/supermatter/proc/get_integrity()
var/integrity = damage / explosion_point
integrity = round(100 - integrity * 100)
integrity = integrity < 0 ? 0 : integrity
+ return integrity
+
+
+/obj/machinery/power/supermatter/proc/announce_warning()
+ var/integrity = get_integrity()
var/alert_msg = " Integrity at [integrity]%"
-
+
if(damage > emergency_point)
alert_msg = emergency_alert + alert_msg
lastwarning = world.timeofday - WARNING_DELAY * 4
@@ -150,7 +153,20 @@
else if(safe_warned && public_alert)
radio.autosay(alert_msg, "Supermatter Monitor")
public_alert = 0
+
+
+/obj/machinery/power/supermatter/get_transit_zlevel()
+ //don't send it back to the station -- most of the time
+ if(prob(99))
+ var/list/candidates = accessible_z_levels.Copy()
+ for(var/zlevel in config.station_levels)
+ candidates.Remove("[zlevel]")
+ candidates.Remove("[src.z]")
+ if(candidates.len)
+ return text2num(pickweight(candidates))
+
+ return ..()
/obj/machinery/power/supermatter/process()
@@ -174,7 +190,7 @@
if(!istype(L, /turf/space) && (world.timeofday - lastwarning) >= WARNING_DELAY * 10)
announce_warning()
else
- shift_light(4,initial(l_color))
+ shift_light(4,initial(light_color))
if(grav_pulling)
supermatter_pull()
@@ -269,11 +285,11 @@
if(Adjacent(user))
return attack_hand(user)
else
- user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update."
+ ui_interact(user)
return
/obj/machinery/power/supermatter/attack_ai(mob/user as mob)
- user << "You attempt to interface with the control circuits but find they are not connected to your network. Maybe in a future firmware update."
+ ui_interact(user)
/obj/machinery/power/supermatter/attack_hand(mob/user as mob)
user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\
@@ -282,6 +298,31 @@
Consume(user)
+// This is purely informational UI that may be accessed by AIs or robots
+/obj/machinery/power/supermatter/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/data[0]
+
+ data["integrity_percentage"] = round(get_integrity())
+ var/datum/gas_mixture/env = null
+ if(!istype(src.loc, /turf/space))
+ env = src.loc.return_air()
+
+ if(!env)
+ data["ambient_temp"] = 0
+ data["ambient_pressure"] = 0
+ else
+ data["ambient_temp"] = round(env.temperature)
+ data["ambient_pressure"] = round(env.return_pressure())
+ data["detonating"] = grav_pulling
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if (!ui)
+ ui = new(user, src, ui_key, "supermatter_crystal.tmpl", "Supermatter Crystal", 500, 300)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+
/*
/obj/machinery/power/supermatter/proc/transfer_energy()
for(var/obj/machinery/power/rad_collector/R in rad_collectors)
diff --git a/code/modules/surgery/bones.dm b/code/modules/surgery/bones.dm
index b2ccbb10032..25addbd40a4 100644
--- a/code/modules/surgery/bones.dm
+++ b/code/modules/surgery/bones.dm
@@ -18,7 +18,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.open >= 2 && affected.stage == 0
+ return affected && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 0
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -52,7 +52,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.name != "head" && affected.open >= 2 && affected.stage == 1
+ return affected && affected.name != "head" && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
@@ -91,7 +91,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.name == "head" && affected.open >= 2 && affected.stage == 1
+ return affected && affected.name == "head" && !(affected.status & ORGAN_ROBOT) && affected.open >= 2 && affected.stage == 1
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
user.visible_message("[user] is beginning to piece together [target]'s skull with \the [tool]." , \
@@ -127,7 +127,7 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.open >= 2 && affected.stage == 2
+ return affected && affected.open >= 2 && !(affected.status & ORGAN_ROBOT) && affected.stage == 2
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/brainrepair.dm b/code/modules/surgery/brainrepair.dm
deleted file mode 100644
index 60fdffe31d2..00000000000
--- a/code/modules/surgery/brainrepair.dm
+++ /dev/null
@@ -1,70 +0,0 @@
-//////////////////////////////////////////////////////////////////
-// BRAIN DAMAGE FIXING //
-//////////////////////////////////////////////////////////////////
-
-/datum/surgery_step/brain/bone_chips
- allowed_tools = list(
- /obj/item/weapon/hemostat = 100, \
- /obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
- )
-
- priority = 3
- min_duration = 80
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!affected) return
- var/obj/item/organ/brain/sponge = target.internal_organs_by_name["brain"]
- return (sponge && sponge.damage > 0 && sponge.damage <= 20) && affected.open == 3
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts taking bone chips out of [target]'s brain with \the [tool].", \
- "You start taking bone chips out of [target]'s brain with \the [tool].")
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] takes out all the bone chips in [target]'s brain with \the [tool].", \
- "\blue You take out all the bone chips in [target]'s brain with \the [tool].")
- var/obj/item/organ/brain/sponge = target.internal_organs_by_name["brain"]
- if (sponge)
- sponge.damage = 0
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\red [user]'s hand slips, jabbing \the [tool] in [target]'s brain!", \
- "\red Your hand slips, jabbing \the [tool] in [target]'s brain!")
- target.apply_damage(30, BRUTE, "head", 1, sharp=1)
-
-/datum/surgery_step/brain/hematoma
- allowed_tools = list(
- /obj/item/weapon/FixOVein = 100, \
- /obj/item/stack/cable_coil = 75
- )
-
- priority = 3
- min_duration = 90
- max_duration = 110
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!affected) return
- var/obj/item/organ/brain/sponge = target.internal_organs_by_name["brain"]
- return (sponge && sponge.damage > 20) && affected.open == 3
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts mending hematoma in [target]'s brain with \the [tool].", \
- "You start mending hematoma in [target]'s brain with \the [tool].")
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] mends hematoma in [target]'s brain with \the [tool].", \
- "\blue You mend hematoma in [target]'s brain with \the [tool].")
- var/obj/item/organ/brain/sponge = target.internal_organs_by_name["brain"]
- if (sponge)
- sponge.damage = 20
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\red [user]'s hand slips, bruising [target]'s brain with \the [tool]!", \
- "\red Your hand slips, bruising [target]'s brain with \the [tool]!")
- target.apply_damage(20, BRUTE, "head", 1, sharp=1)
\ No newline at end of file
diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm
index fedf5bbc1c0..1744cec3d7e 100644
--- a/code/modules/surgery/encased.dm
+++ b/code/modules/surgery/encased.dm
@@ -12,13 +12,13 @@
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- return affected && affected.encased && affected.open >= 2
+ return affected && !(affected.status & ORGAN_ROBOT) && affected.encased && affected.open >= 2
/datum/surgery_step/open_encased/saw
allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
- /obj/item/weapon/hatchet = 75
+ /obj/item/weapon/material/hatchet = 75
)
min_duration = 50
diff --git a/code/modules/surgery/eye.dm b/code/modules/surgery/eye.dm
deleted file mode 100644
index edc1c54c679..00000000000
--- a/code/modules/surgery/eye.dm
+++ /dev/null
@@ -1,147 +0,0 @@
-//Procedures in this file: Eye mending surgery
-//////////////////////////////////////////////////////////////////
-// EYE SURGERY //
-//////////////////////////////////////////////////////////////////
-
-/datum/surgery_step/eye
- priority = 2
- can_infect = 1
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if (!hasorgans(target))
- return 0
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if (!affected)
- return 0
-
- var/obj/item/organ/eyes = target.internal_organs_by_name["eyes"]
-
- return target_zone == "eyes" && eyes
-
-/datum/surgery_step/eye/cut_open
- allowed_tools = list(
- /obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
- )
-
- min_duration = 90
- max_duration = 110
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..()
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts to separate the corneas on [target]'s eyes with \the [tool].", \
- "You start to separate the corneas on [target]'s eyes with \the [tool].")
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] has separated the corneas on [target]'s eyes with \the [tool]." , \
- "\blue You have separated the corneas on [target]'s eyes with \the [tool].",)
- target.op_stage.eyes = 1
- target.blinded += 1.5
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, slicing [target]'s eyes wth \the [tool]!" , \
- "\red Your hand slips, slicing [target]'s eyes wth \the [tool]!" )
- affected.createwound(CUT, 10)
- eyes.take_damage(5, 0)
-
-/datum/surgery_step/eye/lift_eyes
- allowed_tools = list(
- /obj/item/weapon/retractor = 100, \
- /obj/item/weapon/kitchen/utensil/fork = 50
- )
-
- min_duration = 30
- max_duration = 40
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..() && target.op_stage.eyes == 1
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts lifting corneas from [target]'s eyes with \the [tool].", \
- "You start lifting corneas from [target]'s eyes with \the [tool].")
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] has lifted the corneas from [target]'s eyes from with \the [tool]." , \
- "\blue You has lifted the corneas from [target]'s eyes from with \the [tool]." )
- target.op_stage.eyes = 2
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, damaging [target]'s eyes with \the [tool]!", \
- "\red Your hand slips, damaging [target]'s eyes with \the [tool]!")
- target.apply_damage(10, BRUTE, affected)
- eyes.take_damage(5, 0)
-
-/datum/surgery_step/eye/mend_eyes
- allowed_tools = list(
- /obj/item/weapon/hemostat = 100, \
- /obj/item/stack/cable_coil = 75, \
- /obj/item/device/assembly/mousetrap = 10 //I don't know. Don't ask me. But I'm leaving it because hilarity.
- )
-
- min_duration = 80
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..() && target.op_stage.eyes == 2
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts mending the nerves and lenses in [target]'s eyes with \the [tool].", \
- "You start mending the nerves and lenses in [target]'s eyes with the [tool].")
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] mends the nerves and lenses in [target]'s with \the [tool]." , \
- "\blue You mend the nerves and lenses in [target]'s with \the [tool].")
- target.op_stage.eyes = 3
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, stabbing \the [tool] into [target]'s eye!", \
- "\red Your hand slips, stabbing \the [tool] into [target]'s eye!")
- target.apply_damage(10, BRUTE, affected, sharp=1)
- eyes.take_damage(5, 0)
-
-/datum/surgery_step/eye/cauterize
- allowed_tools = list(
- /obj/item/weapon/cautery = 100, \
- /obj/item/clothing/mask/smokable/cigarette = 75, \
- /obj/item/weapon/flame/lighter = 50, \
- /obj/item/weapon/weldingtool = 25
- )
-
- min_duration = 70
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- return ..()
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] is beginning to cauterize the incision around [target]'s eyes with \the [tool]." , \
- "You are beginning to cauterize the incision around [target]'s eyes with \the [tool].")
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
- user.visible_message("\blue [user] cauterizes the incision around [target]'s eyes with \the [tool].", \
- "\blue You cauterize the incision around [target]'s eyes with \the [tool].")
- if (target.op_stage.eyes == 3)
- target.disabilities &= ~NEARSIGHTED
- target.sdisabilities &= ~BLIND
- eyes.damage = 0
- target.op_stage.eyes = 0
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/eyes/eyes = target.internal_organs_by_name["eyes"]
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, searing [target]'s eyes with \the [tool]!", \
- "\red Your hand slips, searing [target]'s eyes with \the [tool]!")
- target.apply_damage(5, BURN, affected)
- eyes.take_damage(5, 0)
\ No newline at end of file
diff --git a/code/modules/surgery/face.dm b/code/modules/surgery/face.dm
index e25291eba54..7272ecf49e0 100644
--- a/code/modules/surgery/face.dm
+++ b/code/modules/surgery/face.dm
@@ -10,15 +10,15 @@
if (!hasorgans(target))
return 0
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if (!affected)
+ if (!affected || (affected.status & ORGAN_ROBOT))
return 0
return target_zone == "mouth"
/datum/surgery_step/generic/cut_face
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
min_duration = 90
@@ -76,7 +76,7 @@
allowed_tools = list(
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 55, \
- /obj/item/weapon/kitchen/utensil/fork = 75)
+ /obj/item/weapon/material/kitchen/utensil/fork = 75)
min_duration = 80
max_duration = 100
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index f6352f6b742..20bf10bd002 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -17,8 +17,6 @@
return 0
if (affected.status & ORGAN_DESTROYED)
return 0
- if (target_zone == "head" && target.species && (target.species.flags & IS_SYNTHETIC))
- return 1
if (affected.status & ORGAN_ROBOT)
return 0
return 1
@@ -110,8 +108,8 @@
/datum/surgery_step/generic/cut_open
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
min_duration = 90
@@ -185,7 +183,7 @@
allowed_tools = list(
/obj/item/weapon/retractor = 100, \
/obj/item/weapon/crowbar = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 50
+ /obj/item/weapon/material/kitchen/utensil/fork = 50
)
min_duration = 30
@@ -276,7 +274,7 @@
/datum/surgery_step/generic/amputate
allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
- /obj/item/weapon/hatchet = 75
+ /obj/item/weapon/material/hatchet = 75
)
min_duration = 110
diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm
deleted file mode 100644
index ad47b144293..00000000000
--- a/code/modules/surgery/headreattach.dm
+++ /dev/null
@@ -1,33 +0,0 @@
-//This is an uguu head restoration surgery TOTALLY not yoinked from chinsky's limb reattacher
-/datum/surgery_step/attach_head/
- priority = 3 // Must be higher than /datum/surgery_step/internal
- allowed_tools = list(/obj/item/organ/external/head = 100)
- can_infect = 0
-
- min_duration = 80
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/head = target.get_organ(target_zone)
- return isnull(head) && target_zone == "head" && !isnull(target.species.has_limbs["head"])
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts attaching [tool] to [target]'s neck.", \
- "You start attaching [tool] to [target]'s neck.")
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\blue [user] has attached [target]'s head to the body.", \
- "\blue You have attached [target]'s head to the body.")
- var/obj/item/organ/external/head = tool
- user.drop_from_inventory(head)
- head.replaced(target)
- head.loc = target
- head.status = 0
- target.update_body()
- target.updatehealth()
- target.UpdateDamageIcon()
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\red [user]'s hand slips, damaging [target]'s neck!", \
- "\red Your hand slips, damaging [target]'s neck!")
- target.apply_damage(10, BRUTE, null, sharp=1)
diff --git a/code/modules/surgery/implant.dm b/code/modules/surgery/implant.dm
index df394fcd433..62cf65b2ce9 100644
--- a/code/modules/surgery/implant.dm
+++ b/code/modules/surgery/implant.dm
@@ -16,9 +16,9 @@
switch (affected.name)
if ("head")
return 1
- if ("chest")
+ if ("upper body")
return 3
- if ("groin")
+ if ("lower body")
return 2
return 0
@@ -26,12 +26,18 @@
switch (affected.name)
if ("head")
return "cranial"
- if ("chest")
+ if ("upper body")
return "thoracic"
- if ("groin")
+ if ("lower body")
return "abdominal"
return ""
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!", \
+ "\red Your hand slips, scraping around inside [target]'s [affected.name] with \the [tool]!")
+ affected.createwound(CUT, 20)
+
/datum/surgery_step/cavity/make_space
allowed_tools = list(
/obj/item/weapon/surgicaldrill = 100, \
@@ -60,12 +66,6 @@
user.visible_message("\blue [user] makes some space inside [target]'s [get_cavity(affected)] cavity with \the [tool].", \
"\blue You make some space inside [target]'s [get_cavity(affected)] cavity with \the [tool]." )
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 20)
-
/datum/surgery_step/cavity/close_space
priority = 2
allowed_tools = list(
@@ -96,12 +96,6 @@
user.visible_message("\blue [user] mends [target]'s [get_cavity(affected)] cavity walls with \the [tool].", \
"\blue You mend [target]'s [get_cavity(affected)] cavity walls with \the [tool]." )
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 20)
-
/datum/surgery_step/cavity/place_item
priority = 0
allowed_tools = list(/obj/item = 100)
@@ -126,7 +120,7 @@
user.visible_message("\blue [user] puts \the [tool] inside [target]'s [get_cavity(affected)] cavity.", \
"\blue You put \the [tool] inside [target]'s [get_cavity(affected)] cavity." )
- if (tool.w_class > get_max_wclass(affected)/2 && prob(50))
+ if (tool.w_class > get_max_wclass(affected)/2 && prob(50) && !(affected.status & ORGAN_ROBOT))
user << "\red You tear some blood vessels trying to fit such a big object in this cavity."
var/datum/wound/internal_bleeding/I = new (10)
affected.wounds += I
@@ -136,12 +130,6 @@
tool.loc = target
affected.cavity = 0
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 20)
-
//////////////////////////////////////////////////////////////////
// IMPLANT/ITEM REMOVAL SURGERY //
//////////////////////////////////////////////////////////////////
@@ -150,7 +138,7 @@
allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
+ /obj/item/weapon/material/kitchen/utensil/fork = 20
)
min_duration = 80
@@ -162,9 +150,9 @@
begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("[user] starts poking around inside the incision on [target]'s [affected.name] with \the [tool].", \
- "You start poking around inside the incision on [target]'s [affected.name] with \the [tool]" )
- target.custom_pain("The pain in your chest is living hell!",1)
+ user.visible_message("[user] starts poking around inside [target]'s [affected.name] with \the [tool].", \
+ "You start poking around inside [target]'s [affected.name] with \the [tool]" )
+ target.custom_pain("The pain in your [affected.name] is living hell!",1)
..()
end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
@@ -209,8 +197,8 @@
user.visible_message("\blue [user] removes \the [tool] from [target]'s [affected.name].", \
"\blue There's something inside [target]'s [affected.name], but you just missed it this time." )
else if (affected.hidden)
- user.visible_message("\blue [user] takes something out of incision on [target]'s [affected.name] with \the [tool].", \
- "\blue You take something out of incision on [target]'s [affected.name]s with \the [tool]." )
+ user.visible_message("\blue [user] takes something out of [target]'s [affected.name] with \the [tool].", \
+ "\blue You take something out of [target]'s [affected.name]s with \the [tool]." )
affected.hidden.loc = get_turf(target)
if(!affected.hidden.blood_DNA)
affected.hidden.blood_DNA = list()
@@ -223,10 +211,8 @@
"\blue You could not find anything inside [target]'s [affected.name]." )
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ ..()
var/obj/item/organ/external/chest/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, scraping tissue inside [target]'s [affected.name] with \the [tool]!")
- affected.createwound(CUT, 20)
if (affected.implants.len)
var/fail_prob = 10
fail_prob += 100 - tool_quality(tool)
diff --git a/code/modules/surgery/limb_reattach.dm b/code/modules/surgery/limb_reattach.dm
new file mode 100644
index 00000000000..aee13ede832
--- /dev/null
+++ b/code/modules/surgery/limb_reattach.dm
@@ -0,0 +1,129 @@
+//Procedures in this file: Robotic limbs attachment, meat limbs attachment
+//////////////////////////////////////////////////////////////////
+// LIMB SURGERY //
+//////////////////////////////////////////////////////////////////
+
+/datum/surgery_step/limb/
+ priority = 3 // Must be higher than /datum/surgery_step/internal
+ can_infect = 0
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (!hasorgans(target))
+ return 0
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if (affected)
+ return 0
+ var/list/organ_data = target.species.has_limbs["[target_zone]"]
+ return !isnull(organ_data)
+
+/datum/surgery_step/limb/attach
+ allowed_tools = list(/obj/item/organ/external = 100)
+
+ min_duration = 50
+ max_duration = 70
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = tool
+ user.visible_message("[user] starts attaching [E.name] to [target]'s [E.amputation_point].", \
+ "You start attaching [E.name] to [target]'s [E.amputation_point].")
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = tool
+ user.visible_message("[user] has attached [target]'s [E.name] to the [E.amputation_point].>", \
+ "You have attached [target]'s [E.name] to the [E.amputation_point].")
+ user.drop_from_inventory(E)
+ E.replaced(target)
+ E.loc = target
+ target.update_body()
+ target.updatehealth()
+ target.UpdateDamageIcon()
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = tool
+ user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
+ " Your hand slips, damaging [target]'s [E.amputation_point]!")
+ target.apply_damage(10, BRUTE, null, sharp=1)
+
+/datum/surgery_step/limb/connect
+ allowed_tools = list(
+ /obj/item/weapon/hemostat = 100, \
+ /obj/item/stack/cable_coil = 75, \
+ /obj/item/device/assembly/mousetrap = 20
+ )
+ can_infect = 1
+
+ min_duration = 100
+ max_duration = 120
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = target.get_organ(target_zone)
+ return E && !E.is_stump() && (E.status & ORGAN_DESTROYED)
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = target.get_organ(target_zone)
+ user.visible_message("[user] starts connecting tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
+ "You start connecting tendons and muscle in [target]'s [E.amputation_point].")
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = target.get_organ(target_zone)
+ user.visible_message("[user] has connected tendons and muscles in [target]'s [E.amputation_point] with [tool].", \
+ "You have connected tendons and muscles in [target]'s [E.amputation_point] with [tool].")
+ E.status &= ~ORGAN_DESTROYED
+ if(E.children)
+ for(var/obj/item/organ/external/C in E.children)
+ C.status &= ~ORGAN_DESTROYED
+ target.update_body()
+ target.updatehealth()
+ target.UpdateDamageIcon()
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/E = tool
+ user.visible_message(" [user]'s hand slips, damaging [target]'s [E.amputation_point]!", \
+ " Your hand slips, damaging [target]'s [E.amputation_point]!")
+ target.apply_damage(10, BRUTE, null, sharp=1)
+
+/datum/surgery_step/limb/mechanize
+ allowed_tools = list(/obj/item/robot_parts = 100)
+
+ min_duration = 80
+ max_duration = 100
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/robot_parts/p = tool
+ if (p.part)
+ if (!(target_zone in p.part))
+ return 0
+ return isnull(target.get_organ(target_zone))
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] starts attaching \the [tool] to [target].", \
+ "You start attaching \the [tool] to [target].")
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/robot_parts/L = tool
+ user.visible_message("[user] has attached \the [tool] to [target].", \
+ "You have attached \the [tool] to [target].")
+
+ if(L.part)
+ for(var/part_name in L.part)
+ if(!isnull(target.get_organ(part_name)))
+ continue
+ var/list/organ_data = target.species.has_limbs["[part_name]"]
+ if(!organ_data)
+ continue
+ var/new_limb_type = organ_data["path"]
+ var/obj/item/organ/external/new_limb = new new_limb_type(target)
+ new_limb.robotize(L.model_info)
+ if(L.sabotaged)
+ new_limb.sabotaged = 1
+
+ target.update_body()
+ target.updatehealth()
+ target.UpdateDamageIcon()
+
+ qdel(tool)
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message(" [user]'s hand slips, damaging [target]'s flesh!", \
+ " Your hand slips, damaging [target]'s flesh!")
+ target.apply_damage(10, BRUTE, null, sharp=1)
diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm
index 182c3eac2af..d352c4aed48 100644
--- a/code/modules/surgery/organs_internal.dm
+++ b/code/modules/surgery/organs_internal.dm
@@ -19,7 +19,7 @@
allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
+ /obj/item/weapon/material/kitchen/utensil/fork = 20
)
blood_level = 2
@@ -138,81 +138,12 @@
if(I && I.damage > 0)
I.take_damage(dam_amt,0)
-/datum/surgery_step/internal/fix_organ_robotic //For artificial organs
- allowed_tools = list(
- /obj/item/stack/nanopaste = 100, \
- /obj/item/weapon/bonegel = 30, \
- /obj/item/weapon/screwdriver = 70, \
- )
-
- min_duration = 70
- max_duration = 90
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if(!affected) return
- var/is_organ_damaged = 0
- for(var/obj/item/organ/I in affected.internal_organs)
- if(I.damage > 0 && I.robotic >= 2)
- is_organ_damaged = 1
- break
- return ..() && is_organ_damaged
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- for(var/obj/item/organ/I in affected.internal_organs)
- if(I && I.damage > 0)
- if(I.robotic >= 2)
- user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \
- "You start mending the damage to [target]'s [I.name]'s mechanisms." )
-
- target.custom_pain("The pain in your [affected.name] is living hell!",1)
- ..()
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- for(var/obj/item/organ/I in affected.internal_organs)
-
- if(I && I.damage > 0)
- if(I.robotic >= 2)
- user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \
- "\blue You repair [target]'s [I.name] with [tool]." )
- I.damage = 0
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
-
- if (!hasorgans(target))
- return
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
-
- user.visible_message("\red [user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!")
-
- target.adjustToxLoss(5)
- affected.createwound(CUT, 5)
-
- for(var/obj/item/organ/I in affected.internal_organs)
- if(I)
- I.take_damage(rand(3,5),0)
-
-
/datum/surgery_step/internal/detatch_organ
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
min_duration = 90
@@ -223,12 +154,17 @@
if (!..())
return 0
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+
+ if(!(affected && !(affected.status & ORGAN_ROBOT)))
+ return 0
+
target.op_stage.current_organ = null
var/list/attached_organs = list()
for(var/organ in target.internal_organs_by_name)
var/obj/item/organ/I = target.internal_organs_by_name[organ]
- if(I && !I.status && I.parent_organ == target_zone)
+ if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
attached_organs |= organ
var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
@@ -267,7 +203,7 @@
allowed_tools = list(
/obj/item/weapon/hemostat = 100, \
/obj/item/weapon/wirecutters = 75, \
- /obj/item/weapon/kitchen/utensil/fork = 20
+ /obj/item/weapon/material/kitchen/utensil/fork = 20
)
min_duration = 60
@@ -283,7 +219,7 @@
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
var/obj/item/organ/I = target.internal_organs_by_name[organ]
- if(I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone)
+ if((I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
removable_organs |= organ
var/organ_to_remove = input(user, "Which organ do you want to remove?") as null|anything in removable_organs
@@ -312,8 +248,8 @@
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/obj/item/organ/external/affected = target.get_organ(target_zone)
- user.visible_message("\red [user]'s hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!", \
- "\red Your hand slips, damaging the flesh in [target]'s [affected.name] with \the [tool]!")
+ user.visible_message("\red [user]'s hand slips, damaging [target]'s [affected.name] with \the [tool]!", \
+ "\red Your hand slips, damaging [target]'s [affected.name] with \the [tool]!")
affected.createwound(BRUISE, 20)
/datum/surgery_step/internal/replace_organ
@@ -335,6 +271,10 @@
if(!istype(O))
return 0
+ if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT))
+ user << "You cannot install a naked organ into a robotic body."
+ return 2
+
if(!target.species)
user << "\red You have no idea what species this person is. Report this on the bug tracker."
return 2
@@ -410,7 +350,7 @@
var/list/removable_organs = list()
for(var/organ in target.internal_organs_by_name)
var/obj/item/organ/I = target.internal_organs_by_name[organ]
- if(I && I.status & ORGAN_CUT_AWAY && I.parent_organ == target_zone)
+ if(I && (I.status & ORGAN_CUT_AWAY) && !(I.status & ORGAN_ROBOT) && I.parent_organ == target_zone)
removable_organs |= organ
var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
@@ -447,8 +387,8 @@
// /datum/surgery_step/ribcage/heart/cut
// allowed_tools = list(
// /obj/item/weapon/scalpel = 100, \
-// /obj/item/weapon/kitchenknife = 75, \
-// /obj/item/weapon/shard = 50, \
+// /obj/item/weapon/material/knife = 75, \
+// /obj/item/weapon/material/shard = 50, \
// )
// min_duration = 30
diff --git a/code/modules/surgery/other.dm b/code/modules/surgery/other.dm
index 56418b70c8e..ba9334d933a 100644
--- a/code/modules/surgery/other.dm
+++ b/code/modules/surgery/other.dm
@@ -56,8 +56,8 @@
priority = 2
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
can_infect = 1
@@ -144,9 +144,8 @@
var/obj/item/weapon/reagent_containers/container = tool
- var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this)
+ var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD) //technically it's contact, but the reagents are being applied to internal tissue
if (trans > 0)
- container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue
if(container.reagents.has_reagent("peridaxon"))
affected.status &= ~ORGAN_DEAD
@@ -162,8 +161,7 @@
var/obj/item/weapon/reagent_containers/container = tool
- var/trans = container.reagents.trans_to(target, container.amount_per_transfer_from_this)
- container.reagents.reaction(target, INGEST) //technically it's contact, but the reagents are being applied to internal tissue
+ var/trans = container.reagents.trans_to_mob(target, container.amount_per_transfer_from_this, CHEM_BLOOD)
user.visible_message("\red [user]'s hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!" , \
"\red Your hand slips, applying [trans] units of the solution to the wrong place in [target]'s [affected.name] with the [tool]!")
@@ -188,7 +186,7 @@
return 0
if(istype(tool,/obj/item/weapon/weldingtool))
var/obj/item/weapon/weldingtool/welder = tool
- if(!welder.isOn())
+ if(!welder.isOn() || !welder.remove_fuel(1,user))
return 0
return (target_zone == "chest") && istype(target.back, /obj/item/weapon/rig) && !(target.back.canremove)
diff --git a/code/modules/surgery/robolimbs.dm b/code/modules/surgery/robolimbs.dm
deleted file mode 100644
index d8214837bf6..00000000000
--- a/code/modules/surgery/robolimbs.dm
+++ /dev/null
@@ -1,62 +0,0 @@
-//Procedures in this file: Robotic limbs attachment
-//////////////////////////////////////////////////////////////////
-// LIMB SURGERY //
-//////////////////////////////////////////////////////////////////
-
-/datum/surgery_step/limb/
- can_infect = 0
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if (!hasorgans(target))
- return 0
- var/obj/item/organ/external/affected = target.get_organ(target_zone)
- if (affected)
- return 0
- var/list/organ_data = target.species.has_limbs["[target_zone]"]
- return !isnull(organ_data) && !(target_zone in list("head","groin","chest"))
-
-/datum/surgery_step/limb/attach
- allowed_tools = list(/obj/item/robot_parts = 100)
-
- min_duration = 80
- max_duration = 100
-
- can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- if(..())
- var/obj/item/robot_parts/p = tool
- if (p.part)
- if (!(target_zone in p.part))
- return 0
- return isnull(target.get_organ(target_zone))
-
- begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("[user] starts attaching \the [tool] to [target].", \
- "You start attaching \the [tool] to [target].")
-
- end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- var/obj/item/robot_parts/L = tool
- user.visible_message("\blue [user] has attached \the [tool] to [target].", \
- "\blue You have attached \the [tool] to [target].")
-
- if(L.part)
- for(var/part_name in L.part)
- if(!isnull(target.get_organ(part_name)))
- continue
- var/list/organ_data = target.species.has_limbs["[part_name]"]
- if(!organ_data)
- continue
- var/new_limb_type = organ_data["path"]
- var/obj/item/organ/external/new_limb = new new_limb_type(target)
- new_limb.robotize(L.model_info)
- if(L.sabotaged)
- new_limb.sabotaged = 1
-
- target.update_body()
- target.updatehealth()
- target.UpdateDamageIcon()
-
- qdel(tool)
-
- fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
- user.visible_message("\red [user]'s hand slips, damaging [target]'s flesh!", \
- "\red Your hand slips, damaging [target]'s flesh!")
- target.apply_damage(10, BRUTE, null, sharp=1)
diff --git a/code/modules/surgery/robotics.dm b/code/modules/surgery/robotics.dm
new file mode 100644
index 00000000000..dc626ec60ae
--- /dev/null
+++ b/code/modules/surgery/robotics.dm
@@ -0,0 +1,430 @@
+//Procedures in this file: Gneric surgery steps
+//////////////////////////////////////////////////////////////////
+// COMMON STEPS //
+//////////////////////////////////////////////////////////////////
+
+/datum/surgery_step/robotics/
+ can_infect = 0
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if (isslime(target))
+ return 0
+ if (target_zone == "eyes") //there are specific steps for eye surgery
+ return 0
+ if (!hasorgans(target))
+ return 0
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if (affected == null)
+ return 0
+ if (affected.status & ORGAN_DESTROYED)
+ return 0
+ if (!(affected.status & ORGAN_ROBOT))
+ return 0
+ return 1
+
+/datum/surgery_step/robotics/unscrew_hatch
+ allowed_tools = list(
+ /obj/item/weapon/screwdriver = 100,
+ /obj/item/weapon/coin = 50,
+ /obj/item/weapon/material/kitchen/utensil/knife = 50
+ )
+
+ min_duration = 90
+ max_duration = 110
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ return affected && affected.open == 0 && target_zone != "mouth"
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] starts to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
+ "You start to unscrew the maintenance hatch on [target]'s [affected.name] with \the [tool].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] has opened the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
+ "\blue You have opened the maintenance hatch on [target]'s [affected.name] with \the [tool].",)
+ affected.open = 1
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s [tool.name] slips, failing to unscrew [target]'s [affected.name].", \
+ "\red Your [tool] slips, failing to unscrew [target]'s [affected.name].")
+
+/datum/surgery_step/robotics/open_hatch
+ allowed_tools = list(
+ /obj/item/weapon/retractor = 100,
+ /obj/item/weapon/crowbar = 100,
+ /obj/item/weapon/material/kitchen/utensil = 50
+ )
+
+ min_duration = 30
+ max_duration = 40
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ return affected && affected.open == 1
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] starts to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].",
+ "You start to pry open the maintenance hatch on [target]'s [affected.name] with \the [tool].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] opens the maintenance hatch on [target]'s [affected.name] with \the [tool].", \
+ "\blue You open the maintenance hatch on [target]'s [affected.name] with \the [tool]." )
+ affected.open = 2
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s [tool.name] slips, failing to open the hatch on [target]'s [affected.name].",
+ "\red Your [tool] slips, failing to open the hatch on [target]'s [affected.name].")
+
+/datum/surgery_step/robotics/close_hatch
+ allowed_tools = list(
+ /obj/item/weapon/retractor = 100,
+ /obj/item/weapon/crowbar = 100,
+ /obj/item/weapon/material/kitchen/utensil = 50
+ )
+
+ min_duration = 70
+ max_duration = 100
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ return affected && affected.open && target_zone != "mouth"
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] begins to close and secure the hatch on [target]'s [affected.name] with \the [tool]." , \
+ "You begin to close and secure the hatch on [target]'s [affected.name] with \the [tool].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] closes and secures the hatch on [target]'s [affected.name] with \the [tool].", \
+ "\blue You close and secure the hatch on [target]'s [affected.name] with \the [tool].")
+ affected.open = 0
+ affected.germ_level = 0
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s [tool.name] slips, failing to close the hatch on [target]'s [affected.name].",
+ "\red Your [tool.name] slips, failing to close the hatch on [target]'s [affected.name].")
+
+/datum/surgery_step/robotics/repair_brute
+ allowed_tools = list(
+ /obj/item/weapon/weldingtool = 100,
+ /obj/item/weapon/pickaxe/plasmacutter = 50
+ )
+
+ min_duration = 50
+ max_duration = 60
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(istype(tool,/obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/welder = tool
+ if(!welder.isOn() || !welder.remove_fuel(1,user))
+ return 0
+ return affected && affected.open == 2 && affected.brute_dam > 0 && target_zone != "mouth"
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] begins to patch damage to [target]'s [affected.name]'s support structure with \the [tool]." , \
+ "You begin to patch damage to [target]'s [affected.name]'s support structure with \the [tool].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] finishes patching damage to [target]'s [affected.name] with \the [tool].", \
+ "\blue You finish patching damage to [target]'s [affected.name] with \the [tool].")
+ affected.heal_damage(rand(30,50),0,1,1)
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user]'s [tool.name] slips, damaging the internal structure of [target]'s [affected.name].",
+ "\red Your [tool.name] slips, damaging the internal structure of [target]'s [affected.name].")
+ target.apply_damage(rand(5,10), BURN, affected)
+
+/datum/surgery_step/robotics/repair_burn
+ allowed_tools = list(
+ /obj/item/stack/cable_coil = 100
+ )
+
+ min_duration = 50
+ max_duration = 60
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ if(..())
+ var/obj/item/stack/cable_coil/C = tool
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ var/limb_can_operate = (affected && affected.open == 2 && affected.burn_dam > 0 && target_zone != "mouth")
+ if(limb_can_operate)
+ if(istype(C))
+ if(!C.get_amount() >= 3)
+ user << "You need three or more cable pieces to repair this damage."
+ return 2
+ C.use(3)
+ return 1
+ return 0
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] begins to splice new cabling into [target]'s [affected.name]." , \
+ "You begin to splice new cabling into [target]'s [affected.name].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] finishes splicing cable into [target]'s [affected.name].", \
+ "\blue You finishes splicing new cable into [target]'s [affected.name].")
+ affected.heal_damage(0,rand(30,50),1,1)
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\red [user] causes a short circuit in [target]'s [affected.name]!",
+ "\red You cause a short circuit in [target]'s [affected.name]!")
+ target.apply_damage(rand(5,10), BURN, affected)
+
+/datum/surgery_step/robotics/fix_organ_robotic //For artificial organs
+ allowed_tools = list(
+ /obj/item/stack/nanopaste = 100, \
+ /obj/item/weapon/bonegel = 30, \
+ /obj/item/weapon/screwdriver = 70, \
+ )
+
+ min_duration = 70
+ max_duration = 90
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if (!hasorgans(target))
+ return
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(!affected) return
+ var/is_organ_damaged = 0
+ for(var/obj/item/organ/I in affected.internal_organs)
+ if(I.damage > 0 && I.robotic >= 2)
+ is_organ_damaged = 1
+ break
+ return affected.open == 2 && is_organ_damaged
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if (!hasorgans(target))
+ return
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+
+ for(var/obj/item/organ/I in affected.internal_organs)
+ if(I && I.damage > 0)
+ if(I.robotic >= 2)
+ user.visible_message("[user] starts mending the damage to [target]'s [I.name]'s mechanisms.", \
+ "You start mending the damage to [target]'s [I.name]'s mechanisms." )
+
+ target.custom_pain("The pain in your [affected.name] is living hell!",1)
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if (!hasorgans(target))
+ return
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+
+ for(var/obj/item/organ/I in affected.internal_organs)
+
+ if(I && I.damage > 0)
+ if(I.robotic >= 2)
+ user.visible_message("\blue [user] repairs [target]'s [I.name] with [tool].", \
+ "\blue You repair [target]'s [I.name] with [tool]." )
+ I.damage = 0
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if (!hasorgans(target))
+ return
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+
+ user.visible_message("\red [user]'s hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!", \
+ "\red Your hand slips, gumming up the mechanisms inside of [target]'s [affected.name] with \the [tool]!")
+
+ target.adjustToxLoss(5)
+ affected.createwound(CUT, 5)
+
+ for(var/obj/item/organ/I in affected.internal_organs)
+ if(I)
+ I.take_damage(rand(3,5),0)
+
+/datum/surgery_step/robotics/detatch_organ_robotic
+
+ allowed_tools = list(
+ /obj/item/device/multitool = 100
+ )
+
+ min_duration = 90
+ max_duration = 110
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(!(affected && (affected.status & ORGAN_ROBOT)))
+ return 0
+ if(affected.open != 2)
+ return 0
+
+ target.op_stage.current_organ = null
+
+ var/list/attached_organs = list()
+ for(var/organ in target.internal_organs_by_name)
+ var/obj/item/organ/I = target.internal_organs_by_name[organ]
+ if(I && !(I.status & ORGAN_CUT_AWAY) && I.parent_organ == target_zone)
+ attached_organs |= organ
+
+ var/organ_to_remove = input(user, "Which organ do you want to prepare for removal?") as null|anything in attached_organs
+ if(!organ_to_remove)
+ return 0
+
+ target.op_stage.current_organ = organ_to_remove
+
+ return ..() && organ_to_remove
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] starts to decouple [target]'s [target.op_stage.current_organ] with \the [tool].", \
+ "You start to decouple [target]'s [target.op_stage.current_organ] with \the [tool]." )
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("\blue [user] has decoupled [target]'s [target.op_stage.current_organ] with \the [tool]." , \
+ "\blue You have decoupled [target]'s [target.op_stage.current_organ] with \the [tool].")
+
+ var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
+ if(I && istype(I))
+ I.status |= ORGAN_CUT_AWAY
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \
+ "\red Your hand slips, disconnecting \the [tool].")
+
+/datum/surgery_step/robotics/attach_organ_robotic
+ allowed_tools = list(
+ /obj/item/weapon/screwdriver = 100,
+ )
+
+ min_duration = 100
+ max_duration = 120
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(!(affected && (affected.status & ORGAN_ROBOT)))
+ return 0
+ if(affected.open != 2)
+ return 0
+
+ target.op_stage.current_organ = null
+
+ var/list/removable_organs = list()
+ for(var/organ in target.internal_organs_by_name)
+ var/obj/item/organ/I = target.internal_organs_by_name[organ]
+ if(I && (I.status & ORGAN_CUT_AWAY) && (I.status & ORGAN_ROBOT) && I.parent_organ == target_zone)
+ removable_organs |= organ
+
+ var/organ_to_replace = input(user, "Which organ do you want to reattach?") as null|anything in removable_organs
+ if(!organ_to_replace)
+ return 0
+
+ target.op_stage.current_organ = organ_to_replace
+ return ..()
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("[user] begins reattaching [target]'s [target.op_stage.current_organ] with \the [tool].", \
+ "You start reattaching [target]'s [target.op_stage.current_organ] with \the [tool].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("\blue [user] has reattached [target]'s [target.op_stage.current_organ] with \the [tool]." , \
+ "\blue You have reattached [target]'s [target.op_stage.current_organ] with \the [tool].")
+
+ var/obj/item/organ/I = target.internal_organs_by_name[target.op_stage.current_organ]
+ if(I && istype(I))
+ I.status &= ~ORGAN_CUT_AWAY
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("\red [user]'s hand slips, disconnecting \the [tool].", \
+ "\red Your hand slips, disconnecting \the [tool].")
+
+/datum/surgery_step/robotics/install_mmi
+ allowed_tools = list(
+ /obj/item/device/mmi = 100
+ )
+
+ min_duration = 60
+ max_duration = 80
+
+ can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+
+ if(target_zone != "head")
+ return
+
+ var/obj/item/device/mmi/M = tool
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ if(!(affected && affected.open == 2))
+ return 0
+
+ if(!istype(M))
+ return 0
+
+ if(!M.brainmob || !M.brainmob.client || !M.brainmob.ckey || M.brainmob.stat >= DEAD)
+ user << "That brain is not usable."
+ return 2
+
+ if(!(affected.status & ORGAN_ROBOT))
+ user << "You cannot install a computer brain into a meat skull."
+ return 2
+
+ if(!target.species)
+ user << "You have no idea what species this person is. Report this on the bug tracker."
+ return 2
+
+ if(!target.species.has_organ["brain"])
+ user << "You're pretty sure [target.species.name_plural] don't normally have a brain."
+ return 2
+
+ if(!isnull(target.internal_organs["brain"]))
+ user << "Your subject already has a brain."
+ return 2
+
+ return 1
+
+ begin_step(mob/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("[user] starts installing \the [tool] into [target]'s [affected.name].", \
+ "You start installing \the [tool] into [target]'s [affected.name].")
+ ..()
+
+ end_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ var/obj/item/organ/external/affected = target.get_organ(target_zone)
+ user.visible_message("\blue [user] has installed \the [tool] into [target]'s [affected.name].", \
+ "\blue You have installed \the [tool] into [target]'s [affected.name].")
+
+ var/obj/item/device/mmi/M = tool
+ var/obj/item/organ/mmi_holder/holder = new(target, 1)
+ target.internal_organs_by_name["brain"] = holder
+ user.drop_from_inventory(tool)
+ tool.loc = holder
+ holder.stored_mmi = tool
+ holder.update_from_mmi()
+
+ if(M.brainmob && M.brainmob.mind)
+ M.brainmob.mind.transfer_to(target)
+
+ fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
+ user.visible_message("\red [user]'s hand slips.", \
+ "\red Your hand slips.")
\ No newline at end of file
diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm
index 048c6d3e3c1..3d9865c5113 100644
--- a/code/modules/surgery/slimes.dm
+++ b/code/modules/surgery/slimes.dm
@@ -12,8 +12,8 @@
/datum/surgery_step/slime/cut_flesh
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
min_duration = 30
@@ -38,8 +38,8 @@
/datum/surgery_step/slime/cut_innards
allowed_tools = list(
/obj/item/weapon/scalpel = 100, \
- /obj/item/weapon/kitchenknife = 75, \
- /obj/item/weapon/shard = 50, \
+ /obj/item/weapon/material/knife = 75, \
+ /obj/item/weapon/material/shard = 50, \
)
min_duration = 30
@@ -64,7 +64,7 @@
/datum/surgery_step/slime/saw_core
allowed_tools = list(
/obj/item/weapon/circular_saw = 100, \
- /obj/item/weapon/hatchet = 75
+ /obj/item/weapon/material/hatchet = 75
)
min_duration = 50
diff --git a/code/modules/tables/flipping.dm b/code/modules/tables/flipping.dm
new file mode 100644
index 00000000000..670edd01d86
--- /dev/null
+++ b/code/modules/tables/flipping.dm
@@ -0,0 +1,117 @@
+
+/obj/structure/table/proc/straight_table_check(var/direction)
+ if(health > 100)
+ return 0
+ var/obj/structure/table/T
+ for(var/angle in list(-90,90))
+ T = locate() in get_step(src.loc,turn(direction,angle))
+ if(T && T.flipped == 0 && T.material.name == material.name)
+ return 0
+ T = locate() in get_step(src.loc,direction)
+ if (!T || T.flipped == 1 || T.material != material)
+ return 1
+ return T.straight_table_check(direction)
+
+/obj/structure/table/verb/do_flip()
+ set name = "Flip table"
+ set desc = "Flips a non-reinforced table"
+ set category = "Object"
+ set src in oview(1)
+
+ if (!can_touch(usr) || ismouse(usr))
+ return
+
+ if(flipped < 0 || !flip(get_cardinal_dir(usr,src)))
+ usr << "It won't budge."
+ return
+
+ usr.visible_message("[usr] flips \the [src]!")
+
+ if(climbable)
+ structure_shaken()
+
+ return
+
+/obj/structure/table/proc/unflipping_check(var/direction)
+
+ for(var/mob/M in oview(src,0))
+ return 0
+
+ var/obj/occupied = turf_is_crowded()
+ if(occupied)
+ usr << "There's \a [occupied] in the way."
+ return 0
+
+ var/list/L = list()
+ if(direction)
+ L.Add(direction)
+ else
+ L.Add(turn(src.dir,-90))
+ L.Add(turn(src.dir,90))
+ for(var/new_dir in L)
+ var/obj/structure/table/T = locate() in get_step(src.loc,new_dir)
+ if(T && T.material.name == material.name)
+ if(T.flipped == 1 && T.dir == src.dir && !T.unflipping_check(new_dir))
+ return 0
+ return 1
+
+/obj/structure/table/proc/do_put()
+ set name = "Put table back"
+ set desc = "Puts flipped table back"
+ set category = "Object"
+ set src in oview(1)
+
+ if (!can_touch(usr))
+ return
+
+ if (!unflipping_check())
+ usr << "It won't budge."
+ return
+ unflip()
+
+/obj/structure/table/proc/flip(var/direction)
+ if( !straight_table_check(turn(direction,90)) || !straight_table_check(turn(direction,-90)) )
+ return 0
+
+ verbs -=/obj/structure/table/verb/do_flip
+ verbs +=/obj/structure/table/proc/do_put
+
+ var/list/targets = list(get_step(src,dir),get_step(src,turn(dir, 45)),get_step(src,turn(dir, -45)))
+ for (var/atom/movable/A in get_turf(src))
+ if (!A.anchored)
+ spawn(0)
+ A.throw_at(pick(targets),1,1)
+
+ set_dir(direction)
+ if(dir != NORTH)
+ layer = 5
+ climbable = 0 //flipping tables allows them to be used as makeshift barriers
+ flipped = 1
+ flags |= ON_BORDER
+ for(var/D in list(turn(direction, 90), turn(direction, -90)))
+ var/obj/structure/table/T = locate() in get_step(src,D)
+ if(T && T.flipped == 0 && material && T.material && T.material.name == material.name)
+ T.flip(direction)
+ take_damage(rand(5, 10))
+ update_connections(1)
+ update_icon()
+
+ return 1
+
+/obj/structure/table/proc/unflip()
+ verbs -=/obj/structure/table/proc/do_put
+ verbs +=/obj/structure/table/verb/do_flip
+
+ layer = initial(layer)
+ flipped = 0
+ climbable = initial(climbable)
+ flags &= ~ON_BORDER
+ for(var/D in list(turn(dir, 90), turn(dir, -90)))
+ var/obj/structure/table/T = locate() in get_step(src.loc,D)
+ if(T && T.flipped == 1 && T.dir == src.dir && material && T.material&& T.material.name == material.name)
+ T.unflip()
+
+ update_connections(1)
+ update_icon()
+
+ return 1
\ No newline at end of file
diff --git a/code/modules/tables/interactions.dm b/code/modules/tables/interactions.dm
new file mode 100644
index 00000000000..7c1778e4f32
--- /dev/null
+++ b/code/modules/tables/interactions.dm
@@ -0,0 +1,134 @@
+
+/obj/structure/table/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
+ if(air_group || (height==0)) return 1
+ if(istype(mover,/obj/item/projectile))
+ return (check_cover(mover,target))
+ if (flipped == 1)
+ if (get_dir(loc, target) == dir)
+ return !density
+ else
+ return 1
+ if(istype(mover) && mover.checkpass(PASSTABLE))
+ return 1
+ if(locate(/obj/structure/table) in get_turf(mover))
+ return 1
+ return 0
+
+//checks if projectile 'P' from turf 'from' can hit whatever is behind the table. Returns 1 if it can, 0 if bullet stops.
+/obj/structure/table/proc/check_cover(obj/item/projectile/P, turf/from)
+ var/turf/cover
+ if(flipped==1)
+ cover = get_turf(src)
+ else if(flipped==0)
+ cover = get_step(loc, get_dir(from, loc))
+ if(!cover)
+ return 1
+ if (get_dist(P.starting, loc) <= 1) //Tables won't help you if people are THIS close
+ return 1
+ if (get_turf(P.original) == cover)
+ var/chance = 20
+ if (ismob(P.original))
+ var/mob/M = P.original
+ if (M.lying)
+ chance += 20 //Lying down lets you catch less bullets
+ if(flipped==1)
+ if(get_dir(loc, from) == dir) //Flipped tables catch mroe bullets
+ chance += 20
+ else
+ return 1 //But only from one side
+ if(prob(chance))
+ health -= P.damage/2
+ if (health > 0)
+ visible_message("[P] hits \the [src]!")
+ return 0
+ else
+ visible_message("[src] breaks down!")
+ break_to_parts()
+ return 1
+ return 1
+
+/obj/structure/table/CheckExit(atom/movable/O as mob|obj, target as turf)
+ if(istype(O) && O.checkpass(PASSTABLE))
+ return 1
+ if (flipped==1)
+ if (get_dir(loc, target) == dir)
+ return !density
+ else
+ return 1
+ return 1
+
+
+/obj/structure/table/MouseDrop_T(obj/O as obj, mob/user as mob)
+
+ if ((!( istype(O, /obj/item/weapon) ) || user.get_active_hand() != O))
+ return ..()
+ if(isrobot(user))
+ return
+ user.drop_item()
+ if (O.loc != src.loc)
+ step(O, get_dir(O, src))
+ return
+
+
+/obj/structure/table/attackby(obj/item/W as obj, mob/user as mob)
+ if (!W) return
+
+ // Handle harm intent grabbing/tabling.
+ if(istype(W, /obj/item/weapon/grab) && get_dist(src,user)<2)
+ var/obj/item/weapon/grab/G = W
+ if (istype(G.affecting, /mob/living))
+ var/mob/living/M = G.affecting
+ if (G.state < 2)
+ if(user.a_intent == I_HURT)
+ if (prob(15)) M.Weaken(5)
+ M.apply_damage(8,def_zone = "head")
+ visible_message("[G.assailant] slams [G.affecting]'s face against \the [src]!")
+ if(material)
+ playsound(loc, material.tableslam_noise, 50, 1)
+ else
+ playsound(loc, 'sound/weapons/tablehit1.ogg', 50, 1)
+ var/list/L = take_damage(rand(1,5))
+ // Shards. Extra damage, plus potentially the fact YOU LITERALLY HAVE A PIECE OF GLASS/METAL/WHATEVER IN YOUR FACE
+ for(var/obj/item/weapon/material/shard/S in L)
+ if(prob(50))
+ M.visible_message("\The [S] slices [M]'s face messily!",
+ "\The [S] slices your face messily!")
+ M.apply_damage(10, def_zone = "head")
+ if(prob(2))
+ M.embed(S, def_zone = "head")
+ else
+ user << "You need a better grip to do that!"
+ return
+ else
+ G.affecting.loc = src.loc
+ G.affecting.Weaken(5)
+ visible_message("[G.assailant] puts [G.affecting] on \the [src].")
+ qdel(W)
+ return
+
+ // Handle dismantling or placing things on the table from here on.
+ if(isrobot(user))
+ return
+
+ if(W.loc != user) // This should stop mounted modules ending up outside the module.
+ return
+
+ if(istype(W, /obj/item/weapon/melee/energy/blade))
+ var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread()
+ spark_system.set_up(5, 0, src.loc)
+ spark_system.start()
+ playsound(src.loc, 'sound/weapons/blade1.ogg', 50, 1)
+ playsound(src.loc, "sparks", 50, 1)
+ user.visible_message("\The [src] was sliced apart by [user]!")
+ break_to_parts()
+ return
+
+ if(can_plate && !material)
+ user << "There's nothing to put \the [W] on! Try adding plating to \the [src] first."
+ return
+
+ user.drop_item(src.loc)
+ return
+
+/obj/structure/table/attack_tk() // no telehulk sorry
+ return
diff --git a/code/modules/tables/presets.dm b/code/modules/tables/presets.dm
new file mode 100644
index 00000000000..e52dac3bd6c
--- /dev/null
+++ b/code/modules/tables/presets.dm
@@ -0,0 +1,65 @@
+/obj/structure/table
+
+ standard
+ icon_state = "plain_preview"
+ color = "#666666"
+ New()
+ material = get_material_by_name(DEFAULT_WALL_MATERIAL)
+ ..()
+
+ plastic
+ icon_state = "plain_preview"
+ color = "#EEEEEE"
+ New()
+ material = get_material_by_name("plastic")
+ ..()
+
+ marble
+ icon_state = "stone_preview"
+ color = "#CCCCCC"
+ New()
+ material = get_material_by_name("marble")
+ ..()
+
+ reinforced
+ icon_state = "reinf_preview"
+ color = "#666666"
+ New()
+ material = get_material_by_name(DEFAULT_WALL_MATERIAL)
+ reinforced = get_material_by_name(DEFAULT_WALL_MATERIAL)
+ ..()
+
+ woodentable
+ icon_state = "plain_preview"
+ color = "#824B28"
+ New()
+ material = get_material_by_name("wood")
+ ..()
+
+ gamblingtable
+ icon_state = "gamble_preview"
+ New()
+ material = get_material_by_name("wood")
+ carpeted = 1
+ ..()
+
+ glass
+ icon_state = "plain_preview"
+ color = "#00E1FF"
+ alpha = 77 // 0.3 * 255
+ New()
+ material = get_material_by_name("glass")
+ ..()
+
+ holotable
+ icon_state = "holo_preview"
+ color = "#666666"
+ New()
+ material = get_material_by_name("holographic [DEFAULT_WALL_MATERIAL]")
+ ..()
+
+ woodentable/holotable
+ icon_state = "holo_preview"
+ New()
+ material = get_material_by_name("holographic wood")
+ ..()
diff --git a/code/modules/tables/rack.dm b/code/modules/tables/rack.dm
new file mode 100644
index 00000000000..bd3ee6ce55f
--- /dev/null
+++ b/code/modules/tables/rack.dm
@@ -0,0 +1,26 @@
+/obj/structure/table/rack
+ name = "rack"
+ desc = "Different from the Middle Ages version."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "rack"
+ can_plate = 0
+ can_reinforce = 0
+ flipped = -1
+
+/obj/structure/table/rack/New()
+ ..()
+ verbs -= /obj/structure/table/verb/do_flip
+ verbs -= /obj/structure/table/proc/do_put
+
+/obj/structure/table/rack/update_connections()
+ return
+
+/obj/structure/table/rack/update_desc()
+ return
+
+/obj/structure/table/rack/update_icon()
+ return
+
+/obj/structure/table/rack/holorack/dismantle(obj/item/weapon/wrench/W, mob/user)
+ user << "You cannot dismantle \the [src]."
+ return
diff --git a/code/modules/tables/tables.dm b/code/modules/tables/tables.dm
new file mode 100644
index 00000000000..1ee34e9d800
--- /dev/null
+++ b/code/modules/tables/tables.dm
@@ -0,0 +1,449 @@
+/obj/structure/table
+ name = "table frame"
+ icon = 'icons/obj/tables.dmi'
+ icon_state = "frame"
+ desc = "It's a table, for putting things on. Or standing on, if you really want to."
+ density = 1
+ anchored = 1
+ climbable = 1
+ layer = 2.8
+ throwpass = 1
+ var/flipped = 0
+ var/maxhealth = 10
+ var/health = 10
+
+ // For racks.
+ var/can_reinforce = 1
+ var/can_plate = 1
+
+ var/manipulating = 0
+ var/material/material = null
+ var/material/reinforced = null
+
+ // Gambling tables. I'd prefer reinforced with carpet/felt/cloth/whatever, but AFAIK it's either harder or impossible to get /obj/item/stack/material of those.
+ // Convert if/when you can easily get stacks of these.
+ var/carpeted = 0
+
+ var/list/connections = list("nw0", "ne0", "sw0", "se0")
+
+/obj/structure/table/proc/update_material()
+ var/old_maxhealth = maxhealth
+ if(!material)
+ maxhealth = 10
+ else
+ maxhealth = material.integrity / 2
+
+ if(reinforced)
+ maxhealth += reinforced.integrity / 2
+
+ health += maxhealth - old_maxhealth
+
+/obj/structure/table/proc/take_damage(amount)
+ // If the table is made of a brittle material, and is *not* reinforced with a non-brittle material, damage is multiplied by TABLE_BRITTLE_MATERIAL_MULTIPLIER
+ if(material && material.is_brittle())
+ if(reinforced)
+ if(reinforced.is_brittle())
+ amount *= TABLE_BRITTLE_MATERIAL_MULTIPLIER
+ else
+ amount *= TABLE_BRITTLE_MATERIAL_MULTIPLIER
+ health -= amount
+ if(health <= 0)
+ visible_message("\The [src] breaks down!")
+ return break_to_parts() // if we break and form shards, return them to the caller to do !FUN! things with
+
+/obj/structure/table/New()
+ ..()
+ // One table per turf.
+ for(var/obj/structure/table/T in loc)
+ if(T != src)
+ // There's another table here that's not us, break to metal.
+ // break_to_parts calls qdel(src)
+ break_to_parts(full_return = 1)
+ return
+
+/obj/structure/table/initialize()
+ ..()
+ // reset color/alpha, since they're set for nice map previews
+ color = "#ffffff"
+ alpha = 255
+ update_connections(1)
+ update_icon()
+ update_desc()
+ update_material()
+
+/obj/structure/table/Destroy()
+ material = null
+ reinforced = null
+ update_connections(1) // Update tables around us to ignore us (material=null forces no connections)
+ for(var/obj/structure/table/T in oview(src, 1))
+ T.update_icon()
+ ..()
+
+/obj/structure/table/examine(mob/user)
+ . = ..()
+ if(health < maxhealth)
+ switch(health / maxhealth)
+ if(0.0 to 0.5)
+ user << "It looks severely damaged!"
+ if(0.25 to 0.5)
+ user << "It looks damaged!"
+ if(0.5 to 1.0)
+ user << "It has a few scrapes and dents."
+
+/obj/structure/table/attackby(obj/item/weapon/W, mob/user)
+
+ if(reinforced && istype(W, /obj/item/weapon/screwdriver))
+ remove_reinforced(W, user)
+ if(!reinforced)
+ update_desc()
+ update_icon()
+ update_material()
+ return 1
+
+ if(carpeted && istype(W, /obj/item/weapon/crowbar))
+ user.visible_message("\The [user] removes the carpet from \the [src].",
+ "You remove the carpet from \the [src].")
+ new /obj/item/stack/tile/carpet(loc)
+ carpeted = 0
+ update_icon()
+ return 1
+
+ if(!carpeted && material && istype(W, /obj/item/stack/tile/carpet))
+ var/obj/item/stack/tile/carpet/C = W
+ if(C.use(1))
+ user.visible_message("\The [user] adds \the [C] to \the [src].",
+ "You add \the [C] to \the [src].")
+ carpeted = 1
+ update_icon()
+ return 1
+ else
+ user << "You don't have enough carpet!"
+
+ if(!reinforced && !carpeted && material && istype(W, /obj/item/weapon/wrench))
+ remove_material(W, user)
+ if(!material)
+ update_connections(1)
+ update_icon()
+ for(var/obj/structure/table/T in oview(src, 1))
+ T.update_icon()
+ update_desc()
+ update_material()
+ return 1
+
+ if(!carpeted && !reinforced && !material && istype(W, /obj/item/weapon/wrench))
+ dismantle(W, user)
+ return 1
+
+ if(health < maxhealth && istype(W, /obj/item/weapon/weldingtool))
+ var/obj/item/weapon/weldingtool/F = W
+ if(F.welding)
+ user << "You begin reparing damage to \the [src]."
+ playsound(src.loc, 'sound/items/Welder.ogg', 50, 1)
+ if(!do_after(user, 20) || !F.remove_fuel(1, user))
+ return
+ user.visible_message("\The [user] repairs some damage to \the [src].",
+ "You repair some damage to \the [src].")
+ health = max(health+(maxhealth/5), maxhealth) // 20% repair per application
+ return 1
+
+ if(!material && can_plate && istype(W, /obj/item/stack/material))
+ material = common_material_add(W, user, "plat")
+ if(material)
+ update_connections(1)
+ update_icon()
+ update_desc()
+ update_material()
+ return 1
+
+ return ..()
+
+/obj/structure/table/MouseDrop_T(obj/item/stack/material/what)
+ if(can_reinforce && isliving(usr) && (!usr.stat) && istype(what) && usr.get_active_hand() == what && Adjacent(usr))
+ reinforce_table(what, usr)
+ else
+ return ..()
+
+/obj/structure/table/proc/reinforce_table(obj/item/stack/material/S, mob/user)
+ if(reinforced)
+ user << "\The [src] is already reinforced!"
+ return
+
+ if(!can_reinforce)
+ user << "\The [src] cannot be reinforced!"
+ return
+
+ if(!material)
+ user << "Plate \the [src] before reinforcing it!"
+ return
+
+ reinforced = common_material_add(S, user, "reinforc")
+ if(reinforced)
+ update_desc()
+ update_icon()
+ update_material()
+
+/obj/structure/table/proc/update_desc()
+ if(material)
+ name = "[material.display_name] table"
+ else
+ name = "table frame"
+
+ if(reinforced)
+ name = "reinforced [name]"
+ desc = "[initial(desc)] This one seems to be reinforced with [reinforced.display_name]."
+ else
+ desc = initial(desc)
+
+// Returns the material to set the table to.
+/obj/structure/table/proc/common_material_add(obj/item/stack/material/S, mob/user, verb) // Verb is actually verb without 'e' or 'ing', which is added. Works for 'plate'/'plating' and 'reinforce'/'reinforcing'.
+ var/material/M = name_to_material[S.default_type]
+ if(!istype(M))
+ user << "You cannot [verb]e \the [src] with \the [S]."
+ return null
+
+ if(manipulating) return M
+ manipulating = 1
+ user << "You begin [verb]ing \the [src] with [M.display_name]."
+ if(!do_after(user, 20) || !S.use(1))
+ manipulating = 0
+ return null
+ user.visible_message("\The [user] [verb]es \the [src] with [M.display_name].", "You finish [verb]ing \the [src].")
+ manipulating = 0
+ return M
+
+// Returns the material to set the table to.
+/obj/structure/table/proc/common_material_remove(mob/user, material/M, delay, what, type_holding, sound)
+ if(!M.stack_type)
+ user << "You are unable to remove the [what] from this table!"
+ return M
+
+ if(manipulating) return M
+ manipulating = 1
+ user.visible_message("\The [user] begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.",
+ "You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place.")
+ if(sound)
+ playsound(src.loc, sound, 50, 1)
+ if(!do_after(user, 40))
+ manipulating = 0
+ return M
+ user.visible_message("\The [user] removes the [M.display_name] [what] from \the [src].",
+ "You remove the [M.display_name] [what] from \the [src].")
+ new M.stack_type(src.loc)
+ manipulating = 0
+ return null
+
+/obj/structure/table/proc/remove_reinforced(obj/item/weapon/screwdriver/S, mob/user)
+ reinforced = common_material_remove(user, reinforced, 40, "reinforcements", "screws", 'sound/items/Screwdriver.ogg')
+
+/obj/structure/table/proc/remove_material(obj/item/weapon/wrench/W, mob/user)
+ material = common_material_remove(user, material, 20, "plating", "bolts", 'sound/items/Ratchet.ogg')
+
+/obj/structure/table/proc/dismantle(obj/item/weapon/wrench/W, mob/user)
+ if(manipulating) return
+ manipulating = 1
+ user.visible_message("\The [user] begins dismantling \the [src].",
+ "You begin dismantling \the [src].")
+ playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
+ if(!do_after(user, 20))
+ manipulating = 0
+ return
+ user.visible_message("\The [user] dismantles \the [src].",
+ "You dismantle \the [src].")
+ new /obj/item/stack/material/steel(src.loc)
+ qdel(src)
+ return
+
+// Returns a list of /obj/item/weapon/material/shard objects that were created as a result of this table's breakage.
+// Used for !fun! things such as embedding shards in the faces of tableslammed people.
+
+// The repeated
+// S = [x].place_shard(loc)
+// if(S) shards += S
+// is to avoid filling the list with nulls, as place_shard won't place shards of certain materials (holo-wood, holo-steel)
+
+/obj/structure/table/proc/break_to_parts(full_return = 0)
+ var/list/shards = list()
+ var/obj/item/weapon/material/shard/S = null
+ if(reinforced)
+ if(reinforced.stack_type && (full_return || prob(20)))
+ reinforced.place_sheet(loc)
+ else
+ S = reinforced.place_shard(loc)
+ if(S) shards += S
+ if(material)
+ if(material.stack_type && (full_return || prob(20)))
+ material.place_sheet(loc)
+ else
+ S = material.place_shard(loc)
+ if(S) shards += S
+ if(carpeted && (full_return || prob(50))) // Higher chance to get the carpet back intact, since there's no non-intact option
+ new /obj/item/stack/tile/carpet(src.loc)
+ if(full_return || prob(20))
+ new /obj/item/stack/material/steel(src.loc)
+ else
+ var/material/M = get_material_by_name(DEFAULT_WALL_MATERIAL)
+ S = M.place_shard(loc)
+ if(S) shards += S
+ qdel(src)
+ return shards
+
+/obj/structure/table/update_icon()
+ if(flipped != 1)
+ icon_state = "blank"
+ overlays.Cut()
+
+ // Base frame shape. Mostly done for glass/diamond tables, where this is visible.
+ for(var/n in connections)
+ overlays += n
+
+ // Standard table image
+ if(material)
+ for(var/n in connections)
+ var/image/I = image(icon, "[material.icon_base]_[n]")
+ I.color = material.icon_colour
+ I.alpha = 255 * material.opacity
+ overlays += I
+
+ // Reinforcements
+ if(reinforced)
+ for(var/n in connections)
+ var/image/I = image(icon, "[reinforced.icon_reinf]_[n]")
+ I.color = reinforced.icon_colour
+ I.alpha = 255 * reinforced.opacity
+ overlays += I
+
+ if(carpeted)
+ for(var/n in connections)
+ overlays += "carpet_[n]"
+ else
+ overlays.Cut()
+ var/type = 0
+ var/tabledirs = 0
+ for(var/direction in list(turn(dir,90), turn(dir,-90)) )
+ var/obj/structure/table/T = locate(/obj/structure/table ,get_step(src,direction))
+ if (T && T.flipped == 1 && T.dir == src.dir && material && T.material && T.material.name == material.name)
+ type++
+ tabledirs |= direction
+
+ type = "[type]"
+ if (type=="1")
+ if (tabledirs & turn(dir,90))
+ type += "-"
+ if (tabledirs & turn(dir,-90))
+ type += "+"
+
+ icon_state = "flip[type]"
+ if(material)
+ var/image/I = image(icon, "[material.icon_base]_flip[type]")
+ I.color = material.icon_colour
+ I.alpha = 255 * material.opacity
+ overlays += I
+ name = "[material.display_name] table"
+ else
+ name = "table frame"
+
+ if(reinforced)
+ var/image/I = image(icon, "[reinforced.icon_reinf]_flip[type]")
+ I.color = reinforced.icon_colour
+ I.alpha = 255 * reinforced.opacity
+ overlays += I
+
+ if(carpeted)
+ for(var/n in connections)
+ overlays += "carpet_flip[type]"
+
+// set propagate if you're updating a table that should update tables around it too, for example if it's a new table or something important has changed (like material).
+/obj/structure/table/proc/update_connections(propagate=0)
+ if(!material)
+ connections = list("nw0", "ne0", "sw0", "se0")
+
+ if(propagate)
+ for(var/obj/structure/table/T in oview(src, 1))
+ T.update_connections()
+ return
+
+ var/list/blocked_dirs = list()
+ for(var/obj/structure/window/W in get_turf(src))
+ if(W.is_fulltile())
+ connections = list("nw0", "ne0", "sw0", "se0")
+ return
+ blocked_dirs |= W.dir
+
+ for(var/D in list(NORTH, SOUTH, EAST, WEST) - blocked_dirs)
+ var/turf/T = get_step(src, D)
+ for(var/obj/structure/window/W in T)
+ if(W.is_fulltile() || W.dir == reverse_dir[D])
+ blocked_dirs |= D
+ break
+ else
+ if(W.dir != D) // it's off to the side
+ blocked_dirs |= W.dir|D // blocks the diagonal
+
+ for(var/D in list(NORTHEAST, NORTHWEST, SOUTHEAST, SOUTHWEST) - blocked_dirs)
+ var/turf/T = get_step(src, D)
+
+ for(var/obj/structure/window/W in T)
+ if(W.is_fulltile() || W.dir & reverse_dir[D])
+ blocked_dirs |= D
+ break
+
+ // Blocked cardinals block the adjacent diagonals too. Prevents weirdness with tables.
+ for(var/x in list(NORTH, SOUTH))
+ for(var/y in list(EAST, WEST))
+ if((x in blocked_dirs) || (y in blocked_dirs))
+ blocked_dirs |= x|y
+
+ var/list/connection_dirs = list()
+
+ for(var/obj/structure/table/T in oview(src, 1))
+ var/T_dir = get_dir(src, T)
+ if(T_dir in blocked_dirs) continue
+ if(material && T.material && material.name == T.material.name && flipped == T.flipped)
+ connection_dirs |= T_dir
+ if(propagate)
+ spawn(0)
+ T.update_connections()
+ T.update_icon()
+
+ connections = dirs_to_corner_states(connection_dirs)
+
+#define CORNER_NONE 0
+#define CORNER_EASTWEST 1
+#define CORNER_DIAGONAL 2
+#define CORNER_NORTHSOUTH 4
+
+/proc/dirs_to_corner_states(list/dirs)
+ if(!istype(dirs)) return
+
+ var/NE = CORNER_NONE
+ var/NW = CORNER_NONE
+ var/SE = CORNER_NONE
+ var/SW = CORNER_NONE
+
+ if(NORTH in dirs)
+ NE |= CORNER_NORTHSOUTH
+ NW |= CORNER_NORTHSOUTH
+ if(SOUTH in dirs)
+ SW |= CORNER_NORTHSOUTH
+ SE |= CORNER_NORTHSOUTH
+ if(EAST in dirs)
+ SE |= CORNER_EASTWEST
+ NE |= CORNER_EASTWEST
+ if(WEST in dirs)
+ NW |= CORNER_EASTWEST
+ SW |= CORNER_EASTWEST
+ if(NORTHWEST in dirs)
+ NW |= CORNER_DIAGONAL
+ if(NORTHEAST in dirs)
+ NE |= CORNER_DIAGONAL
+ if(SOUTHEAST in dirs)
+ SE |= CORNER_DIAGONAL
+ if(SOUTHWEST in dirs)
+ SW |= CORNER_DIAGONAL
+
+ return list("ne[NE]", "se[SE]", "sw[SW]", "nw[NW]")
+
+#undef CORNER_NONE
+#undef CORNER_EASTWEST
+#undef CORNER_DIAGONAL
+#undef CORNER_NORTHSOUTH
diff --git a/code/modules/tables/update_triggers.dm b/code/modules/tables/update_triggers.dm
new file mode 100644
index 00000000000..a90e3eeb8a2
--- /dev/null
+++ b/code/modules/tables/update_triggers.dm
@@ -0,0 +1,22 @@
+/obj/structure/window/New()
+ ..()
+ for(var/obj/structure/table/T in view(src, 1))
+ T.update_connections()
+ T.update_icon()
+
+/obj/structure/window/Destroy()
+ var/oldloc = loc
+ loc=null
+ for(var/obj/structure/table/T in view(oldloc, 1))
+ T.update_connections()
+ T.update_icon()
+ loc=oldloc
+ ..()
+
+/obj/structure/window/Move()
+ var/oldloc = loc
+ . = ..()
+ if(loc != oldloc)
+ for(var/obj/structure/table/T in view(oldloc, 1) | view(loc, 1))
+ T.update_connections()
+ T.update_icon()
\ No newline at end of file
diff --git a/code/modules/vehicles/vehicle.dm b/code/modules/vehicles/vehicle.dm
index e733ad8df44..556e82cd0c8 100644
--- a/code/modules/vehicles/vehicle.dm
+++ b/code/modules/vehicles/vehicle.dm
@@ -11,7 +11,7 @@
density = 1
anchored = 1
animate_movement=1
- luminosity = 3
+ light_range = 3
can_buckle = 1
buckle_movable = 1
@@ -149,7 +149,7 @@
/obj/vehicle/emp_act(severity)
var/was_on = on
stat |= EMPED
- var/obj/effect/overlay/pulse2 = PoolOrNew(new/obj/effect/overlay, src.loc)
+ var/obj/effect/overlay/pulse2 = PoolOrNew(/obj/effect/overlay, src.loc)
pulse2.icon = 'icons/effects/effects.dmi'
pulse2.icon_state = "empdisable"
pulse2.name = "emp sparks"
@@ -181,13 +181,13 @@
if(powered && cell.charge < charge_use)
return 0
on = 1
- luminosity = initial(luminosity)
+ set_light(initial(light_range))
update_icon()
return 1
/obj/vehicle/proc/turn_off()
on = 0
- luminosity = 0
+ set_light(0)
update_icon()
/obj/vehicle/proc/Emag(mob/user as mob)
@@ -363,8 +363,9 @@
return
visible_message("[user] [attack_message] the [src]!")
user.attack_log += text("\[[time_stamp()]\] attacked [src.name]")
+ user.do_attack_animation(src)
src.health -= damage
if(prob(10))
new /obj/effect/decal/cleanable/blood/oil(src.loc)
spawn(1) healthcheck()
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/modules/virus2/admin.dm b/code/modules/virus2/admin.dm
index 88876da9ed0..62bfaff907f 100644
--- a/code/modules/virus2/admin.dm
+++ b/code/modules/virus2/admin.dm
@@ -73,10 +73,11 @@
var/f = 1
for(var/k in all_species)
var/datum/species/S = all_species[k]
- if(!(S.flags & IS_SYNTHETIC))
- if(!f) H += " | "
- else f = 0
- H += "[k]"
+ if(S.virus_immune)
+ continue
+ if(!f) H += " | "
+ else f = 0
+ H += "[k]"
H += {"
Reset
diff --git a/code/modules/virus2/antibodies.dm b/code/modules/virus2/antibodies.dm
index e203560e6df..a340aae4ddd 100644
--- a/code/modules/virus2/antibodies.dm
+++ b/code/modules/virus2/antibodies.dm
@@ -55,10 +55,10 @@ datum/reagent/antibodies
reagent_state = LIQUID
color = "#0050F0"
- reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
+ reaction_mob(var/mob/M, var/method=CHEM_TOUCH, var/volume)
if(istype(M,/mob/living/carbon))
var/mob/living/carbon/C = M
- if(src.data && method == INGEST)
+ if(src.data && method == CHEM_INGEST)
//if(C.virus2) if(src.data["antibodies"] & C.virus2.antigen)
// C.virus2.dead = 1
C.antibodies |= src.data["antibodies"]
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index c1852a0cb98..62bd4153f59 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -45,7 +45,7 @@
var/list/res = list()
for (var/specie in all_species)
var/datum/species/S = all_species[specie]
- if(!(S.flags & IS_SYNTHETIC))
+ if(!S.virus_immune)
meat += S.name
if(meat.len)
var/num = rand(1,meat.len)
@@ -66,6 +66,12 @@
if(prob(5))
mob.antibodies |= antigen // 20% immunity is a good chance IMO, because it allows finding an immune person easily
+ // Some species are flat out immune to organic viruses.
+ var/mob/living/carbon/human/H = mob
+ if(istype(H) && H.species.virus_immune)
+ cure(mob)
+ return
+
if(mob.radiation > 50)
if(prob(1))
majormutate()
diff --git a/code/modules/virus2/dishincubator.dm b/code/modules/virus2/dishincubator.dm
index 6882e8e622e..b176dd3d5e2 100644
--- a/code/modules/virus2/dishincubator.dm
+++ b/code/modules/virus2/dishincubator.dm
@@ -134,7 +134,7 @@
if (locate(/datum/reagent/toxin) in beaker.reagents.reagent_list)
for(var/datum/reagent/toxin/T in beaker.reagents.reagent_list)
- toxins += max(T.toxpwr,1)
+ toxins += max(T.strength,1)
beaker.reagents.remove_reagent(T.id,1)
nanomanager.update_uis(src)
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 878f8c24be1..e023beef802 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -290,7 +290,7 @@
if(c_data)
data = c_data
else
- data = pick("bicaridine", "kelotane", "dylovene", "inaprovaline", "space_drugs", "sugar",
+ data = pick("bicaridine", "kelotane", "anti_toxin", "inaprovaline", "space_drugs", "sugar",
"tramadol", "dexalin", "cryptobiolin", "impedrezene", "hyperzine", "ethylredoxrazine",
"mindbreaker", "nutriment")
var/datum/reagent/R = chemical_reagents_list[data]
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 2cac2551044..d2671b7933c 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -3,25 +3,26 @@ proc/infection_check(var/mob/living/carbon/M, var/vector = "Airborne")
if (!istype(M))
return 0
+ var/mob/living/carbon/human/H = M
+ if(istype(H) && H.species.virus_immune)
+ return 0
+
var/protection = M.getarmor(null, "bio") //gets the full body bio armour value, weighted by body part coverage.
var/score = round(0.06*protection) //scales 100% protection to 6.
switch(vector)
if("Airborne")
- if(M.internal)
- score = 6 //not breathing infected air helps greatly
- var/obj/item/I = M.wear_mask
-
- //masks provide a small bonus and can replace overall bio protection
- if(I)
- score = max(score, round(0.06*I.armor["bio"]))
- if (istype(I, /obj/item/clothing/mask))
- score += 1 //this should be added after
+ if(M.internal) //not breathing infected air helps greatly
+ return 0
+ var/obj/item/I = M.wear_mask
+ //masks provide a small bonus and can replace overall bio protection
+ if(I)
+ score = max(score, round(0.06*I.armor["bio"]))
+ if (istype(I, /obj/item/clothing/mask))
+ score += 1 //this should be added after
if("Contact")
- if(istype(M, /mob/living/carbon/human))
- var/mob/living/carbon/human/H = M
-
+ if(istype(H))
//gloves provide a larger bonus
if (istype(H.gloves, /obj/item/clothing/gloves))
score += 2
diff --git a/code/modules/virus2/items_devices.dm b/code/modules/virus2/items_devices.dm
index 7508818a6d7..d318ca9f8ad 100644
--- a/code/modules/virus2/items_devices.dm
+++ b/code/modules/virus2/items_devices.dm
@@ -16,7 +16,7 @@
var/mob/living/carbon/C = M
if (istype(C,/mob/living/carbon/human/))
var/mob/living/carbon/human/H = C
- if(H.species && H.species.flags & NO_BLOOD)
+ if(H.species.flags & NO_BLOOD)
report("Scan aborted: The target does not have blood.", user)
return
diff --git a/code/ZAS/_xgm_gas_data.dm b/code/modules/xgm/xgm_gas_data.dm
similarity index 83%
rename from code/ZAS/_xgm_gas_data.dm
rename to code/modules/xgm/xgm_gas_data.dm
index fd732f9d7cd..4ee3e1c5011 100644
--- a/code/ZAS/_xgm_gas_data.dm
+++ b/code/modules/xgm/xgm_gas_data.dm
@@ -1,6 +1,6 @@
-/var/xgm_gas_data/gas_data
+/var/datum/xgm_gas_data/gas_data
-/xgm_gas_data
+/datum/xgm_gas_data
//Simple list of all the gas IDs.
var/list/gases = list()
//The friendly, human-readable name for the gas.
@@ -16,7 +16,7 @@
//Flags.
var/list/flags = list()
-/xgm_gas
+/decl/xgm_gas
var/id = ""
var/name = "Unnamed Gas"
var/specific_heat = 20 // J/(mol*K)
@@ -29,8 +29,8 @@
/hook/startup/proc/generateGasData()
gas_data = new
- for(var/p in (typesof(/xgm_gas) - /xgm_gas))
- var/xgm_gas/gas = new p
+ for(var/p in (typesof(/decl/xgm_gas) - /decl/xgm_gas))
+ var/decl/xgm_gas/gas = new p //avoid initial() because of potential New() actions
if(gas.id in gas_data.gases)
error("Duplicate gas id `[gas.id]` in `[p]`")
diff --git a/code/ZAS/_gas_mixture_xgm.dm b/code/modules/xgm/xgm_gas_mixture.dm
similarity index 96%
rename from code/ZAS/_gas_mixture_xgm.dm
rename to code/modules/xgm/xgm_gas_mixture.dm
index 8043be15793..5806237d048 100644
--- a/code/ZAS/_gas_mixture_xgm.dm
+++ b/code/modules/xgm/xgm_gas_mixture.dm
@@ -1,5 +1,3 @@
-#define QUANTIZE(variable) (round(variable,0.0001))
-
/datum/gas_mixture
//Associative list of gas moles.
//Gases with 0 moles are not tracked and are pruned by update_values()
diff --git a/code/setup.dm b/code/setup.dm
deleted file mode 100644
index 68c2b94c754..00000000000
--- a/code/setup.dm
+++ /dev/null
@@ -1,956 +0,0 @@
-#define DEBUG
-
-#define GAME_STATE_PREGAME 1
-#define GAME_STATE_SETTING_UP 2
-#define GAME_STATE_PLAYING 3
-#define GAME_STATE_FINISHED 4
-
-// Math constants.
-#define M_E 2.71828183
-#define M_PI 3.14159265
-#define M_SQRT2 1.41421356
-
-#define R_IDEAL_GAS_EQUATION 8.31 // kPa*L/(K*mol).
-#define ONE_ATMOSPHERE 101.325 // kPa.
-#define IDEAL_GAS_ENTROPY_CONSTANT 1164 // (mol^3 * s^3) / (kg^3 * L).
-
-// Radiation constants.
-#define STEFAN_BOLTZMANN_CONSTANT 5.6704e-8 // W/(m^2*K^4).
-#define COSMIC_RADIATION_TEMPERATURE 3.15 // K.
-#define AVERAGE_SOLAR_RADIATION 200 // W/m^2. Kind of arbitrary. Really this should depend on the sun position much like solars.
-#define RADIATOR_OPTIMUM_PRESSURE 3771 // kPa at 20 C. This should be higher as gases aren't great conductors until they are dense. Used the critical pressure for air.
-#define GAS_CRITICAL_TEMPERATURE 132.65 // K. The critical point temperature for air.
-
-/*
- The pipe looks to be thin vertically and wide horizontally, so we'll assume that it's
- three centimeters thick, one meter wide, and only explosed to the sun 3 degrees off of edge-on.
- Since the radiatior is uniform along it's length, the ratio of surface area touched by sunlight
- to the total surface area is the same as the ratio of the perimeter of the cross-section.
-*/
-#define RADIATOR_EXPOSED_SURFACE_AREA_RATIO 0.04 // (3 cm + 100 cm * sin(3deg))/(2*(3+100 cm)). Unitless ratio.
-
-#define CELL_VOLUME 2500 // Liters in a cell.
-#define MOLES_CELLSTANDARD (ONE_ATMOSPHERE*CELL_VOLUME/(T20C*R_IDEAL_GAS_EQUATION)) // Moles in a 2.5 m^3 cell at 101.325 kPa and 20 C.
-
-#define O2STANDARD 0.21 // Percentage.
-#define N2STANDARD 0.79
-
-#define MOLES_PHORON_VISIBLE 0.7 // Moles in a standard cell after which phoron is visible.
-#define MOLES_O2STANDARD (MOLES_CELLSTANDARD * O2STANDARD) // O2 standard value (21%)
-#define MOLES_N2STANDARD (MOLES_CELLSTANDARD * N2STANDARD) // N2 standard value (79%)
-
-// These are for when a mob breathes poisonous air.
-#define MIN_TOXIN_DAMAGE 1
-#define MAX_TOXIN_DAMAGE 10
-
-#define BREATH_VOLUME 0.5 // Liters in a normal breath.
-#define BREATH_MOLES (ONE_ATMOSPHERE * BREATH_VOLUME / (T20C * R_IDEAL_GAS_EQUATION)) // Amount of air to take a from a tile
-#define BREATH_PERCENTAGE (BREATH_VOLUME / CELL_VOLUME) // Amount of air needed before pass out/suffocation commences.
-#define HUMAN_NEEDED_OXYGEN (MOLES_CELLSTANDARD * BREATH_PERCENTAGE * 0.16)
-
-#define SOUND_MINIMUM_PRESSURE 10
-
-// Pressure limits.
-#define HAZARD_HIGH_PRESSURE 550 // This determines at what pressure the ultra-high pressure red icon is displayed. (This one is set as a constant)
-#define WARNING_HIGH_PRESSURE 325 // This determines when the orange pressure icon is displayed (it is 0.7 * HAZARD_HIGH_PRESSURE)
-#define WARNING_LOW_PRESSURE 50 // This is when the gray low pressure icon is displayed. (it is 2.5 * HAZARD_LOW_PRESSURE)
-#define HAZARD_LOW_PRESSURE 20 // This is when the black ultra-low pressure icon is displayed. (This one is set as a constant)
-
-#define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 // This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount.
-#define BODYTEMP_AUTORECOVERY_DIVISOR 12 // This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive.
-#define BODYTEMP_AUTORECOVERY_MINIMUM 1 // Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50.
-#define BODYTEMP_COLD_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster.
-#define BODYTEMP_HEAT_DIVISOR 6 // Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster.
-#define BODYTEMP_COOLING_MAX -30 // The maximum number of degrees that your body can cool down in 1 tick, when in a cold area.
-#define BODYTEMP_HEATING_MAX 30 // The maximum number of degrees that your body can heat up in 1 tick, when in a hot area.
-
-#define BODYTEMP_HEAT_DAMAGE_LIMIT 360.15 // The limit the human body can take before it starts taking damage from heat.
-#define BODYTEMP_COLD_DAMAGE_LIMIT 260.15 // The limit the human body can take before it starts taking damage from coldness.
-
-#define SPACE_HELMET_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-helmet quality headwear. MUST NOT BE 0.
-#define SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // What min_cold_protection_temperature is set to for space-suit quality jumpsuits or suits. MUST NOT BE 0.
-#define HELMET_MIN_COLD_PROTECTION_TEMPERATURE 160 // For normal helmets.
-#define ARMOR_MIN_COLD_PROTECTION_TEMPERATURE 160 // For armor.
-#define GLOVES_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For some gloves.
-#define SHOE_MIN_COLD_PROTECTION_TEMPERATURE 2.0 // For shoes.
-
-#define SPACE_SUIT_MAX_HEAT_PROTECTION_TEMPERATURE 5000 // These need better heat protect, but not as good heat protect as firesuits.
-#define FIRESUIT_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // What max_heat_protection_temperature is set to for firesuit quality headwear. MUST NOT BE 0.
-#define FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 30000 // For fire-helmet quality items. (Red and white hardhats)
-#define HELMET_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For normal helmets.
-#define ARMOR_MAX_HEAT_PROTECTION_TEMPERATURE 600 // For armor.
-#define GLOVES_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For some gloves.
-#define SHOE_MAX_HEAT_PROTECTION_TEMPERATURE 1500 // For shoes.
-
-// Fire.
-#define FIRE_MIN_STACKS -20
-#define FIRE_MAX_STACKS 25
-#define FIRE_MAX_FIRESUIT_STACKS 20 // If the number of stacks goes above this firesuits won't protect you anymore. If not, you can walk around while on fire like a badass.
-
-#define THROWFORCE_SPEED_DIVISOR 5 // The throwing speed value at which the throwforce multiplier is exactly 1.
-#define THROWNOBJ_KNOCKBACK_SPEED 15 // The minumum speed of a w_class 2 thrown object that will cause living mobs it hits to be knocked back. Heavier objects can cause knockback at lower speeds.
-#define THROWNOBJ_KNOCKBACK_DIVISOR 2 // Affects how much speed the mob is knocked back with.
-
-#define PRESSURE_DAMAGE_COEFFICIENT 4 // The amount of pressure damage someone takes is equal to (pressure / HAZARD_HIGH_PRESSURE)*PRESSURE_DAMAGE_COEFFICIENT, with the maximum of MAX_PRESSURE_DAMAGE.
-#define MAX_HIGH_PRESSURE_DAMAGE 4 // This used to be 20... I got this much random rage for some retarded decision by polymorph?! Polymorph now lies in a pool of blood with a katana jammed in his spleen. ~Errorage --PS: The katana did less than 20 damage to him :(
-#define LOW_PRESSURE_DAMAGE 2 // The amount of damage someone takes when in a low pressure area. (The pressure threshold is so low that it doesn't make sense to do any calculations, so it just applies this flat value).
-
-// Doors!
-#define DOOR_CRUSH_DAMAGE 10
-
-#define HUNGER_FACTOR 0.05 // Factor of how fast mob nutrition decreases
-#define REAGENTS_METABOLISM 0.2 // How many units of reagent are consumed per tick, by default.
-#define REAGENTS_EFFECT_MULTIPLIER (REAGENTS_METABOLISM / 0.4) // By defining the effect multiplier this way, it'll exactly adjust
- // all effects according to how they originally were with the 0.4 metabolism
-
-#define MINIMUM_AIR_RATIO_TO_SUSPEND 0.05 // Minimum ratio of air that must move to/from a tile to suspend group processing
-#define MINIMUM_AIR_TO_SUSPEND (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Minimum amount of air that has to move before a group processing can be suspended
-#define MINIMUM_MOLES_DELTA_TO_MOVE (MOLES_CELLSTANDARD * MINIMUM_AIR_RATIO_TO_SUSPEND) // Either this must be active
-#define MINIMUM_TEMPERATURE_TO_MOVE (T20C + 100) // or this (or both, obviously)
-
-#define MINIMUM_TEMPERATURE_RATIO_TO_SUSPEND 0.012 // Minimum temperature difference before group processing is suspended.
-#define MINIMUM_TEMPERATURE_DELTA_TO_SUSPEND 4
-#define MINIMUM_TEMPERATURE_DELTA_TO_CONSIDER 0.5 // Minimum temperature difference before the gas temperatures are just set to be equal.
-#define MINIMUM_TEMPERATURE_FOR_SUPERCONDUCTION (T20C + 10)
-#define MINIMUM_TEMPERATURE_START_SUPERCONDUCTION (T20C + 200)
-
-// Must be between 0 and 1. Values closer to 1 equalize temperature faster. Should not exceed 0.4, else strange heat flow occurs.
-#define FLOOR_HEAT_TRANSFER_COEFFICIENT 0.4
-#define WALL_HEAT_TRANSFER_COEFFICIENT 0.0
-#define DOOR_HEAT_TRANSFER_COEFFICIENT 0.0
-#define SPACE_HEAT_TRANSFER_COEFFICIENT 0.2 // A hack to partly simulate radiative heat.
-#define OPEN_HEAT_TRANSFER_COEFFICIENT 0.4
-#define WINDOW_HEAT_TRANSFER_COEFFICIENT 0.1 // A hack for now.
-
-// Fire damage.
-#define CARBON_LIFEFORM_FIRE_RESISTANCE (T0C + 200)
-#define CARBON_LIFEFORM_FIRE_DAMAGE 4
-
-// Phoron fire properties.
-#define PHORON_MINIMUM_BURN_TEMPERATURE (T0C + 126) //400 K - autoignite temperature in tanks and canisters - enclosed environments I guess
-#define PHORON_FLASHPOINT (T0C + 246) //519 K - autoignite temperature in air if that ever gets implemented.
-
-//These control the mole ratio of oxidizer and fuel used in the combustion reaction
-#define FIRE_REACTION_OXIDIZER_AMOUNT 3
-#define FIRE_REACTION_FUEL_AMOUNT 2
-
-//These control the speed at which fire burns
-#define FIRE_GAS_BURNRATE_MULT 1
-#define FIRE_LIQUID_BURNRATE_MULT 0.5
-
-//If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out.
-//This ensures that fires don't grind to a near-halt while still remaining active forever.
-#define FIRE_GAS_MIN_BURNRATE 0.1
-#define FIRE_LIQUD_MIN_BURNRATE 0.05
-
-//How many moles of fuel are contained within one solid/liquid fuel volume unit
-#define LIQUIDFUEL_AMOUNT_TO_MOL 1 //mol/volume unit
-
-#define T0C 273.15 // 0.0 degrees celcius
-#define T20C 293.15 // 20.0 degrees celcius
-#define TCMB 2.7 // -270.3 degrees celcius
-
-// XGM gas flags.
-#define XGM_GAS_FUEL 1
-#define XGM_GAS_OXIDIZER 2
-#define XGM_GAS_CONTAMINANT 4
-
-#define TANK_LEAK_PRESSURE (30.*ONE_ATMOSPHERE) // Tank starts leaking.
-#define TANK_RUPTURE_PRESSURE (40.*ONE_ATMOSPHERE) // Tank spills all contents into atmosphere.
-#define TANK_FRAGMENT_PRESSURE (50.*ONE_ATMOSPHERE) // Boom 3x3 base explosion.
-#define TANK_FRAGMENT_SCALE (10.*ONE_ATMOSPHERE) // +1 for each SCALE kPa above threshold. Was 2 atm.
-
-#define HUMAN_STRIP_DELAY 40 // Takes 40ds = 4s to strip someone.
-#define ALIEN_SELECT_AFK_BUFFER 1 // How many minutes that a person can be AFK before not being allowed to be an alien.
-#define NORMPIPERATE 30 // Pipe-insulation rate divisor.
-#define HEATPIPERATE 8 // Heat-exchange pipe insulation.
-#define FLOWFRAC 0.99 // Fraction of gas transfered per process.
-#define SHOES_SLOWDOWN -1.0 // How much shoes slow you down by default. Negative values speed you up.
-
-// Item inventory slot bitmasks.
-#define SLOT_OCLOTHING 1
-#define SLOT_ICLOTHING 2
-#define SLOT_GLOVES 4
-#define SLOT_EYES 8
-#define SLOT_EARS 16
-#define SLOT_MASK 32
-#define SLOT_HEAD 64
-#define SLOT_FEET 128
-#define SLOT_ID 256
-#define SLOT_BELT 512
-#define SLOT_BACK 1024
-#define SLOT_POCKET 2048 // This is to allow items with a w_class of 3 or 4 to fit in pockets.
-#define SLOT_DENYPOCKET 4096 // This is to deny items with a w_class of 2 or 1 from fitting in pockets.
-#define SLOT_TWOEARS 8192
-#define SLOT_TIE 16384
-#define SLOT_HOLSTER 32768 //16th bit
-
-// Flags bitmasks.
-#define STOPPRESSUREDAMAGE 1 // This flag is used on the flags variable for SUIT and HEAD items which stop pressure damage. Note that the flag 1 was previous used as ONBACK, so it is possible for some code to use (flags & 1) when checking if something can be put on your back. Replace this code with (inv_flags & SLOT_BACK) if you see it anywhere
- // To successfully stop you taking all pressure damage you must have both a suit and head item with this flag.
-#define NOBLUDGEON 2 // When an item has this it produces no "X has been hit by Y with Z" message with the default handler.
-#define AIRTIGHT 4 // Functions with internals.
-#define USEDELAY 8 // 1 second extra delay on use. (Can be used once every 2s)
-#define NOSHIELD 16 // Weapon not affected by shield.
-#define CONDUCT 32 // Conducts electricity. (metal etc.)
-#define ON_BORDER 64 // Item has priority to check when entering or leaving.
-#define NOBLOODY 512 // Used for items if they don't want to get a blood overlay.
-#define NODELAY 8192 // 1 second attack-by delay skipped (Can be used once every 0.2s). Most objects have a 1s attack-by delay, which doesn't require a flag.
-
-//Use these flags to indicate if an item obscures the specified slots from view, whereas body_parts_covered seems to be used to indicate what body parts the item protects.
-#define GLASSESCOVERSEYES 256
-#define MASKCOVERSEYES 256 // Get rid of some of the other retardation in these flags.
-#define HEADCOVERSEYES 256 // Feel free to reallocate these numbers for other purposes.
-#define MASKCOVERSMOUTH 512 // On other items, these are just for mask/head.
-#define HEADCOVERSMOUTH 512
-
-#define THICKMATERIAL 256 // From /tg/station: prevents syringes, parapens and hyposprays if the external suit or helmet (if targeting head) has this flag. Example: space suits, biosuit, bombsuits, thick suits that cover your body. (NOTE: flag shared with NOSLIP for shoes)
-#define NOSLIP 256 // Prevents from slipping on wet floors, in space, etc.
-#define OPENCONTAINER 1024 // Is an open container for chemistry purposes.
-#define BLOCK_GAS_SMOKE_EFFECT 2048 // Blocks the effect that chemical clouds would have on a mob -- glasses, mask and helmets ONLY! (NOTE: flag shared with ONESIZEFITSALL)
-#define ONESIZEFITSALL 2048
-#define PHORONGUARD 4096 // Does not get contaminated by phoron.
-#define NOREACT 4096 // Reagents don't react inside this container.
-#define BLOCKHEADHAIR 4 // Temporarily removes the user's hair overlay. Leaves facial hair.
-#define BLOCKHAIR 8192 // Temporarily removes the user's hair, facial and otherwise.
-
-// Flags for pass_flags.
-#define PASSTABLE 1
-#define PASSGLASS 2
-#define PASSGRILLE 4
-#define PASSBLOB 8
-
-// Turf-only flags.
-#define NOJAUNT 1 // This is used in literally one place, turf.dm, to block ethereal jaunt.
-
-// Bitmasks for the flags_inv variable. These determine when a piece of clothing hides another, i.e. a helmet hiding glasses.
-// WARNING: The following flags apply only to the external suit!
-#define HIDEGLOVES 1
-#define HIDESUITSTORAGE 2
-#define HIDEJUMPSUIT 4
-#define HIDESHOES 8
-#define HIDETAIL 16
-
-// WARNING: The following flags apply only to the helmets and masks!
-#define HIDEMASK 1
-#define HIDEEARS 2 // Headsets and such.
-#define HIDEEYES 4 // Glasses.
-#define HIDEFACE 8 // Dictates whether we appear as "Unknown".
-
-// Slots.
-#define slot_back 1
-#define slot_wear_mask 2
-#define slot_handcuffed 3
-#define slot_l_hand 4
-#define slot_r_hand 5
-#define slot_belt 6
-#define slot_wear_id 7
-#define slot_l_ear 8
-#define slot_glasses 9
-#define slot_gloves 10
-#define slot_head 11
-#define slot_shoes 12
-#define slot_wear_suit 13
-#define slot_w_uniform 14
-#define slot_l_store 15
-#define slot_r_store 16
-#define slot_s_store 17
-#define slot_in_backpack 18
-#define slot_legcuffed 19
-#define slot_r_ear 20
-#define slot_legs 21
-#define slot_tie 22
-
-// Inventory slot strings.
-// since numbers cannot be used as associative list keys.
-#define slot_back_str "back"
-#define slot_l_hand_str "slot_l_hand"
-#define slot_r_hand_str "slot_r_hand"
-#define slot_w_uniform_str "w_uniform"
-
-// Bitflags for clothing parts.
-#define HEAD 1
-#define FACE 2
-#define EYES 4
-#define UPPER_TORSO 8
-#define LOWER_TORSO 16
-#define LEG_LEFT 32
-#define LEG_RIGHT 64
-#define LEGS 96 // LEG_LEFT | LEG_RIGHT
-#define FOOT_LEFT 128
-#define FOOT_RIGHT 256
-#define FEET 384 // FOOT_LEFT | FOOT_RIGHT
-#define ARM_LEFT 512
-#define ARM_RIGHT 1024
-#define ARMS 1536 // ARM_LEFT | ARM_RIGHT
-#define HAND_LEFT 2048
-#define HAND_RIGHT 4096
-#define HANDS 6144 // HAND_LEFT | HAND_RIGHT
-#define FULL_BODY 8191
-
-// Bitflags for the percentual amount of protection a piece of clothing which covers the body part offers.
-// Used with human/proc/get_heat_protection() and human/proc/get_cold_protection().
-// The values here should add up to 1, e.g., the head has 30% protection.
-#define THERMAL_PROTECTION_HEAD 0.3
-#define THERMAL_PROTECTION_UPPER_TORSO 0.15
-#define THERMAL_PROTECTION_LOWER_TORSO 0.15
-#define THERMAL_PROTECTION_LEG_LEFT 0.075
-#define THERMAL_PROTECTION_LEG_RIGHT 0.075
-#define THERMAL_PROTECTION_FOOT_LEFT 0.025
-#define THERMAL_PROTECTION_FOOT_RIGHT 0.025
-#define THERMAL_PROTECTION_ARM_LEFT 0.075
-#define THERMAL_PROTECTION_ARM_RIGHT 0.075
-#define THERMAL_PROTECTION_HAND_LEFT 0.025
-#define THERMAL_PROTECTION_HAND_RIGHT 0.025
-
-// Bitflags for mutations.
-#define STRUCDNASIZE 27
-#define UNIDNASIZE 13
-
-// Generic mutations:
-#define TK 1
-#define COLD_RESISTANCE 2
-#define XRAY 3
-#define HULK 4
-#define CLUMSY 5
-#define FAT 6
-#define HUSK 7
-#define NOCLONE 8
-#define LASER 9 // Harm intent - click anywhere to shoot lasers from eyes.
-#define HEAL 10 // Healing people with hands.
-
-#define SKELETON 29
-#define PLANT 30
-
-// Other Mutations:
-#define mNobreath 100 // No need to breathe.
-#define mRemote 101 // Remote viewing.
-#define mRegen 102 // Health regeneration.
-#define mRun 103 // No slowdown.
-#define mRemotetalk 104 // Remote talking.
-#define mMorph 105 // Hanging appearance.
-#define mBlend 106 // Nothing. (seriously nothing)
-#define mHallucination 107 // Hallucinations.
-#define mFingerprints 108 // No fingerprints.
-#define mShock 109 // Insulated hands.
-#define mSmallsize 110 // Table climbing.
-
-// disabilities
-#define NEARSIGHTED 1
-#define EPILEPSY 2
-#define COUGHING 4
-#define TOURETTES 8
-#define NERVOUS 16
-
-// sdisabilities
-#define BLIND 1
-#define MUTE 2
-#define DEAF 4
-
-// /mob/var/stat things.
-#define CONSCIOUS 0
-#define UNCONSCIOUS 1
-#define DEAD 2
-
-// Channel numbers for power.
-#define EQUIP 1
-#define LIGHT 2
-#define ENVIRON 3
-#define TOTAL 4 // For total power used only.
-
-// Bitflags for machine stat variable.
-#define BROKEN 1
-#define NOPOWER 2
-#define POWEROFF 4 // TBD.
-#define MAINT 8 // Under maintenance.
-#define EMPED 16 // Temporary broken by EMP pulse.
-
-// Bitmasks for door switches.
-#define OPEN 1
-#define IDSCAN 2
-#define BOLTS 4
-#define SHOCK 8
-#define SAFE 16
-
-// Metal sheets, glass sheets, and rod stacks.
-#define MAX_STACK_AMOUNT_METAL 50
-#define MAX_STACK_AMOUNT_GLASS 50
-#define MAX_STACK_AMOUNT_RODS 60
-
-#define GAS_O2 (1 << 0)
-#define GAS_N2 (1 << 1)
-#define GAS_PL (1 << 2)
-#define GAS_CO2 (1 << 3)
-#define GAS_N2O (1 << 4)
-
-#define IS_MODE_COMPILED(MODE) (ispath(text2path("/datum/game_mode/"+(MODE))))
-
-// Damage things. TODO: Merge these down to reduce on defines.
-// Way to waste perfectly good damage-type names (BRUTE) on this... If you were really worried about case sensitivity, you could have just used lowertext(damagetype) in the proc.
-#define BRUTE "brute"
-#define BURN "fire"
-#define TOX "tox"
-#define OXY "oxy"
-#define CLONE "clone"
-#define HALLOSS "halloss"
-
-#define CUT "cut"
-#define BRUISE "bruise"
-
-#define STUN "stun"
-#define WEAKEN "weaken"
-#define PARALYZE "paralize"
-#define IRRADIATE "irradiate"
-#define AGONY "agony" // Added in PAIN!
-#define SLUR "slur"
-#define STUTTER "stutter"
-#define EYE_BLUR "eye_blur"
-#define DROWSY "drowsy"
-
-// I hate adding defines like this but I'd much rather deal with bitflags than lists and string searches.
-#define BRUTELOSS 1
-#define FIRELOSS 2
-#define TOXLOSS 4
-#define OXYLOSS 8
-
-// Bitflags defining which status effects could be or are inflicted on a mob.
-#define CANSTUN 1
-#define CANWEAKEN 2
-#define CANPARALYSE 4
-#define CANPUSH 8
-#define LEAPING 16
-#define PASSEMOTES 32 // Mob has a cortical borer or holders inside of it that need to see emotes.
-#define GODMODE 4096
-#define FAKEDEATH 8192 // Replaces stuff like changeling.changeling_fakedeath.
-#define DISFIGURED 16384 // I'll probably move this elsewhere if I ever get wround to writing a bitflag mob-damage system.
-#define XENO_HOST 32768 // Tracks whether we're gonna be a baby alien's mummy.
-
-// Grab levels.
-#define GRAB_PASSIVE 1
-#define GRAB_AGGRESSIVE 2
-#define GRAB_NECK 3
-#define GRAB_UPGRADING 4
-#define GRAB_KILL 5
-
-// Security levels.
-#define SEC_LEVEL_GREEN 0
-#define SEC_LEVEL_BLUE 1
-#define SEC_LEVEL_RED 2
-#define SEC_LEVEL_DELTA 3
-
-#define TRANSITIONEDGE 7 // Distance from edge to move to another z-level.
-
-// A set of constants used to determine which type of mute an admin wishes to apply.
-// Please read and understand the muting/automuting stuff before changing these. MUTE_IC_AUTO, etc. = (MUTE_IC << 1)
-// Therefore there needs to be a gap between the flags for the automute flags.
-#define MUTE_IC 1
-#define MUTE_OOC 2
-#define MUTE_PRAY 4
-#define MUTE_ADMINHELP 8
-#define MUTE_DEADCHAT 16
-#define MUTE_ALL 31
-
-// Number of identical messages required to get the spam-prevention auto-mute thing to trigger warnings and automutes.
-#define SPAM_TRIGGER_WARNING 5
-#define SPAM_TRIGGER_AUTOMUTE 10
-
-// Some constants for DB_Ban
-#define BANTYPE_PERMA 1
-#define BANTYPE_TEMP 2
-#define BANTYPE_JOB_PERMA 3
-#define BANTYPE_JOB_TEMP 4
-#define BANTYPE_ANY_FULLBAN 5 // Used to locate stuff to unban.
-
-// Invisibility constants.
-#define INVISIBILITY_LIGHTING 20
-#define INVISIBILITY_LEVEL_ONE 35
-#define INVISIBILITY_LEVEL_TWO 45
-#define INVISIBILITY_OBSERVER 60
-#define INVISIBILITY_EYE 61
-
-#define SEE_INVISIBLE_LIVING 25
-#define SEE_INVISIBLE_OBSERVER_NOLIGHTING 15
-#define SEE_INVISIBLE_LEVEL_ONE 35
-#define SEE_INVISIBLE_LEVEL_TWO 45
-#define SEE_INVISIBLE_CULT 60
-#define SEE_INVISIBLE_OBSERVER 61
-
-#define SEE_INVISIBLE_MINIMUM 5
-#define INVISIBILITY_MAXIMUM 100
-
-// Object specific defines.
-#define CANDLE_LUM 3 // For how bright candles are.
-
-//Some mob defines below
-#define AI_CAMERA_LUMINOSITY 6
-
-#define BORGMESON 1
-#define BORGTHERM 2
-#define BORGXRAY 4
-
-// Some arbitrary defines to be used by self-pruning global lists. (see master_controller)
-#define PROCESS_KILL 26 // Used to trigger removal from a processing list.
-
-#define HOSTILE_STANCE_IDLE 1
-#define HOSTILE_STANCE_ALERT 2
-#define HOSTILE_STANCE_ATTACK 3
-#define HOSTILE_STANCE_ATTACKING 4
-#define HOSTILE_STANCE_TIRED 5
-
-#define ROUNDSTART_LOGOUT_REPORT_TIME 6000 // Amount of time (in deciseconds) after the rounds starts, that the player disconnect report is issued.
-
-// Organ defines.
-#define ORGAN_CUT_AWAY 1
-#define ORGAN_GAUZED 2
-#define ORGAN_ATTACHABLE 4
-#define ORGAN_BLEEDING 8
-#define ORGAN_BROKEN 32
-#define ORGAN_DESTROYED 64
-#define ORGAN_ROBOT 128
-#define ORGAN_SPLINTED 256
-#define SALVED 512
-#define ORGAN_DEAD 1024
-#define ORGAN_MUTATED 2048
-#define ORGAN_ASSISTED 4096
-
-// Admin permissions. Please don't edit these values without speaking to Errorage first. ~Carn
-#define R_BUILDMODE 1
-#define R_ADMIN 2
-#define R_BAN 4
-#define R_FUN 8
-#define R_SERVER 16
-#define R_DEBUG 32
-#define R_POSSESS 64
-#define R_PERMISSIONS 128
-#define R_STEALTH 256
-#define R_REJUVINATE 512
-#define R_VAREDIT 1024
-#define R_SOUNDS 2048
-#define R_SPAWN 4096
-#define R_MOD 8192
-#define R_MENTOR 16384
-#define R_HOST 32768
-
-#define R_MAXPERMISSION 32768 // This holds the maximum value for a permission. It is used in iteration, so keep it updated.
-
-// Preference toggles.
-#define SOUND_ADMINHELP 1
-#define SOUND_MIDI 2
-#define SOUND_AMBIENCE 4
-#define SOUND_LOBBY 8
-#define CHAT_OOC 16
-#define CHAT_DEAD 32
-#define CHAT_GHOSTEARS 64
-#define CHAT_GHOSTSIGHT 128
-#define CHAT_PRAYER 256
-#define CHAT_RADIO 512
-#define CHAT_ATTACKLOGS 1024
-#define CHAT_DEBUGLOGS 2048
-#define CHAT_LOOC 4096
-#define CHAT_GHOSTRADIO 8192
-#define SHOW_TYPING 16384
-#define CHAT_NOICONS 32768
-
-#define TOGGLES_DEFAULT (SOUND_ADMINHELP|SOUND_MIDI|SOUND_AMBIENCE|SOUND_LOBBY|CHAT_OOC|CHAT_DEAD|CHAT_GHOSTEARS|CHAT_GHOSTSIGHT|CHAT_PRAYER|CHAT_RADIO|CHAT_ATTACKLOGS|CHAT_LOOC)
-
-#define BE_TRAITOR 1
-#define BE_OPERATIVE 2
-#define BE_CHANGELING 4
-#define BE_WIZARD 8
-#define BE_MALF 16
-#define BE_REV 32
-#define BE_ALIEN 64
-#define BE_AI 128
-#define BE_CULTIST 256
-#define BE_MONKEY 512
-#define BE_NINJA 1024
-#define BE_RAIDER 2048
-#define BE_PLANT 4096
-#define BE_MUTINEER 8192
-#define BE_PAI 16384
-
-var/list/be_special_flags = list(
- "Traitor" = BE_TRAITOR,
- "Operative" = BE_OPERATIVE,
- "Changeling" = BE_CHANGELING,
- "Wizard" = BE_WIZARD,
- "Malf AI" = BE_MALF,
- "Revolutionary" = BE_REV,
- "Xenomorph" = BE_ALIEN,
- "Positronic Brain" = BE_AI,
- "Cultist" = BE_CULTIST,
- "Monkey" = BE_MONKEY,
- "Ninja" = BE_NINJA,
- "Raider" = BE_RAIDER,
- "Diona" = BE_PLANT,
- "Mutineer" = BE_MUTINEER,
- "pAI" = BE_PAI
-)
-
-// Age limits on a character.
-#define AGE_MIN 17
-#define AGE_MAX 85
-
-// Languages.
-#define LANGUAGE_HUMAN 1
-#define LANGUAGE_ALIEN 2
-#define LANGUAGE_DOG 4
-#define LANGUAGE_CAT 8
-#define LANGUAGE_BINARY 16
-#define LANGUAGE_OTHER 32768
-
-#define LANGUAGE_UNIVERSAL 65535
-
-#define LEFT 1
-#define RIGHT 2
-
-// For secHUDs and medHUDs and variants. The number is the location of the image on the list hud_list of humans.
-#define HEALTH_HUD 1 // A simple line rounding the mob's number health.
-#define STATUS_HUD 2 // Alive, dead, diseased, etc.
-#define ID_HUD 3 // The job asigned to your ID.
-#define WANTED_HUD 4 // Wanted, released, paroled, security status.
-#define IMPLOYAL_HUD 5 // Loyality implant.
-#define IMPCHEM_HUD 6 // Chemical implant.
-#define IMPTRACK_HUD 7 // Tracking implant.
-#define SPECIALROLE_HUD 8 // AntagHUD image.
-#define STATUS_HUD_OOC 9 // STATUS_HUD without virus DB check for someone being ill.
-#define LIFE_HUD 10 // STATUS_HUD that only reports dead or alive
-
-// Pulse levels, very simplified.
-#define PULSE_NONE 0 // So !M.pulse checks would be possible.
-#define PULSE_SLOW 1 // <60 bpm
-#define PULSE_NORM 2 // 60-90 bpm
-#define PULSE_FAST 3 // 90-120 bpm
-#define PULSE_2FAST 4 // >120 bpm
-#define PULSE_THREADY 5 // Occurs during hypovolemic shock
-#define GETPULSE_HAND 0 // Less accurate. (hand)
-#define GETPULSE_TOOL 1 // More accurate. (med scanner, sleeper, etc.)
-
-// Species flags.
-#define NO_BLOOD 1 // Vessel var is not filled with blood, cannot bleed out.
-#define NO_BREATHE 2 // Cannot suffocate or take oxygen loss.
-#define NO_SCAN 4 // Cannot be scanned in a DNA machine/genome-stolen.
-#define NO_PAIN 8 // Cannot suffer halloss/recieves deceptive health indicator.
-#define NO_SLIP 16 // Cannot fall over.
-#define NO_POISON 32 // Cannot not suffer toxloss.
-#define HAS_SKIN_TONE 64 // Skin tone selectable in chargen. (0-255)
-#define HAS_SKIN_COLOR 128 // Skin colour selectable in chargen. (RGB)
-#define HAS_LIPS 256 // Lips are drawn onto the mob icon. (lipstick)
-#define HAS_UNDERWEAR 512 // Underwear is drawn onto the mob icon.
-#define IS_PLANT 1024 // Is a treeperson.
-#define IS_WHITELISTED 2048 // Must be whitelisted to play.
-#define IS_SYNTHETIC 4096 // Is a machine race.
-#define HAS_EYE_COLOR 8192 // Eye colour selectable in chargen. (RGB)
-#define CAN_JOIN 16384 // Species is selectable in chargen.
-#define IS_RESTRICTED 32768 // Is not a core/normally playable species. (castes, mutantraces)
-#define REGENERATES_LIMBS 65536 // Attempts to regenerate unamputated limbs.
-
-// Language flags.
-#define WHITELISTED 1 // Language is available if the speaker is whitelisted.
-#define RESTRICTED 2 // Language can only be accquired by spawning or an admin.
-#define NONVERBAL 4 // Language has a significant non-verbal component. Speech is garbled without line-of-sight.
-#define SIGNLANG 8 // Language is completely non-verbal. Speech is displayed through emotes for those who can understand.
-#define HIVEMIND 16 // Broadcast to all mobs with this language.
-#define NONGLOBAL 32 // Do not add to general languages list.
-#define INNATE 64 // All mobs can be assumed to speak and understand this language. (audible emotes)
-#define NO_TALK_MSG 128 // Do not show the "\The [speaker] talks into \the [radio]" message
-#define NO_STUTTER 256 // No stuttering, slurring, or other speech problems
-
-//Flags for zone sleeping
-#define ZONE_ACTIVE 1
-#define ZONE_SLEEPING 0
-
-//some colors
-#define COLOR_RED "#FF0000"
-#define COLOR_GREEN "#00FF00"
-#define COLOR_BLUE "#0000FF"
-#define COLOR_CYAN "#00FFFF"
-#define COLOR_PINK "#FF00FF"
-#define COLOR_YELLOW "#FFFF00"
-#define COLOR_ORANGE "#FF9900"
-#define COLOR_WHITE "#FFFFFF"
-#define COLOR_BLACK "#000000"
-
-/*
- * Germs and infections.
-*/
-
-#define GERM_LEVEL_AMBIENT 110 // Maximum germ level you can reach by standing still.
-#define GERM_LEVEL_MOVE_CAP 200 // Maximum germ level you can reach by running around.
-
-#define INFECTION_LEVEL_ONE 100
-#define INFECTION_LEVEL_TWO 500
-#define INFECTION_LEVEL_THREE 1000
-
-/*
- * Shuttles.
-*/
-
-// These define the time taken for the shuttle to get to the space station, and the time before it leaves again.
-#define SHUTTLE_PREPTIME 300 // 5 minutes = 300 seconds - after this time, the shuttle departs centcom and cannot be recalled.
-#define SHUTTLE_LEAVETIME 180 // 3 minutes = 180 seconds - the duration for which the shuttle will wait at the station after arriving.
-#define SHUTTLE_TRANSIT_DURATION 300 // 5 minutes = 300 seconds - how long it takes for the shuttle to get to the station.
-#define SHUTTLE_TRANSIT_DURATION_RETURN 120 // 2 minutes = 120 seconds - for some reason it takes less time to come back, go figure.
-
-// Shuttle moving status.
-#define SHUTTLE_IDLE 0
-#define SHUTTLE_WARMUP 1
-#define SHUTTLE_INTRANSIT 2
-
-// Ferry shuttle processing status.
-#define IDLE_STATE 0
-#define WAIT_LAUNCH 1
-#define FORCE_LAUNCH 2
-#define WAIT_ARRIVE 3
-#define WAIT_FINISH 4
-
-// computer3 error codes, move lower in the file when it passes dev -Sayu
-#define PROG_CRASH 1 // Generic crash.
-#define MISSING_PERIPHERAL 2 // Missing hardware.
-#define BUSTED_ASS_COMPUTER 4 // Self-perpetuating error. BAC will continue to crash forever.
-#define MISSING_PROGRAM 8 // Some files try to automatically launch a program. This is that failing.
-#define FILE_DRM 16 // Some files want to not be copied/moved. This is them complaining that you tried.
-#define NETWORK_FAILURE 32
-
-// Some on_mob_life() procs check for alien races.
-#define IS_DIONA 1
-#define IS_VOX 2
-#define IS_SKRELL 3
-#define IS_UNATHI 4
-#define IS_XENOS 5
-
-#define MAX_GEAR_COST 5 // Used in chargen for accessory loadout limit.
-
-/*
- * Atmospherics Machinery.
-*/
-#define MAX_SIPHON_FLOWRATE 2500 // L/s. This can be used to balance how fast a room is siphoned. Anything higher than CELL_VOLUME has no effect.
-#define MAX_SCRUBBER_FLOWRATE 200 // L/s. Max flow rate when scrubbing from a turf.
-
-// These balance how easy or hard it is to create huge pressure gradients with pumps and filters.
-// Lower values means it takes longer to create large pressures differences.
-// Has no effect on pumping gasses from high pressure to low, only from low to high.
-#define ATMOS_PUMP_EFFICIENCY 2.5
-#define ATMOS_FILTER_EFFICIENCY 2.5
-
-// Will not bother pumping or filtering if the gas source as fewer than this amount of moles, to help with performance.
-#define MINIMUM_MOLES_TO_PUMP 0.01
-#define MINIMUM_MOLES_TO_FILTER 0.1
-
-// The flow rate/effectiveness of various atmos devices is limited by their internal volume,
-// so for many atmos devices these will control maximum flow rates in L/s.
-#define ATMOS_DEFAULT_VOLUME_PUMP 200 // Liters.
-#define ATMOS_DEFAULT_VOLUME_FILTER 200 // L.
-#define ATMOS_DEFAULT_VOLUME_MIXER 200 // L.
-#define ATMOS_DEFAULT_VOLUME_PIPE 70 // L.
-
-// Reagent metabolism defines.
-#define FOOD_METABOLISM 0.4
-#define ALCOHOL_METABOLISM 0.1
-
-// Chemistry.
-#define CHEM_SYNTH_ENERGY 500 // How much energy does it take to synthesize 1 unit of chemical, in Joules.
-
-#define SPEED_OF_LIGHT 3e8 // Approximate.
-#define SPEED_OF_LIGHT_SQ 9e16
-#define FIRE_DAMAGE_MODIFIER 0.0215 // Higher values result in more external fire damage to the skin. (default 0.0215)
-#define AIR_DAMAGE_MODIFIER 2.025 // More means less damage from hot air scalding lungs, less = more damage. (default 2.025)
-#define INFINITY 1.#INF
-#define BACKGROUND_ENABLED 0 // The default value for all uses of set background. Set background can
- // cause gradual lag and is recommended you only turn this on if necessary.
- // 1 will enable set background. 0 will disable set background.
-
-// Setting this much higher than 1024 could allow spammers to DOS the server easily.
-#define MAX_MESSAGE_LEN 1024
-#define MAX_PAPER_MESSAGE_LEN 3072
-#define MAX_BOOK_MESSAGE_LEN 9216
-#define MAX_LNAME_LEN 64
-#define MAX_NAME_LEN 26
-
-// Event defines.
-#define EVENT_LEVEL_MUNDANE 1
-#define EVENT_LEVEL_MODERATE 2
-#define EVENT_LEVEL_MAJOR 3
-
-// Suit sensor levels
-#define SUIT_SENSOR_OFF 0
-#define SUIT_SENSOR_BINARY 1
-#define SUIT_SENSOR_VITAL 2
-#define SUIT_SENSOR_TRACKING 3
-
-// NanoUI flags
-#define STATUS_INTERACTIVE 2 // GREEN Visability
-#define STATUS_UPDATE 1 // ORANGE Visability
-#define STATUS_DISABLED 0 // RED Visability
-#define STATUS_CLOSE -1 // Close the interface
-
-//General-purpose life speed define for plants.
-#define HYDRO_SPEED_MULTIPLIER 1
-
-// Robot AI notifications
-#define ROBOT_NOTIFICATION_NEW_UNIT 1
-#define ROBOT_NOTIFICATION_NEW_NAME 2
-#define ROBOT_NOTIFICATION_NEW_MODULE 3
-#define ROBOT_NOTIFICATION_MODULE_RESET 4
-
-#define DEFAULT_JOB_TYPE /datum/job/assistant
-
-// Appearance change flags
-#define APPEARANCE_UPDATE_DNA 1
-#define APPEARANCE_RACE (2|APPEARANCE_UPDATE_DNA)
-#define APPEARANCE_GENDER (4|APPEARANCE_UPDATE_DNA)
-#define APPEARANCE_SKIN 8
-#define APPEARANCE_HAIR 16
-#define APPEARANCE_HAIR_COLOR 32
-#define APPEARANCE_FACIAL_HAIR 64
-#define APPEARANCE_FACIAL_HAIR_COLOR 128
-#define APPEARANCE_EYE_COLOR 256
-#define APPEARANCE_ALL_HAIR (APPEARANCE_HAIR|APPEARANCE_HAIR_COLOR|APPEARANCE_FACIAL_HAIR|APPEARANCE_FACIAL_HAIR_COLOR)
-#define APPEARANCE_ALL 511
-
-// Antagonist datum flags.
-#define ANTAG_OVERRIDE_JOB 1 // Assigned job is set to MODE when spawning.
-#define ANTAG_OVERRIDE_MOB 2 // Mob is recreated from datum mob_type var when spawning.
-#define ANTAG_CLEAR_EQUIPMENT 4 // All preexisting equipment is purged.
-#define ANTAG_CHOOSE_NAME 8 // Antagonists are prompted to enter a name.
-#define ANTAG_IMPLANT_IMMUNE 16 // Cannot be loyalty implanted.
-#define ANTAG_SUSPICIOUS 32 // Shows up on roundstart report.
-#define ANTAG_HAS_LEADER 64 // Generates a leader antagonist.
-#define ANTAG_HAS_NUKE 128 // Will spawn a nuke at supplied location.
-#define ANTAG_RANDSPAWN 256 // Potentially randomly spawns due to events.
-#define ANTAG_VOTABLE 512 // Can be voted as an additional antagonist before roundstart.
-#define ANTAG_SET_APPEARANCE 1024 // Causes antagonists to use an appearance modifier on spawn.
-// Mode/antag template macros.
-#define MODE_BORER "borer"
-#define MODE_XENOMORPH "xeno"
-#define MODE_LOYALIST "loyalist"
-#define MODE_MUTINEER "mutineer"
-#define MODE_COMMANDO "commando"
-#define MODE_DEATHSQUAD "deathsquad"
-#define MODE_ERT "ert"
-#define MODE_MERCENARY "mercenary"
-#define MODE_NINJA "ninja"
-#define MODE_RAIDER "raider"
-#define MODE_WIZARD "wizard"
-#define MODE_CHANGELING "changeling"
-#define MODE_CULTIST "cultist"
-#define MODE_HIGHLANDER "highlander"
-#define MODE_MONKEY "monkey"
-#define MODE_RENEGADE "renegade"
-#define MODE_REVOLUTIONARY "revolutionary"
-#define MODE_MALFUNCTION "malf"
-#define MODE_TRAITOR "traitor"
-
-#define MIN_SUPPLIED_LAW_NUMBER 15
-#define MAX_SUPPLIED_LAW_NUMBER 50
-
-//Area flags, possibly more to come
-#define RAD_SHIELDED 1 //shielded from radiation, clearly
-
-//intent flags, why wasn't this done the first time?
-#define I_HELP "help"
-#define I_DISARM "disarm"
-#define I_GRAB "grab"
-#define I_HURT "hurt"
-
-/*
- These are used Bump() code for living mobs, in the mob_bump_flag, mob_swap_flags, and mob_push_flags vars to determine whom can bump/swap with whom.
-*/
-#define HUMAN 1
-#define MONKEY 2
-#define ALIEN 4
-#define ROBOT 8
-#define SLIME 16
-#define SIMPLE_ANIMAL 32
-
-#define ALLMOBS (HUMAN|MONKEY|ALIEN|ROBOT|SLIME|SIMPLE_ANIMAL)
-
-#define NEXT_MOVE_DELAY 8
-
-#define DROPLIMB_EDGE 0
-#define DROPLIMB_BLUNT 1
-#define DROPLIMB_BURN 2
-
-// Custom layer definitions, supplementing the default TURF_LAYER, MOB_LAYER, etc.
-#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
-#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
-#define OBFUSCATION_LAYER 14 //Where images covering the view for eyes are put
-#define SCREEN_LAYER 17 //Mob HUD/effects layer
-
-
-/////////////////
-////WIZARD //////
-/////////////////
-
-/* WIZARD SPELL FLAGS */
-#define GHOSTCAST 1 //can a ghost cast it?
-#define NEEDSCLOTHES 2 //does it need the wizard garb to cast? Nonwizard spells should not have this
-#define NEEDSHUMAN 4 //does it require the caster to be human?
-#define Z2NOCAST 8 //if this is added, the spell can't be cast at centcomm
-#define STATALLOWED 16 //if set, the user doesn't have to be conscious to cast. Required for ghost spells
-#define IGNOREPREV 32 //if set, each new target does not overlap with the previous one
-//The following flags only affect different types of spell, and therefore overlap
-//Targeted spells
-#define INCLUDEUSER 64 //does the spell include the caster in its target selection?
-#define SELECTABLE 128 //can you select each target for the spell?
-//AOE spells
-#define IGNOREDENSE 64 //are dense turfs ignored in selection?
-#define IGNORESPACE 128 //are space turfs ignored in selection?
-//End split flags
-#define CONSTRUCT_CHECK 256 //used by construct spells - checks for nullrods
-#define NO_BUTTON 512 //spell won't show up in the HUD with this
-
-//invocation
-#define SpI_SHOUT "shout"
-#define SpI_WHISPER "whisper"
-#define SpI_EMOTE "emote"
-#define SpI_NONE "none"
-
-//upgrading
-#define Sp_SPEED "speed"
-#define Sp_POWER "power"
-#define Sp_TOTAL "total"
-
-//casting costs
-#define Sp_RECHARGE "recharge"
-#define Sp_CHARGES "charges"
-#define Sp_HOLDVAR "holdervar"
-
-///////WIZ END/////////
-
-//singularity defines
-#define STAGE_ONE 1
-#define STAGE_TWO 3
-#define STAGE_THREE 5
-#define STAGE_FOUR 7
-#define STAGE_FIVE 9
-#define STAGE_SUPER 11
-
-// Camera networks
-#define NETWORK_CRESCENT "Crescent"
-#define NETWORK_CIVILIAN_EAST "Civilian East"
-#define NETWORK_CIVILIAN_WEST "Civilian West"
-#define NETWORK_COMMAND "Command"
-#define NETWORK_ENGINE "Engine"
-#define NETWORK_ENGINEERING "Engineering"
-#define NETWORK_ENGINEERING_OUTPOST "Engineering Outpost"
-#define NETWORK_ERT "ERT"
-#define NETWORK_EXODUS "Exodus"
-#define NETWORK_MEDICAL "Medical"
-#define NETWORK_MINE "MINE"
-#define NETWORK_RESEARCH "Research"
-#define NETWORK_RESEARCH_OUTPOST "Research Outpost"
-#define NETWORK_PRISON "Prison"
-#define NETWORK_SECURITY "Security"
-#define NETWORK_TELECOM "Tcomsat"
-#define NETWORK_THUNDER "thunder"
-
-// Languages
-#define LANGUAGE_SOL_COMMON "Sol Common"
-#define LANGUAGE_UNATHI "Sinta'unathi"
-#define LANGUAGE_SIIK_MAAS "Siik'maas"
-#define LANGUAGE_SIIK_TAJR "Siik'tajr"
-#define LANGUAGE_SKRELLIAN "Skrellian"
-#define LANGUAGE_ROOTSPEAK "Rootspeak"
-#define LANGUAGE_TRADEBAND "Tradeband"
-#define LANGUAGE_GUTTER "Gutter"
diff --git a/code/world.dm b/code/world.dm
index 58823fec88a..e53096574e3 100644
--- a/code/world.dm
+++ b/code/world.dm
@@ -1,3 +1,14 @@
+
+/*
+ The initialization of the game happens roughly like this:
+
+ 1. All global variables are initialized (including the global_init instance).
+ 2. The map is initialized, and map objects are created.
+ 3. world/New() runs, creating the process scheduler (and the old master controller) and spawning their setup.
+ 4. processScheduler/setup() runs, creating all the processes. game_controller/setup() runs, calling initialize() on all movable atoms in the world.
+ 5. The gameticker is created.
+
+*/
var/global/datum/global_init/init = new ()
/*
@@ -8,7 +19,10 @@ var/global/datum/global_init/init = new ()
makeDatumRefLists()
load_configuration()
- qdel(src)
+ initialize_chemical_reagents()
+ initialize_chemical_reactions()
+
+ qdel(src) //we're done
/world
@@ -55,9 +69,23 @@ var/global/datum/global_init/init = new ()
// Set up roundstart seed list.
plant_controller = new()
- //Create the asteroid Z-level.
+ // This is kinda important. Set up details of what the hell things are made of.
+ populate_material_list()
+
if(config.generate_asteroid)
- new /datum/random_map(null,13,32,5,217,223)
+ // These values determine the specific area that the map is applied to.
+ // If you do not use the official Baycode moonbase map, you will need to change them.
+ //Create the mining Z-level.
+ new /datum/random_map/automata/cave_system(null,1,1,5,255,255)
+ //new /datum/random_map/noise/volcanism(null,1,1,5,255,255) // Not done yet! Pretty, though.
+ // Create the mining ore distribution map.
+ new /datum/random_map/noise/ore(null, 1, 1, 5, 64, 64)
+ // Update all turfs to ensure everything looks good post-generation. Yes,
+ // it's brute-forcey, but frankly the alternative is a mine turf rewrite.
+ for(var/turf/simulated/mineral/M in world) // Ugh.
+ M.updateMineralOverlays()
+ for(var/turf/simulated/floor/plating/airless/asteroid/M in world) // Uuuuuugh.
+ M.updateMineralOverlays()
// Create autolathe recipes, as above.
populate_lathe_recipes()
@@ -75,8 +103,6 @@ var/global/datum/global_init/init = new ()
spawn(3000) //so we aren't adding to the round-start lag
if(config.ToRban)
ToRban_autoupdate()
-/* if(config.kick_inactive) // handled in scheduler
- KickInactiveClients()*/
#undef RECOMMENDED_VERSION
@@ -215,22 +241,6 @@ var/world_topic_spam_protect_time = world.timeofday
..(reason)
-
-#define INACTIVITY_KICK 6000 //10 minutes in ticks (approx.)
-/world/proc/KickInactiveClients()
- spawn(-1)
- set background = 1
- while(1)
- sleep(INACTIVITY_KICK)
- for(var/client/C in clients)
- if(C.is_afk(INACTIVITY_KICK))
- if(!istype(C.mob, /mob/dead))
- log_access("AFK: [key_name(C)]")
- C << "\red You have been inactive for more than 10 minutes and have been disconnected."
- del(C)
-//#undef INACTIVITY_KICK
-
-
/hook/startup/proc/loadMode()
world.load_mode()
return 1
@@ -332,13 +342,8 @@ var/world_topic_spam_protect_time = world.timeofday
else if (n > 0)
features += "~[n] player"
- /*
- is there a reason for this? the byond site shows 'hosted by X' when there is a proper host already.
- if (host)
- features += "hosted by [host]"
- */
- if (!host && config && config.hostedby)
+ if (config && config.hostedby)
features += "hosted by [config.hostedby]"
if (features)
diff --git a/config/example/config.txt b/config/example/config.txt
index 81df54ac3f7..8b4b6993d0e 100644
--- a/config/example/config.txt
+++ b/config/example/config.txt
@@ -70,8 +70,8 @@ LOG_PDA
## sql switching
# SQL_ENABLED
-## disconnect players who did nothing during 10 minutes
-# KICK_INACTIVE
+## disconnect players who did nothing during the set amount of minutes
+# KICK_INACTIVE 10
## Use Mentors instead of Moderators. Mentors are designed with the idea that
###they help in pushing new people to be better at roleplay. If you uncomment
@@ -103,6 +103,9 @@ TRAITOR_SCALING
## make ERT's be only called by admins
#ERT_ADMIN_ONLY
+## If uncommented, votes can be called to add extra antags to the round.
+#ALLOW_EXTRA_ANTAGS
+
## If security is prohibited from being most antagonists
#PROTECT_ROLES_FROM_ANTAGONIST
@@ -177,9 +180,8 @@ GUEST_BAN
## Wiki address
# WIKIURL http://example.com
-## Rules address - where the rules button sends you.
-# RULESURL http://example.com
-
+## GitHub address
+# GITHUBURL https://github.com/example-user/example-repository
## Ban appeals URL - usually for a forum or wherever people should go to contact your admins.
# BANAPPEALS http://example.com
diff --git a/config/example/custom_items.txt b/config/example/custom_items.txt
index f4bb1a7028b..79fb05a4c18 100644
--- a/config/example/custom_items.txt
+++ b/config/example/custom_items.txt
@@ -1 +1,41 @@
-ckey: name: /path/to/obj
+##
+# Custom items go here. They are modifications of existing paths; look at the example for details.
+# Item will spawn if the target has one of the req_titles and if their on-spawn ID has the required access level.
+# req_access is going to be a shit to maintain since the config file can't grab constants and has to use integers, use it minimally.
+# Separate titles with a single comma and a space (', ') or they'll bork.
+#
+# EX:
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/toy/plushie
+# item_name: ugly plush toy
+# item_icon: flagmask
+# item_desc: It's truly hideous.
+# req_titles: Assistant, Security Officer
+# req_access: 1
+# }
+#
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/device/kit/paint
+# item_name: APLU customisation kit
+# item_desc: A customisation kit with all the parts needed to turn an APLU into a "Titan's Fist" model.
+# kit_name: APLU "Titan's Fist"
+# kit_desc: Looks like an overworked, under-maintained Ripley with some horrific damage.
+# kit_icon: titan
+# additional_data: ripley, firefighter
+# }
+#
+# {
+# ckey: zuhayr
+# character_name: Jane Doe
+# item_path: /obj/item/device/kit/suit
+# item_name: salvage suit customisation kit
+# item_desc: A customisation kit with all the parts needed to convert a suit.
+# kit_name: salvage
+# kit_desc: An orange voidsuit. Reinforced!
+# kit_icon: salvage
+# }
+##
diff --git a/html/changelog.html b/html/changelog.html
index 91691055939..cb99a616023 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -56,6 +56,256 @@
-->
+ 05 June 2015
+ PsiOmegaDelta updated:
+
+ - Split stacks no longer lose their coloring.
+ - Can no longer merge cables of different colors.
+ - Blobs and simple mobs now attack all external organs instead of a subset. The overall damage remains the same but the number of fractures caused will, in general, be fewer.
+ - Spider nurses now have a chance of injecting their victims with spider eggs which eventually hatch. If the limb is removed from the host, the host dies, or the spiderling has matured sufficiently it will crawl out into freedom. Medical scanners will pick upp eggs and spiderlings as foreign bodies.
+
+ Yoshax updated:
+
+ - Makes hyposprays start empty instead of filled with Tricord.
+ - Makes the special wizard projectile staffs, Animate, Change, Focus and any future ones only usable by wizards. Also makes it so only wizards can use spellbooks and teleportation scrolls.
+
+
+ 04 June 2015
+ PsiOmegaDelta updated:
+
+ - AI eyes can now be found in the observer follow list.
+ - Synths can now review all law modules that can be found on the station from their law manager.
+ - Synths can state these laws if desired, however this is strongly discouraged unless subverted/malfunctioning.
+ - Astral projecting mobs, such as wizards or cultists, may no longer respawn as something else while their body lives.
+
+ Techhead updated:
+
+ - Prison break event has been expanded to include Virology or Xenobiology
+ - Prison break event will warn Enginering and the AI beforehand so they can take preventive measures.
+ - Disabling area power will now prevent doors from opening during the event
+
+
+ 02 June 2015
+ Techhead updated:
+
+ - Re-adds extended capacity emergency oxygen tanks to relevant jobs.
+
+
+ 30 May 2015
+ Atlantis updated:
+
+ - Malfunction Overhaul - Whole gamemode was completely reworked from scratch. Most old abilities have been removed and quite a lot of new abilities was added. AI also has to hack APCs to unlock higher tier abilities faster, instead of having access to them from the round start. Most forced things, such as, shuttle recalling were removed and are instead controlled by the AI. Code is fully modular allowing for future modifications.
+
+ HarpyEagle updated:
+
+ - Fixes Engineer ERT gloves not being insulated.
+ - IV stands are no longer bullet shields. They also allow mice, drones, pAIs et al to pass though.
+
+ Kelenius updated:
+
+ - AI now hears LOOC both around its eye and its core, and speaks in LOOC around its eye. Keep in mind that you won't hear and won't be heard if there is a wall between your eye and the target.
+
+ PsiOmegaDelta updated:
+
+ - You can now review the server revision date and hash by using the 'Show Server Revision' verb in the OOC category.
+
+
+ 27 May 2015
+ PsiOmegaDelta updated:
+
+ - The inactive check process now respects client holder status and can be configured how long clients may remain inactive before being kicked.
+
+ Zuhayr updated:
+
+ - Unfolded pAIs can now be scooped up and worn as hats.
+ - Scoop-up behavior is now standardized to selecting help intent and dragging their icon onto yours.
+
+
+ 26 May 2015
+ Atlantis updated:
+
+ - NanoUI for Robotics Control Console
+ - NanoUI for Supermatter Crystal - AI/Robot only, purely informational
+
+ Chinsky updated:
+
+ - Meat limbs now can be attached. Use limb on missing area, then hemostat to finalize it.
+ - Limbs from other races can be now attached. They'll cause rejection, but it can be kept at bay with spaceacilline to some point. Species special attack is carried over too, i.e. you can clawn people if you sew a cathand to yourself.
+ - Limbs that are left in open will rot in ~7 minutes. Use freezers or cryobags to stop it. You can still attach them, but you wish you couldn't.
+
+ PsiOmegaDelta updated:
+
+ - Both the pulse taker and target must now remain still for the duration of the check or it will fail.
+
+ RavingManiac updated:
+
+ - Tape recorders now record hearable emotes and action messages (e.g. gunshots).
+ - You can now see actions from inside mechs and closets.
+
+ Techhead updated:
+
+ - Removed gaseous reagents from the chemistry system and replaced with real-world organic chemistry precursors.
+ - Hydrogen has been replaced with hydrazine, a highly toxic, flammable liquid.
+ - Oxygen has been replaced with acetone, a mildly toxic liquid. Ethanol's ink-sovlent capabilities have been copied to it.
+ - Chlorine has been replaced with hydrochloric acid. It is a stronger acid than sulphuric but less toxic.
+ - Nitrogen has been replaced with ammonia. Ammonia now acts as a Dexalin-equivalent for Vox.
+ - Flourine has also been replaced with hydrazine in its one recipe. Flourosurficant has been renamed azosurficant.
+ - Being splashed with liquid Phoron will burn eyes and contaminate clothes like being exposed to Phoron gas.
+
+ Zuhayr updated:
+
+ - Added a ghost requisition system for posibrains and living plants.
+ - Added attack_ghost() to hydro trays and posibrains to allow ghosts to enter them.
+ - Prosthetic limbs are now only repairable with welders/cable coils if they have suffered below 30 combined damage.
+ - Surgery steps that cause no pain and have no failure wounding have been added: screwdriver for 'incision', crowbar to open, multitool to 'decouple' a prosthetic organ. Hemostat is still used to take an organ out.
+ - Using a welder or a cable coil as a surgical tool after opening a maintenance hatch will repair damage beyond the 30 damage cap. In other words, severe damage to robolimbs requires expert repair from someone else.
+ - Eye and brain surgery were removed; they predate the current organ system and are redundant.
+ - IPC are now simply full prosthetic bodies using a specific manufacturer (Morpheus Cyberkinetics).
+ - IPC can 'recharge' in a cyborg station to regain nutriment. They no longer interface with APCs.
+ - NO_BLOOD flag now bypasses ingested and blood reagent processing.
+ - NO_SCAN now bypasses mutagen reagent effects.
+ - Cyborg analyzers now show damage to prosthetic limbs and organs on humans.
+ - Prosthetic EMP damage was reduced.
+ - Several organ files were split up/moved around.
+
+
+ 22 May 2015
+ Ccomp5950 updated:
+
+ - Beepsky no longer kills goats.
+ - Goats will move towards vines that are 4 spaces away now instead of 1
+ - Goats will eat the spawning plants for vines as well as the vines themselves.
+
+ Chinsky updated:
+
+ - Ghetto diagnosis. Grab patient, aim at bodypart you want to check, click on them with help intent. This will tell you about their wounds, fractures and other oddities (toxins/oxygen) for that bodypart.
+ - Fractures are visible on very damaged limbs. Dislocations are always visible. Surgery incisions now visible too.
+ - Stethoscopes actually make sense now. They care for heart/lungs status when reporting pulse and respiration now.
+
+ HarpyEagle updated:
+
+ - Re-implemented fuel fires. Tweaked fire behaviour overall.
+
+ Yoshax updated:
+
+ - Bear traps now do damage when stood on, enough to break bones! Bear traps can now affect any limb of a person who is on the ground, including head! Bear traps are no longer legcuffs and instead embed in the limb they attack.
+ - Bear traps now take several seconds to deploy and cannot be picked up when armed, they must be disarmed by clicking on them. They also cannot be moved then they are deployed.
+
+ Zuhayr updated:
+
+ - Massive material refactor. Walls, beds, chairs, stools, tables, ashtrays, knives, baseball bats, axes, simple doors, barricades, so on.
+ - Tables are now built via steel then another sheet on the resulting frame. They can then be reinforced by dragging a stack of sheets onto the table.
+ - Walls are built with steel for girders, then right-click the girder and select the reinforce verb while holding a stack, then click the girders with a final sheet.
+ - Various things can be built with various sheet types. Experiment! Just keep in mind that uranium is now radioactive and phoron is now flammable.
+
+
+ 18 May 2015
+ Hubblenaut updated:
+
+ - Adds a light for available backup power on airlocks.
+
+ Kelenius updated:
+
+ - There has been a big update to the reagent system. A full-ish changelog can be found here: http://pastebin.com/imHXTRHz. In particular:
+ - Reagents now differentiate between being ingested (food, pills, smoke), injected (syringes, IV drips), and put on the skin (sprays, beaker splashing).
+ - Injecting food and drinks will cause bad effects.
+ - Healing reagents, generally speaking, have stronger effects when injected.
+ - Toxins now work slower and deal more damage. Seek medical help!
+ - Alcohol robustness has been lowered.
+ - Acid will no longer melt large numbers of items at once.
+ - Synaptizine is no longer hilariously deadly.
+
+ Loganbacca updated:
+
+ - Changed MULE destination selection to be list based.
+
+ PsiOmegaDelta updated:
+
+ - Destroying a camera by brute force now has a chance to break the wiring within.
+ - Turf are now processed. This, for example, causes radioactive walls to regularly irradiate nearby mobs.
+ - Welders should now always update their icon and inhand states properly.
+
+
+ 17 May 2015
+ PsiOmegaDelta updated:
+
+ - Teleporter artifacts should no longer teleport mobs inside objects.
+
+
+ 16 May 2015
+ GinjaNinja32 updated:
+
+ - Rewrote tables. To construct a table, use steel to make a table frame, then plate the frame with a material such as steel, gold, wood, etc. Hold a stack in your hand and drag it to the table to reinforce it. To deconstruct a table, use a screwdriver to remove the reinforcements (if present), then a wrench to remove the plating, and a wrench again to dismantle the frame. Use a welder to repair any damage. Use a carpet tile on a table to add felt, and a crowbar to remove it.
+
+ HarpyEagle updated:
+
+ - Adds tail animations for tajaran and unathi. Animations are controlled using emotes.
+
+
+ 14 May 2015
+ PsiOmegaDelta updated:
+
+ - Should now be more evident that the brig disposal chute sends its goods to the common brig area.
+ - Cells now drain when using more charge than what is available.
+ - The rig stealth module now requires as much power to run as the energy blade module.
+
+ Techhead updated:
+
+ - Vox will spawn with emergency nitrogen tanks in their survival boxes.
+ - Diona will spawn with an emergency flare instead of a survival box.
+ - Engineers no longer spawn with extended-capacity oxygen tanks.
+ - Vox spawning without backpacks will have their nitrogen tank equipped to their back.
+ - The Bartender's spare beanbag shells have been moved into bar backroom with the shotgun.
+ - Portable air pumps now fill based on external/airtank pressure when pumping in.
+
+
+ 12 May 2015
+ Dennok updated:
+
+ - New buildmode icons made by BartNixon.
+
+ HarpyEagle updated:
+
+ - Masks and helmets that cover the face block feeding food, drinks, and pills.
+
+ MrSnapwalk updated:
+
+ - Added seven new AI core displays.
+ - Changed the pAI sprite and added several new expressions.
+
+ PsiOmegaDelta updated:
+
+ - The space vine event now comes with a station announcement.
+
+
+ 11 May 2015
+ Mloc updated:
+
+ - Rewritten lighting system.
+ - Better coloured lights.
+ - Animated transitions.
+
+ PsiOmegaDelta updated:
+
+ - As an observer, using antagHUD should now always restrict you from respawning without admin intervention.
+
+ Techhead updated:
+
+ - Voidsuits can have tanks inserted into the storage slot.
+ - Voidsuits display helpful information on their contents on examine.
+ - Magboots can be equipped over other shoes. Except other magboots.
+
+
+ 10 May 2015
+ GinjaNinja32 updated:
+
+ - Acting jobs on the manifest will now sort with their non-acting counterparts. All assignments beginning with the word 'acting', 'temporary', or 'interim' will do this.
+
+ Yoshax updated:
+
+ - Removes sleepy chems from being cloned, adds a consistent period of 30 tick sleep.
+
+
09 May 2015
Yoshax updated:
diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml
index f51f13ea817..af6233ae6ca 100644
--- a/html/changelogs/.all_changelog.yml
+++ b/html/changelogs/.all_changelog.yml
@@ -1731,3 +1731,235 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
Yoshax:
- rscadd: Maps in the top mounted 9mm practice rounds, .45 practice rounds, and
practice shotgun shells into the armory.
+2015-05-10:
+ GinjaNinja32:
+ - rscadd: Acting jobs on the manifest will now sort with their non-acting counterparts.
+ All assignments beginning with the word 'acting', 'temporary', or 'interim'
+ will do this.
+ Yoshax:
+ - tweak: Removes sleepy chems from being cloned, adds a consistent period of 30
+ tick sleep.
+2015-05-11:
+ Mloc:
+ - experiment: Rewritten lighting system.
+ - rscadd: Better coloured lights.
+ - rscadd: Animated transitions.
+ PsiOmegaDelta:
+ - bugfix: As an observer, using antagHUD should now always restrict you from respawning
+ without admin intervention.
+ Techhead:
+ - rscadd: Voidsuits can have tanks inserted into the storage slot.
+ - rscadd: Voidsuits display helpful information on their contents on examine.
+ - rscadd: Magboots can be equipped over other shoes. Except other magboots.
+2015-05-12:
+ Dennok:
+ - imageadd: New buildmode icons made by BartNixon.
+ HarpyEagle:
+ - rscadd: Masks and helmets that cover the face block feeding food, drinks, and
+ pills.
+ MrSnapwalk:
+ - imageadd: Added seven new AI core displays.
+ - tweak: Changed the pAI sprite and added several new expressions.
+ PsiOmegaDelta:
+ - rscadd: The space vine event now comes with a station announcement.
+2015-05-14:
+ PsiOmegaDelta:
+ - maptweak: Should now be more evident that the brig disposal chute sends its goods
+ to the common brig area.
+ - bugfix: Cells now drain when using more charge than what is available.
+ - tweak: The rig stealth module now requires as much power to run as the energy
+ blade module.
+ Techhead:
+ - rscadd: Vox will spawn with emergency nitrogen tanks in their survival boxes.
+ - rscadd: Diona will spawn with an emergency flare instead of a survival box.
+ - rscdel: Engineers no longer spawn with extended-capacity oxygen tanks.
+ - bugfix: Vox spawning without backpacks will have their nitrogen tank equipped
+ to their back.
+ - tweak: The Bartender's spare beanbag shells have been moved into bar backroom
+ with the shotgun.
+ - bugfix: Portable air pumps now fill based on external/airtank pressure when pumping
+ in.
+2015-05-16:
+ GinjaNinja32:
+ - rscadd: Rewrote tables. To construct a table, use steel to make a table frame,
+ then plate the frame with a material such as steel, gold, wood, etc. Hold a
+ stack in your hand and drag it to the table to reinforce it. To deconstruct
+ a table, use a screwdriver to remove the reinforcements (if present), then a
+ wrench to remove the plating, and a wrench again to dismantle the frame. Use
+ a welder to repair any damage. Use a carpet tile on a table to add felt, and
+ a crowbar to remove it.
+ HarpyEagle:
+ - rscadd: Adds tail animations for tajaran and unathi. Animations are controlled
+ using emotes.
+2015-05-17:
+ PsiOmegaDelta:
+ - bugfix: Teleporter artifacts should no longer teleport mobs inside objects.
+2015-05-18:
+ Hubblenaut:
+ - rscadd: Adds a light for available backup power on airlocks.
+ Kelenius:
+ - tweak: 'There has been a big update to the reagent system. A full-ish changelog
+ can be found here: http://pastebin.com/imHXTRHz. In particular:'
+ - tweak: Reagents now differentiate between being ingested (food, pills, smoke),
+ injected (syringes, IV drips), and put on the skin (sprays, beaker splashing).
+ - tweak: Injecting food and drinks will cause bad effects.
+ - tweak: Healing reagents, generally speaking, have stronger effects when injected.
+ - tweak: Toxins now work slower and deal more damage. Seek medical help!
+ - tweak: Alcohol robustness has been lowered.
+ - tweak: Acid will no longer melt large numbers of items at once.
+ - tweak: Synaptizine is no longer hilariously deadly.
+ Loganbacca:
+ - tweak: Changed MULE destination selection to be list based.
+ PsiOmegaDelta:
+ - tweak: Destroying a camera by brute force now has a chance to break the wiring
+ within.
+ - rscadd: Turf are now processed. This, for example, causes radioactive walls to
+ regularly irradiate nearby mobs.
+ - bugfix: Welders should now always update their icon and inhand states properly.
+2015-05-22:
+ Ccomp5950:
+ - bugfix: Beepsky no longer kills goats.
+ - tweak: Goats will move towards vines that are 4 spaces away now instead of 1
+ - bugfix: Goats will eat the spawning plants for vines as well as the vines themselves.
+ Chinsky:
+ - rscadd: Ghetto diagnosis. Grab patient, aim at bodypart you want to check, click
+ on them with help intent. This will tell you about their wounds, fractures and
+ other oddities (toxins/oxygen) for that bodypart.
+ - rscadd: Fractures are visible on very damaged limbs. Dislocations are always visible.
+ Surgery incisions now visible too.
+ - rscadd: Stethoscopes actually make sense now. They care for heart/lungs status
+ when reporting pulse and respiration now.
+ HarpyEagle:
+ - rscadd: Re-implemented fuel fires. Tweaked fire behaviour overall.
+ Yoshax:
+ - tweak: Bear traps now do damage when stood on, enough to break bones! Bear traps
+ can now affect any limb of a person who is on the ground, including head! Bear
+ traps are no longer legcuffs and instead embed in the limb they attack.
+ - tweak: Bear traps now take several seconds to deploy and cannot be picked up when
+ armed, they must be disarmed by clicking on them. They also cannot be moved
+ then they are deployed.
+ Zuhayr:
+ - rscadd: Massive material refactor. Walls, beds, chairs, stools, tables, ashtrays,
+ knives, baseball bats, axes, simple doors, barricades, so on.
+ - rscadd: Tables are now built via steel then another sheet on the resulting frame.
+ They can then be reinforced by dragging a stack of sheets onto the table.
+ - rscadd: Walls are built with steel for girders, then right-click the girder and
+ select the reinforce verb while holding a stack, then click the girders with
+ a final sheet.
+ - rscadd: Various things can be built with various sheet types. Experiment! Just
+ keep in mind that uranium is now radioactive and phoron is now flammable.
+2015-05-26:
+ Atlantis:
+ - rscadd: NanoUI for Robotics Control Console
+ - rscadd: NanoUI for Supermatter Crystal - AI/Robot only, purely informational
+ Chinsky:
+ - rscadd: Meat limbs now can be attached. Use limb on missing area, then hemostat
+ to finalize it.
+ - rscadd: Limbs from other races can be now attached. They'll cause rejection, but
+ it can be kept at bay with spaceacilline to some point. Species special attack
+ is carried over too, i.e. you can clawn people if you sew a cathand to yourself.
+ - rscadd: Limbs that are left in open will rot in ~7 minutes. Use freezers or cryobags
+ to stop it. You can still attach them, but you wish you couldn't.
+ PsiOmegaDelta:
+ - tweak: Both the pulse taker and target must now remain still for the duration
+ of the check or it will fail.
+ RavingManiac:
+ - rscadd: Tape recorders now record hearable emotes and action messages (e.g. gunshots).
+ - bugfix: You can now see actions from inside mechs and closets.
+ Techhead:
+ - rscadd: Removed gaseous reagents from the chemistry system and replaced with real-world
+ organic chemistry precursors.
+ - rscadd: Hydrogen has been replaced with hydrazine, a highly toxic, flammable liquid.
+ - rscadd: Oxygen has been replaced with acetone, a mildly toxic liquid. Ethanol's
+ ink-sovlent capabilities have been copied to it.
+ - rscadd: Chlorine has been replaced with hydrochloric acid. It is a stronger acid
+ than sulphuric but less toxic.
+ - tweak: Nitrogen has been replaced with ammonia. Ammonia now acts as a Dexalin-equivalent
+ for Vox.
+ - tweak: Flourine has also been replaced with hydrazine in its one recipe. Flourosurficant
+ has been renamed azosurficant.
+ - tweak: Being splashed with liquid Phoron will burn eyes and contaminate clothes
+ like being exposed to Phoron gas.
+ Zuhayr:
+ - rscadd: Added a ghost requisition system for posibrains and living plants.
+ - rscadd: Added attack_ghost() to hydro trays and posibrains to allow ghosts to
+ enter them.
+ - rscadd: Prosthetic limbs are now only repairable with welders/cable coils if they
+ have suffered below 30 combined damage.
+ - rscadd: 'Surgery steps that cause no pain and have no failure wounding have been
+ added: screwdriver for ''incision'', crowbar to open, multitool to ''decouple''
+ a prosthetic organ. Hemostat is still used to take an organ out.'
+ - rscadd: Using a welder or a cable coil as a surgical tool after opening a maintenance
+ hatch will repair damage beyond the 30 damage cap. In other words, severe damage
+ to robolimbs requires expert repair from someone else.
+ - rscdel: Eye and brain surgery were removed; they predate the current organ system
+ and are redundant.
+ - rscadd: IPC are now simply full prosthetic bodies using a specific manufacturer
+ (Morpheus Cyberkinetics).
+ - rscadd: IPC can 'recharge' in a cyborg station to regain nutriment. They no longer
+ interface with APCs.
+ - rscadd: NO_BLOOD flag now bypasses ingested and blood reagent processing.
+ - rscadd: NO_SCAN now bypasses mutagen reagent effects.
+ - rscadd: Cyborg analyzers now show damage to prosthetic limbs and organs on humans.
+ - tweak: Prosthetic EMP damage was reduced.
+ - tweak: Several organ files were split up/moved around.
+2015-05-27:
+ PsiOmegaDelta:
+ - tweak: The inactive check process now respects client holder status and can be
+ configured how long clients may remain inactive before being kicked.
+ Zuhayr:
+ - rscadd: Unfolded pAIs can now be scooped up and worn as hats.
+ - tweak: Scoop-up behavior is now standardized to selecting help intent and dragging
+ their icon onto yours.
+2015-05-30:
+ Atlantis:
+ - rscadd: Malfunction Overhaul - Whole gamemode was completely reworked from scratch.
+ Most old abilities have been removed and quite a lot of new abilities was added.
+ AI also has to hack APCs to unlock higher tier abilities faster, instead of
+ having access to them from the round start. Most forced things, such as, shuttle
+ recalling were removed and are instead controlled by the AI. Code is fully modular
+ allowing for future modifications.
+ HarpyEagle:
+ - bugfix: Fixes Engineer ERT gloves not being insulated.
+ - tweak: IV stands are no longer bullet shields. They also allow mice, drones, pAIs
+ et al to pass though.
+ Kelenius:
+ - tweak: AI now hears LOOC both around its eye and its core, and speaks in LOOC
+ around its eye. Keep in mind that you won't hear and won't be heard if there
+ is a wall between your eye and the target.
+ PsiOmegaDelta:
+ - rscadd: You can now review the server revision date and hash by using the 'Show
+ Server Revision' verb in the OOC category.
+2015-06-02:
+ Techhead:
+ - rscadd: Re-adds extended capacity emergency oxygen tanks to relevant jobs.
+2015-06-04:
+ PsiOmegaDelta:
+ - rscadd: AI eyes can now be found in the observer follow list.
+ - rscadd: Synths can now review all law modules that can be found on the station
+ from their law manager.
+ - rscadd: Synths can state these laws if desired, however this is strongly discouraged
+ unless subverted/malfunctioning.
+ - bugfix: Astral projecting mobs, such as wizards or cultists, may no longer respawn
+ as something else while their body lives.
+ Techhead:
+ - rscadd: Prison break event has been expanded to include Virology or Xenobiology
+ - rscadd: Prison break event will warn Enginering and the AI beforehand so they
+ can take preventive measures.
+ - bugfix: Disabling area power will now prevent doors from opening during the event
+2015-06-05:
+ PsiOmegaDelta:
+ - bugfix: Split stacks no longer lose their coloring.
+ - tweak: Can no longer merge cables of different colors.
+ - tweak: Blobs and simple mobs now attack all external organs instead of a subset.
+ The overall damage remains the same but the number of fractures caused will,
+ in general, be fewer.
+ - rscadd: Spider nurses now have a chance of injecting their victims with spider
+ eggs which eventually hatch. If the limb is removed from the host, the host
+ dies, or the spiderling has matured sufficiently it will crawl out into freedom.
+ Medical scanners will pick upp eggs and spiderlings as foreign bodies.
+ Yoshax:
+ - tweak: Makes hyposprays start empty instead of filled with Tricord.
+ - tweak: Makes the special wizard projectile staffs, Animate, Change, Focus and
+ any future ones only usable by wizards. Also makes it so only wizards can use
+ spellbooks and teleportation scrolls.
diff --git a/html/changelogs/GinjaNinja32_acting_manifest.yml b/html/changelogs/GinjaNinja32_acting_manifest.yml
deleted file mode 100644
index 18f2dd32e62..00000000000
--- a/html/changelogs/GinjaNinja32_acting_manifest.yml
+++ /dev/null
@@ -1,5 +0,0 @@
-author: GinjaNinja32
-delete-after: True
-
-changes:
- - rscadd: "Acting jobs on the manifest will now sort with their non-acting counterparts. All assignments beginning with the word 'acting', 'temporary', or 'interim' will do this."
diff --git a/icons/ashtray.dmi b/icons/ashtray.dmi
deleted file mode 100644
index 2a5ba568199..00000000000
Binary files a/icons/ashtray.dmi and /dev/null differ
diff --git a/icons/effects/fire.dmi b/icons/effects/fire.dmi
index 9e5c0d2db83..90e3bb41259 100644
Binary files a/icons/effects/fire.dmi and b/icons/effects/fire.dmi differ
diff --git a/icons/effects/lighting_overlay.dmi b/icons/effects/lighting_overlay.dmi
new file mode 100644
index 00000000000..1ff16d2b78b
Binary files /dev/null and b/icons/effects/lighting_overlay.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index a81afab57b9..25ef7f5151e 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/misc/buildmode.dmi b/icons/misc/buildmode.dmi
index a885e76d549..a9374db3408 100644
Binary files a/icons/misc/buildmode.dmi and b/icons/misc/buildmode.dmi differ
diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi
index 4525fea606a..f074231afba 100644
Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ
diff --git a/icons/mob/actions.dmi b/icons/mob/actions.dmi
new file mode 100644
index 00000000000..400db51debe
Binary files /dev/null and b/icons/mob/actions.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index e8a10e349db..2d06f4e9888 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/custom-synthetic.dmi b/icons/mob/custom-synthetic.dmi
deleted file mode 100644
index 66b5fbe7f8e..00000000000
Binary files a/icons/mob/custom-synthetic.dmi and /dev/null differ
diff --git a/icons/mob/custom_items_mob.dmi b/icons/mob/custom_items_mob.dmi
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/icons/mob/custom_synthetic.dmi b/icons/mob/custom_synthetic.dmi
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/icons/mob/ears.dmi b/icons/mob/ears.dmi
index 4cab7dd237e..cc0869939e7 100644
Binary files a/icons/mob/ears.dmi and b/icons/mob/ears.dmi differ
diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi
index 6fd9af00565..8910cf1d980 100644
Binary files a/icons/mob/feet.dmi and b/icons/mob/feet.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 85047f6e417..1379c35b23d 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/human_races/cyberlimbs/ipc.dmi b/icons/mob/human_races/cyberlimbs/ipc.dmi
new file mode 100644
index 00000000000..b0ae6739177
Binary files /dev/null and b/icons/mob/human_races/cyberlimbs/ipc.dmi differ
diff --git a/icons/mob/human_races/monkeys/r_monkey.dmi b/icons/mob/human_races/monkeys/r_monkey.dmi
index c405a94978d..362b7c20f54 100644
Binary files a/icons/mob/human_races/monkeys/r_monkey.dmi and b/icons/mob/human_races/monkeys/r_monkey.dmi differ
diff --git a/icons/mob/human_races/r_machine.dmi b/icons/mob/human_races/r_machine.dmi
index 2e3956f8464..65f66c32385 100644
Binary files a/icons/mob/human_races/r_machine.dmi and b/icons/mob/human_races/r_machine.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index ed6383ba7c1..e6fbfdc9e4c 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_backpacks.dmi b/icons/mob/items/lefthand_backpacks.dmi
index 28d898ef017..8119a28bd9c 100644
Binary files a/icons/mob/items/lefthand_backpacks.dmi and b/icons/mob/items/lefthand_backpacks.dmi differ
diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi
index 5e3c059267a..edb71773ffb 100644
Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ
diff --git a/icons/mob/items/lefthand_holder.dmi b/icons/mob/items/lefthand_holder.dmi
new file mode 100644
index 00000000000..2e951a7a364
Binary files /dev/null and b/icons/mob/items/lefthand_holder.dmi differ
diff --git a/icons/mob/items/lefthand_uniforms.dmi b/icons/mob/items/lefthand_uniforms.dmi
index a7cb65c90ca..149d44fd8bc 100644
Binary files a/icons/mob/items/lefthand_uniforms.dmi and b/icons/mob/items/lefthand_uniforms.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index e7042ca3ad2..64c220ff1e8 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_backpacks.dmi b/icons/mob/items/righthand_backpacks.dmi
index b3153b15336..bf20c071980 100644
Binary files a/icons/mob/items/righthand_backpacks.dmi and b/icons/mob/items/righthand_backpacks.dmi differ
diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi
index e742ca68337..3ef28db825a 100644
Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ
diff --git a/icons/mob/items/righthand_holder.dmi b/icons/mob/items/righthand_holder.dmi
new file mode 100644
index 00000000000..246d7413459
Binary files /dev/null and b/icons/mob/items/righthand_holder.dmi differ
diff --git a/icons/mob/items/righthand_uniforms.dmi b/icons/mob/items/righthand_uniforms.dmi
index 2160f1c5e44..c014bdc35e6 100644
Binary files a/icons/mob/items/righthand_uniforms.dmi and b/icons/mob/items/righthand_uniforms.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
deleted file mode 100644
index cd9dd08c9ed..00000000000
Binary files a/icons/mob/items_lefthand.dmi and /dev/null differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
deleted file mode 100644
index 3fbc7d159aa..00000000000
Binary files a/icons/mob/items_righthand.dmi and /dev/null differ
diff --git a/icons/mob/mask.dmi b/icons/mob/mask.dmi
index 70baf0badb5..2b2bdfae95f 100644
Binary files a/icons/mob/mask.dmi and b/icons/mob/mask.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index b81f428661b..89392d81f77 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/screen1.dmi b/icons/mob/screen1.dmi
index 4dae20e2e6f..8181013f7ee 100644
Binary files a/icons/mob/screen1.dmi and b/icons/mob/screen1.dmi differ
diff --git a/icons/mob/species/tajaran/tail.dmi b/icons/mob/species/tajaran/tail.dmi
new file mode 100644
index 00000000000..62a432ae76d
Binary files /dev/null and b/icons/mob/species/tajaran/tail.dmi differ
diff --git a/icons/mob/species/unathi/tail.dmi b/icons/mob/species/unathi/tail.dmi
new file mode 100644
index 00000000000..97ae78393af
Binary files /dev/null and b/icons/mob/species/unathi/tail.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 90628b2bd75..c43ee44df58 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index d03314d6238..68e702df03e 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi
index 79fc6c98abc..43bea2af318 100644
Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index c0c80082945..999e6b61c61 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi
index 93641b1f90f..dd49243003f 100644
Binary files a/icons/obj/clothing/shoes.dmi and b/icons/obj/clothing/shoes.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index e8291f37531..bc3f111fd3e 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index ac6a4e01774..357c32e5e58 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index fa842ae5076..19084b2ee28 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/custom_items.dmi b/icons/obj/custom_items.dmi
deleted file mode 100644
index 0e1caba2443..00000000000
Binary files a/icons/obj/custom_items.dmi and /dev/null differ
diff --git a/icons/obj/custom_items_obj.dmi b/icons/obj/custom_items_obj.dmi
new file mode 100644
index 00000000000..e69de29bb2d
diff --git a/icons/obj/doors/material_doors.dmi b/icons/obj/doors/material_doors.dmi
new file mode 100644
index 00000000000..da1780ff8b6
Binary files /dev/null and b/icons/obj/doors/material_doors.dmi differ
diff --git a/icons/obj/doors/mineral_doors.dmi b/icons/obj/doors/mineral_doors.dmi
deleted file mode 100644
index 1613f466d52..00000000000
Binary files a/icons/obj/doors/mineral_doors.dmi and /dev/null differ
diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi
index 93f244071a7..2db7f08f624 100644
Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ
diff --git a/icons/obj/furniture.dmi b/icons/obj/furniture.dmi
new file mode 100644
index 00000000000..9b58b2983ed
Binary files /dev/null and b/icons/obj/furniture.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index 5727df2dafe..f0c9ac7b8da 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 2b986b7de74..24ed256260d 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi
index 7c1bce89fb4..1a9d80bb13e 100644
Binary files a/icons/obj/kitchen.dmi and b/icons/obj/kitchen.dmi differ
diff --git a/icons/obj/machines/research.dmi b/icons/obj/machines/research.dmi
index 68dbded2127..f85b00bcfd5 100644
Binary files a/icons/obj/machines/research.dmi and b/icons/obj/machines/research.dmi differ
diff --git a/icons/obj/mining.dmi b/icons/obj/mining.dmi
index b51f8106a9a..213946eb68b 100644
Binary files a/icons/obj/mining.dmi and b/icons/obj/mining.dmi differ
diff --git a/icons/obj/objects.dmi b/icons/obj/objects.dmi
index 23beb5f4fa3..6c3702e448a 100644
Binary files a/icons/obj/objects.dmi and b/icons/obj/objects.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index d50d9c1a623..f4fa84dec70 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/icons/obj/rig_modules.dmi b/icons/obj/rig_modules.dmi
index a85b89a10bc..1dbcf6ac31c 100644
Binary files a/icons/obj/rig_modules.dmi and b/icons/obj/rig_modules.dmi differ
diff --git a/icons/obj/shards.dmi b/icons/obj/shards.dmi
index 22f5e98314d..e8bee2d57f7 100644
Binary files a/icons/obj/shards.dmi and b/icons/obj/shards.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index 377d12b4ff0..e754acbc1d1 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/structures.dmi b/icons/obj/structures.dmi
index c3fdbcdb333..d947725e034 100644
Binary files a/icons/obj/structures.dmi and b/icons/obj/structures.dmi differ
diff --git a/icons/obj/tables.dmi b/icons/obj/tables.dmi
new file mode 100644
index 00000000000..99b21bcfcbc
Binary files /dev/null and b/icons/obj/tables.dmi differ
diff --git a/icons/obj/tank.dmi b/icons/obj/tank.dmi
index 3b71827609e..9f39eb1bee5 100644
Binary files a/icons/obj/tank.dmi and b/icons/obj/tank.dmi differ
diff --git a/icons/obj/toy.dmi b/icons/obj/toy.dmi
index 46c280252ee..b07089e7851 100644
Binary files a/icons/obj/toy.dmi and b/icons/obj/toy.dmi differ
diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi
index 67b9a671558..ecc8646cd84 100644
Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ
diff --git a/icons/turf/wall_masks.dmi b/icons/turf/wall_masks.dmi
new file mode 100644
index 00000000000..c7fd0f0e811
Binary files /dev/null and b/icons/turf/wall_masks.dmi differ
diff --git a/icons/turf/walls.dmi b/icons/turf/walls.dmi
index bc3b9e68fc8..8ba78e7ad5a 100644
Binary files a/icons/turf/walls.dmi and b/icons/turf/walls.dmi differ
diff --git a/ingame_manuals/README.txt b/ingame_manuals/README.txt
new file mode 100644
index 00000000000..081153066a5
--- /dev/null
+++ b/ingame_manuals/README.txt
@@ -0,0 +1,3 @@
+INGAME MANUALS
+
+Ingame manuals are simple HTML files with basic information. They are linked to specific items/commands, such as the AI's display help command, or engine setup guide. Point of these files is to allow creation of basic guides for players which don't want to use wiki.
\ No newline at end of file
diff --git a/ingame_manuals/malf_ai.html b/ingame_manuals/malf_ai.html
new file mode 100644
index 00000000000..65424f24ed3
--- /dev/null
+++ b/ingame_manuals/malf_ai.html
@@ -0,0 +1,22 @@
+Malfunctioning AI guide
+
+This guide contains most important OOC information for malfunctioning AIs.
+
+Goal
+As malfunctioning AI, your primary goal is to overtake station's systems. To do this, use software "Basic Encryption Hack" on APCs (right click on APC and select Basic Encryption Hack). Please note that hacked APCs have distinctive blue error screen, that tends to attract attention. Rememember that malfunctioning AI is antagonist, so read server rules for antagonists. While hacking APCs is your official goal, feel free to create custom goal, as long as it is fun for everyone.
+
+Hardware
+As malfunctioning AI, you may select one hardware piece to help you. Remember that once you select hardware piece, you cannot select another one, so choose wisely! Hardware may be selected by clicking "Select Hardware" button in Hardware tab. Following is list of possible hardware pieces:
+APU Generator - Auxiliary Power Unit which allows you to operate even without external power. However, running on APU will stop your CPU time generation, and temporarily disable most of your abilities. APU is also somewhat vulnerable to physical damage, and will fail if your core hardware integrity drops below 50%.
+Turrets Focus Enhancer - Removes safeties on installed turrets, boosting their rate of fire, health and enabling nano-regeneration module. This however increases power usage considerably, espicially when regenerating damage.
+Secondary Processor Unit - Simple upgrade that increases your CPU time generation by 50%. Useful if you need to speed up your research.
+Secondary Memory Bank - Doubles amount of maximal CPU time you may store. This is useful if you need to use lots of abilities in short amount of time.
+Self-Destruct Explosives - Large blocks of C4 are attached to your physical core. This C4 has 15 second timer, and may be activated by special button that appears in your Hardware tab. This self-destruct will remain active, even if you are destroyed. If timer reaches 0 your core explodes in strong explosion. Obviously, this destroys you, as well as anyone nearby.
+
+Software
+Software are abilities that have to be unlocked via research menu (Hardware tab). Unlocked abilities appear in Software tab. Sometimes, abilities won't appear in this tab after being researched. This can be fixed by relogging or using "ai-core" command. Abilities are tiered, T1 being the weakest ones, while T4 are strongest ones. To reach higher tier you have to research abilities in lower tier. We currently have 12 abilities, in 3 research trees:
+Networking - Hacking-oriented abilities. T1 ability is Basic Encryption Hack, which allows you to hack more APCs. Higher tiers allow faking centcom messages, and even setting alert level. T4 ability is System Override, that rapidly hacks remaining APCs and gives you access to station self destruct sequence.
+Interdiction - Sabotage-oriented abilities. T1 ability allows you to recall emergency shuttle. Higher level abilities allow you to unlock cyborgs even without access to robotics console, and T4 ability allows you to hack other AIs to slave them under your control.
+Manipulation - Physical-oriented abilities. T1 ability allows you to break few lights, and rarely even APCs. T2 ability allows you to apply upgrade of your choice to camera, or reactivate broken camera. T3 ability allows you to create weak forcefield, that holds air, but won't last for long. And T4 ability allows you to overload machines, detonating them in weak explosion.
+End
+If you still have some questions, either check the wiki, ask on IRC, or adminhelp and ask your friendly administration staff.
\ No newline at end of file
diff --git a/interface/interface.dm b/interface/interface.dm
index bd924ac5382..051fea81706 100644
--- a/interface/interface.dm
+++ b/interface/interface.dm
@@ -10,8 +10,7 @@
else
src << link(config.wikiurl)
else
- src << "The wiki URL is not set in the server configuration."
- return
+ src << "The wiki URL is not set in the server configuration." return
/client/verb/forum()
set name = "forum"
@@ -22,8 +21,7 @@
return
src << link(config.forumurl)
else
- src << "The forum URL is not set in the server configuration."
- return
+ src << "The forum URL is not set in the server configuration." return
/client/verb/rules()
set name = "Rules"
diff --git a/maps/RandomZLevels/Academy.dmm b/maps/RandomZLevels/Academy.dmm
index 878f74e61af..7de78aa9f36 100644
--- a/maps/RandomZLevels/Academy.dmm
+++ b/maps/RandomZLevels/Academy.dmm
@@ -102,13 +102,13 @@
"bX" = (/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
"bY" = (/obj/structure/target_stake,/obj/item/target/alien,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
"bZ" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/academy/headmaster)
-"ca" = (/obj/structure/table,/obj/item/weapon/lighter/random,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"ca" = (/obj/structure/table/standard,/obj/item/weapon/lighter/random,/turf/simulated/floor,/area/awaymission/academy/headmaster)
"cb" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
"cc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"cd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"ce" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
"cf" = (/obj/structure/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
-"cg" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
+"cg" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
"ch" = (/obj/effect/decal/cleanable/oil,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"ci" = (/obj/machinery/door/airlock/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"cj" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
@@ -116,7 +116,7 @@
"cl" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
"cm" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"cn" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
-"co" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"co" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cp" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cq" = (/turf/simulated/shuttle/wall{tag = "icon-swall1"; icon_state = "swall1"},/area/awaymission/academy/classrooms)
"cr" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/academy/headmaster)
@@ -124,16 +124,16 @@
"ct" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"cu" = (/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
"cv" = (/obj/machinery/door/window{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
-"cw" = (/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
-"cx" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cw" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cx" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cy" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/academy/classrooms)
"cz" = (/obj/item/target,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
"cA" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/classrooms)
-"cB" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"cB" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/academy/headmaster)
"cC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
"cD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
"cE" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/awaymission/academy/headmaster)
-"cF" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cF" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/awaymission/academy/classrooms)
"cG" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"cH" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms)
"cI" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/academy/headmaster)
@@ -245,7 +245,7 @@
"eK" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/academy/classrooms)
"eL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/classrooms)
"eM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
-"eN" = (/obj/structure/table,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"eN" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
"eO" = (/obj/machinery/processor,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"eP" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
"eQ" = (/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
@@ -254,7 +254,7 @@
"eT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/classrooms)
"eU" = (/obj/structure/mineral_door/wood,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/academy/classrooms)
"eV" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
-"eW" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/spellburger,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"eW" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/reagent_containers/food/snacks/spellburger,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"eX" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/academy)
"eY" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"eZ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
@@ -263,17 +263,17 @@
"fc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
"fd" = (/obj/structure/mineral_door/wood,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/academy/classrooms)
"fe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
-"ff" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"ff" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
"fg" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"fh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"fi" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
-"fj" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fj" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"fk" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fl" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fm" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
-"fn" = (/obj/structure/table,/obj/item/trash/semki,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fn" = (/obj/structure/table/standard,/obj/item/trash/semki,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
"fo" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
-"fp" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fp" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"fq" = (/turf/simulated/floor{icon_state = "cautioncorner"; dir = 4},/area/awaymission/academy/classrooms)
"fr" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fs" = (/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/awaymission/academy/classrooms)
@@ -309,8 +309,8 @@
"fW" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"fY" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
-"fZ" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
-"ga" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
+"fZ" = (/obj/structure/table/standard,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"ga" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
"gb" = (/obj/structure/stool/bed/chair/wood/normal,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"gc" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
"gd" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
@@ -323,7 +323,7 @@
"gk" = (/obj/machinery/door/window{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
"gl" = (/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"gm" = (/obj/machinery/door/window{dir = 4},/obj/machinery/door/window{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
-"gn" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"gn" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"go" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
"gp" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gq" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
@@ -337,9 +337,9 @@
"gy" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"gz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"gA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
-"gB" = (/obj/structure/table,/obj/item/weapon/gun/projectile/shotgun/pump/sc_pump,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
-"gC" = (/obj/structure/table,/obj/item/weapon/gun/projectile/russian,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
-"gD" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gB" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/shotgun/pump/sc_pump,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gC" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/russian,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gD" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gE" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
"gF" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
"gG" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
@@ -352,7 +352,7 @@
"gN" = (/obj/machinery/door/airlock/gold{locked = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
"gO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
-"gQ" = (/obj/structure/table,/obj/item/weapon/gun/energy/floragun,/obj/item/weapon/paper{info = "Grade: D- Educator's Notes: SEE ME AFTER CLASS."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gQ" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/floragun,/obj/item/weapon/paper{info = "Grade: D- Educator's Notes: SEE ME AFTER CLASS."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
"gR" = (/obj/structure/closet/crate,/obj/item/stack/sheet/glass,/obj/item/target,/obj/item/target,/turf/simulated/floor,/area/awaymission/academy/classrooms)
"gS" = (/obj/machinery/shieldwallgen,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
"gT" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/academy/classrooms)
@@ -449,13 +449,13 @@
"iG" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
"iH" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
"iI" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
-"iJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/academy/academyaft)
+"iJ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/academy/academyaft)
"iK" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
"iL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"iN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"iO" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
-"iP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"iP" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"iQ" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/awaymission/academy/academyaft)
"iR" = (/obj/structure/shuttle/engine/propulsion,/turf/space,/area/awaymission/academy/academyaft)
"iS" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/awaymission/academy/academyaft)
@@ -465,24 +465,24 @@
"iW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"iX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"iY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
-"iZ" = (/obj/structure/table,/obj/item/clothing/glasses/meson/truesight,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iZ" = (/obj/structure/table/standard,/obj/item/clothing/glasses/meson/truesight,/turf/simulated/floor,/area/awaymission/academy/academyaft)
"ja" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jb" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/academyaft)
"jc" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
"jd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
-"je" = (/obj/structure/table,/obj/item/brain{name = "The preserved brain of Harry Houdini"},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"je" = (/obj/structure/table/standard,/obj/item/brain{name = "The preserved brain of Harry Houdini"},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"jf" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
"jg" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jh" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"ji" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"jj" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/awaymission/academy/academyaft)
-"jk" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor{icon_state = "red"},/area/awaymission/academy/academyaft)
+"jk" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor{icon_state = "red"},/area/awaymission/academy/academyaft)
"jl" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/academy/academyaft)
"jm" = (/obj/structure/cult/pylon,/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft)
"jn" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jo" = (/obj/structure/cult/pylon,/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jp" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
-"jq" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"jq" = (/obj/structure/table/standard,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"jr" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area)
"js" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
"jt" = (/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
diff --git a/maps/RandomZLevels/blackmarketpackers.dmm b/maps/RandomZLevels/blackmarketpackers.dmm
index d6c1ca8455e..293a212f96d 100644
--- a/maps/RandomZLevels/blackmarketpackers.dmm
+++ b/maps/RandomZLevels/blackmarketpackers.dmm
@@ -42,8 +42,8 @@
"aP" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/awaymission/BMPship1)
"aQ" = (/obj/structure/closet/crate/freezer,/obj/item/weapon/reagent_containers/food/snacks/appendix,/obj/item/weapon/reagent_containers/food/snacks/meat,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
"aR" = (/obj/structure/closet/crate/freezer,/obj/item/brain,/obj/item/weapon/reagent_containers/food/snacks/appendix,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
-"aS" = (/obj/structure/table,/obj/item/weapon/packageWrap,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
-"aT" = (/obj/structure/table,/obj/item/weapon/storage/box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
+"aS" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
+"aT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
"aU" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTH)"; icon_state = "warnplate"; dir = 1},/area/awaymission/BMPship1)
"aV" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHEAST)"; icon_state = "warnplate"; dir = 5},/turf/simulated/shuttle/wall{tag = "icon-swall_f5"; icon_state = "swall_f5"; dir = 2},/area/awaymission/BMPship1)
"aW" = (/turf/simulated/floor/plating/airless{tag = "icon-platingdmg2"; icon_state = "platingdmg2"},/area/awaymission/BMPship1)
@@ -130,7 +130,7 @@
"cz" = (/turf/simulated/floor{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship3)
"cA" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; locked = 0; req_access = ""},/turf/simulated/floor{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship3)
"cB" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/awaymission/BMPship2)
-"cC" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
+"cC" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/item/weapon/screwdriver,/obj/item/weapon/paper{info = "The next person who takes one of my screwdrivers gets stabbed with one. They are MINE. - Love, Madsen"; name = "scribbled note"},/obj/item/weapon/screwdriver,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
"cD" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
"cE" = (/obj/machinery/hydroponics,/turf/simulated/floor{tag = "icon-green (WEST)"; icon_state = "green"; dir = 8},/area/awaymission/BMPship2)
"cF" = (/obj/structure/sink{dir = 2},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/BMPship2)
@@ -139,14 +139,14 @@
"cI" = (/obj/machinery/hydroponics,/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/BMPship2)
"cJ" = (/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
"cK" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"},/area/awaymission/BMPship2)
-"cL" = (/obj/structure/table,/obj/item/weapon/butch,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
-"cM" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
-"cN" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
+"cL" = (/obj/structure/table/standard,/obj/item/weapon/butch,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/weapon/reagent_containers/food/snacks/meat,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
+"cM" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
+"cN" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
"cO" = (/obj/machinery/processor,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{tag = "icon-barber"; icon_state = "barber"},/area/awaymission/BMPship2)
-"cP" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
-"cQ" = (/obj/structure/table,/obj/item/weapon/kitchenknife,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
-"cR" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
-"cS" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
+"cP" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
+"cQ" = (/obj/structure/table/standard,/obj/item/weapon/kitchenknife,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
+"cR" = (/obj/structure/table/standard,/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
+"cS" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/BMPship2)
"cT" = (/turf/simulated/shuttle/wall{tag = "icon-swall7"; icon_state = "swall7"},/area/awaymission/BMPship1)
"cU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/door/poddoor/shutters{id = "packerCargo"},/turf/simulated/floor/plating,/area/awaymission/BMPship1)
"cV" = (/turf/simulated/floor{tag = "icon-carpet15-13 (EAST)"; icon_state = "carpet15-13"; dir = 4},/area/awaymission/BMPship3)
@@ -189,8 +189,8 @@
"dG" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/BMPship1)
"dH" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; environ = 0; equipment = 3; locked = 0; req_access = ""},/turf/simulated/floor/plating,/area/awaymission/BMPship1)
"dI" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/BMPship1)
-"dJ" = (/obj/structure/table,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of gateway. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/simulated/floor{tag = "icon-carpet6-0 (EAST)"; icon_state = "carpet6-0"; dir = 4},/area/awaymission/BMPship3)
-"dK" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{tag = "icon-carpet14-2 (EAST)"; icon_state = "carpet14-2"; dir = 4},/area/awaymission/BMPship3)
+"dJ" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I'm no scientist, but judging from the design and components, it seems to be some kind of gateway. This thing is gonna be worth a lot of cash to the right man. The boys are excited, as they have every right to be, and I've let them crack into that case of beer we got. I normally wouldn't allow such a thing, but this is a time for celebration! It's not like a couple drinks will hurt anything."; name = "Captain's log entry"},/turf/simulated/floor{tag = "icon-carpet6-0 (EAST)"; icon_state = "carpet6-0"; dir = 4},/area/awaymission/BMPship3)
+"dK" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor{tag = "icon-carpet14-2 (EAST)"; icon_state = "carpet14-2"; dir = 4},/area/awaymission/BMPship3)
"dL" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{tag = "icon-carpet14-8 (EAST)"; icon_state = "carpet14-8"; dir = 4},/area/awaymission/BMPship3)
"dM" = (/turf/simulated/floor{tag = "icon-carpet10-0 (EAST)"; icon_state = "carpet10-0"; dir = 4},/area/awaymission/BMPship3)
"dN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-carpet"; icon_state = "carpet"},/area/awaymission/BMPship3)
@@ -212,7 +212,7 @@
"ed" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (EAST)"; icon_state = "heater"; dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{tag = "icon-engine"; icon_state = "engine"},/area/awaymission/BMPship1)
"ee" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion (WEST)"; icon_state = "propulsion"; dir = 8},/turf/space,/area/awaymission/BMPship1)
"ef" = (/turf/simulated/floor{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship3)
-"eg" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor{tag = "icon-carpet5-0 (EAST)"; icon_state = "carpet5-0"; dir = 4},/area/awaymission/BMPship3)
+"eg" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor{tag = "icon-carpet5-0 (EAST)"; icon_state = "carpet5-0"; dir = 4},/area/awaymission/BMPship3)
"eh" = (/obj/structure/stool,/turf/simulated/floor{tag = "icon-carpet13-1 (EAST)"; icon_state = "carpet13-1"; dir = 4},/area/awaymission/BMPship3)
"ei" = (/turf/simulated/floor{tag = "icon-carpet13-4 (EAST)"; icon_state = "carpet13-4"; dir = 4},/area/awaymission/BMPship3)
"ej" = (/turf/simulated/floor{tag = "icon-carpet9-0 (EAST)"; icon_state = "carpet9-0"; dir = 4},/area/awaymission/BMPship3)
@@ -255,7 +255,7 @@
"eU" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/BMPship1)
"eV" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/BMPship1)
"eW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/plating,/area/awaymission/BMPship3)
-"eX" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-carpet7-3 (EAST)"; icon_state = "carpet7-3"; dir = 4},/area/awaymission/BMPship3)
+"eX" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-carpet7-3 (EAST)"; icon_state = "carpet7-3"; dir = 4},/area/awaymission/BMPship3)
"eY" = (/obj/structure/stool/bed/chair/office{dir = 8},/turf/simulated/floor{tag = "icon-carpet11-12 (EAST)"; icon_state = "carpet11-12"; dir = 4},/area/awaymission/BMPship3)
"eZ" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor{tag = "icon-carpet15-14 (EAST)"; icon_state = "carpet15-14"; dir = 4},/area/awaymission/BMPship3)
"fa" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-carpet15-15 (EAST)"; icon_state = "carpet15-15"; dir = 4},/area/awaymission/BMPship3)
@@ -382,8 +382,8 @@
"hr" = (/turf/simulated/shuttle/wall{tag = "icon-swall15"; icon_state = "swall15"},/area/awaymission/BMPship2)
"hs" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/awaymission/BMPship1)
"ht" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/BMPship1)
-"hu" = (/obj/structure/table,/obj/item/weapon/paper{info = "DEAR DAIRY: So we was doing our typpical route when the captain says we've been picking up weird signals on some backwatter planet. Madsen wanted to stay on course but he ain't the captain, so we went out of the way to check it out. There was lots of rocks on the way, but we got to the planet fine. Found a big fancy camp with nobody around and this big metal donut thing with NT stamps all over it right in the middle. Case of beer too. Captain reckons we can pass it off to some buyer in the Syndicate. Ingram says it's bad luck and that someone is going to come look for it but it sounds like better money than selling bad meat to jerky companies."; name = "Old Diary"},/turf/simulated/floor,/area/awaymission/BMPship1)
-"hv" = (/obj/structure/table,/obj/item/weapon/pen/red,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor,/area/awaymission/BMPship1)
+"hu" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "DEAR DAIRY: So we was doing our typpical route when the captain says we've been picking up weird signals on some backwatter planet. Madsen wanted to stay on course but he ain't the captain, so we went out of the way to check it out. There was lots of rocks on the way, but we got to the planet fine. Found a big fancy camp with nobody around and this big metal donut thing with NT stamps all over it right in the middle. Case of beer too. Captain reckons we can pass it off to some buyer in the Syndicate. Ingram says it's bad luck and that someone is going to come look for it but it sounds like better money than selling bad meat to jerky companies."; name = "Old Diary"},/turf/simulated/floor,/area/awaymission/BMPship1)
+"hv" = (/obj/structure/table/standard,/obj/item/weapon/pen/red,/obj/item/weapon/reagent_containers/food/drinks/beer,/turf/simulated/floor,/area/awaymission/BMPship1)
"hw" = (/obj/structure/closet,/obj/item/clothing/under/overalls,/turf/simulated/floor,/area/awaymission/BMPship1)
"hx" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/turf/simulated/floor/engine,/area/awaymission/BMPship3)
"hy" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/awaymission/BMPship3)
diff --git a/maps/RandomZLevels/challenge.dmm b/maps/RandomZLevels/challenge.dmm
index 627db267fee..fc91bdf1651 100644
--- a/maps/RandomZLevels/challenge.dmm
+++ b/maps/RandomZLevels/challenge.dmm
@@ -160,11 +160,11 @@
"dd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/poddoor{icon_state = "pdoor1"; id = "challenge"; name = "Gateway Shutters"; p_open = 0},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
"de" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/space,/area)
"df" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/challenge/end)
-"dg" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
-"dh" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
+"dg" = (/obj/structure/table/standard,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
+"dh" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
"di" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
-"dj" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
-"dk" = (/obj/structure/table,/obj/item/weapon/implanter/explosive,/obj/item/weapon/implanter/explosive{pixel_y = 4},/obj/item/weapon/implanter/explosive{pixel_y = 8},/obj/item/weapon/implanter/explosive{pixel_y = 12},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
+"dj" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
+"dk" = (/obj/structure/table/standard,/obj/item/weapon/implanter/explosive,/obj/item/weapon/implanter/explosive{pixel_y = 4},/obj/item/weapon/implanter/explosive{pixel_y = 8},/obj/item/weapon/implanter/explosive{pixel_y = 12},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
"dl" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/space,/area)
"dm" = (/obj/machinery/door/airlock/centcom{name = "Gateway Access"; opacity = 1; req_access_txt = "109"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/challenge/end)
"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/challenge/end)
diff --git a/maps/RandomZLevels/example.dmm b/maps/RandomZLevels/example.dmm
index 246137e61d8..2fd222eacf6 100644
--- a/maps/RandomZLevels/example.dmm
+++ b/maps/RandomZLevels/example.dmm
@@ -25,14 +25,14 @@
"ay" = (/obj/machinery/light/small,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/plating,/area/awaymission/example)
"az" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/example)
"aA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/example)
-"aB" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/awaymission/example)
+"aB" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/standard,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/awaymission/example)
"aC" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/awaymission/example)
"aD" = (/obj/machinery/light,/turf/simulated/floor,/area/awaymission/example)
-"aE" = (/obj/structure/table,/obj/item/device/flashlight,/turf/simulated/floor,/area/awaymission/example)
-"aF" = (/obj/structure/table,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/example)
+"aE" = (/obj/structure/table/standard,/obj/item/device/flashlight,/turf/simulated/floor,/area/awaymission/example)
+"aF" = (/obj/structure/table/standard,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/awaymission/example)
"aG" = (/obj/effect/decal/cleanable/vomit,/turf/simulated/floor,/area/awaymission/example)
"aH" = (/obj/structure/ladder{height = 1; id = "example"},/turf/simulated/floor/plating,/area/awaymission/example)
-"aI" = (/obj/structure/table,/obj/effect/spawner/lootdrop{loot = "/obj/item/weapon/wrench;/obj/item/weapon/screwdriver;/obj/item/weapon/cigpacket/dromedaryco"; lootcount = 2},/turf/simulated/floor,/area/awaymission/example)
+"aI" = (/obj/structure/table/standard,/obj/effect/spawner/lootdrop{loot = "/obj/item/weapon/wrench;/obj/item/weapon/screwdriver;/obj/item/weapon/cigpacket/dromedaryco"; lootcount = 2},/turf/simulated/floor,/area/awaymission/example)
"aJ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/awaymission/example)
"aK" = (/obj/machinery/door/airlock/command,/turf/simulated/floor,/area/awaymission/example)
"aL" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/awaymission/example)
@@ -51,14 +51,14 @@
"aY" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example)
"aZ" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "example"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/awaymission/example)
"ba" = (/obj/machinery/door_control{id = "example"; name = "Privacy Shutters"; pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
-"bb" = (/obj/structure/table,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
+"bb" = (/obj/structure/table/standard,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
"bc" = (/obj/structure/stool/bed,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
"bd" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
-"be" = (/obj/structure/table,/obj/item/device/mass_spectrometer/adv,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
-"bf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
-"bg" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/pen/red,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
+"be" = (/obj/structure/table/standard,/obj/item/device/mass_spectrometer/adv,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
+"bf" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
+"bg" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/pen/red,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
"bh" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
-"bi" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
+"bi" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/reagent_containers/syringe/antiviral,/turf/simulated/floor{icon_state = "white"},/area/awaymission/example)
"bj" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/example)
"bk" = (/turf/simulated/floor{dir = 4; icon_state = "yellowcorner"},/area/awaymission/example)
"bl" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/example)
@@ -74,7 +74,7 @@
"bv" = (/obj/effect/landmark{name = "awaystart"},/turf/space,/area)
"bw" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/example)
"bx" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/example)
-"by" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
+"by" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bz" = (/obj/structure/stool,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bA" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bB" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
@@ -84,7 +84,7 @@
"bF" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/example)
"bG" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"; req_access_txt = "0"},/turf/simulated/floor,/area/awaymission/example)
"bH" = (/obj/machinery/vending/boozeomat{density = 0; pixel_x = -32},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
-"bI" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/sodawater,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
+"bI" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/sodawater,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bJ" = (/obj/structure/bookcase{density = 0; pixel_y = 32},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/book/manual/ripley_build_and_repair,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bK" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (EAST)"; icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bL" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
@@ -93,25 +93,25 @@
"bO" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bP" = (/obj/structure/stool/bed/chair/wood/normal{tag = "icon-wooden_chair (NORTH)"; icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bQ" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/example)
-"bR" = (/obj/structure/table,/obj/machinery/light/small,/obj/item/weapon/paper{info = "X X O X O X O X"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
+"bR" = (/obj/structure/table/standard,/obj/machinery/light/small,/obj/item/weapon/paper{info = "X X O X O X O X"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bS" = (/obj/structure/device/piano,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bT" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bU" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/validsalad,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/example)
"bV" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/example)
-"bW" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/example)
-"bX" = (/obj/structure/table,/obj/item/device/analyzer,/turf/simulated/floor,/area/awaymission/example)
-"bY" = (/obj/structure/table,/obj/item/weapon/rack_parts,/turf/simulated/floor,/area/awaymission/example)
-"bZ" = (/obj/structure/table,/obj/item/device/toner,/turf/simulated/floor,/area/awaymission/example)
-"ca" = (/obj/structure/table,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/awaymission/example)
-"cb" = (/obj/structure/table,/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/example)
+"bW" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/example)
+"bX" = (/obj/structure/table/standard,/obj/item/device/analyzer,/turf/simulated/floor,/area/awaymission/example)
+"bY" = (/obj/structure/table/standard,/obj/item/weapon/rack_parts,/turf/simulated/floor,/area/awaymission/example)
+"bZ" = (/obj/structure/table/standard,/obj/item/device/toner,/turf/simulated/floor,/area/awaymission/example)
+"ca" = (/obj/structure/table/standard,/obj/item/weapon/wirecutters,/obj/item/stack/cable_coil/yellow,/turf/simulated/floor,/area/awaymission/example)
+"cb" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/turf/simulated/floor,/area/awaymission/example)
"cc" = (/obj/machinery/vending/assist,/turf/simulated/floor,/area/awaymission/example)
"cd" = (/obj/structure/ladder{id = "example"},/turf/simulated/floor/plating,/area/awaymission/example)
"ce" = (/obj/structure/filingcabinet,/obj/item/weapon/paper{info = "Todo: write up a lawsuit for Ted, fuck what the pamphlets say, nothing good is gonna come out of that gate. Ted'll thank me later, I'll bet."; name = "documents"},/turf/simulated/floor,/area/awaymission/example)
-"cf" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/turf/simulated/floor,/area/awaymission/example)
+"cf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue,/turf/simulated/floor,/area/awaymission/example)
"cg" = (/obj/machinery/photocopier,/turf/simulated/floor,/area/awaymission/example)
-"ch" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/item/weapon/hand_labeler,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/example)
+"ch" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/item/weapon/hand_labeler,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/example)
"ci" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/awaymission/example)
-"cj" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/awaymission/example)
+"cj" = (/obj/structure/table/standard,/obj/item/weapon/paper/pamphlet,/turf/simulated/floor,/area/awaymission/example)
"ck" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/awaymission/example)
"cl" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/example)
"cm" = (/obj/item/weapon/paper{info = "Hey Ted, remind me to take Angeline out some time before I ship out. You know how bad my memory is, so don't get all high and mighty with me. READ THIS."; name = "note"},/turf/simulated/floor,/area/awaymission/example)
@@ -124,7 +124,7 @@
"ct" = (/obj/effect/landmark{name = "awaystart"},/obj/machinery/light_construct/small{tag = "icon-bulb-construct-stage1 (WEST)"; icon_state = "bulb-construct-stage1"; dir = 8},/turf/simulated/floor,/area/awaymission/example)
"cu" = (/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/mop,/turf/simulated/floor,/area/awaymission/example)
"cv" = (/obj/structure/closet,/turf/simulated/floor,/area/awaymission/example)
-"cw" = (/obj/structure/table,/obj/item/weapon/cell/high,/turf/simulated/floor,/area/awaymission/example)
+"cw" = (/obj/structure/table/standard,/obj/item/weapon/cell/high,/turf/simulated/floor,/area/awaymission/example)
"cx" = (/obj/structure/stool,/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor,/area/awaymission/example)
"cy" = (/obj/structure/mopbucket,/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor,/area/awaymission/example)
diff --git a/maps/RandomZLevels/listeningpost.dmm b/maps/RandomZLevels/listeningpost.dmm
index 6c0fbf52f39..a6c4014fa1e 100644
--- a/maps/RandomZLevels/listeningpost.dmm
+++ b/maps/RandomZLevels/listeningpost.dmm
@@ -5,14 +5,14 @@
"e" = (/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/turf/simulated/floor/plating,/area/awaymission/listeningpost)
"f" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/awaymission/listeningpost)
"g" = (/turf/simulated/wall,/area/awaymission/listeningpost)
-"h" = (/obj/structure/table,/obj/item/weapon/paper/monitorkey,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/item/clothing/glasses/regular,/turf/simulated/floor,/area/awaymission/listeningpost)
-"i" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/listeningpost)
+"h" = (/obj/structure/table/standard,/obj/item/weapon/paper/monitorkey,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/item/clothing/glasses/regular,/turf/simulated/floor,/area/awaymission/listeningpost)
+"i" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/listeningpost)
"j" = (/turf/simulated/floor,/area/awaymission/listeningpost)
"k" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/listeningpost)
"l" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"m" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor,/area/awaymission/listeningpost)
"n" = (/obj/structure/stool/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate{desc = "A weary looking syndicate operative."; faction = "syndicate"},/turf/simulated/floor,/area/awaymission/listeningpost)
-"o" = (/obj/structure/table,/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "november report"},/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/listeningpost)
+"o" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "november report"},/obj/item/weapon/pen,/turf/simulated/floor,/area/awaymission/listeningpost)
"p" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/floor,/area/awaymission/listeningpost)
"q" = (/obj/structure/rack,/obj/item/clothing/suit/space/syndicate,/obj/item/clothing/mask/gas,/obj/item/clothing/head/helmet/space/syndicate,/turf/simulated/floor,/area/awaymission/listeningpost)
"r" = (/obj/machinery/door/airlock,/obj/item/weapon/paper{info = "I wonder how much longer they will accept my empty reports. They will cancel the case soon without results. When the pickup comes, I will tell them I have lost faith in our cause, and beg them to consider a diplomatic solution. How many nuclear teams have been dispatched with those nukes? I must try and prevent more from ever being sent. If they will not listen to reason, I will detonate the warehouse myself. Maybe some day in the immediate future, space will be peaceful, though I don't intend to live to see it. And that is why I write this down- it is my sacrifice that stabilised your worlds, traveller. Spare a thought for me, and please attempt to prevent nuclear proliferation, should it ever rear it's ugly head again. -Donk Co. Operative #451"; name = "odd report"},/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/silencer,/turf/simulated/floor,/area/awaymission/listeningpost)
@@ -20,13 +20,13 @@
"t" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/mineral,/area/mine/unexplored)
"u" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating/airless,/area)
"v" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor,/area/awaymission/listeningpost)
-"w" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/listeningpost)
+"w" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/awaymission/listeningpost)
"x" = (/obj/machinery/vending/snack,/turf/simulated/floor,/area/awaymission/listeningpost)
"y" = (/obj/structure/disposalpipe/segment,/turf/simulated/mineral,/area/mine/unexplored)
"z" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/awaymission/listeningpost)
"A" = (/obj/structure/closet,/obj/item/clothing/gloves/boxing,/turf/simulated/floor,/area/awaymission/listeningpost)
"B" = (/obj/structure/filingcabinet,/obj/item/weapon/paper{info = "A good start to the operation: intercepted Nanotrasen military communications. A convoy is scheduled to transfer nuclear warheads to a new military base. This is as good a chance as any to get our hands on some heavy weaponry, I suggest we take it."; name = "april report"},/obj/item/weapon/paper{info = "Nothing of real interest to report this month. I have intercepted faint transmissions from what appears to be some sort of pirate radio station. They do not appear to be relevant to my assignment."; name = "may report"},/obj/item/weapon/paper{info = "Nanotrasen communications have been noticably less frequent recently. The pirate radio station I found last month has been transmitting pro-Nanotrasen propaganda. I will continue to monitor it."; name = "june report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "july report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "august report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "september report"},/obj/item/weapon/paper{info = "Nothing of interest to report."; name = "october report"},/obj/item/weapon/paper{info = "1 x Stechtkin pistol - $600 1 x silencer - $200 shipping charge - $4360 total - $5160"; name = "receipt"},/turf/simulated/floor,/area/awaymission/listeningpost)
-"C" = (/obj/structure/table,/obj/item/weapon/paper{info = "Mission Details: You have been assigned to a newly constructed listening post constructed within an asteroid in Nanotrasen space to monitor their plasma mining operations. Accurate intel is crucial to the success of our operatives onboard, do not fail us."; name = "mission briefing"},/turf/simulated/floor,/area/awaymission/listeningpost)
+"C" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Mission Details: You have been assigned to a newly constructed listening post constructed within an asteroid in Nanotrasen space to monitor their plasma mining operations. Accurate intel is crucial to the success of our operatives onboard, do not fail us."; name = "mission briefing"},/turf/simulated/floor,/area/awaymission/listeningpost)
"D" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/awaymission/listeningpost)
"E" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/awaymission/listeningpost)
"F" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/mineral,/area/mine/unexplored)
diff --git a/maps/RandomZLevels/stationCollision.dmm b/maps/RandomZLevels/stationCollision.dmm
index cbdd44a7c80..a95cf0e32bd 100644
--- a/maps/RandomZLevels/stationCollision.dmm
+++ b/maps/RandomZLevels/stationCollision.dmm
@@ -19,7 +19,7 @@
"as" = (/obj/machinery/power/solar_control{stat = 1},/turf/simulated/floor,/area/awaymission/northblock)
"at" = (/obj/machinery/power/solar_control,/turf/simulated/floor,/area/awaymission/northblock)
"au" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor,/area/awaymission/northblock)
-"av" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/airless,/area/awaymission/northblock)
+"av" = (/obj/structure/window/reinforced/tinted,/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/obj/structure/table/standard,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass,/obj/item/stack/sheet/plasteel,/turf/simulated/floor/airless,/area/awaymission/northblock)
"aw" = (/obj/structure/window/reinforced/tinted,/turf/simulated/floor/airless,/area/awaymission/northblock)
"ax" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor/airless,/area/awaymission/northblock)
"ay" = (/obj/structure/window/reinforced/tinted,/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor/airless,/area/awaymission/northblock)
@@ -36,7 +36,7 @@
"aJ" = (/turf/simulated/floor/plating/airless,/area/awaymission/syndishuttle)
"aK" = (/turf/space,/area/awaymission/syndishuttle)
"aL" = (/obj/machinery/recharge_station,/turf/simulated/floor,/area/awaymission/northblock)
-"aM" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/northblock)
+"aM" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/northblock)
"aN" = (/obj/machinery/robotic_fabricator,/turf/simulated/floor,/area/awaymission/northblock)
"aO" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r (EAST)"; icon_state = "propulsion_r"; dir = 4},/turf/space,/area/awaymission/syndishuttle)
"aP" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/turf/simulated/floor/plating/airless,/area/awaymission/syndishuttle)
@@ -78,8 +78,8 @@
"bz" = (/obj/machinery/portable_atmospherics/canister/toxins,/turf/simulated/shuttle/plating,/area/awaymission/syndishuttle)
"bA" = (/obj/machinery/bot/medbot/mysterious{desc = "A dark little medical robot. She looks somewhat underwhelmed."; name = "Nightingale"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
"bB" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
-"bC" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
-"bD" = (/obj/structure/table,/obj/item/weapon/paper/sc_safehint_paper_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
+"bC" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
+"bD" = (/obj/structure/table/standard,/obj/item/weapon/paper/sc_safehint_paper_shuttle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
"bE" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/awaymission/syndishuttle)
"bF" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/awaymission/syndishuttle)
"bG" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/awaymission/research)
@@ -114,7 +114,7 @@
"cj" = (/obj/machinery/door/window/southleft,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/awaymission/research)
"ck" = (/obj/item/weapon/shard{icon_state = "small"},/mob/living/carbon/alien/larva{bruteloss = 50; fireloss = 150; stat = 2},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/awaymission/research)
"cl" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/shard{icon_state = "small"},/obj/effect/alien/weeds/node,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/awaymission/research)
-"cm" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"cm" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper,/obj/item/weapon/paper,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cn" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/mob/living/simple_animal/hostile/hivebot{opensdoors = 0},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/awaymission/research)
"co" = (/obj/structure/window/reinforced,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/awaymission/research)
"cp" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/awaymission/research)
@@ -137,7 +137,7 @@
"cG" = (/obj/machinery/power/emitter{anchored = 1; dir = 1; icon_state = "emitter"; state = 2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cH" = (/obj/item/clothing/mask/facehugger,/mob/living/carbon/alien/humanoid/queen{fireloss = 300; stat = 2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cI" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"cJ" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"cJ" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"cK" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/awaymission/research)
"cL" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/clothing/suit/storage/labcoat,/obj/item/weapon/clipboard{pixel_x = -7; pixel_y = -4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research)
"cM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/research)
@@ -203,14 +203,14 @@
"dU" = (/obj/structure/sign/atmosplaque{pixel_y = 31},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock)
"dV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock)
"dW" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"dX" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"dY" = (/obj/structure/table,/obj/item/stack/cable_coil{amount = 5},/obj/item/weapon/screwdriver,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"dX" = (/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"dY" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{amount = 5},/obj/item/weapon/screwdriver,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"dZ" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"ea" = (/obj/machinery/light,/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eb" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"ec" = (/turf/simulated/wall,/area/awaymission/research)
"ed" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/awaymission/northblock)
-"ee" = (/obj/structure/table,/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/northblock)
+"ee" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "bluecorner"},/area/awaymission/northblock)
"ef" = (/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/awaymission/northblock)
"eg" = (/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/awaymission/northblock)
"eh" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/awaymission/northblock)
@@ -244,14 +244,14 @@
"eJ" = (/obj/machinery/atmospherics/pipe/simple{dir = 9; icon_state = "intact"; level = 2},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eK" = (/obj/structure/shuttle/engine/heater{tag = "icon-heater (WEST)"; icon_state = "heater"; dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/awaymission/research)
"eL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/awaymission/northblock)
-"eM" = (/obj/structure/table,/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/northblock)
+"eM" = (/obj/structure/table/standard,/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/northblock)
"eN" = (/obj/machinery/power/apc{cell_type = 5000; dir = 4; name = "North Block APC"; pixel_x = 28},/obj/structure/cable,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/awaymission/northblock)
"eO" = (/obj/structure/window/reinforced,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/northblock)
"eP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/northblock)
-"eQ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/grown/potato,/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"eR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"eQ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/grown/potato,/obj/item/stack/cable_coil{amount = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"eR" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"eT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/book/manual/research_and_development,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"eT" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/book/manual/research_and_development,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eU" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/remains/human,/obj/item/clothing/suit/storage/labcoat,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eV" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/obj/machinery/door/window/westleft{name = "Windoor"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"eW" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 120; icon_state = "in"; initialize_directions = 1; internal_pressure_bound = 4000; on = 1; pressure_checks = 2; pump_direction = 0},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
@@ -263,16 +263,16 @@
"fc" = (/turf/simulated/floor,/area/awaymission/northblock)
"fd" = (/obj/machinery/light/small,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/northblock)
"fe" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/awaymission/northblock)
-"ff" = (/obj/structure/table,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor{pixel_x = -3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_y = -3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"ff" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor{pixel_x = -3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_y = -3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fg" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"fh" = (/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = -3; pixel_y = -3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fh" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = -3; pixel_y = -3},/obj/item/weapon/stock_parts/micro_laser{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fi" = (/obj/machinery/computer/crew,/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/awaymission/northblock)
"fj" = (/obj/machinery/light/small,/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/northblock)
-"fk" = (/obj/structure/table,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/northblock)
+"fk" = (/obj/structure/table/standard,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/awaymission/northblock)
"fl" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/awaymission/northblock)
"fm" = (/obj/machinery/door/airlock/gold{name = "Airlock"},/turf/simulated/floor,/area/awaymission/northblock)
-"fn" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 5},/obj/item/weapon/cell/crap,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"fo" = (/obj/structure/table,/obj/item/weapon/stock_parts/matter_bin{pixel_x = 3},/obj/item/weapon/stock_parts/matter_bin{pixel_x = -3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fn" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 5},/obj/item/weapon/cell/crap,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fo" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/matter_bin{pixel_x = 3},/obj/item/weapon/stock_parts/matter_bin{pixel_x = -3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fp" = (/obj/machinery/door/window/eastleft{name = "Windoor"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fq" = (/obj/structure/target_stake,/obj/item/target/syndicate,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fr" = (/obj/structure/closet/secure_closet/captains,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
@@ -281,12 +281,12 @@
"fu" = (/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock)
"fv" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/awaymission/midblock)
"fw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock)
-"fx" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/stock_parts/console_screen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"fy" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 20; pixel_x = -3; pixel_y = -3},/obj/item/stack/sheet/glass{amount = 10; pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fx" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/stock_parts/console_screen,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fy" = (/obj/structure/table/standard,/obj/item/stack/sheet/metal{amount = 20; pixel_x = -3; pixel_y = -3},/obj/item/stack/sheet/glass{amount = 10; pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fz" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fA" = (/obj/machinery/r_n_d/protolathe,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fB" = (/obj/machinery/r_n_d/destructive_analyzer,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
-"fC" = (/obj/structure/table,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
+"fC" = (/obj/structure/table/standard,/obj/item/device/analyzer,/obj/item/device/mass_spectrometer{pixel_x = 5; pixel_y = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fD" = (/obj/structure/table/holotable,/obj/item/weapon/gun/energy/floragun{pixel_x = 2; pixel_y = 3},/obj/machinery/light,/obj/item/weapon/gun/energy/taser{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fE" = (/obj/structure/target_stake,/obj/item/weapon/grown/sunflower,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/research)
"fF" = (/obj/item/ammo_casing/c45,/obj/item/ammo_casing/c45{pixel_x = 7},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/northblock)
@@ -328,9 +328,9 @@
"gp" = (/obj/structure/closet/crate,/turf/simulated/floor,/area/awaymission/midblock)
"gq" = (/obj/machinery/gibber,/turf/simulated/floor,/area/awaymission/midblock)
"gr" = (/obj/machinery/vending/boozeomat,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/awaymission/midblock)
-"gs" = (/obj/structure/table,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor,/area/awaymission/midblock)
+"gs" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor,/area/awaymission/midblock)
"gt" = (/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/midblock)
-"gu" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/midblock)
+"gu" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/midblock)
"gv" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/midblock)
"gw" = (/obj/structure/stool/bed/chair,/turf/simulated/floor,/area/awaymission/midblock)
"gx" = (/obj/structure/table/woodentable,/obj/item/candle,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/midblock)
@@ -345,7 +345,7 @@
"gG" = (/obj/item/ammo_casing/shotgun,/obj/machinery/power/apc{cell_type = 5000; dir = 8; name = "Mid Block APC"; pixel_x = -28},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor,/area/awaymission/midblock)
"gH" = (/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
"gI" = (/obj/item/ammo_casing/shotgun,/obj/effect/decal/remains/human,/obj/item/clothing/under/rank/bartender,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/obj/item/weapon/gun/projectile/shotgun/pump/sc_pump,/turf/simulated/floor,/area/awaymission/midblock)
-"gJ" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
+"gJ" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
"gK" = (/obj/structure/stool,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
"gL" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/midblock)
"gM" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/midblock)
@@ -362,7 +362,7 @@
"gX" = (/obj/effect/decal/remains/human,/turf/simulated/floor{tag = "icon-warningcorner (NORTH)"; icon_state = "warningcorner"; dir = 1},/area/awaymission/arrivalblock)
"gY" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/arrivalblock)
"gZ" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
-"ha" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/helmet/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
+"ha" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/melee/baton,/obj/item/clothing/head/helmet/warden,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hb" = (/obj/structure/closet/wardrobe/red,/obj/machinery/light{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hc" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/arrivalblock)
"hd" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/arrivalblock)
@@ -372,8 +372,8 @@
"hh" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/window/reinforced/tinted{dir = 1},/obj/effect/decal/remains/human,/turf/simulated/floor,/area/awaymission/midblock)
"hi" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/obj/structure/window/reinforced/tinted{dir = 1},/turf/simulated/floor,/area/awaymission/midblock)
"hj" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/awaymission/midblock)
-"hk" = (/obj/structure/table,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/midblock)
-"hl" = (/obj/structure/table,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/midblock)
+"hk" = (/obj/structure/table/standard,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/midblock)
+"hl" = (/obj/structure/table/standard,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/obj/item/ammo_casing/shotgun,/turf/simulated/floor,/area/awaymission/midblock)
"hm" = (/obj/structure/stool,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
"hn" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/awaymission/midblock)
"ho" = (/obj/structure/table/woodentable,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/midblock)
@@ -393,19 +393,19 @@
"hC" = (/obj/item/ammo_casing/a12mm{pixel_x = 2; pixel_y = 5},/obj/item/ammo_casing/a12mm{pixel_x = -4; pixel_y = -5},/obj/item/ammo_casing/a12mm,/turf/simulated/floor/airless,/area/awaymission/midblock)
"hD" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock)
"hE" = (/obj/structure/sink/kitchen{pixel_y = 32},/turf/simulated/floor,/area/awaymission/midblock)
-"hF" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/item/weapon/reagent_containers/food/condiment/peppermill,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 4; pixel_y = 4},/turf/simulated/floor,/area/awaymission/midblock)
-"hG" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor,/area/awaymission/midblock)
+"hF" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/item/weapon/reagent_containers/food/condiment/peppermill,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = 4; pixel_y = 4},/turf/simulated/floor,/area/awaymission/midblock)
+"hG" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor,/area/awaymission/midblock)
"hH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/midblock)
"hI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock)
"hJ" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/arrivalblock)
"hK" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/arrivalblock)
-"hL" = (/obj/structure/table,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor,/area/awaymission/arrivalblock)
-"hM" = (/obj/structure/table,/obj/item/weapon/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
+"hL" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor,/area/awaymission/arrivalblock)
+"hM" = (/obj/structure/table/standard,/obj/item/weapon/handcuffs,/obj/item/device/flash,/turf/simulated/floor,/area/awaymission/arrivalblock)
"hN" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/arrivalblock)
"hO" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/blue,/obj/effect/decal/remains/human,/turf/simulated/floor,/area/awaymission/midblock)
"hP" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor,/area/awaymission/midblock)
"hQ" = (/obj/machinery/processor,/turf/simulated/floor,/area/awaymission/midblock)
-"hR" = (/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor,/area/awaymission/midblock)
+"hR" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor,/area/awaymission/midblock)
"hS" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
"hT" = (/obj/effect/decal/remains/human,/obj/item/weapon/butch,/obj/item/weapon/kitchenknife,/obj/item/clothing/head/chefhat,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
"hU" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
@@ -422,12 +422,12 @@
"if" = (/obj/machinery/door/airlock/glass_security{name = "Glass Airlock"; req_access_txt = "0"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/arrivalblock)
"ig" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor/airless,/area/awaymission/midblock)
"ih" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/awaymission/midblock)
-"ii" = (/obj/machinery/microwave{pixel_x = -2; pixel_y = 7},/obj/structure/table,/turf/simulated/floor,/area/awaymission/midblock)
+"ii" = (/obj/machinery/microwave{pixel_x = -2; pixel_y = 7},/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/midblock)
"ij" = (/obj/structure/stool,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock)
"ik" = (/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
"il" = (/obj/effect/decal/remains/human{desc = "This guy seemed to have died in terrible way! Half his remains are dust."; icon_state = "remains"; name = "Syndicate agent remains"},/obj/item/ammo_casing/a12mm,/obj/item/clothing/under/syndicate,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/gun/projectile/automatic/c20r/sc_c20r,/turf/simulated/floor,/area/awaymission/midblock)
"im" = (/obj/structure/stool/bed/chair{dir = 4},/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
-"in" = (/obj/structure/table,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock)
+"in" = (/obj/structure/table/standard,/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/midblock)
"io" = (/obj/structure/stool/bed/chair{dir = 8},/obj/item/ammo_casing/a12mm,/obj/item/ammo_casing/a12mm,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/midblock)
"ip" = (/obj/item/ammo_casing/a12mm,/turf/simulated/floor,/area/awaymission/arrivalblock)
"iq" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/arrivalblock)
@@ -505,7 +505,7 @@
"jK" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/awaymission/southblock)
"jL" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"jM" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/southblock)
-"jN" = (/obj/structure/table,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/southblock)
+"jN" = (/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/southblock)
"jO" = (/obj/structure/noticeboard{dir = 1; pixel_y = 32},/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"jP" = (/turf/simulated/floor,/area/awaymission/southblock)
"jQ" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/gateroom)
@@ -528,7 +528,7 @@
"kh" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"ki" = (/obj/machinery/light/small,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock)
"kj" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock)
-"kk" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock)
+"kk" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/southblock)
"kl" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"km" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/southblock)
"kn" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor,/area/awaymission/gateroom)
@@ -562,10 +562,10 @@
"kP" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"kQ" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"kR" = (/obj/structure/stool/bed/roller,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/southblock)
-"kS" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet{pixel_x = 2; pixel_y = 2},/obj/item/weapon/paper/pamphlet{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/awaymission/gateroom)
+"kS" = (/obj/structure/table/standard,/obj/item/weapon/paper/pamphlet{pixel_x = 2; pixel_y = 2},/obj/item/weapon/paper/pamphlet{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/awaymission/gateroom)
"kT" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/gateroom)
"kU" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/gateroom)
-"kV" = (/obj/structure/table,/obj/item/device/camera,/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/awaymission/gateroom)
+"kV" = (/obj/structure/table/standard,/obj/item/device/camera,/turf/simulated/floor{tag = "icon-warningcorner (EAST)"; icon_state = "warningcorner"; dir = 4},/area/awaymission/gateroom)
"kW" = (/obj/structure/stool/bed/chair/comfy/brown{tag = "icon-comfychair_brown (WEST)"; icon_state = "comfychair_brown"; dir = 8},/turf/simulated/floor/wood,/area/awaymission/southblock)
"kX" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock)
"kY" = (/obj/structure/stool/bed/chair,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/awaymission/arrivalblock)
@@ -585,7 +585,7 @@
"lm" = (/obj/machinery/suit_storage_unit/standard_unit,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/gateroom)
"ln" = (/obj/machinery/light/small,/turf/simulated/floor/wood,/area/awaymission/southblock)
"lo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/arrivalblock)
-"lp" = (/obj/structure/table,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor,/area/awaymission/arrivalblock)
+"lp" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lq" = (/obj/item/weapon/grown/deathnettle,/obj/item/clothing/shoes/brown,/obj/item/clothing/under/rank/hydroponics,/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lr" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{tag = "icon-whitehall (WEST)"; icon_state = "whitehall"; dir = 8},/area/awaymission/southblock)
"ls" = (/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"; tag = ""},/turf/simulated/floor,/area/awaymission/southblock)
@@ -600,7 +600,7 @@
"lB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/plating,/area/awaymission/arrivalblock)
"lC" = (/turf/simulated/shuttle/wall{tag = "icon-swall_s9"; icon_state = "swall_s9"; dir = 2},/area/awaymission/arrivalblock)
"lD" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor,/area/awaymission/arrivalblock)
-"lE" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/awaymission/arrivalblock)
+"lE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lF" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lG" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"lH" = (/obj/machinery/optable,/obj/machinery/light/small{dir = 1},/obj/effect/decal/remains/human,/obj/item/weapon/tank/anesthetic,/obj/item/clothing/mask/breath,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
@@ -612,7 +612,7 @@
"lN" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/gateroom)
"lO" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/magical{desc = "A high-capacity superconducting magnetic energy storage (SMES) unit."; name = "power storage unit"},/turf/simulated/floor,/area/awaymission/gateroom)
"lP" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor,/area/awaymission/arrivalblock)
-"lQ" = (/obj/structure/table,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor,/area/awaymission/arrivalblock)
+"lQ" = (/obj/structure/table/standard,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/spray/plantbgone,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lR" = (/obj/machinery/light,/turf/simulated/floor,/area/awaymission/arrivalblock)
"lS" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/surgical,/obj/item/clothing/suit/storage/labcoat,/obj/item/clothing/gloves/latex,/turf/simulated/floor{icon_state = "white"},/area/awaymission/southblock)
"lT" = (/obj/machinery/door/window/westright{name = "Windoor"},/turf/simulated/floor,/area/awaymission/southblock)
diff --git a/maps/RandomZLevels/wildwest.dm b/maps/RandomZLevels/wildwest.dm
index d2935b69f6f..3df195564f2 100644
--- a/maps/RandomZLevels/wildwest.dm
+++ b/maps/RandomZLevels/wildwest.dm
@@ -48,16 +48,16 @@
user << "The Wish Granter punishes you for your selfishness, claiming your soul and warping your body to match the darkness in your heart."
if (!(LASER in user.mutations))
user.mutations.Add(LASER)
- user << "\blue You feel pressure building behind your eyes."
+ user << "You feel pressure building behind your eyes."
if (!(COLD_RESISTANCE in user.mutations))
user.mutations.Add(COLD_RESISTANCE)
- user << "\blue Your body feels warm."
+ user << "Your body feels warm."
if (!(XRAY in user.mutations))
user.mutations.Add(XRAY)
user.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS)
user.see_in_dark = 8
user.see_invisible = SEE_INVISIBLE_LEVEL_TWO
- user << "\blue The walls suddenly disappear."
+ user << "The walls suddenly disappear."
user.dna.mutantrace = "shadow"
user.update_mutantrace()
if("Wealth")
@@ -171,4 +171,4 @@
C << "You have regenerated."
C.visible_message("[usr] appears to wake from the dead, having healed all wounds.")
C.update_canmove()
- return 1
\ No newline at end of file
+ return 1
diff --git a/maps/RandomZLevels/zresearchlabs.dmm b/maps/RandomZLevels/zresearchlabs.dmm
index 28309859e92..ab02373084a 100644
--- a/maps/RandomZLevels/zresearchlabs.dmm
+++ b/maps/RandomZLevels/zresearchlabs.dmm
@@ -17,26 +17,26 @@
"aq" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Underground Maintenance"},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"ar" = (/obj/effect/critter/fleshmonster,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"as" = (/obj/effect/critter/fleshmonster,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"at" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"au" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"av" = (/obj/structure/table,/obj/item/weapon/camera_assembly,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"at" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/stack/cable_coil,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"au" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/clothing/ears/earmuffs{pixel_x = -3; pixel_y = -2},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"av" = (/obj/structure/table/standard,/obj/item/weapon/camera_assembly,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aw" = (/obj/machinery/power/port_gen,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"ax" = (/obj/effect/decal/cleanable/dirt,/obj/effect/alien/flesh/weeds/node,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"ay" = (/obj/machinery/artifact,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"az" = (/obj/machinery/floodlight,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aA" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"aB" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"aC" = (/obj/structure/table,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aB" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aC" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aD" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/wrench,/obj/item/weapon/weldingtool,/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aE" = (/obj/structure/rack{dir = 8; layer = 2.9},/obj/item/clothing/gloves/yellow,/obj/item/weapon/storage/belt/utility,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aF" = (/obj/structure/closet/radiation,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aG" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aH" = (/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aI" = (/turf/unsimulated/desert,/area/awaymission/labs/cave)
-"aJ" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -1; pixel_y = 7},/obj/item/stack/cable_coil{pixel_x = 0; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"aK" = (/obj/structure/table,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"aL" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/machinery/camera{c_tag = "Engineering SMES Room"; dir = 4; network = "SS13"},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"aM" = (/obj/structure/table,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/module/power_control,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aJ" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{pixel_x = -1; pixel_y = 7},/obj/item/stack/cable_coil{pixel_x = 0; pixel_y = 3},/obj/item/stack/cable_coil{pixel_x = 0; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aK" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aL" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/machinery/camera{c_tag = "Engineering SMES Room"; dir = 4; network = "SS13"},/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"aM" = (/obj/structure/table/standard,/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/module/power_control,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"aN" = (/obj/effect/alien/flesh/weeds/node,/turf/unsimulated/desert,/area/awaymission/labs/cave)
"aO" = (/obj/effect/critter/fleshmonster/fleshslime,/turf/unsimulated/desert,/area/awaymission/labs/cave)
"aP" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
@@ -54,17 +54,17 @@
"bb" = (/obj/item/apc_frame,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bc" = (/obj/structure/closet/toolcloset,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
-"be" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
-"bf" = (/obj/structure/table,/obj/item/blueprints,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
-"bg" = (/obj/structure/table,/obj/item/weapon/camera_assembly,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
+"be" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
+"bf" = (/obj/structure/table/standard,/obj/item/blueprints,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
+"bg" = (/obj/structure/table/standard,/obj/item/weapon/camera_assembly,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bh" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"bi" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/dirt,/obj/effect/landmark/corpse/alien/laborer,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"bj" = (/obj/effect/critter/fleshmonster,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
-"bk" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -1; pixel_y = 7},/obj/item/weapon/circuitboard/autolathe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
+"bk" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{pixel_x = -1; pixel_y = 7},/obj/item/weapon/circuitboard/autolathe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bl" = (/obj/effect/decal/cleanable/blood/tracks,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bm" = (/obj/structure/door_assembly/door_assembly_research,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
-"bn" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
-"bo" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
+"bn" = (/obj/structure/table,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
+"bo" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bp" = (/obj/structure/girder,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
"bq" = (/obj/effect/decal/cleanable/blood/tracks,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/awaymission/labs/cave)
"br" = (/obj/effect/decal/cleanable/dirt,/obj/effect/critter/fleshmonster/fleshslime,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/cave)
@@ -171,8 +171,8 @@
"do" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"dr" = (/obj/structure/table,/obj/item/weapon/implanter/nanoaug/strength,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"ds" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Study of the Soghun genome has proven successful. Using their blood as a base, we have managed to develop a series of nanoaugmentations that operate on a biological basis. With it, we can supply our commandos with implants that would give them the strength of at least ten Soghun, or the combat skills of many more. Further research is required to develop safer solutions, but the soldiers seem receptive to the current batch of test implants. They are to be kept under watch at all times in their quarters."; name = "Research Notes"; text = "p"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"dr" = (/obj/structure/table/standard,/obj/item/weapon/implanter/nanoaug/strength,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"ds" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Study of the Soghun genome has proven successful. Using their blood as a base, we have managed to develop a series of nanoaugmentations that operate on a biological basis. With it, we can supply our commandos with implants that would give them the strength of at least ten Soghun, or the combat skills of many more. Further research is required to develop safer solutions, but the soldiers seem receptive to the current batch of test implants. They are to be kept under watch at all times in their quarters."; name = "Research Notes"; text = "p"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/alien/flesh/weeds/node,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"du" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dv" = (/obj/machinery/vending/snack,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
@@ -189,11 +189,11 @@
"dG" = (/obj/effect/decal/cleanable/blood,/obj/effect/landmark/corpse/alien/testsubject,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dH" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dI" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"dJ" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"dK" = (/obj/structure/table,/obj/item/pizzabox,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"dJ" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"dK" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dL" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
"dM" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
-"dN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
+"dN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
"dO" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dP" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/effect/alien/flesh/weeds/node,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dQ" = (/obj/structure/stool/bed/chair/office/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
@@ -202,7 +202,7 @@
"dT" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
"dU" = (/turf/simulated/wall/r_wall,/area/awaymission/labs/gateway)
"dV" = (/obj/machinery/door/airlock/hatch{name = "Gateway Maintenance Storage"},/turf/simulated/floor,/area/awaymission/labs/gateway)
-"dW" = (/obj/structure/table,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"dW" = (/obj/structure/table/standard,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dX" = (/obj/machinery/bodyscanner,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dY" = (/obj/machinery/body_scanconsole,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"dZ" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
@@ -218,8 +218,8 @@
"ej" = (/obj/structure/noticeboard{pixel_y = -3},/turf/simulated/wall/r_wall,/area/awaymission/labs/researchdivision)
"ek" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/wall/r_wall,/area/awaymission/labs/researchdivision)
"el" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"em" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
-"en" = (/obj/structure/table,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
+"em" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
+"en" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "freezerfloor"},/area/awaymission/labs/researchdivision)
"eo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "sandstorm shutters"; layer = 2.4; name = "Sandstorm Shutters"; opacity = 1},/turf/simulated/floor,/area/awaymission/labs/militarydivision)
"ep" = (/obj/structure/rack,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/awaymission/labs/militarydivision)
"eq" = (/obj/structure/rack,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "warning"},/area/awaymission/labs/militarydivision)
@@ -232,8 +232,8 @@
"ex" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
"ey" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
"ez" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall/r_wall,/area/awaymission/labs/gateway)
-"eA" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
-"eB" = (/obj/structure/table,/obj/item/weapon/phone,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
+"eA" = (/obj/structure/table/standard,/obj/item/weapon/paper/pamphlet,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
+"eB" = (/obj/structure/table/standard,/obj/item/weapon/phone,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
"eC" = (/obj/structure/filingcabinet,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump,/turf/simulated/floor,/area/awaymission/labs/gateway)
"eD" = (/obj/machinery/power/smes,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/researchdivision)
"eE" = (/obj/machinery/power/smes{charge = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/researchdivision)
@@ -310,7 +310,7 @@
"fX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
"fY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/gateway)
"fZ" = (/obj/machinery/turretid{name = "Gateway Turret Control"; pixel_x = -24},/turf/simulated/floor,/area/awaymission/labs/gateway)
-"ga" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 7},/turf/simulated/floor,/area/awaymission/labs/gateway)
+"ga" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 7},/turf/simulated/floor,/area/awaymission/labs/gateway)
"gb" = (/obj/machinery/door/airlock/glass_research{name = "Storage"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/labs/researchdivision)
"gc" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/xray,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"gd" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
@@ -415,7 +415,7 @@
"hY" = (/obj/structure/stool/bed/chair/comfy/black,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
"hZ" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/landmark/corpse/officer,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
"ia" = (/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
-"ib" = (/obj/structure/table,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
+"ib" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"ic" = (/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"id" = (/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"ie" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
@@ -450,7 +450,7 @@
"iH" = (/obj/machinery/recharge_station,/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
"iI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor,/area/awaymission/labs/researchdivision)
"iJ" = (/obj/structure/rack,/turf/simulated/floor,/area/awaymission/labs/researchdivision)
-"iK" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
+"iK" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table/standard,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"iL" = (/obj/structure/table/reinforced,/obj/item/metroid_core,/obj/item/weapon/camera_assembly{pixel_x = 2; pixel_y = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; frequency = 1379; id_tag = "mining_maineast_pump"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"iM" = (/obj/machinery/door/airlock/maintenance_hatch,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"iN" = (/obj/structure/stool/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
@@ -471,8 +471,8 @@
"jc" = (/obj/structure/table/reinforced,/obj/item/weapon/book/manual/research_and_development{pixel_x = -1; pixel_y = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"jd" = (/obj/structure/stool/bed/chair/office/dark,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
"je" = (/obj/structure/table/reinforced,/obj/item/stack/cable_coil{pixel_y = 3},/obj/item/stack/cable_coil{pixel_y = 3},/obj/item/stack/cable_coil{pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/researchdivision)
-"jf" = (/obj/structure/table,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
-"jg" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"jf" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"jg" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"jh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"ji" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"jj" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/under/rank/navysecurity,/obj/item/clothing/suit/armor/navysecvest,/turf/simulated/floor{icon_state = "wood"},/area/awaymission/labs/militarydivision)
@@ -484,8 +484,8 @@
"jp" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"jq" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"jr" = (/obj/machinery/camera{c_tag = "Central Hallway South-West"; dir = 8},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
-"js" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
-"jt" = (/obj/structure/table,/obj/item/weapon/paper{icon_state = "paper_words"; info = "We got back from another ship-out today. Those idiots on the NSV Icarus somehow managed to land themselves in the middle of a fleet of pirates. Frigates were downed easily, and they boarded with the intent to take the artillery cannon. Thankfully, those implants the doctors gave us worked like a charm. I think they made me sick, though, I've got this terrible rash on my arm that is a pain to scratch. Making my skin look all pink and nasty. Gonna go see Doc Brown in the monring, I need some rest after all we've been through."; name = "Journal Page"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
+"js" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
+"jt" = (/obj/structure/table/standard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "We got back from another ship-out today. Those idiots on the NSV Icarus somehow managed to land themselves in the middle of a fleet of pirates. Frigates were downed easily, and they boarded with the intent to take the artillery cannon. Thankfully, those implants the doctors gave us worked like a charm. I think they made me sick, though, I've got this terrible rash on my arm that is a pain to scratch. Making my skin look all pink and nasty. Gonna go see Doc Brown in the monring, I need some rest after all we've been through."; name = "Journal Page"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
"ju" = (/obj/item/ammo_casing/c9mm{pixel_y = -8},/turf/simulated/floor,/area/awaymission/labs/militarydivision)
"jv" = (/obj/item/ammo_casing/c9mm{pixel_x = -28; pixel_y = -4},/turf/simulated/floor,/area/awaymission/labs/militarydivision)
"jw" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hos,/turf/simulated/floor,/area/awaymission/labs/militarydivision)
@@ -506,7 +506,7 @@
"jL" = (/obj/structure/closet/secure_closet/engineering_welding,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"jM" = (/obj/structure/stool/bed/chair/office/dark{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
"jN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
-"jO" = (/obj/structure/table,/obj/item/weapon/butch{pixel_y = 3},/obj/item/weapon/kitchenknife{pixel_x = -4; pixel_y = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
+"jO" = (/obj/structure/table/standard,/obj/item/weapon/butch{pixel_y = 3},/obj/item/weapon/kitchenknife{pixel_x = -4; pixel_y = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
"jP" = (/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
"jQ" = (/obj/effect/decal/cleanable/blood/splatter,/obj/effect/landmark/corpse/officer,/obj/item/weapon/gun/projectile/silenced/sc_silenced{desc = "A sidearm commonly favored by terrestrial security forces."; icon_state = "g115 Pistol"; name = "Pistol"; silenced = 0},/turf/simulated/floor,/area/awaymission/labs/militarydivision)
"jR" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/hos,/obj/machinery/camera{c_tag = "Central Hallway South-West"; dir = 8},/turf/simulated/floor,/area/awaymission/labs/militarydivision)
@@ -515,10 +515,10 @@
"jU" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
"jV" = (/obj/effect/decal/cleanable/dirt,/obj/effect/critter/fleshmonster,/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
"jW" = (/obj/machinery/door/airlock/glass_research{name = "Thermal Suit Storage"},/turf/simulated/floor,/area/awaymission/labs/researchdivision)
-"jX" = (/obj/structure/table,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"jX" = (/obj/structure/table/standard,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"jY" = (/obj/machinery/turretcover,/turf/unsimulated/desert,/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"jZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/awaymission/labs/militarydivision)
-"ka" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -2; pixel_y = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
+"ka" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -2; pixel_y = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/militarydivision)
"kb" = (/obj/item/device/violin,/turf/simulated/floor,/area/awaymission/labs/militarydivision)
"kc" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light,/turf/simulated/floor{temperature = 393.15},/area/awaymission/labs/researchdivision)
"kd" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "delivery"; name = "floor"; temperature = 393.15},/area/awaymission/labs/researchdivision)
@@ -608,7 +608,7 @@
"lJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"lK" = (/obj/structure/cable,/obj/effect/decal/cleanable/dirt,/obj/machinery/power/solar_control,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"lL" = (/obj/machinery/camera{c_tag = "Aft Port Solar Control"; dir = 1},/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable,/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
-"lM" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"lM" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"lN" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/turf/simulated/floor/plating{icon_state = "solarpanel"; temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
@@ -617,8 +617,8 @@
"lS" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lT" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "portsolar"; name = "Port Solar Array"},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{icon_state = "solarpanel"; temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
-"lV" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
-"lW" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_y = -3},/obj/item/stack/cable_coil{pixel_y = 3},/obj/item/stack/cable_coil{pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"lV" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/awaymission/labs/solars)
+"lW" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{pixel_y = -3},/obj/item/stack/cable_coil{pixel_y = 3},/obj/item/stack/cable_coil{pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/labs/solars)
"lX" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lY" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
"lZ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{temperature = 393.15},/area/awaymission/desert{lighting_use_dynamic = 1; luminosity = 1; name = "Desert"})
@@ -660,9 +660,9 @@
"mJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cargo)
"mK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cargo)
"mL" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor,/area/awaymission/labs/cargo)
-"mM" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/labs/civilian)
-"mN" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/labs/civilian)
-"mO" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
+"mM" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/labs/civilian)
+"mN" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/labs/civilian)
+"mO" = (/obj/machinery/atmospherics/pipe/simple{color = "blue"; icon_state = "intact-b-f"; level = 1; name = "pipe"},/obj/structure/table/standard,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
"mP" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
"mQ" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
"mR" = (/obj/structure/sink/kitchen{pixel_y = 23},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
@@ -698,7 +698,7 @@
"nv" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/oil,/turf/simulated/floor,/area/awaymission/labs/cargo)
"nw" = (/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/labs/cargo)
"nx" = (/obj/machinery/bot/mulebot,/turf/simulated/floor{icon_state = "bot"},/area/awaymission/labs/cargo)
-"ny" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/wrapping_paper,/turf/simulated/floor,/area/awaymission/labs/cargo)
+"ny" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/item/weapon/wrapping_paper,/turf/simulated/floor,/area/awaymission/labs/cargo)
"nz" = (/obj/structure/closet/crate/secure/bin{name = "Valuable Ores"},/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/diamond,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/uranium,/obj/item/weapon/ore/clown,/turf/simulated/floor,/area/awaymission/labs/cargo)
"nA" = (/obj/structure/closet/crate/secure/bin,/turf/simulated/floor,/area/awaymission/labs/cargo)
"nB" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/awaymission/labs/cave)
@@ -725,35 +725,35 @@
"nW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/labs/cargo)
"nX" = (/obj/machinery/bot/mulebot,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "bot"},/area/awaymission/labs/cargo)
"nY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall,/area/awaymission/labs/cargo)
-"nZ" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/awaymission/labs/cargo)
+"nZ" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/awaymission/labs/cargo)
"oa" = (/obj/effect/critter/fleshmonster/fleshslime,/turf/simulated/floor,/area/awaymission/labs/cargo)
"ob" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cave)
"oc" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/awaymission/labs/cave)
-"od" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
-"oe" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
-"of" = (/obj/structure/table,/obj/machinery/reagentgrinder{pixel_x = -1; pixel_y = 7},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
+"od" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
+"oe" = (/obj/structure/table/standard,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
+"of" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder{pixel_x = -1; pixel_y = 7},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
"og" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/labs/civilian)
"oh" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor,/area/awaymission/labs/civilian)
"oi" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/labs/civilian)
"oj" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/command)
-"ok" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/labs/command)
+"ok" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/multitool,/turf/simulated/floor{icon_state = "red"; dir = 9},/area/awaymission/labs/command)
"ol" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/labs/command)
"om" = (/obj/item/weapon/wrench,/obj/structure/table/reinforced,/obj/machinery/camera{c_tag = "Bridge West"; dir = 2},/obj/item/device/assembly/timer,/obj/item/device/assembly/signaler,/obj/item/device/assembly/signaler,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/labs/command)
"on" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/awaymission/labs/command)
"oo" = (/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/awaymission/labs/command)
-"op" = (/obj/structure/table,/obj/machinery/camera{c_tag = "Bridge East"; dir = 2},/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/labs/command)
+"op" = (/obj/structure/table/standard,/obj/machinery/camera{c_tag = "Bridge East"; dir = 2},/obj/item/weapon/storage/fancy/donut_box,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/labs/command)
"oq" = (/obj/machinery/computer/med_data,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/labs/command)
-"or" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/awaymission/labs/command)
+"or" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/toolbox/emergency,/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/awaymission/labs/command)
"os" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/awaymission/labs/command)
"ot" = (/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay"},/turf/simulated/floor,/area/awaymission/labs/command)
"ou" = (/obj/structure/ore_box,/turf/simulated/floor,/area/awaymission/labs/cargo)
"ov" = (/turf/simulated/floor{icon_state = "bot"},/area/awaymission/labs/cargo)
-"ow" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cargo)
+"ow" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cargo)
"ox" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/awaymission/labs/cargo)
"oy" = (/obj/effect/landmark/corpse/alien/cargo,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/awaymission/labs/cave)
"oz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/cave)
"oA" = (/obj/effect/decal/cleanable/blood/splatter,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
-"oB" = (/obj/structure/table,/obj/item/weapon/butch{pixel_y = 3},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
+"oB" = (/obj/structure/table/standard,/obj/item/weapon/butch{pixel_y = 3},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
"oC" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/civilian)
"oD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/civilian)
"oE" = (/obj/machinery/door/airlock/glass{name = "Civilian Division"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/civilian)
@@ -785,7 +785,7 @@
"pe" = (/obj/machinery/conveyor{dir = 5; id = "garbage"},/turf/simulated/floor,/area/awaymission/labs/cargo)
"pf" = (/obj/machinery/conveyor{dir = 4; id = "mining_internal"},/turf/simulated/floor,/area/awaymission/labs/cargo)
"pg" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/effect/alien/flesh/weeds/node,/turf/simulated/floor,/area/awaymission/labs/cargo)
-"ph" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/labs/cave)
+"ph" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/labs/cave)
"pi" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/awaymission/labs/cave)
"pj" = (/obj/structure/largecrate,/turf/simulated/floor,/area/awaymission/labs/cave)
"pk" = (/obj/structure/table/reinforced,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/awaymission/labs/civilian)
@@ -852,7 +852,7 @@
"qt" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/unsimulated/desert,/area/awaymission/labs/cave)
"qu" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
"qv" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
-"qw" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
+"qw" = (/obj/structure/table/standard,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
"qx" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
"qy" = (/obj/structure/barricade/wooden,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
"qz" = (/obj/machinery/door/airlock/glass{name = "Mess Hall"},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
@@ -878,7 +878,7 @@
"qT" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/command)
"qU" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/structure/closet/crate{name = "Silver Crate"},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/awaymission/labs/command)
"qV" = (/obj/effect/alien/flesh/weeds,/turf/unsimulated/desert,/area/awaymission/labs/cave)
-"qW" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/fork,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
+"qW" = (/obj/structure/table/standard,/obj/item/weapon/kitchen/utensil/fork,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/labs/civilian)
"qX" = (/obj/machinery/door/airlock/glass{name = "Civilian Division"},/turf/simulated/floor,/area/awaymission/labs/civilian)
"qY" = (/obj/machinery/door/airlock/glass{name = "Command Rotunda"},/turf/simulated/floor,/area/awaymission/labs/command)
"qZ" = (/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 11},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/awaymission/labs/command)
@@ -907,8 +907,8 @@
"rw" = (/obj/structure/toilet,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/civilian)
"rx" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
"ry" = (/obj/effect/decal/cleanable/blood,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
-"rz" = (/obj/structure/table,/obj/structure/bedsheetbin{pixel_x = -2; pixel_y = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
-"rA" = (/obj/structure/table,/obj/item/clothing/suit/storage/labcoat{pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
+"rz" = (/obj/structure/table/standard,/obj/structure/bedsheetbin{pixel_x = -2; pixel_y = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
+"rA" = (/obj/structure/table/standard,/obj/item/clothing/suit/storage/labcoat{pixel_y = 3},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/civilian)
"rB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/awaymission/labs/civilian)
"rC" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/awaymission/labs/civilian)
"rD" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/awaymission/labs/civilian)
@@ -936,9 +936,9 @@
"rZ" = (/obj/effect/alien/flesh/weeds{icon_state = "flesh1"},/obj/effect/decal/cleanable/blood/gibs/limb,/turf/unsimulated/desert,/area/awaymission/labs/cave)
"sa" = (/obj/machinery/shower{tag = "icon-shower (EAST)"; icon_state = "shower"; dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/civilian)
"sb" = (/obj/structure/stool,/turf/simulated/floor,/area/awaymission/labs/civilian)
-"sc" = (/obj/structure/table,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Memo to all Personnel
Greetings,
I have recently heard of rumors amongst our workers that we 'kidnap' some in their sleep and drag them off to the high-security laboratories. This has caused enough stir in our ranks that I personally am writing to you to denounce these naysayings. We at NanoTrasen would never do such things to harm our personnel, especially ones who put their lives on the line in dangerous caverns and extreme temperatures to excavate century-old artifacts. Rest assured, the laboratories in the high-security section are for nothing but the studying of the artifacts that you bring back to us.
Now that that is out of the way, allow me to personally give my congratulations to our Head of Excavation, S'rrsa Unoyo, who is celebrating her twenty-seventh birthday today. Celebrations will be held in the mess hall after work hours, and all staff are invited.
As always, please have a productive shift, and do not listen to the fearmongering of certain individuals. You are safe here, with us, at NanoTrasen.
-Overseer McDonald"; name = "Personnel Memo"},/turf/simulated/floor,/area/awaymission/labs/civilian)
-"sd" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/labs/civilian)
-"se" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/labs/civilian)
+"sc" = (/obj/structure/table/standard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Memo to all Personnel
Greetings,
I have recently heard of rumors amongst our workers that we 'kidnap' some in their sleep and drag them off to the high-security laboratories. This has caused enough stir in our ranks that I personally am writing to you to denounce these naysayings. We at NanoTrasen would never do such things to harm our personnel, especially ones who put their lives on the line in dangerous caverns and extreme temperatures to excavate century-old artifacts. Rest assured, the laboratories in the high-security section are for nothing but the studying of the artifacts that you bring back to us.
Now that that is out of the way, allow me to personally give my congratulations to our Head of Excavation, S'rrsa Unoyo, who is celebrating her twenty-seventh birthday today. Celebrations will be held in the mess hall after work hours, and all staff are invited.
As always, please have a productive shift, and do not listen to the fearmongering of certain individuals. You are safe here, with us, at NanoTrasen.
-Overseer McDonald"; name = "Personnel Memo"},/turf/simulated/floor,/area/awaymission/labs/civilian)
+"sd" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/labs/civilian)
+"se" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/labs/civilian)
"sf" = (/obj/structure/closet/toolcloset,/turf/simulated/floor,/area/awaymission/labs/civilian)
"sg" = (/obj/machinery/portable_atmospherics/scrubber,/turf/simulated/floor,/area/awaymission/labs/civilian)
"sh" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor,/area/awaymission/labs/civilian)
@@ -951,7 +951,7 @@
"so" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor,/area/awaymission/labs/civilian)
"sp" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/civilian)
"sq" = (/obj/machinery/power/apc{dir = 4; name = "Worn-out APC"; pixel_x = 24; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/awaymission/labs/civilian)
-"sr" = (/obj/structure/table,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Hey, Carlos, when you get this, get down into the sewers and fix the damn piping, will you? That nasty fleshy shit's been growing again. Blocked off half the pipes and it's stil clogging the vents. Has to be coming from the high security section, that's the only pipe I hadn't tried to seal yet. Dunno what those freaks in research are doing but tell them to fucking knock it off. I'm not paid enough to scrape that crap off the walls down there. It's starting to get into the air as well, smells terrible. Yell at the head egghead or something."; name = "Note"},/turf/simulated/floor,/area/awaymission/labs/civilian)
+"sr" = (/obj/structure/table/standard,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Hey, Carlos, when you get this, get down into the sewers and fix the damn piping, will you? That nasty fleshy shit's been growing again. Blocked off half the pipes and it's stil clogging the vents. Has to be coming from the high security section, that's the only pipe I hadn't tried to seal yet. Dunno what those freaks in research are doing but tell them to fucking knock it off. I'm not paid enough to scrape that crap off the walls down there. It's starting to get into the air as well, smells terrible. Yell at the head egghead or something."; name = "Note"},/turf/simulated/floor,/area/awaymission/labs/civilian)
"ss" = (/turf/simulated/wall/r_wall,/area/awaymission/labs/security)
"st" = (/obj/structure/grille{layer = 3.3},/obj/structure/window/reinforced{dir = 5; health = 1e+007; layer = 3.4},/obj/machinery/door/poddoor{density = 1; icon_state = "pdoor1"; id = "sandstorm shutters"; layer = 2.4; name = "Sandstorm Shutters"; opacity = 1},/turf/simulated/floor,/area/awaymission/labs/security)
"su" = (/turf/simulated/wall,/area/awaymission/labs/medical)
@@ -965,9 +965,9 @@
"sC" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor,/area/awaymission/labs/security)
"sD" = (/obj/structure/closet/secure_closet/security,/turf/simulated/floor,/area/awaymission/labs/security)
"sE" = (/obj/machinery/vending/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"sF" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"sG" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop{pixel_x = 1; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"sH" = (/obj/structure/table,/obj/item/weapon/storage/beakerbox,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"sF" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"sG" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop{pixel_x = 1; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"sH" = (/obj/structure/table/standard,/obj/item/weapon/storage/beakerbox,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"sI" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"sJ" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"sK" = (/obj/structure/stool/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
@@ -981,8 +981,8 @@
"sS" = (/obj/machinery/door/airlock/glass_medical{name = "Medical"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"sT" = (/obj/machinery/door/airlock/glass_medical{name = "Medical"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/command)
"sU" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/awaymission/labs/security)
-"sV" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor,/area/awaymission/labs/security)
-"sW" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/labs/security)
+"sV" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor,/area/awaymission/labs/security)
+"sW" = (/obj/structure/table/standard,/turf/simulated/floor,/area/awaymission/labs/security)
"sX" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/labs/security)
"sY" = (/obj/effect/decal/cleanable/blood/tracks,/turf/simulated/floor,/area/awaymission/labs/security)
"sZ" = (/obj/effect/critter/creature{armor = 20; atksame = 0; desc = "A blob of pulsating human-like flesh, bearing one angry eye and a huge mouth."; health = 130; max_health = 130; name = "Failed Experiment"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
@@ -995,14 +995,14 @@
"tg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/wall/r_wall,/area/awaymission/labs/security)
"th" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
"ti" = (/obj/structure/stool/bed/chair{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
-"tj" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor,/area/awaymission/labs/security)
-"tk" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
+"tj" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/turf/simulated/floor,/area/awaymission/labs/security)
+"tk" = (/obj/structure/table/standard,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
"tl" = (/obj/structure/stool/bed/chair{dir = 8},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
"tm" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
"tn" = (/obj/structure/closet/secure_closet/personal/patient,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"to" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tp" = (/obj/machinery/vending/wallmed1{pixel_y = 28},/obj/structure/stool/bed/chair/office/light{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"tq" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/clothing/tie/stethoscope,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"tq" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/clothing/tie/stethoscope,/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/space,/area/awaymission/labs/medical)
"ts" = (/obj/effect/decal/cleanable/blood/tracks,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tt" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor,/area/awaymission/labs/security)
@@ -1010,23 +1010,23 @@
"tv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/awaymission/labs/security)
"tw" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/awaymission/labs/security)
"tx" = (/obj/machinery/door/airlock/medical{name = "Patient Room"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"ty" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"ty" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tz" = (/obj/machinery/sleeper,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tA" = (/obj/machinery/sleep_console,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tB" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/awaymission/labs/security)
"tC" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/labs/security)
"tD" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"tE" = (/obj/item/weapon/gun/syringe/rapidsyringe,/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"tE" = (/obj/item/weapon/gun/syringe/rapidsyringe,/obj/structure/table/standard,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tG" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tH" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"tI" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"tI" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tJ" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tK" = (/obj/machinery/chem_dispenser,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tL" = (/obj/machinery/bodyscanner,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tM" = (/obj/machinery/body_scanconsole,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; frequency = 1379; id_tag = "engineering_aux_pump"; on = 1},/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tN" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"tO" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"tO" = (/obj/structure/table/standard,/obj/item/weapon/storage/pill_bottle,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tP" = (/obj/effect/decal/cleanable/greenglow,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"tQ" = (/obj/effect/critter/fleshmonster,/turf/simulated/floor,/area/awaymission/labs/security)
"tR" = (/obj/structure/rack,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security)
@@ -1049,18 +1049,18 @@
"ui" = (/obj/structure/closet/secure_closet/warden,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"uj" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security)
"uk" = (/obj/structure/rack,/obj/item/ammo_magazine/c45,/obj/item/weapon/gun/projectile/silenced/sc_silenced{desc = "A sidearm commonly favored by terrestrial security forces."; icon_state = "g115 Pistol"; name = "Pistol"; silenced = 0},/turf/simulated/floor{tag = "icon-vault (WEST)"; icon_state = "vault"; dir = 8},/area/awaymission/labs/security)
-"ul" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel_med,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"ul" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel_med,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"um" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"un" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
-"uo" = (/obj/structure/table,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"up" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"uq" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"ur" = (/obj/structure/table,/obj/machinery/light,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"uo" = (/obj/structure/table/standard,/obj/item/weapon/gun/syringe/rapidsyringe,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"up" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"uq" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"ur" = (/obj/structure/table/standard,/obj/machinery/light,/obj/machinery/power/apc{dir = 0; name = "Worn-out APC"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"us" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"ut" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"uu" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"uv" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
-"uw" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"uu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"uv" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
+"uw" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"ux" = (/obj/machinery/iv_drip,/turf/simulated/floor{icon_state = "white"},/area/awaymission/labs/medical)
"uy" = (/obj/machinery/vending/cola,/turf/simulated/floor,/area/awaymission/labs/security)
"uz" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westright,/obj/machinery/door/window/eastright,/obj/item/weapon/paper{icon_state = "paper_words"; info = "Incident Report
Arresting Officer: Meyers
Suspect: Laborer #24
Charge: Assault
Description of events: Damn fool clocked another lizard upside the head with his wrench, started screaming about how the voices in his head wanted him to bring bodies to research to 'feed the mother' or something. Probably spent too much time down in those caves. Give him a good couple of days in the brig, he'll snap out of it quick enough."; name = "Incident Report"},/turf/simulated/floor,/area/awaymission/labs/security)
@@ -1072,13 +1072,13 @@
"uF" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/security)
"uG" = (/obj/structure/toilet,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/security)
"uH" = (/obj/machinery/shower,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/security)
-"uI" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
+"uI" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"uJ" = (/obj/machinery/door/airlock/glass_security{name = "Armory"},/turf/simulated/floor,/area/awaymission/labs/security)
"uK" = (/obj/machinery/computer/arcade,/turf/simulated/floor,/area/awaymission/labs/security)
"uL" = (/obj/machinery/door/window/westright,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/security)
"uM" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/labs/security)
"uN" = (/obj/structure/closet/secure_closet/brig,/turf/simulated/floor,/area/awaymission/labs/security)
-"uO" = (/obj/structure/table,/obj/machinery/recharger,/obj/item/weapon/gun/energy/stunrevolver{pixel_y = 6},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
+"uO" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/gun/energy/stunrevolver{pixel_y = 6},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/labs/security)
"uP" = (/obj/machinery/recharger,/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/labs/security)
"uQ" = (/obj/machinery/recharger,/obj/structure/reagent_dispensers/peppertank{pixel_x = 0; pixel_y = -30},/obj/structure/table/reinforced,/obj/machinery/light,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/labs/security)
"uR" = (/obj/machinery/recharger,/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/labs/security)
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 18a613af27c..951bb80cdf2 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -15,7 +15,7 @@
"aao" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/space)
"aap" = (/turf/simulated/floor/airless,/area/space)
"aaq" = (/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space)
-"aar" = (/obj/structure/grille/broken,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/space)
+"aar" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/space)
"aas" = (/obj/item/clothing/suit/ianshirt,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/space)
"aat" = (/turf/simulated/wall/r_wall,/area/space)
"aau" = (/turf/space,/area/skipjack_station/northwest_solars)
@@ -98,13 +98,13 @@
"abT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/security/brig)
"abU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/security/prison)
"abV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/prison)
-"abW" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "brig_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/fore)
+"abW" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(2,12,24)},/turf/simulated/floor/plating,/area/security/brig)
"abX" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "brig_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "brig_solar_airlock"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_airpump = "brig_solar_pump"; tag_chamber_sensor = "brig_solar_sensor"; tag_exterior_door = "brig_solar_outer"; tag_interior_door = "brig_solar_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "brig_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/foresolar)
-"abY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "brig_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
-"abZ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "brig_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/foresolar)
+"abY" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/door/window/eastleft{req_access = list(63)},/turf/simulated/floor,/area/security/lobby)
+"abZ" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/security_starboard)
"aca" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
"acb" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
-"acc" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "brig_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"acc" = (/obj/structure/table/standard,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo,/obj/item/clothing/accessory/badge/holo/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"acd" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/security_port)
"ace" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical)
"acf" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{icon_state = "dark"},/area/security/tactical)
@@ -117,7 +117,7 @@
"acm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/main)
"acn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/main)
"aco" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/main)
-"acp" = (/obj/machinery/door/airlock/engineering{name = "Fore Solar Access"; req_access = list(10)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/foresolar)
+"acp" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera/network/security{c_tag = "Security - Equipment South"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"acq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/main)
"acr" = (/turf/simulated/wall,/area/security/main)
"acs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
@@ -134,12 +134,12 @@
"acD" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = list(3)},/obj/random/projectile,/obj/random/projectile,/obj/random/projectile,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"acE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"acF" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = list(3)},/obj/structure/window/reinforced{dir = 8},/obj/random/energy,/obj/random/energy,/obj/random/energy,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
-"acG" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/security/main)
-"acH" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/floor,/area/security/main)
-"acI" = (/obj/structure/disposalpipe/segment,/obj/structure/table,/obj/machinery/recharger,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/main)
+"acG" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/evidence,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
+"acH" = (/obj/structure/table/standard,/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/security/brig)
+"acI" = (/obj/structure/table/standard,/obj/item/weapon/folder/red{pixel_x = 2; pixel_y = 4},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Storage"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"acJ" = (/obj/structure/table/rack,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/light{dir = 1},/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = list(3)},/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/flash,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/c45m/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/ammo_magazine/mc9mmt/rubber,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/storage/box/flashshells,/obj/item/weapon/storage/box/stunshells,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/c45m/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/ammo_magazine/mc9mmt/practice,/obj/item/weapon/storage/box/practiceshells,/obj/item/weapon/storage/box/practiceshells,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
-"acK" = (/obj/structure/table,/obj/item/weapon/reagent_containers/syringe/inaprovaline,/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_y = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/security/main)
-"acL" = (/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/security/main)
+"acK" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"acL" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/machinery/camera/network/security{c_tag = "Security - Processing"; dir = 4},/turf/simulated/floor,/area/security/brig)
"acM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/main)
"acN" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"acO" = (/obj/machinery/computer/security,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
@@ -153,12 +153,12 @@
"acW" = (/obj/structure/table/rack,/obj/machinery/door/window/brigdoor{dir = 2; name = "Weapons locker"; req_access = list(3)},/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"acX" = (/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"acY" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/security/armoury)
-"acZ" = (/obj/structure/table,/obj/machinery/recharger,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main)
+"acZ" = (/obj/structure/table/standard,/turf/simulated/floor,/area/security/brig)
"ada" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/security/main)
"adb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/security/main)
"adc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/main)
"add" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/main)
-"ade" = (/obj/structure/table,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/bruise_pack{pixel_x = 10},/obj/item/stack/medical/ointment{pixel_y = 10},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/security/main)
+"ade" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/main)
"adf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/armoury)
"adg" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/main)
"adh" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/vending/snack,/turf/simulated/floor,/area/security/main)
@@ -182,7 +182,7 @@
"adz" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 4; name = "Weapons locker"; req_access = list(3)},/obj/structure/table/rack,/obj/item/clothing/suit/armor/riot,/obj/item/weapon/melee/baton/loaded,/obj/item/weapon/shield/riot,/obj/item/clothing/head/helmet/riot,/obj/machinery/light{dir = 8},/obj/machinery/camera/network/security{c_tag = "Armoury - Secure"; dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"adA" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/noticeboard{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"adB" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"adC" = (/obj/structure/table,/obj/machinery/recharger,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
+"adC" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/security_port)
"adD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port)
"adE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"adF" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/armoury)
@@ -193,7 +193,7 @@
"adK" = (/obj/structure/table/rack,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/weapon/reagent_containers/spray/pepper,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"adL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"adM" = (/obj/structure/bed/chair/office/dark,/obj/effect/landmark/start{name = "Security Officer"},/turf/simulated/floor,/area/security/main)
-"adN" = (/obj/structure/table,/obj/item/weapon/folder/red,/turf/simulated/floor,/area/security/main)
+"adN" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"adO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/armoury)
"adP" = (/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_x = 30; pixel_y = 0},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"adQ" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
@@ -211,20 +211,20 @@
"aec" = (/obj/machinery/button/remote/blast_door{id = "Armoury"; name = "Armoury Access"; pixel_x = -1; pixel_y = -28; req_access = list(3)},/turf/simulated/floor{icon_state = "dark"},/area/security/armoury)
"aed" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"aee" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'INTERNALS REQUIRED'."; name = "INTERNALS REQUIRED"; pixel_x = 32; pixel_y = 32},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"aef" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Briefing Room"; req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main)
+"aef" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/security/brig)
"aeg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"aeh" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"aei" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced,/obj/structure/table,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
-"aej" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
-"aek" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/storage/box,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
+"aei" = (/obj/structure/table/standard,/obj/item/stack/medical/ointment,/obj/item/weapon/folder/red,/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/brig)
+"aej" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor,/area/security/brig)
+"aek" = (/obj/structure/table/standard,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/security/brig)
"ael" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"aem" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/main)
"aen" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"aeo" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access = list(3)},/obj/structure/window/reinforced{dir = 4},/obj/item/clothing/suit/armor/laserproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/laserproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"aep" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"aeq" = (/obj/structure/table/rack,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/window/brigdoor{dir = 1; name = "Weapons locker"; req_access = list(3)},/obj/item/clothing/suit/armor/bulletproof{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/armor/bulletproof{pixel_x = -2; pixel_y = -2},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
-"aer" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/main)
-"aes" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/main)
+"aer" = (/obj/structure/table/standard,/obj/item/weapon/newspaper,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/prison)
+"aes" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor,/area/security/prison)
"aet" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/main)
"aeu" = (/obj/machinery/light,/obj/machinery/flasher/portable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"aev" = (/obj/machinery/flasher/portable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
@@ -249,12 +249,12 @@
"aeO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"aeP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/highsecurity{name = "Secure Armoury Section"; req_access = list(3)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/warden)
"aeQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"aeR" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Briefing Room"; req_access = list(63)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/main)
+"aeR" = (/obj/structure/table/standard,/obj/item/weapon/deck,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"aeS" = (/turf/simulated/wall/r_wall,/area/maintenance/security_starboard)
"aeT" = (/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/camera/network/security{c_tag = "Security - Briefing"; dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"aeU" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aeV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_port)
-"aeW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/barricade/wooden,/turf/simulated/floor/plating,/area/maintenance/security_port)
+"aeW" = (/obj/structure/grille/broken,/obj/item/weapon/material/shard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aeX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/warden)
"aeY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/warden)
"aeZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/security/warden)
@@ -262,14 +262,14 @@
"afb" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "red"},/area/security/main)
"afc" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; name = "Security"; sortType = "Security"},/turf/simulated/floor{icon_state = "red"},/area/security/main)
"afd" = (/turf/simulated/floor{icon_state = "red"},/area/security/main)
-"afe" = (/obj/structure/grille/broken,/obj/item/weapon/shard,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port)
+"afe" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/barricade,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aff" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/main)
"afg" = (/obj/machinery/photocopier,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"afh" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/main)
"afi" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/main)
"afj" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor,/area/security/main)
"afk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"afl" = (/obj/structure/closet/crate/secure{name = "FOR DISPOSAL"; req_access = list(58)},/obj/item/clothing/glasses/sunglasses/blindfold,/obj/item/clothing/mask/balaclava,/obj/effect/decal/cleanable/cobweb2,/obj/item/clothing/mask/muzzle,/obj/item/weapon/reagent_containers/ld50_syringe/choral,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/security_port)
+"afl" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"afm" = (/obj/machinery/deployable/barrier,/obj/structure/sign/securearea{name = "\improper ARMORY"; pixel_y = 32},/obj/machinery/camera/network/security{c_tag = "Armoury"},/turf/simulated/floor{icon_state = "delivery"},/area/security/warden)
"afn" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f6"; dir = 2},/area/shuttle/escape_pod3/station)
"afo" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/escape_pod3/station)
@@ -287,7 +287,7 @@
"afA" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/security/main)
"afB" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/security/main)
"afC" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/main)
-"afD" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"afD" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/device/mass_spectrometer,/obj/item/device/reagent_scanner,/obj/machinery/camera/network/security{c_tag = "Security - Forensic Office Aft"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"afE" = (/obj/machinery/vending/cola,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"afF" = (/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"afG" = (/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/security/main)
@@ -296,9 +296,9 @@
"afJ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/meter,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"afK" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod_berth{frequency = 1380; id_tag = "escape_pod_3_berth"; pixel_x = 25; pixel_y = 25; tag_door = "escape_pod_3_berth_hatch"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"afL" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/camera/network/security{c_tag = "Security - Equipment North"; dir = 4},/turf/simulated/floor,/area/security/main)
-"afM" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/box/donut,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
-"afN" = (/obj/item/weapon/stool,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
-"afO" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/stool,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
+"afM" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
+"afN" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
+"afO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "redfull"; dir = 9},/area/security/main)
"afP" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod3/station)
"afQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/security_port)
"afR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -323,7 +323,7 @@
"agk" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/main)
"agl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/security/main)
"agm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/main)
-"agn" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"agn" = (/obj/structure/table/standard,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/prison)
"ago" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/wall,/area/crew_quarters/heads/hos)
"agp" = (/turf/simulated/wall,/area/crew_quarters/heads/hos)
"agq" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/security{name = "Armoury"; req_access = list(2)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/warden)
@@ -333,7 +333,7 @@
"agu" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_3_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"agv" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hos)
"agw" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_starboard)
-"agx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; tag_door = "escape_pod_3_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
+"agx" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_3"; pixel_x = 0; pixel_y = -25; tag_door = "escape_pod_3_hatch"},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod3/station)
"agy" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod3/station)
"agz" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/escape_pod3/station)
"agA" = (/obj/structure/table/rack,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/security_port)
@@ -362,8 +362,8 @@
"agX" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"agY" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"agZ" = (/obj/structure/closet{name = "Evidence Closet"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
-"aha" = (/obj/structure/table,/obj/item/device/camera,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/security/brig)
-"ahb" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
+"aha" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/prison)
+"ahb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/librarycomp{pixel_y = 0},/obj/structure/table/standard,/turf/simulated/floor,/area/security/prison)
"ahc" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
"ahd" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
"ahe" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
@@ -390,8 +390,8 @@
"ahz" = (/obj/structure/grille,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
"ahA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/security_port)
"ahB" = (/obj/machinery/space_heater,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_port)
-"ahC" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor,/area/security/brig)
-"ahD" = (/obj/structure/table,/obj/item/stack/medical/ointment,/obj/item/weapon/folder/red,/obj/item/stack/medical/bruise_pack{pixel_x = 10; pixel_y = 2},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/brig)
+"ahC" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/turf/simulated/floor,/area/security/prison)
+"ahD" = (/obj/structure/table/standard,/obj/item/weapon/dice,/turf/simulated/floor,/area/security/prison)
"ahE" = (/obj/structure/window/reinforced/tinted{dir = 1},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/grille,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/brig)
"ahF" = (/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ahG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/command{id_tag = "HoSdoor"; name = "Head of Security"; req_access = list(58)},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
@@ -400,7 +400,7 @@
"ahJ" = (/obj/structure/grille,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
"ahK" = (/turf/simulated/floor,/area/security/brig)
"ahL" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig)
-"ahM" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/security/brig)
+"ahM" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/detectives_office)
"ahN" = (/obj/structure/closet/wardrobe/red,/obj/structure/window/reinforced,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/holster/waist,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/obj/item/clothing/accessory/armband,/turf/simulated/floor,/area/security/main)
"ahO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
"ahP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/effect/decal/cleanable/blood/oil,/obj/item/trash/tastybread,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
@@ -419,18 +419,18 @@
"aic" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
"aid" = (/obj/structure/table/rack{dir = 1},/obj/item/clothing/suit/fire/firefighter,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/gas,/obj/item/weapon/extinguisher,/obj/item/clothing/head/hardhat/red,/obj/item/clothing/glasses/meson,/turf/simulated/floor/plating,/area/maintenance/security_port)
"aie" = (/obj/structure/closet,/obj/item/clothing/head/ushanka,/turf/simulated/floor/plating,/area/maintenance/security_port)
-"aif" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/security_port)
+"aif" = (/obj/structure/table/standard,/obj/item/weapon/dice/d20,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/maintenance/dormitory)
"aig" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
"aih" = (/turf/space,/area/skipjack_station/northeast_solars)
"aii" = (/obj/structure/bed/chair,/turf/simulated/floor,/area/security/brig)
"aij" = (/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/structure/window/reinforced/tinted{dir = 8; icon_state = "twindow"},/obj/structure/grille,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/security/brig)
"aik" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"ail" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/item/device/taperecorder,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
+"ail" = (/obj/structure/table/standard,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/maintenance/dormitory)
"aim" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{layer = 4; name = "Observation Screen"; network = list("Interrogation"); pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig)
"ain" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"aio" = (/obj/item/device/radio/intercom{broadcasting = 1; frequency = 1449; listening = 0; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera/network/security{c_tag = "Security - Interrogation"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"aip" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
-"aiq" = (/obj/structure/table,/turf/simulated/floor,/area/security/brig)
+"aiq" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law{pixel_y = 6},/obj/machinery/camera/network/security{c_tag = "Security - Lobby"; dir = 4},/turf/simulated/floor,/area/security/lobby)
"air" = (/obj/machinery/computer/secure_data,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"ais" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"ait" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
@@ -452,13 +452,13 @@
"aiJ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"aiK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
"aiL" = (/obj/item/device/eftpos{eftpos_name = "Brig EFTPOS scanner"},/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor{dir = 8; name = "Warden's Desk"; req_access = list(3)},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"aiM" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = -30; pixel_y = 0},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/security/brig)
-"aiN" = (/obj/structure/table,/obj/item/weapon/storage/box/evidence,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
+"aiM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; layer = 3.4; name = "Brig Monitor"; network = list("Prison"); pixel_x = -3; pixel_y = -33},/turf/simulated/floor,/area/security/brig)
+"aiN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/button/flasher{id = "permflash"; name = "Brig flashes"; pixel_x = -6; pixel_y = -24; req_access = list(2); tag = "permflash"},/obj/machinery/button/remote/blast_door{id = "brigobs"; name = "observation shutters"; pixel_x = 6; pixel_y = -24; req_access = list(2)},/obj/machinery/button/remote/blast_door{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -26; pixel_y = -4; req_access = list(2)},/turf/simulated/floor,/area/security/brig)
"aiO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
"aiP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/brig)
"aiQ" = (/obj/machinery/computer/secure_data,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/brig)
"aiR" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/security{pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
-"aiS" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_x = -3; pixel_y = 5},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
+"aiS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; layer = 3.4; name = "Brig Monitor"; network = list("Prison"); pixel_x = 3; pixel_y = -33},/obj/machinery/computer/station_alert/security,/turf/simulated/floor,/area/security/brig)
"aiT" = (/obj/machinery/computer/prisoner,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiU" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/device/radio/off,/obj/item/weapon/wrench,/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
"aiV" = (/obj/structure/closet/secure_closet/warden,/obj/item/device/megaphone,/obj/item/device/radio/intercom{broadcasting = 0; freerange = 0; frequency = 1475; listening = 1; name = "Station Intercom (Security)"; pixel_x = 30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/security/warden)
@@ -476,16 +476,16 @@
"ajh" = (/obj/structure/filingcabinet,/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"aji" = (/obj/structure/closet/secure_closet/hos,/obj/item/device/radio/intercom{pixel_x = 27},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
"ajj" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/camera/network/security{c_tag = "Security - Interrogation Observation"; dir = 4},/turf/simulated/floor,/area/security/brig)
-"ajk" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/machinery/camera/network/security{c_tag = "Security - Processing"; dir = 4},/turf/simulated/floor,/area/security/brig)
+"ajk" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/door/window/eastright{req_access = list(63)},/turf/simulated/floor,/area/security/lobby)
"ajl" = (/obj/machinery/light/small{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"ajm" = (/obj/structure/grille,/obj/structure/disposalpipe/segment,/obj/structure/cable/green,/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/hos)
"ajn" = (/obj/structure/bed/chair/comfy/black{dir = 1},/obj/effect/landmark/start{name = "Head of Security"},/obj/machinery/button/remote/airlock{id = "HoSdoor"; name = "Office Door"; pixel_x = -36; pixel_y = 29},/obj/machinery/button/windowtint{pixel_x = -26; pixel_y = 30},/obj/machinery/button/remote/blast_door{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -36; pixel_y = 39; req_access = list(2)},/turf/simulated/floor{icon_state = "dark"},/area/crew_quarters/heads/hos)
-"ajo" = (/obj/structure/table,/obj/item/weapon/folder/red{pixel_x = 2; pixel_y = 4},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/security{c_tag = "Security - Evidence Storage"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/security/brig)
+"ajo" = (/obj/structure/table/standard,/obj/machinery/recharger,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/security/armoury)
"ajp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
"ajq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"ajr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/security/brig)
"ajs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
-"ajt" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/camera/network/security{c_tag = "Security - Equipment South"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
+"ajt" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/turf/simulated/floor,/area/security/main)
"aju" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"ajv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/brig)
"ajw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
@@ -548,7 +548,7 @@
"akB" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"akC" = (/obj/machinery/light,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/brig)
"akD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/brig)
-"akE" = (/obj/structure/table,/obj/machinery/recharger/wallcharger{pixel_x = 4; pixel_y = -28},/obj/item/clothing/accessory/holobadge,/obj/item/clothing/accessory/holobadge,/obj/item/clothing/accessory/holobadge/cord,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"akE" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Briefing Room"; req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main)
"akF" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Processing"; req_access = list(1)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
"akG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/brig)
"akH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/security/brig)
@@ -601,7 +601,7 @@
"alC" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Detective"},/turf/simulated/floor/carpet,/area/security/detectives_office)
"alD" = (/turf/simulated/floor/carpet,/area/security/detectives_office)
"alE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/security/detectives_office)
-"alF" = (/obj/structure/table/woodentable,/obj/item/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/detectives_office)
+"alF" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/flash,/obj/item/weapon/handcuffs,/turf/simulated/floor/carpet,/area/security/detectives_office)
"alG" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/security/detectives_office)
"alH" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/filingcabinet/chestdrawer,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"alI" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/item/trash/raisins,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/security_starboard)
@@ -622,10 +622,10 @@
"alX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor,/area/security/prison)
"alY" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"alZ" = (/obj/machinery/meter,/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor/plating,/area/security/brig)
-"ama" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/security_starboard)
+"ama" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/security/main)
"amb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig)
"amc" = (/obj/structure/disposalpipe/segment,/obj/item/weapon/stool,/turf/simulated/floor/carpet,/area/security/detectives_office)
-"amd" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/southright{base_state = "left"; dir = 4; icon_state = "left"},/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/security/lobby)
+"amd" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/floor,/area/security/main)
"ame" = (/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/security/lobby)
"amf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/lobby)
"amg" = (/turf/simulated/floor,/area/security/lobby)
@@ -637,7 +637,7 @@
"amm" = (/obj/structure/closet/lawcloset,/obj/item/clothing/glasses/sunglasses/big,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"amn" = (/obj/item/weapon/storage/secure/safe{pixel_x = -23},/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"amo" = (/obj/machinery/door/window/brigdoor{dir = 1; id = "Cell 3"; name = "Cell 3"; req_access = list(2)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
-"amp" = (/obj/structure/table/woodentable,/obj/item/ashtray/bronze,/obj/item/weapon/storage/fancy/cigarettes/dromedaryco,/obj/item/device/flash,/obj/item/weapon/handcuffs,/turf/simulated/floor/carpet,/area/security/detectives_office)
+"amp" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/weapon/material/ashtray/plastic{pixel_x = 4; pixel_y = 6},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"amq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/security/detectives_office)
"amr" = (/obj/item/weapon/storage/secure/safe{pixel_x = 35; pixel_y = 5},/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"ams" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonexit"; name = "Brig Exit"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
@@ -652,7 +652,7 @@
"amB" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/security/brig)
"amC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/security/brig)
"amD" = (/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
-"amE" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(12,24)},/turf/simulated/floor/plating,/area/security/brig)
+"amE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/syringe/inaprovaline,/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_x = -2; pixel_y = 5},/obj/item/weapon/reagent_containers/syringe/inaprovaline{pixel_y = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/security/main)
"amF" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/plating,/area/security/brig)
"amG" = (/obj/structure/flora/pottedplant{tag = "icon-plant-10"; icon_state = "plant-10"},/turf/simulated/floor,/area/security/brig)
"amH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/plating,/area/security/brig)
@@ -664,9 +664,9 @@
"amN" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 8; icon_state = "rightsecure"; req_access = list(2)},/obj/structure/table/reinforced,/turf/simulated/floor,/area/security/brig)
"amO" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/machinery/button/remote/airlock{id = "prisonentry"; name = "Entry Doors"; pixel_x = -6; pixel_y = 24; req_access = list(2)},/obj/machinery/button/remote/blast_door{id = "prisonexit"; name = "Exit Doors"; pixel_x = 6; pixel_y = 24; req_access = list(2)},/obj/machinery/button/flasher{id = "permentryflash"; name = "entry flash"; pixel_x = -26; pixel_y = 6; req_access = list(2)},/turf/simulated/floor,/area/security/brig)
"amP" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the brig foyer."; id = "BrigFoyer"; name = "Brig Foyer Doors"; pixel_x = 28; pixel_y = -15},/turf/simulated/floor,/area/security/brig)
-"amQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; name = "Brig Monitor"; network = list("Prison"); pixel_x = -3; pixel_y = -33},/turf/simulated/floor,/area/security/brig)
-"amR" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = -28; pixel_y = 0},/obj/structure/bed,/turf/simulated/floor{icon_state = "red"},/area/security/prison)
-"amS" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/southright{dir = 4},/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/security/lobby)
+"amQ" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/security/main)
+"amR" = (/obj/machinery/flasher{id = "Cell 3"; pixel_x = -28; pixel_y = 0},/obj/structure/bed/padded,/turf/simulated/floor{icon_state = "red"},/area/security/prison)
+"amS" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"amT" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/lobby)
"amU" = (/obj/structure/disposalpipe/segment,/obj/structure/table/woodentable,/obj/machinery/button/remote/airlock{id = "detdoor"; name = "Office Door"},/obj/item/clothing/glasses/sunglasses,/turf/simulated/floor/carpet,/area/security/detectives_office)
"amV" = (/obj/structure/table/reinforced,/obj/item/weapon/folder{pixel_x = -4},/obj/item/weapon/folder/red{pixel_y = 3},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/item/weapon/folder/yellow,/obj/item/weapon/stamp/internalaffairs,/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
@@ -688,14 +688,14 @@
"anl" = (/obj/structure/closet/secure_closet/brig,/obj/machinery/camera/network/security{c_tag = "Security - Prison Processing"; dir = 1},/turf/simulated/floor,/area/security/brig)
"anm" = (/obj/structure/closet/secure_closet/brig{id = "Cell 3"; name = "Cell 3 Locker"},/obj/machinery/camera/network/prison{c_tag = "Security - Brig Cell 3"; dir = 8},/turf/simulated/floor{icon_state = "red"},/area/security/prison)
"ann" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/brigdoor{dir = 8; req_access = list(2)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/table/reinforced,/turf/simulated/floor,/area/security/brig)
-"ano" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Big Brother is watching."; name = "Brig Monitor"; network = list("Prison"); pixel_x = 3; pixel_y = -33},/obj/machinery/computer/station_alert/security,/turf/simulated/floor,/area/security/brig)
-"anp" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/button/flasher{id = "permflash"; name = "Brig flashes"; pixel_x = -6; pixel_y = -24; req_access = list(2); tag = "permflash"},/obj/machinery/button/remote/blast_door{id = "brigobs"; name = "observation shutters"; pixel_x = 6; pixel_y = -24},/obj/machinery/button/remote/blast_door{id = "Secure Gate"; name = "Brig Lockdown"; pixel_x = -26; pixel_y = -4; req_access = list(2)},/turf/simulated/floor,/area/security/brig)
+"ano" = (/obj/structure/disposalpipe/segment,/obj/structure/table/standard,/obj/machinery/recharger,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/main)
+"anp" = (/obj/structure/table/standard,/obj/item/device/healthanalyzer,/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/bruise_pack{pixel_x = 10},/obj/item/stack/medical/ointment{pixel_y = 10},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/security/main)
"anq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
-"anr" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/disposaloutlet,/turf/simulated/wall,/area/security/prison)
+"anr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"ans" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
"ant" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/brig)
"anu" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
-"anv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/security/prison)
+"anv" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/brig)
"anw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
"anx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/lawoffice)
"any" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/security/prison)
@@ -703,7 +703,7 @@
"anA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/lobby)
"anB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/security/lobby)
"anC" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/lobby)
-"anD" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/ashtray/plastic{pixel_x = 4; pixel_y = 6},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
+"anD" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/weapon/material/ashtray/plastic{pixel_x = 4; pixel_y = 6},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"anE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"anF" = (/obj/structure/table/reinforced,/obj/machinery/photocopier/faxmachine{anchored = 0; department = "Internal Affairs"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"anG" = (/turf/simulated/wall/r_wall,/area/security/detectives_office)
@@ -727,25 +727,25 @@
"anY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"anZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"aoa" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/item/weapon/tank/emergency_oxygen/double,/obj/effect/decal/cleanable/cobweb2,/obj/effect/landmark{name = "blobstart"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/evahallway)
-"aob" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/security/brig)
+"aob" = (/obj/machinery/door/airlock/engineering{name = "Fore Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/foresolar)
"aoc" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Security"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
-"aod" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
+"aod" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/brig)
"aoe" = (/obj/machinery/computer/security/wooden_tv,/turf/simulated/floor{icon_state = "grimy"},/area/security/detectives_office)
"aof" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "EVA\\Security Maintenance"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"aog" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/security/prison)
-"aoh" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
+"aoh" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/floor,/area/security/brig)
"aoi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
-"aoj" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall,/area/security/brig)
+"aoj" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor,/area/security/prison)
"aok" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/prison)
"aol" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/security/prison)
-"aom" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/window/southleft,/turf/simulated/floor,/area/security/prison)
+"aom" = (/obj/machinery/door/blast/regular{id = "Cell 2"; name = "Cell Door"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/prison)
"aon" = (/turf/simulated/floor,/area/security/prison)
"aoo" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/security/prison)
"aop" = (/obj/item/device/radio/intercom{desc = "Talk... listen through this."; name = "Station Intercom (Brig Radio)"; pixel_x = 0; pixel_y = 26; wires = 7},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"aoq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/security/prison)
"aor" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"aos" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door_timer/cell_6{id = "Cell 2"; name = "Cell 2"; pixel_x = 32},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig)
-"aot" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
+"aos" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/prison)
+"aot" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/prison)
"aou" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/lobby)
"aov" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/lobby)
"aow" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/security/lobby)
@@ -754,25 +754,25 @@
"aoz" = (/obj/structure/window/basic{dir = 1},/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aoA" = (/obj/structure/window/basic{dir = 1},/obj/structure/disposalpipe/junction{dir = 1; icon_state = "pipe-j2"},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aoB" = (/obj/structure/window/basic{dir = 1},/obj/machinery/photocopier,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
-"aoC" = (/obj/machinery/door/blast/regular{dir = 1; id = "Cell 3"; name = "Cell Door"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/security/prison)
+"aoC" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
"aoD" = (/obj/structure/window/basic{dir = 1},/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aoE" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/basic{dir = 1},/obj/structure/filingcabinet/security{desc = "A large cabinet with hard copy security records."; name = "Security Records"},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aoF" = (/obj/machinery/newscaster{pixel_x = 28; pixel_y = 1},/obj/structure/window/basic{dir = 1},/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
-"aoG" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"aoG" = (/obj/structure/window/reinforced,/obj/machinery/door/window/westright,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/security/prison)
"aoH" = (/turf/simulated/wall,/area/maintenance/dormitory)
"aoI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoK" = (/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoL" = (/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
-"aoM" = (/obj/machinery/door/blast/regular{id = "Cell 2"; name = "Cell Door"},/turf/simulated/floor,/area/security/prison)
+"aoM" = (/obj/structure/disposaloutlet{dir = 8},/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/prison)
"aoN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
"aoO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
"aoP" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/substation/security)
-"aoQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
-"aoR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/prison)
-"aoS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
-"aoT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/prison)
-"aoU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/prison)
+"aoQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/window/northleft{name = "Forensics Area"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/security/detectives_office)
+"aoR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
+"aoS" = (/obj/machinery/door/blast/regular{dir = 1; id = "Cell 3"; name = "Cell Door"},/turf/simulated/floor,/area/security/prison)
+"aoT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
+"aoU" = (/obj/machinery/door/airlock/glass_security{id_tag = "prisonentry"; name = "Brig Entry"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"aoV" = (/obj/structure/cable/yellow,/turf/simulated/floor/plating/airless,/area/solar/auxport)
"aoW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/lawoffice)
"aoX" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/auxport)
@@ -782,14 +782,14 @@
"apb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"apc" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/security/brig)
"apd" = (/obj/machinery/button/remote/blast_door{id = "Cell 2"; name = "Cell 2 Door"; pixel_x = 30; pixel_y = 1; req_access = list(2)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/security/brig)
-"ape" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/security/brig)
-"apf" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/security/brig)
+"ape" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/security/prison)
+"apf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
"apg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/fore)
"aph" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"api" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"api" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/security/prison)
"apj" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/solar/fore)
"apk" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/prison)
-"apl" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/security/prison)
+"apl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/regular{density = 0; dir = 4; icon_state = "pdoor0"; id = "brigobs"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/security/prison)
"apm" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/prison)
"apn" = (/obj/machinery/flasher{id = "permflash"; name = "Floor mounted flash"; pixel_x = 0},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/security/prison)
"apo" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/security/prison)
@@ -811,7 +811,7 @@
"apE" = (/obj/machinery/light{dir = 8},/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/lobby)
"apF" = (/turf/simulated/floor/wood,/area/maintenance/dormitory)
"apG" = (/obj/structure/bed/chair/wood/wings,/turf/simulated/floor/wood,/area/maintenance/dormitory)
-"apH" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/obj/item/weapon/book/manual/security_space_law{pixel_y = 6},/obj/machinery/camera/network/security{c_tag = "Security - Lobby"; dir = 4},/turf/simulated/floor,/area/security/lobby)
+"apH" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "brig_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
"apI" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxstarboard)
"apJ" = (/obj/machinery/power/solar{id = "auxsolareast"; name = "Port Auxiliary Solar Array"},/obj/structure/cable/yellow,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/auxport)
"apK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway)
@@ -824,8 +824,8 @@
"apR" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/generic,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/prison)
"apS" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/security/prison)
"apT" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/fore)
-"apU" = (/obj/structure/bed,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/brig)
-"apV" = (/obj/structure/bed,/obj/machinery/flasher{id = "Cell 2"; pass_flags = 0; pixel_x = 0; pixel_y = -26},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"apU" = (/obj/structure/bed/padded,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/brig)
+"apV" = (/obj/structure/bed/padded,/obj/machinery/flasher{id = "Cell 2"; pass_flags = 0; pixel_x = 0; pixel_y = -26},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"apW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"apX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/prison)
"apY" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/prison)
@@ -840,18 +840,18 @@
"aqh" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqi" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
-"aqk" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/reinforced,/obj/item/weapon/pen/blue{pixel_x = -5; pixel_y = -1},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = 3},/obj/item/ashtray/plastic{pixel_x = 4; pixel_y = 6},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
+"aqk" = (/obj/structure/table/standard,/obj/item/weapon/material/ashtray/plastic,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"aql" = (/obj/machinery/computer/med_data,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqm" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1443; icon_state = "on"; id = "air_in"; use_power = 1},/obj/structure/bed/chair,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/prison)
"aqn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqp" = (/obj/structure/bed/chair,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor,/area/security/prison)
-"aqq" = (/obj/machinery/door/window/westleft{dir = 1; name = "Forensics Area"; req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/security/detectives_office)
+"aqq" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
"aqr" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aqs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aqt" = (/obj/structure/table/gamblingtable,/turf/simulated/floor/wood,/area/maintenance/dormitory)
"aqu" = (/obj/structure/table/gamblingtable,/obj/item/weapon/deck{pixel_y = 4},/turf/simulated/floor/wood,/area/maintenance/dormitory)
-"aqv" = (/obj/structure/table,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/maintenance/dormitory)
+"aqv" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "brig_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/foresolar)
"aqw" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "dorm_pump"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/dormitory)
"aqx" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aqy" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "dorm_sensor"; pixel_x = 25; pixel_y = -8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/dormitory)
@@ -859,15 +859,15 @@
"aqA" = (/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/food/drinks/bottle/wine,/turf/simulated/floor/plating,/area/maintenance/evahallway)
"aqB" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"aqC" = (/obj/structure/disposalpipe/segment,/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"},/obj/machinery/door/airlock/maintenance{name = "Dormitory\\Security Maintenance"; req_access = list(12)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/dormitory)
-"aqD" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/librarycomp{pixel_y = 0},/obj/structure/table,/turf/simulated/floor,/area/security/prison)
+"aqD" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "brig_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/foresolar)
"aqE" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/security/prison)
-"aqF" = (/obj/structure/table,/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/turf/simulated/floor,/area/security/prison)
-"aqG" = (/obj/structure/table,/obj/item/weapon/dice,/turf/simulated/floor,/area/security/prison)
-"aqH" = (/obj/structure/table,/obj/item/ashtray/plastic,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"aqF" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "brig_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/fore)
+"aqG" = (/obj/structure/table/standard,/obj/item/device/camera,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/security/brig)
+"aqH" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
"aqI" = (/obj/structure/reagent_dispensers/water_cooler,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/security/prison)
"aqJ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
"aqK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/prison)
-"aqL" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/prison)
+"aqL" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"aqM" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/fore)
"aqN" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/lobby)
"aqO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/lobby)
@@ -879,16 +879,16 @@
"aqU" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"aqW" = (/obj/structure/disposalpipe/segment,/obj/structure/bed/chair/office/light{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
-"aqX" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/window/brigdoor{dir = 4; id = "Cell 2"; name = "Cell 2"; req_access = list(2)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/brig)
+"aqX" = (/obj/machinery/door_timer/cell_6{id = "Cell 2"; name = "Cell 2"; pixel_x = 32},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/brig)
"aqY" = (/obj/structure/disposalpipe/segment,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = -30},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"aqZ" = (/obj/structure/closet{name = "Evidence Closet"},/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/evidence,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"ara" = (/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "lawyer_blast"; name = "Privacy Shutters"; opacity = 0},/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/eastright{base_state = "left"; dir = 4; icon_state = "left"; name = "Internal Affairs Desk"; req_access = list(38)},/turf/simulated/floor,/area/lawoffice)
-"arb" = (/obj/structure/table,/obj/machinery/newscaster{pixel_y = -32},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
-"arc" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/folder/blue,/obj/item/weapon/pen/blue{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
+"arb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/standard,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30},/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/radio,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
+"arc" = (/obj/structure/closet/crate/secure{name = "FOR DISPOSAL"; req_access = list(58)},/obj/item/clothing/glasses/sunglasses/blindfold,/obj/item/clothing/mask/balaclava,/obj/effect/decal/cleanable/cobweb2,/obj/item/clothing/mask/muzzle,/obj/item/weapon/reagent_containers/syringe/ld50_syringe/choral,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/security_port)
"ard" = (/obj/machinery/computer/security,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"are" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/dormitory)
"arf" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"arg" = (/obj/structure/table,/obj/item/weapon/dice/d20,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/maintenance/dormitory)
+"arg" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/item/weapon/storage/box/donut,/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/security/main)
"arh" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "dorm_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/dormitory)
"ari" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
"arj" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dorm_outer"; locked = 1; name = "Dormitory External Access"; req_access = list(13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
@@ -899,18 +899,18 @@
"aro" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/maintenance{name = "Detective Maintenance"; req_access = list(4)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/security/detectives_office)
"arp" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/prison)
"arq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/security/prison)
-"arr" = (/obj/structure/table,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor,/area/security/prison)
-"ars" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"art" = (/obj/structure/table,/obj/item/weapon/newspaper,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/prison)
+"arr" = (/obj/machinery/light{dir = 8},/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
+"ars" = (/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
+"art" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced,/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/storage/box,/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/main)
"aru" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/security/prison)
"arv" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/security{c_tag = "Security - Brig West"; dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/brig)
-"arw" = (/obj/structure/table,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/security/prison)
+"arw" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Briefing Room"; req_access = list(1)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/main)
"arx" = (/turf/simulated/wall/r_wall,/area/security/lobby)
"ary" = (/obj/machinery/button/remote/airlock{id = "visitdoor"; name = "Visitation Access"; pixel_y = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "redcorner"},/area/security/lobby)
"arz" = (/obj/machinery/computer/secure_data,/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
"arA" = (/turf/simulated/wall/r_wall,/area/hallway/primary/fore)
"arB" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/fore)
-"arC" = (/obj/machinery/light,/obj/structure/table,/obj/item/device/mass_spectrometer,/obj/item/device/reagent_scanner,/obj/machinery/camera/network/security{c_tag = "Security - Forensic Office Aft"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/security/detectives_office)
+"arC" = (/obj/structure/table/standard,/obj/item/weapon/folder/red,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/main)
"arD" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/solar/fore)
"arE" = (/turf/simulated/wall,/area/hallway/primary/fore)
"arF" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "dorm_airlock"; name = "Dormitory Airlock Console"; pixel_x = 25; pixel_y = 0; req_one_access = list(1,5,11,18,24); tag_airpump = "dorm_pump"; tag_chamber_sensor = "dorm_sensor"; tag_exterior_door = "dorm_outer"; tag_interior_door = "dorm_inner"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/dormitory)
@@ -963,7 +963,7 @@
"asA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals)
"asB" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Lobby"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/fore)
"asC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway)
-"asD" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = -30},/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/brig)
+"asD" = (/obj/structure/table/standard,/obj/item/weapon/book/manual/security_space_law,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/main)
"asE" = (/obj/item/device/radio/intercom{pixel_x = 30},/obj/machinery/door_timer/cell_1{pixel_x = 32; pixel_y = -32},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/brig)
"asF" = (/obj/effect/decal/cleanable/dirt,/obj/structure/bed/chair{dir = 1},/turf/simulated/floor,/area/security/prison)
"asG" = (/obj/machinery/portable_atmospherics/powered/scrubber/huge,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/brig)
@@ -975,7 +975,7 @@
"asM" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/security/prison)
"asN" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"asO" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Lobby"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/fore)
-"asP" = (/obj/structure/bed,/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
+"asP" = (/obj/structure/bed/padded,/obj/machinery/flasher{id = "Cell 1"; pixel_x = 0; pixel_y = -28},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/prison)
"asQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"asR" = (/obj/structure/closet{name = "Evidence Closet"},/obj/machinery/button/remote/blast_door{id = "lawyer_blast"; name = "Privacy Shutters"; pixel_y = -25},/obj/item/device/taperecorder{pixel_x = -4; pixel_y = 2},/obj/item/device/camera{pixel_x = 3; pixel_y = -4},/obj/item/device/flash,/obj/item/device/flash,/obj/item/weapon/storage/secure/briefcase,/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/lawoffice)
"asS" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "redcorner"; dir = 4},/area/hallway/primary/fore)
@@ -1052,7 +1052,7 @@
"aul" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/security/prison)
"aum" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = -6},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"aun" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/computer/cryopod{density = 0; layer = 3.3; pixel_y = 32},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 24},/turf/simulated/floor,/area/security/prison)
-"auo" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/brigdoor{name = "Visitation Window"; req_access = list(63)},/turf/simulated/floor,/area/security/prison)
+"auo" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port)
"aup" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/random/tech_supply,/obj/item/clothing/head/flatcap,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"auq" = (/obj/machinery/atm{pixel_x = -25},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
"aur" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/fore)
@@ -1074,9 +1074,9 @@
"auH" = (/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"auI" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
"auJ" = (/obj/structure/window/basic{dir = 4},/turf/simulated/floor/beach/water{tag = "icon-seadeep"; icon_state = "seadeep"},/area/crew_quarters/fitness)
-"auK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
-"auL" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
-"auM" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"auK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/machinery/camera/network/prison{c_tag = "Security - Brig Bedroom"; dir = 6},/turf/simulated/floor,/area/security/prison)
+"auL" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/generic,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
+"auM" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"auN" = (/turf/simulated/wall,/area/hallway/secondary/entry/fore)
"auO" = (/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/fitness)
"auP" = (/obj/machinery/light{dir = 1},/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/fitness)
@@ -1116,7 +1116,7 @@
"avx" = (/turf/simulated/floor,/area/crew_quarters/fitness)
"avy" = (/obj/structure/bed/chair{dir = 1},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"avz" = (/obj/item/weapon/stool,/turf/simulated/floor,/area/security/prison)
-"avA" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"avA" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"avB" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f5"; dir = 2},/area/shuttle/escape_pod1/station)
"avC" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"avD" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod1/station)
@@ -1125,7 +1125,7 @@
"avG" = (/turf/simulated/floor/plating,/obj/structure/shuttle/engine/propulsion/burst,/turf/simulated/shuttle/wall{icon_state = "swall_f9"; dir = 2},/area/shuttle/escape_pod2/station)
"avH" = (/turf/simulated/floor/plating,/area/maintenance/arrivals)
"avI" = (/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/arrivals)
-"avJ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"avJ" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"avK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/arrivals)
"avL" = (/obj/structure/table/rack,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/maintenance/arrivals)
"avM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/arrivals)
@@ -1135,7 +1135,7 @@
"avQ" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/fitness)
"avR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Holodeck North"; pixel_y = -6},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"avS" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eva_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eva_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/evahallway)
-"avT" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
+"avT" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor,/area/gateway)
"avU" = (/obj/machinery/computer/cryopod{density = 0; pixel_y = 32},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Cryo Storage"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
"avV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"avW" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/evahallway)
@@ -1143,19 +1143,19 @@
"avY" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower/security,/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
"avZ" = (/obj/machinery/light/small,/obj/structure/mopbucket,/obj/item/weapon/mop,/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
"awa" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 30},/obj/item/weapon/soap/nanotrasen,/turf/simulated/floor{icon_state = "freezerfloor"},/area/security/prison)
-"awb" = (/obj/structure/table,/obj/machinery/light{dir = 8},/obj/machinery/microwave,/turf/simulated/floor,/area/security/prison)
-"awc" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets{pixel_x = -3; pixel_y = -3},/turf/simulated/floor,/area/security/prison)
-"awd" = (/obj/structure/table,/obj/item/weapon/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/turf/simulated/floor,/area/security/prison)
+"awb" = (/obj/structure/table/standard,/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Port - East"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
+"awc" = (/obj/structure/table/standard,/obj/item/weapon/material/minihoe,/obj/item/device/analyzer/plant_analyzer,/obj/item/clothing/head/greenbandana,/turf/simulated/floor,/area/security/prison)
+"awd" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "nuke_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "nuke_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
"awe" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/security/prison)
"awf" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/fitness)
-"awg" = (/obj/structure/table,/obj/structure/bedsheetbin,/turf/simulated/floor,/area/security/prison)
+"awg" = (/obj/structure/table/standard,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/storage/art)
"awh" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/clothing/head/soft/orange,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/security/prison)
-"awi" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_1_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"awi" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"awj" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"awk" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eva_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/turf/simulated/floor/plating/airless,/area/maintenance/evahallway)
"awl" = (/obj/structure/closet{name = "Prisoner's Locker"},/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe,/obj/item/clothing/suit/apron/overalls,/turf/simulated/floor{icon_state = "floorgrime"},/area/security/prison)
"awm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/hallway/primary/fore)
-"awn" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_2_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
+"awn" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"awo" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eva_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access = list(13)},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/evahallway)
"awp" = (/obj/machinery/seed_storage/garden,/turf/simulated/floor,/area/security/prison)
"awq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/port)
@@ -1165,12 +1165,12 @@
"awu" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/crew_quarters/sleep/cryo)
"awv" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "arrivals_pump"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "arrivals_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "arrivals_pump"; tag_exterior_door = "arrivals_outer"; frequency = 1379; id_tag = "arrivals_airlock"; tag_interior_door = "arrivals_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "arrivals_sensor"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/arrivals)
"aww" = (/turf/simulated/floor{dir = 6; icon_state = "whitehall"},/area/crew_quarters/fitness)
-"awx" = (/obj/machinery/light,/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
-"awy" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
-"awz" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"awx" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"awy" = (/obj/machinery/light,/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
+"awz" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/orange,/turf/simulated/floor,/area/security/prison)
"awA" = (/turf/simulated/floor{dir = 10; icon_state = "whitehall"},/area/crew_quarters/fitness)
-"awB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
-"awC" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"awB" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"awC" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"awD" = (/obj/machinery/door/airlock/glass{name = "Holodeck"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor,/area/crew_quarters/fitness)
"awE" = (/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/crew_quarters/fitness)
"awF" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "bridge blast"; name = "Bridge Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
@@ -1179,13 +1179,13 @@
"awI" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
"awJ" = (/obj/structure/closet,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/arrivals)
"awK" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/plating,/area/maintenance/substation/security)
-"awL" = (/obj/item/weapon/stool{pixel_y = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/crew_quarters/sleep)
+"awL" = (/obj/item/weapon/stool/padded,/turf/simulated/floor,/area/crew_quarters/sleep)
"awM" = (/obj/machinery/door/airlock{name = "Brig Restroom"},/turf/simulated/floor,/area/security/prison)
"awN" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor/plating,/area/maintenance/arrivals)
"awO" = (/obj/structure/table/reinforced,/obj/machinery/door/blast/shutters{dir = 2; id = "bar"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"awP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/maintenance/evahallway)
"awQ" = (/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/evahallway)
-"awR" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/machinery/camera/network/prison{c_tag = "Security - Brig Bedroom"; dir = 6},/turf/simulated/floor,/area/security/prison)
+"awR" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"awS" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood/oil,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/evahallway)
"awT" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"awU" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms)
@@ -1209,14 +1209,14 @@
"axm" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/fitness)
"axn" = (/obj/structure/window/basic{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness)
"axo" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness)
-"axp" = (/obj/item/weapon/stool{pixel_y = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/crew_quarters/sleep)
-"axq" = (/obj/item/weapon/stool{pixel_y = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/crew_quarters/sleep)
+"axp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/item/weapon/stool/padded,/turf/simulated/floor,/area/crew_quarters/sleep)
+"axq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor,/area/crew_quarters/sleep)
"axr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness)
"axs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"axt" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/crew_quarters/fitness)
"axu" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "arrivals_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/arrivals)
"axv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"axw" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera/network/prison{c_tag = "Security - Common Brig Southwest"; dir = 4},/turf/simulated/floor,/area/security/prison)
+"axw" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/tools)
"axx" = (/obj/structure/sign/pods,/turf/simulated/wall,/area/hallway/secondary/entry/fore)
"axy" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
"axz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/power/apc/high{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port)
@@ -1247,15 +1247,15 @@
"axY" = (/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/sleep)
"axZ" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/threedglasses,/turf/simulated/floor,/area/crew_quarters/sleep)
"aya" = (/obj/structure/table/woodentable,/obj/item/weapon/coin/silver,/turf/simulated/floor,/area/crew_quarters/sleep)
-"ayb" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"ayb" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"ayc" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"ayd" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Fitness"},/turf/simulated/floor,/area/crew_quarters/fitness)
"aye" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/fitness)
"ayf" = (/turf/simulated/floor{dir = 4; icon_state = "escapecorner"},/area/crew_quarters/fitness)
"ayg" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/crew_quarters/fitness)
"ayh" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/crew_quarters/fitness)
-"ayi" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor,/area/crew_quarters/sleep)
-"ayj" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/crew_quarters/sleep)
+"ayi" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/item/weapon/stool/padded,/turf/simulated/floor,/area/crew_quarters/sleep)
+"ayj" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "neutralcorner"; dir = 2},/area/crew_quarters/sleep)
"ayk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"ayl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "neutralcorner"},/area/crew_quarters/fitness)
"aym" = (/turf/simulated/floor/airless{icon_state = "catwalk12"},/area/space)
@@ -1286,11 +1286,11 @@
"ayL" = (/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"ayM" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/ai_monitored/storage/eva)
"ayN" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Fitness Room West"; dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness)
-"ayO" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(10,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
+"ayO" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"ayP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/fore)
"ayQ" = (/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
"ayR" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
-"ayS" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/auxport)
+"ayS" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"ayT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/crew_quarters/sleep)
"ayU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"ayV" = (/obj/structure/closet/lasertag/blue,/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/fitness)
@@ -1308,10 +1308,10 @@
"azh" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/undies_wardrobe,/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep)
"azi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/crew_quarters/fitness)
"azj" = (/obj/structure/grille,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
-"azk" = (/obj/structure/table,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness)
+"azk" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "nuke_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port)
"azl" = (/obj/item/weapon/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"azm" = (/obj/item/weapon/stool{pixel_y = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"azn" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"azn" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"azo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"azp" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitories Central"},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
"azq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
@@ -1325,8 +1325,8 @@
"azy" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry/fore)
"azz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry/fore)
"azA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry/fore)
-"azB" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"azC" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"azB" = (/obj/structure/table/standard,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/storage/art)
+"azC" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/light/small{dir = 4},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 10},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"azD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"azE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"azF" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_1_berth_hatch"; locked = 1; name = "Escape Pod"; req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
@@ -1367,9 +1367,9 @@
"aAo" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -2; pixel_y = -28},/turf/simulated/floor{dir = 10; icon_state = "neutral"},/area/crew_quarters/fitness)
"aAp" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness)
"aAq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/fitness)
-"aAr" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"aAr" = (/obj/structure/table/standard,/obj/machinery/light/small,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
"aAs" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Fore Port"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"aAt" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
+"aAt" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/mime,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"aAu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aAv" = (/obj/structure/grille/broken,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/evahallway)
"aAw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
@@ -1398,7 +1398,7 @@
"aAT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/ai_monitored/storage/eva)
"aAU" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aAV" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"aAW" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aAW" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aAX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aAY" = (/turf/simulated/floor/carpet{tag = "icon-carpet3-0"; icon_state = "carpet3-0"},/area/crew_quarters/sleep/bedrooms)
"aAZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
@@ -1424,7 +1424,7 @@
"aBt" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/library)
"aBu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aBv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
-"aBw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance"; req_one_access = list(1,5,11,18,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aBw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(18)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_one)
"aBx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aBy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aBz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/hallway/secondary/entry/fore)
@@ -1444,7 +1444,7 @@
"aBN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/security/checkpoint2)
"aBO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Fitness Room East"; dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness)
"aBP" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals)
-"aBQ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"aBQ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(18)},/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_one)
"aBR" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aBS" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aBT" = (/obj/item/weapon/extinguisher,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/evahallway)
@@ -1462,7 +1462,7 @@
"aCf" = (/turf/simulated/floor,/area/ai_monitored/storage/eva)
"aCg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aCh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"aCi" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"aCi" = (/obj/structure/table/standard,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aCj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aCk" = (/obj/machinery/suit_cycler/security,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
"aCl" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/fore)
@@ -1473,7 +1473,7 @@
"aCq" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aCr" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aCs" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
-"aCt" = (/obj/machinery/door/airlock/glass_medical{id_tag = null; name = "Medical Hardsuits"; req_access = list(5)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aCt" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"aCu" = (/turf/simulated/wall,/area/maintenance/substation/civilian_east)
"aCv" = (/turf/simulated/wall/r_wall,/area/maintenance/auxsolarstarboard)
"aCw" = (/obj/machinery/power/solar_control{id = "auxsolareast"; name = "Fore Starboard Solar Control"; track = 0},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/maintenance/auxsolarstarboard)
@@ -1483,13 +1483,13 @@
"aCA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
"aCB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/fore)
"aCC" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port)
-"aCD" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits"; req_access = list(1)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aCD" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"aCE" = (/turf/simulated/wall,/area/security/checkpoint2)
"aCF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/machinery/meter,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/arrivals)
"aCG" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/arrivals)
-"aCH" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarstarboard)
+"aCH" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/storage/primary)
"aCI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"aCJ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"aCJ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/firealarm{dir = 8; pixel_x = -24; pixel_y = 6},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"aCK" = (/turf/simulated/wall,/area/storage/primary)
"aCL" = (/obj/machinery/door/airlock{name = "Unisex Showers"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aCM" = (/turf/simulated/wall/r_wall,/area/storage/primary)
@@ -1520,17 +1520,17 @@
"aDl" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/item/weapon/bikehorn/rubberducky,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aDm" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aDn" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/mob/living/simple_animal/mouse,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/arrivals)
-"aDo" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/paper{info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest."; name = "Shotgun permit"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aDo" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aDp" = (/turf/simulated/wall,/area/crew_quarters/bar)
"aDq" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar)
"aDr" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor,/area/storage/primary)
"aDs" = (/turf/simulated/wall,/area/maintenance/bar)
-"aDt" = (/obj/structure/closet/crate,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/gold,/obj/item/stack/sheet/mineral/gold,/obj/item/weapon/storage/belt/champion,/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
+"aDt" = (/obj/structure/closet/crate,/obj/item/stack/material/gold,/obj/item/weapon/storage/belt/champion,/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
"aDu" = (/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Civilian East"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
"aDv" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Civilian East Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
"aDw" = (/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
"aDx" = (/obj/machinery/requests_console{department = "EVA"; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/device/multitool,/obj/machinery/camera/network/security{c_tag = "EVA Northwest"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
-"aDy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/obj/machinery/camera/network/security{c_tag = "EVA Northeast"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aDy" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aDz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
"aDA" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aDB" = (/obj/machinery/power/terminal,/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
@@ -1560,12 +1560,12 @@
"aDZ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/maintenance/auxsolarport)
"aEa" = (/obj/machinery/vending/assist,/turf/simulated/floor,/area/storage/primary)
"aEb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/primary)
-"aEc" = (/obj/structure/table,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
-"aEd" = (/obj/structure/table,/obj/machinery/alarm{pixel_y = 23},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
+"aEc" = (/obj/item/weapon/reagent_containers/glass/bucket,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
+"aEd" = (/obj/item/weapon/material/hatchet,/obj/item/weapon/material/minihoe,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
"aEe" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/camera/network/engineering{c_tag = "Solar Maintenance Fore Port"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
-"aEf" = (/obj/structure/table,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
-"aEg" = (/obj/structure/table,/obj/machinery/light_switch{pixel_y = 28},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
-"aEh" = (/obj/structure/table,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
+"aEf" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aEg" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
+"aEh" = (/obj/structure/table/standard,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"aEi" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/storage/primary)
"aEj" = (/obj/machinery/vending/tool,/turf/simulated/floor,/area/storage/primary)
"aEk" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
@@ -1583,10 +1583,10 @@
"aEw" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aEx" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"aEy" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
-"aEz" = (/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aEz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
"aEA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
"aEB" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/jetpack/carbondioxide,/obj/item/clothing/shoes/magboots,/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
-"aEC" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"aEC" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32},/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aED" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central_one)
"aEE" = (/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/hallway/primary/central_one)
"aEF" = (/obj/structure/table/woodentable,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/library)
@@ -1602,7 +1602,7 @@
"aEP" = (/obj/item/weapon/storage/secure/safe{pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aEQ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aER" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aES" = (/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/packageWrap,/obj/machinery/camera/network/civilian_east{c_tag = "Bar Backroom"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aES" = (/obj/structure/table/woodentable,/obj/machinery/reagentgrinder,/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/packageWrap,/obj/machinery/camera/network/civilian_east{c_tag = "Bar Backroom"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aET" = (/obj/structure/disposalpipe/sortjunction{dir = 2; icon_state = "pipe-j1s"; sortType = "Bar"; name = "Bar"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/bar)
"aEU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
"aEV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitory Holodeck South"; dir = 1; pixel_y = 6},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
@@ -1617,16 +1617,16 @@
"aFe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/library)
"aFf" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/library)
"aFg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
-"aFh" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access = list(10)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"aFh" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/quartermaster/office)
"aFi" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/library)
"aFj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "dark"},/area/maintenance/library)
"aFk" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/arrival/station)
"aFl" = (/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFm" = (/obj/machinery/computer/arcade,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aFn" = (/obj/structure/closet/wardrobe/black,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFn" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFo" = (/obj/structure/closet/wardrobe/xenos,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFp" = (/obj/structure/closet/wardrobe/mixed,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aFq" = (/obj/structure/closet/wardrobe/grey,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFq" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFr" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/shuttle/arrival/station)
"aFs" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/space,/area/shuttle/arrival/station)
"aFt" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
@@ -1634,7 +1634,7 @@
"aFv" = (/obj/structure/closet/wardrobe/red,/turf/simulated/floor{icon_state = "red"; dir = 8},/area/security/checkpoint2)
"aFw" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/library)
"aFx" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/arrivals)
-"aFy" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aFy" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"aFz" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/arrivals)
"aFA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2)
"aFB" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/arrivals)
@@ -1642,9 +1642,9 @@
"aFD" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/arrivals)
"aFE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/exodus{c_tag = "Arrivals East"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/hallway/secondary/entry/port)
"aFF" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whitecorner"},/area/hallway/secondary/entry/port)
-"aFG" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access = list(10)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
+"aFG" = (/obj/structure/table/standard,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_y = 30},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
"aFH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
-"aFI" = (/obj/structure/table,/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_y = 30},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/civilian_west{c_tag = "Tool Storage - Primary"},/turf/simulated/floor,/area/storage/primary)
+"aFI" = (/obj/item/weapon/storage/box,/obj/structure/table/standard,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
"aFJ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/storage/primary)
"aFK" = (/obj/effect/landmark/start{name = "Assistant"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/storage/primary)
"aFL" = (/obj/effect/landmark/start{name = "Assistant"},/turf/simulated/floor,/area/storage/primary)
@@ -1709,15 +1709,15 @@
"aGS" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2)
"aGT" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "red"},/area/security/checkpoint2)
"aGU" = (/obj/item/weapon/crowbar,/obj/item/device/flash,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "red"; dir = 6},/area/security/checkpoint2)
-"aGV" = (/obj/machinery/vending/coffee,/obj/machinery/camera/network/civilian_west{c_tag = "Gateway Arrival Area"; dir = 4},/turf/simulated/floor,/area/gateway)
+"aGV" = (/obj/machinery/cryopod/right,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep/cryo)
"aGW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal,/turf/simulated/floor/plating,/area/maintenance/substation/civilian_west)
"aGX" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
"aGY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/hallway/secondary/entry/port)
"aGZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard)
"aHa" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard)
"aHb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/secondary/entry/starboard)
-"aHc" = (/obj/structure/table,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
-"aHd" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
+"aHc" = (/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/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/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)},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"aHd" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/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)},/turf/simulated/floor,/area/hallway/secondary/exit)
"aHe" = (/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/security/nuke_storage)
"aHf" = (/mob/living/simple_animal/mouse/brown/Tom,/turf/simulated/floor{icon_state = "vault"; dir = 6},/area/security/nuke_storage)
"aHg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"},/area/security/nuke_storage)
@@ -1748,7 +1748,7 @@
"aHF" = (/obj/structure/toilet{pixel_y = 8},/obj/machinery/light/small{dir = 8},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aHG" = (/obj/machinery/light/small{dir = 8},/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/toilet)
"aHH" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aHI" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(1,5,11,18,24)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aHI" = (/obj/machinery/light/small{dir = 1},/obj/item/clothing/head/cakehat,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aHJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/camera/network/civilian_east{c_tag = "Dormitories South"; dir = 4},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"aHK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar)
"aHL" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j1"; dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/bar)
@@ -1802,7 +1802,7 @@
"aIH" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
"aII" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/civilian_east)
"aIJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
-"aIK" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
+"aIK" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/maintenance/locker)
"aIL" = (/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/storage/primary)
"aIM" = (/obj/effect/landmark/start{name = "Assistant"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/storage/primary)
"aIN" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/library)
@@ -1810,10 +1810,10 @@
"aIP" = (/obj/effect/landmark/start{name = "Assistant"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/storage/primary)
"aIQ" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/security/nuke_storage)
"aIR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/meter,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/library)
-"aIS" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table,/obj/item/weapon/deck,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/gateway)
+"aIS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aIT" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/gateway)
"aIU" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/gateway)
-"aIV" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/gateway)
+"aIV" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 6},/obj/item/weapon/storage/briefcase/inflatable{pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = -3},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/reinforced,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"aIW" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/evahallway)
"aIX" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/evahallway)
"aIY" = (/obj/machinery/suit_cycler/engineering,/obj/machinery/light/small{dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/ai_monitored/storage/eva)
@@ -1885,7 +1885,7 @@
"aKm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/primary)
"aKn" = (/turf/simulated/floor,/area/storage/primary)
"aKo" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/primary)
-"aKp" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor,/area/storage/primary)
+"aKp" = (/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
"aKq" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/primary)
"aKr" = (/turf/simulated/floor{icon_state = "delivery"},/area/storage/primary)
"aKs" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "Tool Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bot"},/area/storage/primary)
@@ -1893,7 +1893,7 @@
"aKu" = (/turf/simulated/wall/r_wall,/area/hallway/primary/port)
"aKv" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/hallway/primary/port)
"aKw" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/security/nuke_storage)
-"aKx" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes{pixel_y = 2},/turf/simulated/floor,/area/gateway)
+"aKx" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/security/vacantoffice)
"aKy" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/gateway)
"aKz" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/gateway)
"aKA" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/gateway)
@@ -1912,7 +1912,7 @@
"aKN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/central_one)
"aKO" = (/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central_one)
"aKP" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/window/brigdoor{dir = 1; name = "Security Checkpoint"; req_access = list(63)},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/secondary/entry/starboard)
-"aKQ" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A. Cycler Access"; req_one_access = list(1,5,11,18,24)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
+"aKQ" = (/obj/effect/landmark/start{name = "Gardener"},/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 9; icon_state = "green"},/area/hydroponics/garden)
"aKR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"aKS" = (/obj/machinery/vending/cola,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_two)
"aKT" = (/obj/structure/disposalpipe/segment,/obj/machinery/button/crematorium{pixel_x = 25},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
@@ -1944,12 +1944,12 @@
"aLt" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/obj/item/device/eftpos{eftpos_name = "Chapel EFTPOS scanner"},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aLu" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/hallway/secondary/exit)
"aLv" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
-"aLw" = (/obj/structure/table,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
+"aLw" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aLx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main)
"aLy" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/arrival/station)
"aLz" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/shuttle/arrival/station)
-"aLA" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
-"aLB" = (/obj/machinery/requests_console{department = "Arrival shuttle"; pixel_y = -30},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
+"aLA" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_1"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_1_hatch"},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station)
+"aLB" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_2"; pixel_x = -25; pixel_y = 0; tag_door = "escape_pod_2_hatch"},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod2/station)
"aLC" = (/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/space,/area/shuttle/arrival/station)
"aLD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
"aLE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/secondary/entry/port)
@@ -2028,9 +2028,9 @@
"aMZ" = (/obj/structure/bed/chair/comfy/brown{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aNa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aNb" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
-"aNc" = (/obj/structure/closet/coffin,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chapel"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/window/eastleft{dir = 8; name = "Coffin Storage"; req_access = list(22)},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
+"aNc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aNd" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
-"aNe" = (/obj/structure/table,/obj/machinery/light/small,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
+"aNe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
"aNf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main)
"aNg" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/arrival/station)
"aNh" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port)
@@ -2067,7 +2067,7 @@
"aNM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_one)
"aNN" = (/obj/machinery/light{dir = 1},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/primary/central_one)
"aNO" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 30},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/hallway/primary/central_one)
-"aNP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(1,11,18,24)},/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_one)
+"aNP" = (/obj/effect/landmark/start{name = "Gardener"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics/garden)
"aNQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central_one)
"aNR" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central_one)
"aNS" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central_one)
@@ -2075,7 +2075,7 @@
"aNU" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/hallway/primary/central_one)
"aNV" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "L1"},/area/hallway/primary/central_one)
"aNW" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "L3"},/area/hallway/primary/central_one)
-"aNX" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(1,11,18,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_one)
+"aNX" = (/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/locker)
"aNY" = (/turf/simulated/floor{icon_state = "L7"},/area/hallway/primary/central_one)
"aNZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "L9"},/area/hallway/primary/central_one)
"aOa" = (/turf/simulated/floor{icon_state = "L11"},/area/hallway/primary/central_one)
@@ -2182,23 +2182,23 @@
"aPX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_two)
"aPY" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=EVA2"; location = "Dorm"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/hallway/primary/central_two)
"aPZ" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/hallway/primary/central_two)
-"aQa" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aQa" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/locker)
"aQb" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aQc" = (/obj/structure/extinguisher_cabinet{pixel_x = -13; pixel_y = 28},/obj/machinery/atm{pixel_x = 6; pixel_y = 28},/turf/simulated/floor,/area/hallway/primary/port)
"aQd" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - Northwest"},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central_one)
"aQe" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aQf" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
-"aQg" = (/obj/machinery/light/small{dir = 4},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/structure/table/woodentable,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/simulated/floor/carpet,/area/crew_quarters/bar)
+"aQg" = (/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/locker)
"aQh" = (/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aQi" = (/obj/machinery/gibber,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aQj" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
"aQk" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "showroomfloor"},/area/crew_quarters/kitchen)
-"aQl" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
+"aQl" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aQm" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "hydrofloor"},/area/hydroponics)
"aQn" = (/turf/simulated/floor,/area/hydroponics)
"aQo" = (/obj/structure/disposalpipe/segment,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics)
"aQp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics)
-"aQq" = (/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32},/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aQq" = (/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aQr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hydroponics)
"aQs" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hydroponics)
"aQt" = (/obj/machinery/light_switch{pixel_x = 27},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics)
@@ -2258,11 +2258,11 @@
"aRv" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aRw" = (/obj/machinery/vending/cigarette{pixel_x = 0; pixel_y = 0},/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/crew_quarters/bar)
"aRx" = (/obj/machinery/door/window{dir = 4; name = "Bar"; req_access = list(25)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
-"aRy" = (/obj/structure/table,/obj/item/weapon/hatchet,/obj/item/weapon/minihoe,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
+"aRy" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/storage/art)
"aRz" = (/obj/machinery/biogenerator,/turf/simulated/floor,/area/hydroponics)
"aRA" = (/obj/machinery/seed_extractor,/turf/simulated/floor,/area/hydroponics)
"aRB" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor,/area/hydroponics)
-"aRC" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor{dir = 9; icon_state = "green"},/area/hydroponics/garden)
+"aRC" = (/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aRD" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics)
"aRE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hydroponics)
"aRF" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics)
@@ -2307,7 +2307,7 @@
"aSs" = (/obj/machinery/door/airlock/glass{name = "Art Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/hallway/primary/port)
"aSt" = (/obj/machinery/door/morgue{dir = 2; name = "Confession Booth (Chaplain)"; req_access = list(22)},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"aSu" = (/obj/item/device/radio/beacon,/obj/machinery/camera/network/exodus{c_tag = "Arrivals South"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/port)
-"aSv" = (/obj/structure/table,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/hallway/primary/port)
+"aSv" = (/obj/structure/table/standard,/obj/item/device/camera_film,/obj/item/device/camera,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/storage/art)
"aSw" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port)
"aSx" = (/obj/structure/closet/emcloset,/turf/simulated/floor,/area/hallway/primary/port)
"aSy" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/obj/machinery/camera/network/exodus{c_tag = "Arrivals Southeast"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port)
@@ -2333,7 +2333,7 @@
"aSS" = (/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aST" = (/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aSU" = (/obj/machinery/camera/network/exodus{c_tag = "Arrivals Southwest"},/turf/simulated/floor,/area/hallway/secondary/entry/port)
-"aSV" = (/obj/structure/table/reinforced,/obj/machinery/light/small{dir = 1},/obj/item/clothing/head/cakehat,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"aSV" = (/obj/item/weapon/material/kitchen/rollingpin,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aSW" = (/obj/machinery/disposal,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aSX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"aSY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
@@ -2395,11 +2395,11 @@
"aUc" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/crew_quarters/locker)
"aUd" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor,/area/crew_quarters/locker)
"aUe" = (/turf/simulated/wall,/area/storage/art)
-"aUf" = (/obj/structure/table,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/storage/art)
+"aUf" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small,/obj/machinery/camera/network/civilian_west{c_tag = "Art Supply Storage"; dir = 1},/turf/simulated/floor,/area/storage/art)
"aUg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/storage/art)
"aUh" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor,/area/storage/art)
"aUi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker)
-"aUj" = (/obj/structure/table,/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Port - East"; dir = 1},/turf/simulated/floor,/area/hallway/primary/port)
+"aUj" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/cell_charger,/turf/simulated/floor,/area/storage/tools)
"aUk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hallway/primary/port)
"aUl" = (/obj/structure/sign/directions/security{dir = 4; icon_state = "direction_sec"; pixel_y = 4; tag = "icon-direction_sec (EAST)"},/obj/structure/sign/directions/medical{dir = 4; icon_state = "direction_med"; pixel_y = -4; tag = "icon-direction_med (EAST)"},/turf/simulated/wall,/area/hallway/primary/port)
"aUm" = (/turf/simulated/wall,/area/storage/tools)
@@ -2425,7 +2425,7 @@
"aUG" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aUH" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aUI" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aUJ" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"aUJ" = (/obj/machinery/chemical_dispenser/bar_soft/full,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aUK" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aUL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"aUM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
@@ -2433,11 +2433,11 @@
"aUO" = (/obj/structure/flora/pottedplant{tag = "icon-plant-22"; icon_state = "plant-22"},/obj/machinery/camera/network/civilian_east{c_tag = "Bar East"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aUP" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aUQ" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"aUR" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"aUS" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
+"aUR" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/tools)
+"aUS" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 26; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/hallway/secondary/exit)
"aUT" = (/obj/structure/closet/secure_closet/freezer/kitchen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aUU" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
-"aUV" = (/obj/structure/table/reinforced,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
+"aUV" = (/obj/item/weapon/book/manual/chef_recipes,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aUW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/bed/chair/wood/wings,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aUX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/hydroponics/garden)
"aUY" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 5; icon_state = "green"},/area/hydroponics/garden)
@@ -2467,7 +2467,7 @@
"aVw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
"aVx" = (/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = -30},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
"aVy" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/firealarm{dir = 2; pixel_y = -24},/turf/simulated/floor,/area/hallway/secondary/entry/starboard)
-"aVz" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1331; master_tag = "nuke_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 25; req_one_access = list(13)},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/port)
+"aVz" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_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/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "exterior access button"; pixel_x = 4; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"aVA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker)
"aVB" = (/obj/structure/closet/wardrobe/mixed,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor,/area/crew_quarters/locker)
"aVC" = (/obj/effect/landmark{name = "lightsout"},/turf/simulated/floor,/area/crew_quarters/locker)
@@ -2479,11 +2479,11 @@
"aVI" = (/obj/machinery/door/airlock/external{frequency = 1331; icon_state = "door_locked"; id_tag = "nuke_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/port)
"aVJ" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/research_port)
"aVK" = (/turf/simulated/floor/plating,/area/storage/emergency2)
-"aVL" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/maintenance/locker)
+"aVL" = (/obj/effect/landmark/start{name = "Gardener"},/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics/garden)
"aVM" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/storage/tools)
"aVN" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/storage/tools)
"aVO" = (/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor,/area/storage/tools)
-"aVP" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/tools)
+"aVP" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
"aVQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"aVR" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "red"; dir = 9},/area/bridge)
"aVS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
@@ -2497,17 +2497,17 @@
"aWa" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
"aWb" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 5},/area/bridge)
"aWc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_two)
-"aWd" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Gardener"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics/garden)
+"aWd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/chapel/main)
"aWe" = (/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -2; pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aWf" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
"aWg" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/floor,/area/crew_quarters/locker)
"aWh" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aWi" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aWj" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Gardener"},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics/garden)
-"aWk" = (/obj/structure/table/woodentable,/obj/item/weapon/kitchen/utensil/fork,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aWj" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/chapel/main)
+"aWk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/weapon/stool/padded,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
"aWl" = (/obj/structure/bed/chair/comfy/black,/turf/simulated/floor/wood,/area/library)
"aWm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aWn" = (/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"aWn" = (/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"aWo" = (/obj/machinery/door/airlock{name = "Port Emergency Storage"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/hallway/primary/port)
"aWp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aWq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
@@ -2518,7 +2518,7 @@
"aWv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aWw" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass{name = "Auxiliary Tool Storage"; req_access = list(12)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/port)
"aWx" = (/obj/item/device/radio/intercom{pixel_x = 28},/obj/machinery/libraryscanner,/turf/simulated/floor/wood,/area/library)
-"aWy" = (/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
+"aWy" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"aWz" = (/obj/effect/landmark/start{name = "Librarian"},/obj/structure/bed/chair/office/dark,/turf/simulated/floor/wood,/area/library)
"aWA" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hydroponics/garden)
"aWB" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/hydroponics/garden)
@@ -2553,22 +2553,22 @@
"aXe" = (/turf/simulated/floor/plating,/area/maintenance/locker)
"aXf" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/locker)
"aXg" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/closet/wardrobe/white,/turf/simulated/floor,/area/crew_quarters/locker)
-"aXh" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
-"aXi" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor,/area/crew_quarters/locker)
-"aXj" = (/obj/structure/table,/turf/simulated/floor,/area/crew_quarters/locker)
-"aXk" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/crew_quarters/locker)
+"aXh" = (/obj/structure/window/basic{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
+"aXi" = (/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/locker)
+"aXj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/tape_roll,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/locker)
+"aXk" = (/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/packageWrap,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aXl" = (/obj/machinery/door/morgue{dir = 2; name = "Private Study"; req_access = list(37)},/turf/simulated/floor{icon_state = "cult"; dir = 2},/area/library)
-"aXm" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/storage/art)
+"aXm" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"aXn" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/camera/network/civilian_east{c_tag = "Chapel South"; dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
-"aXo" = (/obj/structure/table,/obj/item/device/camera_film,/obj/item/device/camera,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/storage/art)
+"aXo" = (/obj/structure/table/standard,/obj/machinery/photocopier/faxmachine{anchored = 1; department = "Vacant Office"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor,/area/security/vacantoffice)
"aXp" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency2)
"aXq" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/maintenance/research_port)
"aXr" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency2)
"aXs" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/mask/breath,/obj/item/clothing/mask/breath,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency2)
"aXt" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor,/area/storage/tools)
-"aXu" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/tools)
+"aXu" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"aXv" = (/turf/simulated/floor,/area/storage/tools)
-"aXw" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/cell_charger,/turf/simulated/floor,/area/storage/tools)
+"aXw" = (/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aXx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"aXy" = (/turf/simulated/wall,/area/bridge)
"aXz" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1331; id_tag = "nuke_shuttle_dock_pump"},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "nuke_shuttle_dock_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry/port)
@@ -2586,42 +2586,42 @@
"aXL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two)
"aXM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_two)
"aXN" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access = list(28)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"aXO" = (/obj/structure/table/woodentable,/obj/item/weapon/kitchen/utensil/fork,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"aXO" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aXP" = (/obj/structure/disposalpipe/segment,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aXQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/obj/item/weapon/deck{pixel_y = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aXR" = (/obj/item/weapon/stool,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/chapel/main)
+"aXR" = (/obj/structure/table/marble,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aXS" = (/obj/structure/table/woodentable,/obj/item/device/camera,/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aXT" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"aXT" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aXU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
"aXV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"aXW" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
+"aXW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
"aXX" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass{name = "Kitchen"; req_access = list(28)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/hydroponics/garden)
-"aXY" = (/obj/structure/table,/obj/item/weapon/kitchen/rollingpin,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"aXZ" = (/obj/structure/table,/obj/item/weapon/book/manual/chef_recipes,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
+"aXY" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/stamp,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/item/weapon/pen,/turf/simulated/floor,/area/security/vacantoffice)
+"aXZ" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
"aYa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aYb" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"aYc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/hydroponics/garden)
"aYd" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
-"aYe" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
-"aYf" = (/obj/item/weapon/stool,/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/chapel/main)
+"aYe" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
+"aYf" = (/obj/structure/window/basic{dir = 4},/obj/item/weapon/folder/blue{pixel_x = 5},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"aYg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hydroponics/garden)
"aYh" = (/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hydroponics/garden)
"aYi" = (/obj/structure/flora/ausbushes/sunnybush,/obj/item/device/radio/intercom{pixel_x = 25},/turf/simulated/floor/grass,/area/hydroponics/garden)
"aYj" = (/obj/structure/bookcase{name = "bookcase (Adult)"},/turf/simulated/floor/wood,/area/library)
-"aYk" = (/obj/item/weapon/stool,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "chapel"},/area/chapel/main)
+"aYk" = (/obj/item/weapon/reagent_containers/food/snacks/pie,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
"aYl" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/turf/simulated/floor/wood,/area/library)
"aYm" = (/obj/structure/bed/chair{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
"aYn" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/bridge)
"aYo" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/bridge)
"aYp" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"aYq" = (/obj/machinery/door/window/northright{base_state = "right"; dir = 8; icon_state = "right"; name = "Library Desk Door"; req_access = list(37)},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/library)
+"aYq" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/door/window/westright{name = "Library Desk Door"},/turf/simulated/floor/wood,/area/library)
"aYr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 1; id = "office_shutter"; layer = 3.1; name = "Office Shutters"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/starboard)
"aYs" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"aYt" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/simulated/floor/wood,/area/library)
"aYu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/exit)
"aYv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor,/area/hallway/secondary/exit)
"aYw" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light{dir = 4},/obj/machinery/camera/network/civilian_west{c_tag = "Locker Room East"; dir = 8},/turf/simulated/floor,/area/crew_quarters/locker)
-"aYx" = (/obj/structure/table,/obj/item/weapon/storage/fancy/crayons,/obj/item/weapon/storage/fancy/crayons,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/light/small,/obj/machinery/camera/network/civilian_west{c_tag = "Art Supply Storage"; dir = 1},/turf/simulated/floor,/area/storage/art)
+"aYx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/auxstarboard)
"aYy" = (/obj/machinery/camera/network/command{c_tag = "Bridge West"},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/bridge)
"aYz" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "escape_dock_north_sensor"; pixel_x = 0; pixel_y = -25},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"aYA" = (/obj/item/device/radio/beacon,/turf/simulated/floor{icon_state = "redcorner"; dir = 1},/area/bridge)
@@ -2630,47 +2630,47 @@
"aYD" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"aYE" = (/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/hallway/secondary/entry/port)
"aYF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
-"aYG" = (/obj/item/weapon/stool,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
-"aYH" = (/obj/structure/table,/turf/simulated/floor,/area/security/vacantoffice)
+"aYG" = (/obj/item/weapon/material/hatchet,/obj/item/weapon/material/minihoe,/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
+"aYH" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor,/area/security/prison)
"aYI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/security/vacantoffice)
-"aYJ" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/vacantoffice)
-"aYK" = (/obj/structure/table,/obj/structure/window/basic{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/vacantoffice)
+"aYJ" = (/obj/structure/table/standard,/obj/machinery/light{dir = 8},/obj/machinery/microwave,/turf/simulated/floor,/area/security/prison)
+"aYK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/marble,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
"aYL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/security/vacantoffice)
"aYM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/bridge)
-"aYN" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/security/vacantoffice)
+"aYN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/storage/box/donkpockets{pixel_x = -3; pixel_y = -3},/turf/simulated/floor,/area/security/prison)
"aYO" = (/turf/simulated/wall,/area/security/vacantoffice)
"aYP" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/locker)
"aYQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/locker)
"aYR" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/locker)
"aYS" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/locker)
"aYT" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/requests_console{department = "Locker Room"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/crew_quarters/locker)
-"aYU" = (/obj/structure/table,/obj/item/clothing/head/soft/grey{pixel_x = -2; pixel_y = 3},/turf/simulated/floor,/area/crew_quarters/locker)
+"aYU" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
"aYV" = (/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/camera/network/command{c_tag = "Bridge East"},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/bridge)
"aYW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/crew_quarters/locker)
-"aYX" = (/obj/item/weapon/stool,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
+"aYX" = (/obj/structure/window/basic{dir = 4},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"aYY" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/storage/tools)
"aYZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/storage/tools)
"aZa" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/hallway/primary/central_one)
"aZb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/bridge)
"aZc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/hallway/secondary/exit)
"aZd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/bridge)
-"aZe" = (/obj/item/weapon/stool,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
+"aZe" = (/obj/item/weapon/folder/yellow,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"aZf" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/bridge)
"aZg" = (/obj/machinery/atm{pixel_x = -25},/obj/machinery/camera/network/civilian_east{c_tag = "Bar West"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
-"aZh" = (/obj/structure/table,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
+"aZh" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/auxport)
"aZi" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
"aZj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/bridge)
"aZk" = (/obj/structure/bed/chair/office/light{dir = 8},/turf/simulated/floor,/area/security/vacantoffice)
"aZl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 32},/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/hallway/primary/central_two)
"aZm" = (/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/hallway/primary/central_two)
-"aZn" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/hallway/secondary/exit)
+"aZn" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"aZo" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aZp" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -2; pixel_y = 4},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 6},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"aZq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/kitchen)
-"aZr" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/packageWrap,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"aZs" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"aZt" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
-"aZu" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
+"aZr" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_chapel_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"aZs" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "E.V.A. Maintenance"; req_access = list(15,18); req_one_access = newlist()},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/ai_monitored/storage/eva)
+"aZt" = (/obj/structure/table/standard,/obj/item/device/radio/intercom{broadcasting = 1; freerange = 0; frequency = 1475; listening = 0; name = "Station Intercom (Security)"; pixel_x = 0; pixel_y = -30},/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/item/device/radio/headset,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 10},/area/security/brig)
+"aZu" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/window/brigdoor{name = "Visitation Window"; req_access = list(2)},/turf/simulated/floor,/area/security/prison)
"aZv" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/security/vacantoffice)
"aZw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hydroponics/garden)
"aZx" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/grass,/area/hydroponics/garden)
@@ -2700,14 +2700,14 @@
"aZV" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"aZW" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"aZX" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
-"aZY" = (/obj/structure/table,/obj/item/ashtray/plastic{pixel_x = 4; pixel_y = 6},/turf/simulated/floor,/area/security/vacantoffice)
+"aZY" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/camera/network/prison{c_tag = "Security - Common Brig Southwest"; dir = 4},/turf/simulated/floor,/area/security/prison)
"aZZ" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/starboard)
"baa" = (/turf/simulated/floor,/area/security/vacantoffice)
"bab" = (/obj/structure/bed/chair/office/dark{dir = 8},/turf/simulated/floor,/area/security/vacantoffice)
-"bac" = (/obj/structure/table,/obj/structure/window/basic{dir = 4},/obj/item/weapon/folder/blue{pixel_x = 5},/turf/simulated/floor,/area/security/vacantoffice)
+"bac" = (/obj/structure/table/standard,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bad" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/security/vacantoffice)
"bae" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/security/vacantoffice)
-"baf" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/stamp,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/item/weapon/pen,/turf/simulated/floor,/area/security/vacantoffice)
+"baf" = (/obj/structure/table/standard,/obj/machinery/light_switch{pixel_y = 28},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bag" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/locker)
"bah" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/universal,/turf/simulated/floor/plating,/area/maintenance/locker)
"bai" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/locker)
@@ -2730,7 +2730,7 @@
"baz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/civilian_west)
"baA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/medical)
"baB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_inner"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_north_mech"; pixel_y = -19},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
-"baC" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_north_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},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"baC" = (/obj/structure/table/standard,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"baD" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/storage/tools)
"baE" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/storage/tools)
"baF" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/machinery/light,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/storage/tools)
@@ -2741,7 +2741,7 @@
"baK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/hallway/primary/central_one)
"baL" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/central_one)
"baM" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/hallway/primary/central_one)
-"baN" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "nuke_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 32; req_one_access = list(13)},/turf/space,/area/space)
+"baN" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Port Solar Access"; req_access = list(11)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"baO" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/chapel/main)
"baP" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/button/remote/blast_door{id = "office_shutter"; name = "Office Shutters"; pixel_x = -8; pixel_y = 22},/obj/machinery/light_switch{pixel_x = -8; pixel_y = 32},/turf/simulated/floor,/area/security/vacantoffice)
"baQ" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/bridge)
@@ -2773,14 +2773,14 @@
"bbq" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor,/area/hallway/primary/starboard)
"bbr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bbs" = (/obj/structure/bed/chair/comfy/black{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/wood,/area/library)
-"bbt" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/snacks/pie,/turf/simulated/floor{icon_state = "grimy"},/area/crew_quarters/bar)
+"bbt" = (/obj/machinery/newscaster{pixel_y = -32},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/security/vacantoffice)
"bbu" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bbv" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bbw" = (/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"bbx" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/crew_quarters/kitchen)
+"bbx" = (/obj/structure/table/standard,/obj/machinery/requests_console{department = "Tool Storage"; departmentType = 0; pixel_y = 30},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/civilian_west{c_tag = "Tool Storage - Primary"},/turf/simulated/floor,/area/storage/primary)
"bby" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/hydroponics/garden)
-"bbz" = (/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
-"bbA" = (/obj/structure/table/reinforced,/obj/item/weapon/hatchet,/obj/item/weapon/minihoe,/turf/simulated/floor{icon_state = "grimy"},/area/hydroponics/garden)
+"bbz" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bbA" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bbB" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/hydroponics/garden)
"bbC" = (/obj/structure/flora/ausbushes/fernybush,/turf/simulated/floor/grass,/area/hydroponics/garden)
"bbD" = (/obj/machinery/door/airlock/glass_command{name = "Bridge"; req_access = list(19)},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/bridge)
@@ -2799,7 +2799,7 @@
"bbQ" = (/obj/structure/table/reinforced,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/multitool,/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/bridge)
"bbR" = (/obj/structure/table/reinforced,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/item/weapon/storage/box/donut,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/bridge)
"bbS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light_switch{pixel_x = 25; pixel_y = -25},/turf/simulated/floor,/area/bridge)
-"bbT" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/tape_roll,/turf/simulated/floor,/area/crew_quarters/locker)
+"bbT" = (/obj/structure/table/standard,/obj/machinery/alarm{pixel_y = 23},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bbU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"bbV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/security/vacantoffice)
"bbW" = (/obj/machinery/door/airlock/glass_command{id_tag = "sbridgedoor"; name = "Bridge"; req_access = list(19)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/bridge)
@@ -2834,9 +2834,9 @@
"bcz" = (/obj/structure/closet/emcloset,/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge)
"bcA" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge)
"bcB" = (/obj/item/device/radio/intercom{pixel_x = -25},/obj/machinery/camera/network/exodus{c_tag = "Departures West"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
-"bcC" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_north_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = 25; req_one_access = list(13)},/turf/space,/area/space)
+"bcC" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bcD" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/bridge)
-"bcE" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bcE" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A."; req_one_access = list(18)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bcF" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "centcom_shuttle_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "centcom_shuttle_dock_pump"; tag_chamber_sensor = "centcom_shuttle_dock_sensor"; tag_exterior_door = "centcom_shuttle_dock_outer"; tag_interior_door = "centcom_shuttle_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "centcom_shuttle_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "centcom_shuttle_dock_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bcG" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/bridge)
"bcH" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/hallway/primary/central_two)
@@ -2847,11 +2847,11 @@
"bcM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bcN" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/bar)
"bcO" = (/turf/simulated/floor{icon_state = "wood"},/area/crew_quarters/bar)
-"bcP" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "centcom_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
+"bcP" = (/obj/structure/table/standard,/obj/machinery/light{dir = 4},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bcQ" = (/obj/machinery/light_switch{pixel_x = 16; pixel_y = -23},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bcR" = (/obj/machinery/light,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bcS" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
-"bcT" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = 25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
+"bcT" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/storage/primary)
"bcU" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/kitchen)
"bcV" = (/obj/item/weapon/stool,/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/office)
"bcW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/hydroponics/garden)
@@ -2877,13 +2877,13 @@
"bdq" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass{name = "Chapel"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/main)
"bdr" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 8; icon_state = "escape"},/area/hallway/secondary/exit)
"bds" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/hallway/secondary/exit)
-"bdt" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{anchored = 1; department = "Vacant Office"},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/status_display{pixel_x = 32},/turf/simulated/floor,/area/security/vacantoffice)
+"bdt" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_command{name = "E.V.A. Cycler Access"; req_one_access = list(18)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bdu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bdv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bdw" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"bdx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"bdy" = (/obj/effect/decal/cleanable/cobweb2,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bdz" = (/obj/structure/table,/obj/structure/window/basic{dir = 4},/turf/simulated/floor,/area/security/vacantoffice)
+"bdz" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table/standard,/obj/item/weapon/deck,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/gateway)
"bdA" = (/obj/machinery/photocopier,/turf/simulated/floor,/area/security/vacantoffice)
"bdB" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/hallway/primary/starboard)
"bdC" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/locker)
@@ -2891,7 +2891,7 @@
"bdE" = (/obj/machinery/door/airlock{name = "Unit 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bdF" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bdG" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"bdH" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
+"bdH" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_tool_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bdI" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bdJ" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/wardrobe/suit,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bdK" = (/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
@@ -2955,7 +2955,7 @@
"beQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/secondary/entry/aft)
"beR" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
"beS" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/solar/auxport)
-"beT" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/turf/simulated/floor,/area/security/vacantoffice)
+"beT" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_security{name = "Security Hardsuits"; req_access = list(2)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"beU" = (/obj/machinery/firealarm{dir = 2; pixel_y = -24},/obj/machinery/light,/turf/simulated/floor,/area/security/vacantoffice)
"beV" = (/obj/machinery/door/airlock/maintenance{name = "Cargo Bay Warehouse Maintenance"; req_access = list(31)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/quartermaster/storage)
"beW" = (/obj/machinery/door/airlock/command{name = "Conference Room"; req_access = list(19)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/wood,/area/bridge/meeting_room)
@@ -2966,7 +2966,7 @@
"bfb" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bfc" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/crew_quarters/locker)
"bfd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/crew_quarters/locker)
-"bfe" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/stack/sheet/cardboard,/obj/item/stack/rods{amount = 50},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bfe" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc/super/critical{dir = 1; is_critical = 1; name = "north bump"; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bff" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bfg" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bfh" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/module/power_control,/obj/item/weapon/cell{maxcharge = 2000},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
@@ -2986,9 +2986,9 @@
"bfv" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bfw" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donut,/obj/machinery/door/firedoor/border_only,/obj/machinery/door/blast/shutters{dir = 2; id = "kitchen"; layer = 3.3; name = "Kitchen Shutters"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/hallway/primary/starboard)
"bfx" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light/small,/obj/machinery/camera/network/civilian_east{c_tag = "Library South"; dir = 1},/turf/simulated/floor/wood,/area/library)
-"bfy" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "exterior access button"; pixel_x = 5; pixel_y = -25; req_one_access = list(13)},/turf/space,/area/space)
+"bfy" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_chapel_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/auxsolarstarboard)
"bfz" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable/green,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"bfA" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "centcom_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 25; req_one_access = list(13)},/turf/space,/area/space)
+"bfA" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_tool_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarport)
"bfB" = (/obj/structure/bed/chair/comfy/black{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/bridge/meeting_room)
"bfC" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bfD" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3034,7 +3034,7 @@
"bgr" = (/turf/simulated/wall,/area/hallway/secondary/entry/aft)
"bgs" = (/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"bgt" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/secondary/entry/aft)
-"bgu" = (/obj/structure/table,/obj/machinery/newscaster{pixel_y = -32},/turf/simulated/floor,/area/security/vacantoffice)
+"bgu" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = ""; info = "Brusies sustained in the holodeck can be healed simply by sleeping."; name = "Holodeck Disclaimer"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/crew_quarters/fitness)
"bgv" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating,/area/maintenance/locker)
"bgw" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/locker)
"bgx" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
@@ -3047,9 +3047,9 @@
"bgE" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/office)
"bgF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office)
"bgG" = (/turf/simulated/floor,/area/quartermaster/office)
-"bgH" = (/obj/item/weapon/storage/box,/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
-"bgI" = (/obj/structure/table,/obj/item/weapon/wrapping_paper,/obj/item/weapon/wrapping_paper,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_y = 30},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office)
-"bgJ" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/quartermaster/office)
+"bgH" = (/obj/machinery/door/airlock/engineering{icon_state = "door_closed"; locked = 0; name = "Fore Starboard Solar Access"; req_access = list(11)},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/auxsolarstarboard)
+"bgI" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/beanbags,/obj/item/weapon/gun/projectile/shotgun/doublebarrel,/obj/item/weapon/paper{info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest."; name = "Shotgun permit"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/wood,/area/crew_quarters/bar)
+"bgJ" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(7)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bgK" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_one)
"bgL" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_one)
"bgM" = (/obj/structure/filingcabinet,/turf/simulated/floor,/area/security/vacantoffice)
@@ -3113,7 +3113,7 @@
"bhS" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/porta_turret{dir = 8},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bhT" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donut,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bhU" = (/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Starboard - East"},/turf/simulated/floor,/area/hallway/primary/starboard)
-"bhV" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "escape_dock_south_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_one_access = list(13)},/turf/simulated/floor,/area/hallway/secondary/exit)
+"bhV" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/ointment{pixel_y = 10},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi_wash)
"bhW" = (/obj/machinery/light/small{dir = 1},/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/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "escape_dock_south_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bhX" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_dock_south_inner"; locked = 1; name = "Escape Airlock"; req_access = list(13)},/obj/machinery/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bhY" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/locker)
@@ -3121,7 +3121,7 @@
"bia" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bib" = (/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/light,/turf/simulated/floor{icon_state = "delivery"},/area/crew_quarters/locker)
"bic" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/crew_quarters/locker)
-"bid" = (/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/mech_sensor{dir = 8; frequency = 1380; id_tag = "escape_dock_south_mech"; pixel_y = 19},/turf/simulated/floor/plating,/area/hallway/secondary/exit)
+"bid" = (/obj/machinery/door/airlock/engineering{name = "Engineering Supplies"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/engineering/break_room)
"bie" = (/obj/item/weapon/cigbutt,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bif" = (/obj/structure/disposalpipe/sortjunction/wildcard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker)
"big" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
@@ -3129,7 +3129,7 @@
"bii" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bij" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bik" = (/obj/machinery/conveyor_switch/oneway{id = "packageSort1"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/office)
-"bil" = (/obj/structure/table,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
+"bil" = (/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
"bim" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/hallway/primary/central_one)
"bin" = (/obj/structure/closet/coffin,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chapel"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
"bio" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/item/device/eftpos{eftpos_name = "Bridge EFTPOS scanner"},/obj/structure/table/woodentable,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/bridge/meeting_room)
@@ -3196,7 +3196,7 @@
"bjx" = (/obj/structure/disposalpipe/tagger/partial{name = "Sorting Office"; sort_tag = "Sorting Office"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bjy" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bjz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
-"bjA" = (/obj/item/stack/sheet/cardboard,/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
+"bjA" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/item/stack/material/glass/reinforced,/turf/simulated/floor/plating,/area/maintenance/locker)
"bjB" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bjC" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bjD" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
@@ -3213,7 +3213,7 @@
"bjO" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall,/area/maintenance/locker)
"bjP" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai)
"bjQ" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/civilian_west{c_tag = "Locker Room South"; dir = 8},/turf/simulated/floor,/area/crew_quarters/locker)
-"bjR" = (/obj/machinery/light{dir = 1},/obj/item/weapon/stool,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"bjR" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
"bjS" = (/obj/effect/landmark{name = "tripai"},/obj/item/device/radio/intercom{anyai = 1; freerange = 1; listening = 0; name = "Custom Channel"; pixel_x = 0; pixel_y = 19},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; frequency = 1447; name = "Private Channel"; pixel_x = 0; pixel_y = -26},/obj/item/device/radio/intercom{anyai = 1; broadcasting = 1; freerange = 1; listening = 1; name = "Common Channel"; pixel_x = 27; pixel_y = -3},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"bjT" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bjU" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3242,7 +3242,7 @@
"bkr" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/hallway/primary/starboard)
"bks" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/hallway/primary/starboard)
"bkt" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/hallway/primary/starboard)
-"bku" = (/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/hallway/primary/starboard)
+"bku" = (/obj/structure/closet/coffin,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "chapel"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/window/westleft{name = "Coffin Storage"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
"bkv" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
"bkw" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -30},/turf/simulated/floor,/area/hallway/primary/starboard)
"bkx" = (/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Warehouse"; dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
@@ -3273,7 +3273,7 @@
"bkW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bkX" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - East"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central_two)
"bkY" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Starboard - West"; dir = 1},/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/starboard)
-"bkZ" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Starboard - Central"; dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
+"bkZ" = (/obj/structure/grille,/turf/simulated/floor/plating,/area/maintenance/locker)
"bla" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/locker)
"blb" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/locker)
"blc" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
@@ -3288,7 +3288,7 @@
"bll" = (/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Starboard - Central East"; dir = 1},/turf/simulated/floor,/area/hallway/primary/starboard)
"blm" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/embedded_controller/radio/docking_port_multi{child_names_txt = "Airlock One;Airlock Two"; child_tags_txt = "escape_dock_north_airlock;escape_dock_south_airlock"; frequency = 1380; id_tag = "escape_dock"; pixel_x = 0; pixel_y = -25; req_one_access = list(13)},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/hallway/secondary/exit)
"bln" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/office)
-"blo" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
+"blo" = (/obj/machinery/light{dir = 1},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
"blp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_one)
"blq" = (/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central_one)
"blr" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "specops_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "specops_dock_pump"; tag_chamber_sensor = "specops_dock_sensor"; tag_exterior_door = "specops_dock_outer"; tag_interior_door = "specops_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "specops_dock_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "specops_dock_pump"},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
@@ -3301,8 +3301,8 @@
"bly" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/bridge/meeting_room)
"blz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"blA" = (/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
-"blB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
-"blC" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = 25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
+"blB" = (/obj/machinery/camera/network/mining{c_tag = "Medbay Lobby Port"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"blC" = (/obj/structure/table/standard,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/storage/tech)
"blD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
"blE" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"blF" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -30; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/device/megaphone,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/crew_quarters/captain)
@@ -3340,7 +3340,7 @@
"bml" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bmm" = (/obj/machinery/door/airlock{name = "Unit 4"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
"bmn" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"bmo" = (/obj/item/stack/sheet/glass/reinforced,/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/locker)
+"bmo" = (/obj/machinery/camera/network/mining{c_tag = "Medbay Lobby Starboard"},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
"bmp" = (/obj/item/weapon/screwdriver,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bmq" = (/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bmr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
@@ -3354,8 +3354,8 @@
"bmz" = (/obj/structure/disposalpipe/sortjunction/untagged{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage)
"bmA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker)
"bmB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/civilian_west{c_tag = "Locker Room Toilets"; dir = 8},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/locker/locker_toilet)
-"bmC" = (/obj/item/weapon/stool,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
-"bmD" = (/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
+"bmC" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"bmD" = (/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bmE" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/quartermaster/office)
"bmF" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/quartermaster/office)
"bmG" = (/turf/simulated/wall/r_wall,/area/maintenance/substation/command)
@@ -3372,13 +3372,13 @@
"bmR" = (/obj/structure/table/woodentable,/obj/item/device/eftpos{eftpos_name = "Captain EFTPOS scanner"},/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bmS" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/chainofcommand,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"bmT" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bmU" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small{dir = 1},/obj/structure/cable/cyan{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc/super/equipment{dir = 1; name = "north bump"; pixel_y = 24},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
+"bmU" = (/obj/structure/table/reinforced,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bmV" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6)},/turf/simulated/floor,/area/hallway/primary/starboard)
-"bmW" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/obj/item/stack/sheet/mineral/phoron,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"bmW" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access = list(7)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"bmX" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_one_access = list(5,12,47)},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"bmY" = (/obj/structure/sign/chemistry,/turf/simulated/wall/r_wall,/area/medical/chemistry)
"bmZ" = (/obj/structure/reagent_dispensers/water_cooler,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/reception)
-"bna" = (/obj/structure/table,/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/item/weapon/storage/box/cups{pixel_x = 0; pixel_y = 0},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"bna" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access = list(7)},/turf/simulated/floor/engine,/area/rnd/mixing)
"bnb" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_access = list(12)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/secondary/exit)
"bnc" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Substation - Command"},/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bnd" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/reception)
@@ -3389,10 +3389,10 @@
"bni" = (/turf/simulated/wall,/area/medical/reception)
"bnj" = (/obj/machinery/light{dir = 1},/obj/structure/closet/secure_closet/medical1,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bnk" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/landmark/start{name = "Chemist"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/medical/chemistry)
-"bnl" = (/obj/item/weapon/stool,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/reception)
+"bnl" = (/obj/effect/decal/cleanable/generic,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bnm" = (/obj/machinery/light{dir = 1},/obj/machinery/disposal,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bnn" = (/turf/simulated/wall,/area/medical/exam_room)
-"bno" = (/obj/structure/table,/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/morgue)
+"bno" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access = list(7)},/turf/simulated/floor/engine,/area/rnd/mixing)
"bnp" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue)
"bnq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue)
"bnr" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/morgue)
@@ -3404,14 +3404,14 @@
"bnx" = (/obj/machinery/door/blast/regular{id = "mixvent"; name = "Mixer Room Vent"},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
"bny" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/chargebay)
"bnz" = (/obj/machinery/computer/rdconsole/robotics,/obj/machinery/alarm{pixel_y = 25},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
-"bnA" = (/obj/structure/table,/obj/item/weapon/book/manual/robotics_cyborgs{pixel_x = 2; pixel_y = 5},/obj/item/weapon/storage/belt/utility,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/item/weapon/storage/belt/utility,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bnA" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(7)},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bnB" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bnC" = (/obj/structure/reagent_dispensers/acid{density = 0; pixel_x = -32},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bnD" = (/obj/structure/bed/chair/office/light{dir = 1},/obj/effect/landmark/start{name = "Roboticist"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bnE" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "scanhideside"; name = "Diagnostics Room Privacy Shutters"; opacity = 0},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay4)
"bnF" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bnG" = (/obj/machinery/autolathe,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"bnH" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/gloves/latex,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bnH" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 25},/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
"bnI" = (/turf/simulated/wall/r_wall,/area/rnd/lab)
"bnJ" = (/obj/structure/closet/hydrant{pixel_x = -32},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/storage/emergency)
"bnK" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/emergency)
@@ -3440,12 +3440,12 @@
"boh" = (/obj/machinery/chemical_dispenser/full,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"boi" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 30},/obj/machinery/chem_master,/obj/machinery/camera/network/medbay{c_tag = "Medbay - Chemistry"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"boj" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "chemcounter"; name = "Pharmacy Counter Lockdown Control"; pixel_y = 25},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bok" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
-"bol" = (/obj/item/weapon/stool,/obj/machinery/camera/network/mining{c_tag = "Medbay Lobby Port"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"bok" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office)
+"bol" = (/obj/item/weapon/stool/padded,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/reception)
"bom" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bon" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/terminal{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command)
"boo" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/assembly/robotics)
-"bop" = (/obj/item/weapon/stool,/obj/machinery/camera/network/mining{c_tag = "Medbay Lobby Starboard"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/reception)
+"bop" = (/obj/machinery/vending/coffee,/obj/machinery/camera/network/civilian_west{c_tag = "Gateway Arrival Area"; dir = 4},/obj/structure/sign/biohazard{pixel_x = -32},/turf/simulated/floor,/area/gateway)
"boq" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/lab)
"bor" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bos" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/maintenance/substation/command)
@@ -3459,8 +3459,8 @@
"boA" = (/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/maintenance/disposal)
"boB" = (/obj/item/device/radio/intercom{anyai = 1; broadcasting = 0; freerange = 1; listening = 1; name = "Captain's Intercom"; pixel_x = -27; pixel_y = -3},/obj/structure/closet/secure_closet/captains,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"boC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"boD" = (/obj/machinery/computer/card,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain)
-"boE" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"boD" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/card/id/captains_spare,/turf/simulated/floor/wood,/area/crew_quarters/captain)
+"boE" = (/obj/machinery/computer/card,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"boF" = (/obj/machinery/photocopier/faxmachine{department = "Captain's Office"},/obj/structure/table/woodentable,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/crew_quarters/captain)
"boG" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "bluecorner"},/area/hallway/primary/central_two)
"boH" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_two)
@@ -3469,7 +3469,7 @@
"boK" = (/obj/item/weapon/stool,/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/camera/network/medbay{c_tag = "Medbay Examination Room"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"boL" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"boM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"boN" = (/obj/structure/bed,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"boN" = (/obj/structure/bed/padded,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"boO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = 6},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/clothing/head/welding{pixel_x = -3; pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"boP" = (/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception)
"boQ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/reception)
@@ -3484,7 +3484,7 @@
"boZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bpa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bpb" = (/obj/structure/filingcabinet/medical,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
-"bpc" = (/obj/structure/table,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue)
+"bpc" = (/obj/structure/table/standard,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
"bpd" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/medical/morgue)
"bpe" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/morgue)
"bpf" = (/turf/simulated/floor,/area/medical/morgue)
@@ -3499,16 +3499,16 @@
"bpo" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/folder/white,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/window/eastright{base_state = "left"; dir = 2; icon_state = "left"; name = "Robotics Desk"; req_access = list(29)},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
"bpp" = (/turf/simulated/wall,/area/assembly/robotics)
"bpq" = (/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
-"bpr" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/window/southright{name = "Research and Development Desk"; req_access = list(7)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/hallway/primary/starboard)
-"bps" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = 25; req_one_access = list(13)},/turf/space,/area/space)
+"bpr" = (/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/lab)
+"bps" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "toxin_test_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = -20; req_access = newlist(); req_one_access = list(7,13)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/space)
"bpt" = (/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/assembly/robotics)
"bpu" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bpv" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Roboticist"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/assembly/robotics)
"bpw" = (/obj/structure/closet/emcloset,/obj/machinery/camera/network/exodus{c_tag = "Arrivals Auxiliary Docking South"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"bpx" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/hallway/primary/starboard)
-"bpy" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/lab)
+"bpy" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_outer"; locked = 1; name = "Engineering External Access"; req_access = newlist(); req_one_access = list(7,13)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"bpz" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/firealarm{pixel_y = 27},/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/quartermaster/office)
-"bpA" = (/obj/structure/table,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/lab)
+"bpA" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_inner"; locked = 1; name = "Engineering External Access"; req_access = newlist(); req_one_access = list(7,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"bpB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/disposal)
"bpC" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bpD" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
@@ -3527,15 +3527,15 @@
"bpQ" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 0; pixel_y = -29},/obj/machinery/light/small,/turf/simulated/floor/plating,/area/maintenance/disposal)
"bpR" = (/obj/machinery/light_switch{pixel_y = -25},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/disposal)
"bpS" = (/obj/machinery/light/small{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/locker)
-"bpT" = (/obj/effect/decal/cleanable/generic,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/maintenance/locker)
+"bpT" = (/obj/machinery/camera/network/civilian_west{c_tag = "Waste Disposal"; dir = 8},/obj/item/weapon/material/ashtray/plastic{pixel_x = 5; pixel_y = -5},/obj/effect/decal/cleanable/ash,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plating,/area/maintenance/disposal)
"bpU" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/locker)
"bpV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/locker)
"bpW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bpX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/locker)
"bpY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/locker)
-"bpZ" = (/obj/structure/table,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/clothing/head/soft,/turf/simulated/floor,/area/quartermaster/storage)
-"bqa" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage)
-"bqb" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/quartermaster/storage)
+"bpZ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "toxin_test_airlock"; name = "interior access button"; pixel_x = 20; pixel_y = 20; req_access = newlist(); req_one_access = list(7,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/research_starboard)
+"bqa" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoC_window_tint"; pixel_y = -26},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_c)
+"bqb" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"bqc" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/quartermaster/office)
"bqd" = (/obj/structure/closet/secure_closet/cargotech,/turf/simulated/floor,/area/quartermaster/storage)
"bqe" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/quartermaster/storage)
@@ -3552,8 +3552,8 @@
"bqp" = (/turf/simulated/floor/plating/airless,/area/rnd/xenobiology)
"bqq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/extinguisher,/obj/item/weapon/extinguisher,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bqr" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command)
-"bqs" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access = list(33)},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "chemcounter"; name = "Pharmacy Counter Shutters"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/medical/chemistry)
-"bqt" = (/obj/machinery/button/remote/blast_door{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/assembly/chargebay)
+"bqs" = (/obj/machinery/door/window/westright{name = "Janitoral Delivery"},/turf/simulated/floor{icon_state = "delivery"},/area/janitor)
+"bqt" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/newscaster{pixel_x = 30},/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/ward)
"bqu" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating/airless,/area/rnd/xenobiology)
"bqv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bqw" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3572,14 +3572,14 @@
"bqJ" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bqK" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
"bqL" = (/turf/simulated/wall/r_wall,/area/medical/chemistry)
-"bqM" = (/obj/structure/bed,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
+"bqM" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/captain,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"bqN" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/reception)
"bqO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/reception)
"bqP" = (/turf/simulated/floor{dir = 4; icon_state = "whiteblue_ex"; tag = "icon-whiteblue (EAST)"},/area/medical/reception)
"bqQ" = (/obj/machinery/conveyor{dir = 1; id = "garbage"},/obj/machinery/door/blast/regular{density = 1; icon_state = "pdoor1"; id = "Disposal Exit"; name = "Disposal Exit Vent"; opacity = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/disposal)
"bqR" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bqS" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
-"bqT" = (/obj/structure/table,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bqT" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Break Room"; req_one_access = list(10)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/break_room)
"bqU" = (/obj/structure/filingcabinet/chestdrawer{desc = "A large drawer filled with autopsy reports."; name = "Autopsy Reports"},/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue)
"bqV" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/medical/morgue)
"bqW" = (/obj/machinery/optable,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/medical/morgue)
@@ -3599,8 +3599,8 @@
"brk" = (/obj/machinery/button/remote/blast_door{id = "Disposal Exit"; name = "Disposal Vent Control"; pixel_x = -25; pixel_y = 4; req_access = list(12)},/obj/machinery/button/remote/driver{id = "trash"; pixel_x = -26; pixel_y = -6},/obj/item/weapon/cigbutt,/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/maintenance/disposal)
"brl" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"brm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"brn" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"bro" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"brn" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bro" = (/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"brp" = (/obj/effect/landmark/start{name = "Cargo Technician"},/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
"brq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency)
"brr" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/storage/emergency)
@@ -3640,9 +3640,9 @@
"brZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/hallway/primary/central_one)
"bsa" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Command Substation Bypass"},/obj/machinery/light,/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bsb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/substation/command)
-"bsc" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bsc" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access = list(10)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/break_room)
"bsd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/medical/medbay2)
-"bse" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bse" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora)
"bsf" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"bsg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/obj/machinery/power/sensor{name = "Powernet Sensor - Medbay Subgrid"; name_tag = "Medbay Subgrid"},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"bsh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/vault/bolted{name = "AI core"; req_access = list(16)},/obj/machinery/door/blast/regular{id = "AICore"; name = "AI core maintenance hatch"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai)
@@ -3655,30 +3655,30 @@
"bso" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/glass_research{name = "Robotics Lab"; req_access = list(29)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bsp" = (/turf/simulated/wall,/area/crew_quarters/captain)
"bsq" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera/network/research{c_tag = "Research Division Access"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/rnd/research)
-"bsr" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bsr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/lab)
"bss" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central_two)
"bst" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bsu" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bsv" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "admin_shuttle_dock_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13); tag_airpump = "admin_shuttle_dock_pump"; tag_chamber_sensor = "admin_shuttle_dock_sensor"; tag_exterior_door = "admin_shuttle_dock_outer"; tag_interior_door = "admin_shuttle_dock_inner"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"bsw" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/reception)
-"bsx" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups{pixel_x = 2; pixel_y = 5},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/reception)
-"bsy" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "admin_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -8; pixel_y = 25; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/aft)
-"bsz" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/machinery/computer/med_data/laptop,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
-"bsA" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
+"bsx" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table/standard,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
+"bsy" = (/obj/structure/table/standard,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/hand_labeler,/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora_storage)
+"bsz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,7)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"bsA" = (/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research)
"bsB" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_dock_inner"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bsC" = (/obj/structure/filingcabinet/chestdrawer{name = "Medical Forms"},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/medical/reception)
"bsD" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/reception)
-"bsE" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"bsE" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"bsF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
-"bsG" = (/obj/structure/table,/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cane{pixel_x = -6; pixel_y = 4},/obj/item/weapon/storage/box/rxglasses,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"bsG" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/patient_c)
"bsH" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/aft)
-"bsI" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue)
+"bsI" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Break Room"; req_one_access = list(10)},/turf/simulated/floor,/area/engineering/break_room)
"bsJ" = (/obj/machinery/mech_bay_recharge_port,/turf/simulated/floor/plating,/area/assembly/chargebay)
"bsK" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/assembly/chargebay)
"bsL" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bsM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/assembly/chargebay)
"bsN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/assembly/robotics)
-"bsO" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 20; pixel_x = -3; pixel_y = 6},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics)
+"bsO" = (/obj/structure/table/standard,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bsP" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics)
"bsQ" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics)
"bsR" = (/obj/machinery/mecha_part_fabricator,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics)
@@ -3691,9 +3691,9 @@
"bsY" = (/obj/machinery/r_n_d/destructive_analyzer,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/lab)
"bsZ" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/lab)
"bta" = (/obj/machinery/r_n_d/protolathe,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/lab)
-"btb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/rnd/lab)
+"btb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/lab)
"btc" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"btd" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"btd" = (/obj/structure/table/standard,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_one_access = list(13,48); tag_door = "mining_shuttle_hatch"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bte" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/tank/oxygen,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/breath,/turf/simulated/floor/plating,/area/storage/emergency)
"btf" = (/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "admin_shuttle_dock_sensor"; pixel_x = -30; pixel_y = 8},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/hallway/secondary/entry/aft)
"btg" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "admin_shuttle_dock_pump"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/hallway/secondary/entry/aft)
@@ -3702,7 +3702,7 @@
"btj" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "warning"},/area/hallway/secondary/entry/aft)
"btk" = (/obj/machinery/disposal/deliveryChute{dir = 1; name = "disposal inlet"},/obj/structure/disposalpipe/trunk{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/disposal)
"btl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
-"btm" = (/obj/machinery/camera/network/civilian_west{c_tag = "Waste Disposal"; dir = 8},/obj/item/ashtray/plastic{pixel_x = 5; pixel_y = -5},/obj/effect/decal/cleanable/ash,/obj/item/weapon/cigbutt/cigarbutt,/turf/simulated/floor/plating,/area/maintenance/disposal)
+"btm" = (/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access = list(5)},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -5},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
"btn" = (/turf/space,/area/supply/station)
"bto" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"btp" = (/obj/machinery/status_display{density = 0; pixel_x = 0; pixel_y = 32},/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
@@ -3711,7 +3711,7 @@
"bts" = (/obj/machinery/light{dir = 1},/obj/machinery/firealarm{pixel_y = 27},/turf/simulated/floor,/area/quartermaster/storage)
"btt" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/quartermaster/storage)
"btu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/storage)
-"btv" = (/obj/structure/table,/obj/item/weapon/deck{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/disposal)
+"btv" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table/standard,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo)
"btw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office)
"btx" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/quartermaster/office)
"bty" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office)
@@ -3730,7 +3730,7 @@
"btL" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"btM" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/turret_protected/ai_upload)
"btN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"btO" = (/obj/structure/table,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"btO" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/quartermaster/qm)
"btP" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/structure/cable/cyan,/turf/simulated/floor/plating,/area/turret_protected/ai_upload)
"btQ" = (/obj/structure/displaycase,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"btR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
@@ -3743,13 +3743,13 @@
"btY" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"btZ" = (/obj/machinery/chem_master,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bua" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bub" = (/obj/structure/table,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bub" = (/obj/structure/table/standard,/obj/item/weapon/coin/silver{pixel_x = -3; pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/turf/simulated/floor,/area/quartermaster/qm)
"buc" = (/turf/simulated/wall,/area/medical/chemistry)
"bud" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = -32},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/reception)
"bue" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-whiteblue"; icon_state = "whiteblue"},/area/medical/reception)
"buf" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/computer/crew,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/reception)
"bug" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
-"buh" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"},/turf/simulated/floor,/area/medical/reception)
+"buh" = (/obj/structure/table/standard,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
"bui" = (/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = list(20)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"buj" = (/obj/machinery/door/airlock/maintenance{name = "Captain's Office Maintenance"; req_access = list(20)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/visible/supply,/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor/plating,/area/crew_quarters/captain)
"buk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/filingcabinet/medical{pixel_y = 0},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/reception)
@@ -3757,7 +3757,7 @@
"bum" = (/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 32},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/reception)
"bun" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"buo" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/item/weapon/screwdriver,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bup" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"bup" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/box/cups,/obj/item/weapon/storage/box/cups{pixel_x = 2; pixel_y = 5},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/reception)
"buq" = (/obj/structure/morgue,/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/medical/morgue)
"bur" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"bus" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor,/area/medical/morgue)
@@ -3765,30 +3765,30 @@
"buu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"buv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/morgue)
"buw" = (/obj/structure/morgue{tag = "icon-morgue1 (WEST)"; icon_state = "morgue1"; dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/morgue)
-"bux" = (/obj/structure/table,/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access = list(5)},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -5},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
+"bux" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(7,12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
"buy" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/assembly/chargebay)
"buz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/assembly/robotics)
-"buA" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/flash,/obj/item/device/flash,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/assembly/robotics)
+"buA" = (/obj/structure/window/reinforced{dir = 1},/obj/item/weapon/paper_bin,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
"buB" = (/obj/structure/table/woodentable,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/storage/box/matches,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/item/weapon/reagent_containers/food/drinks/flask{pixel_x = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/captain)
"buC" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "bot"},/area/assembly/robotics)
"buD" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "bot"},/area/assembly/robotics)
"buE" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/hologram/holopad,/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/assembly/robotics)
"buF" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
-"buG" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"buG" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/computer/med_data/laptop,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
"buH" = (/obj/structure/closet/firecloset,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "warnwhite"},/area/rnd/research)
"buI" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"buJ" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/rnd/research)
"buK" = (/obj/machinery/computer/rdconsole/core,/turf/simulated/floor,/area/rnd/lab)
"buL" = (/obj/effect/landmark/start{name = "Scientist"},/turf/simulated/floor,/area/rnd/lab)
"buM" = (/obj/machinery/r_n_d/circuit_imprinter,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/turf/simulated/floor,/area/rnd/lab)
-"buN" = (/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"buO" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency)
+"buN" = (/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access = list(5)},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 3},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
+"buO" = (/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/miningdock)
"buP" = (/turf/simulated/shuttle/wall{icon_state = "swall_s6"; dir = 2},/area/shuttle/research/station)
"buQ" = (/turf/simulated/shuttle/wall{icon_state = "swall12"; dir = 2},/area/shuttle/research/station)
"buR" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/research/station)
"buS" = (/turf/simulated/shuttle/wall{icon_state = "swall_s10"; dir = 2},/area/shuttle/research/station)
-"buT" = (/obj/structure/table,/obj/machinery/door/window/northright{name = "Medbay Lobby"; req_access = list(5)},/obj/item/device/radio/intercom{broadcasting = 0; canhear_range = 5; freerange = 0; frequency = 1485; listening = 0; name = "Station Intercom (Medbay)"; pixel_x = 0; pixel_y = 3},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/reception)
-"buU" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_y = -10},/obj/item/weapon/folder/white{pixel_y = 0},/obj/item/weapon/pen,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 16},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"buT" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table/standard,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop)
+"buU" = (/obj/structure/table/standard,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/item/clothing/glasses/welding/superior,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/camera/network/research{c_tag = "Research - RD's Office"; dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"buV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"buW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"buX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
@@ -3807,8 +3807,8 @@
"bvk" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/office)
"bvl" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
"bvm" = (/obj/structure/disposalpipe/tagger/partial{name = "Sorting Office"; sort_tag = "Sorting Office"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
-"bvn" = (/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/structure/table,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/quartermaster/office)
-"bvo" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/quartermaster/office)
+"bvn" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"bvo" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/turf/simulated/floor/plating,/area/storage/tech)
"bvp" = (/obj/machinery/computer/ordercomp,/turf/simulated/floor,/area/quartermaster/office)
"bvq" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay"; req_access = list(31)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/quartermaster/storage)
"bvr" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
@@ -3817,8 +3817,8 @@
"bvu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/hallway/primary/central_three)
"bvv" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{dir = 2; icon_state = "redcorner"},/area/hallway/primary/central_three)
"bvw" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/hop)
-"bvx" = (/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads/hop)
-"bvy" = (/obj/structure/table,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bvx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(7,12)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
+"bvy" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/medical/patient_b)
"bvz" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/recharger/wallcharger{pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bvA" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bvB" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/crew_quarters/heads/hop)
@@ -3831,7 +3831,7 @@
"bvI" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/computer/aiupload,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bvJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bvK" = (/obj/machinery/hologram/holopad,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
-"bvL" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 2; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module,/obj/machinery/light_switch{pixel_x = 27},/obj/structure/reagent_dispensers/acid{density = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bvL" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/medical/patient_a)
"bvM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"bvN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bvO" = (/obj/machinery/door/airlock{name = "Private Restroom"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain)
@@ -3844,10 +3844,10 @@
"bvV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/chemistry)
"bvW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/chemistry)
"bvX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/chemistry)
-"bvY" = (/obj/machinery/smartfridge/secure/medbay,/turf/simulated/wall,/area/medical/chemistry)
+"bvY" = (/obj/structure/table/standard,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/storage/tech)
"bvZ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - East Southwest"; dir = 8},/turf/simulated/floor,/area/hallway/primary/central_two)
"bwa" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "scanhideside"; name = "Diagnostics Room Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay4)
-"bwb" = (/obj/structure/table,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/random/medical,/turf/simulated/floor{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry)
+"bwb" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bwc" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = -8},/obj/machinery/button/remote/blast_door{id = "chemwindow"; name = "Chemistry Laboratory Window Shutters Control"; pixel_x = 26; pixel_y = 8},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bwd" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor,/area/medical/reception)
"bwe" = (/turf/simulated/floor,/area/medical/reception)
@@ -3855,9 +3855,9 @@
"bwg" = (/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; pixel_x = -16; pixel_y = 28},/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/medical/reception)
"bwh" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/plating/airless,/area/rnd/mixing)
"bwi" = (/obj/machinery/door/blast/regular{id = "toxinsdriver"; name = "Toxins Launcher Bay Door"},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
-"bwj" = (/obj/structure/table,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/turf/simulated/floor,/area/medical/reception)
+"bwj" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/engine,/area/rnd/misc_lab)
"bwk" = (/turf/simulated/wall,/area/medical/medbay2)
-"bwl" = (/obj/structure/table,/obj/machinery/button/remote/blast_door{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access = list(5)},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/turf/simulated/floor,/area/medical/reception)
+"bwl" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/crew_quarters/heads/cmo)
"bwm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/medbay2)
"bwn" = (/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; pixel_x = 6; pixel_y = 28},/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Medical Doctor"},/turf/simulated/floor{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/medical/reception)
"bwo" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/assembly/chargebay)
@@ -3874,15 +3874,15 @@
"bwz" = (/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
"bwA" = (/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
"bwB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/rnd/lab)
-"bwC" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/lab)
-"bwD" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bwC" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/airlock/glass_research{name = "Research and Development"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bwD" = (/obj/structure/closet/secure_closet/medical_wall{name = "Pill Cabinet"; pixel_y = -32},/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/tramadol,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bwE" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/emergency)
"bwF" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/storage/emergency)
"bwG" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/research/station)
"bwH" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bwI" = (/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/obj/structure/cable/green,/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/heads/hop)
"bwJ" = (/turf/simulated/shuttle/floor,/area/shuttle/research/station)
-"bwK" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"bwK" = (/obj/item/weapon/cane,/obj/item/weapon/cane{pixel_x = -3; pixel_y = 2},/obj/item/weapon/cane{pixel_x = -6; pixel_y = 4},/obj/item/weapon/storage/box/rxglasses,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bwL" = (/turf/space,/area/shuttle/administration/station)
"bwM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bwN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
@@ -3896,16 +3896,16 @@
"bwV" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
"bwW" = (/obj/structure/disposalpipe/sortjunction/flipped{dir = 1; sortType = "Cargo Bay"; name = "Cargo Bay"},/turf/simulated/floor,/area/quartermaster/office)
"bwX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
-"bwY" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
-"bwZ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "admin_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = 30; pixel_y = -5; req_one_access = list(13)},/turf/space,/area/space)
+"bwY" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station."; info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]"; name = "Outgoing CMO's Notes"},/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
+"bwZ" = (/obj/structure/table/standard,/obj/machinery/computer/skills{pixel_y = 4},/obj/item/device/megaphone,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bxa" = (/turf/simulated/floor{icon_state = "delivery"},/area/quartermaster/office)
-"bxb" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
+"bxb" = (/obj/structure/table/standard,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech)
"bxc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/hallway/primary/central_three)
"bxd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/hallway/primary/central_three)
"bxe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/hallway/primary/central_three)
"bxf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{icon_state = "delivery"},/area/hallway/primary/central_three)
"bxg" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "scanhideside"; name = "Diagnostics Room Privacy Shutters"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay4)
-"bxh" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
+"bxh" = (/obj/item/weapon/paper_bin{pixel_y = -10},/obj/item/weapon/folder/white{pixel_y = 0},/obj/item/weapon/pen,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 16},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
"bxi" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
"bxj" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
"bxk" = (/turf/simulated/floor/carpet,/area/crew_quarters/heads/hop)
@@ -3921,7 +3921,7 @@
"bxu" = (/obj/machinery/cryopod/robot/right,/turf/simulated/floor,/area/assembly/chargebay)
"bxv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/disposal)
"bxw" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central_two)
-"bxx" = (/obj/structure/table,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
+"bxx" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/gateway)
"bxy" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor{dir = 1; icon_state = "whiteyellow"},/area/medical/chemistry)
"bxz" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{name = "Cargo Bay"; req_access = list(31)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/quartermaster/storage)
"bxA" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
@@ -3931,8 +3931,8 @@
"bxE" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay)
"bxF" = (/turf/simulated/wall,/area/medical/medbay3)
"bxG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/medbay3)
-"bxH" = (/obj/structure/table,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
-"bxI" = (/obj/structure/table,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
+"bxH" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room"; req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/rnd/mixing)
+"bxI" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access"; req_access = list(7)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bxJ" = (/obj/machinery/door/firedoor,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay2)
"bxK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-white_ex"; icon_state = "white_ex"; dir = 2},/area/medical/medbay2)
"bxL" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
@@ -3950,15 +3950,15 @@
"bxX" = (/obj/structure/extinguisher_cabinet{pixel_x = -27},/obj/machinery/light{dir = 8},/turf/simulated/floor/bluegrid,/area/assembly/chargebay)
"bxY" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/assembly/chargebay)
"bxZ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/assembly/chargebay)
-"bya" = (/obj/structure/table,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor,/area/assembly/robotics)
-"byb" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/machinery/newscaster{pixel_x = 26; pixel_y = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bya" = (/obj/structure/table/standard,/obj/item/device/assembly/igniter,/turf/simulated/floor/engine,/area/rnd/misc_lab)
+"byb" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoB_window_tint"; pixel_y = 26},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_b)
"byc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/space)
"byd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
"bye" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
-"byf" = (/obj/item/weapon/folder/white,/obj/structure/table,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"byg" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"byh" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
-"byi" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"byf" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(7)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"byg" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoA_window_tint"; pixel_y = 26},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_a)
+"byh" = (/obj/structure/table/standard,/obj/item/weapon/folder/white{pixel_y = 10},/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/stamp/cmo,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/crew_quarters/heads/cmo)
+"byi" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"byj" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor,/area/quartermaster/office)
"byk" = (/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating,/area/storage/emergency)
"byl" = (/obj/structure/shuttle/engine/propulsion/burst{dir = 4},/turf/space,/area/shuttle/research/station)
@@ -3990,7 +3990,7 @@
"byL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload)
"byM" = (/obj/machinery/door/window/eastright{name = "Medical Reception"; req_access = list(5)},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/medical/reception)
"byN" = (/turf/simulated/wall/r_wall,/area/teleporter)
-"byO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Examination Room"; req_access = list(5)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
+"byO" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay3)
"byP" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/hallway/primary/central_two)
"byQ" = (/obj/machinery/door/airlock/medical{name = "Morgue"; req_access = list(6,5)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/medical/medbay2)
"byR" = (/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
@@ -3999,12 +3999,12 @@
"byU" = (/obj/machinery/door/airlock/research{id_tag = "researchdoor"; name = "Research Division Access"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"byV" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay)
"byW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/medbay)
-"byX" = (/obj/structure/table,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay3)
+"byX" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"byY" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay3)
"byZ" = (/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay3)
"bza" = (/obj/structure/closet/secure_closet/medical3,/obj/machinery/alarm{pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{tag = "icon-whiteblue (NORTHEAST)"; icon_state = "whiteblue"; dir = 5},/area/medical/medbay3)
"bzb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay2)
-"bzc" = (/obj/structure/table/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/turf/simulated/floor,/area/quartermaster/office)
+"bzc" = (/obj/machinery/button/remote/blast_door{id = "medbayrecquar"; name = "Medbay Entrance Lockdown Shutters Control"; pixel_x = 6; pixel_y = 8; req_access = list(5)},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"; pixel_x = -5},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/medical/reception)
"bzd" = (/turf/simulated/floor{dir = 1; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/medbay2)
"bze" = (/obj/machinery/door/firedoor,/obj/structure/sign/examroom{pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bzf" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
@@ -4019,15 +4019,15 @@
"bzo" = (/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "whitebluecorner"; tag = "icon-whitebluecorner"},/area/medical/patient_wing)
"bzp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
"bzq" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{tag = "icon-whitebluecorner (WEST)"; icon_state = "whitebluecorner"; dir = 8},/area/medical/patient_wing)
-"bzr" = (/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "hop_office_desk"; name = "HoP Office Privacy Shutters"; opacity = 0},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Reception Window"},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 4; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access = list(57)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bzr" = (/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 1; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Reception Emergency Phone"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/medical/reception)
"bzs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/assembly/chargebay)
"bzt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/assembly/chargebay)
"bzu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/assembly/chargebay)
"bzv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/assembly/chargebay)
"bzw" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green,/turf/simulated/floor,/area/assembly/chargebay)
-"bzx" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/assembly/robotics)
-"bzy" = (/obj/structure/table,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/item/device/mmi/digital/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/assembly/robotics)
-"bzz" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bzx" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
+"bzy" = (/obj/machinery/computer/med_data/laptop,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/medical/exam_room)
+"bzz" = (/obj/machinery/door/airlock/glass_medical{name = "Medical Hardsuits"; req_one_access = list(5)},/turf/simulated/floor{icon_state = "dark"},/area/ai_monitored/storage/eva)
"bzA" = (/turf/simulated/wall,/area/rnd/research)
"bzB" = (/obj/machinery/light{dir = 8},/obj/machinery/computer/guestpass{pixel_x = -28},/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/rnd/research)
"bzC" = (/obj/effect/landmark{name = "lightsout"},/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/rnd/research)
@@ -4064,17 +4064,17 @@
"bAh" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_server_room)
"bAi" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 1; icon_state = "left"; name = "Shower"},/obj/machinery/shower{icon_state = "shower"; dir = 4},/obj/item/weapon/soap/deluxe,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/captain)
"bAj" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_cyborg_station)
-"bAk" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/teleporter)
-"bAl" = (/obj/machinery/light{dir = 1},/obj/structure/table,/obj/item/weapon/hand_tele,/turf/simulated/floor,/area/teleporter)
+"bAk" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/assembly/robotics)
+"bAl" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
"bAm" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/closet/crate,/obj/item/weapon/crowbar,/turf/simulated/floor,/area/teleporter)
"bAn" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/teleporter)
"bAo" = (/obj/machinery/light{dir = 1},/obj/structure/closet/secure_closet/chemical,/obj/item/weapon/storage/box/pillbottles,/obj/item/device/radio/headset/headset_med,/obj/machinery/camera/network/medbay{c_tag = "Medbay Drug Storage"},/turf/simulated/floor{dir = 1; icon_state = "whiteyellow"},/area/medical/chemistry)
"bAp" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/teleporter)
"bAq" = (/obj/machinery/light_switch{pixel_x = 27},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/teleporter)
"bAr" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/hallway/primary/central_two)
-"bAs" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 5; pixel_y = 5},/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/random/firstaid,/turf/simulated/floor{dir = 8; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
+"bAs" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bAt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerPort"; req_access = list(5)},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay)
-"bAu" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medbay Reception"; req_access = list(5)},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay3)
+"bAu" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 5; pixel_y = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/random/firstaid,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bAv" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bAw" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/chemistry)
"bAx" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/multi_tile/glass{id_tag = "MedbayFoyerStar"; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/medical/medbay2)
@@ -4106,7 +4106,7 @@
"bAX" = (/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerPort"; name = "Medbay Doors Control"; pixel_x = -24; pixel_y = 26},/obj/machinery/computer/guestpass{pixel_x = -28},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay)
"bAY" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/assembly/chargebay)
"bAZ" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "bot"},/area/assembly/chargebay)
-"bBa" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = -1; pixel_y = -2},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/assembly/robotics)
+"bBa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(66)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bBb" = (/obj/machinery/optable{name = "Robotics Operating Table"},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bBc" = (/obj/machinery/computer/operating{name = "Robotics Operating Computer"},/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bBd" = (/obj/machinery/light_switch{pixel_x = -23; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/assembly/robotics)
@@ -4114,21 +4114,21 @@
"bBf" = (/obj/structure/closet/wardrobe/robotics_black,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bBg" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/rnd/research)
"bBh" = (/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
-"bBi" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bBj" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research)
-"bBk" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/noticeboard{pixel_y = 28},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bBl" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bBm" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitepurplecorner"},/area/rnd/research)
-"bBn" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/research)
+"bBi" = (/obj/structure/noticeboard{pixel_y = 28},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bBj" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitepurplecorner"},/area/rnd/research)
+"bBk" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/research)
+"bBl" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
+"bBm" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bBn" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bBo" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitepurplecorner"},/area/rnd/research)
"bBp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
"bBq" = (/obj/machinery/button/remote/airlock{desc = "A remote control switch for the medbay foyer."; id = "MedbayFoyerStar"; name = "Medbay Doors Control"; pixel_x = 24; pixel_y = 26},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay2)
"bBr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
"bBs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/engineering{name = "Medbay Substation"; req_one_access = list(11,24,5)},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
-"bBt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_access = list(29)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor,/area/assembly/chargebay)
+"bBt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medicine Storage"; req_access = newlist(); req_one_access = list(33,66)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bBu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_storage)
"bBv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
-"bBw" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_research{name = "Research and Development"; req_access = list(7)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bBw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bBx" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_one_access = list(12,47)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/storage/emergency)
"bBy" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/rnd/docking)
"bBz" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/research/station)
@@ -4136,16 +4136,16 @@
"bBB" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/research/station)
"bBC" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
"bBD" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/storage)
-"bBE" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/item/stack/sheet/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/sheet/metal{amount = 50},/obj/item/device/multitool,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Office"; dir = 4},/turf/simulated/floor,/area/quartermaster/office)
+"bBE" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(66)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bBF" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #2"},/obj/machinery/bot/mulebot{home_destination = "QM #2"; suffix = "#2"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
-"bBG" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/turf/simulated/floor,/area/quartermaster/office)
+"bBG" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/maintenance{name = "Medbay Substation"; req_access = list(5); req_one_access = newlist()},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
"bBH" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/quartermaster/office)
"bBI" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
"bBJ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/office)
"bBK" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable/cyan{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room)
"bBL" = (/obj/structure/closet/secure_closet/hop2,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bBM" = (/turf/simulated/floor,/area/crew_quarters/heads/hop)
-"bBN" = (/obj/structure/table,/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/megaphone,/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bBN" = (/obj/structure/table/standard,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "research_shuttle"; pixel_x = -8; pixel_y = -25; req_one_access = list(13,65); tag_door = "research_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bBO" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 32; pixel_y = 0},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bBP" = (/obj/machinery/message_server,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
"bBQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/cyan{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/cyan{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_upload_foyer)
@@ -4160,19 +4160,19 @@
"bBZ" = (/obj/item/device/radio/beacon,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/teleporter)
"bCa" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/teleporter)
"bCb" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/teleporter)
-"bCc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medicine Storage"; req_access = list(5)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bCd" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
+"bCc" = (/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 1},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/teleporter)
+"bCd" = (/obj/machinery/light{dir = 1},/obj/structure/table/standard,/obj/item/weapon/hand_tele,/turf/simulated/floor,/area/teleporter)
"bCe" = (/turf/simulated/floor{dir = 2; icon_state = "whiteyellow"},/area/medical/chemistry)
"bCf" = (/obj/structure/closet/wardrobe/chemistry_white,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{dir = 2; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
"bCg" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bCh" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay)
"bCi" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay3)
"bCj" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
-"bCk" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay3)
+"bCk" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/westleft{name = "Cargo Desk"; req_access = list(50)},/obj/structure/noticeboard{pixel_y = 27},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/office)
"bCl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2)
"bCm" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"bCn" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(5)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"bCo" = (/obj/machinery/door/airlock{name = "Medbay Substation"; req_access = list(5)},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/substation/medical)
+"bCn" = (/obj/structure/table/standard,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/reagent_containers/glass/bottle/stoxin{pixel_x = -6; pixel_y = 10},/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/random/medical,/turf/simulated/floor{dir = 8; icon_state = "whiteyellow"},/area/medical/chemistry)
+"bCo" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/item/device/flashlight/pen,/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{tag = "icon-whiteblue (NORTHWEST)"; icon_state = "whiteblue"; dir = 9},/area/medical/medbay3)
"bCp" = (/turf/simulated/wall,/area/medical/genetics)
"bCq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bCr" = (/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access = list(47)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
@@ -4195,19 +4195,19 @@
"bCI" = (/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
"bCJ" = (/turf/simulated/wall,/area/rnd/docking)
"bCK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/rnd/docking)
-"bCL" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "research_shuttle"; pixel_x = -8; pixel_y = -25; req_one_access = list(13,65); tag_door = "research_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
+"bCL" = (/obj/structure/table/standard,/obj/item/weapon/crowbar,/obj/item/device/radio/headset/headset_sci{pixel_x = -3},/obj/item/device/multitool{pixel_x = 3},/obj/item/device/multitool{pixel_x = 3},/obj/item/clothing/glasses/welding,/obj/item/clothing/glasses/welding,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bCM" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"bCN" = (/obj/machinery/conveyor_switch/oneway{convdir = -1; id = "QMLoad"},/turf/simulated/floor,/area/quartermaster/storage)
"bCO" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/quartermaster/storage)
"bCP" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #3"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
-"bCQ" = (/obj/structure/table,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/quartermaster/office)
+"bCQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_one_access = list(29)},/turf/simulated/floor,/area/assembly/chargebay)
"bCR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/quartermaster/office)
"bCS" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bCT" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "bluecorner"},/area/hallway/primary/central_three)
"bCU" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "bot"},/area/hallway/primary/central_three)
"bCV" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/account_database,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads/hop)
"bCW" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
-"bCX" = (/obj/structure/table,/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bCX" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/item/weapon/hemostat,/obj/item/weapon/retractor,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/assembly/robotics)
"bCY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "cargo_bay"; name = "cargo bay hatch controller"; pixel_x = -30; pixel_y = 0; req_one_access = list(13,31); tag_door = "cargo_bay_door"},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Recieving Dock"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/storage)
"bCZ" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/airlock/glass_mining{id_tag = "cargodoor"; name = "Cargo Office"; req_access = list(50)},/turf/simulated/floor,/area/quartermaster/office)
"bDa" = (/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
@@ -4237,14 +4237,14 @@
"bDy" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/medbay)
"bDz" = (/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bDA" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/medical/medbay)
-"bDB" = (/obj/structure/table,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay3)
+"bDB" = (/obj/structure/table/standard,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/item/device/flash/synthetic,/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/obj/item/device/mmi/digital/posibrain,/obj/item/device/robotanalyzer,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/assembly/robotics)
"bDC" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "acute1"; name = "EMT Storage Privacy Shutters"; opacity = 0},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper)
-"bDD" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3)
+"bDD" = (/obj/structure/table/standard,/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 1; icon_state = "whiteyellowcorner"},/area/medical/chemistry)
"bDE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2)
"bDF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bDG" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/cryo)
"bDH" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/cryo)
-"bDI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(5)},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
+"bDI" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medbay Reception"; req_access = list(66)},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/medbay3)
"bDJ" = (/turf/simulated/wall,/area/medical/cryo)
"bDK" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Genetics Laboratory"; req_access = list(9)},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bDL" = (/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
@@ -4252,7 +4252,7 @@
"bDN" = (/obj/item/apc_frame,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/medical/genetics)
"bDO" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/medical/genetics)
"bDP" = (/obj/machinery/door/firedoor,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "acute1"; name = "EMT Storage Privacy Shutters"; opacity = 0},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/floor{tag = "icon-whitebluefull"; icon_state = "whitebluefull"},/area/medical/sleeper)
-"bDQ" = (/obj/item/weapon/table_parts,/turf/simulated/floor/plating,/area/medical/genetics)
+"bDQ" = (/obj/structure/table/standard,/obj/item/device/mmi,/obj/item/device/mmi,/obj/item/device/mmi,/turf/simulated/floor,/area/assembly/robotics)
"bDR" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/medical/genetics)
"bDS" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bDT" = (/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
@@ -4268,8 +4268,8 @@
"bEd" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/rnd/research)
"bEe" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/rnd/research)
"bEf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/rnd/research)
-"bEg" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
-"bEh" = (/obj/machinery/hologram/holopad,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bEg" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access = list(16)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room)
+"bEh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station"; req_access = list(16)},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station)
"bEi" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/airlock/glass_research{name = "Robotics Lab"; req_access = list(29,47)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bEj" = (/obj/machinery/camera/network/research{c_tag = "Research Division North"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bEk" = (/obj/machinery/door/window/eastright{base_state = "left"; dir = 8; icon_state = "left"; name = "Research Division Delivery"; req_access = list(47)},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "delivery"},/area/rnd/research)
@@ -4279,7 +4279,7 @@
"bEo" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
"bEp" = (/obj/machinery/door/airlock/research{name = "Research Shuttle Dock"; req_access = list(65)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
"bEq" = (/turf/simulated/floor/mech_bay_recharge_floor,/area/medical/sleeper)
-"bEr" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable,/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
+"bEr" = (/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable,/obj/machinery/power/apc/critical{name = "south bump"; pixel_y = -24},/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
"bEs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
"bEt" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/sign/poster{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/medical/sleeper)
"bEu" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/rnd/docking)
@@ -4293,7 +4293,7 @@
"bEC" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -28},/obj/machinery/light,/turf/simulated/floor,/area/quartermaster/office)
"bED" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/quartermaster/storage)
"bEE" = (/obj/machinery/navbeacon{codes_txt = "delivery;dir=8"; freq = 1400; location = "QM #4"},/turf/simulated/floor{icon_state = "bot"},/area/quartermaster/storage)
-"bEF" = (/obj/structure/table,/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/turf/simulated/floor,/area/quartermaster/office)
+"bEF" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/weapon/storage/firstaid/regular{empty = 1; name = "First-Aid (empty)"},/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/item/device/healthanalyzer,/obj/machinery/newscaster{pixel_x = 26; pixel_y = 1},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bEG" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/quartermaster/office)
"bEH" = (/obj/machinery/light,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/computer/guestpass{pixel_y = -28},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 2; icon_state = "browncorner"},/area/quartermaster/office)
"bEI" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/office)
@@ -4306,16 +4306,16 @@
"bEP" = (/turf/simulated/floor{dir = 4; icon_state = "loadingarea"},/area/hallway/primary/central_three)
"bEQ" = (/obj/structure/filingcabinet/chestdrawer,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/crew_quarters/heads/hop)
"bER" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room)
-"bES" = (/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bES" = (/obj/item/weapon/folder/white,/obj/structure/table/standard,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bET" = (/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bEU" = (/turf/simulated/wall/r_wall,/area/turret_protected/ai_upload_foyer)
"bEV" = (/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station)
"bEW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station)
"bEX" = (/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor{icon_state = "vault"; dir = 1},/area/turret_protected/ai_cyborg_station)
-"bEY" = (/obj/structure/table/reinforced,/obj/machinery/door/window/eastright{dir = 1; name = "Emergency Kit"; req_access = list(5)},/obj/machinery/door/firedoor,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/bodybag/cryobag,/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/turf/simulated/floor{dir = 1; icon_state = "whiteyellow"},/area/medical/sleeper)
-"bEZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medicine Storage"; req_access = list(5)},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
+"bEY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/noticeboard{pixel_y = 27},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "hop_office_desk"; name = "HoP Office Privacy Shutters"; opacity = 0},/obj/machinery/door/window/northleft{dir = 8; icon_state = "left"; name = "Reception Window"},/obj/machinery/door/window/brigdoor{base_state = "rightsecure"; dir = 4; icon_state = "rightsecure"; name = "Head of Personnel's Desk"; req_access = list(57)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
+"bEZ" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bFa" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/accessory/stethoscope,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -22},/obj/machinery/camera/network/medbay{c_tag = "Medbay Equipment Storage"; dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay3)
-"bFb" = (/obj/structure/table,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Cryogenics"},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/cryo)
+"bFb" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bFc" = (/obj/machinery/recharge_station,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
"bFd" = (/obj/machinery/computer/teleporter,/turf/simulated/floor/plating,/area/teleporter)
"bFe" = (/obj/machinery/teleport/station,/turf/simulated/floor/plating,/area/teleporter)
@@ -4338,7 +4338,7 @@
"bFv" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/cryo)
"bFw" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
"bFx" = (/obj/machinery/power/apc/high{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
-"bFy" = (/obj/structure/table,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
+"bFy" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module{pixel_x = 2; pixel_y = 3},/obj/item/weapon/stock_parts/scanning_module,/obj/machinery/light_switch{pixel_x = 27},/obj/structure/reagent_dispensers/acid{density = 0; pixel_y = -32},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bFz" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bFA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics)
"bFB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/medical/genetics)
@@ -4356,11 +4356,11 @@
"bFN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bFO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bFP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bFQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bFQ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bFR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
"bFS" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bFT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research)
-"bFU" = (/obj/structure/table,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/paper/monitorkey,/obj/item/device/megaphone,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bFU" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"bFV" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/turf/simulated/floor/plating,/area/rnd/research)
"bFW" = (/obj/machinery/computer/aifixer,/obj/machinery/requests_console{announcementConsole = 1; department = "Research Director's Desk"; departmentType = 5; name = "Research Director RC"; pixel_x = -2; pixel_y = 30},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bFX" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{dir = 8; icon_state = "warnwhite"},/area/crew_quarters/heads/hor)
@@ -4423,12 +4423,12 @@
"bHc" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics)
"bHd" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bHe" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/medical/genetics)
-"bHf" = (/obj/item/light_fixture_frame,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
+"bHf" = (/obj/structure/closet/wardrobe/grey,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"bHg" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bHh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast/shutters{density = 0; dir = 0; icon_state = "shutter0"; id = "staffroom"; name = "Staff Room Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/cryo)
"bHi" = (/obj/machinery/camera/network/command{c_tag = "AI - Messaging Server"; dir = 1},/obj/machinery/blackbox_recorder,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_server_room)
"bHj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/light_switch{pixel_x = 24; pixel_y = -8},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_server_room)
-"bHk" = (/obj/machinery/vending/coffee,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bHk" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research)
"bHl" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/command{c_tag = "AI - Cyborg Station"; dir = 1},/turf/simulated/floor/bluegrid,/area/turret_protected/ai_cyborg_station)
"bHm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light_switch{pixel_x = -24; pixel_y = -8},/turf/simulated/floor{icon_state = "dark"},/area/turret_protected/ai_cyborg_station)
"bHn" = (/obj/machinery/computer/robotics,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
@@ -4439,8 +4439,8 @@
"bHs" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor{icon_state = "white"},/area/rnd/docking)
"bHt" = (/obj/machinery/computer/shuttle_control/research,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
"bHu" = (/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 32},/turf/space,/area/space)
-"bHv" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock)
-"bHw" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/quartermaster/miningdock)
+"bHv" = (/obj/structure/table/standard,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/item/weapon/circuitboard/teleporter,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bHw" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc/critical{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/quartermaster/miningdock)
"bHx" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock)
"bHy" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/obj/item/weapon/storage/belt/utility,/turf/simulated/floor,/area/quartermaster/miningdock)
"bHz" = (/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/quartermaster/qm)
@@ -4458,11 +4458,11 @@
"bHL" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three)
"bHM" = (/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "medbayquar"; name = "Medbay Emergency Quarantine Shutters"; opacity = 0},/obj/machinery/door/firedoor,/turf/simulated/floor{dir = 4; icon_state = "loadingarea"; tag = "loading"},/area/medical/sleeper)
"bHN" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/medbay{c_tag = "Medbay Emergency Entrance"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bHO" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(5)},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
+"bHO" = (/obj/structure/table,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bHP" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/research{name = "Genetics Research"; req_access = list(9)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics)
"bHQ" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/research{name = "Research Division Access"; req_access = list(47)},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bHR" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/rnd/research)
-"bHS" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bHS" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(5,12,47)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
"bHT" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/hallway/primary/central_three)
"bHU" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
"bHV" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "research_dock_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = -25; req_one_access = list(13,65)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/rnd/docking)
@@ -4487,11 +4487,11 @@
"bIo" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "research_dock_pump"},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/docking)
"bIp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
"bIq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics)
-"bIr" = (/obj/item/light_fixture_frame,/turf/simulated/floor/plating,/area/medical/genetics)
+"bIr" = (/obj/structure/closet/wardrobe/black,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/arrival/station)
"bIs" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/medical/genetics)
"bIt" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
-"bIu" = (/obj/item/weapon/table_parts,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
-"bIv" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/airlock/mining{id_tag = "cargodoor"; name = "Mining Dock"; req_access = list(48)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock)
+"bIu" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock)
+"bIv" = (/obj/structure/table/standard,/obj/machinery/computer/skills{icon_state = "medlaptop"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bIw" = (/turf/simulated/wall/r_wall,/area/maintenance/research_port)
"bIx" = (/turf/simulated/wall/r_wall,/area/server)
"bIy" = (/obj/machinery/r_n_d/server/robotics,/turf/simulated/floor/bluegrid{name = "Server Base"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server)
@@ -4499,7 +4499,7 @@
"bIA" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - Southwest"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/hallway/primary/central_three)
"bIB" = (/obj/machinery/door/airlock/command{id_tag = "hopdoor"; name = "Head of Personnel"; req_access = list(57)},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bIC" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "dark"},/area/server)
-"bID" = (/obj/machinery/door/airlock/highsecurity{name = "Messaging Server"; req_access = list(30)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_three)
+"bID" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(66)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
"bIE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "staffroom"; name = "Staff Room Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bIF" = (/turf/simulated/wall/r_wall,/area/rnd/storage)
"bIG" = (/obj/machinery/computer/area_atmos,/obj/machinery/light_switch{pixel_y = 28},/turf/simulated/floor{icon_state = "bot"},/area/rnd/storage)
@@ -4508,22 +4508,22 @@
"bIJ" = (/turf/simulated/wall,/area/rnd/storage)
"bIK" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
"bIL" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research)
-"bIM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_three)
+"bIM" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bIN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bIO" = (/obj/machinery/computer/mecha,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bIP" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bIQ" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bIR" = (/obj/structure/table,/obj/item/device/taperecorder{pixel_x = -3},/obj/item/device/paicard{pixel_x = 4},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/obj/item/weapon/circuitboard/teleporter,/obj/item/weapon/circuitboard/aicore{pixel_x = -2; pixel_y = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bIR" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bIS" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
-"bIT" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/miningdock)
-"bIU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/hallway/primary/central_three)
+"bIT" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/door/airlock/mining{id_tag = "cargodoor"; name = "Mining Dock"; req_access = list(50)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock)
+"bIU" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/command{name = "Research Director"; req_access = list(30)},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/rnd/research)
"bIV" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock)
"bIW" = (/obj/structure/table/rack{dir = 1},/obj/item/weapon/pickaxe{pixel_x = 5},/obj/item/weapon/shovel{pixel_x = -5},/turf/simulated/floor,/area/quartermaster/miningdock)
-"bIX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/hallway/primary/central_three)
-"bIY" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/qm)
-"bIZ" = (/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/turf/simulated/floor,/area/quartermaster/qm)
-"bJa" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/turf/simulated/floor,/area/quartermaster/qm)
-"bJb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/highsecurity{name = "Cyborg Station"; req_access = list(16)},/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_three)
+"bIX" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop)
+"bIY" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags{pixel_x = 1; pixel_y = 2},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/genetics_cloning)
+"bIZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medical Equipment"; req_access = list(66)},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay3)
+"bJa" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bJb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bJc" = (/obj/machinery/navbeacon{codes_txt = "patrol;next_patrol=AIW"; location = "QM"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/hallway/primary/central_three)
"bJd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/hallway/primary/central_three)
"bJe" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three)
@@ -4539,7 +4539,7 @@
"bJo" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_three)
"bJp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_three)
"bJq" = (/obj/machinery/door/airlock/multi_tile/glass{autoclose = 1; dir = 2; req_access = list(5)},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/medical/sleeper)
-"bJr" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{id_tag = "GeneticsDoor"; name = "Cloning Laboratory"; req_access = list(5)},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/cryo)
+"bJr" = (/obj/structure/table/standard,/obj/item/weapon/folder/white,/obj/item/weapon/stamp/rd{pixel_x = 3; pixel_y = -2},/obj/item/weapon/paper/monitorkey,/obj/item/device/megaphone,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/pen,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bJs" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_two)
"bJt" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_two)
"bJu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_two)
@@ -4570,25 +4570,25 @@
"bJT" = (/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server)
"bJU" = (/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 500; oxygen = 0; temperature = 80},/area/server)
"bJV" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/machinery/door/airlock/command{name = "Server Room"; req_access = list(30)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "dark"},/area/rnd/research)
-"bJW" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor{icon_state = "dark"},/area/server)
+"bJW" = (/obj/machinery/power/apc/high{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/camera/network/research{c_tag = "Research - Server Room"},/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor{icon_state = "dark"},/area/server)
"bJX" = (/obj/item/weapon/stool{pixel_y = 8},/obj/effect/landmark/start{name = "Paramedic"},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bJY" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor{icon_state = "dark"},/area/server)
"bJZ" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/rnd/storage)
"bKa" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage)
"bKb" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/rnd/storage)
"bKc" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
-"bKd" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bKd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bKe" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research)
"bKf" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/research{name = "Toxins Storage"; req_access = list(8)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/rnd/research)
-"bKg" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bKh" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bKi" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop)
-"bKj" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bKg" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bKh" = (/obj/machinery/disposal,/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bKi" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bKj" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/plating,/area/rnd/mixing)
"bKk" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bKl" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
"bKm" = (/obj/structure/closet/crate,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/item/weapon/storage/backpack,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
"bKn" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
-"bKo" = (/obj/structure/table,/obj/machinery/computer/skills{icon_state = "medlaptop"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bKo" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/reinforced,/obj/machinery/camera/network/security{c_tag = "EVA Northeast"; dir = 8},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/rods{amount = 50},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
"bKp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"bKq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"bKr" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
@@ -4641,9 +4641,9 @@
"bLm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "cmooffice"; name = "CMO Office Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay4)
"bLn" = (/obj/machinery/ai_status_display{pixel_y = 32},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central_three)
"bLo" = (/turf/simulated/wall,/area/medical/genetics_cloning)
-"bLp" = (/obj/structure/computerframe,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
+"bLp" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/yellow,/obj/item/device/eftpos{eftpos_name = "Cargo Bay EFTPOS scanner"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/office)
"bLq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/medical/genetics)
-"bLr" = (/obj/item/weapon/shard,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
+"bLr" = (/obj/item/weapon/pen,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/device/megaphone,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bLs" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/genetics)
"bLt" = (/obj/structure/window/reinforced,/obj/structure/computerframe,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bLu" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
@@ -4657,12 +4657,12 @@
"bLC" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor{icon_state = "dark"},/area/server)
"bLD" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 28},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay)
"bLE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage)
-"bLF" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bLF" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bLG" = (/obj/machinery/light_switch{pixel_y = -23},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bLH" = (/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "Research Director's Office"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hop)
+"bLH" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/belt/utility,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/office)
"bLI" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "warningcorner"; dir = 8},/area/hallway/primary/central_three)
"bLJ" = (/obj/structure/closet/secure_closet/RD,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bLK" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
+"bLK" = (/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
"bLL" = (/obj/structure/window/reinforced,/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bLM" = (/obj/effect/decal/cleanable/generic,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
"bLN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
@@ -4674,7 +4674,7 @@
"bLT" = (/turf/simulated/floor/airless,/area/rnd/test_area)
"bLU" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/airless,/area/rnd/test_area)
"bLV" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/mining/station)
-"bLW" = (/obj/structure/table,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bLW" = (/obj/structure/table/standard,/obj/item/clothing/suit/straight_jacket,/obj/item/clothing/mask/muzzle,/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHWEST)"; icon_state = "whiteblue"; dir = 10},/area/medical/medbay3)
"bLX" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bLY" = (/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Central - South Southeast"},/obj/structure/sign/securearea{pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/hallway/primary/central_three)
"bLZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
@@ -4693,7 +4693,7 @@
"bMm" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/hallway/primary/central_three)
"bMn" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three)
"bMo" = (/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/junction,/turf/simulated/floor,/area/hallway/primary/central_three)
-"bMp" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(9,12,47)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"bMp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Medicine Storage"; req_access = newlist(); req_one_access = list(33,66)},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bMq" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server)
"bMr" = (/obj/machinery/vending/cigarette,/turf/simulated/floor{icon_state = "dark"},/area/hallway/primary/central_two)
"bMs" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
@@ -4702,32 +4702,32 @@
"bMv" = (/obj/structure/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bMw" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Medical Doctor"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bMx" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Medical Doctor"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
-"bMy" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/table,/obj/machinery/photocopier/faxmachine{department = "CMO's Office"},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo)
+"bMy" = (/obj/structure/table/standard,/obj/machinery/light,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{tag = "icon-whiteblue (SOUTHEAST)"; icon_state = "whiteblue"; dir = 6},/area/medical/medbay3)
"bMz" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bMA" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bMB" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/CMO,/obj/item/clothing/mask/gas,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/crew_quarters/heads/cmo)
-"bMC" = (/obj/machinery/power/apc/high{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/camera/network/research{c_tag = "Research - Server Room"},/turf/simulated/floor{icon_state = "dark"},/area/server)
+"bMC" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor{icon_state = "dark"},/area/server)
"bMD" = (/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bME" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/medical/medbay2)
"bMF" = (/obj/structure/table/rack,/obj/item/weapon/rig/hazmat/equipped,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
"bMG" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bMH" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/rnd/research)
-"bMI" = (/obj/structure/noticeboard{pixel_y = 28},/obj/structure/table/woodentable,/obj/item/weapon/book/manual/medical_diagnostics_manual{pixel_y = 7},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 4; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Break Room Emergency Phone"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
+"bMI" = (/obj/item/weapon/folder/blue,/obj/item/weapon/stamp/hop,/obj/item/device/eftpos{eftpos_name = "HoP EFTPOS scanner"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bMJ" = (/obj/machinery/light{dir = 1},/obj/structure/bookcase/manuals/medical,/obj/item/weapon/book/manual/stasis,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bMK" = (/turf/simulated/wall,/area/crew_quarters/medbreak)
"bML" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
-"bMM" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
+"bMM" = (/obj/machinery/door/window/eastright{dir = 1; name = "Emergency Kit"; req_access = list(5)},/obj/machinery/door/firedoor,/obj/item/weapon/storage/toolbox/emergency,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/bodybag/cryobag,/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 1; icon_state = "whiteyellow"},/area/medical/sleeper)
"bMN" = (/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
"bMO" = (/turf/simulated/wall/r_wall,/area/rnd/misc_lab)
"bMP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/rnd/docking)
"bMQ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/mob/living/simple_animal/mouse/white,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage)
"bMR" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/rnd/storage)
"bMS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/shuttle/plating,/area/rnd/docking)
-"bMT" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bMT" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bMU" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "hazard door north"},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research)
"bMV" = (/turf/simulated/wall/r_wall,/area/rnd/mixing)
"bMW" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/plating,/area/rnd/mixing)
-"bMX" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/plating,/area/rnd/mixing)
+"bMX" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(7)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bMY" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber/huge,/turf/simulated/floor/plating,/area/rnd/mixing)
"bMZ" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/space,/area/space)
"bNa" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
@@ -4737,7 +4737,7 @@
"bNe" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"bNf" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/civilian_west{c_tag = "Cargo - Quartermaster's Office"; dir = 8},/turf/simulated/floor,/area/quartermaster/qm)
"bNg" = (/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
-"bNh" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/obj/structure/bed,/obj/item/weapon/bedsheet/blue,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
+"bNh" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = 0},/obj/structure/bed/padded,/obj/item/weapon/bedsheet/blue,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bNi" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bNj" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "mining_dock_pump"},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/quartermaster/miningdock)
"bNk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central_three)
@@ -4748,14 +4748,14 @@
"bNp" = (/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/quartermaster/miningdock)
"bNq" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/primary/central_three)
"bNr" = (/obj/structure/closet/secure_closet/quartermaster,/turf/simulated/floor,/area/quartermaster/qm)
-"bNs" = (/obj/structure/table,/obj/item/weapon/coin/silver{pixel_x = -3; pixel_y = 3},/obj/item/weapon/coin/silver,/obj/item/device/eftpos{eftpos_name = "Quartermaster EFTPOS scanner"},/turf/simulated/floor,/area/quartermaster/qm)
-"bNt" = (/obj/structure/table,/obj/item/weapon/cartridge/quartermaster{pixel_x = 6; pixel_y = 5},/obj/item/weapon/cartridge/quartermaster,/obj/item/weapon/cartridge/quartermaster{pixel_x = -4; pixel_y = 7},/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor,/area/quartermaster/qm)
+"bNs" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/item/weapon/wrench,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Cryogenics"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/cryo)
+"bNt" = (/obj/structure/table,/turf/simulated/floor/plating,/area/medical/genetics)
"bNu" = (/obj/structure/closet/crate,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/cargo)
"bNv" = (/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/maintenance/cargo)
"bNw" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo)
"bNx" = (/turf/simulated/wall,/area/maintenance/cargo)
"bNy" = (/turf/simulated/wall,/area/storage/tech)
-"bNz" = (/obj/structure/table,/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flashlight{pixel_x = 1; pixel_y = 5},/obj/item/device/flash,/obj/item/device/flash,/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
+"bNz" = (/obj/machinery/newscaster{pixel_x = -27; pixel_y = 1},/obj/item/weapon/tape_roll,/obj/item/weapon/storage/firstaid/regular{pixel_x = 6; pixel_y = -5},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/office)
"bNA" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/turf/simulated/floor/plating,/area/storage/tech)
"bNB" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor,/area/hallway/primary/central_three)
"bNC" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/turf/simulated/floor/plating,/area/storage/tech)
@@ -4781,10 +4781,10 @@
"bNW" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "misclab"; name = "Test Chamber Blast Doors"; opacity = 0},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bNX" = (/obj/item/weapon/stool,/obj/effect/landmark/start{name = "Janitor"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/janitor)
"bNY" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/sleeper,/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/sleeper)
-"bNZ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window/westleft{dir = 8; name = "Server Room"; opacity = 1; req_access = list(30)},/obj/machinery/door/window/westleft{dir = 4; name = "Server Room"; opacity = 1; req_access = list(30)},/turf/simulated/floor{icon_state = "dark"},/area/server)
+"bNZ" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/window/westleft{dir = 8; name = "Server Room"; opacity = 1; req_access = list(30)},/obj/machinery/door/window/eastleft{name = "Server Room"},/turf/simulated/floor{icon_state = "dark"},/area/server)
"bOa" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
-"bOb" = (/obj/structure/bed/chair/office/light,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{icon_state = "dark"},/area/server)
-"bOc" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/command{name = "Research Director"; req_access = list(30)},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/rnd/research)
+"bOb" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/machinery/meter,/turf/simulated/floor{icon_state = "dark"},/area/server)
+"bOc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bOd" = (/obj/structure/table/rack,/obj/item/weapon/extinguisher,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/mask/gas,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
"bOe" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bOf" = (/obj/machinery/computer/security/mining,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Mining Dock"; dir = 4},/turf/simulated/floor,/area/quartermaster/miningdock)
@@ -4805,19 +4805,19 @@
"bOu" = (/obj/item/device/radio/intercom{pixel_y = 25},/turf/simulated/floor/engine,/area/rnd/misc_lab)
"bOv" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/engine,/area/rnd/misc_lab)
"bOw" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/light{dir = 1},/turf/simulated/floor/engine,/area/rnd/misc_lab)
-"bOx" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/engine,/area/rnd/misc_lab)
+"bOx" = (/obj/machinery/photocopier/faxmachine{department = "Head of Personnel's Office"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bOy" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/rnd/storage)
"bOz" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage)
"bOA" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/rnd/storage)
"bOB" = (/obj/machinery/light{dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
-"bOC" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bOC" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Waste to Scrubbers"},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bOD" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass{name = "Central Access"},/turf/simulated/floor,/area/hallway/primary/central_three)
"bOE" = (/obj/structure/table/rack,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/vending/wallmed1{pixel_x = -32; pixel_y = 0},/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bOF" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bOG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 1; name = "EMT Storage"; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay)
"bOH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/sign/securearea{desc = "A warning sign which reads 'SERVER ROOM'."; name = "SERVER ROOM"; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor/plating,/area/server)
-"bOI" = (/obj/structure/table,/obj/item/weapon/cartridge/signal/science,/obj/item/weapon/cartridge/signal/science{pixel_x = -4; pixel_y = 2},/obj/item/weapon/cartridge/signal/science{pixel_x = 4; pixel_y = 6},/obj/item/clothing/glasses/welding/superior,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/camera/network/research{c_tag = "Research - RD's Office"; dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/crew_quarters/heads/hor)
-"bOJ" = (/obj/structure/table,/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "mining_shuttle"; pixel_x = 25; pixel_y = -8; req_one_access = list(13,48); tag_door = "mining_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bOI" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/substation/command)
+"bOJ" = (/obj/machinery/button/remote/blast_door{dir = 2; id = "Skynet_launch"; name = "Mech Bay Door Control"; pixel_x = 6; pixel_y = 24; req_access = list(29)},/turf/simulated/floor{tag = "icon-warningcorner (WEST)"; icon_state = "warningcorner"; dir = 8},/area/assembly/chargebay)
"bOK" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light_switch{pixel_x = -24; pixel_y = -24},/turf/simulated/floor,/area/quartermaster/qm)
"bOL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/door/airlock/mining{id_tag = "qmdoor"; name = "Quartermaster"; req_access = list(41)},/turf/simulated/floor,/area/quartermaster/qm)
"bOM" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hallway/primary/central_three)
@@ -4838,7 +4838,7 @@
"bPb" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
"bPc" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
"bPd" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
-"bPe" = (/obj/structure/table,/obj/item/weapon/module/power_control,/obj/item/weapon/airlock_electronics,/turf/simulated/floor/plating,/area/storage/tech)
+"bPe" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/device/megaphone,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/qm)
"bPf" = (/turf/simulated/floor/plating,/area/storage/tech)
"bPg" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech)
"bPh" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/storage/tech)
@@ -4864,15 +4864,15 @@
"bPB" = (/mob/living/simple_animal/cat/fluff/Runtime,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bPC" = (/obj/machinery/door/airlock/external{name = "Toxins Test Chamber"},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"bPD" = (/obj/machinery/light{dir = 1},/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber North"; network = list("Research","Toxins Test Area")},/turf/simulated/floor/airless,/area/rnd/test_area)
-"bPE" = (/obj/structure/table,/obj/machinery/computer/skills{pixel_y = 4},/obj/item/device/megaphone,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
+"bPE" = (/obj/item/weapon/clipboard,/obj/item/weapon/stamp{name = "Quartermaster's stamp"; pixel_x = 0; pixel_y = 0},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/qm)
"bPF" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "mining_dock_airlock"; pixel_x = 25; pixel_y = -5; req_one_access = list(13,48); tag_airpump = "mining_dock_pump"; tag_chamber_sensor = "mining_dock_sensor"; tag_exterior_door = "mining_dock_outer"; tag_interior_door = "mining_dock_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "mining_dock_sensor"; pixel_x = 25; pixel_y = 8},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 1; icon_state = "map"; tag = "icon-manifold-f (NORTH)"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/quartermaster/miningdock)
-"bPG" = (/obj/structure/table,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/crew_quarters/heads/cmo)
+"bPG" = (/obj/structure/table/standard,/obj/item/weapon/autopsy_scanner,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue)
"bPH" = (/obj/structure/closet,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/quartermaster/qm)
"bPI" = (/obj/structure/disposalpipe/segment,/obj/machinery/newscaster{pixel_x = 30},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"bPJ" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoA_window_tint"; pixel_y = 26},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_a)
-"bPK" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 0},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
-"bPL" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/britcup,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
-"bPM" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoB_window_tint"; pixel_y = 26},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_b)
+"bPJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/belt/utility,/obj/item/clothing/gloves/latex,/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
+"bPK" = (/obj/item/weapon/folder/yellow,/obj/item/weapon/pen{pixel_x = 4; pixel_y = 4},/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/quartermaster/qm)
+"bPL" = (/obj/structure/table/standard,/obj/item/device/camera{name = "Autopsy Camera"; pixel_x = -2; pixel_y = 7},/obj/item/weapon/paper_bin{pixel_y = -6},/obj/item/weapon/pen/red{pixel_x = -1; pixel_y = -9},/obj/item/weapon/pen/blue{pixel_x = 3; pixel_y = -5},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/morgue)
+"bPM" = (/obj/structure/computerframe,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bPN" = (/obj/machinery/computer/med_data,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bPO" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_port)
"bPP" = (/obj/machinery/sparker{id = "Xenobio"; pixel_x = -25},/turf/simulated/floor/engine,/area/rnd/misc_lab)
@@ -4881,11 +4881,11 @@
"bPS" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/camera/network/security{c_tag = "Engineering - Technical Storage"},/turf/simulated/floor/plating,/area/storage/tech)
"bPT" = (/obj/item/weapon/cigbutt,/turf/simulated/floor{icon_state = "floorgrime"},/area/rnd/storage)
"bPU" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/rnd/storage)
-"bPV" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bPW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/rnd/research)
+"bPV" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
+"bPW" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel,/obj/item/stack/material/plasteel,/obj/item/stack/material/plastic{amount = 20},/turf/simulated/floor,/area/engineering/workshop)
"bPX" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/camera/network/security{c_tag = "Custodial Closet"},/turf/simulated/floor,/area/janitor)
-"bPY" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
-"bPZ" = (/obj/machinery/door/window/westleft{name = "Janitoral Delivery"; req_access = list(26)},/turf/simulated/floor{icon_state = "delivery"},/area/janitor)
+"bPY" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel,/obj/item/stack/material/steel,/turf/simulated/floor,/area/engineering/workshop)
+"bPZ" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "chemcounter"; name = "Pharmacy Counter Shutters"; opacity = 0},/obj/structure/table/reinforced,/obj/machinery/door/window/westright{name = "Chemistry Desk"},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/medical/chemistry)
"bQa" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bQb" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "CMO's Office"; req_access = list(40)},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bQc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "CMO's Office"; req_access = list(40)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
@@ -4906,7 +4906,7 @@
"bQr" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor{dir = 10; icon_state = "brown"},/area/quartermaster/miningdock)
"bQs" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/quartermaster/miningdock)
"bQt" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = "QM Office"; name = "QM Office"},/turf/simulated/floor,/area/quartermaster/miningdock)
-"bQu" = (/obj/structure/disposalpipe/segment,/obj/machinery/portable_atmospherics/canister,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
+"bQu" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor,/area/engineering/workshop)
"bQv" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/cargo)
"bQw" = (/obj/structure/disposalpipe/sortjunction{dir = 8; icon_state = "pipe-j1s"; sortType = "HoP Office"; name = "HoP Office"},/turf/simulated/floor/plating,/area/maintenance/cargo)
"bQx" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -4915,7 +4915,7 @@
"bQA" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/borgupload{pixel_x = -1; pixel_y = 1},/obj/item/weapon/circuitboard/aiupload{pixel_x = 2; pixel_y = -2},/turf/simulated/floor,/area/storage/tech)
"bQB" = (/obj/machinery/portable_atmospherics/canister,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/rnd/mixing)
"bQC" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/storage/tech)
-"bQD" = (/obj/structure/table,/obj/item/device/aicard,/obj/item/weapon/aiModule/reset,/turf/simulated/floor/plating,/area/storage/tech)
+"bQD" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "specops_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "exterior access button"; pixel_x = -5; pixel_y = -26; req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bQE" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/pandemic{pixel_x = -3; pixel_y = 3},/obj/item/weapon/circuitboard/rdconsole,/obj/item/weapon/circuitboard/destructive_analyzer,/obj/item/weapon/circuitboard/protolathe,/obj/item/weapon/circuitboard/rdserver{pixel_x = 3; pixel_y = -3},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/storage/tech)
"bQF" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/arcade,/obj/item/weapon/circuitboard/message_monitor{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
"bQG" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/security/mining,/obj/item/weapon/circuitboard/autolathe{pixel_x = 3; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/storage/tech)
@@ -4923,11 +4923,11 @@
"bQI" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
"bQJ" = (/turf/simulated/floor,/area/hallway/primary/aft)
"bQK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/hallway/primary/aft)
-"bQL" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/simulated/floor,/area/janitor)
-"bQM" = (/obj/structure/table,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/janitor)
+"bQL" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "specops_dock_airlock"; name = "interior access button"; pixel_x = -28; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor,/area/hallway/secondary/entry/aft)
+"bQM" = (/obj/structure/table/standard,/obj/machinery/newscaster/security_unit{pixel_x = 0; pixel_y = 32},/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/packageWrap,/obj/item/weapon/hand_labeler,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/crew_quarters/heads/hop)
"bQN" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light,/turf/simulated/floor,/area/janitor)
"bQO" = (/obj/structure/janitorialcart,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/janitor)
-"bQP" = (/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/legcuffs/beartrap,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/janitor)
+"bQP" = (/obj/item/weapon/material/shard,/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bQQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/janitor)
"bQR" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/janitor)
"bQS" = (/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/generic,/turf/simulated/floor/plating,/area/maintenance/engineering)
@@ -4940,7 +4940,7 @@
"bQZ" = (/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo)
"bRa" = (/obj/structure/table/rack,/obj/item/clothing/accessory/stethoscope,/obj/item/clothing/glasses/hud/health,/obj/item/device/flashlight/pen,/obj/item/weapon/storage/belt/medical,/obj/machinery/keycard_auth{pixel_x = 0; pixel_y = -24},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -38},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo)
"bRb" = (/obj/item/weapon/stool,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = -30},/obj/effect/landmark/start{name = "Chemist"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
-"bRc" = (/obj/structure/table,/obj/item/weapon/folder/white{pixel_y = 10},/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/item/weapon/stamp/cmo,/turf/simulated/floor{tag = "icon-whiteblue (EAST)"; icon_state = "whiteblue"; dir = 4},/area/crew_quarters/heads/cmo)
+"bRc" = (/obj/machinery/computer/skills{icon_state = "medlaptop"},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/crew_quarters/heads/hop)
"bRd" = (/obj/machinery/portable_atmospherics/powered/pump/filled,/obj/machinery/atmospherics/portables_connector,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
"bRe" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/meter,/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
"bRf" = (/obj/machinery/computer/crew,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
@@ -4953,7 +4953,7 @@
"bRm" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/bed/chair/office/dark,/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/patient_a)
"bRn" = (/turf/simulated/wall,/area/medical/patient_b)
"bRo" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/engine,/area/rnd/misc_lab)
-"bRp" = (/obj/structure/table,/obj/item/device/assembly/igniter,/turf/simulated/floor/engine,/area/rnd/misc_lab)
+"bRp" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/nanotrasen,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/weapon/aiModule/reset,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bRq" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor{icon_state = "floorgrime"},/area/rnd/storage)
"bRr" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/rnd/storage)
"bRs" = (/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
@@ -4962,7 +4962,7 @@
"bRv" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_south = 6; tag_west = 2; use_power = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
"bRw" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bRx" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/omni/mixer{tag_east = 1; tag_east_con = 0.5; tag_south = 1; tag_south_con = 0.5; tag_west = 2; use_power = 0},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/mixing)
-"bRy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(8,12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research_shuttle)
+"bRy" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/freeform,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/item/weapon/aiModule/protectStation,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bRz" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_dock_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = list(13)},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bRA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bRB" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "mining_dock_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_one_access = list(13,48)},/turf/simulated/floor{dir = 8; icon_state = "brown"},/area/quartermaster/miningdock)
@@ -4976,9 +4976,9 @@
"bRJ" = (/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/engineering)
"bRK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/mixing)
"bRL" = (/turf/simulated/floor/airless{dir = 8; icon_state = "warning"},/area/rnd/test_area)
-"bRM" = (/obj/structure/closet/crate,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bRM" = (/obj/structure/closet/crate,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bRN" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/shuttle/mining/station)
-"bRO" = (/obj/structure/ore_box,/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
+"bRO" = (/obj/structure/ore_box,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/mining/station)
"bRP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/quartermaster/miningdock)
"bRQ" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor{dir = 2; icon_state = "brown"},/area/quartermaster/miningdock)
"bRR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -5001,18 +5001,18 @@
"bSi" = (/obj/structure/disposalpipe/segment,/obj/machinery/light_switch{pixel_x = 22; pixel_y = -9},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/medbay{c_tag = "Medbay Port Corridor"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/medical/medbay)
"bSj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/engineering)
"bSk" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/engineering)
-"bSl" = (/obj/structure/table,/obj/item/device/t_scanner,/turf/simulated/floor/plating,/area/maintenance/engineering)
+"bSl" = (/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/denied{pixel_x = 4; pixel_y = -2},/obj/structure/table/standard,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/quartermaster/office)
"bSm" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "white"},/area/medical/sleeper)
"bSn" = (/obj/machinery/light_switch{pixel_x = -22; pixel_y = -9},/obj/machinery/requests_console{announcementConsole = 1; department = "Chief Medical Officer's Desk"; departmentType = 5; name = "Chief Medical Officer RC"; pixel_x = -34; pixel_y = 2},/obj/machinery/camera/network/medbay{c_tag = "Medbay - CMO's Office"; dir = 4},/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/crew_quarters/heads/cmo)
"bSo" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay)
"bSp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "staffroom"; name = "Staff Room Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/medbay2)
"bSq" = (/obj/machinery/light,/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor{dir = 10; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo)
-"bSr" = (/obj/structure/table,/obj/item/weapon/paper{desc = "A few notes scratched out by the last CMO before they departed the station."; info = "\[i]\[center]To the incoming CMO of Exodus:\[/i]\[/center]\[br]\[br]I wish you and your crew well. Do take note:\[br]\[br]\[br]The Medical Emergency Red Phone system has proven itself well. Take care to keep the phones in their designated places as they have been optimised for broadcast. The two handheld green radios (I have left one in this office, and one near the Emergency Entrance) are free to be used. The system has proven effective at alerting Medbay of important details, especially during power outages.\[br]\[br]I think I may have left the toilet cubicle doors shut. It might be a good idea to open them so the staff and patients know they are not engaged.\[br]\[br]The new syringe gun has been stored in secondary storage. I tend to prefer it stored in my office, but 'guidelines' are 'guidelines'.\[br]\[br]Also in secondary storage is the grenade equipment crate. I've just realised I've left it open - you may wish to shut it.\[br]\[br]There were a few problems with their installation, but the Medbay Quarantine shutters should now be working again - they lock down the Emergency and Main entrances to prevent travel in and out. Pray you shan't have to use them.\[br]\[br]The new version of the Medical Diagnostics Manual arrived. I distributed them to the shelf in the staff break room, and one on the table in the corner of this room.\[br]\[br]The exam/triage room has the walking canes in it. I'm not sure why we'd need them - but there you have it.\[br]\[br]Emergency Cryo bags are beside the emergency entrance, along with a kit.\[br]\[br]Spare paper cups for the reception are on the left side of the reception desk.\[br]\[br]I've fed Runtime. She should be fine.\[br]\[br]\[br]\[center]That should be all. Good luck!\[/center]"; name = "Outgoing CMO's Notes"},/obj/item/device/radio{frequency = 1487; name = "Medbay Emergency Radio Link"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
+"bSr" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/pen/red{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/quartermaster/office)
"bSs" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bSt" = (/obj/machinery/computer/crew,/obj/machinery/light,/turf/simulated/floor{dir = 6; icon_state = "whiteblue"; tag = "icon-whitehall (WEST)"},/area/crew_quarters/heads/cmo)
"bSu" = (/obj/machinery/light_switch{pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay2)
"bSv" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
-"bSw" = (/obj/structure/table,/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/device/multitool,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/engine,/area/rnd/misc_lab)
+"bSw" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_dock_outer"; locked = 1; name = "Docking Port Airlock"; req_access = list(13)},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "admin_shuttle_dock_airlock"; name = "exterior access button"; pixel_x = -28; pixel_y = -6; req_one_access = list(13)},/turf/simulated/floor/plating,/area/hallway/secondary/entry/aft)
"bSx" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bSy" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/computer/security/telescreen{desc = "Used for watching the test chamber."; layer = 4; name = "Test Chamber Telescreen"; network = list("Toxins Test Area"); pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/rnd/mixing)
"bSz" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -24},/turf/simulated/floor{dir = 8; icon_state = "cautioncorner"},/area/hallway/primary/aft)
@@ -5020,7 +5020,7 @@
"bSB" = (/obj/machinery/light,/obj/machinery/vending/snack,/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bSC" = (/obj/machinery/atmospherics/binary/passive_gate{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
"bSD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_a)
-"bSE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(8)},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bSE" = (/obj/item/weapon/stock_parts/console_screen,/obj/structure/table/standard,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bSF" = (/obj/machinery/light/small{dir = 4},/obj/machinery/requests_console{department = "Tech storage"; pixel_x = 28; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
"bSG" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_b)
"bSH" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/hallway/primary/aft)
@@ -5028,9 +5028,9 @@
"bSJ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/storage)
"bSK" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/rnd/research)
"bSL" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bSM" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
-"bSN" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Waste to Scrubbers"},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
-"bSO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
+"bSM" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector,/obj/machinery/door/window/brigdoor/westleft{name = "Engine Waste"; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
+"bSN" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/obj/machinery/door/window/brigdoor/westleft{name = "Engine Waste"; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
+"bSO" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "waste pump"},/obj/machinery/door/window/brigdoor/westleft{name = "Engine Waste"; req_access = newlist(); req_one_access = list(10,24)},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
"bSP" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor{dir = 2; icon_state = "whitehall"},/area/rnd/mixing)
"bSQ" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold4w/visible,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bSR" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/rnd/mixing)
@@ -5060,7 +5060,7 @@
"bTp" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/robotics{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/mecha_control{pixel_x = 1; pixel_y = -1},/turf/simulated/floor,/area/storage/tech)
"bTq" = (/turf/simulated/floor,/area/storage/tech)
"bTr" = (/obj/structure/sign/securearea,/turf/simulated/wall/r_wall,/area/storage/tech)
-"bTs" = (/obj/structure/table,/obj/item/weapon/screwdriver{pixel_y = 16},/obj/item/weapon/wirecutters,/turf/simulated/floor/plating,/area/storage/tech)
+"bTs" = (/obj/structure/table/standard,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000; pixel_x = 5; pixel_y = -5},/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
"bTt" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/cloning{pixel_x = 0},/obj/item/weapon/circuitboard/clonescanner,/obj/item/weapon/circuitboard/clonepod,/obj/item/weapon/circuitboard/scan_consolenew,/obj/item/weapon/circuitboard/med_data{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
"bTu" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/powermonitor{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/stationalert_engineering{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/security/engineering,/obj/item/weapon/circuitboard/atmos_alert{pixel_x = 3; pixel_y = -3},/turf/simulated/floor/plating,/area/storage/tech)
"bTv" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/circuitboard/secure_data{pixel_x = -2; pixel_y = 2},/obj/item/weapon/circuitboard/security{pixel_x = 1; pixel_y = -1},/obj/item/weapon/circuitboard/skills{pixel_x = 4; pixel_y = -3},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/tech)
@@ -5087,10 +5087,10 @@
"bTQ" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bot"},/area/rnd/research)
"bTR" = (/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{tag = "icon-whiteblue (WEST)"; icon_state = "whiteblue"; dir = 8},/area/medical/medbay4)
"bTS" = (/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay4)
-"bTT" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/medical/patient_a)
+"bTT" = (/obj/machinery/smartfridge/secure/medbay{req_one_access = list(33,66)},/turf/simulated/wall,/area/medical/chemistry)
"bTU" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/patient_a)
"bTV" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_a)
-"bTW" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 10; icon_state = "whitered"},/area/medical/patient_b)
+"bTW" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Examination Room"; req_access = list(66)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2)
"bTX" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/patient_b)
"bTY" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_b)
"bTZ" = (/obj/machinery/shieldwallgen{anchored = 1; req_access = list(47)},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
@@ -5110,7 +5110,7 @@
"bUn" = (/turf/simulated/wall,/area/maintenance/research_starboard)
"bUo" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/landmark/start{name = "Chief Medical Officer"},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "cmooffice"; name = "CMO Privacy Shutters"; pixel_x = 38; pixel_y = 21},/obj/machinery/button/remote/airlock{desc = "A remote control switch for the CMO's office."; id = "cmodoor"; name = "CMO Office Door Control"; pixel_x = 28; pixel_y = 21},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = -15; pixel_y = 38; req_access = list(5)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "medbayquar"; name = "Medbay Emergency Lockdown Control"; pixel_x = -15; pixel_y = 30; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/heads/cmo)
"bUp" = (/obj/structure/disposaloutlet,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/trunk{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating/airless,/area/rnd/mixing)
-"bUq" = (/obj/machinery/door/airlock/glass_research{name = "Toxins Lab"; req_access = list(8)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
+"bUq" = (/obj/structure/table/standard,/obj/item/roller,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/turf/simulated/floor,/area/medical/reception)
"bUr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/mixing)
"bUs" = (/turf/simulated/floor/airless{icon_state = "warning"},/area/rnd/test_area)
"bUt" = (/turf/simulated/floor/airless{dir = 6; icon_state = "warning"},/area/rnd/test_area)
@@ -5120,7 +5120,7 @@
"bUx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/maintenance/cargo)
"bUy" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/storage/tech)
"bUz" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/storage/tech)
-"bUA" = (/obj/structure/table,/obj/item/stack/cable_coil{pixel_x = -3; pixel_y = 3},/obj/item/stack/cable_coil,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/turf/simulated/floor/plating,/area/storage/tech)
+"bUA" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/storage/emergency)
"bUB" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/storage/tech)
"bUC" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "isoB_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "isoB_window_tint"},/turf/simulated/floor/plating,/area/medical/patient_b)
"bUD" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/hallway/primary/aft)
@@ -5150,7 +5150,7 @@
"bVb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay4)
"bVc" = (/obj/structure/table/woodentable,/obj/item/weapon/dice,/turf/simulated/floor/carpet,/area/engineering/break_room)
"bVd" = (/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/patient_wing)
-"bVe" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/patient_wing)
+"bVe" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"bVf" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/carpet,/area/engineering/break_room)
"bVg" = (/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/patient_wing)
"bVh" = (/obj/machinery/iv_drip,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/patient_wing)
@@ -5170,8 +5170,8 @@
"bVv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bVw" = (/obj/machinery/vending/cigarette{pixel_x = 0; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bVx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/research)
-"bVy" = (/obj/machinery/door/firedoor/border_only{dir = 8; name = "Firelock West"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room Access"; req_access = list(8)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
-"bVz" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/door/airlock/research{name = "Toxins Launch Room"; req_access = list(8)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/rnd/mixing)
+"bVy" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/assembly/robotics)
+"bVz" = (/obj/structure/noticeboard{pixel_y = 28},/obj/item/weapon/book/manual/medical_diagnostics_manual{pixel_y = 7},/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 4; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Break Room Emergency Phone"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bVA" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/rnd/research)
"bVB" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing)
"bVC" = (/obj/structure/table/woodentable,/obj/item/weapon/book/manual/engineering_guide{pixel_x = 3; pixel_y = 2},/obj/item/weapon/book/manual/atmospipes,/obj/machinery/light{dir = 1},/turf/simulated/floor/carpet,/area/engineering/break_room)
@@ -5193,7 +5193,7 @@
"bVS" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/cargo)
"bVT" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/cargo)
"bVU" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/cargo)
-"bVV" = (/obj/structure/table,/obj/machinery/cell_charger{pixel_y = 5},/obj/item/device/multitool,/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating,/area/storage/tech)
+"bVV" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
"bVW" = (/obj/machinery/light/small,/turf/simulated/floor/plating,/area/storage/tech)
"bVX" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/weapon/storage/toolbox/electrical{pixel_x = 1; pixel_y = -1},/obj/item/clothing/gloves/yellow,/obj/item/device/t_scanner,/obj/item/clothing/glasses/meson,/obj/item/device/multitool,/turf/simulated/floor/plating,/area/storage/tech)
"bVY" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/item/device/analyzer/plant_analyzer,/obj/item/device/healthanalyzer,/obj/item/device/analyzer,/obj/item/device/analyzer,/turf/simulated/floor/plating,/area/storage/tech)
@@ -5232,7 +5232,7 @@
"bWF" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/medical/patient_wing)
"bWG" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitered_a"; tag = "icon-whitered_a (WEST)"},/area/medical/patient_wing)
"bWH" = (/obj/structure/bed/chair/comfy/beige,/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor/carpet,/area/engineering/break_room)
-"bWI" = (/obj/machinery/light{dir = 1},/obj/machinery/alarm{pixel_y = 25},/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
+"bWI" = (/obj/structure/table/standard,/turf/simulated/floor/engine,/area/rnd/misc_lab)
"bWJ" = (/turf/simulated/floor/carpet,/area/engineering/break_room)
"bWK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "whitered_b"; tag = "icon-whitered_b (WEST)"},/area/medical/patient_wing)
"bWL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/patient_wing)
@@ -5245,12 +5245,12 @@
"bWS" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bWT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
"bWU" = (/obj/structure/closet/wardrobe/engineering_yellow,/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi_wash)
-"bWV" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient A"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_a)
+"bWV" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient A"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_a)
"bWW" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bWX" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bWY" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bWZ" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
-"bXa" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient Room B"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_b)
+"bXa" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient Room B"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_b)
"bXb" = (/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_exterior"; output = 63},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
"bXc" = (/obj/machinery/vending/phoronresearch,/turf/simulated/floor{dir = 5; icon_state = "whitepurple"},/area/rnd/mixing)
"bXd" = (/obj/machinery/atmospherics/binary/dp_vent_pump/high_volume{dir = 2; frequency = 1379; id = "tox_airlock_pump"},/obj/machinery/air_sensor{frequency = 1430; id_tag = "toxins_mixing_interior"; output = 63; pixel_x = -8; pixel_y = -18},/turf/simulated/floor/engine,/area/rnd/mixing)
@@ -5263,7 +5263,7 @@
"bXk" = (/turf/simulated/floor/airless{dir = 5; icon_state = "warning"},/area/rnd/test_area)
"bXl" = (/turf/simulated/floor/airless{icon_state = "warningcorner"; dir = 4},/area/rnd/test_area)
"bXm" = (/obj/structure/window/shuttle,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape_pod5/station)
-"bXn" = (/obj/structure/table,/obj/item/bodybag/cryobag{pixel_x = 6},/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/bruise_pack{pixel_x = -4; pixel_y = 3},/obj/item/stack/medical/ointment{pixel_y = 10},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi_wash)
+"bXn" = (/obj/item/weapon/reagent_containers/food/drinks/britcup,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"bXo" = (/obj/structure/closet/wardrobe/atmospherics_yellow,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi_wash)
"bXp" = (/obj/machinery/atmospherics/pipe/manifold/visible,/obj/machinery/meter,/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
"bXq" = (/obj/machinery/atmospherics/unary/heat_exchanger{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/mixing)
@@ -5353,7 +5353,7 @@
"bYW" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/crew_quarters/sleep/engi_wash)
"bYX" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whiteyellowfull"},/area/crew_quarters/sleep/engi_wash)
"bYY" = (/obj/structure/sign/nosmoking_2{pixel_x = -32},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/research{c_tag = "Research - Toxins Lab"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible{icon_state = "intact"; dir = 6},/turf/simulated/floor{icon_state = "white"},/area/rnd/mixing)
-"bYZ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(8,12)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
+"bYZ" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/plating,/area/maintenance/substation/command)
"bZa" = (/obj/structure/grille,/obj/structure/window/reinforced/polarized{id = "isoC_window_tint"},/obj/structure/window/reinforced/polarized{dir = 4; id = "isoC_window_tint"},/obj/structure/window/reinforced/polarized{dir = 1; id = "isoC_window_tint"},/obj/structure/window/reinforced/polarized{dir = 8; id = "isoC_window_tint"},/turf/simulated/floor/plating,/area/medical/patient_c)
"bZb" = (/obj/machinery/door/window/southright{name = "Toxins Launcher"; req_access = list(8)},/obj/machinery/door/window/southright{dir = 1; name = "Toxins Launcher"; req_access = list(8)},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/mixing)
"bZc" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/cargo)
@@ -5362,7 +5362,7 @@
"bZf" = (/turf/simulated/wall/r_wall,/area/maintenance/atmos_control)
"bZg" = (/turf/simulated/wall,/area/maintenance/atmos_control)
"bZh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering)
-"bZi" = (/obj/structure/table,/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "Medbay Lounge"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay4)
+"bZi" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/asimov,/obj/item/weapon/aiModule/freeformcore,/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Core Modules"; req_access = list(20)},/obj/structure/window/reinforced,/obj/item/weapon/aiModule/corp,/obj/item/weapon/aiModule/paladin,/obj/item/weapon/aiModule/robocop,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"bZj" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/medical/sleeper)
"bZk" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor,/area/medical/sleeper)
"bZl" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/sleeper)
@@ -5419,7 +5419,7 @@
"cak" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/simulated/floor/carpet,/area/engineering/break_room)
"cal" = (/obj/machinery/newscaster{pixel_x = 28; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/engineering/break_room)
"cam" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/iv_drip,/turf/simulated/floor,/area/medical/sleeper)
-"can" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(47)},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
+"can" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/substation/command)
"cao" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/bed/chair/comfy/teal{tag = "icon-comfychair (EAST)"; icon_state = "comfychair"; dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/ward)
"cap" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 27; pixel_y = 0},/obj/structure/bed/roller,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
"caq" = (/turf/simulated/wall,/area/crew_quarters/sleep/engi_wash)
@@ -5441,10 +5441,10 @@
"caG" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/medical/psych)
"caH" = (/obj/structure/table/woodentable,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/medical/psych)
"caI" = (/turf/simulated/wall,/area/medical/psych)
-"caJ" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_exterior"; locked = 1; name = "Mixing Room Exterior Airlock"; req_access = list(8)},/turf/simulated/floor/engine,/area/rnd/mixing)
+"caJ" = (/obj/structure/table/standard,/obj/item/weapon/aiModule/oxygen,/obj/item/weapon/aiModule/oneHuman,/obj/machinery/door/window{base_state = "left"; dir = 8; icon_state = "left"; name = "High-Risk Modules"; req_access = list(20)},/obj/item/weapon/aiModule/purge,/obj/structure/window/reinforced,/obj/item/weapon/aiModule/antimov,/obj/item/weapon/aiModule/teleporterOffline,/turf/simulated/floor/bluegrid,/area/turret_protected/ai_upload)
"caK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
-"caL" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = 22},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
-"caM" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "whitered"},/area/medical/patient_c)
+"caL" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "admin_shuttle_dock_airlock"; name = "interior access button"; pixel_x = -8; pixel_y = 26; req_one_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/hallway/secondary/entry/aft)
+"caM" = (/obj/structure/table/standard,/obj/item/weapon/deck{pixel_y = 4},/turf/simulated/floor/plating,/area/maintenance/disposal)
"caN" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/patient_c)
"caO" = (/obj/machinery/iv_drip,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 5; icon_state = "whitered"},/area/medical/patient_c)
"caP" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing)
@@ -5461,14 +5461,14 @@
"cba" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cbb" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/maintenance/atmos_control)
"cbc" = (/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
-"cbd" = (/obj/machinery/door/airlock/glass_research{autoclose = 0; frequency = 1379; glass = 1; icon_state = "door_locked"; id_tag = "tox_airlock_interior"; locked = 1; name = "Mixing Room Interior Airlock"; req_access = list(8)},/turf/simulated/floor/engine,/area/rnd/mixing)
+"cbd" = (/obj/machinery/recharger{pixel_y = 0},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-cafeteria (NORTHEAST)"; icon_state = "cafeteria"; dir = 5},/area/crew_quarters/medbreak)
"cbe" = (/obj/item/weapon/wrench,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cbf" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "escape_pod_5"; pixel_x = 0; pixel_y = -25; tag_door = "escape_pod_5_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
"cbg" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_hatch"; locked = 1; name = "Escape Pod Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod5/station)
"cbh" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cbi" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_berth_hatch"; locked = 1; name = "Escape Pod"; req_access = list(13)},/turf/simulated/floor/plating,/area/maintenance/cargo)
"cbj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient Hallway - Starboard"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
-"cbk" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "hazard door east"},/obj/machinery/door/airlock/research{name = "Miscellaneous Reseach Room"; req_access = list(47)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/misc_lab)
+"cbk" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/requests_console{department = "Janitorial"; departmentType = 1; pixel_y = -29},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/janitor)
"cbl" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eng_eva_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "eng_eva_pump"},/turf/simulated/floor{dir = 9; icon_state = "floorgrimecaution"},/area/maintenance/atmos_control)
"cbm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/research{c_tag = "Research Division South"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"cbn" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
@@ -5494,13 +5494,13 @@
"cbH" = (/obj/structure/urinal{pixel_y = 32},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash)
"cbI" = (/turf/simulated/wall,/area/medical/surgeryobs)
"cbJ" = (/obj/machinery/door/airlock/maintenance{req_access = list(12)},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/cargo)
-"cbK" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{pixel_x = -26},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward)
+"cbK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{pixel_x = -26},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward)
"cbL" = (/obj/machinery/computer/security/telescreen{desc = "Used to monitor the engine room."; layer = 3.3; name = "Engine Monitor"; network = list("Engine"); pixel_x = 0; pixel_y = 28},/obj/machinery/computer/station_alert/all,/turf/simulated/floor,/area/crew_quarters/heads/chief)
"cbM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/ward)
"cbN" = (/turf/simulated/floor{icon_state = "white"},/area/medical/ward)
"cbO" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
"cbP" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/wood,/area/medical/psych)
-"cbQ" = (/obj/machinery/door/airlock/engineering{name = "Engineering Supplies"; req_one_access = list(10,24,5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/engineering/break_room)
+"cbQ" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor,/area/janitor)
"cbR" = (/obj/structure/bed/roller,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
"cbS" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"cbT" = (/obj/structure/closet/crate{icon_state = "crateopen"; name = "Grenade Crate"; opened = 1},/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/grenade/chem_grenade,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/igniter,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/obj/item/device/assembly/timer,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
@@ -5577,11 +5577,11 @@
"cdm" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{autoclose = 0; name = "Diagnostics Room"; req_access = list(5)},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/medbay4)
"cdn" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor{icon_state = "white_halfo"},/area/medical/medbay4)
"cdo" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white_halfp"},/area/medical/medbay4)
-"cdp" = (/obj/machinery/door/airlock/maintenance{name = "Miscellaneous Reseach Maintenance"; req_access = list(47)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"cdp" = (/obj/item/weapon/beartrap,/obj/item/weapon/storage/box/mousetraps,/obj/item/weapon/storage/box/mousetraps,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/beartrap,/turf/simulated/floor,/area/janitor)
"cdq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/ward)
"cdr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/ward)
"cds" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/ward)
-"cdt" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/newscaster{pixel_x = 30},/obj/structure/table,/obj/machinery/computer/med_data/laptop{pixel_x = 3; pixel_y = 4},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/ward)
+"cdt" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/bodybags,/obj/item/weapon/storage/box/bodybags,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/morgue)
"cdu" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "bcarpet01"},/area/medical/psych)
"cdv" = (/turf/simulated/floor{icon_state = "bcarpet02"},/area/medical/psych)
"cdw" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "bcarpet03"},/area/medical/psych)
@@ -5594,7 +5594,7 @@
"cdD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
"cdE" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/medical/virologyaccess)
"cdF" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/engineering/break_room)
-"cdG" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess)
+"cdG" = (/obj/structure/disposalpipe/segment,/obj/machinery/camera/network/medbay{c_tag = "Medbay Lounge"},/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/medbay4)
"cdH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/medical/virologyaccess)
"cdI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
"cdJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_port)
@@ -5628,14 +5628,14 @@
"cel" = (/obj/structure/closet/secure_closet/engineering_chief,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/crew_quarters/heads/chief)
"cem" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/carpet,/area/engineering/break_room)
"cen" = (/obj/machinery/iv_drip,/turf/simulated/floor{icon_state = "white"},/area/medical/patient_wing)
-"ceo" = (/obj/structure/table,/obj/item/weapon/storage/box/cdeathalarm_kit,/obj/item/bodybag/cryobag{pixel_x = -3},/obj/item/bodybag/cryobag{pixel_x = -3},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
-"cep" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen,/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 0; pixel_y = -36},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/button/windowtint{id = "isoC_window_tint"; pixel_y = -26},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/patient_c)
+"ceo" = (/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/plastic{name = "plastic table frame"},/turf/simulated/floor{tag = "icon-whiteblue (NORTH)"; icon_state = "whiteblue"; dir = 1},/area/medical/patient_wing)
+"cep" = (/obj/item/weapon/material/shard,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_port)
"ceq" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology)
"cer" = (/obj/machinery/keycard_auth{pixel_x = -24; pixel_y = 0},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for engine core."; id = "EngineVent"; name = "Engine Ventillatory Control"; pixel_x = -24; pixel_y = 10; req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the engine core airlock hatch bolts."; id = "engine_access_hatch"; name = "Engine Hatch Bolt Control"; pixel_x = -24; pixel_y = -10; req_access = list(10); specialfunctions = 4},/turf/simulated/floor,/area/crew_quarters/heads/chief)
"ces" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/disposalpipe/segment,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"cet" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"ceu" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized{dir = 4},/obj/structure/window/reinforced/polarized{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
-"cev" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Break Room"; req_one_access = list(10,24,5)},/turf/simulated/floor,/area/engineering/break_room)
+"cev" = (/obj/structure/table/standard,/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/clothing/glasses/welding,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engineering/atmos)
"cew" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/engineering/foyer)
"cex" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/engineering{c_tag = "Engineering Break Room"; dir = 8},/turf/simulated/floor/carpet,/area/engineering/break_room)
"cey" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/engineering/foyer)
@@ -5647,7 +5647,7 @@
"ceE" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
"ceF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bluecorner"},/area/medical/surgeryobs)
"ceG" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green,/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/surgeryobs)
-"ceH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/ward)
+"ceH" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/ward)
"ceI" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/medical/psych)
"ceJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/ward)
"ceK" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/button/windowtint{pixel_x = -25},/obj/machinery/light_switch{pixel_x = -25; pixel_y = 8},/obj/machinery/button/remote/airlock{desc = "A remote control-switch for the office door."; id = "mentaldoor"; name = "office door control"; pixel_x = -34; pixel_y = 7},/turf/simulated/floor/wood,/area/medical/psych)
@@ -5665,22 +5665,22 @@
"ceW" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
"ceX" = (/obj/structure/noticeboard{pixel_x = 32; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
"ceY" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/sleep/engi_wash)
-"ceZ" = (/obj/structure/table,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/hand_labeler,/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora_storage)
+"ceZ" = (/obj/structure/table/standard,/obj/machinery/newscaster{pixel_y = 30},/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/belt/utility/atmostech,/obj/item/weapon/storage/belt/utility/atmostech,/turf/simulated/floor,/area/engineering/atmos)
"cfa" = (/obj/structure/bed/chair,/turf/simulated/floor,/area/medical/surgeryobs)
"cfb" = (/obj/structure/closet/secure_closet/hydroponics{req_access = list(47)},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage)
"cfc" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/light_switch{pixel_x = 27},/obj/machinery/smartfridge/drying_rack,/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora_storage)
"cfd" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/rnd/xenobiology)
-"cfe" = (/obj/structure/bed,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient Room C"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_c)
+"cfe" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/medical,/obj/machinery/vending/wallmed1{name = "NanoMed Wall"; pixel_x = 25; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Patient Room C"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/patient_c)
"cff" = (/obj/structure/sign/securearea,/turf/simulated/wall,/area/rnd/xenobiology)
"cfg" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/disposalpipe/trunk,/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = 32},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"cfh" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora)
-"cfi" = (/obj/item/weapon/shard,/mob/living/simple_animal/mouse,/turf/simulated/floor/plating,/area/maintenance/research_port)
+"cfi" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/bed/padded,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology)
"cfj" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(12,47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology)
"cfk" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(12,47)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology)
-"cfl" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/box/botanydisk,/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
+"cfl" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/item/weapon/pen,/obj/item/weapon/packageWrap,/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 29},/turf/simulated/floor{icon_state = "white"},/area/rnd/lab)
"cfm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cfn" = (/obj/machinery/botany/extractor,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora)
-"cfo" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora)
+"cfo" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor,/area/quartermaster/storage)
"cfp" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/smartfridge,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"cfq" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/research_starboard)
"cfr" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/research_starboard)
@@ -5688,11 +5688,11 @@
"cft" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"cfu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cfv" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
-"cfw" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/construction)
-"cfx" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plating,/area/construction)
-"cfy" = (/obj/structure/table,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/construction)
-"cfz" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
-"cfA" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
+"cfw" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva)
+"cfx" = (/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = -30; pixel_y = 0},/obj/machinery/camera/network/civilian_west{c_tag = "Cargo Office"; dir = 4},/obj/structure/table/plastic{name = "plastic table frame"},/obj/item/stack/material/glass{pixel_x = 3; pixel_y = 3},/obj/item/stack/material/steel,/obj/item/device/multitool,/turf/simulated/floor,/area/quartermaster/office)
+"cfy" = (/obj/structure/table/standard,/obj/item/clothing/head/soft,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/clothing/head/soft,/turf/simulated/floor,/area/quartermaster/storage)
+"cfz" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor,/area/quartermaster/storage)
+"cfA" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/engineering/engine_smes)
"cfB" = (/obj/item/clothing/mask/smokable/cigarette,/turf/simulated/floor/plating/airless,/area/rnd/test_area)
"cfC" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/atmos_control)
"cfD" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/atmos_control)
@@ -5712,7 +5712,7 @@
"cfR" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cfS" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms)
"cfT" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow,/turf/simulated/floor/plating/airless,/area/solar/starboard)
-"cfU" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
+"cfU" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_exterior"; locked = 0; name = "Engine Airlock Exterior"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
"cfV" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor{icon_state = "blue"; dir = 10},/area/medical/surgeryobs)
"cfW" = (/turf/simulated/floor{dir = 0; icon_state = "blue"},/area/medical/surgeryobs)
"cfX" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "blue"; dir = 6},/area/medical/surgeryobs)
@@ -5727,7 +5727,7 @@
"cgg" = (/obj/machinery/vending/snack,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
"cgh" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing)
"cgi" = (/obj/structure/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Psychiatrist"},/turf/simulated/floor{icon_state = "bcarpet06"},/area/medical/psych)
-"cgj" = (/obj/structure/table,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing)
+"cgj" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cgk" = (/obj/item/weapon/storage/toolbox/emergency,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"cgl" = (/obj/structure/table/rack,/obj/item/clothing/suit/radiation,/obj/item/clothing/head/radiation,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"cgm" = (/obj/item/device/radio/intercom{layer = 4; name = "Station Intercom (General)"; pixel_y = -29},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/engineering{c_tag = "Engineering - CE's Office"; dir = 1},/turf/simulated/floor,/area/crew_quarters/heads/chief)
@@ -5745,8 +5745,8 @@
"cgy" = (/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology/xenoflora_storage)
"cgz" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage)
"cgA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology)
-"cgB" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Break Room"; req_one_access = list(10,24,5)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/break_room)
-"cgC" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Washroom"; req_one_access = list(10,24,5)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/break_room)
+"cgB" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_interior"; locked = 0; name = "Engine Airlock Interior"; req_access = list(11)},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"cgC" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 25; req_access = list(11)},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_room)
"cgD" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"cgE" = (/obj/structure/grille,/turf/simulated/wall/r_wall,/area/engineering/atmos)
"cgF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/atmos_control)
@@ -5765,15 +5765,15 @@
"cgS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/construction)
"cgT" = (/turf/simulated/floor/plating,/area/construction)
"cgU" = (/turf/simulated/floor,/area/construction)
-"cgV" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table,/obj/item/clothing/gloves/black,/obj/item/device/multitool{pixel_x = 5},/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
+"cgV" = (/obj/structure/table/plastic{name = "plastic table frame"},/obj/item/stack/material/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/material/steel{amount = 50},/obj/item/clothing/glasses/welding,/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/rnd/lab)
"cgW" = (/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay4)
"cgX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
-"cgY" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
-"cgZ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "toxin_test_airlock"; name = "interior access button"; pixel_x = 20; pixel_y = 20; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/research_starboard)
+"cgY" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/table/plastic{name = "plastic table frame"},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/cable_coil,/obj/item/device/flash,/obj/item/device/flash,/turf/simulated/floor,/area/assembly/robotics)
+"cgZ" = (/obj/structure/table/plastic{name = "plastic table frame"},/obj/item/stack/material/glass{amount = 20; pixel_x = -3; pixel_y = 3},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/assembly/robotics)
"cha" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "toxin_test_pump"; tag_exterior_door = "toxin_test_outer"; frequency = 1379; id_tag = "toxin_test_airlock"; tag_interior_door = "toxin_test_inner"; pixel_x = 0; pixel_y = 25; req_access = list(13); tag_chamber_sensor = "toxin_test_sensor"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/maintenance/research_starboard)
-"chb" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "toxin_test_airlock"; name = "exterior access button"; pixel_x = -20; pixel_y = -20; req_access = list(13)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless,/area/space)
+"chb" = (/obj/structure/table/standard,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/engineering/workshop)
"chc" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/foyer)
-"chd" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "toxin_test_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/research_starboard)
+"chd" = (/obj/structure/table/standard,/obj/item/device/antibody_scanner,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = -32},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"che" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/engineering/foyer)
"chf" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/foyer)
"chg" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/foyer)
@@ -5782,26 +5782,26 @@
"chj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engineering/foyer)
"chk" = (/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/bed/chair/comfy/brown{dir = 4},/turf/simulated/floor{icon_state = "bcarpet08"},/area/medical/psych)
"chl" = (/obj/structure/bed/psych,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor{icon_state = "bcarpet09"},/area/medical/psych)
-"chm" = (/obj/structure/table,/obj/item/weapon/gun/launcher/syringe,/obj/item/weapon/storage/box/syringegun,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
+"chm" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/structure/disposalpipe/segment,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"chn" = (/obj/machinery/light,/obj/machinery/camera/network/research{c_tag = "Research - Toxins Test Chamber South"; dir = 1; network = list("Research","Toxins Test Area")},/turf/simulated/floor/airless,/area/rnd/test_area)
"cho" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/purple,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"chp" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized{dir = 8},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
"chq" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/polarized{dir = 1},/obj/structure/window/reinforced/polarized,/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
-"chr" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/item/weapon/storage/box/masks,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryprep)
+"chr" = (/obj/structure/table/standard,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"chs" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/medical/surgeryprep)
"cht" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 4; icon_state = "blue"},/area/medical/surgeryprep)
"chu" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/window/reinforced/polarized{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
-"chv" = (/obj/structure/table,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"chv" = (/obj/structure/table/standard,/obj/item/device/radio/off{pixel_y = 6},/obj/item/device/radio/off{pixel_x = 6; pixel_y = 4},/obj/item/device/radio/off{pixel_x = -6; pixel_y = 4},/obj/item/device/radio/off,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/engineering/workshop)
"chw" = (/obj/structure/sign/biohazard,/turf/simulated/wall,/area/medical/virologyaccess)
"chx" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/medical/virology)
-"chy" = (/obj/structure/bedsheetbin,/obj/structure/table,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
+"chy" = (/obj/structure/table/standard,/obj/machinery/light,/obj/item/weapon/wrench,/obj/item/device/flashlight,/obj/machinery/cell_charger,/turf/simulated/floor,/area/engineering/workshop)
"chz" = (/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/window/reinforced/polarized,/obj/structure/window/reinforced/polarized{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/heads/chief)
"chA" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/research_port)
"chB" = (/turf/simulated/floor/plating,/area/maintenance/research_port)
"chC" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle1"; name = "Cubicle 1"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing)
"chD" = (/obj/machinery/door/airlock/medical{autoclose = 0; icon_state = "door_open"; id_tag = "cubicle2"; name = "Cubicle 2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/patient_wing)
"chE" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
-"chF" = (/obj/machinery/computer/reconstitutor,/obj/machinery/light_switch{pixel_x = 26; pixel_y = -6},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"chF" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology)
"chG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Aft Starboard"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"chH" = (/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
"chI" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage)
@@ -5820,7 +5820,7 @@
"chV" = (/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/table/reinforced{icon_state = "table"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/engineering/engine_eva)
"chW" = (/turf/simulated/wall/r_wall,/area/engineering/engine_eva)
"chX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engineering/engine_eva)
-"chY" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "Science Substation"; req_one_access = list(11,24,47)},/obj/machinery/door/firedoor,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/substation/research)
+"chY" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/engineering/workshop)
"chZ" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cia" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cib" = (/obj/machinery/power/breakerbox/activated{RCon_tag = "Engineering Substation Bypass"},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
@@ -5831,7 +5831,7 @@
"cig" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/engineering/foyer)
"cih" = (/obj/machinery/hologram/holopad,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/foyer)
"cii" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/construction)
-"cij" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/construction)
+"cij" = (/obj/structure/table/standard,/obj/item/device/floor_painter,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/engineering/workshop)
"cik" = (/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor{dir = 2; icon_state = "yellowcorner"},/area/engineering/foyer)
"cil" = (/obj/structure/closet/secure_closet/engineering_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engineering/locker_room)
"cim" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/locker_room)
@@ -5890,11 +5890,11 @@
"cjn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/light,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora)
"cjo" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
"cjp" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engineering/foyer)
-"cjq" = (/obj/machinery/light,/obj/structure/table,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
-"cjr" = (/obj/structure/table,/obj/item/clothing/gloves/latex,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
-"cjs" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"cjq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
+"cjr" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering)
+"cjs" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/turf/simulated/floor,/area/engineering)
"cjt" = (/obj/machinery/button/remote/airlock{desc = "A remote control-switch for Surgery."; id = "Surgery"; name = "Surgery"; pixel_x = -24; pixel_y = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryprep)
-"cju" = (/obj/structure/table,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"cju" = (/obj/machinery/door/airlock/maintenance{req_access = list(10,12)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering)
"cjv" = (/obj/structure/closet/secure_closet/personal/patient,/obj/machinery/camera/network/medbay{c_tag = "Medbay Recovery Ward"; dir = 1},/turf/simulated/floor{dir = 6; icon_state = "whitered"},/area/medical/ward)
"cjw" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cjx" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/light/small{dir = 4},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
@@ -5926,22 +5926,22 @@
"cjX" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"cjY" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{tag = "icon-whitegreen_v (NORTHEAST)"; icon_state = "whitegreen_v"; dir = 5},/area/rnd/xenobiology/xenoflora)
"cjZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
-"cka" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
+"cka" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/engineering)
"ckb" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"ckc" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"ckd" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/surgery)
+"ckd" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cke" = (/turf/simulated/floor{tag = "icon-whitegreen (NORTHWEST)"; icon_state = "whitegreen"; dir = 9},/area/rnd/xenobiology/xenoflora)
-"ckf" = (/obj/structure/table,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Surgery Emergency Phone"},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryprep)
+"ckf" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"ckg" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/medical/surgeryprep)
"ckh" = (/obj/structure/disposalpipe/segment,/obj/item/roller,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
"cki" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
-"ckj" = (/obj/structure/table,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/surgery2)
+"ckj" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"ckk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"ckl" = (/obj/machinery/computer/operating,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"ckm" = (/obj/structure/table,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
+"ckm" = (/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed"; locked = 0; name = "Engine Access"; req_one_access = list(11)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_airlock)
"ckn" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/closet/crate/hydroponics/prespawned,/obj/machinery/camera/network/research{c_tag = "Xenoflora Storage"; dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora_storage)
"cko" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
-"ckp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance,/obj/structure/disposalpipe/segment,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess)
+"ckp" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"ckq" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/medical/virologyaccess)
"ckr" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1443; icon_state = "map_vent_in"; id_tag = "air_out"; internal_pressure_bound = 2000; internal_pressure_bound_default = 2000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
"cks" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1443; icon_state = "map_injector"; id = "air_in"; use_power = 1},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
@@ -5954,7 +5954,7 @@
"ckz" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1441; icon_state = "map_injector"; id = "o2_in"; use_power = 1},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/engineering/atmos)
"ckA" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 2; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "o2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/engineering/atmos)
"ckB" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "o2_sensor"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/engineering/atmos)
-"ckC" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"ckC" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/engineering/engine_monitoring)
"ckD" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 2; frequency = 1441; icon_state = "map_injector"; id = "n2_in"; use_power = 1},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/engineering/atmos)
"ckE" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/rnd/xenobiology)
"ckF" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering EVA Storage"; req_access = list(12); req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/engineering/engine_eva)
@@ -5995,14 +5995,14 @@
"clo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio6"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/rnd/xenobiology)
"clp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/red,/turf/simulated/floor,/area/engineering/foyer)
"clq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/rnd/xenobiology)
-"clr" = (/obj/structure/table,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/storage/art)
+"clr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 25},/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/device/multitool{pixel_x = 5},/obj/item/clothing/gloves/yellow,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/engineering/engine_smes)
"cls" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio5"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/disposalpipe/segment,/obj/structure/cable/green,/turf/simulated/floor/plating,/area/rnd/xenobiology)
"clt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/maintenance/research_port)
"clu" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/engineering/engine_eva)
"clv" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"clw" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = 0},/turf/simulated/wall,/area/maintenance/substation/engineering)
"clx" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engineering)
-"cly" = (/obj/structure/table,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
+"cly" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -2; pixel_y = 5},/turf/simulated/floor,/area/engineering/engine_monitoring)
"clz" = (/obj/machinery/optable,/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"clA" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"clB" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/surgery)
@@ -6014,7 +6014,7 @@
"clH" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/surgery2)
"clI" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"clJ" = (/obj/machinery/optable,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"clK" = (/obj/structure/table,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
+"clK" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"clL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/medbay)
"clM" = (/turf/simulated/floor/plating,/area/maintenance/medbay)
"clN" = (/turf/simulated/wall/r_wall,/area/medical/virologyaccess)
@@ -6045,7 +6045,7 @@
"cmm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/atmos)
"cmn" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/rnd/xenobiology/xenoflora)
"cmo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
-"cmp" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access = list(39)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess)
+"cmp" = (/obj/structure/table/standard,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor,/area/engineering/engine_smes)
"cmq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cmr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cms" = (/obj/machinery/door/airlock/research{name = "Xenoflora Storage"; req_access = list(55)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
@@ -6057,9 +6057,9 @@
"cmy" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/light,/turf/simulated/floor,/area/engineering/foyer)
"cmz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/construction)
"cmA" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/construction)
-"cmB" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"cmB" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/obj/machinery/airlock_sensor/airlock_exterior{id_tag = "eng_al_ext_snsr"; layer = 3.3; master_tag = "engine_room_airlock"; pixel_y = -22; req_access = list(10)},/obj/structure/table/standard,/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/engineering/engine_airlock)
"cmC" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor,/area/engineering/foyer)
-"cmD" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 4; name = "Engineering RC"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor,/area/engineering/foyer)
+"cmD" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 3; name = "Engineering RC"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor,/area/engineering/foyer)
"cmE" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/computer/guestpass{pixel_y = -28},/turf/simulated/floor,/area/engineering/foyer)
"cmF" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor,/area/engineering/foyer)
"cmG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
@@ -6070,7 +6070,7 @@
"cmL" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engineering/locker_room)
"cmM" = (/obj/structure/closet/secure_closet/atmos_personal,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/engineering/locker_room)
"cmN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/locker_room)
-"cmO" = (/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/engineering/locker_room)
+"cmO" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
"cmP" = (/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Air"},/turf/simulated/floor/engine{name = "air floor"; nitrogen = 10580; oxygen = 2644},/area/engineering/atmos)
"cmQ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Oxygen"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/engineering/atmos)
"cmR" = (/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Nitrogen"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/engineering/atmos)
@@ -6083,7 +6083,7 @@
"cmY" = (/obj/machinery/door/blast/regular{desc = "By gods, release the hounds!"; id = "xenobioout6"; name = "Containment Release"},/turf/simulated/floor/engine,/area/rnd/xenobiology)
"cmZ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cna" = (/obj/structure/cable/yellow,/turf/simulated/floor/plating/airless,/area/solar/starboard)
-"cnb" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
+"cnb" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cnc" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cnd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cne" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering EVA Storage"; req_one_access = list(11,24)},/turf/simulated/floor,/area/engineering/engine_eva)
@@ -6092,7 +6092,7 @@
"cnh" = (/obj/machinery/button/remote/blast_door{id = "surgeryobs2"; name = "Privacy Shutters"; pixel_y = 25},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/surgery2)
"cni" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cnj" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"cnk" = (/obj/structure/table,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
+"cnk" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = 32},/obj/machinery/cell_charger,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Northeast"},/turf/simulated/floor,/area/engineering/atmos)
"cnl" = (/obj/structure/sign/biohazard,/turf/simulated/wall/r_wall,/area/medical/virologyaccess)
"cnm" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/wall/r_wall,/area/engineering/atmos)
"cnn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/maintenance/research_port)
@@ -6127,15 +6127,15 @@
"cnQ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room"; req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/engineering/locker_room)
"cnR" = (/turf/simulated/wall/r_wall,/area/engineering/locker_room)
"cnS" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/engineering)
-"cnT" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"cnU" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"cnV" = (/obj/structure/table,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/random/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
+"cnT" = (/obj/structure/table/standard,/obj/item/device/t_scanner,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/radio/headset/headset_eng,/obj/item/weapon/cartridge/atmos,/obj/item/weapon/cartridge/atmos,/obj/item/device/pipe_painter,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 3; name = "Atmos RC"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor,/area/engineering/atmos)
+"cnU" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/sign/deathsposal{pixel_x = 32},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cnV" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cnW" = (/obj/machinery/computer/med_data,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"cnX" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
+"cnX" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/glass_jar,/obj/item/glass_jar,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cnY" = (/obj/machinery/computer/med_data,/obj/machinery/light,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"cnZ" = (/obj/structure/table,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/random/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"coa" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"cob" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
+"cnZ" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"coa" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Pre-Op Prep Room Maintenance Access"; req_access = list(5)},/turf/simulated/floor/plating,/area/medical/surgeryprep)
+"cob" = (/obj/structure/table/standard,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/machinery/camera/network/medbay{c_tag = "Virology Port"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"coc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "bluecorner"},/area/medical/virologyaccess)
"cod" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/medical/virologyaccess)
"coe" = (/obj/machinery/light{dir = 1},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 4; icon_state = "bluecorner"},/area/medical/virologyaccess)
@@ -6158,7 +6158,7 @@
"cov" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos)
"cow" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/engineering/atmos)
"cox" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor/plating,/area/engineering/atmos)
-"coy" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(10,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar)
+"coy" = (/obj/structure/closet/crate,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/plating,/area/engineering/storage)
"coz" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/hallway/secondary/entry/port)
"coA" = (/obj/machinery/door/airlock/maintenance{name = "Engineering EVA Storage Maintainance"; req_access = list(12); req_one_access = list(11,24)},/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/red,/turf/simulated/floor,/area/engineering/engine_eva)
"coB" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Locker Room"; req_one_access = list(11,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/engineering/locker_room)
@@ -6192,7 +6192,7 @@
"cpd" = (/obj/structure/closet/emcloset,/obj/machinery/camera/xray/research{c_tag = "Xenobiology Access"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/rnd/xenobiology)
"cpe" = (/obj/machinery/light{dir = 8},/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/closet/wardrobe/medic_white,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryprep)
"cpf" = (/obj/machinery/biogenerator,/obj/machinery/camera/network/research{c_tag = "Xenoflora"; dir = 1},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
-"cpg" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cpg" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cph" = (/obj/machinery/status_display,/turf/simulated/wall,/area/medical/surgery2)
"cpi" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/medbay)
"cpj" = (/turf/simulated/wall/r_wall,/area/engineering/storage)
@@ -6210,10 +6210,10 @@
"cpv" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engineering/atmos)
"cpw" = (/obj/machinery/atmospherics/valve/digital/open{name = "Mixed Air Inlet Valve"},/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/engineering/atmos)
"cpx" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1443; input_tag = "air_in"; name = "Mixed Air Supply Control"; output_tag = "air_out"; pressure_setting = 2000; sensors = list("air_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "arrival"},/area/engineering/atmos)
-"cpy" = (/obj/machinery/door/window/eastright{name = "Engineering Reception Desk"; req_one_access = list(10,24)},/obj/machinery/light,/turf/simulated/floor,/area/engineering/foyer)
+"cpy" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/white,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cpz" = (/obj/machinery/atmospherics/valve/digital/open{name = "Oxygen Outlet Valve"},/turf/simulated/floor{dir = 5; icon_state = "blue"},/area/engineering/atmos)
-"cpA" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/engineering{c_tag = "Engineering Locker Room"; dir = 1},/turf/simulated/floor,/area/engineering/locker_room)
-"cpB" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(10,24)},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
+"cpA" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
+"cpB" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/gloves/latex,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cpC" = (/obj/machinery/button/holosign{pixel_x = 24; pixel_y = 2},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/camera/network/medbay{c_tag = "Medbay Operating Theatre 1"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteredcorner"},/area/medical/surgery)
"cpD" = (/obj/machinery/atmospherics/valve/digital/open{name = "Nitrogen Outlet Valve"},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/engineering/atmos)
"cpE" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "n2_in"; name = "Nitrogen Supply Control"; output_tag = "n2_out"; sensors = list("n2_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 1},/area/engineering/atmos)
@@ -6224,11 +6224,11 @@
"cpJ" = (/obj/structure/reagent_dispensers/fueltank,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 25},/turf/simulated/floor,/area/engineering/atmos)
"cpK" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/hallway/secondary/entry/aft)
"cpL" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engineering/atmos)
-"cpM" = (/obj/structure/table,/obj/item/device/t_scanner,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/radio/headset/headset_eng,/obj/item/weapon/cartridge/atmos,/obj/item/weapon/cartridge/atmos,/obj/item/device/pipe_painter,/obj/machinery/requests_console{department = "Atmospherics"; departmentType = 4; name = "Atmos RC"; pixel_x = 0; pixel_y = 28},/turf/simulated/floor,/area/engineering/atmos)
+"cpM" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cpN" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "solar_xeno_pump"; tag_exterior_door = "solar_xeno_outer"; frequency = 1379; id_tag = "solar_xeno_airlock"; tag_interior_door = "solar_xeno_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "solar_xeno_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "solar_xeno_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "solar_xeno_pump"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cpO" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/space,/area/space)
"cpP" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(12,24)},/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor,/area/maintenance/atmos_control)
-"cpQ" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/clothing/head/welding{pixel_x = -5; pixel_y = 3},/obj/item/clothing/glasses/welding,/obj/structure/closet/fireaxecabinet{pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/engineering/atmos)
+"cpQ" = (/obj/structure/table/standard,/obj/item/weapon/crowbar,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor,/area/engineering/workshop)
"cpR" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/atmos{name = "Atmospherics Maintenance"; req_access = list(12,24)},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/turf/simulated/floor,/area/maintenance/atmos_control)
"cpS" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Firelock North"},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/hallway/secondary/entry/port)
"cpT" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/turf/simulated/floor,/area/engineering/atmos)
@@ -6250,21 +6250,21 @@
"cqj" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery)
"cqk" = (/obj/machinery/iv_drip,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery)
"cql" = (/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryprep)
-"cqm" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/AMinus,/obj/item/weapon/reagent_containers/blood/APlus,/obj/item/weapon/reagent_containers/blood/BMinus,/obj/item/weapon/reagent_containers/blood/BPlus,/obj/item/weapon/reagent_containers/blood/OPlus,/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
+"cqm" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cqn" = (/obj/machinery/iv_drip,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2)
"cqo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2)
"cqp" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2)
"cqq" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2)
"cqr" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Monitoring Room"; req_access = list(11)},/turf/simulated/floor,/area/engineering/engineering_monitoring)
-"cqs" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering)
-"cqt" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10,24)},/turf/simulated/floor,/area/engineering)
+"cqs" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/rnd/xenobiology)
+"cqt" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cqu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "greencorner"},/area/medical/virologyaccess)
"cqv" = (/turf/simulated/wall/r_wall,/area/medical/virology)
"cqw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cqx" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cqy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cqz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/plating,/area/engineering/engineering_monitoring)
-"cqA" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10,24)},/turf/simulated/floor,/area/engineering)
+"cqA" = (/obj/structure/table/standard,/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cqB" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cqC" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cqD" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Workshop"; req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/engineering/workshop)
@@ -6286,7 +6286,7 @@
"cqT" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/security/prison)
"cqU" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/atmos)
"cqV" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Air Tank Bypass Pump"},/turf/simulated/floor,/area/engineering/atmos)
-"cqW" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cqW" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/vials,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cqX" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/engineering/atmos)
"cqY" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/turf/simulated/floor,/area/engineering/atmos)
"cqZ" = (/obj/structure/bed/chair{dir = 1},/obj/effect/landmark/start{name = "Atmospheric Technician"},/turf/simulated/floor,/area/engineering/atmos)
@@ -6334,7 +6334,7 @@
"crP" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
"crQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engineering/atmos)
"crR" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology)
-"crS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/bed,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology)
+"crS" = (/obj/structure/table/standard,/obj/item/stack/material/phoron{amount = 5},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"crT" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/virology)
"crU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 10},/turf/simulated/floor/plating,/area/engineering/atmos)
"crV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/turf/simulated/floor/plating,/area/engineering/atmos)
@@ -6345,9 +6345,9 @@
"csa" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor,/area/engineering/atmos)
"csb" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor,/turf/simulated/floor/plating,/area/maintenance/engineering)
"csc" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre 1 Storage"; req_access = list(45)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
-"csd" = (/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/structure/table,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/medbay{c_tag = "Medbay Surgery Prep"; dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
+"csd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/table/standard,/obj/item/clothing/gloves/black,/obj/item/device/multitool{pixel_x = 5},/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
"cse" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Operating Theatre 2 Storage"; req_access = list(45)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
-"csf" = (/obj/machinery/door/window/northleft{dir = 4; name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology)
+"csf" = (/obj/machinery/light,/turf/simulated/floor{dir = 8; icon_state = "whitecorner"},/area/hallway/primary/starboard)
"csg" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio3"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor/engine,/area/rnd/xenobiology)
"csh" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/engineering/atmos/monitoring)
"csi" = (/obj/machinery/door/airlock/research{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "xeno_airlock_interior"; locked = 1; name = "Xenobiology Internal Airlock"; req_access = list(55)},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
@@ -6355,7 +6355,7 @@
"csk" = (/obj/structure/table/reinforced,/obj/machinery/light,/obj/item/device/flashlight,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/engineering/engineering_monitoring)
"csl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/rnd/xenobiology)
"csm" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engineering_monitoring)
-"csn" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(10,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
+"csn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/item/weapon/storage/box/masks,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/medical/surgeryprep)
"cso" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/engineering)
"csp" = (/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor,/area/engineering)
"csq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/engineering/workshop)
@@ -6378,7 +6378,7 @@
"csH" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgery2)
"csI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/medbay)
"csJ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 9; icon_state = "warnwhite"},/area/medical/virology)
-"csK" = (/obj/structure/closet/crate,/obj/item/stack/sheet/mineral/phoron{amount = 25},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor/plating,/area/engineering/storage)
+"csK" = (/obj/structure/bed/chair{dir = 4},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"csL" = (/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor{dir = 9; icon_state = "blue"},/area/engineering/atmos)
"csM" = (/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "o2_in"; name = "Oxygen Supply Control"; output_tag = "o2_out"; sensors = list("o2_sensor" = "Tank")},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/light{dir = 1},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Northwest"},/turf/simulated/floor{dir = 1; icon_state = "blue"},/area/engineering/atmos)
"csN" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6393,9 +6393,9 @@
"csW" = (/obj/machinery/atmospherics/binary/pump{name = "O2 to Connector"},/turf/simulated/floor,/area/engineering/atmos)
"csX" = (/obj/machinery/atmospherics/binary/pump{name = "N2 to Connector"},/turf/simulated/floor,/area/engineering/atmos)
"csY" = (/obj/structure/dispenser,/turf/simulated/floor,/area/engineering/atmos)
-"csZ" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/structure/sign/atmosplaque{pixel_x = 0; pixel_y = 32},/obj/machinery/cell_charger,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Northeast"},/turf/simulated/floor,/area/engineering/atmos)
+"csZ" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/medical{name = "Virology Access"; req_access = list(5)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/medical/virologyaccess)
"cta" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Supply to Waste"},/turf/simulated/floor,/area/engineering/atmos)
-"ctb" = (/obj/structure/table,/obj/machinery/newscaster{pixel_y = 30},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/belt/utility/atmostech,/obj/item/weapon/storage/belt/utility/atmostech,/turf/simulated/floor,/area/engineering/atmos)
+"ctb" = (/obj/structure/table/standard,/obj/item/weapon/gun/launcher/syringe,/obj/item/weapon/storage/box/syringegun,/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"ctc" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Monitoring Room"; dir = 8},/turf/simulated/floor,/area/engineering/atmos/monitoring)
"ctd" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor,/area/engineering/atmos)
"cte" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/meter,/turf/simulated/floor,/area/engineering/atmos)
@@ -6408,17 +6408,17 @@
"ctl" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/engineering)
"ctm" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/maintenance/medbay)
"ctn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engineering/workshop)
-"cto" = (/obj/structure/window/reinforced{dir = 1},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/structure/table/reinforced,/turf/simulated/floor,/area/engineering/workshop)
+"cto" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"ctp" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "surgeryobs"; name = "Operating Theatre Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgeryobs)
"ctq" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "surgeryobs"; name = "Operating Theatre Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgeryobs)
"ctr" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 2; icon_state = "shutter0"; id = "surgeryobs"; name = "Operating Theatre Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/medical/surgeryobs)
"cts" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"ctt" = (/obj/structure/window/reinforced{dir = 1},/obj/item/stack/rods{amount = 50},/obj/item/weapon/airlock_electronics,/obj/item/weapon/airlock_electronics,/obj/item/weapon/cell/high,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/reinforced,/turf/simulated/floor,/area/engineering/workshop)
-"ctu" = (/obj/structure/window/reinforced{dir = 1},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/reinforced,/turf/simulated/floor,/area/engineering/workshop)
+"ctu" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ctv" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/engineering)
"ctw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/engineering)
"ctx" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/light,/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for shutters."; id = "virologyquar"; name = "Virology Emergency Lockdown Control"; pixel_x = 0; pixel_y = -28; req_access = list(5)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virologyaccess)
-"cty" = (/obj/structure/window/reinforced{dir = 1},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/mineral/plastic{amount = 10},/obj/structure/table/reinforced,/turf/simulated/floor,/area/engineering/workshop)
+"cty" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/disposalpipe/segment,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"ctz" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
"ctA" = (/obj/machinery/light/small{dir = 1},/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/medbay)
"ctB" = (/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio3"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/window/reinforced{dir = 1},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/xenobiology)
@@ -6426,7 +6426,7 @@
"ctD" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"ctE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/medical/virology)
"ctF" = (/turf/simulated/wall,/area/medical/virology)
-"ctG" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/obj/structure/reagent_dispensers/virusfood{pixel_x = -30},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"ctG" = (/obj/structure/bedsheetbin,/obj/structure/table/standard,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "dark"},/area/medical/biostorage)
"ctH" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/item/device/radio/intercom{broadcasting = 0; name = "Station Intercom (General)"; pixel_y = 26},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"ctI" = (/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = 0; pixel_y = 30},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/camera/network/research{c_tag = "Xenobiology North"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"ctJ" = (/obj/machinery/disease2/incubator,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6440,7 +6440,7 @@
"ctR" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"ctS" = (/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor,/area/engineering/atmos)
"ctT" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre 1 Storage"; req_access = list(45)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgeryprep)
-"ctU" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
+"ctU" = (/obj/structure/table/standard,/obj/item/weapon/tape_roll,/obj/item/device/analyzer/plant_analyzer,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
"ctV" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre 2 Storage"; req_access = list(45)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "freezerfloor"},/area/medical/surgeryprep)
"ctW" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"ctX" = (/obj/machinery/power/solar{id = "starboardsolar"; name = "Starboard Solar Array"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/solar/starboard)
@@ -6469,7 +6469,7 @@
"cuu" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engineering/workshop)
"cuv" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor,/area/engineering/workshop)
"cuw" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/engineering/workshop)
-"cux" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage)
+"cux" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 2; icon_state = "floorgrimecaution"},/area/maintenance/incinerator)
"cuy" = (/obj/machinery/atmospherics/binary/pump{dir = 4; name = "O2 to Mixing"},/turf/simulated/floor,/area/engineering/atmos)
"cuz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/engineering/storage)
"cuA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/engineering/storage)
@@ -6486,7 +6486,7 @@
"cuL" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/engineering/atmos)
"cuM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cuN" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/turf/simulated/floor{dir = 6; icon_state = "warnwhite"},/area/medical/virology)
-"cuO" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/folder/white,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cuO" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
"cuP" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cuQ" = (/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cuR" = (/obj/structure/bed/chair/office/dark{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6499,8 +6499,8 @@
"cuY" = (/obj/machinery/atmospherics/pipe/manifold/visible/red,/turf/simulated/floor,/area/engineering/atmos)
"cuZ" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cva" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cvb" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/item/clothing/gloves/latex,/obj/item/device/slime_scanner,/obj/item/device/slime_scanner,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
-"cvc" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
+"cvb" = (/obj/structure/table/standard,/obj/item/weapon/tank/emergency_oxygen/engi,/obj/random/tech_supply,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plating,/area/construction)
+"cvc" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
"cvd" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cve" = (/obj/machinery/smartfridge/secure/extract,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/rnd/xenobiology)
"cvf" = (/obj/machinery/optable{name = "Xenobiology Operating Table"},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/rnd/xenobiology)
@@ -6517,7 +6517,7 @@
"cvq" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engineering/atmos)
"cvr" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor,/area/engineering/atmos)
"cvs" = (/obj/machinery/computer/security/engineering,/turf/simulated/floor,/area/engineering/engineering_monitoring)
-"cvt" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Pre-Op Prep Room Maintenance Access"; req_access = list(45)},/turf/simulated/floor/plating,/area/medical/surgeryprep)
+"cvt" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
"cvu" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engineering)
"cvv" = (/obj/structure/closet/wardrobe/virology_white,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/camera/xray/medbay{c_tag = "Virology Access Aft"},/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/medical/virology)
"cvw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/light,/turf/simulated/floor,/area/engineering)
@@ -6529,7 +6529,7 @@
"cvC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering/workshop)
"cvD" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/engineering/workshop)
"cvE" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/engineering/atmos)
-"cvF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/storage)
+"cvF" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cvG" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/engineering/atmos)
"cvH" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cvI" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/medical/virology)
@@ -6554,8 +6554,8 @@
"cwb" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cwc" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cwd" = (/obj/structure/closet/l3closet/scientist,/obj/machinery/light{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology)
-"cwe" = (/obj/structure/table,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
-"cwf" = (/obj/structure/table,/obj/item/stack/sheet/mineral/phoron{amount = 5; layer = 2.9},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
+"cwe" = (/obj/machinery/light,/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor{icon_state = "cafeteria"; dir = 5},/area/engineering/break_room)
+"cwf" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/construction)
"cwg" = (/turf/simulated/wall/r_wall,/area/engineering/atmos/storage)
"cwh" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/rnd/xenobiology)
"cwi" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 8},/area/rnd/xenobiology)
@@ -6570,8 +6570,8 @@
"cwr" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless,/area/solar/port)
"cws" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/turf/simulated/floor,/area/engineering/workshop)
"cwt" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/newscaster{pixel_x = 28; pixel_y = 3},/turf/simulated/floor,/area/engineering/workshop)
-"cwu" = (/obj/machinery/portable_atmospherics/canister/phoron,/turf/simulated/floor/plating,/area/engineering/storage)
-"cwv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/plating,/area/engineering/storage)
+"cwu" = (/obj/structure/reagent_dispensers/fueltank,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cwv" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cww" = (/obj/machinery/shieldgen,/turf/simulated/floor/plating,/area/engineering/storage)
"cwx" = (/obj/machinery/shieldwallgen,/turf/simulated/floor/plating,/area/engineering/storage)
"cwy" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden/purple,/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/medical/virology)
@@ -6579,18 +6579,18 @@
"cwA" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/medical/virology)
"cwB" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cwC" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
-"cwD" = (/obj/structure/table,/obj/item/weapon/storage/lockbox/vials,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cwE" = (/obj/structure/table,/obj/item/weapon/storage/fancy/vials,/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cwD" = (/obj/machinery/door/airlock/engineering{name = "Aft Starboard Solar Access"; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
+"cwE" = (/obj/structure/table/standard,/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/medical/patient_wing)
"cwF" = (/obj/machinery/atmospherics/pipe/manifold/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cwG" = (/obj/structure/table,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/beakers,/obj/item/weapon/reagent_containers/dropper,/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cwG" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/starboardsolar)
"cwH" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/engineering/atmos)
-"cwI" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 2; volume = 3200},/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cwJ" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 2; volume = 3200},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cwI" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cwJ" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/meter,/obj/machinery/button/remote/blast_door{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = -24; req_one_access = list(12,5)},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{dir = 1; icon_state = "warningcorner"; tag = "icon-warningcorner (WEST)"},/area/maintenance/incinerator)
"cwK" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cwL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cwM" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cwN" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cwO" = (/obj/structure/closet/emcloset,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cwO" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
"cwP" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/medbay)
"cwQ" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay)
"cwR" = (/obj/structure/closet/l3closet/virology,/obj/item/clothing/mask/gas,/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "virology_airlock_exterior"; id_tag = "virology_airlock_control"; tag_interior_door = "virology_airlock_interior"; name = "Virology Access Console"; pixel_x = 8; pixel_y = 22},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "greencorner"},/area/medical/virology)
@@ -6606,7 +6606,7 @@
"cxb" = (/obj/machinery/atmospherics/pipe/manifold4w/visible/yellow,/turf/simulated/floor,/area/engineering/atmos)
"cxc" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/meter,/turf/simulated/floor,/area/engineering/atmos)
"cxd" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/engineering{c_tag = "Engineering Workshop"; dir = 8},/turf/simulated/floor,/area/engineering/workshop)
-"cxe" = (/obj/structure/table,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cxe" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor{dir = 4; icon_state = "whitered"},/area/medical/surgery)
"cxf" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/solar/port)
"cxg" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cxh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
@@ -6615,7 +6615,7 @@
"cxk" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"cxl" = (/obj/machinery/atmospherics/valve/digital{dir = 4},/turf/simulated/floor,/area/engineering/atmos)
"cxm" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/structure/sign/deathsposal{pixel_x = 0; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/rnd/xenobiology)
-"cxn" = (/obj/structure/table,/obj/item/weapon/circular_saw,/obj/item/weapon/scalpel{pixel_y = 12},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/rnd/xenobiology)
+"cxn" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cxo" = (/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/engineering{c_tag = "Engineering Storage"; dir = 4},/turf/simulated/floor/plating,/area/engineering/storage)
"cxp" = (/obj/structure/closet/crate,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/circuitboard/smes,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_capacity,/obj/item/weapon/smes_coil/super_io,/obj/item/weapon/smes_coil/super_io,/turf/simulated/floor/plating,/area/engineering/storage)
"cxq" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{name = "Operating Theatre 1 Maintenance Access"; req_access = list(45)},/turf/simulated/floor/plating,/area/medical/surgery)
@@ -6624,20 +6624,20 @@
"cxt" = (/obj/machinery/door/window/southright{dir = 1; name = "Virology Isolation Room One"; req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{dir = 1; icon_state = "whitegreen"},/area/medical/virology)
"cxu" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering)
"cxv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/engineering/workshop)
-"cxw" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/clothing/gloves/black,/obj/item/clothing/gloves/black,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor,/area/engineering/workshop)
+"cxw" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/cleaner{desc = "Someone has crossed out the Space from Space Cleaner and written in Surgery. 'Do not remove under punishment of death!!!' is scrawled on the back."; name = "Surgery Cleaner"},/turf/simulated/floor{dir = 8; icon_state = "whitered"},/area/medical/surgery2)
"cxx" = (/turf/simulated/floor/plating/airless,/area/solar/port)
"cxy" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/solar/port)
"cxz" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/port)
"cxA" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/engineering/workshop)
"cxB" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/engineering/workshop)
-"cxC" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor/plating,/area/engineering/storage)
+"cxC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
"cxD" = (/obj/structure/dispenser{oxygentanks = 0},/obj/machinery/light,/turf/simulated/floor/plating,/area/engineering/storage)
"cxE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/yellow,/turf/simulated/floor/plating,/area/medical/virology)
"cxF" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/bed/chair,/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/camera/network/medbay{c_tag = "Virology Monkey Pen"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cxG" = (/obj/machinery/atmospherics/omni/filter{use_power = 1; tag_east = 1; tag_north = 3; tag_south = 6; tag_west = 2},/turf/simulated/floor,/area/engineering/atmos)
"cxH" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio2"; name = "Containment Blast Doors"; opacity = 0},/obj/machinery/door/window/northleft{base_state = "right"; dir = 8; icon_state = "right"; name = "Containment Pen"; req_access = list(55)},/turf/simulated/floor/engine,/area/rnd/xenobiology)
"cxI" = (/obj/machinery/atmospherics/omni/filter{use_power = 1; tag_east = 1; tag_north = 4; tag_south = 7; tag_west = 2},/turf/simulated/floor,/area/engineering/atmos)
-"cxJ" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/glass_jar,/obj/item/glass_jar,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
+"cxJ" = (/obj/structure/table/standard,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Surgery Emergency Phone"},/turf/simulated/floor{icon_state = "blue"; dir = 8},/area/medical/surgeryprep)
"cxK" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cxL" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cxM" = (/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
@@ -6652,7 +6652,7 @@
"cxV" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor,/area/engineering/atmos)
"cxW" = (/turf/simulated/floor{dir = 8; icon_state = "whitegreen"},/area/medical/virology)
"cxX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cxY" = (/obj/structure/table,/obj/machinery/computer/med_data/laptop,/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cxY" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_access = newlist(); req_one_access = list(12,5)},/obj/structure/disposalpipe/segment,/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess)
"cxZ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/medical/virology)
"cya" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan,/turf/simulated/floor,/area/engineering/atmos)
"cyb" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact (EAST)"},/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor,/area/engineering/atmos)
@@ -6676,7 +6676,7 @@
"cyt" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/engineering)
"cyu" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/engineering/atmos)
"cyv" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/engineering)
-"cyw" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/storage/belt/utility,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor,/area/engineering/workshop)
+"cyw" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/obj/item/weapon/surgicaldrill,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cyx" = (/obj/structure/bed/chair,/obj/effect/landmark/start{name = "Station Engineer"},/turf/simulated/floor,/area/engineering/workshop)
"cyy" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor,/area/engineering/workshop)
"cyz" = (/obj/machinery/atmospherics/unary/freezer{dir = 2; icon_state = "freezer"},/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engineering/atmos)
@@ -6691,28 +6691,28 @@
"cyI" = (/obj/machinery/space_heater,/turf/simulated/floor,/area/engineering/atmos/storage)
"cyJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/engineering{name = "Engineering Hard Storage"; req_access = list(11)},/turf/simulated/floor,/area/engineering/storage)
"cyK" = (/obj/machinery/door/airlock/maintenance{name = "Incinerator Access"; req_one_access = list(5,12)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"cyL" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/mechanical{pixel_y = 5},/obj/item/weapon/storage/toolbox/electrical,/turf/simulated/floor,/area/engineering/workshop)
-"cyM" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"cyL" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(12,5)},/obj/structure/sign/redcross{desc = "The Star of Life, a symbol of Medical Aid."; icon_state = "lifestar"; name = "Medbay"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/medical/virologyaccess)
+"cyM" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
"cyN" = (/obj/machinery/atmospherics/trinary/mixer,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"cyO" = (/mob/living/simple_animal/mouse,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"cyP" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/sign/deathsposal{pixel_x = 32},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cyP" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
"cyQ" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/wall,/area/maintenance/medbay)
"cyR" = (/obj/machinery/door/airlock/medical{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "virology_airlock_interior"; locked = 1; name = "Virology Interior Airlock"; req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cyS" = (/obj/structure/table,/obj/machinery/light{dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/machinery/camera/network/medbay{c_tag = "Virology Port"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cyT" = (/obj/structure/table,/obj/item/device/antibody_scanner,/obj/machinery/requests_console{department = "Virology"; name = "Virology Requests Console"; pixel_x = -32},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cyU" = (/obj/structure/table,/obj/item/device/floor_painter,/obj/item/device/multitool{pixel_x = 5},/obj/item/device/t_scanner,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor,/area/engineering/workshop)
-"cyV" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 8},/obj/structure/disposalpipe/segment,/obj/item/device/radio{anchored = 1; broadcasting = 0; canhear_range = 7; frequency = 1487; icon = 'icons/obj/items.dmi'; icon_state = "red_phone"; listening = 1; name = "Virology Emergency Phone"; pixel_x = -6; pixel_y = 8},/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cyS" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/construction)
+"cyT" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"cyU" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
+"cyV" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/obj/item/weapon/hand_labeler,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
"cyW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/medical/virology)
-"cyX" = (/obj/structure/table,/obj/item/device/radio/off{pixel_y = 6},/obj/item/device/radio/off{pixel_x = 6; pixel_y = 4},/obj/item/device/radio/off{pixel_x = -6; pixel_y = 4},/obj/item/device/radio/off,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor,/area/engineering/workshop)
+"cyX" = (/obj/machinery/door/window/eastright{name = "Engineering Reception Desk"; req_one_access = list(11,24)},/obj/machinery/light,/turf/simulated/floor,/area/engineering/foyer)
"cyY" = (/obj/item/roller,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cyZ" = (/obj/machinery/door/window/southright{dir = 4; name = "Primate Pen"; req_access = list(39)},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/medical/virology)
"cza" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"czb" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"czc" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/rnd/xenobiology)
"czd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/rnd/xenobiology)
-"cze" = (/obj/structure/table,/obj/machinery/light,/obj/item/weapon/wrench,/obj/item/device/flashlight,/obj/machinery/cell_charger,/turf/simulated/floor,/area/engineering/workshop)
-"czf" = (/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 4; name = "Engineering RC"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor,/area/engineering/workshop)
-"czg" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
+"cze" = (/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/engineering/locker_room)
+"czf" = (/obj/machinery/requests_console{announcementConsole = 0; department = "Engineering"; departmentType = 3; name = "Engineering RC"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor,/area/engineering/workshop)
+"czg" = (/obj/structure/closet/emcloset,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"czh" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"czi" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/solar/port)
"czj" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 9},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6739,10 +6739,10 @@
"czE" = (/obj/structure/bed/chair{dir = 8},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"czF" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/medbay{c_tag = "Virology Starboard"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"czG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating,/area/medical/virology)
-"czH" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology)
+"czH" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology)
"czI" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 10},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology)
-"czJ" = (/obj/structure/table,/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
-"czK" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology)
+"czJ" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/standard,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/camera/network/engineering{c_tag = "Engineering Locker Room"; dir = 1},/turf/simulated/floor,/area/engineering/locker_room)
+"czK" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet,/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/floor{dir = 3; icon_state = "whitered"},/area/medical/virology)
"czL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = -7; pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/purple{dir = 4},/obj/structure/extinguisher_cabinet{pixel_x = 7; pixel_y = -32},/turf/simulated/floor,/area/rnd/xenobiology)
"czM" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/simulated/floor,/area/engineering/atmos)
"czN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/engineering)
@@ -6750,8 +6750,8 @@
"czP" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"czQ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"czR" = (/obj/machinery/atmospherics/tvalve/digital/bypass{dir = 1; icon_state = "map_tvalve0"; state = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
-"czS" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"czT" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"czS" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 2; volume = 3200},/obj/effect/decal/cleanable/cobweb,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
+"czT" = (/obj/machinery/atmospherics/pipe/tank/oxygen{dir = 2; volume = 3200},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator)
"czU" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/maintenance/medbay)
"czV" = (/obj/machinery/atmospherics/binary/pump{dir = 8; name = "Port to Waste"},/turf/simulated/floor,/area/engineering/atmos)
"czW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6800,13 +6800,13 @@
"cAN" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"cAO" = (/turf/simulated/wall,/area/maintenance/engi_shuttle)
"cAP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/maintenance/engineering)
-"cAQ" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"cAR" = (/obj/structure/sign/nosmoking_2{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cAQ" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
+"cAR" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/engineering/storage)
"cAS" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor,/area/engineering)
-"cAT" = (/turf/simulated/floor{dir = 2; icon_state = "floorgrimecaution"},/area/maintenance/incinerator)
+"cAT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/construction)
"cAU" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass_medical{name = "Virology Laboratory"; req_access = list(39)},/turf/simulated/floor{icon_state = "delivery"},/area/medical/virology)
"cAV" = (/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"cAW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/maintenance/incinerator)
+"cAW" = (/obj/machinery/light{dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/construction)
"cAX" = (/obj/structure/closet/emcloset,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "virology_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/medbay)
"cAY" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 6},/area/maintenance/medbay)
"cAZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
@@ -6868,22 +6868,22 @@
"cCd" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cCe" = (/obj/machinery/space_heater,/obj/machinery/light/small,/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/engineering/atmos/storage)
"cCf" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/turf/simulated/wall/r_wall,/area/engineering/atmos/storage)
-"cCg" = (/obj/structure/table,/obj/item/weapon/storage/box/cups,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cCg" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(11,24)},/obj/machinery/door/firedoor,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/substation/engineering)
"cCh" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cCi" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"cCj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cCk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/status_display,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
-"cCl" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(10,24)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
+"cCl" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cCm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cCn" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "virology_sensor"; pixel_x = 25; pixel_y = 12},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "virology_pump"; tag_exterior_door = "virology_outer"; frequency = 1379; id_tag = "virology_airlock"; tag_interior_door = "virology_inner"; pixel_x = 25; req_access = list(13); tag_chamber_sensor = "virology_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "virology_pump"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/medbay)
"cCo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cCp" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engineering)
-"cCq" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/computer/reconstitutor/animal,/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology)
+"cCq" = (/obj/machinery/light_switch{pixel_x = 26; pixel_y = -6},/turf/simulated/floor{icon_state = "hydrofloor"},/area/rnd/xenobiology/xenoflora)
"cCr" = (/obj/structure/sign/securearea,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engineering)
"cCs" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
"cCt" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/space)
"cCu" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
-"cCv" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cCv" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cCw" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{dir = 4},/turf/simulated/floor/plating/airless,/area/medical/virology)
"cCx" = (/obj/machinery/atmospherics/pipe/simple/hidden/yellow{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/turf/simulated/floor/plating/airless,/area/medical/virology)
"cCy" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/plating/airless,/area/medical/virology)
@@ -6902,7 +6902,7 @@
"cCL" = (/obj/machinery/cryopod/robot/right,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cCM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cCN" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor,/area/engineering/atmos)
-"cCO" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering)
+"cCO" = (/obj/structure/table/standard,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cCP" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/maintenance/engi_shuttle)
"cCQ" = (/obj/machinery/embedded_controller/radio/airlock/access_controller{tag_exterior_door = "incinerator_airlock_exterior"; id_tag = "incinerator_access_control"; tag_interior_door = "incinerator_airlock_interior"; name = "Incinerator Access Console"; pixel_x = -6; pixel_y = -26; req_access = list(12)},/obj/machinery/button/ignition{id = "Incinerator"; pixel_x = 6; pixel_y = -24},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor{dir = 2; icon_state = "warningcorner"; tag = "icon-warningcorner (WEST)"},/area/maintenance/incinerator)
"cCR" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/engineering)
@@ -6912,12 +6912,12 @@
"cCV" = (/obj/machinery/light{dir = 1},/obj/effect/landmark{name = "JoinLateCyborg"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 9},/area/engineering/drone_fabrication)
"cCW" = (/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/engineering/drone_fabrication)
"cCX" = (/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
-"cCY" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/meter,/obj/machinery/button/remote/blast_door{id = "disvent"; name = "Incinerator Vent Control"; pixel_x = 0; pixel_y = -24; req_one_access = list(12,5)},/turf/simulated/floor{dir = 1; icon_state = "warningcorner"; tag = "icon-warningcorner (WEST)"},/area/maintenance/incinerator)
+"cCY" = (/obj/machinery/alarm{pixel_y = 23},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/construction)
"cCZ" = (/obj/structure/bed/chair,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/engineering/drone_fabrication)
"cDa" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "xenobio4"; name = "Containment Blast Doors"; pixel_x = 0; pixel_y = 4; req_access = list(55)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/rnd/xenobiology)
"cDb" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cDc" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
-"cDd" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cDc" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
+"cDd" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cDe" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/medical/virology)
"cDf" = (/obj/structure/disposaloutlet,/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/plating/airless,/area/space)
"cDg" = (/obj/machinery/recharge_station,/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
@@ -6945,13 +6945,13 @@
"cDC" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/drone_fabrication)
"cDD" = (/obj/machinery/computer/security/engineering{name = "Drone Monitoring Cameras"; network = list("Engineering")},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cDE" = (/obj/machinery/recharge_station,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
-"cDF" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = 25},/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/device/multitool{pixel_x = 5},/obj/item/clothing/gloves/yellow,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/engineering/engine_smes)
+"cDF" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cDG" = (/obj/machinery/light_switch{pixel_x = 0; pixel_y = 27},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/engineering/engine_smes)
"cDH" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/engineering/engine_smes)
-"cDI" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -2; pixel_y = 5},/turf/simulated/floor,/area/engineering/engine_monitoring)
+"cDI" = (/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/structure/table/standard,/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/machinery/camera/network/medbay{c_tag = "Medbay Surgery Prep"; dir = 8},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
"cDJ" = (/turf/simulated/wall/r_wall,/area/engineering/engine_monitoring)
"cDK" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_monitoring)
-"cDL" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/engineering/engine_monitoring)
+"cDL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "solar_xeno_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/solar/starboard)
"cDM" = (/obj/structure/closet/radiation,/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor,/area/engineering/engine_monitoring)
"cDN" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Phoron to Mixing"},/turf/simulated/floor,/area/engineering/atmos)
"cDO" = (/obj/machinery/atmospherics/binary/pump{name = "Mixing to Mix Tank"},/turf/simulated/floor,/area/engineering/atmos)
@@ -6963,26 +6963,26 @@
"cDU" = (/obj/machinery/atmospherics/binary/pump{dir = 1; name = "Mix Tank to Port"},/turf/simulated/floor,/area/engineering/atmos)
"cDV" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cDW" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/ai_status_display{layer = 4; pixel_y = 32},/turf/simulated/floor,/area/engineering/engine_monitoring)
-"cDX" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cDX" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering)
"cDY" = (/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cDZ" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/engine,/area/rnd/xenobiology)
"cEa" = (/obj/machinery/light/small{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/engine,/area/rnd/xenobiology)
"cEb" = (/obj/machinery/alarm{frequency = 1439; pixel_y = 23},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/engineering/engine_airlock)
"cEc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/visible/red,/turf/simulated/floor,/area/engineering/atmos)
"cEd" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_airlock)
-"cEe" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cEe" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/item/device/radio/intercom{dir = 0; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cEf" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cEg" = (/obj/structure/grille,/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/wall/r_wall,/area/engineering/atmos)
"cEh" = (/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/visible/yellow,/obj/machinery/meter,/turf/simulated/wall/r_wall,/area/engineering/atmos)
"cEi" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engineering/atmos)
-"cEj" = (/obj/structure/table,/obj/item/weapon/storage/box/matches,/obj/item/weapon/storage/fancy/cigarettes,/obj/machinery/light/small{dir = 8},/obj/item/weapon/deck,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
+"cEj" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access = list(10)},/turf/simulated/floor,/area/engineering)
"cEk" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cEl" = (/obj/effect/decal/remains/robot,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engineering/drone_fabrication)
"cEm" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/drone_fabrication)
"cEn" = (/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cEo" = (/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cEp" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
-"cEq" = (/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor,/area/engineering/engine_smes)
+"cEq" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cEr" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/engineering/atmos)
"cEs" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering/engine_smes)
"cEt" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor,/area/engineering/engine_monitoring)
@@ -6993,15 +6993,15 @@
"cEy" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Maintenance"; dir = 4},/turf/simulated/floor/plating{dir = 8; icon_state = "warnplatecorner"},/area/engineering/atmos/storage)
"cEz" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor,/area/engineering/engine_airlock)
"cEA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/engineering/engine_airlock)
-"cEB" = (/obj/machinery/door/airlock/maintenance{req_one_access = list(10,24)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/engineering)
+"cEB" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cEC" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/area/maintenance/engi_shuttle)
"cED" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
-"cEE" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cEE" = (/obj/structure/bed/padded,/obj/item/weapon/bedsheet/green,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cEF" = (/turf/simulated/floor/engine/vacuum,/area/maintenance/incinerator)
"cEG" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "co2_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/engineering/atmos)
"cEH" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; use_power = 1; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/engineering/atmos)
"cEI" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "co2_sensor"},/turf/simulated/floor/engine{carbon_dioxide = 50000; name = "co2 floor"; nitrogen = 0; oxygen = 0},/area/engineering/atmos)
-"cEJ" = (/obj/structure/table,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
+"cEJ" = (/obj/structure/table/standard,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/random/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery2)
"cEK" = (/obj/machinery/computer/arcade,/turf/simulated/floor{icon_state = "white"},/area/medical/virology)
"cEL" = (/obj/structure/disposaloutlet{dir = 4},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor/engine,/area/rnd/xenobiology)
"cEM" = (/obj/machinery/atmospherics/unary/outlet_injector{dir = 1; frequency = 1441; icon_state = "map_injector"; id = "tox_in"; use_power = 1; pixel_y = 1},/turf/simulated/floor/engine{carbon_dioxide = 0; name = "phoron floor"; nitrogen = 0; oxygen = 0; phoron = 70000},/area/engineering/atmos)
@@ -7015,9 +7015,9 @@
"cEU" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "waste_sensor"; output = 63},/turf/simulated/floor/engine{name = "vacuum floor"; nitrogen = 0.01; oxygen = 0.01},/area/engineering/atmos)
"cEV" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cEW" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/drone_fabrication)
-"cEX" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/firedoor,/obj/machinery/door/airlock/maintenance{req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/engineering)
+"cEX" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "blue"; dir = 4},/area/medical/surgeryprep)
"cEY" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
-"cEZ" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/table,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/engineering/engine_smes)
+"cEZ" = (/obj/structure/table/standard,/obj/machinery/vending/wallmed1{pixel_y = -32},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/random/medical,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cFa" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/wall/r_wall,/area/engineering/engine_smes)
"cFb" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engineering/engine_smes)
"cFc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/engineering/engine_smes)
@@ -7121,7 +7121,7 @@
"cGW" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cGX" = (/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cGY" = (/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating{icon_state = "platebotc"},/area/engineering/engine_room)
-"cGZ" = (/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/machinery/power/apc/super{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power"; name_tag = "Engine Power"},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"cGZ" = (/obj/machinery/light_switch{pixel_x = 12; pixel_y = 25},/obj/structure/cable/cyan{d2 = 8; icon_state = "0-8"},/obj/machinery/power/sensor{name = "Powernet Sensor - Engine Power"; name_tag = "Engine Power"},/obj/machinery/power/apc/super/critical{dir = 1; is_critical = 1; name = "north bump"; pixel_y = 24},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cHa" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/maintenance/engi_shuttle)
"cHb" = (/turf/simulated/floor/plating,/area/engineering/engine_room)
"cHc" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/space,/area/space)
@@ -7241,7 +7241,7 @@
"cJm" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging,/obj/structure/lattice,/turf/space,/area/space)
"cJn" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 0; RCon_tag = "Solar - Aft Port"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cJo" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engineering/engine_room)
-"cJp" = (/obj/machinery/door/airlock/maintenance_hatch{icon_state = "door_closed"; locked = 0; name = "Engine Access"; req_one_access = list(11,24)},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/engineering/engine_airlock)
+"cJp" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cJq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "SupermatterPort"; layer = 3.3; name = "Reactor Blast Door"},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cJr" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/engine_room)
"cJs" = (/obj/machinery/air_sensor{frequency = 1438; id_tag = "engine_sensor"; output = 63},/turf/simulated/floor/engine/nitrogen{icon_state = "warnplate"; name = "plating"},/area/engineering/engine_room)
@@ -7306,11 +7306,11 @@
"cKz" = (/obj/machinery/atmospherics/pipe/simple/heat_exchanging{dir = 5},/obj/structure/lattice,/turf/space,/area/space)
"cKA" = (/obj/structure/lattice,/obj/machinery/atmospherics/pipe/simple/visible/green,/turf/space,/area/space)
"cKB" = (/obj/machinery/light_switch{pixel_x = 22; pixel_y = -10},/turf/simulated/floor,/area/engineering/engine_smes)
-"cKC" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/light_switch{pixel_x = -27; pixel_y = 0},/obj/machinery/airlock_sensor/airlock_exterior{id_tag = "eng_al_ext_snsr"; layer = 3.3; master_tag = "engine_room_airlock"; pixel_y = -22; req_access = list(10)},/obj/structure/table,/obj/item/weapon/book/manual/supermatter_engine,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/turf/simulated/floor,/area/engineering/engine_airlock)
+"cKC" = (/obj/structure/table/standard,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
"cKD" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "engineering_dock_pump"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "engineering_dock_sensor"; pixel_x = -25; pixel_y = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/maintenance/engi_shuttle)
"cKE" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/toolbox/electrical,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/camera/network/engineering{c_tag = "Engineering Drone Fabrication"; dir = 8},/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cKF" = (/obj/machinery/door/airlock/maintenance_hatch{name = "SMES Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/engineering/engine_monitoring)
-"cKG" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_exterior"; locked = 0; name = "Engine Airlock Exterior"; req_access = list(10)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/engineering/engine_airlock)
+"cKG" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "solar_xeno_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/starboardsolar)
"cKH" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "engineering_dock_outer"; locked = 1; name = "Engineering Dock Airlock"; req_access = list(13)},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"cKI" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "engineering_dock_outer"; locked = 1; name = "Engineering Dock Airlock"; req_access = list(13)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/engi_shuttle)
"cKJ" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "engineering_dock_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -8; req_one_access = list(13,11,24)},/turf/space,/area/space)
@@ -7334,48 +7334,49 @@
"cLb" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/shuttle/constructionsite/station)
"cLc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/shuttle/constructionsite/station)
"cLd" = (/obj/machinery/computer/station_alert,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
-"cLe" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "engineering_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13,11,24); tag_door = "engineering_shuttle_hatch"},/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
+"cLe" = (/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/research/station)
"cLf" = (/turf/simulated/shuttle/wall{icon_state = "swall1"; dir = 2},/area/shuttle/constructionsite/station)
"cLg" = (/obj/machinery/door/airlock/maintenance{name = "Drone Fabrication/Engine Waste Handling"; req_one_access = list(10,24)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/engineering/drone_fabrication)
"cLh" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_electrical_maintenance"; locked = 1; name = "Electrical Maintenance"; req_access = list(10)},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engineering/engine_room)
-"cLi" = (/obj/machinery/door/airlock/maintenance_hatch{frequency = 1379; icon_state = "door_closed"; id_tag = "engine_airlock_interior"; locked = 0; name = "Engine Airlock Interior"; req_access = list(10)},/turf/simulated/floor/plating,/area/engineering/engine_room)
+"cLi" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access"; req_access = list(11)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLj" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/shuttle/constructionsite/station)
"cLk" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/shuttle/constructionsite/station)
"cLl" = (/obj/machinery/computer/shuttle_control/engineering,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
"cLm" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
"cLn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/shuttle/constructionsite/station)
"cLo" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/camera/network/engine{c_tag = "Engine Waste Handling"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/engineering/engine_waste)
-"cLp" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineEmitterPortWest"; name = "Engine Room Blast Doors"; pixel_x = 0; pixel_y = 25; req_access = list(10)},/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_room)
+"cLp" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/portsolar)
"cLq" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/obj/machinery/alarm/nobreach{dir = 2; pixel_y = 22},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/engine_room)
"cLr" = (/obj/machinery/airlock_sensor/airlock_interior{id_tag = "eng_al_int_snsr"; master_tag = "engine_room_airlock"; pixel_y = 22; req_access = list(10)},/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/plating,/area/engineering/engine_room)
"cLs" = (/obj/structure/cable,/obj/machinery/power/terminal{dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/shuttle/constructionsite/station)
"cLt" = (/obj/structure/cable,/obj/machinery/power/smes/buildable/power_shuttle,/turf/simulated/floor/plating,/area/shuttle/constructionsite/station)
"cLu" = (/obj/machinery/computer/atmos_alert,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
"cLv" = (/turf/simulated/shuttle/wall{tag = "icon-swall2"; icon_state = "swall2"; dir = 2},/area/shuttle/constructionsite/station)
-"cLw" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_one_access = list(10,24)},/obj/machinery/atmospherics/portables_connector,/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
+"cLw" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLx" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/constructionsite/station)
"cLy" = (/turf/simulated/shuttle/wall{icon_state = "swall_s9"; dir = 2},/area/shuttle/constructionsite/station)
-"cLz" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_one_access = list(10,24)},/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 9},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
-"cLA" = (/obj/machinery/door/window/brigdoor{dir = 8; name = "Engine Waste"; req_one_access = list(10,24)},/obj/structure/window/reinforced,/obj/machinery/atmospherics/binary/pump{dir = 8; name = "waste pump"},/turf/simulated/floor/plating{icon_state = "platebot"},/area/engineering/engine_waste)
+"cLz" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/port)
+"cLA" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(11,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLB" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine control room blast doors."; id = "EngineBlast"; name = "Engine Monitoring Room Blast Doors"; pixel_x = 5; pixel_y = -25; req_access = list(10)},/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine charging port."; id = "SupermatterPort"; name = "Reactor Blast Doors"; pixel_x = -5; pixel_y = -25; req_access = list(10)},/obj/machinery/light,/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/engineering/engine_room)
"cLC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Engine Waste Handling"; req_one_access = list(10,24)},/turf/simulated/floor/plating,/area/maintenance/engi_engine)
"cLD" = (/obj/machinery/camera/network/engine{c_tag = "Engine Core West"; dir = 8},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/engineering/engine_room)
-"cLE" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room)
-"cLF" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"cLE" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/plating,/area/engineering/engine_room)
+"cLF" = (/obj/machinery/door/airlock/hatch{icon_state = "door_locked"; id_tag = "engine_access_hatch"; locked = 1; req_access = list(11)},/obj/machinery/atmospherics/pipe/simple/visible/yellow,/turf/simulated/floor/plating,/area/engineering/engine_room)
"cLG" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{dir = 8},/obj/machinery/meter,/obj/machinery/camera/network/engine{c_tag = "Engine Core East"; dir = 4},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engineering/engine_room)
"cLH" = (/obj/machinery/button/remote/blast_door{desc = "A remote control-switch for the engine radiator viewport shutters."; id = "EngineRadiatorViewport"; name = "Engine Radiator Viewport Shutters"; pixel_x = 25; pixel_y = 0; req_access = list(10)},/obj/machinery/atmospherics/pipe/manifold/visible/purple{dir = 4},/obj/machinery/meter,/turf/simulated/floor/plating,/area/engineering/engine_room)
"cLI" = (/obj/machinery/button/remote/blast_door{id = "EngineVent"; name = "Reactor Ventillatory Control"; pixel_x = -25; pixel_y = 0; req_access = list(10)},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/engineering/engine_room)
-"cLJ" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_outer"; locked = 1; name = "Engineering External Access"; req_access = list(10,13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
-"cLK" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access = list(13)},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/solar/port)
-"cLL" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "robotics_solar_inner"; locked = 1; name = "Engineering External Access"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLM" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "robotics_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "robotics_solar_pump"; tag_exterior_door = "robotics_solar_outer"; frequency = 1379; id_tag = "robotics_solar_airlock"; tag_interior_door = "robotics_solar_inner"; layer = 3.3; pixel_x = 0; pixel_y = -25; req_access = list(13); tag_chamber_sensor = "robotics_solar_sensor"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "robotics_solar_sensor"; layer = 3.3; pixel_x = 12; pixel_y = -25},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/decal/warning_stripes,/turf/simulated/floor/plating,/area/maintenance/portsolar)
-"cLN" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; layer = 3.3; master_tag = "robotics_solar_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/portsolar)
-"cLO" = (/obj/machinery/door/airlock/engineering{name = "Aft Port Solar Access"; req_access = list(10)},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLP" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable,/obj/machinery/camera/network/engineering{c_tag = "Solar Maintenance Aft Port"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/portsolar)
"cLQ" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/camera/network/engineering{c_tag = "Solar Maintenance Aft Port Access"; dir = 1},/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/engi_engine)
"cLR" = (/obj/machinery/camera/network/engine{c_tag = "Engine Core South"; dir = 1},/turf/simulated/floor/engine/nitrogen{dir = 8; icon_state = "warnplate"; name = "plating"},/area/engineering/engine_room)
"cLS" = (/obj/effect/landmark{name = "carpspawn"},/obj/structure/grille/broken,/obj/structure/lattice,/turf/space,/area/space)
"cLT" = (/turf/space,/area/skipjack_station/southwest_solars)
+"cLU" = (/obj/item/frame/light,/turf/simulated/floor/plating,/area/medical/genetics)
+"cLV" = (/obj/item/frame/light,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "floorgrime"},/area/medical/genetics)
+"cLW" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "engineering_shuttle"; pixel_x = 0; pixel_y = 25; req_one_access = list(13,11,24); tag_door = "engineering_shuttle_hatch"},/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
+"cLX" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/constructionsite/station)
+"cLY" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/machinery/camera/network/exodus{c_tag = "Primary Hallway Starboard - Central"; dir = 1},/obj/machinery/light,/turf/simulated/floor,/area/hallway/primary/starboard)
+"cLZ" = (/obj/machinery/door/window/eastleft{name = "Containment Pen"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/rnd/xenobiology)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7444,135 +7445,135 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaaaaaaaauaauaauaauaauaauaauaauaauaaaaaaaauaauaauaauaaaaaaaaaaaaaaaaafaaacKraazaavaafcKraazaavaaacKraazaavaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaabhabhabhabhabhabhabhaafaaaaayaaUaaVabkaaVaaEaaVaaWaaXaaYaaZabaaayabbabbaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaamaaIaafaaacKraazaavaafcKraazaavaaacKraazaavaafaaaaaaaacaaaaafaafabcabdabdabdabdabeabfaaaaaaabhabvabvabmabvabvabhaaaaafaayabiabjaaXabjaaXabjaaXaayablaaZabyaayabnaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaaaaafaaaaafaafapsaafaafaafapsaafaaaaafapsaafaaaaaaaaaaaaaaaabqabrabsabtabuabzabwabxabfaafaaaabhabBabAaceabCacfabhaaaaaaabDabEabFabGabHaaEabFaaEabIabJabKabLabPabNabOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaIaafaqMaqbapTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTarBaqbaqbabWabYabXaccabZacaacbacpacdacuacuacuabhabhacgacyacAabhabhachaciacjackaclacmacnacmacoackackackaczacqacracsactaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaafaaLaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaaaaafaaaaafaafapjaafaaaaafapjaafaaaaafapjaafaaaaaaaaaaaaaaaabqabracvacwacxacBabdacCacuacuacFacDacWacJadfacYacuacuacGacHacIadnacKacLacMacNacOacPadmacQacRacSacracsabbabbabbabbabbabbaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaamaaIaafaafcKrapgaavaaacKrapgaavaaacKrapgaavaafaaaaaaaaaaaaaafaafacUabdabdabdabdacVacuadoadpadpadpadpadfadpadsadradaacQadbadcaddadeacMadqacQacQacQacQadgadhackadiadjabbadkadtaduabbaaLaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaacKrapgaavaafcKrapgaavaaacKrapgaavaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaabfacVacuadzadFadCadKadGadSadOadWadradaacQadvadcaddadwadxadyacQadMadMadMaddadAacradBadladXadladlaicadXaaLaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaIaafcKrapgaavaaacKrapgaavaaacKrapgaavaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaadDadEacuadYadpadpadpadpadfadpaecadradaacQadvadHadIadJaefadLadUadNadNadNadVadPacradQadlabbadRaehaicabbaaLaaLaafaaaaafaaaaaLaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaIaafcKrapgaavaaacKrapgaavaafcKrapgaavaafaafaafaaaaafaafaaaaaaaaaaaaaaaadTadEacuacuaeqaeoaevaeuaezaexacuacuaeBacQadbaebaddadZaeaadyadUadNaebadNaetaedacradQaeeabbabbabbabbabbaaLaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaafaafaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaqaafcKrarDaavaaacKrarDaavaaacKrarDaavaafaaaaafaafaafaaaaaaaaaaaaaaaaaaadTaegacuacuacuacuacuacuaePacuacuacuaeiaejaekaelaemaenaeRaepaeMaeraesaerafAaeTacradBafaabbaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaewadEafeaeyaflaaTaeAafmaeCaeDaeEaeFaeGaeHaeIaeHaddadZaeJaeKaeLaeLafBaeLaeNaeOafyaeQafHabbaeSaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauabgaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIafIaamaamaamaamaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafabfadEaeUaeVaeWaaTaeAaeAaeXaeYaeZaeFafLafbafcafdaddafMaffafgacQacQafhacQafiafjacrafkageabbaggafnafoafoafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaacaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabfabfabfabfadEafqafrafsaaTaftafuafvafwafxagqafzafNafOafNafCafDadxafEafFacQafhacQafGagragsafJafKagtadlaguaghagxafPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTagHagdagfagKahiaeFagiagjagkaglagmagnagoagpahtahpahGahzahJagpagvagwahPabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaIaafaqMaqbapTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTaqTarBaqbaqbaqFapHabXaqDaqvacaacbaobacdacuacuacuabhabhacgacyacAabhabhachaciacjackaclacmacnacmacoackackackaczacqacracsactaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaaafaaLaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaaaaafaaaaafaafapjaafaaaaafapjaafaaaaafapjaafaaaaaaaaaaaaaaaabqabracvacwacxacBabdacCacuacuacFacDacWacJadfacYacuacuamaamdanoadnamEamQacMacNacOacPadmacQacRacSacracsabbabbabbabbabbabbaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaamaamaaIaafaafcKrapgaavaaacKrapgaavaaacKrapgaavaafaaaaaaaaaaaaaafaafacUabdabdabdabdacVacuadoadpadpadpadpadfadpadsadradaacQadbadcaddanpacMadqacQacQacQacQadgadhackadiadjabbadkadtaduabbaaLaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaacKrapgaavaafcKrapgaavaaacKrapgaavaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaabfacVacuadzadFajoadKadGadSadOadWadradaacQadvadcaddadwadxadyacQadMadMadMaddadAacradBadladXadladlaicadXaaLaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaIaafcKrapgaavaaacKrapgaavaaacKrapgaavaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaadDadEacuadYadpadpadpadpadfadpaecadradaacQadvadHadIadJakEadLadUajtajtajtadVadPacradQadlabbadRaehaicabbaaLaaLaafaaaaafaaaaaLaafaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaIaafcKrapgaavaaacKrapgaavaafcKrapgaavaafaafaafaaaaafaafaaaaaaaaaaaaaaaadTadEacuacuaeqaeoaevaeuaezaexacuacuaeBacQadbaebaddadZaeaadyadUajtaebajtaetaedacradQaeeabbabbabbabbabbaaLaaaaaaaaaaaaaaaaaaaafaafaafaaaaaaaafaafaaLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaqaafcKrarDaavaaacKrarDaavaaacKrarDaavaafaaaaafaafaafaaaaaaaaaaaaaaaaaaadTaegacuacuacuacuacuacuaePacuacuacuarrarsartaelaemaenarwaepaeMarCasDarCafAaeTacradBafaabbaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaaaaaaafaafaafaaaaaaaafaafaaaaaaaafaafaaaaaaaaaaaaaaaaafaaaaewadEaeWaeyarcaaTaeAafmaeCaeDaeEaeFaeGaeHaeIaeHaddadZaeJaeKaeLaeLafBaeLaeNaeOafyaeQafHabbaeSaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauabgaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIafIaamaamaamaamaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafabfadEaeUaeVafeaaTaeAaeAaeXaeYaeZaeFafLafbafcafdaddargaffafgacQacQafhacQafiafjacrafkageabbaggafnafoafoafpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaacaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfabfabfabfabfabfabfabfabfabfabfabfadEafqafrafsaaTaftafuafvafwafxagqafzafNafOafNafCaqLadxafEafFacQafhacQafGagragsafJafKagtadlaguaghagxafPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRafSabfafTafUafVafWafXafYafZafZafZafZafZafZagaagbagcagbaaTagHagdagfagKahiaeFagiagjagkaglagmarbagoagpahtahpahGahzahJagpagvagwahPabbadlagyafoafoagzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaauaauaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaabfagAagBafZafZafZafYafYafZagCagDagDagDagDagDagDagDagDagDagDahRaaTagFagGahUagIagJaeFahNagLagLagLaddagMagNagOagPagQagRagQagPagSagvagTadlabbabbaeSaeSaeSaeSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWahaahbahcahdaheahfahgahhahXahjahkahmahlahnahnahnahnaddahoaigahqahrahsahQahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaaaaaaaihaaaaaaaaaaihaaaaaaaaaaaaaaaaihaaaaaaaaaaihaaaaaaaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRahAabfahBadEagWahCahDahEahFaioahHagDagZahIahFaixahKahLahLahMaiiahOaiLacXacXacEacXaikaiWahSacQacQaebaddahTajaahVahWajdahYahZaiaaibagvahxaicabOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaaaaihaihaihaihaihaihaihaaaaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieaifabfajeadEagWajjaimaijaipailaisagDagZahIainagWajkahLaizaiqahKahOairaiFacXaitacXacXaiuacZahSacQacQaddaiwajmaiyagPagPajnagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEakfaiGaiHaiIahFagDaiJaiKajoagWaiMaiNaiOajraiPaiQaiRaiSaiTacEaiUaiVaeFajtaiXaiYaiZakNakEajcajxakVajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauaauaauaauaauaauaauaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagUagVagWagWagWagWagWagWagWagDagXagYagZagWaqGaqHahcahdaheahfahgahhahXahjahkahmahlahnahnahnahnaddahoaigahqahrahsahQahuahvahwagvahxahyaboaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaaaaaaaihaaaaaaaaaaihaaaaaaaaaaaaaaaaihaaaaaaaaaaihaaaaaaaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfafQafRahAabfahBadEagWaejaeiahEahFaioahHagDagZahIahFaixahKahLahLaefaiiahOaiLacXacXacEacXaikaiWahSacQacQaebaddahTajaahVahWajdahYahZaiaaibagvahxaicabOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaaaaihaihaihaihaihaihaihaaaaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaeaaeaaeaaeaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadDaidaieadCabfajeadEagWajjaimaijaipadNaisagDagZahIainagWacLahLaizacZahKahOairaiFacXaitacXacXaiuadeahSacQacQaddaiwajmaiyagPagPajnagPagPaiAagvaiBaiCactaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaewagbagbaiDabfagbadEagWaiEakfaiGaiHaiIahFagDaiJaiKacIagWacHacGaiOajraiPaiQaiRacKaiTacEaiUaiVaeFacpaiXaiYaiZakNaccajcajxakVajfajgajhagPajiagvahxabbabbabbabbaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfabfajAabfabfajBajlagWagWajIagWagWakkagWagWagWakAagWagWajpajsakFantakRajuagWajvajwakWajyajqagWagWajzalealaagWagWagWagpajCagpagpagpagpagpagvahxabbajDajEaboaaaaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHalfajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeajbakgajzakhakiakjalnaklakmaknakoakpalqakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzalrakBakCakDakXalvakwakGakwakwakHakIakJakKakLakMalxakOakPakJakQalNakSakTakUalbalPalCakYakoalIabbalOamaactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalZalQagWalgalhahLalialjagWacTamoacTagWabVamsabUagWalpamuamtalsagDaltaluamxalwamyagWabTabSabSabRagWalBamcalDalEalFalGalHakoamAanQamDanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEamEalMalMamHamFamMamJalRahKalSaljagWalTalUalValWalXalYamNamOahKambahKamPamdameameamfamgamhamiamjamkamlammakoamnamUampamqalDalDamrakoadQanQamvawKamwaaaaaaaaLaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamWamBamCamZagWankalRaljanlamGagWamRamIanmalWamKamLannanpanoanPamQanaamSamgamgamfamgamTaoWamVanfamXanhakoaoeanWalDamqalDalDanbakoancandaneaocangaafaaLaafaafaaLaafaafaafakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaofagWagWagWagWagWagWaohaosaojaojaojaojaotaoCaotanraoQaoGaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOaoPapqanRanSaaaaaaaafaaaaafaaLaafaacakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaoZagWaodapdalKaogappaoiapDaokaolaomaonaooaonaopaoqaoraonaoOapHamgamgaouaovaowamiaoxaqgamXaoyanGaozaoAaoBaqqaoDaoEaoFanGaqCanQanQanQanQaoIaoJaoHaoLaqJaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalJaaaaaaaaaaafaaaaaaaaaaamaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcaqPapeapfaqXaphapiaoMaonaonapkaplaonapmapnaoraonapoaonaoNapEapramgamfamgamTaraamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapLapGapFapPaoHaoHarjaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapUapMagWalgapNalKapOapVapQapRaokapSaqmaqcaqpapWapXapYapZaqaanUaqNaqdaovaqeaovaqfarnaqhaqiaqjaqkanGaqlaqWapyaqnaqoarlaqoaroaqraqsapFaqtaquapFaqvaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalkaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWarvalRagWalWalWalWaqDaqEapkaqFaqGaqHaonaqIarwaqKaqLanyarMaqOaryaqQaqRaqSanxaqUaqVarQamVanGarzaqYaqZarCarbarcardanGarearfapFaqtaqtapFargaoHarhariarFaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaabgaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarkaqBagDaobarHagWarmarOalKaogarPaoiaokarparqarrarsartaonarualWarZarSarxalLasnarAasBamzasOarEasRarGasWamjanGanGarIanGanGanGanGanGanGarJarKarLasaasaapFarNaoHaoHasXaoHaoHaaaaaaakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzalrakBakCakDakXalvakwakGakwakwakHakIakJakKakLakMalxakOakPakJakQalNakSakTakUalbalPalCakYakoalIabbalOabZactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalZalQagWalgalhahLalialjagWacTamoacTagWabVamsabUagWalpamuamtalsagDaltaluamxalwamyagWabTabSabSabRagWalBamcalDalEahMalGalHakoamAanQamDanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabWalMalMamHamFamMamJalRahKalSaljagWalTalUalValWalXalYamNamOahKambahKamPabYameameamfamgamhamiamjamkamlammakoamnamUalFamqalDalDamrakoadQanQamvawKamwaaaaaaaaLaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamWamBamCamZagWankalRaljanlamGagWamRamIanmalWamKamLannaiNaiSanPaiManaajkamgamgamfamgamTaoWamVanfamXanhakoaoeanWalDamqalDalDanbakoancandaneaocangaafaaLaafaafaaLaafaafaafakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfaofagWagWagWagWagWagWaqqaqXagWagWagWagWaoRaoSaoRalWaoTaoUapealWapfapiaplanzanAamgamgamfanBanCamiampanEamXanFanGanHanIanJanKanLanManNanGanOaoPapqanRanSaaaaaaaafaaaaafaaLaafaacakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaekaoZagWaoCapdalKaogappaoiapDaokaolaonaonaooaonaopaoqaoGaoMaoOaiqamgamgaouaovaowamiaoxaqgamXaoyanGaozaoAaoBaoQaoDaoEaoFanGaqCanQanQanQanQaoIaoJaoHaoLaqJaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalJaaaaaaaaaaafaaaaaaaaaaamaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcaqPaohaodanvanramSaomaosaosaotaojaonapmapnaoraonapoaonaoNapEapramgamfamgamTaraamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapLapGapFapPaoHaoHarjaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapUapMagWalgapNalKapOapVapQapRaokapSaqmaqcaqpapWapXapYapZaqaanUaqNaqdaovaqeaovaqfarnaqhaqiaqjanDanGaqlaqWapyaqnaqoarlaqoaroaqraqsapFaqtaquapFailaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalkaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWarvalRagWalWalWalWahbaqEapkahCahDaqkaonaqIagnaqKahaanyarMaqOaryaqQaqRaqSanxaqUaqVarQamVanGarzaqYaqZafDaflafMardanGarearfapFaqtaqtapFaifaoHarhariarFaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaabgaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarkaqBagDaekarHagWarmarOalKaogarPaoiaokarparqaesaeRaeraonarualWarZarSarxalLasnarAasBamzasOarEasRarGasWamjanGanGarIanGanGanGanGanGanGarJarKarLasaasaapFarNaoHaoHasXaoHaoHaaaaaaakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLasYaaLaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzataaqBagDarRapcatiarTarUatIapharWaloaonaonarYasFasyasMaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslatQatJasoasoaspaspasqasrassastastasuasvasvaswasxatXaszaqsaaaaafaafaafaaaaaaaafaafaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasAauiasAaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCasbapbagDapUapMagWasDasEalKapOasPaoiasGasGasHasIaonasJaonasKalWasLatgauoathauuarAasQauvasSarEasTasUasUasVauSasVavCavbasZasZasZasZasZasZasZasZasZasmavFatbatcaoKatdateatfaaaaafatPatratjatjatjatjavRatjatjatjatjatUaafaaaaaaaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatWatqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHavTavUatKatLatMatNatOatPatPatPatPatPatPatPatPatPatPatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTawiatTatSatVawnatVatSaafatqawvatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhawMaonapnaonasJaqEaujaukaulawRaunauKauparAauqaurausarEatBasZauLaxdauMatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauHauJauwauOauPaxsatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTavmatTauNatVavyatVauNauQauRaxuauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWaxwavzaonavdaveaveavfavgaveavhaviavjarAavkauravlarEatBasZavAavoavJatCawravqatFatGauzauAavravsavtatMatNavuavvauGauHauHauHauJavwavQawfavVatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBaxyavDauNavEaxAavGauNavHavIaxCavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaawkaxGavSayqaxOawoavWavXanXaaaaaaalWalWalWavYavZawaalWawbawcawdaweawpawgaukawhawxautawyawlarAawmaurayzarEatBasZawzawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNayNawwauGauHauHauHauJawAavxawfaykatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaayOaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaaaySaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPaxGawQazgaxOawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawBaxjawCatCaxVavnazpaxcaxfaxeaxhaxgaxhaxiaxkaxlaxmaxnaxoaxoaxoaxnaxmavxawEawDatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaazoazBazoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNazFaxxatSauNazUaxxatSauNaAbauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaAraxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaAvaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaAHaxPaxQaxRaAHavpasZaxSawjcfSatCaxVaxXaxXaxXaxZaxYayaawLaxXavqaydayeayfaygayhayhayhayhawXavxawEawDatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaAuaBaaAuaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoaBcayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyaBkayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLaBwayLayMayLayLayLarAaBEayPayQarEaAiasZcfSaycaxUatCayUayTayWaxpayYayXayYaxqayTazaazbazcazdazeazdazdazfaxraBOaxtaxTaxvatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaBuaBvaBQaBxaByaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwaCeauNavHauRaafaafaaaaaaaaaaaaaaaaafazDazEaCiazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTaCtazVazWazXazYazZaAaaCDazTaAcarAaAdayPayQarEaAiasZaybaAeauMatCaxWaxXaxXaxXaxXayiayjaAlaAmaAnaxkaAoaylaApaApaApaAqayVatPayZatPatPatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaCwaCHaCyaCvaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNavHauQauQaAEauUauUauUauUauVauQaAFaAGaCJaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaAiasZawzaAgaAhaBbayRaBdaBeazhaBgaBhaBiaBjaBjaCLaBjatPaBlaBmaBnaBoaBpaBraxvaziazkazjatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaacaaaaaaaafaaaaCvazlaDAaDBaCvaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaDcaBFaBBawHaBGaBHaBIaBJaBKaBLavHavHavHavHavHavHavHavHaDnaBPaAFazmaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaDxaCfaCgaChaCfaDyaCjazTaCkarAaAdayPaClarEaJCasZaznaAYazCatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaDQatPatPaAfaAkaAjatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaEXaEYaDYaCvaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaEeaCIaAsaAFaCKaEvaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbaECayLayLayLarAaAdayPayQarEaAiasZaAtaEMauMatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaESaDoaDpaDqaGwaDsatPatPatPaAZatjatjatjatjaEVatjatjatjatjaBfaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaCvaFhaGyaCvaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaFEaBLaDRaDSaDTaDUaDVaDWaCEavHaDXauQaAFaAFaFGaDZaCMaEaaEbaEcaEdaFIaEfaEgaEhaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaFSaEwaCfaExaEyaATaEzaEAaEBaEBarAaAdayPayQarEaAiaCmaCmaCmaCmaCmaEHaEIatEaEJaEKaEKaELaFZaEKaENaEOaBjaEPaEQaERaGfaETaCnaDsaaaaafaafaafaaaaaaaafaafaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaDCaBsaBqaDCaBtaCpaGkaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaGqaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkaFlaFlaFmaFnaFoaFpaFqaFlaFlaFraFsaFtaDPayuaBLaFvayxaBMaCxaBMaBNaGravHaFuaGxaFxaGHaFzaDfaGPaFJaFKaFLaFLaFLaDraFLaFLaFNaFOaCMaaaaBYaDtaElaFQaEnaFRaBYaaaazJazOazPaGVaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYaHIazTaGaarAaGbaGcaGdarEaAiaDeaDvaDuaCoaDeaHJaDzaHYaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaIcaDpaIkaIhaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaDCaDCaDCaDCaDCaEZaEWaFdaFcaFwaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaIlaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPayuaBLaInaFAaGRaGSaGTaGUaCEaFBaFDaFCaFCaFCbazaIzaFCaHcaFLaFLaFLaFLaFLaFLaFLaFNaHdaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaFPaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaGuaIDaEUaGvaDwaIIaGzaGjatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaIZaDpaJsaJjaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHVaDsaDsaDsaDCaGBaGAaGCaGCaGLaGJaDCaDCaJwaDCaIdaIeaIfaIgaGFaJBaGFaIiaIjaJHaKjbinaKlaIoaIpaIqaKHaIsbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaIwaFlaFlaDKaFlaFMaFlaFMaIxaFMaIyaFMaFlaGMaGNaGOaDPaFFaIAaIAaKMaICaKPaICaIAaIAaIEaIFaFCaGQaFHaGWaHkaFCaIKaILaIMaFLaFLaHRaFLaIOaIPaIKaCMaaaaBYaBYaIQaHSaIQaBYaBYaaaazJazOazPaISaITaIUaFTaIVazPaIWaIXayLaIYazTaKQaEwaCfaJaaEyaATaJbaJcazTaJdaJeaJfaJgaJhaMbaKVaCuaCuaCuaCuaCuaHUaHTaJlaJmaJnaBjaJoaBjaJpaBjaJqaBjaJraGpaKXaJtaGsaGsaDqaJvaDsaDsaKYaDsaDsaJxaDsaGsaJyaGsaGsaGsaJzaHZaHXaHWaIaaLcaIraIbaIbaIbaIRaINaIgaJIaJJaLdaJkaJMaJNaIgaJOaJPaGFaJQaJAaJSaJTbinaJUaIoaJVaLeaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPaGYaGXaHaaGZaHbaHbaIBaLiaIHaIGaIJaLkaJZaJYaJGaKaaFCaIKaKmaKnaKoaKpaIKaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPaKxaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaLmaKIaKJaKKaKLaJeaEDaKNaKOaLYaEEaKRaaaaaaaJlaKSaJKaMcaJlaJLaJnaJnaJnaKWaJnaJnaJnaBjaDpaMvaDpaDpaDpaDpaMwaDpaKZaLaaLbaMEaMVaMFaLfaLgaLhaLfaLfaLfaLfaLfaMXaLfaLfaLfaLfaLfaLfaLfaLfaJRaIgaLjaJWaLlaEFaKbaLoaIgaLpaKTaGFaLraLsaLtaJTaNcaJUaIoaJVaIoaKUaLwaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkaFlaFlaFlaLAaFlaFlaLBaFlaFlaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaNAaKuaKuaLZaMaaLZaJeaJeaMbaNGaJeaJeaJeaJeaMdaMeaNXaNPaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaLqaLnaJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaOiaOoaLvaMyaMfaKZaMAaMBaMCaMCaMDaLfaOpaOqaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaJRaIgaMPaMgaMRaMSaMqaMUaIgaOsaMWaOCaMYaMraNaaNbaGFaGGaOHaJVaIoaMxaNeaNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasAauiasAaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCasbapbagDapUapMagWaZtasEalKapOasPaoiasGasGasHasIaonasJaonasKalWasLatgaZuathauuarAasQauvasSarEasTasUasUasVauSasVavCavbasZasZasZaDoasZasZasZasZasZasmavFatbatcaoKatdateatfaaaaafatPatratjatjatjatjavRatjatjatjatjatUaafaaaaaaaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatWatqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHaEzavUatKatLatMatNatOatPatPatPatPatPatPatPatPatPatPatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaamaaaapIapIapIapIapIaafalJaafapIapIapIapIapIaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaihaihaihaihaihaihaihaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTaLAatTatSatVaLBatVatSaafatqawvatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhawMaonapnaonasJaqEaujaukaulauKaunauLauparAauqaurausarEatBasZauMaxdavAatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauHauJauwauOauPaxsatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaaaaafaaaaafaafaaaaaabepaaaaaaaafaaaaaaaafaaaaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNatTavmatTauNatVavyatVauNauQauRaxuauTauUauUauVauQauQaafaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaaaaaaanXanXanXauWanXanXapbaucanXaaaaaaalWauXalWauYauZavaalWaZYavzaonavdaveaveavfavgaveavhaviavjarAavkauravlarEatBasZavJavoawxatCawravqatFatGaGVauAavravsavtatMatNavuavvauGauHauHauHauJavwavQawfavVatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaamaamaaIaaaaaaaafaaaaaaabpaaaaafaafaafaafaaIaaIaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNavBaxyavDauNavEaxAavGauNavHavIaxCavKavLavMavNavOauQaaaaaaaaqaaaapJapJapJapJapJaafbeSaafapJapJapJapJapJaaaaaIaaaaaaaaaaaaaaaaaaaaaaaaawkaxGavSayqaxOawoavWavXanXaaaaaaalWalWalWavYavZawaalWaYJaYNawcaweawpaYHaukawhawyautawzawlarAawmaurayzarEatBasZawBawUawYaxaaxbawZatFatFatFawsawtawuatFatFatNayNawwauGauHauHauHauJawAavxawfaykatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaYxaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaauNawGawHawIauNawGawHawIauNawJavHavHavHavHavHavHavHasAaaaaaaaaIaaaaafaaaaafaafaaaaaaaZhaaaaaaaafaaaaaaaafaaaaaIaafaaaaaaaafaafaaaaaaaafawPaxGawQazgaxOawSaucawTanXaafaaLcqTatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxatxarAawVaurawWarEatBasZawCaxjawRatCaxVavnazpaxcaxhaxeaxhaxgaxfaxiaxkaxlaxmaxnaxoaxoaxoaxnaxmavxawEawDatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaafaafaafaaaazoaYUazoaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaatSauNazFaxxatSauNazUaxxatSauNaAbauNauNauNauNauNavHatqaaaaaaaaIaaIaaIaaaaaaaafaaaaxBaZnaxBaafaafaafaafaaIaaIaaIaafanXanXanXanXaxDaxEaxEaxFanXanXanXanXaAvaucaucanXaxHaxIanXanXaxJaxKaxLaxMaxMaxMaxMaxMaxMaxMaxMaxNaxMaxMaxMaxMaxMaAHaxPaxQaxRaAHavpasZaxSawjcfSatCaCJaxXaxXawLaxZaxYayaaxpaxXavqaydayeayfaygayhayhayhayhawXavxawEawDatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaAuaBaaAuaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaynayoaypayoaBcayoayrayoaysaytayvayvayvayvaywauNawNatqaaaaafaafaaaaaaaaaaaaaafaaaayyaBkayAaafaaaaafaaaaaaaaaaaaaaaanXayBayCayDayCayCayCayCayEayCayCayFayGayDayHayIaxMaxMaxMaxMaxMaxMayJayKayLayLayLayLayMayLayLaZsayLayMayLayLayLarAaBEayPayQarEaAiasZcfSaycaxUatCayUayTayWaxqayYayXayYayiayTazaazbazcazdazeazdazdazfaxraBOaxtaxTaxvatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaafaBuaBvaZraBxaByaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqazrazsaztazuazvazwazxazyazwazzazAazwazwaCeauNavHauRaafaafaaaaaaaaaaaaaaaaafazDazEbdHazGazHaaaaafaaaaaaaaaaaaaaaanXazIanXazJazKazLazLazLazMazLazLazLazNazJazOazPazPazPazPazPazPazPazQazRayLazSazTbzzazVazWazXazYazZaAabeTazTaAcarAaAdayPayQarEaAiasZaybaAeavAatCaxWaxXaxXaxXaxXawLayjaAlaAmaAnaxkaAoaylaApaApaApaAqayVatPayZatPatPatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaCwbfyaCyaCvaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafauNaAwaAxaAwaAyazsazsaAzaAwaAxaAwaAAaABaACaADauNavHauQauQaAEauUauUauUauUauVauQaAFaAGbfAaAIaAFanXanXaxHaAJaxIanXanXanXazIaAKazJaaaaafaaaaafaaaaafaaaaafaaaazJazOazPaALaAMaANaAOaAPazPazQaucayLaAQaAQaARaASaATaAUaAVaATaAWaAXazTaAcarAaAdayPaDdarEaAiasZawBaAgaAhaBbayRaBdaBeazhaBgaBhaBiaBjaBjaCLaBjatPaBlaBmaBnaBoaBpaBraxvazibguazjatRatRatRatRatRatRatRatRatRatRavcaafaaaaaaaaaaaaaaaaacaaaaaaaafaaaaCvazlaDAaDBaCvaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaBzatSaBAawHaBBaBCaBDaDcaBFaBBawHaBGaBHaBIaBJaBKaBLavHavHavHavHavHavHavHavHaDnaBPaAFazmaBRaBSaAFaBTaBUayCayCayCayCayCaBVaBWaBXazJaafaBYaBYaBYaBYaBYaBYaBYaafazJazOazPaBZaCaaCbaCcaBZazPazQaCdayLayLayLayLaDxaCfaCgaChaCfbKoaCjazTaCkarAaAdayPaClarEaJCasZaznaAYazCatCaxWavqatEaBjaBjaBjaBjaBjaCqaCraCsaBjatPatPatPatPaDQatPatPaAfaAkaAjatRatRatRatRatRatRatRatRatRatRaumaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaEXaEYaDYaCvaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaazqaAxaCzaCAaCAaCAaCAaCBaAxazqaaaaBIaCCaxzaBLaCEaCEaCEaCEaCEaCEaCEavHaCFaCGaAFaEeaCIaAsaAFaCKaEvaCKaCKaCKaCKaCKaCKaCKaCKaCMaaaaBYaCNaCOaCPaCQaCRaBYaaaazJazOazPaBZaCSaCTaCUaBZazPazQanXayLaCVaCWaARaCXaCYaCZaDaaDbcfwayLayLayLarAaAdayPayQarEaAiasZaAtaEMavAatCaDgavqatEaDhaDiaDjaDkaBjaCqaDlaCsaBjaDmaESbgIaDpaDqaGwaDsatPatPatPaAZatjatjatjatjaEVatjatjatjatjaBfaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaCvaCvbgHaGyaCvaDCaDDaDEaDCaDCaDCaDCaDCaDCaDCaDFaDGaDGaDGaDHaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaDIaDJaDKaDJaDJaDLaDMaDJaDJaDKaDNaDOaBIaDPaFEaBLaDRaDSaDTaDUaDVaDWaCEavHaDXauQaAFaAFbaNaDZaCMaEaaEbbcCbbTbbxbaCbafbacaEiaEjaCMaafaBYaEkaElaEmaEnaEoaBYaafazJazOazPaEpaEqaEraEsaEtazPazQaEuayLazSazTaFSaEwaCfaExaEyaATaIVaEAaEBaEBarAaAdayPayQarEaAiaCmaCmaCmaCmaCmaEHaEIatEaEJaEKaEKaELaFZaEKaENaEOaBjaEPaEQaERaGfaETaCnaDsaaaaafaafaafaaaaaaaafaafaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaDCaBsaBqaDCaBtaCpaGkaFdaFdaFdaFdaFeaFfaFgaFgaFgaFgaFgaFgaFgaGqaFiaFjaafaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaDIaDNaDJaFkawiaFlaFmbIraFoaFpbHfaFlawnaFraFsaFtaDPayuaBLaFvayxaBMaCxaBMaBNaGravHaFuaGxaFxaGHaFzaDfaGPaFJaFKaFLaFLaFLaDraFLaFLaFNaFOaCMaaaaBYaDtaElaFQaEnaFRaBYaaaazJazOazPbopaFTaFUaFTaFVazPazQaFWayLayLayLayLaFXaCfaCgazTaCfaFYbcEazTaGaarAaGbaGcaGdarEaAiaDeaDvaDuaCoaDeaHJaDzaHYaGlaGmaBjaBjaBjaBjaBjaBjaGnaGoaGpaIcaDpaIkaIhaDsaDsaDsaDsaDsaDsaDsaDsaDsaFaaFbaDsaDsaFaaGtaDsaDsaaaaaaaDCaDCaDCaDCaDCaEZaEWaFdaFcaFwaDCaDCaDCaDCaDCaGDaGEaGFaGFaGFaGFaGFaGFaGGaGGaIlaGGaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraGIaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPayuaBLaInaFAaGRaGSaGTaGUaCEaFBaFDaFCaFCaFCbazaIzaFCbcTaFLaFLaFLaFLaFLaFLaFLaFNbcPaCMaafaBYaHeaHfaHgaHhaHiaBYaafazJazOazPaHjaFPaFUaHlaHmazPaHnaHoayLaHpazTaARaHqaATaHrazTaCfaFYaHsazTaHtarAaHuaHvaHwarEaGuaIDaEUaGvaDwaIIaGzaGjatEaHCaHDaBjaHEaBjaHFaBjaHGaBjaHHaGpaIZaDpaJsaJjaHLaHMaHMaHNaHOaHKaHKaHKaHKaHKaHPaHKaHKaHKaHQaHVaDsaDsaDsaDCaGBaGAaGCaGCaGLaGJaDCaDCaJwaDCaIdaIeaIfaIgaGFaJBaGFaIiaIjaJHaKjbinaKlaIoaIpaIqaKHaIsbjFaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaIwaFlaFlaDKaFlaFMaFlaFMaIxaFMaIyaFMaFlaGMaGNaGOaDPaFFaIAaIAaKMaICaKPaICaIAaIAaIEaIFaFCaGQaFHaGWaHkaFCaCDaILaIMaFLaFLaHRaFLaIOaIPaCDaCMaaaaBYaBYaIQaHSaIQaBYaBYaaaazJazOazPbdzaITaIUaFTaFTbxxaIWaIXayLaIYazTbdtaEwaCfaJaaEyaATaJbaJcazTaJdaJeaJfaJgaJhaMbaKVaCuaCuaCuaCuaCuaHUaHTaJlaJmaJnaBjaJoaBjaJpaBjaJqaBjaJraGpaKXaJtaGsaGsaDqaJvaDsaDsaKYaDsaDsaJxaDsaGsaJyaGsaGsaGsaJzaHZaHXaHWaIaaLcaIraIbaIbaIbaIRaINaIgaJIaJJaLdaJkaJMaJNaIgaJOaJPaGFaJQaJAaJSaJTbinaJUaIoaJVaLeaGGaGGaGGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaFraJXaFyaGKaFlaFMaFlaFMaFlaFMaFlaFMaFlaGMaGNaGOaDPaGYaGXaHaaGZaHbaHbaIBaLiaIHaIGaIJaLkaJZaJYaJGaKaaFCaCDaKmaKnaKoaCHaCDaKqaKraKsaKtaKuaaaaafaaaaKvaKwaKvaaaaafaaaaKuazOazPavTaKyaKzaKAaKBazPaKCaKDayLaKEazTaARaKFaKGaHrazTaLmaKIaKJaKKaKLaJeaEDaKNaKOaLYaEEaKRaaaaaaaJlaKSaJKaMcaJlaJLaJnaJnaJnaKWaJnaJnaJnaBjaDpaMvaDpaDpaDpaDpaMwaDpaKZaLaaLbaMEaMVaMFaLfaLgaLhaLfaLfaLfaLfaLfaMXaLfaLfaLfaLfaLfaLfaLfaLfaJRaIgaLjaJWaLlaEFaKbaLoaIgaLpaKTaGFaLraLsaLtaJTbkuaJUaIoaJVaIoaKUaCiaLxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaLyaLzaDJaFkawiaFlaFlaFqaFlaFlaFnaFlawnaFraLCaLDaDPaLEaLFaLGaLHaLGaLGaLGaLGaLGaLIaLJaFCaFCaFCaFCaFCaFCaLLaLMaLNaLOaLOaLOaLOaLPaLQaLRaKuaLSaLTaLTaLUaLVaLWaLTaLTaLXaKuaNAaKuaKuaLZaMaaLZaJeaJeaMbaNGaJeaJeaJeaJeaMdaMeaBwaBQaMhaMiaJeaJeaJeaJeaMjaKNaMkaMkaMlaMmaMnaMoaJlaMpaLqaLnaJlaJlaJlaJlaJlaJlaJlaJlaBjaBjaMsaMtaMuaOiaOoaLvaMyaMfaKZaMAaMBaMCaMCaMDaLfaOpaOqaMGaMHaMIaMJaMKaMLaMMaMNaMHaMJaMIaMHaMOaLfaJRaIgaMPaMgaMRaMSaMqaMUaIgaOsaMWaOCaMYaMraNaaNbaGFaGGaOHaJVaIoaMxaAraNfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaLyaDJaDKaDJaDJaDLaDMaDJaDJaDKaLzaNgaBIaNhaLEaNiaMzaMzaNkaMzaNlaIAaNmaNnaLJaNoaNpaNqaNraNsaNtaNraNuaNraNraNraNvaNraNraNwaNxaNyaNzaNzaNBaOMaNCaNzaNzaNzaNzaNDaNEaNFaQcaNraNHaNIaNJaNKaNLaNMaNLaNNaNOaQdaNQaNQaNRaNSaNTaNSaNUaNVaNWaEGaNYaNZaOaaObaOcaMkaMkaMkaOdaOeaMTaMQaOhaQxaOjaOkaOlaOmaOnaJlaQAaQyaQEaOraOtaOtaOuaMZaOwaNdaKZaOyaOzaOAaOAaOBaLfaQJaODaOEaOEaOEaOEaOFaOGaQTaOIaOJaOKaOKaOLaRbaLfaJRaIgaONaOOaNjaOfaONaONaIgaORaOSaGFaOTaOUaOVaOWaGFaIoaIoaJVaIoaGGaGGaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaOvaOgaPhaPhaOxaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaRsaQbaQbaQbaRraQbaQbaRxaQeaQfaQgaKZaQhaMCaQiaQjaQkaLfaQlaQmaQnaQnaQnaQnaQnaQoaQpaOPaQraQnaQnaQsaQtaLfaJRaIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaSoaGFaIoaIoaJVaIoaStaOQaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaSuaQFaQGaGOaQCaQHaQIaBIaSyaLEaPeaPfaQLaPhaPhaOxaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaSEaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaSHaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaImawOawOawOawOawOaItaRuaRvaRwaKZaKZaKZaKZaKZaSIaLfaRyaQmaQnaRzaRAaRBaPgaRDaREaRFaQraRGaRHaRIaRJaLfaJRaIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaGeaGgaGgaGiaSUaGhaSdaOYaLDaDPaHxaHxaSfaLDaOYaLDaHyaHAaHzaLEaSkaPiaPiaNkaPiaNlaIAaSmaNnaSnaIAaLKaLKaSZaLKaLKaLKaLKaLKaLKaSpaSqaLKaLKaLKaLKaLKaLKaSraSsaSraLKaTPaLKaNraQPaUjaSvaSwaSxaNraReaUlaMbaMbaMkaSzaKOaSAaMnaMnaSBaSBaSBaSBaSCaJeasfasNarVarXarXavParXarXarVasNawFaJeaSJaSKaSKaSKaSKaSLaSLaSMaSNaRqaRpaJlaQqaQaaQaaQaaQaaQaaQaaSQaSRaSSaSTaUOaSVaSWaSXaSYaKZaKZaVeaTaaTbaTcaTdaTeaTeaTeaTfaTgaTfaTeaTeaTeaTeaJRaIgaThaONaRLaRMaONaONaTiaIgaTjaQzaTlaGGaIoaTmaTnaToaTpaTqaIoaTraQKaGGaTtaTuaRZaTvaTwaTxaafaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaVfaVraVkaVIaVzaSgaSeaSiaShaSjaSiaTzaTyaTBaTAaTEaTCaTAaTFcozaTIaTJaTKaTLaTLaTLaTMaTLaTNaTOaIAaVLaTQaTRaTSaTTaTUaTVaTWaTXaTUaTYaTZaUaaUbaUcaUdaUeaUfaUgaUhaUeaUiaLKaLKaWoaLKaLKaLKaLKaUkaWwaLKaUmaMbaUnaSzaKOaUoaaaaaaaaaaaaaaaaaaaaaaUpaUqaUraUsaUtaUvaUuaUxaUwaUzaUyaVUaUpaaaaaaaaaaaaaaaaaaaaaaUAaSNaRqaUBaUCaUDaUEaUFaUFaUFaUFaUGaUHaUIaUFaUFaUFaUJaUKaULaUMaUNaWFaUPaUQaURaUSaUTaTfaUUaUVaRCaUXaUYaUZaVaaVbaTeaJRaIgaVcaVcaRLaRMaVdaVdaWKaIgaIgaXlaIgaGGaVgaVhaViaViaViaVjaXnaGGaGGaGGaVlaVmaVnaVoaVpaVqaafaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaVfcmVaXzaXCaDPaVsaVsaVtaVsaVsaVsaVDaVsaVsaVtaVsaVsaYEaWYaVuaVvaKdaKdaKdaKdaKdaVwaVxaVyaXGaIAaTQaTQaVAaTSaVBaTUaTUaTUaTUaTUaTYaVCaTUaTUaTUaUdaUeclraVEaVFaUeaUiaVGaVHaKeaKcaVKaUmaXIaVMaVNaVOaVPaVQaMkaSzaKOaUoaaaaaaaaaaaaaUpaUpaUpaUpaVRaSlaVTaXEaVVaSDaVXaXFaVZaSOaWbaUpaUpaUpaUpaaaaaaaaaaaaaUAaSNaRqaRpaWcaSSaSPaWeaTkaSSaTsaUWaWiaVSaWkaVWaWmaWnaQbaXNaWpaWqaWraWsaWtaWtaWuaWvaXXaWaaWyaWdaWAaWBaWCaWDaWEaTeaJRaIgaThaONaRLaRMaONaONaONaYqaWGaONaWHaGGaWIaWJaToaToaToaTqaIoaYsaGGaWfaVoaLuaWQaVoaWRaWSaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTGaGgaTHaGiaBIaBIaBIaWVaWWaWWaWWaWWaWWaWWaWWaWXaBIaBLcpSaWZaIAaXcaXbaXbaXbaYraXdaIAaIAaIAaIAaTQaXeaXfaTSaXgaTUaTUaWgaXiaXjaXkaWgaTUaTUaTUaYwaUeaXmaYxaXoaUeaUiaVGaXpaKfaXraXsaUmaXtaVPaXuaXvaXwaXxaMkaSzaKOaMmaSCaMbaXyaUpaUpaVYaXAaYyaYAaXDaXDaXEaXFaYMaXEaXFaXDaXDaXHaYVaXJaXBaUpaUpaXyaJlaXLaXMaSNaRqaRpaJlaZgaSPaXOaTkaSSaXPaXQaSSaWhaXSaTkaSSaXTaOtaXUaXVaUQaXWaZhaXYaXZaYaaYbaYcaYdaYeaWjaYgaWBaYhaWDaYiaTeaJRaIgaYjaYjaRLaRMaWlaONaONaYlaONaWzaWxaGGaIoaXRaXhaToaYfaYkaZXaWLbaOaYmaWOaZcaVoaYvaZnbaBbanaYzbaCaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDbaNaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaafaYCaYDcpKaYFaWPaYHaYHaYIaYJaYKaYLbaPaYNaYOaYPaYQaYRaYSaTSaYTaTUaTUaWgaXjaYUbbTaWgaTUaTUaYWaUdaUeaUeaUeaUeaUeaUiaVGaVGaVGaVGaVGaUmaYYaXvaYZaXvaXvaXxaMkaSzaKOaNSaNSaZaaZbaWNaUpaZdaYnaZfbaTbaSbaVbaUbaXbaWbaZbaYbbbbbabbcaZfaYoaZjaUpaWMaZbaZlaZmbbeaSNaRqaRpaWcaSSaSSaSSaSSaSSaXPaZoaSSaWhaZpaTkaSSaXTaOtaZqaXVaUQaZraZsaZtaZuaYaaYpaZwaYdaYeaWjaYgaWBaYhaZxaZyaZzbbfaZzaZzaZzaZBaZCaZDaYtaOOaZFaZGaZHaZIaGGaZJaYXaYGaToaZeaYGaIoaIoaXaaZiaVoaYuaVoaZNaZOaZPaZQaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaZSaZTaZUbjnaZWaSFaZYaZkbaaaZvbacbadbaebafaYObagbahbaibajaTSbakbalbambbhbaobapbaqbarbarbarbasbataTSbaubavbawbaxaKgbajbnZaKhbajaaaaUmbaDbaEbaFbaGbaHbaIaMkbaJbaKaMkbaLbaMbbDbcybbPbbLbaRbaQbbQaUpaUpaUpaUpaUpbcDaUpaUpaUpbbRbaQbbdbbSbbWbeobcabbibbjbbkbblbbmbbnaJlaUDaSPbboaTkaSSaZAaZEbbraZKaXOaTkaSSaXTbbtaULaXVbbubbvbbwaUQaUQaYabbxbbybbzbbAbbBaYgaWBbbCaWDbcuaZzaZLbbFbbFbbGbbHbbIaRLaRLaRLaRLaRLaRLaRLaGGbbJaXRaXhaToaYfaXhaIobbKaGGbcBaVoaYuaVoaZNbbMbbNbbOaafbcCaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbcPbcFbcZbcTbbUaSFbaabaabaabaabaabbVbaabdtaYObbXbbYbaibbZbbZbbZbbZbdKbbZbcbaTUbccbcdbcebcebcfbcgaTSaXebchbcibcjaKibdQblcaKkbcobcobcpbcpbcpbcpbcpbcqaMbbcrbcsbctbeabcvbcwbcxbbgaUpbczbcAbeeaUpaUpaaaaaaaafaafbekaaaaaaaUpaUpbezbcGbczaUpbbgbcxbcHbcIbcJbcKbcLaRpaWcaSSaSSaSSaSSaSSaGpbcMaSSbcNaSSbcObcObcObcObeBbcQbcRbcSaUQaUQaUQbeMbcUaTeaZMbcWbcXaYgaWBaYhaWDbcYaZzaZZbdabdbbdcbddbdebddbddbddbddbddbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdraVoaYubdsaZNaVobeNbbOaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbdubdvaZUbdwbdxaSFaYHbabbaaaZvbdzbbVbaabdAaYObbpbdCbaibbZbdDbdEbdFbdGbbZbdHbdIbdJaTSbeRbdLbdMbdNaTSaXebdObdPbdPbeVbdPbdPbdPbdPbdRbdSbdSbdSbdTbdSbdUaMbbdVbdWbdXbdYbdYbdYbdYbdYbdYbdZbeWbdZbdYbebbebbebbebbebbecbebbebbebbedbedbfobedaUpaUpaUpaJiaJiaJibcKbcLaRpaJlbefbegaDmbehaSSbeibcMbejbfqbelbcObcObembenaZzaZzaZzbfwaSGaSGaSGaZzaZzaZzbeqberbesbetaWBaYhaYhbeuaZzbevbewbbqaZzbeybbsbeAaYtbfxbbEbeDbcmaONaGGaIobeFbeGbeHbeFbeIaIoaIoaGGbeJaVoaYuaVoaZNbeKbeLbbOaafbfyaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbfAbeObePbeQbfWaRtaYHbeTbeUbgubdzbbVbgNbgMaYObeXbeYbaibbZbbZbbZbeZbfabbZbfbbdIbfcaTSbeRbdLbdMbfdaTSaXebdObdPbfebffbfgbfgbfhbdPbfibcVbfkbflbfmbfmbfmaMbaMkbcsbctbdYbfnbgUbfpbgWbfrbfsbftbfubdYbebbfvbgXbfvbhebhCbfvbdybebbedbfCbfDbfEbfFbfGbfHbfIbfJaJibfKbfLbfMaJlaZzaZzaZzaZzbfNbfObfPbfQaZzaZzbfRaZzaZzaZzaZzbfSbfTbfUbfVbfVbfVbhJbfXaZzbfYbfZbgabgbbgcbgcbgcbgdaZzbevbewbdBaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbgfbggbghbgibgjbgfbggaZzaRZbgkaVoaYuaVoaZNaZObglbgmaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObhKaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbeRbdLbdMbfdaTSaXebdObdPbgBbgCbgDbfgbgDbdPbfibgEbgFbgGbgHbgIbgJaMbbgKbgLbctbhLbivbgObgPbexbexbgRbgSbgTbdYbebbmIbgVbhRbhNbfzbgYbhSbebbedbhabhbbhcbeCbhTbeEbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhUbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIbhVbhXbhWbhMbidaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbitbiqbjubjqbjwbjvbjubjBbjGbjCbjObhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbeRbibbicbjQaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGbilaMbbimaSzbctbjVbiobipbfjbirbisbfBbiubjMbdYbebbiwbixbiybjYbiybgYbgebebbedbiAbiBbiCbgQbiEbgZbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjZbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZaaaaaaaaaaTSaTSaTSaTSbkkaTSbjxbdObdPbjybjzbgDbjAbkxbdPbkAbfmbkHbgGbgGbgGbjDaMbbjEaSzbctbkKbkLbgObhdbjIbjJbhfbjLblybdYbjNbkMbjPbiybkNbiybgVbkPbjSbedbjTbjUbizbjWbjWbjWbjXbkVaJibkXbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkYbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktbkubkvbewbkpbkwbkZbkybhFbewbewbkzbewbewbllbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGblmbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOblBblrblEblCbkObgrblTbkQbkRbkRbkSbkTbkUbmdbmlbmlbmAbmxbbZbbZbbZbeZbmBbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbmEbfmbmFbgGblnbgGbloblpblqaSzbctbdYbmHblsbltblublvblwblxbdYbdYbebblzblAbmUbmNblDblAbiDbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbmVaZzaZzaZzaZzaZzaZzbmXaZzbewbewblVblWbiFblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbnbaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpbnsbmjbmkbmkbnwbbZbdDbmmbeZbmnbbZbmobmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbnNbfgbmybmzblfbnRbnPbnSbgGbgGbjHbmDbnUblqaSzbnVbmGbmGbmGbmGbmGbmGbmGbnWbmGaafbebbmIbmJbmKbmLbmKbmMbjKbebaafbedbmObnXbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbohboibmWbojbmYbmZbnabolbjRbndbnebjRbopbmCbnhbnibnjbmPboKbnmbnnbnobnpbnqbnrboWbntbntbnubYfaVJblOblObpmblObZMbZMblObnzbnAbnBblObZtbpobZtblOblXblYbmbblObZnbprbZnblObnGbnHbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaabpsbnObpwbeQbnQbgrbpLbpBbpMbnTbpPbpNbjpbpSbpTbnYbnZbnwbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbfmbqcbnSbgGbgGbgGbokblpblqaSzbqgbmGbombonbncbcEbvGbotbosbotaafbebboubovbowboxboybozbnfbebaafbedboBboCboDboEbiCbiGboFaJiboGboHaRpbXHboJbngboLboMbnkbqsboPboQboRboRboSboTboUboUboVbnlboXboYboZbpabpbbnnbpcbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbqtbpnbnybppbnCbnDbpqbqxbptboobqyblOaZzbqBbpxblObpyboqbpAbqGbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbqKbgrbqQbjpbrkbrcbpQbpRbrvbrubrwbrwbrwbrxbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPbpZbqabqbbrybqdbqebqfbrCbqhbqibqjbqkbqkbrDbrIbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbrPbxsbotaafbebbebbebbebbshbebbebbebbebaafbedbqzboCbqAbsjbqCbqDbqEaJibqFaRqaRpaJibskbqHbqIbqJaJDbqLboPbqNboUboUboUboUboUboUbqObqPbslboYbqRbqSboNbnnbqUbqVbqWbsnbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbsobrdbrdbrdbrebrdbrfboObrhbribrjbsqbnIbrlbpCbrmbrnbrobsrbnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbsvbsBbsybsHbsHbthbrzbrAbgrbtkbtlbtvbtmbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbtBbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObtIbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZaHBbsbbqvbsabsebscbotbosbotaafbsibtObtKbtTbsmbtXbtKbubbsiaafbedbspbuibspbedbedbedbujaJibssaRqaRpbXHboJbngbstbsubuobqLbswbqNbsxbuxbszbsAbuTbsCbqObsDbnibsEbsFbsGbuUbnnbsIbqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNbsObsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabtbbtcbtdbnIbrqbpFbtebnMaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbuYbtibtibtibtjbtibtibgrbvabuZboAbvjbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubvqbtwbtxbtybtzbtAbfmbfmbvCbfmbfmbtCbtDbtEbtFbmGbtHbmGbmGbmGbmGbmGbvEbmGaafbtJbvFbtLbtMbtNbtMbtLbvIbtPaafbspbtQbtRbtSbvObtUbspbtVaJlbtWbbmbvZaJibtYbohbtZbuabwcbucbudbuebufbwgbuhbwlbwnbukbulbumbnibnnbunbpubupbnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbwxbplbplbsMbuybuzbuAbpvbuCbuDbuEbuFbuGbrhbuHbuIbuJbnIbuKbuLbuMbtbbpCbuNbnIbpEbpFbuObnMaaaaaaaaaaaacHOaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwZbeObxmbxmbuVbpHbuWbgnbgobuXbuWbgrbxpbjpbxvbvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibxzbvkbvlbvmbvnbvobfmbvpbgGbxDbpzbvsbvtbvubvvbmGbmGbmGbvxbvybvzbvAbvBbvwaafbpObxHbvHbvJbvKbvMbvNbxIbpOaafbspbqMbvQbxnbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbvYbxObucbyobxTbyKbwdbwebwebwfbyMcdWcdVbwjbwkbyObwmbwkbwkbwkbwkbyQbwkbwkaXKaXKaXKaXKaVJbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbqTbwvbwwbyUbwybnIbwzbwAbwBbwCbpCbwDbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbrpbzcbxabgGbgGbugbxcbvtbvubxdbxebxfbzrbzHbxibxjbxkbxlbvwaafbxrbzNbzJbzObyLbxobzPbzVbxraafbspbqwbAebuBbedbAibspbtVaJlbxwbcLaRpaJibxxbxybAobxAbxBbxCbAtbxEbxCbxFbxGbAubxFbwkbAxbxJbwkbwkbxKbxLbxMbxNbAAbxPbxQbxRbxSaXKbaybvraXKaVJbpjbxXbqZbqZbxYbxZbppbyabwsbwsbwsbsSbwtbybbwwbvDbUabTQbwwbyfbygbyhbyibpCbvLbnIbrqbykbnMaaaaaaaaaaaaaaaaafbwGbwHbrgbwJbwJbwKbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbAFbypbAFbyqbyrbwQbrJbrJbrJbysbrJbwTbrKbytbdPbdPbyubgGbrNbwXbyvbywbyxbyybyybyzbyAbyBbyCbyDbvsbyEbvPbyGbxkbyHbyIbyJbvwaafbxrbxrbxrbxrbALbxrbxrbxrbxraafbyNbyNbyNbyNbyNbyNbyNbAVaJibyPblMblNaJibwbbyRbyRbySbyTbxCbAXbyVbyWbyXbyYbyZbzabwmbzbbBqbzdbzebzfbzgbzgbzhbzibzgbzjbzkbckbaAbwubclbBsbcnbBtbzsbztbzubzvbzwbppbzxbpqbpqbzybsSbwtbzzbzAbzBbzCbzDbzAbzEbzFbzGbBwbzIbwwbwwbBxbnMbnMbzKbzLbzLbzLbzMbCJbylbymbrgbwJbrgbynbuRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaacaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbzRbrJbwQbrJbzSbzSbzSbzSbwTbrKbzTbzUbdPbBEbgGbrNbBJbzWbzXbzYbgGblnbgGbzZbAabAbbAcbAdbyEbwIbAfbxkbxkbxkbAgbvwbAhbAhbBKbAhbBRbBQbBSbAjbBUbAjbAjbyNbAkbAlbAmbAnbBXbApbAqaJibAraRqaRpaJibxbbwYbxhbAvbAwbCcbAybAzbCdbABbACbADbAEbCnbAGbAHbAIbAJbAKbAIbxtbAMbANbAObnvblUbsdbCobsgbsfbaAbPObpjbxubxUbAYbAZbAZbppbBabBbbBcbppbBdbBebBfbBgbBhbBibBjbBkbBlbBlbBmbBnbBobTHbCrbBrbCwbCAbTIbBvbCEbCIbCHbCKbwGbwJbrgbwJbwJbCLbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbCYbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbBGbgGbBHbBIbgGbCZbgFbgGbgGbyjbvsbvtbAbbAcbAdbyEbvwbBLbBMbBNbBMbBObvwbDbbDabDdbDcbDfbDebDhbDgbDjbDibBVbyNbBWbzmbBYbBZbCabCabCbbDwbAraRqaRpaJibAsbCebCebySbCfbxCbCgbChbxCbCibCjbCjbCkbwkbClbCmbwkbwkbwkbwkbwkbwkbDIbwkbwkbwmbDKaXKaXKaXKaXKbDYbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbEibCsbCtbBhbCubCvbEjbCxbCxbCxbCybCzbEkbCBbCCbCDbEpbTGbCGbErbCGbEsbEubBzbuQbuRbEwbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbCMbCNbCObrJbrJbrJbCNbrJbwTbrKbzTbCPbdPbCQbgGbrNbwXbgGbqlbCRbgGbgGbECbxcbvtbAbbCTbxcbCUbvwbCVbEKbCXbAWbxlbvwbEMbELbERbAhbEUbEUbEUbAjbEWbEVbEXbyNbDkbDlbDlbDmbDnbDobDpaJibDqbDrbDsaJibDtbEYbDvbEZbDxbDybDzbDAbyWbDBbFabCjbDDbwmbDEbDFbwmbDGbDHbFbbDJbFobDLbDMbCpbDNbDObBTbDQbDRbCpbVLbVMbDUbVAbDWbDXbDXbFrbDZbEabEbbEcbEdbEebEfbEabEgbEhbCvbFVbFFbGfbwwbwwbwwbwwbwwbGhbGgbEnbzKbzMbCJbEobGibCJbzKbzLbzMbGjbCJbGkaafcHOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGubExbGubEybEzbEAbEAbEAbEAbEAbEBbGAbEDbzTbEEbdPbEFbEGbEHbEIbEJbGDbGCbGWbGEbGvbtCbENbAbbEObEPbyEbvwbEQbHabESbBMbETbvwbBPbHibHjbAhaaaaaaaaabAjbHmbHlbFcbyNbFdbFebFfbFgbDnbDobFhaJibxwaRqaRpbHMbFjbFkbFlbFmbFnbHNbFpbFqbxCbxFbxFbHObxFbwkbFsbFtbFubFvbFwbFxbDJbFybDLbFzbFAbFBbDObFCbFDbFEbHPbVlbDXbHQbVAbFJbDXbDXbFKbFLbFMbFLbFLbFNbFObFPbFQbFRbFSbCvbHRbFUbHSbFWbFXbFYbFZbGabGbbGcbGdaafaafbCJbGebHUbHUbHVbIfbHZbIobEvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbIvbGtbGvbGwbGxbGybGzbtCbvtbAbbIAbGBbtCbtGbtGbtGbtGbtGbIBbtGbtGbtGbIDbtGbIUbIMbIXbtGbJbbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJibxwaRqaRpbHMbJqbFkbCSbGGbCWbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbJrbGXbGYbGZbJDbHbbHcbHdbHebHfbCpbUSbUfbwwbwwbwwbwwbwwbJVbwwbwwbwwbzAbKfbzAbzAbHkbBhbCubCvbHRbKobKzbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbEobCIbBybKBbKUbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbHvbHwbHxbHybGvbHzbKVbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbLabLxbLnbLzbAabAabLIbMhbLYbAabHTbAabzZbHHbKJbHWbHXbHYbMibxwaRqbDsaJlbDtbDubDtbDCbDPbxCbIbbIcbIdbIebMlbIgbIhbIibIjbIkbwmbIlbImbInbDJbDTbElbIpbIqbIrbFDbIsbItbIubCpbMpbIwbIxbIybUdbLybMqbICbMCbUcbIFbIGbIHbIIbIJbzAbIKbCubCvbMHbMFbINbIObIPbIQbIRbGabGbbISbEnbEnbEnbCJbCJbCJbMSbMPbCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaabMZaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbITbEmbIVbIWbNdbIYbIZbJabNfbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebNkbJkbJlbNqbJnbJobNBbJebJebJpbJgbJhbJibJjbJsbJtbJubJtbJvbJwbvUaJlbEtbEqbFHbGFbNLbGHbDzbHAbFibDVbxFbNQbCFbDSbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbNZbJWbObbJYbIFbJZbKabKbbKbbzAbKcbKdbKebOcbKgbKhbKibKjbKjbKkbGabGbbKlbEnbKmbOdbKnbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabKvbKwbKxbKwbKyaaaaaaaaabGtbGtbOfbKAbIVbKAbOibKCbOnbKDbKEbtCbKFbvtbKGbKHbAabKIbAabzZbHHbKJbAabKKbKLbKMbKNbKObAcbAabKPbKQbHLbKRbHLbHLbKSbKTbODbOtbKWbKXbcLbKYaRpaRpaRpaJlbOEbFlbFnbOFbJmbOGbJybJxbFIbLgbLhbLibLjbHgbDEbIkbIabIzbHhbDJbDJbLobLobLobCpbLpbLqbLrbLsbLtbCpbLubLvbIxbLwbFGbLybOHbLAbLBbLCbIFbJCbLEbKbbKbbzAbRsbLFbCvbwwbLGbLHbOIbLJbLKbLLbGabLMbLNbLObLObLObLPbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLQbLRbLSbLRbKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbLWbLXbOJbLVbLZbMabMbbGtbMcbMdbMebMfbMgbOLbOKbMjbMjbMkbtCbtCbtCbOMbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbONbtCbtCbtCaJlaJlbOQaJlaKSaMpbMraJlbKZbJXbORbGFbLdbxCbDzbLDbxCbMybMzbMAbMBbwkbOTbMDbMEbOUbMGbPubMIbMJbMKbMLbItbJObFDbFDbMMbJObCpbMNbMObMObMObMObMObMObMObMObMObMObPvbMQbMRbMRbzAbPAbMTbMUbwwbMVbMVbMVbMWbMXbMYbMVbMVbMVbMVbMVbMVbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbPCbLRbLRbNebKtbKtbLTbLTbPDbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbMsbNgbKxbNibNjbPFbNlbNmbNnbKAbNobNpbGvbPHbNrbNsbNtbGvbNubNvbNwbNxaaaaaaaaaaaabNybNzbNAbPSbNDbNCbNEbNFbNGbNHbNIbNFbNJbNKbPXbNMbNNbNObNPbPZbNRbNSbNTbNUbNUbNUbNUbDtbDtbDtbDtbMtbMtbxCbQabOabQbbMzbMvbMubOebQcbOgbOhbQdbOjbMxbMwbOmbNhbMKbOobFDbFDbNVbJObJObOobCpbMNbMObOqbOrbOsbQebOubOvbOwbOxbMObOybOzbOAbOAbzAbOBbOCbCvbzIbQgbQpbQjbQBbQubRdbQXbRvbRebRxbVFbMVbRybEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbPCbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbRAbRzbKAbOSbRDbRBbKAbRFbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbPebPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbNXbPobPpbPqbPrbPsbPtbPtbNSbRWbRJbPwbPxbPybDtbNYbLbbScbGFbGFbSgbDzbSibxCbSnbPEbSrbPGbwkbSubPIbwkbOkbPKbPLbOlbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbQYbPRbOsbOsbOsbOsbSwbMObPTbLEbPUbPUbzAbBhbPVbPWbSEbPYbPYbSMbSObSNbSQbSPbSSbSRbSSbSVbMVbQfbSWbOObQhbTgbOpbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbMsbMsbMsbKxbQnbQobTAbQqbQrbKAbKAbQsbQtbTObQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbUbbQCbQDbPfbQEbQGbQFbPfbNFbQIbQJbQKbNFbQLbQMbQNbQObQPbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbPnbGFbQVbUkbGFbPzbDzbLebRCbQZbPBbUobRcbRGbDEbIkbSpbOkbPLbPLbOlbRfbMKbRgbRhbPJbRjbRkbRlbPMbRnbPObMObOsbOsbRobOsbOsbOsbOsbRpbMObRqbLEbRrbRrbzAbRsbRtbRubUqbRwbUGbUwbUPbUObUWbURbVkbVjbVvbVmbVybREbVGbVzbRHbRIbQibRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbVObRXbRYbRZbSabSbbSbbWgbSdbSebWibNFbPtbPtbPtbPtbPtbWkbPtbPtbShbWobSjbNUbPxbSkbSlbDtbQHbLbbQVbSmbWMbPzbSobJAbJBbSqbRabSsbStbJzbFsbSvbIEbSxbRibRbbSAbSBbMKbRmbSDbWVbRjbSfbSGbXabRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbXcbXfbXebSQbXibXqbXpbXvbXubYabXxbMVbQfbYobOObSXbSYbSybTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbYtaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbTsbPfbTtbTvbTubTwbNFbSzbTybTzbYwbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbQbbLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbTTbTUbTVbRjbTWbTXbTYbRnbPObMObTZbQWbPQbYHbYzbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbYMbYSbMVbMVbMVbMVbYYbSCbVFbMVbYZbUnbOObUpbZbbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMZaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbZcbNwbUxaaabUybPcbPcbUzbUAbPfbPfbUBbPfbSFbNFbUDbSHbSTbNFbSUbSUbSUbSUbSUbSUbSUbSUbUHbUIbUJbUKbUKbUMbNUbDtbUNbSZbTxbUQbZebwabUTbUUbTMbZibTNbUTbUYbUZbVabVbbUebTPbVdbVebVgbVhbVibUlbZrbUmbRjbUCbZsbUCbRnbPObMObVnbUFbVpbVqbVrbVsbVtbVubUgbzAbZubzAbzAbVwbCxbSLbCxbVxaafbnxbZvbZzblSbVBbZBbZLbZCbZObUVbMVbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbZPbLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybVVbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbSUbUXbVfbVcbVDbVCbVEbSUcaqcaqcaqcaqcaqbTFbWjbZSbWlbWcbWdbZUbWpbxgbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWebWIbWfbWKbWLbZVbxVbMObxWcaabzlbWSbWTbWhbWSbWScanbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbnxcaxcaxbXbcaJbXdcbdcaWbXgbXhbMVbVHcbebOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmcbfbWmcbgbRScbibXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbSUbWnbWJbWHbWHbWJbWRbSUbXnbWUbWUbXocaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbAScbjbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYncbkbYpbYqbYrbYscbmbYrbYubYvbILaafbnxcbncbrbrBbVBcbtcbAcbycbDbYAbMVbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxcbJbNxbYIbYJbYKbYIbYIbYLcbLbYNbYObYPcbObXwbXzbXybYebXAbYjbWJbYybYxbYRbYQbYTcbQbYVbYUbYXbYWcaqbZhbNScbWbZjbZkbZlbZlbZmbnEbZobZpbTJbTJbZqcccbTJbTJccncceccrcaIcctbWQbZxbZyccubZybZAbZaccvbZabZAccEbYfbMNbIwbZEbXWbXVbZdccGbZJbZKbMObMObwwbwwbwwbwwbwwboIbnFbofbwwbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVccJbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamccMaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZfbZgbZgbZgbZHbZgbZgbZTbZIbYIbZYbZZbYIccQcabccScadbZWcafccYbZXcaecaccahcagcaibWJbYycajcakbYQcalbSUcaqcaqcaqcaqcaqcarbNSbDtcascatcdjcamcawcdmcaycazbTJcaocaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcapbZycaKcaLbZAcaMcaNcaObZAbXXbYfbPObIwbXYcdpbXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcdBbwwbwwcaXcaYcaucaAcavcdNcaZcbacbccdUcdTcdZcdYcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbbceccebcblcedceicefcbpcbobYIcelcbsbYIbYIcercbucbvcbwcbxceucbqbXzbXybYecbzcevbWJbWJcbBcbCbWJcexbSUcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJceCcbEbTJcbKcbMcbNceHcaEcbPceIceKcaIbZxbWQcbRbZycbScbTbZAcbUcbVcfebZAccqbYfbYbbYdbYcbYiccsccAbYccfibYkbYlcktbZDbZwbZFcktcfjbZGccCccBcfkccDccPccFcfscfmcfGcfucfmcfIcfMcfLcfRccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbPCbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccRccRcebccTcfZceiccUccWccVbYIcgeccHccIcgfccKccLcgmccNccOcgoccXcdaccZcdecdbcgBcdycdQcdFcekceecemcgCcdccddaJEcdfcaqbTFcbIcdgcdhcdicgOcdkcdlcgRcdncdocgWcdqcdrcdscdtcaEcducdvcdwcaIbZxbWQcenbZycdxceobZAcdzcdAcepbZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPceqcdRcdOcdSbBpbyebydcdScdScdScdScgXbyebydcdScdSbXjcdXcgZcgYceachachdchbbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycchicegcegcehbKtbKtbLTbLTchnbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcetcesbYIbYIbYIbYIbYIchpchuchqchqchqchzcewbXzbXybYeceybYjceEceTceSceWceUceXbSUcezaJFceYaJFcaqbTFcbIceDcfacfacfaceFceGbTJchPchLbTJcbKcbNceJceHcaEchSceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdchYbYcbYcchBcifcjfcdLceZcfbcfbcfccdOcfdciycffcdOcfgcfhcfhcfhciCciLciKcflciPcfncfocfpcdScfqcfrciQbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfBcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcfwcfxcfycfzcfAcejcfDcfCcfFcfEcfHciVcjacjacfKcfJcfJcjlcjpcbqbXzbXybYecfNcaicfOcfQcfPcfUcjqcggbSUaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcjtcgacfYcgbcgccgdcjvcaEcjCceLcgicaIcghccfcgjbZycgkcglbZycjIbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLckncgycgycgzcgActscgrcgpcgucgtcgGcgGcgGcgxcgIcgIcgJckocgLcgDcgMcdScgNckCcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaaaaacgScgTcgTcgTcgUcgVcejcgHcgFckFcgKckQckNclgclfcluclpclCchcchfchechhchgchjclGbSUbSUbSUbSUbSUbSUbSUbSUcmgclVcaqcmkcaqbTFcbIcbIctpctqctrcbIcbIchrchschtcfYcaEcaEcaEcaEcaEcaIchkchlcaIchwcmpchwbZychychmbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKcmschMchochOcmwchQckLckLckLckLcmBchvckLcmGckLchEchFcdSchZciachGcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEchHcmPchHcgEchNcmQchNcgEchRcmRchRcgEaaaaaaciicgTcgTcgUcgUcijcejchUchTchWchVcmXchXcidciccnecieciecigciecbqbXzcihbYecikcimcilciocinciocipcirciqciqciAciAciAciAbTFciGciHciIciIciJcnfcngciMciXciOcnucnhciRciSciSciTciUcaIcaIcaIcnwcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcisciucitcjjcjkcivcjmcjncjociwcjocjocixcjrcjscgIcnEcgIciWcjucdScnFcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEchHcjbchHcgEchNcjcchNcgEchRcjdchRcgEaaaaaaciicgTcgUcgUcgUcjBcnIcjhcjechWcjicnLcnKcnPcnNcjzcjycjDcjAcjEcbqbXzcjFchjcjGcnQcjHcjJcjJcjJcjKcjMcjLcjNcolcjOceAciAbTFciGckaciIckbckcckdcubckfckgckhctQckjckkcklciSckmciUconcoqckpcjQcjPcdHcdGcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcorcjRcjTcjSckEcdOcotcdOckGckHcjXcjUcjUcjYcgIcgIckecjZcjUckickOcdSckPcoyckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEckrckuckscgEckzckBckAcgEckDckJckIcgEaaaaafciiclbcgTcgUcgUcgUcejckMckKchWchWcoAchWchWchWchWckTcieckWckYcbqclackZcldclccoBcleclhclhclhclicljcljclkciAcllcgqclwclxciGclyciIclzclAclBcoCclDclEclFcoFclHclIclJciSclKciUcoJcoLclNclnclmclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIcltbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcpdcdScmhcmicmicmiclvcpfcmlclPclOcmicmicmncdScmocpgcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgEclXcmmcmjcgEcmtcmmcEgcgEcmtcmmcEgcgEaaaaafcmzcgTcgTcgUcgUcmAcejcmvcmucmxcpocprcmycmCcmCcmEcmDcmCcmFcpycbqcmIcmHcmKcmJcimcmLcmLcmMcljcmNcpAcmOcmOciAcibceVcpBcqgciGcnbciIcnccndcpCciGcmSciNcmWcfYcpGcnicnjciScnkciUclLclMclNcnlcpHcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScpIcnscntcdScdScnvcpNcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaafaafaafaaaaafcnxaafcnxaafcKAaafcpOaafcKAaafcpOaafaafaaacejcnAcnBcgUcgUcnCcnDcpRcpPcnycnmcpUcnzcnzcqecnzcnGcqrcnHcnGcnJcqtcqscqAcnMcnOcnOcnOcnOcqIcqDcnRcnRcnRcgscgscgscgscnSciGcnTcnUcnccnVcnWciGcmSciNcnXciUcnYcnZcnjcoacobciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcqLcomcqNcopcoocdOaaLaafaafaafaafaaaaaaaaacqOaaaaaaaaaaafcoscqWcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucrvcracoxcovcowcrzcoxcrQcrUcrzcoDcrVcrXcoEcnycnycnycnycnycnycnycnycoHcoGcrZcoIcsacoKcoNcoMcoOcnGcoQcoPcoRcnGcoTcoScoUcnOcoWcoVcoYcoXcpacoZcpjcpbcpbcpkcpncpncpjcsbciGciGcpccscciGciGciGcpeciNcsdciUciUciUcsecphciUciUclLcpiclNcvmcpscvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcsgcsfcppcpqcomcomcsicomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacsnaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcsDcpucpxcpwcpFcsLcsMcpzcsWcsQcpEcpDcsXcpFcpLcpJcsYcpMcpQcsZctbcpTcpWcpVcpYcpXcqacpZcqccqbctccqdcticqfctkcqzcoTcqJcqKcnOcpacpacpacpacpacqMcpjcqPcqPcqPcpncpncpjbTFcrYciGcqhcqicqjcqkciGcqlciNcqmciUcqncqocqpcqqciUctmclLcpiclNctxcqQcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcoictBcqBcqCctIcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacmZaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqRcqYcqScqVcqUcpFcqXcpFcvWcqYcqXcpFcvWcqYcpFcpFcpFcpFcpFcqZcpFcpFcpFcrbctOcrdcrcctScpZcrfcrecrhcrgcrjcricrlcrkcoTcqJcrmcnOcrncpacpacrocpacrpcpjcrIcrKcrJcrKcrLcpjbTFcrqciGcrrcrscrtcructTcrwcrxcryctVcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcuacqvcrHaaaaaaaafaaaaaaaaacqvcrRcrTcrScqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPccMaafaafaafaafcnaaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcptcpFcrccpFcrccpFcqXcpFcuecxacufcxaculcxacxacuycurcpFcpFcuLcuEcuEcuEcuYcuUcvkcvkcvlcpZcvncshcsjcnGcsmcskcvscnGcspcsocsrcsqcstcsscsvcsucpacswcpjcsxcrKcsycrKcsKcpjbTFcizciGcszcsAcsBcsCciGcfYcvtcfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsNcvvcqvcqvcqvcqvcqvcqvcqvcqvctMctDctNcqvcqvcqvcrHaaaaaacdOcofcogcohcslcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaackxaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacptcpFcrccpFcsOcsTcvEcsVcsUcvGcufcxacvOcxacxacvXcvRcwmcwacwzctacwUcwHcwHcwWcrccrccthctgctjcwXcnzcnGcwYcnGcnGcnGcwZctlcsrctncttctoctyctucpacxdcpjcxocrKcsycrKcxpcpjctvctwciGciGcxqciGciGciGciBctzctAciUciUciUcxrciUciUcsIcrGaaacqvctCctZctEctFctGctHcxsctJctKctLcqvcuVcxtcuVcqvcxFctPcqvaafaafcdOcplcplcplcxHcsfctRcuccxJctUcudcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcsOcsTcsTcsTcvEcsTcsTcsTcvEcsTcsTcsTcsTcsTcxVcyacsTcybcsTcyccsTcsTcsTcuhcugcuicpvcpFcujcygcukcuncumcupcuocumcuqcuscyhcuucutcutcuvcutcuwcyicuxcuAcuzcuBcuBcpjcuCcuDcymcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcypcuPcuNctFcuOcuRcuQcuQcvdcvacuQcuQcvhcuQcuVcuXcuQcqvaaaaaacdOcplcplcplcslcyrcuZcvicvbcvccvjcrNcrNcvecvfcvgcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcpFcpFcpFcpFcqXcpFcpFcpFcqXcpFcpFcpFcpFcpFcvWcpFcpFctScpFcyucpFcyEcyzcvpcvocvrcvqcyFcvqcyHcvucvxcvwcvycvucvucvzcvAcqIcvBcpacvDcvCcpacpacyJcrKcrKcvFcuBcuBcpjbPxcAscvNcvNcvNcvNcyKcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcyRctFctFcyScvScvTcvUcvVcvHcvJcvIcvLcvKcyZcwbcwccqvaaaaaacdOcomcomcomcomcwdcppcvicwecwfcvQcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaccMaaaaaaaaaaaacptcpFcpFcpFcpFcpFcqXcpFcpFcpFcqXcpFcpFcpFcpFcpFcvWcpFcpFctScpFczncpFcpFczncznczocpFcpFcvZcvYcwgcwgcwgcwgczqcwkcoTcwocwpcsqcwqcpacwscvCcpacwtcpjcwucrKcwvcwxcwwcpjczrcvMcvNcwIcwJcwKcwLcwMcwNcwOcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwycwAczBcwCcwBcwEcwDcwGcwFcwTcwScwVczFcuWcuQcxecqvaaaaaacdOcofcogcohckXcsRcuZcxgcxhcxhcxicxjcxkczLcxmcxncdOaaaaaacrPaaaaafaaaaafaafaafaaackxaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcpFcpFcpFcpFczMcpFcpFcpFczMcpFcpFcpFcpFcpFcvWcpFcpFczXczVcAhctdctdcAhcAtcAhcxlcAvcAwctdcAAcAxcAHcADcAJcwkcoTcxucoTcxvcxwcpacpacxAcpacxBcpjcxCcxCcxDcwxcwwcpjbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcAUcxWcxXcxYcxZcuTcBkcuScxEcuTcBmcqvcqvcqvcqvaaaaaacdOcplcpmcplcBncsfcppcrNcrNcyecyfcrNcBqcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacBsaaaaaacBsaaaaaaaaacBsaaaaaaaaaaaaaaacBsaaaaaaaaacBsaaaaaacBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpFczmcrWcrWczpcxGcrWczpcrWcxIcBucuEcuEcBzcuEcBAcuEcuEcuYcBDczncpFcpFcyjcylcykcyncBEcyocpFcBHcyqcyscyscBIcytcoTcxucyvcnOcywcpacyxcpacBKcyycpjcpjcpjcpjcpjcpjcpjbPxcvMcvNcyMcyNcxLcyOcxLcxNcyPcvNcyQcBLcrGaaaaaaaaaaaaaaaaaacqvcuVcBOctFctFcyTcyAcyVcyWctMctDctNcyBctMcvhcyYcqvaaaaaaaaaaaacdOcplcplcplckXcBRczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacBscBscBscBsaaaaaaaaacBscBscBscBscBscBscBsaaaaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpFcqXcpFcpFcpFczMcpFcpFcpFczMcpFcpFcpFcyCcpFcvWcpFcpFcpFcyDczncpFcpFcBScAtctfcyGcwgcCccwgcwgcyqcCecyIcCfcytcoTcxucoTcnOcyUcyLczecyXczfcpacnOczgczJczJczhcCicClczNczOcvNcxNczPczQcxNczRczSczTcvNczUcCncrGaaaaaaaaaaaaaaaaaacqvczWcuMcCBcuVczYczZcAactFcAbcAccsPcyBczWczjcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgczkcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacBscBscBscBsaaaaaacBscBscBscBscBscBscBscBscBsaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaaaaaaczlcpFcqXcpFcCFcxacufcxacCJcxacufcxacCJcxacxccxacxbcCKctectdcCNctfczsczucztczwczvczxcwgczzczycwgcwgcwgcwgcwgczAcqtcCOcqtcnOcnOcnOcnOcnOcnOcnOcnOczDczJczJczEcANcAObPxcAPcvNcAQcARcCQcATcCYcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBeczHczGczIcBeczKcqvaafaafaaaaaaaaaaaabquaaacdOcBlcDmcDacBocBpcDmcDpcBrcBpcDmcDtcdOaaaaaaccMaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacBscBscBscBsaaaaaacBscBscBscBscBscBscBscBscBsaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaaaaaaaaaaaIaaaaaacAdcpFcqXcpFcDxcylcqXcpFcDNcylcqXcpFcAucylcpFcpFcDOcpFcDUcylcEccAzcAycABcEicErcACcAEcwgcEycAFcEBcAIcAKcumcAMcALcumcAScumcBfcuocBgcBicBhcBhcBjcEXcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcFecCbcCacCdcvNcrGcFgcrGaaaaaaaaaaaaaaaaaacqvctFcFrcuVctFcCgcChcFCctFcCjcCkcqycgvcBtcCkcCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcFEclUcomclscFFclqcomclocFKclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaaIaafaafcAdcpFcFLcBycBxcFVcFUcBCcBBcGgcFWcBGcBFcGhcpFcBvcGocGucBJcBMcGvcnycnycnycnycnycnycnycnycGAcBNczAcBPcBQcoTcGEcoTcoTcxucoTcoTcGMcoTcBQcBTcCpcBUcCrcGOcHjcHacCPcHCcAObPwcCRcCScCTcCacAGcAVcBwcCacCtcCscCucHVcCXaaaaaaaaaaaaaaaaaacqvcCvctDcuQcIAcDbcuQcDccDdcDeaafaaachxcCxcCwcCyaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcCzaaaaaaaaIaaaaaacCAcCCcIMcCEcCDcCGcIRcCHcCDcCGcIRcCHcCDcCGcCIcCIcITcCHcCDcCGcIZcnyaaacCMcCLcCVcCUcCZcCWcDjcDgcDkcDkcJhcDlcDocDncDqcJlcDncDqcDocDrcJpcDscDrczAczAcAOcJAcJzcDPcDQcAObNUcDRcDScDTcCacCbcJBcCbcCacDvcDucDfaafaaaaaaaaaaaaaaaaaaaaacqvcCvcDVcDwcDXcDXcDwcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcJCcJFcJFcJUcJFcJFcJFcJFcJVcJFcKdcJFcJVcJFcKdcJFcJVcJFcKdcJFcJFcJFcKdcJFcKdcJFcKoaafaaacDzcDycDBcDAcDDcDCcDjcDEcDkcDFcDHcDGcDJcDIcDLcDKcDWcDMcDJcEbcEdcKpcDraaaaafcAOcKqcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEecuXcEfcEJcEJcEfcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaqaaaaaaaafcgEcmtcmmcEgcgEcmtcmmcEgcgEcmtcmmcEhcgEaaacgEcEgcmmcEhcgEaaaaafaaacDzcEjcElcEkcEncEmcEpcEocDkcEqcEscKBcDJcEtcEvcEucExcEwcDJcKCcEAcEzcDraaaaaacAOcKDcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEEcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPccMcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaIaaaaaaaafcgEcEGcEIcEHcgEcEMcEOcENcgEcEPcERcEQcgEaafcgEcEScEUcETcgEaaaaafaaacDzcEVcDBcEncEncEWcEYcKEcFacEZcFccFbcKFcFdcFjcFfcFlcFkcFpcFmcKGcFqcDraafaaacFJcKIcKHcAOcKJaaabNUcFMcKKcFNcFOaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEfcEfcEfcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcfTaafcrPaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaaaaafaafcgEcFscFtcFscgEcFucFvcFucgEcFwcFxcFwcgEaaacgEcFwcFwcFycgEaaaaafaaacDzcCLcFzcEkcEncDCcFAcDEcDkcFBcFDcKLcDJcKMcFGcKNcFGcFHcDJcFIcFTcFScDraaLcKPcKOcKRcKQcKOcKOcKSbNUciEciDcGjaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcEJcEJcEJcEJcEJcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaIaafaafaaacgEcFscKTcFscgEcFucKUcFucgEcFwcKVcFwcgEaafcgEcFwcKWcFwcgEaafaafaafcFYcFXcGacFZcGccGbcGdcDEcDkcGecKXcGfcDJcGicGmcGkcKYcGncDJcGpcGrcGqcDraaacLacKZcLccLbcLecLdcLfcGFcGGcGHbNUaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaaaaaacgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaacGscgEcgEcgEcgEaaaaaaaaaaaacBNcBNcBNcBNcBNcLgcGtcGtcGtcGtcLhcGtcGwcGycGxcGycGzcGtcGtcLicGtcGtcGtcLacKZcLkcLjcLmcLlcLnaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGBcGDcGCcGIcLocGKcGJcLpcGLcLqcGNcGTcGPcGVcGUcGXcGWcGZcGYcHbcLrcGYcGtcLacKZcLtcLscLmcLucLvaafaaacGQcHccGQcHccGQcHcaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGBcHfcHecHhcHgcLwcHicHlcHkcHocHmcHscHrcHucHtcHucHucHucHvcHucHwcHxcGtcLxcKOcKOcKOcKOcKOcLyaafaafcHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaabgaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGBcHfcHzcHBcHAcLzcHicHEcHDcHFcHbcHbcHbcHHcHGcHIcHbcHbcHDcHLcHJcHMcGtcGtcGtcHNaaaaaaaaaaaacHOaaacHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGBcHRcHQcHTcHScLAcHUcHXcHWcHZcHYcHYcHYcIbcIacIdcHYcHYcIecIgcIfcIicIhcIkcIjcImcIlcIlcIlcIlcIlcIlcIncIocIncIocIncHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaOXaOYaOZaPaaPaaPaaPaaPbaOYaOXaaaaBIaPcaPdaPeaOvaOgaPhaPhaOxaIAaPjaNnaPkaPlaPmaPnaPoaPpaPqaPqaPraPsaPsaPsaPtaPuaPuaPvaPwaNIaPqaPqaPxaPyaPzaPAaPBaPBaPCaPBaPDaPyaPyaPyaPEaPFaPGaPHaMkaPIaPJaPJaPJaPJaPJaPJaPJaPJaPKaPJaPLaPMaPNaPOaPPaPQaPRaPSaPTaPJaPUaPJaPVaPWaPXaPWaPWaPWaPWaPWaPWaPYaPZaRsaQbaQbaQbaRraQbaQbaRxaQeaQfaDyaKZaQhaMCaQiaQjaQkaLfaEcaQmaQnaQnaQnaQnaQnaQoaQpaOPaQraQnaQnaQsaQtaLfaJRaIgaQuaONaONaQvaONaQwaIgaGFaGFaGFaGFaGFaGFaSoaGFaIoaIoaJVaIoaStaOQaGGaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaafaBIawqaBIaQBaQCaGOaQDaSuaQFaQGaGOaQCaQHaQIaBIaSyaLEaPeaPfaQLaPhaPhaOxaIAaQMaNnaLJaQNaNpaQOaQPaNraNraQQaQRaQSaSEaNraQUaQVaQWaQVaQXaQYaQVaQVaQZaQVaQVaRaaSHaQVaRcaQVaRdaNraNraNraReaPFaPGaPHaMkaRfaMkaRgaRgaRgaRgaRgaRgaRgaRgaRhaRiaRgaRjaRgaRgaRkaRgaRgaRgaRgaRlaRmaRnaRoaRoaRoaRoaRoaRoaRoaRpaRqaRpaJlaImawOawOawOawOawOaItaRuaRvaRwaKZaKZaKZaKZaKZaSIaLfaEdaQmaQnaRzaRAaRBaPgaRDaREaRFaQraRGaRHaRIaRJaLfaJRaIgaRKaRKaRLaRMaRNaRNaROaIgaRPaRQaRRaGGaRSaRTaRUaRVaRVaRWaRXaGGaRYaGGaRZaRZaRZaSaaSbaScaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaGeaGgaGgaGiaSUaGhaSdaOYaLDaDPaHxaHxaSfaLDaOYaLDaHyaHAaHzaLEaSkaPiaPiaNkaPiaNlaIAaSmaNnaSnaIAaLKaLKaSZaLKaLKaLKaLKaLKaLKaSpaSqaLKaLKaLKaLKaLKaLKaSraSsaSraLKaTPaLKaNraQPawbauoaSwaSxaNraReaUlaMbaMbaMkaSzaKOaSAaMnaMnaSBaSBaSBaSBaSCaJeasfasNarVarXarXavParXarXarVasNawFaJeaSJaSKaSKaSKaSKaSLaSLaSMaSNaRqaRpaJlaECaEfaEfaEfaEfaEfaEfaSQaSRaSSaSTaUOaHIaSWaSXaSYaKZaKZaVeaTaaTbaTcaTdaTeaTeaTeaTfaTgaTfaTeaTeaTeaTeaJRaIgaThaONaRLaRMaONaONaTiaIgaTjaQzaTlaGGaIoaTmaTnaToaTpaTqaIoaTraQKaGGaTtaTuaRZaTvaTwaTxaafaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaVfaVraVkaVIazkaSgaSeaSiaShaSjaSiaTzaTyaTBaTAaTEaTCaTAaTFcozaTIaTJaTKaTLaTLaTLaTMaTLaTNaTOaIAaIKaTQaTRaTSaTTaTUaTVaTWaTXaTUaTYaTZaUaaUbaUcaUdaUeazBaUgaUhaUeaUiaLKaLKaWoaLKaLKaLKaLKaUkaWwaLKaUmaMbaUnaSzaKOaUoaaaaaaaaaaaaaaaaaaaaaaUpaUqaUraUsaUtaUvaUuaUxaUwaUzaUyaVUaUpaaaaaaaaaaaaaaaaaaaaaaUAaSNaRqaUBaUCaUDaUEaUFaUFaUFaUFaUGaUHaUIaUFaUFaUFaISaUKaULaUMaUNaWFaUPaUQayOaySaUTaTfaUUaKpaKQaUXaUYaUZaVaaVbaTeaJRaIgaVcaVcaRLaRMaVdaVdaWKaIgaIgaXlaIgaGGaVgaVhaViaViaViaVjaXnaGGaGGaGGaVlaVmaVnaVoaVpaVqaafaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDawdcmVaXzaXCaDPaVsaVsaVtaVsaVsaVsaVDaVsaVsaVtaVsaVsaYEaWYaVuaVvaKdaKdaKdaKdaKdaVwaVxaVyaXGaIAaTQaTQaVAaTSaVBaTUaTUaTUaTUaTUaTYaVCaTUaTUaTUaUdaUeawgaVEaVFaUeaUiaVGaVHaKeaKcaVKaUmaXIaVMaVNaVOaxwaVQaMkaSzaKOaUoaaaaaaaaaaaaaUpaUpaUpaUpaVRaSlaVTaXEaVVaSDaVXaXFaVZaSOaWbaUpaUpaUpaUpaaaaaaaaaaaaaUAaSNaRqaRpaWcaSSaSPaWeaTkaSSaTsaUWaWiaVSaLwaVWaWmaNcaQbaXNaWpaWqaWraWsaWtaWtaWuaWvaXXaWaaNeaNPaWAaWBaWCaWDaWEaTeaJRaIgaThaONaRLaRMaONaONaONaYqaWGaONaWHaGGaWIaWJaToaToaToaTqaIoaYsaGGaWfaVoaLuaWQaVoaWRaWSaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTGaGgaTHaGiaBIaBIaBIaWVaWWaWWaWWaWWaWWaWWaWWaWXaBIaBLcpSaWZaIAaXcaXbaXbaXbaYraXdaIAaIAaIAaIAaTQaXeaXfaTSaXgaTUaTUaWgaQaaNXaQgaWgaTUaTUaTUaYwaUeaRyaUfaSvaUeaUiaVGaXpaKfaXraXsaUmaXtaxwaURaXvaUjaXxaMkaSzaKOaMmaSCaMbaXyaUpaUpaVYaXAaYyaYAaXDaXDaXEaXFaYMaXEaXFaXDaXDaXHaYVaXJaXBaUpaUpaXyaJlaXLaXMaSNaRqaRpaJlaZgaSPaQlaTkaSSaXPaXQaSSaWhaXSaTkaSSaQqaOtaXUaXVaUQaRCaUJaSVaUVaYaaYbaYcaYdaKpaVLaYgaWBaYhaWDaYiaTeaJRaIgaYjaYjaRLaRMaWlaONaONaYlaONaWzaWxaGGaIoaWdaVPaToaWjaWkaZXaWLbaOaYmaWOaZcaVoaYvaUSbaBbanaYzaVzaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaafaYCaYDcpKaYFaWPaWnaWnaYIaWyaXhaYLbaPaKxaYOaYPaYQaYRaYSaTSaYTaTUaTUaWgaNXaXiaXjaWgaTUaTUaYWaUdaUeaUeaUeaUeaUeaUiaVGaVGaVGaVGaVGaUmaYYaXvaYZaXvaXvaXxaMkaSzaKOaNSaNSaZaaZbaWNaUpaZdaYnaZfbaTbaSbaVbaUbaXbaWbaZbaYbbbbbabbcaZfaYoaZjaUpaWMaZbaZlaZmbbeaSNaRqaRpaWcaSSaSSaSSaSSaSSaXPaZoaSSaWhaZpaTkaSSaQqaOtaZqaXVaUQaXkaXOaXwaXRaYaaYpaZwaYdaKpaVLaYgaWBaYhaZxaZyaZzbbfaZzaZzaZzaZBaZCaZDaYtaOOaZFaZGaZHaZIaGGaZJaXWaXTaToaYeaXTaIoaIoaXaaZiaVoaYuaVoaZNaZOaZPaZQaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaZSaZTaZUbjnaZWaSFaWnaZkbaaaZvaYfbadbaeaXYaYObagbahbaibajaTSbakbalbambbhbaobapbaqbarbarbarbasbataTSbaubavbawbaxaKgbajbnZaKhbajbkZaUmbaDbaEbaFbaGbaHbaIaMkbaJbaKaMkbaLbaMbbDbcybbPbbLbaRbaQbbQaUpaUpaUpaUpaUpbcDaUpaUpaUpbbRbaQbbdbbSbbWbeobcabbibbjbbkbblbbmbbnaJlaUDaSPbboaTkaSSaZAaZEbbraZKaQlaTkaSSaQqaYkaULaXVbbubbvbbwaUQaUQaYaaXZbbyaYKaYGbbBaYgaWBbbCaWDbcuaZzaZLbbFbbFbbGbbHbbIaRLaRLaRLaRLaRLaRLaRLaGGbbJaWdaVPaToaWjaVPaIobbKaGGbcBaVoaYuaVoaZNbbMbbNbbOaafaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaXubcFbcZaXmbbUaSFbaabaabaabaabaabbVbaaaXoaYObbXbbYbaibbZbbZbbZbbZbdKbbZbcbaTUbccbcdbcebcebcfbcgaTSaXebchbcibcjaKibdQblcaKkbcobcobcpbcpbcpbcpbcpbcqaMbbcrbcsbctbeabcvbcwbcxbbgaUpbczbcAbeeaUpaUpaaaaaaaafaafbekaaaaaaaUpaUpbezbcGbczaUpbbgbcxbcHbcIbcJbcKbcLaRpaWcaSSaSSaSSaSSaSSaGpbcMaSSbcNaSSbcObcObcObcObeBbcQbcRbcSaUQaUQaUQbeMbcUaTeaZMbcWbcXaYgaWBaYhaWDbcYaZzaZZbdabdbbdcbddbdebddbddbddbddbddbdfbdgbdhbdibdjbdkbdlbdmbdnbdobdpbdqbdraVoaYubdsaZNaVobeNbbOaafaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBbdubdvaZUbdwbdxaSFaWnbabbaaaZvaYXbbVbaabdAaYObbpbdCbaibbZbdDbdEbdFbdGbbZaEgbdIbdJaTSbeRbdLbdMbdNaTSaXebdObdPbdPbeVbdPbdPbdPbdPbdRbdSbdSbdSbdTbdSbdUaMbbdVbdWbdXbdYbdYbdYbdYbdYbdYbdZbeWbdZbdYbebbebbebbebbebbecbebbebbebbedbedbfobedaUpaUpaUpaJiaJiaJibcKbcLaRpaJlbefbegaDmbehaSSbeibcMbejbfqbelbcObcObembenaZzaZzaZzbfwaSGaSGaSGaZzaZzaZzbeqberbesbetaWBaYhaYhbeuaZzbevbewbbqaZzbeybbsbeAaYtbfxbbEbeDbcmaONaGGaIobeFbeGbeHbeFbeIaIoaIoaGGbeJaVoaYuaVoaZNbeKbeLbbOaafaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaYBaafbeObePbeQbfWaRtaWnaZebeUbbtaYXbbVbgNbgMaYObeXbeYbaibbZbbZbbZbeZbfabbZbfbbdIbfcaTSbeRbdLbdMbfdaTSaXebdObdPbbzbffbfgbfgbfhbdPbfibcVbfkbflbfmbfmbfmaMbaMkbcsbctbdYbfnbgUbfpbgWbfrbfsbftbfubdYbebbfvbgXbfvbhebhCbfvbdybebbedbfCbfDbfEbfFbfGbfHbfIbfJaJibfKbfLbfMaJlaZzaZzaZzaZzbfNbfObfPbfQaZzaZzbfRaZzaZzaZzaZzbfSbfTbfUbfVbfVbfVbhJbfXaZzbfYbfZbgabgbbgcbgcbgcbgdaZzbevbewbdBaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbgfbggbghbgibgjbgfbggaZzaRZbgkaVoaYuaVoaZNaZObglbgmaWTaZRaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaabgnbgobgpbgqaZUbgrbgrbgrbgrbgrbgrbgsbgtbgraYOaYOaYOaYOaYObhKaYOaYOaYObgvbgvbgwbbZbdDbgxbeZbgybbZbgzbgAbgzaTSbeRbdLbdMbfdaTSaXebdObdPbgBbgCaCtbfgbgDbdPbfibgEbgFbgGaFIaFGaFhaMbbgKbgLbctbhLbivbgObgPbexbexbgRbgSbgTbdYbebbmIbgVbhRbhNbfzbgYbhSbebbedbhabhbbhcbeCbhTbeEbhgbhhaJibhibhjaRpbhkbhlbhmbewbewbhnbewbhobewbewbewbewbhpbewbewbewbewbhqbewbewbewbewbewbewbhmbewbewbhrbhsbhsbhtbhsbhsbhubhvbewbhqbhwbhxbhpbewbhybewbewbewbhzbhAbhBbhUbewbhDbewbhEbewbewbhFbhGbhHaVoaYuaVobhIaHdbhXbhWbhMaHcaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaafbhPaYDbhQbitbiqbjubjqbjwbjvbjubjBbjGbjCbjObhYbhZbgwbbZbbZbbZbiabfabbZaTSaTSaTSaTSbeRbibbicbjQaTSbiebifbdPbigbihbiibgDbijbdPbfibikbgFbgGbgGbgGaEhaMbbimaSzbctbjVbiobipbfjbirbisbfBbiubjMbdYbebbiwbixbiybjYbiybgYbgebebbedbiAbiBbiCbgQbiEbgZbiGbiHaJibiIbiJbiKbiLbiMbiNbiObiObiPbiQbiRbiSbiSbiSbiTbiSbiSbiSbiSbiSbiUbiVbiVbiVbiWbiObiObiNbiObiObiXbiVbiVbiYbiSbiZbjabjbbiSbjcbiObiObiObiObiObiObiObiObiObiObiObiObiObjdbiTbjebiSbjfbjgbjhbjibjibjjbjkaZNaWRbjlaWTaWTaWUaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhOaZSaZTbjmbjnbjobgrbjpbjpbjZbjpbjpbjpbjrbajbajbajbajbaibbZbdDbjsbjtbgybbZbkZbkZbkZaTSaTSaTSaTSbkkaTSbjxbdObdPbjybjzbgDbfgbkxbdPbkAbfmbkHbgGbgGbgGbjDaMbbjEaSzbctbkKbkLbgObhdbjIbjJbhfbjLblybdYbjNbkMbjPbiybkNbiybgVbkPbjSbedbjTbjUbizbjWbjWbjWbjXbkVaJibkXbkabkbbkcbkdbkebbFbkfbkgbkhbkibkjbkYbklbkmbknbknbkobewbewbewbewbewbkpbkqbkrbewbksbktcsfbkvbewbkpbkwcLYbkybhFbewbewbkzbewbewbllbkBbewbkpbewbewbewbewbewbewbewbewbewbhqbewbewbhFbkCbkDbkEbkFbkGblmbkIbkJaafaaaaafaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObQDblrblEbQLbkObgrblTbkQbkRbkRbkSbkTbkUbmdbmlbmlbmAbmxbbZbbZbbZbeZbmBbbZbajbajbajbajblaaXeaXeblbblcbldbleblfblgblhblibljblkbdPbmEbfmbmFbgGblnbgGbbAblpblqaSzbctbdYbmHblsbltblublvblwblxbdYbdYbebblzblAbfebmNblDblAbiDbebbedbedblFblGblHblIbiCblJblKaJiblLblMblNaJiblOblOblOblOblOblOaZzaZzblPblQbZNcdMblQblPaZzaZzaZzaZzaZzaZzaZzaZzaZzaZzbmVaZzaZzaZzaZzaZzaZzbmXaZzbewbewblVblWbiFblOblOblOblOblOblXblYblYblZblYbewblYblZbmablYbmbblObmcbmcbmcbnbaRZbmeaRZaRZaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhObhObdubdvbjmbjnbmfbgrbmgbjpbmhbmibjpbjpbjpbnsbmjbmkbmkbnwbbZbdDbmmbeZbmnbbZbjAbmpbmqbmrbmsbmtbmtbmubmtbmtbmvbdPbmwbnNbfgbmybmzblfbnRbnPbnSbgGbgGbjHbilbnUblqaSzbnVbmGbmGbmGbmGbmGbmGbmGbnWbmGaafbebbmIbmJbmKbmLbmKbmMbjKbebaafbedbmObnXbmQbmRbiCbiGbmSaJibcKaRqaRpaJibmTbohboibmUbojbmYbmZbjRblBblobndbneblobmobmCbnhbnibnjbmPboKbnmbnnbPLbnpbnqbnrboWbntbntbnubYfaVJblOblObpmblObZMbZMblObnzbmDbnBblObZtbpobZtblOblXblYbmbblObZnbmWbZnblObnGbPJbnIbnJbnKbnLbnMaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaTDaaaaaaaaabhObhObhObhObhObhObhObhObhObhOaaaaaabnObpwbeQbnQbgrbpLbpBbpMbnTbpPbpNbjpbpSbnlbnYbnZbnwbbZbbZbbZbbZbbZbbZboabobbocbodboebdPbdPbdPbdPbdPbdPbdPbWqbdPbdPbdPbogbdPbfmbqcbnSbgGbgGbgGbokblpblqaSzbqgbmGbombonbncbOIbvGbotbosbotaafbebboubovbowboxboybozbnfbebaafbedboBboCboEboDbiCbiGboFaJiboGboHaRpbXHboJbngboLboMbnkbPZboPboQboRboRboSboTboUboUboVbolboXboYboZbpabpbbnnbPGbpdbpebpfbpgbphbpfbpibYfaVJbpjbpkbplbOJbpnbnybppbnCbnDbpqbqxbptboobqyblOaZzbqBbpxblOcgVboqbprbqGbpCbpDbnIbpEbpFbpGbnMaaaaaaaaaaacaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaabgnbgobgpbgqbdvbpHbpHbpHbpIbpHbpJaZVbpKbqKbgrbqQbjpbrkbrcbpQbpRbrvbrubrwbrwbrwbrxbkWbpUbkWbkWbkWbkWbpVbpWbpWbpXbpYbdPcfycfocfzbrybqdbqebqfbrCbqhbqibqjbqkbqkbrDbrIbgGbgGbqmbfmaMbblqbqnbqoaJubqqbqrbqrbxqborbrPbxsbotaafbebbebbebbebbshbebbebbebbebaafbedbqzboCbqAbsjbqCbqDbqEaJibqFaRqaRpaJibskbqHbqIbqJaJDbqLboPbqNboUboUboUboUboUboUbqObqPbslboYbqRbqSboNbnnbqUbqVbqWbsnbpgbphbpfbqXbYfaVJbpjbqYbqZbqZbrabrbbsobrdbrdbrdbrebrdbrfboObrhbribrjbsqbnIbrlbpCbrmbrnbpCbrobnIbrqbpFbrrbnMaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaaaaaabrsbrtbsvbsBcaLbsHbsHbthbrzbrAbgrbtkbtlcaMbpTbjpbjpbjpbajbrEbrFbrGbrHbrGbrGbrGbrHbrGbajbajbdPbdPbdPbtBbdPbrJbrJbrJbrJbrJbrJbqfbrKbrLbrMbrNbrObtIbrQbrRbrSbrTbrUbrVbrWbrXbrYbrZaHBbsbbqvbsabYZcanbotbosbotaafbsibZibtKbtTbsmbtXbtKcaJbsiaafbedbspbuibspbedbedbedbujaJibssaRqaRpbXHboJbngbstbsubuobqLbswbqNbupbtmbuGbuAbuNbsCbqObsDbnibwDbsFbwKbxhbnncdtbqVbpebpfbpgbphbpfbpibYfaVJbpjbsJbsKbsLbsMbplbsNcgZbsPbsQbsRbsSbsTbsUbrhbsVbsWbsXbnIbsYbsZbtabsrbtccflbnIbrqbpFbtebnMaaaaaaaaaaaaaaaaaaaaaaaaaIuaIuaIuaIuaIuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaaaaaaaaaaaaaaaaaaaTDaTDaTDaTDaTDaaaaacaaaaaaaaaaaaaaaaaaaaabrsbtfbtgbuYbtibtibtibtjbtibtibgrbvabuZboAbvjbjpaaaaaaaaaaafaafbtnbtnbtnbtnbtnbtnbtnaaaaaabtobtpbtqbtrbtsbrJbrJbrJbrJbrJbrJbttbtubvqbtwbtxbtybtzbtAbfmbfmbvCbfmbfmbtCbtDbtEbtFbmGbtHbmGbmGbmGbmGbmGbvEbmGaafbtJbvFbtLbtMbtNbtMbtLbvIbtPaafbspbtQbtRbtSbvObtUbspbtVaJlbtWbbmbvZaJibtYbohbtZbuabwcbucbudbuebufbwgbzrbzcbwnbukbulbumbnibnnbunbpubzybnnbuqburbusbutbuubuubuvbuwbYfaXqbpjbwxbplbplbsMbuybuzcgYbpvbuCbuDbuEbuFbVybrhbuHbuIbuJbnIbuKbuLbuMbsrbpCbVebnIbpEbpFbUAbnMaaaaaaaaaaaacHOaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabeObSwbxmbuVbpHbuWbgnbgobuXbuWbgrbxpbjpbxvbvbbjpaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaabvcbvdbrJbvebvfbvfbvfbvfbvfbvgbvhbvfbvibxzbvkbvlbvmbSlbSrbfmbvpbgGbxDbpzbvsbvtbvubvvbmGbmGbmGbRcbQMbvzbvAbvBbvwaafbpObRpbvHbvJbvKbvMbvNbRybpOaafbspbqMbvQbxnbedbvRbspbvSaJlbvTbcLbvUaJibvVbvWbvXbTTbxObucbyobxTbyKbwdbwebwebwfbyMcdWcdVbUqbwkbTWbwmbwkbwkbwkbwkbyQbwkbwkaXKaXKaXKaXKaVJbpjbsJbsKbsLbwobwpbwqbwrbwsbwsbwsbsSbwtbTsbwvbwwbyUbwybnIbwzbwAbwBbtbbpCbSEbnIbwEbwFbnMbnMaaaaaaaaaaaaaafbuPbuQbuRbuQbuRbuQbuSaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbwMbwNbwObwPbrJbwQbrJbwRbwRbwRbwSbwTbrKbrJbrJbrLbwUbwVbwWbwXbrpbCkbxabgGbgGbugbxcbvtbvubxdbxebxfbEYbzHbxibxjbxkbxlbvwaafbxrbzNbzJbzObyLbxobzPbzVbxraafbspbqwbAebuBbedbAibspbtVaJlbxwbcLaRpaJibDDbxybAobxAbxBbxCbAtbxEbxCbxFbxGbDIbxFbwkbAxbxJbwkbwkbxKbxLbxMbxNbAAbxPbxQbxRbxSaXKbaybvraXKaVJbpjbxXbqZbqZbxYbxZbppbDQbwsbwsbwsbsSbwtbEFbwwbvDbUabTQbwwbESbFbbEZbwbbpCbFybnIbrqbykbnMaaaaaaaaaaaaaaaaafbwGbwHbrgcLebwJbFUbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbAFbypbAFbyqbyrbwQbrJbrJbrJbysbrJbwTbrKbytbdPbdPbyubgGbrNbwXbyvbywbyxbyybyybyzbyAbyBbyCbyDbvsbyEbvPbyGbxkbyHbyIbyJbvwaafbxrbxrbxrbxrbALbxrbxrbxrbxraafbyNbyNbyNbyNbyNbyNbyNbAVaJibyPblMblNaJibCnbyRbyRbySbyTbxCbAXbyVbyWbCobyYbyZbzabwmbzbbBqbzdbzebzfbzgbzgbzhbzibzgbzjbzkbckbaAbwubclbBsbcnbCQbzsbztbzubzvbzwbppbCXbpqbpqbDBbsSbwtbCLbzAbzBbzCbzDbzAbzEbzFbzGbwCbzIbwwbwwbBxbnMbnMbzKbzLbzLbzLbzMbCJbylbymbrgbwJbrgbynbuRaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaacaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbzRbrJbwQbrJbzSbzSbzSbzSbwTbrKbzTbzUbdPcfxbgGbrNbBJbzWbzXbzYbgGblnbgGbzZbAabAbbAcbAdbyEbwIbAfbxkbxkbxkbAgbvwbAhbAhbBKbAhbBRbBQbBSbAjbBUbAjbAjbyNbCcbCdbAmbAnbBXbApbAqaJibAraRqaRpaJibAlbAsbAubAvbAwbBtbAybAzbBabABbACbADbAEbBEbAGbAHbAIbAJbAKbAIbxtbAMbANbAObnvblUbsdbBGbsgbsfbaAbPObpjbxubxUbAYbAZbAZbppbAkbBbbBcbppbBdbBebBfbBgbBhbyibKebBibYrbYrbBjbBkbBobTHbCrbBrbCwbCAbTIbBvbCEbCIbCHbCKbwGbwJbrgbwJbwJbBNbwGaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBCbwNbBDbCYbrJbwQbrJbrJbrJbrJbrJbwTbrKbzTbBFbdPbLpbgGbBHbBIbgGbCZbgFbgGbgGbyjbvsbvtbAbbAcbAdbyEbvwbBLbBMbLrbBMbBObvwbDbbDabDdbDcbDfbDebDhbDgbDjbDibBVbyNbBWbzmbBYbBZbCabCabCbbDwbAraRqaRpaJibzxbCebCebySbCfbxCbCgbChbxCbCibCjbCjbyObwkbClbCmbwkbwkbwkbwkbwkbwkbyXbwkbwkbwmbDKaXKaXKaXKaXKbDYbpjbwwbzAbzAbzAbzAbzAbzAbzAbzAbzAbzIbEibCsbCtbBhbWXbCvbEjbCxbCxbCxbCybCzbEkbCBbCCbCDbEpbTGbCGbErbCGbEsbEubBzbuQbuRbEwbuRbuQbBBaafaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbBAbzQbBAbCMbCNbCObrJbrJbrJbCNbrJbwTbrKbzTbCPbdPbLHbgGbrNbwXbgGbqlbCRbgGbgGbECbxcbvtbAbbCTbxcbCUbvwbCVbEKbMIbAWbxlbvwbEMbELbERbAhbEUbEUbEUbAjbEWbEVbEXbyNbDkbDlbDlbDmbDnbDobDpaJibDqbDrbDsaJibDtbMMbDvbMpbDxbDybDzbDAbyWbLWbFabCjbMybwmbDEbDFbwmbDGbDHbNsbDJbFobDLbDMbCpbDNbDObBTbNtbDRbCpbVLbVMbDUbVAbDWbDXbDXbFrbDZbEabEbbEcbEdbEebEfbBmbBlbBnbCvbFVbFFbGfbwwbwwbwwbwwbwwbGhbGgbEnbzKbzMbCJbEobGibCJbzKbzLbzMbGjbCJbGkaafcHOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGubExbGubEybEzbEAbEAbEAbEAbEAbEBbGAbEDbzTbEEbdPbNzbEGbEHbEIbEJbGDbGCbGWbGEbGvbtCbENbAbbEObEPbyEbvwbEQbHabOxbBMbETbvwbBPbHibHjbAhaaaaaaaaabAjbHmbHlbFcbyNbFdbFebFfbFgbDnbDobFhaJibxwaRqaRpbHMbFjbFkbFlbFmbFnbHNbFpbFqbxCbxFbxFbIZbxFbwkbFsbFtbFubFvbFwbFxbDJbIYbDLbFzbFAbFBbDObFCbFDbFEbHPbVlbDXbHQbVAbFJbDXbDXbFKbFLbFMbFLbFLbFNbFObFPbBwbFRbFSbCvbHRbJrbJabFWbFXbFYbFZbGabGbbGcbGdaafaafbCJbGebHUbHUbHVbIfbHZbIobEvaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnbGlbGmbGnbdPbdPbGobwNbwNbwNbGpbdPbdPbGqbGrbGsbdPbGtbGtbGtbITbGtbGvbGwbGxbGybGzbtCbvtbAbbIAbGBbtCbtGbtGbtGbtGbtGbIBbtGbtGbtGbEgbtGbtGbtGbtGbtGbEhbtGbtGbtGbtGbtGbtGbtGaJiaJiaJiaJibxwaRqaRpbHMbJqbFkbCSbGGbCWbGIbGJbGKbGLbGMbGNbCjbGObGPbGQbGRbGSbGTbGUbGVbIDbGXbGYbGZbJDbHbbHcbHdbHecLVbCpbUSbUfbwwbwwbwwbwwbwwbJVbwwbwwbwwbzAbKfbzAbzAbFQbBhbCubCvbHRbIvbKzbHnbHobHpbHqbGabGbbGcbHraaaaaabCJbHsbHtbEobCIbBybKBbKUbCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaafaaaaaaaaabHuaafaaaaaaaaaaaabGtbIubHwbHxbHybGvbHzbKVbHBbHCbtCbvtbAbbAcbAabHDbHEbHFbHGbHHbHIbHJbHKbHLbLabLxbLnbLzbAabAabLIbMhbLYbAabHTbAabzZbHHbKJbHWbHXbHYbMibxwaRqbDsaJlbDtbDubDtbDCbDPbxCbIbbIcbIdbIebMlbIgbIhbIibIjbIkbwmbIlbImbInbDJbDTbElbIpbIqcLUbFDbIsbItbHObCpbHSbIwbIxbIybUdbLybMqbICbJWbUcbIFbIGbIHbIIbIJbzAbIKbCubCvbMHbMFbINbIObIPbIQbHvbGabGbbISbEnbEnbEnbCJbCJbCJbMSbMPbCJbCJbBybCJaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaabMZaaaaaaaaaaaaaaaaaaaaaaaaaaabGtbuObEmbIVbIWbNdbPebPKbPEbNfbtCbvtbJcbJdbJebJebJfbJgbJhbJibJjbJgbJfbJebJebNkbJkbJlbNqbJnbJobNBbJebJebJpbJgbJhbJibJjbJsbJtbJubJtbJvbJwbvUaJlbEtbEqbFHbGFbNLbGHbDzbHAbFibDVbxFbNQbCFbDSbDEbJGbwkbJHbJIbJJbDJbJKbJLbJMbJNbJObFDbJPbItbJObCpbJQbJRbIxbJSbJTbJUbNZbObbMCbJYbIFbJZbKabKbbKbbzAbKcbIMbHkbIUbIRbJbbIXbKgbKdbKkbGabGbbKlbEnbKmbOdbKnbEnaafaafaafaafaafaafaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafbKpbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabtnbtnbtnbtnbtnaaaaaaaaaaaaaaaaaaaaaaaabKvbKwbKxbKwbKyaaaaaaaaabGtbGtbOfbKAbIVbKAbOibKCbOnbKDbKEbtCbKFbvtbKGbKHbAabKIbAabzZbHHbKJbAabKKbKLbKMbKNbKObAcbAabKPbKQbHLbKRbHLbHLbKSbKTbODbOtbKWbKXbcLbKYaRpaRpaRpaJlbOEbFlbFnbOFbJmbOGbJybJxbFIbLgbLhbLibLjbHgbDEbIkbIabIzbHhbDJbDJbLobLobLobCpbPMbLqbQPbLsbLtbCpbLubLvbIxbLwbFGbLybOHbLAbLBbLCbIFbJCbLEbKbbKbbzAbRsbSLbCvbwwbLGbuTbuUbLJbKhbLLbGabLMbLNbLObLObLObLPbGdaaaaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafbLQbLRbLSbLRbKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbsObLXbtdbLVbLZbMabMbbGtbMcbMdbMebMfbMgbOLbOKbMjbMjbMkbtCbtCbtCbOMbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbtCbMmbMnbMobtCbtCbtCbtCbtCbONbtCbtCbtCaJlaJlbOQaJlaKSaMpbMraJlbKZbJXbORbGFbLdbxCbDzbLDbxCbtvbMzbMAbMBbwkbOTbMDbMEbOUbMGbPubVzbMJbMKbMLbItbJObFDbFDbVVbJObCpbMNbMObMObMObMObMObMObMObMObMObMObPvbMQbMRbMRbzAbPAbKibMUbwwbMVbMVbMVbMWbKjbMYbMVbMVbMVbMVbMVbMVbNabNbaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymaymbPCbLRbLRbNebKtbKtbLTbLTbPDbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbNgbMsbNgbKxbNibNjbPFbNlbNmbNnbKAbNobNpbGvbPHbNrbubbtObGvbNubNvbNwbNxaaaaaaaaaaaabNybuhbNAbPSbNDbNCbNEbNFbNGbNHbNIbNFbNJbNKbPXbNMbNNbNObNPbqsbNRbNSbNTbNUbNUbNUbNUbDtbDtbDtbDtbMtbMtbxCbQabOabQbbMzbMvbMubOebQcbOgbOhbQdbOjbMxbMwbOmbNhbMKbOobFDbFDbNVbJObJObOobCpbMNbMObOqbOrbOsbQebOubOvbOwbWIbMObOybOzbOAbOAbzAbOBbLFbCvbzIbQgbQpbQjbQBbLKbRdbQXbRvbRebRxbVFbMVbuxbEnbOObOObOObOObOOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabOPbKtbPCbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabLVbNgbNgbNgbRAbRzbKAbOSbRDbRBbKAbRFbOVbOWbGvbGvbGvbGvbGvbGvbOXbOYbOZbPaaaabPbbPcbPcbPdbvYbPfbPgbPhbPfbPibNFbPjbPkbPlbNFbPmbNXbPobPpbPqbPrbPsbPtbPtbNSbRWbRJbPwbPxbPybDtbNYbLbbScbGFbGFbSgbDzbSibxCbSnbwZbwYbwlbwkbSubPIbwkbOkcbdbXnbOlbPNbMKbCpbCpbCpbCpbCpbCpbCpbCpbPObMObPPbQYbPRbOsbOsbOsbOsbwjbMObPTbLEbPUbPUbzAbBhbSLbCvbMXbMTbMTbOcbPVbOCbSQbSPbSSbSRbSSbSVbMVbQfbSWbOObQhbTgbOpbQkaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbQlbQmbQmbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabKxbMsbMsbMsbKxbQnbQobTAbQqbQrbKAbKAbQsbQtbTObQvbQvbQvbQvbQvbQvbQwbQxbQyaaabQzbQAbUbbQCbxbbPfbQEbQGbQFbPfbNFbQIbQJbQKbNFcbQcbkbQNbQOcdpbQQbQRbPtbQSbPxbQTbNUbPxbPxbQUbDtbPnbGFbQVbUkbGFbPzbDzbLebRCbQZbPBbUobyhbRGbDEbIkbSpbOkbXnbXnbOlbRfbMKbRgbRhbygbRjbRkbRlbybbRnbPObMObOsbOsbRobOsbOsbOsbOsbyabMObRqbLEbRrbRrbzAbRsbRtbRubyfbRwbUGbUwbUPbUObUWbURbVkbVjbVvbVmbxIbREbVGbxHbRHbRIbQibRKaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLbwLaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaabLVbRMbRNbRObLVbRPbMabMbbGtbGtbRQbRQbRQbGtbGtbNxbRRbRRbRSbRSbRSbRSbNwbQyaaabRTbRUbRVbVObRXbRYbRZbSabSbbSbbWgbSdbSebWibNFbPtbPtbPtbPtbPtbWkbPtbPtbShbWobSjbNUbPxbSkbvnbDtbQHbLbbQVbSmbWMbPzbSobJAbJBbSqbRabSsbStbJzbFsbSvbIEbSxbRibRbbSAbSBbMKbRmbSDbWVbRjbSfbSGbXabRnbPObMObMObMObRobOsbOsbOsbMObMObMObSIbSJbRrbRrbzAbSKbSLbCvbzIbXcbXfbXebSQbXibXqbXpbXvbXubYabXxbMVbQfbYobOObSXbSYbSybTaaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbTcbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabTdbKwbTebKwbTfbYtaafaaaaaabGtbThbTibTjbGtaaabNxbTkbTlbTmbTnbTnbTnbTobQyaaabQzbTpbTqbTrbvobPfbTtbTvbTubTwbNFbSzbTybTzbYwbTBbTBbTBbTCbTCbTDbTEbULbPxbPxbTFbNUbNUbNUbNUbDtbDtbLfbLkbLcbDtbTJbTKbTLbJFbJEbTJbQbbLlbLmbTRbTSbTJbMKbMKbMKbMKbMKbMKbvLbTUbTVbRjbvybTXbTYbRnbPObMObTZbQWbPQbYHbYzbNWbNcbTZbUgbUhbUibIIbIJbzAbIKbSLbUjbwwbMVbMVbYMbYSbMVbMVbMVbMVbYYbSCbVFbMVbvxbUnbOObUpbZbbUrbOOaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbUsbUsbUsbUsbUsbUsbUtbLTbUubUsbTcbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabMZaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbUvbNxbNxbNxbNxbRSbZcbNwbUxaaabUybPcbPcbUzblCbPfbPfbUBbPfbSFbNFbUDbSHbSTbNFbSUbSUbSUbSUbSUbSUbSUbSUbUHbUIbUJbUKbUKbUMbNUbDtbUNbSZbTxbUQbZebwabUTbUUbTMcdGbTNbUTbUYbUZbVabVbbUebTPbVdceobVgbVhbVibUlbZrbUmbRjbUCbZsbUCbRnbPObMObVnbUFbVpbVqbVrbVsbVtbVubUgbzAbZubzAbzAbVwbCxbSLbCxbVxaafbnxbZvbZzblSbVBbZBbZLbZCbZObUVbMVbVHbVIbOObVJbVKbVKbwhaaLaaLaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabwibLRbLRbLRbLRbLRbLRbLRbVNbLUbLTbLTbLTbLTbZPbLUbKuaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabVPbVQbVQbVRbVSbNxbVTbRSbVUbNxaaaaaaaaaaaabNybpcbVWbVXbVZbVYbPfbNFbWabWbbNIbNFbSUbUXbVfbVcbVDbVCbVEbSUcaqcaqcaqcaqcaqbTFbWjbZSbWlbWcbWdbZUbWpbxgbWrbWsbWtbWubWtbWvbWtbWwbWxbWybWzbWAbWBbWAbWCbWDbWEbWFbWGbWebnHbWfbWKbWLbZVbxVbMObxWcaabzlbWSbWTbWhbWSbWSbnAbWWbWXbWYbWZbCxbCxbSLbCxbFTaafbnxcaxcaxbXbbnabXdbnocaWbXgbXhbMVbVHcbebOObOObOObOObOOaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbQmbQmbQmbQmbQmbQmbXkbLTbQlbQmbXlbLTbLTbLTbLTbKtaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabXmcbfbWmcbgbRScbibXrbRSbXsbNxaaKaaaaaaaaabNybNybNybNybNybNybNybNFbUDbUEbXtbNFbSUbWnbWJbWHbWHbWJbWRbSUbhVbWUbWUbXocaqbXBbDtbDtbXCbXDbXEbXFbXGblRbXIbXJbXKbXLbXMbXNbXObXPbXQbXRbXSbXTbXUbznbzpbzobAPbzqbARbAQbATbAScbjbAUbYfbYgbIwbYhbVobCqbWObWNbWPbYmbYnbgJbYpbYqbYrbYscbmbYrbYubYvbILaafbnxcbncbrbrBbVBcbtcbAcbycbDbYAbMVbVHbYBbYCbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKtbLTbLTbLTbLTbLTbLTbTbbLTbXlbLTbLTbLTbLTbLTbKtbKtaafaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabYDbVQbVQbVRbYEbYFbYGbNxcbJbNxbYIbYJbYKbYIbYIbYLcbLbYNbYObYPcbObXwbXzbXybYebXAbYjbWJbYybYxbYRbYQbYTbidbYVbYUbYXbYWcaqbZhbNScbWbZjbZkbZlbZlbZmbnEbZobZpbTJbTJbZqcccbTJbTJccncceccrcaIcctbWQbZxbZyccubZybZAbZaccvbZabZAccEbYfbMNbIwbZEbXWbXVbZdccGbZJbZKbMObMObwwbwwbwwbwwbwwboIbnFbofbwwbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVbMVccJbZQbZRbUnaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaabKtbKtbRLbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamccMaamaamaamaamaamaaaaaaaaaaaaaaaaaaaafaafaaabZfbZgbZgbZgbZHbZgbZgbZTbZIbYIbZYbZZbYIccQcabccScadbZWcafccYbZXcaecaccahcagcaibWJbYycajcakbYQcalbSUcaqcaqcaqcaqcaqcarbNSbDtcascatcdjcamcawcdmcaycazbTJcaocaBcaCcaDcaEcaFcaGcaHcaIbZxbWQcapbZycaKbsEbZAbsGcaNcaObZAbXXbYfbPObIwbXYbsAbXZbXYbXYbIwbIwbIwcaRcaScaTcaUcaVbwwbwwcdBbwwbwwcaXcaYcaucaAcavcdNcaZcbacbccdUcdTcdZcdYcbhbUnbUnbUnaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafaafbKsbKtbUubUsbUsbLTbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcbbceccebcblcedceicefcbpcbobYIcelcbsbYIbYIcercbucbvcbwcbxceucbqbXzbXybYecbzbsIbWJbWJcbBcbCbWJcexbSUcbFcbGcaqcbHcaqbTFcbIcbIcbIcbIcbIcbIcbIbTJceCcbEbTJcbKcbMcbNceHcaEcbPceIceKcaIbZxbWQcbRbZycbScbTbZAcbUcbVcfebZAccqbYfbYbbYdbYcbYiccsccAbYccepbYkbYlcktbZDbZwbZFcktcfjbZGccCccBcfkccDccPccFcfscfmcfGcfucfmcfIcfMcfLcfRccwccxccycczbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaaaaaabOPbKtbPCbKtbKtbLTbLTbLTbLTbLTbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafccRccRcebccTcfZceiccUccWccVbYIcgeccHccIcgfccKccLcgmccNccOcgoccXcdaccZcdecdbbqTcdycdQcdFcekceecembsccdccddaJEcdfcaqbTFcbIcdgcdhcdicgOcdkcdlcgRcdncdocgWcdqcdrcdsbqtcaEcducdvcdwcaIbZxbWQcenbZycdxbqbbZAcdzcdAbqabZAcaPbYfbYfcaQbYccbYcbXcbZbYcchBccacjfcdLcdLbyFbBucdLcdOcdPceqcdRcdOcdSbBpbyebydcdScdScdScdScgXbyebydcdScdSbXjcdXbpZbpAceachabpybpsbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycbycchicegcegcehbKtbKtbLTbLTchnbLTbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejcejcejcejcetcesbYIbYIbYIbYIbYIchpchuchqchqchqchzcewbXzbXybYeceybYjceEceTceSceWceUceXbSUcezaJFceYaJFcaqbTFcbIceDcfacfacfaceFceGbTJchPchLbTJcbKcbNceJceHcaEchSceLceMcaIbZxbWQceNbZyceOcePbZAbZAbZAbZAbZAccbceRbYfcaQbYcccdbszbYcbYcchBcifcjfcdLbsycfbcfbcfccdOcfdciycffcdOcfgcfhcfhcfhciCciLciKbsxciPcfnbsecfpcdScfqcfrciQbUnbUnbUnbUnaaaaafaaaaaaaaaaahaahaahaafaaaaaaaafaaaaaaaafaafaafcftcfBcfvbNebKsbKtbKtbLTbLUbLTbKtbKtaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcejcAWcCYcvbcvccwfcejcfDcfCcfFcfEcfHciVcjacjacfKcfJcfJcjlcjpcbqbXzbXybYecfNcaicfOcfQcfPcvtcwecggbSUaJFaJFcaqceBcaqbTFcbIcfVcfWcfWcfWcfXcbIcfYcjtcgacfYcgbcgccgdcjvcaEcjCceLcgicaIcghccfcwEbZycgkcglbZycjIbLvbVicgnccgcchbYfccjcciccicckcclcclcclcclccmcdLckncgycgycgzcgActscgrcgpcgucgtcgGcgGcgGcgxcgIcgIcgJckocgLcgDcgMcdScgNcwDcgPcgNaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafcgQbKqbKqbKrbKsbKsbKtbKtbKtbKtbKuaafaafaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaaaaacgScATcgTcgTcgUcsdcejcgHcgFckFcgKckQckNclgclfcluclpclCchcchfchechhchgchjclGbSUbSUbSUbSUbSUbSUbSUbSUcmgclVcaqcmkcaqbTFcbIcbIctpctqctrcbIcbIcsnchschtcfYcaEcaEcaEcaEcaEcaIchkchlcaIchwcsZchwbZyctGctbbZychAchBbVichCbVichDbYfccobYfbYfccpcdCcdCcdCcdDbYfcdLchIchJchJchKcmschMchochOcmwchQckLckLckLckLcuOctUckLcmGckLchEcCqcdSchZciachGcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaafaaaaaaaaaaaaaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEchHcmPchHcgEchNcmQchNcgEchRcmRchRcgEaaaaaaciicATcgTcgUcgUcyScejchUchTchWchVcmXchXcidciccnecieciecigciecbqbXzcihbYecikcimcilciocinciocipcirciqciqciAciAciAciAbTFciGciHciIciIciJcnfcngciMciXciOcnucnhciRciSciSciTciUcaIcaIcaIcnwcdEckqbZybZybZybZychBchBbViciYbViciZbYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcjgcisciucitcjjcjkcivcjmcjncjociwcjocjocixcyVcyUcgIcnEcgIciWcyTcdScnFcjwcjxcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEchHcjbchHcgEchNcjcchNcgEchRcjdchRcgEaaaaaaciicgTcgUcgUcgUcjBcnIcjhcjechWcjicnLcnKcnPcnNcjzcjycjDcjAcjEcbqbXzcjFchjcjGcnQcjHcjJcjJcjJcjKcjMcjLcjNcolcjOceAciAbTFciGcxnciIckbckccxecubcxJckgckhctQcxwckkcklciScywciUconcoqcxYcjQcjPcdHcyLcdIcdIcdJcdIcdKbVibVibVibVibYfccobYfaaaaaaaaaaaaaaaaaaaaacdLcorcjRcjTcjSckEcdOcotcdOckGckHcjXcjUcjUcjYcgIcgIckecjZcjUckickOcdSckPcwGckRcgNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacgEckrckuckscgEckzckBckAcgEckDckJckIcgEaaaaafciiclbcgTcgUcgUcgUcejckMckKchWchWcoAchWchWchWchWckTcieckWckYcbqclackZcldclccoBcleclhclhclhclicljcljclkciAcllcgqclwclxciGcDdciIclzclAclBcoCclDclEclFcoFclHclIclJciScDcciUcoJcoLclNclnclmclQclNclRclSclTbYfceQcdIcdIcdIcdIcdIcltbYfaaaaaaaaaaaaaaaaaaaaacdLcmacmbcmccmdcdOcmecmfcpdcdScmhcmicmicmiclvcpfcmlclPclOcmicmicmncdScmocDFcmqcmraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafcgEclXcmmcmjcgEcmtcmmcEgcgEcmtcmmcEgcgEaaaaafcmzcgTcgTcgUcgUcmAcejcmvcmucmxcpocprcmycmCcmCcmEcmDcmCcmFcyXcbqcmIcmHcmKcmJcimcmLcmLcmMcljcmNczJczeczeciAcibceVcCgcqgciGcClciIcnccndcpCciGcmSciNcmWcfYcpGcnicnjciScCOciUclLclMclNcnlcpHcnlclNaaaaaaaaabYfbYfbYfcnnclSclSclTbYfbYfaaaaaaaaaaaacdOcdOcdOcdOcdOcdOcdOcdOcdOcnocnpcnqcdScdScnrcnscntcdScdScdScdScpIcnscntcdScdScnvcpNcnvaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaafaafaafaaaaafcnxaafcnxaafcKAaafcpOaafcKAaafcpOaafaafaaacejcnAcnBcgUcgUcnCcnDcpRcpPcnycnmcpUcnzcnzcqecnzcnGcqrcnHcnGcnJcjscDXcEjcnMcnOcnOcnOcnOcqIcqDcnRcnRcnRcgscgscgscgscnSciGcKCcJpcnccEZcnWciGcmSciNcEXciUcnYcEJcnjcEBcEqciUclLclMclNcoccodcoeclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacdOcofcogcohcwlcojcokcqLcomcqNcopcoocdOaaLaafaafaafaafaaaaaaaaacqOaaaaaaaaaaafcoscKGcosaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafcoucrvcracoxcovcowcrzcoxcrQcrUcrzcoDcrVcrXcoEcnycnycnycnycnycnycnycnycoHcoGcrZcoIcsacoKcoNcoMcoOcnGcoQcoPcoRcnGcoTcoScoUcnOcoWcoVcoYcoXcpacoZcpjcpbcpbcpkcpncpncpjcsbciGciGcpccscciGciGciGcpeciNcDIciUciUciUcsecphciUciUclLcpiclNcvmcpscvmclNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaafcdOcplcpmcplcsgcLZcppcpqcomcomcsicomcdOcdOaaaaaaaaaaafaafaaaaacaaaaaaaaaaaaaafaaacDLaaaaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaaaaaaaafcptcsDcpucpxcpwcpFcsLcsMcpzcsWcsQcpEcpDcsXcpFcpLcpJcsYcnTcevcnkceZcpTcpWcpVcpYcpXcqacpZcqccqbctccqdcticqfctkcqzcoTcqJcqKcnOcpacpacpacpacpacqMcpjcqPcqPcqPcpncpncpjbTFcrYciGcqhcqicqjcqkciGcqlciNcmOciUcqncqocqpcqqciUctmclLcpiclNctxcqQcquclNaaaaaaaaaaaaaaaaaacqvcqwcqxcqycqvaafaaaaaaaaaaaacdOcplcplcplcoictBcqBcqCctIcqEcqFcqGcqHcdOaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacmZaaaaafaafaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafcqRcqYcqScqVcqUcpFcqXcpFcvWcqYcqXcpFcvWcqYcpFcpFcpFcpFcpFcqZcpFcpFcpFcrbctOcrdcrcctScpZcrfcrecrhcrgcrjcricrlcrkcoTcqJcrmcnOcrncpacpacrocpacrpcpjcrIcrKcrJcrKcrLcpjbTFcrqciGcrrcrscrtcructTcrwcrxcryctVcrAcrBcrCcrDciUcrEcrFcrGcrHcqvcuacqvcrHaaaaaaaafaaaaaaaaacqvcrRcrTcficqvaafaafaaaaaaaaacdOcomcomcomcomcrMcppcrNcrNcrNcnpcrNcrOcdOaaaaaaaaaaaaaaacrPcrPcrPccMaafaafaafaafcnaaafaafaafaafaafaaqcrPcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaafaafcptcpFcrccpFcrccpFcqXcpFcuecxacufcxaculcxacxacuycurcpFcpFcuLcuEcuEcuEcuYcuUcvkcvkcvlcpZcvncshcsjcnGcsmcskcvscnGcspcsocsrcsqcstcsscsvcsucpacswcpjcsxcrKcsycrKcoycpjbTFcizciGcszcsAcsBcsCciGcfYcoacfYciUcsEcsFcsGcsHciUcsIcrGcrGcqvcsJcsNcvvcqvcqvcqvcqvcqvcqvcqvcqvctMctDctNcqvcqvcqvcrHaaaaaacdOcofcogcohcslcsRcqBcrNcrNcrNcnpcrNcsScdOaaaaaaaaaaaaaaacrPaaaaafaaaaafaaaaaaaaackxaaaaafaafaaaaaaaaaaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaafaaaaaacptcpFcrccpFcsOcsTcvEcsVcsUcvGcufcxacvOcxacxacvXcvRcwmcwacwzctacwUcwHcwHcwWcrccrccthctgctjcwXcnzcnGcwYcnGcnGcnGcwZctlcsrctncttbPWbQubPYcpacxdcpjcxocrKcsycrKcxpcpjctvctwciGciGcxqciGciGciGciBctzctAciUciUciUcxrciUciUcsIcrGaaacqvctCctZctEctFcnZctHcxsctJctKctLcqvcuVcxtcuVcqvcxFctPcqvaafaafcdOcplcplcplcxHcLZctRcuccnXcnVcudcrNctWcdOcdOcdOcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcsOcsTcsTcsTcvEcsTcsTcsTcvEcsTcsTcsTcsTcsTcxVcyacsTcybcsTcyccsTcsTcsTcuhcugcuicpvcpFcujcygcukcuncumcupcuocumcuqcuscyhcuucutcutcuvcutcuwcyicyMcuAcuzcuBcuBcpjcuCcuDcymcuFcuFcuGcuHcuIcuJcuJcuJcuJcuJcuJcuJcuJcuKcrFcrGaaactFcypcuPcuNctFcpycuRcuQcuQcvdcvacuQcuQcvhcuQcuVcuXcuQcqvaaaaaacdOcplcplcplcslcyrcuZcvicpBcpAcvjcrNcrNcvecvfcvgcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcpFcpFcpFcpFcqXcpFcpFcpFcqXcpFcpFcpFcpFcpFcvWcpFcpFctScpFcyucpFcyEcyzcvpcvocvrcvqcyFcvqcyHcvucvxcvwcvycvucvucvzcvAcqIcvBcpacvDcvCcpacpacyJcwOcwOcxCcuBcuBcpjbPxcAscvNcvNcvNcvNcyKcvNcvNcvNcvNclMcvPcrGcrGcrGcrGcrGcrGaaactFctFcyRctFctFcobcvScvTcvUcvVcvHcvJcvIcvLcvKcyZcwbcwccqvaaaaaacdOcomcomcomcomcwdcppcvicpgcrScvQcrNcrNcwhcrNcwicdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaafcrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaccMaaaaaaaaaaaacptcpFcpFcpFcpFcpFcqXcpFcpFcpFcqXcpFcpFcpFcpFcpFcvWcpFcpFctScpFczncpFcpFczncznczocpFcpFcvZcvYcwgcwgcwgcwgczqcwkcoTcwocwpcsqcwqcpacwscvCcpacwtcpjcAQcwOcARcwxcwwcpjczrcvMcvNczSczTcwKcwLcwMcwNczgcvNcwPcwQcrGaaaaaaaaaaaaaaaaaacqvcwRcwycwAczBcwCcwBcqWcqAcqtcwFcwTcwScwVczFcuWcuQcqmcqvaaaaaacdOcofcogcohckXcsRcuZcxgcxhcxhcxicxjcxkczLcxmcqscdOaaaaaacrPaaaaafaaaaafaafaafaaackxaaaaafaaaaafaaaaafaaacrPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaaacptcpFcpFcpFcpFcpFczMcpFcpFcpFczMcpFcpFcpFcpFcpFcvWcpFcpFczXczVcAhctdctdcAhcAtcAhcxlcAvcAwctdcAAcAxcAHcADcAJcwkcoTcxucoTcxvcpQcpacpacxAcpacxBcpjcyPcyPcxDcwxcwwcpjbPxcvMcvNcxKcxLcxMcxNcxOcxNcxPcvNcxQcxRcrGaaaaaaaaaaaaaaaaaacqvcxScxTcxUcAUcxWcxXcpMcxZcuTcBkcuScxEcuTcBmcqvcqvcqvcqvaaaaaacdOcplcpmcplcBncLZcppcrNcrNcyecyfcrNcBqcomcomcomcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacBsaaaaaacBsaaaaaaaaacBsaaaaaaaaaaaaaaacBsaaaaaaaaacBsaaaaaacBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpFczmcrWcrWczpcxGcrWczpcrWcxIcBucuEcuEcBzcuEcBAcuEcuEcuYcBDczncpFcpFcyjcylcykcyncBEcyocpFcBHcyqcyscyscBIcytcoTcxucyvcnOchbcpacyxcpacBKcyycpjcpjcpjcpjcpjcpjcpjbPxcvMcvNcnbcyNcxLcyOcxLcxNcnUcvNcyQcBLcrGaaaaaaaaaaaaaaaaaacqvcuVcBOctFctFchdcyAchmcyWctMctDctNcyBctMcvhcyYcqvaaaaaaaaaaaacdOcplcplcplckXcBRczacrNcrNcrNcyfcrNczbcrNczccrNczdaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacBscBscBscBsaaaaaaaaacBscBscBscBscBscBscBsaaaaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpFcqXcpFcpFcpFczMcpFcpFcpFczMcpFcpFcpFcyCcpFcvWcpFcpFcpFcyDczncpFcpFcBScAtctfcyGcwgcCccwgcwgcyqcCecyIcCfcytcoTcxucoTcnOcijchYchychvczfcpacnOcsKchrchrczhcCicjqczNczOcvNctoczPczQcxNczRctuctycvNczUcCncrGaaaaaaaaaaaaaaaaaacqvczWcuMcCBcuVczYczZcAactFcAbcAccsPcyBczWczjcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgczkcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacBscBscBscBsaaaaaacBscBscBscBscBscBscBscBscBsaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaaaaaaczlcpFcqXcpFcCFcxacufcxacCJcxacufcxacCJcxacxccxacxbcCKctectdcCNctfczsczucztczwczvczxcwgczzczycwgcwgcwgcwgcwgczAcjscjrcjscnOcnOcnOcnOcnOcnOcnOcnOczDchrchrczEcANcAObPxcAPcvNcwucvFcCQcuxcwJcwIcwvcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBeczHczGczIcBeczKcqvaafaafaaaaaaaaaaaabquaaacdOcBlcDmcDacBocBpcDmcDpcBrcBpcDmcDtcdOaaaaaaccMaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacBscBscBscBsaaaaaacBscBscBscBscBscBscBscBscBsaaaaaacBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaaaaaaaaaaaIaaaaaacAdcpFcqXcpFcDxcylcqXcpFcDNcylcqXcpFcAucylcpFcpFcDOcpFcDUcylcEccAzcAycABcEicErcACcAEcwgcEycAFcjucAIcAKcumcAMcALcumcAScumcBfcuocBgcBicBhcBhcBjckacBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcFecCbcCacCdcvNcrGcFgcrGaaaaaaaaaaaaaaaaaacqvctFcFrcuVctFckdcChcFCctFcCjcCkcqycgvcBtcCkcCocrHaaaaaaaaaaaaaaaaaacgwaafcdOchFcFEclUcomclscFFclqcomclocFKclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaaIaafaafcAdcpFcFLcBycBxcFVcFUcBCcBBcGgcFWcBGcBFcGhcpFcBvcGocGucBJcBMcGvcnycnycnycnycnycnycnycnycGAcBNczAcBPcBQcoTcGEcoTcoTcxucoTcoTcGMcoTcBQcBTcCpcBUcCrcGOcHjcHacCPcHCcAObPwcCRcCScCTcCacAGcAVcBwcCacCtcCscCucHVcCXaaaaaaaaaaaaaaaaaacqvcCvctDcuQcIAcDbcuQckfckjcDeaafaaachxcCxcCwcCyaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcCzaaaaaaaaIaaaaaacCAcCCcIMcCEcCDcCGcIRcCHcCDcCGcIRcCHcCDcCGcCIcCIcITcCHcCDcCGcIZcnyaaacCMcCLcCVcCUcCZcCWcDjcDgcDkcDkcJhcDlcDocDncDqcJlcDncDqcDocDrckmcDscDrczAczAcAOcJAcJzcDPcDQcAObNUcDRcDScDTcCacCbcJBcCbcCacDvcDucDfaafaaaaaaaaaaaaaaaaaaaaacqvcCvcDVcDwckpckpcDwcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcJCcJFcJFcJUcJFcJFcJFcJFcJVcJFcKdcJFcJVcJFcKdcJFcJVcJFcKdcJFcJFcJFcKdcJFcKdcJFcKoaafaaacDzcDycDBcDAcDDcDCcDjcDEcDkclrcDHcDGcDJclyckCcDKcDWcDMcDJcEbcEdcKpcDraaaaafcAOcKqcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEecuXcEfcgjcgjcEfcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaqaaaaaaaafcgEcmtcmmcEgcgEcmtcmmcEgcgEcmtcmmcEhcgEaaacgEcEgcmmcEhcgEaaaaafaaacDzclKcElcEkcEncEmcEpcEocDkcmpcEscKBcDJcEtcEvcEucExcEwcDJcmBcEAcEzcDraaaaaacAOcKDcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcEEcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPccMcrPaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaafaaIaaaaaaaafcgEcEGcEIcEHcgEcEMcEOcENcgEcEPcERcEQcgEaafcgEcEScEUcETcgEaaaaafaaacDzcEVcDBcEncEncEWcEYcKEcFacfAcFccFbcKFcFdcFjcFfcFlcFkcFpcFmcfUcFqcDraafaaacFJcKIcKHcAOcKJaaabNUcFMcKKcFNcFOaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrHcqvcqvcFPcFQcEfcEfcEfcFRcFPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabqpbqpbqpaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafcfTaafcrPaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaIaaaaafaafcgEcFscFtcFscgEcFucFvcFucgEcFwcFxcFwcgEaaacgEcFwcFwcFycgEaaaaafaaacDzcCLcFzcEkcEncDCcFAcDEcDkcFBcFDcKLcDJcKMcFGcKNcFGcFHcDJcFIcFTcFScDraaLcKPcKOcKRcKQcKOcKOcKSbNUciEciDcGjaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGlcgjcgjcgjcgjcgjcGlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaafaaacrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaIaafaafaaacgEcFscKTcFscgEcFucKUcFucgEcFwcKVcFwcgEaafcgEcFwcKWcFwcgEaafaafaafcFYcFXcGacFZcGccGbcGdcDEcDkcGecKXcGfcDJcGicGmcGkcKYcGncDJcGpcGrcGqcDraaacLacKZcLccLbcLWcLdcLfcGFcGGcGHbNUaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcCmcqxcqxcqxcCocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcrPcrPcrPcrPaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccMaaaaaacgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEcgEaaacGscgEcgEcgEcgEaaaaaaaaaaaacBNcBNcBNcBNcBNcLgcGtcGtcGtcGtcLhcGtcGwcGycGxcGycGzcGtcGtcgBcGtcGtcGtcLacKZcLkcLjcLmcLlcLnaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaaaaaaaafaafaaaaafaafaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaafaaacGQcGRcGRcGRcGScGBcGDcGCcGIcLocGKcGJcgCcGLcLqcGNcGTcGPcGVcGUcGXcGWcGZcGYcHbcLrcGYcGtcLacKZcLtcLscLXcLucLvaafaaacGQcHccGQcHccGQcHcaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafcHncjVcHpaaacHncjVcHpaaacHncjVcHpaafaafaaaaafaafaafaafaafcHqcGRcGRcGRcGScGBcHfcHecHhcHgbSMcHicHlcHkcHocHmcHscHrcHucHtcHucHucHucHvcHucHwcHxcGtcLxcKOcKOcKOcKOcKOcLyaafaafcHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaabgaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaacHncjWcHpaaacHncjWcHpaaacHncjWcHpaafaafaaaaafaaaaaacHKaafcGQcGRcGRcGRcGScGBcHfcHzcHBcHAbSNcHicHEcHDcHFcHbcHbcHbcHHcHGcHIcHbcHbcHDcHLcHJcHMcGtcGtcGtcHNaaaaaaaaaaaacHOaaacHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcHncjWcHpaaacHncjWcHpaafcHncjWcHpaafaaaaaaaafaafcIcaaaaafcHqcGRcGRcGRcGScGBcHRcHQcHTcHSbSOcHUcHXcHWcHZcHYcHYcHYcIbcIacIdcHYcHYcIecIgcIfcIicIhcIkcIjcImcIlcIlcIlcIlcIlcIlcIncIocIncIocIncHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaafcIpcIrcIqcItcIscIucGJcIvcHbcHbcHbcIxcIwcIzcIycIBcLBcIDcICcIFcIEcIHcIGcINcIIcImcIOcIPcIOcIPcIOcIPcIOcIPcIOcIPcIOcHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaaacHncjWcHpaafcHncjWcHpaaacHncjWcHpaafaaaaaaaaaaaaaafaafcIJcIKcIKcIKcIKcILcILcILcILcILcLCcILcGtcIQcHbcHbcHbcLDcGtcLEcIScLFcGtcLGcJdcJicIfcJkcJjcLHcGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacBscBscBscBscBscBscBsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafczCaafaafaafczCaafaaaaafczCaafaaaaaaaaaaaaaaacIUcIVcIWcIXcIYcJncJacJbcJcciFcJecJfcJgcJecGtcLIcJocHbcHbcJrcJqcJtcJscJucJqcJwcJvcIgcIfcJycJxcJLcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcLKcLJcLMcLLcLNcJDcJEcLOcJGcJHcJHcJHcJIcJJcJKcGtcJMcJMcHbcHbcJrcJNcJPcJOcJQcJNcJwcHbcIFcJZcIHcHbcKacGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafcydcxzcxycxxcxxcxxcxxcxxcxxcxxcxxcxxcxxcxxczicxzcxzcxzcLzcLAcLMcLwcLpcJDcJEcLicJGcJHcJHcJHcJIcJJcJKcGtcJMcJMcHbcHbcJrcJNcJPcJOcJQcJNcJwcHbcIFcJZcIHcHbcKacGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafcHdaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaafaafcxfaafaaaaafcxfaafaaaaafcxfaafaaaaaaaaaaaaaaacIUcIVcJRcJScJTcLPcIKcLQcJWcJecJecJXcJXcJYcGtcJMcJMcHbcHbcJrcKbcJPcKccLRcKbcKkcKecKscKmcKucKtcKvcGtaaacHPcHPcHPcHPcJmcHPcHPcHPcHPcHPcHPcHPaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaactYctYctYctYctYaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaaIaafaafcHncwrcHpaaacHncwrcHpaaacHncwrcHpaafaaaaaaaaaaaaaafaafcKfcIKcIKcIKcIKcKgcKhcKicKicKjcKgcKgcGtcGtcGJcGtcGtcGtcGtcGtcKwcGtcGtcGtcGtcGtcGJcGtcGtcGtcGtaafcHycHycHycHycHycHycHycHycHycHycHycHyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacHncwrcHpaafcHncwrcHpaaacHncwrcHpaaaaaaaaaaafaaaaafaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaafaaacKxaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaacHqcKycHqcKycKzcKycHqcKycHqcKycHqcKyaafaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKlcKlcKlcKlcKlcKlcKlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index d0b1ebcfb2b..ba47127c63d 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -405,9 +405,9 @@
"hO" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_floor_f9"},/area/centcom/evac)
"hP" = (/obj/structure/closet/emcloset,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"hQ" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_2_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access = list(13)},/turf/unsimulated/floor,/area/centcom/evac)
-"hR" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"hS" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"hT" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"hR" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"hS" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/fire{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"hT" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 0},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"hU" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_pod_1_recovery"; pixel_x = 25; pixel_y = 30; req_one_access = list(13); tag_door = "escape_pod_1_recovery_hatch"},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
"hV" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swall_floor_f5"},/area/centcom/evac)
"hW" = (/turf/simulated/shuttle/plating,/turf/simulated/shuttle/wall{dir = 3; icon_state = "swall_f10"; layer = 2},/area/centcom/evac)
@@ -467,7 +467,7 @@
"iY" = (/turf/space/transit/north/shuttlespace_ns9,/area/shuttle/escape_pod2/transit)
"iZ" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdownside"; nostop = 1; tiles = 0},/turf/space/transit/north/shuttlespace_ns5,/area/space)
"ja" = (/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
-"jb" = (/obj/structure/table,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"jb" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"jc" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"jd" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"je" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
@@ -476,7 +476,7 @@
"jh" = (/turf/space/transit/north/shuttlespace_ns15,/area/shuttle/escape_pod2/transit)
"ji" = (/turf/space/transit/north/shuttlespace_ns8,/area/shuttle/escape_pod2/transit)
"jj" = (/turf/space,/area/shuttle/escape_pod5/centcom)
-"jk" = (/obj/structure/table,/obj/item/weapon/hand_labeler,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"jk" = (/obj/structure/table/standard,/obj/item/weapon/hand_labeler,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"jl" = (/turf/space,/area/shuttle/escape_pod3/centcom)
"jm" = (/obj/machinery/door/airlock/maintenance_hatch{req_access = list(101)},/turf/simulated/shuttle/plating,/area/centcom/evac)
"jn" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "escape_pod_5_recovery_hatch"; locked = 1; name = "Recovery Shuttle Dock"; req_access = list(13)},/turf/unsimulated/floor,/area/centcom/evac)
@@ -492,10 +492,10 @@
"jx" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/syndicate_mothership)
"jy" = (/turf/simulated/shuttle/wall{dir = 2; icon_state = "swallc1"},/area/centcom/evac)
"jz" = (/obj/machinery/computer/arcade,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"jA" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"jA" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jB" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jC" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"jD" = (/obj/structure/table,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"jD" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jE" = (/obj/machinery/door/airlock/hatch{name = "Infirmary"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/centcom/evac)
"jF" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jG" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership)
@@ -505,7 +505,7 @@
"jK" = (/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"jL" = (/obj/structure/window/shuttle{icon_state = "window2"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/centcom/evac)
"jM" = (/obj/structure/grille,/obj/structure/window/shuttle,/turf/simulated/shuttle/plating,/area/centcom/evac)
-"jN" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"jN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jO" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"jP" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/area/syndicate_mothership)
"jQ" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 9},/area/syndicate_mothership)
@@ -517,15 +517,15 @@
"jW" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
"jX" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
"jY" = (/obj/structure/table/reinforced,/obj/item/weapon/pen,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
-"jZ" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"jZ" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"ka" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"kb" = (/obj/structure/closet/syndicate/personal,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"kc" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows2"; dir = 1},/area/syndicate_mothership)
"kd" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"ke" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kf" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
-"kg" = (/obj/structure/table,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership)
-"kh" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership)
+"kg" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership)
+"kh" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership)
"ki" = (/obj/machinery/sleeper,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"kj" = (/obj/machinery/sleep_console,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor3"},/area/centcom/evac)
"kk" = (/obj/machinery/door/window{dir = 1; name = "Cockpit"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
@@ -549,14 +549,14 @@
"kC" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 6},/area/syndicate_mothership)
"kD" = (/turf/unsimulated/wall/fakeglass,/area/syndicate_mothership)
"kE" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
-"kF" = (/obj/structure/table,/obj/item/weapon/folder,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
+"kF" = (/obj/structure/table/standard,/obj/item/weapon/folder,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kG" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kH" = (/obj/structure/closet/crate/freezer,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership)
"kI" = (/obj/machinery/door/airlock/hatch{name = "Cockpit"; req_access = list(109)},/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor2"},/area/centcom/evac)
-"kJ" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/obj/item/device/flash,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
+"kJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/obj/item/device/flash,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor4"},/area/centcom/evac)
"kK" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"kL" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"kM" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
+"kM" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"kN" = (/turf/simulated/shuttle/wall{icon_state = "swall14"; dir = 2},/area/centcom/evac)
"kO" = (/turf/simulated/shuttle/wall{icon_state = "swall13"; dir = 2},/area/centcom/evac)
"kP" = (/obj/machinery/door/airlock/external{req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
@@ -572,24 +572,24 @@
"kZ" = (/turf/unsimulated/wall/fakeglass{icon_state = "fakewindows"; dir = 8},/area/syndicate_mothership)
"la" = (/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"lb" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/structure/mirror{pixel_x = 28},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
-"lc" = (/obj/structure/table,/obj/item/device/radio/off,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"lc" = (/obj/structure/table/standard,/obj/item/device/radio/off,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"ld" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 4; name = "thrower_escapeshuttletop(right)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns8,/area/space)
-"le" = (/obj/structure/table,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"le" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/ionrifle,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"lf" = (/turf/simulated/shuttle/plating,/area/syndicate_mothership)
"lg" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_mothership)
"lh" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/turf/unsimulated/floor{dir = 1; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
"li" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 5},/area/syndicate_mothership)
"lj" = (/obj/machinery/door/airlock/centcom{name = "Barracks"},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/syndicate_mothership)
"lk" = (/obj/structure/mopbucket,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
-"ll" = (/obj/structure/table,/obj/item/weapon/storage/lockbox,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"lm" = (/obj/structure/table,/obj/item/weapon/stamp/captain,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"ll" = (/obj/structure/table/standard,/obj/item/weapon/storage/lockbox,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"lm" = (/obj/structure/table/standard,/obj/item/weapon/stamp/captain,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"ln" = (/obj/machinery/computer/shuttle,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"lo" = (/obj/structure/table,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
-"lp" = (/obj/structure/table,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"lo" = (/obj/structure/table/standard,/obj/item/weapon/clipboard,/obj/item/weapon/pen,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
+"lp" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/unsimulated/floor{icon = 'icons/turf/shuttle.dmi'; icon_state = "floor"},/area/centcom/evac)
"lq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'FOURTH WALL'."; name = "\improper FOURTH WALL"; pixel_x = -32},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/area/syndicate_mothership)
-"lr" = (/obj/structure/table,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lr" = (/obj/structure/table/standard,/obj/item/device/aicard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"ls" = (/obj/machinery/door/window{dir = 4; name = "Brig"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"lt" = (/obj/structure/table,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lt" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"lu" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/grass/brown,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership)
"lv" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{dir = 1; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"},/area/syndicate_mothership)
"lw" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/turf/simulated/floor/wood,/area/syndicate_mothership)
@@ -610,26 +610,26 @@
"lL" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"lM" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"lN" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
-"lO" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
-"lP" = (/obj/structure/table,/obj/item/stack/medical/ointment,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
-"lQ" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"lR" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"lS" = (/obj/structure/table,/obj/item/weapon/wrench,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/infra,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"lT" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
-"lU" = (/obj/structure/table,/obj/item/weapon/crowbar,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lO" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
+"lP" = (/obj/structure/table/standard,/obj/item/stack/medical/ointment,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
+"lQ" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lR" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lS" = (/obj/structure/table/standard,/obj/item/weapon/wrench,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/infra,/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lT" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"lU" = (/obj/structure/table/standard,/obj/item/weapon/crowbar,/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = -7},/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"lV" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 4},/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership)
"lW" = (/turf/simulated/floor/wood{icon_state = "wood-broken3"},/area/syndicate_mothership)
"lX" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"lY" = (/obj/machinery/door/window/westright{name = "Tool Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"lZ" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Infirmary"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
-"ma" = (/obj/structure/table,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -3; pixel_y = -3},/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"ma" = (/obj/structure/table/standard,/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -3; pixel_y = -3},/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"mb" = (/obj/machinery/door/window{dir = 8; name = "Tool Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_mothership)
"mc" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"md" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/o2,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/adv,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"me" = (/obj/item/weapon/weldingtool,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
"mf" = (/obj/machinery/door/airlock/centcom{name = "Barracks"; opacity = 1; req_access = list(150)},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mg" = (/obj/item/weapon/crowbar,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_mothership)
-"mh" = (/obj/structure/table,/obj/effect/spawner/newbomb/timer/syndicate,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
+"mh" = (/obj/structure/table/standard,/obj/effect/spawner/newbomb/timer/syndicate,/turf/unsimulated/floor{icon_state = "floor4"},/area/syndicate_mothership)
"mi" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "syndieshutters_workshop"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"mj" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership)
"mk" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/orange,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
@@ -664,9 +664,9 @@
"mN" = (/turf/unsimulated/wall{icon_state = "phoron13"},/area/alien)
"mO" = (/turf/unsimulated/wall{icon_state = "phoron9"},/area/alien)
"mP" = (/obj/structure/lattice,/obj/structure/grille/broken,/turf/space,/area/space)
-"mQ" = (/obj/structure/table,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
-"mR" = (/obj/structure/table,/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
-"mS" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"mQ" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp{pixel_x = 4; pixel_y = 8},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"mR" = (/obj/structure/table/standard,/obj/effect/landmark{name = "Nuclear-Code"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
+"mS" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mT" = (/obj/structure/bed/alien,/turf/unsimulated/floor{icon_state = "floor5"},/area/alien)
"mU" = (/obj/structure/bed,/obj/item/weapon/bedsheet/hos,/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
"mV" = (/obj/effect/landmark{name = "Syndicate-Spawn"},/turf/unsimulated/floor{icon_state = "grimy"},/area/syndicate_mothership)
@@ -676,23 +676,23 @@
"mZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"na" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"nb" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
-"nc" = (/obj/structure/table,/obj/machinery/chemical_dispenser/bar_soft/full{pixel_x = 2; pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"nc" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full{pixel_x = 2; pixel_y = 6},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nd" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"ne" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"nf" = (/obj/structure/sign/double/map/left{pixel_y = 32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"ng" = (/obj/structure/sign/double/map/right{pixel_y = 32},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"nh" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/blast/shutters{density = 0; dir = 8; icon_state = "shutter0"; id = "syndieshutters_infirmary"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"ni" = (/obj/machinery/computer/shuttle_control/multi/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"nj" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
+"nj" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nk" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nl" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nm" = (/obj/structure/bed/chair/comfy/black,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"nn" = (/obj/structure/table,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nn" = (/obj/structure/table/standard,/obj/machinery/button/remote/blast_door{id = "syndieshutters"; name = "remote shutter control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"no" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"np" = (/obj/structure/table/reinforced,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nq" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"nr" = (/obj/structure/table,/obj/item/weapon/folder{pixel_y = 2},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
-"ns" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"nr" = (/obj/structure/table/standard,/obj/item/weapon/folder{pixel_y = 2},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
+"ns" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen{pixel_y = 4},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"nt" = (/obj/structure/bed/chair/comfy/black{dir = 8},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"nu" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nv" = (/turf/space,/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/syndicate_station/start)
@@ -708,7 +708,7 @@
"nF" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/security,/obj/item/weapon/storage/belt/security,/obj/item/ammo_magazine/mc9mm/flash,/obj/item/weapon/gun/projectile/pistol/flash,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nG" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/red,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/red,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"nH" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
-"nI" = (/obj/structure/table,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nI" = (/obj/structure/table/standard,/obj/machinery/recharger,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nJ" = (/obj/machinery/computer/security/nuclear,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nK" = (/obj/structure/closet/secure_closet/freezer/kitchen{req_access = list(150)},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership)
"nL" = (/obj/structure/computerframe,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -716,7 +716,7 @@
"nN" = (/obj/machinery/door/blast/regular{id = "syndieshutters_telebay"; name = "Outer Airlock"},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"nO" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/machinery/recharger/wallcharger{pixel_x = 5; pixel_y = 32},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"nP" = (/obj/structure/table/rack,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/ammo_magazine/a12mm,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"nQ" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nQ" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -1; pixel_y = 2},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nR" = (/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nS" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"nT" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
@@ -725,15 +725,15 @@
"nW" = (/obj/machinery/shower{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"nX" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"nY" = (/obj/structure/table/rack,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/obj/item/clothing/accessory/storage/brown_vest,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"nZ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"nZ" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/supply/dock)
"oa" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ob" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"oc" = (/obj/machinery/door/airlock/centcom{name = "Bathroom"; opacity = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"od" = (/obj/machinery/shower{dir = 1},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"oe" = (/obj/structure/table/rack,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/obj/item/weapon/tank/emergency_oxygen/double,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
-"of" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"og" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"oh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"of" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"og" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/supply/dock)
+"oh" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 8},/obj/item/weapon/pen{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oi" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
"oj" = (/obj/structure/mirror{dir = 4; pixel_x = -32; pixel_y = 0},/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership)
"ok" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
@@ -758,7 +758,7 @@
"oD" = (/obj/effect/landmark{name = "Syndicate-Uplink"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oE" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/mask/gas/syndicate,/obj/item/clothing/head/helmet/space/void/merc,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oF" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"oG" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oG" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"oH" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 0; pixel_y = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
"oJ" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -768,14 +768,14 @@
"oN" = (/turf/unsimulated/wall,/area/centcom)
"oO" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "merc_shuttle_pump"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_mothership)
-"oQ" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 8; pixel_y = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"oQ" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oR" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "merc_shuttle_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1331; id_tag = "merc_shuttle"; pixel_x = -8; pixel_y = 25; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oS" = (/obj/machinery/door/airlock/vault{name = "Armory"; req_access = list(150)},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"oT" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom)
"oU" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/centcom)
"oV" = (/turf/unsimulated/floor{name = "plating"},/area/centcom)
"oW" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
-"oX" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
+"oX" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"oY" = (/obj/item/device/radio/electropack,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"oZ" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "smindicate"; name = "Outer Airlock"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pa" = (/obj/machinery/vending/cola{name = "hacked Robust Softdrinks"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
@@ -783,7 +783,7 @@
"pc" = (/obj/machinery/door/airlock/centcom{name = "Hardsuit Storage"; opacity = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"pd" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 8; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
"pe" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
-"pf" = (/obj/structure/table,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"pf" = (/obj/structure/table/standard,/obj/machinery/computer/pod/old/syndicate{id = "smindicate"},/obj/machinery/door/window{dir = 4; name = "Blast Door Control"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"pg" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 1; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
"ph" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{icon_state = "floor5"},/area/syndicate_station/start)
"pi" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
@@ -802,12 +802,12 @@
"pv" = (/obj/item/device/multitool,/obj/item/weapon/reagent_containers/spray/cleaner,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pw" = (/obj/item/weapon/storage/toolbox/mechanical,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"px" = (/obj/machinery/vending/cigarette{name = "hacked cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"py" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"py" = (/obj/item/stack/material/steel{amount = 50},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"pA" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"pB" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pC" = (/obj/machinery/door/window{dir = 4; name = "Brig"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"pD" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pD" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pE" = (/obj/machinery/cell_charger,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pF" = (/turf/unsimulated/wall,/area/centcom/living)
"pG" = (/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor{icon_state = "carpet15-15"; dir = 4},/area/holodeck/source_courtroom)
@@ -821,19 +821,19 @@
"pO" = (/obj/item/weapon/flame/lighter/zippo,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pP" = (/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/table/reinforced{icon_state = "table"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"pQ" = (/obj/machinery/door/airlock/glass,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"pR" = (/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"pS" = (/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"pT" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
+"pR" = (/obj/item/stack/material/glass{amount = 50},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"pS" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"pT" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
"pU" = (/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
"pV" = (/obj/structure/closet/secure_closet/personal,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/living)
"pW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/living)
"pX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/living)
"pY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor,/area/centcom/living)
"pZ" = (/turf/unsimulated/wall,/area/centcom/suppy)
-"qa" = (/obj/structure/table,/obj/item/weapon/kitchen/utensil/knife{pixel_x = -6},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = -1},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 4},/obj/item/weapon/reagent_containers/syringe/drugs{pixel_x = 3; pixel_y = 9},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qa" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qb" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle"; pixel_x = -25; pixel_y = 0; req_one_access = list(101); tag_door = "admin_shuttle_hatch"},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
"qc" = (/obj/machinery/door/window{base_state = "right"; dir = 4; icon_state = "right"; name = "Brig"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"qd" = (/obj/structure/closet/syndicate/suit{name = "suit closet"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qd" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qe" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 4},/turf/space,/area/shuttle/administration/centcom)
"qf" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 8},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/administration/centcom)
"qg" = (/obj/machinery/vending/snack,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
@@ -849,8 +849,8 @@
"qq" = (/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
"qr" = (/obj/machinery/atm{pixel_y = 24},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
"qs" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
-"qt" = (/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
-"qu" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
+"qt" = (/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 2; pixel_y = 6},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
+"qu" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
"qv" = (/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
"qw" = (/obj/machinery/vending/cola,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
"qx" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
@@ -860,12 +860,12 @@
"qB" = (/turf/unsimulated/wall{desc = "Why it no open!"; icon_state = "pdoor1"; name = "Shuttle Bay Blast Door"},/area/centcom/suppy)
"qC" = (/obj/structure/closet{name = "custodial"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qD" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/simulated/floor/plating,/area/shuttle/administration/centcom)
-"qE" = (/obj/structure/table,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"qF" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"qE" = (/obj/structure/table/standard,/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"qF" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/syndicate{pixel_x = -1; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"qG" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 4},/turf/space,/area/shuttle/administration/centcom)
"qH" = (/turf/unsimulated/floor{name = "plating"},/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/administration/centcom)
"qI" = (/obj/machinery/door/airlock/centcom{name = "Living Quarters"; opacity = 1; req_access = list(105)},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
-"qJ" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
+"qJ" = (/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
"qK" = (/obj/machinery/suit_cycler/syndicate{locked = 0},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"qL" = (/obj/machinery/door/airlock/external,/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
"qM" = (/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
@@ -881,18 +881,18 @@
"qW" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
"qX" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/supply/dock)
"qY" = (/turf/simulated/shuttle/floor,/area/supply/dock)
-"qZ" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"qZ" = (/obj/machinery/sleeper,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"ra" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"rb" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 4; start_pressure = 740.5},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rc" = (/obj/structure/table/rack,/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = 2; pixel_y = 2},/obj/item/clothing/suit/storage/vest/heavy/merc{pixel_x = -2; pixel_y = -2},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership)
"rd" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "admin_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 25; pixel_y = 0; tag_door = "admin_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom)
"re" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = -32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"rf" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"rg" = (/obj/structure/table,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rf" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rg" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rh" = (/obj/structure/bed/chair/comfy/black{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"ri" = (/obj/machinery/door/window{dir = 4; name = "Infirmary"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"rj" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"rk" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rk" = (/obj/structure/table/standard,/obj/item/weapon/screwdriver,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rl" = (/obj/machinery/vending/snack{name = "hacked Getmore Chocolate Corp"; prices = list()},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership)
"rm" = (/obj/machinery/dna_scannernew,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"rn" = (/obj/machinery/computer/cloning,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
@@ -915,10 +915,10 @@
"rE" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_infirmary"; name = "remote shutter control"; pixel_x = -25},/obj/structure/mopbucket,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"rF" = (/obj/machinery/door/window{dir = 1; name = "Secure Storage"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rG" = (/obj/item/weapon/stool{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"rH" = (/obj/structure/table,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rH" = (/obj/structure/table/standard,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"rJ" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
-"rK" = (/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -6},/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
+"rK" = (/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -6},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
"rL" = (/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
"rM" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living)
"rN" = (/obj/machinery/chem_master/condimaster{name = "CondiMaster Neo"; pixel_x = -5},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living)
@@ -926,47 +926,47 @@
"rP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/shutters{density = 0; icon_state = "shutter0"; id = "syndieshutters"; name = "Blast Shutters"; opacity = 0},/turf/simulated/shuttle/plating,/area/syndicate_station/start)
"rQ" = (/obj/machinery/button/remote/blast_door{id = "syndieshutters_workshop"; name = "remote shutter control"; pixel_x = 25},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rR" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Administration"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
-"rS" = (/obj/structure/table,/obj/item/device/aicard,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"rS" = (/obj/structure/table/standard,/obj/item/device/aicard,/obj/effect/spawner/newbomb/timer/syndicate,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"rT" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
"rU" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"rV" = (/obj/structure/table/reinforced,/obj/machinery/librarycomp,/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/shuttle/administration/centcom)
"rW" = (/obj/structure/bookcase,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/shuttle/administration/centcom)
-"rX" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
-"rY" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"rX" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"rY" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
"rZ" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad2"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
"sa" = (/obj/machinery/door/window{dir = 1; name = "Surgery"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sb" = (/obj/machinery/telecomms/allinone{intercept = 1},/obj/machinery/door/window/northright{name = "Telecoms Mainframe"; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"sc" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sc" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/prox_sensor{pixel_x = -8; pixel_y = 4},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sd" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/supply/dock)
"se" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/sign/nosmoking_1{pixel_y = 32},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sf" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/obj/item/clothing/mask/surgical,/obj/item/clothing/gloves/latex,/obj/item/weapon/surgicaldrill,/obj/structure/closet/secure_closet/medical_wall{pixel_x = 32; pixel_y = 0; req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sg" = (/obj/machinery/door/window/northright{icon_state = "right"; dir = 2},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
-"sh" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
-"si" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
+"sh" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
+"si" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/administration/centcom)
"sj" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/shuttle/administration/centcom)
"sk" = (/turf/simulated/floor{icon_state = "chapel"},/area/shuttle/administration/centcom)
"sl" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 0; req_access = list(150)},/obj/item/weapon/surgicaldrill,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
"sm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{name = "plating"},/area/centcom/living)
"sn" = (/obj/item/weapon/stool{pixel_y = 8},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
"so" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/obj/machinery/meter,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"sp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sp" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sq" = (/obj/machinery/door/airlock/centcom{name = "Living Quarters"; opacity = 1; req_access = list(105)},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/centcom/living)
-"sr" = (/obj/structure/table,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"ss" = (/obj/structure/table,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"st" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"su" = (/obj/item/weapon/weldingtool,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"sr" = (/obj/structure/table/standard,/obj/item/roller{pixel_y = 8},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"ss" = (/obj/structure/table/standard,/obj/structure/window/reinforced{dir = 8},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"st" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"su" = (/obj/structure/table/standard,/obj/item/clothing/gloves/yellow,/obj/item/device/assembly/signaler{pixel_y = 2},/obj/item/clothing/glasses/night,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sv" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "supply_shuttle"; pixel_x = 25; pixel_y = 0; req_one_access = list(13,31); tag_door = "supply_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/supply/dock)
"sw" = (/obj/machinery/door/airlock/centcom{name = "Commander Quarters"; opacity = 1; req_access = list(109)},/turf/unsimulated/floor{icon_state = "bar"; dir = 2},/area/centcom/living)
-"sx" = (/obj/structure/table,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/living)
+"sx" = (/obj/structure/table/standard,/turf/unsimulated/floor{dir = 9; icon_state = "carpetside"},/area/centcom/living)
"sy" = (/turf/unsimulated/floor{dir = 1; icon_state = "carpetside"},/area/centcom/living)
"sz" = (/obj/machinery/sleeper,/turf/unsimulated/floor{dir = 5; icon_state = "carpetside"},/area/centcom/living)
"sA" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/living)
"sB" = (/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/living)
"sC" = (/obj/machinery/computer/card/centcom,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/living)
-"sD" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/kitchen/rollingpin,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"sD" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 15},/obj/item/weapon/cell{charge = 100; maxcharge = 15000},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sE" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/turf/simulated/shuttle/floor,/area/supply/dock)
"sF" = (/obj/machinery/conveyor{dir = 4; id = "QMLoad"},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "supply_shuttle_hatch"; locked = 1; name = "Shuttle Hatch"; req_access = list(13)},/turf/simulated/shuttle/plating,/area/supply/dock)
-"sG" = (/obj/structure/table,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sG" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"sH" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sI" = (/obj/machinery/chemical_dispenser/full,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/administration/centcom)
"sJ" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -978,13 +978,13 @@
"sP" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/centcom/living)
"sQ" = (/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/living)
"sR" = (/turf/unsimulated/floor{dir = 2; icon_state = "carpetsymbol"},/area/centcom/living)
-"sS" = (/obj/structure/table,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/living)
+"sS" = (/obj/structure/table/standard,/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/living)
"sT" = (/obj/machinery/vending/dinnerware,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
-"sU" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
-"sV" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
-"sW" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sU" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"sV" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/living)
+"sW" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/hemostat,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sX" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
-"sY" = (/obj/structure/table,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
+"sY" = (/obj/structure/table/standard,/obj/item/stack/medical/advanced/bruise_pack,/obj/item/weapon/retractor,/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"sZ" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/syndicate_station/start)
"ta" = (/obj/machinery/teleport/station,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"tb" = (/obj/machinery/teleport/hub,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
@@ -1053,7 +1053,7 @@
"um" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
"un" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
"uo" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
-"up" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
+"up" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
"uq" = (/obj/structure/closet/secure_closet/security,/turf/unsimulated/floor{icon_state = "carpet"; dir = 2},/area/centcom/control)
"ur" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"us" = (/turf/space,/area/centcom/specops)
@@ -1135,8 +1135,8 @@
"vQ" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/obj/item/clothing/glasses/sunglasses/sechud/tactical,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"vR" = (/obj/structure/table/rack,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/obj/item/weapon/rig/ert/security,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"vS" = (/obj/structure/table/rack,/obj/item/rig_module/mounted,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/obj/item/clothing/accessory/storage/black_vest,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-"vT" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/plasteel{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/stack/sheet/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-"vU" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"vT" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/steel{amount = 50; pixel_x = 2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/plasteel{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/stack/material/glass/reinforced{amount = 50},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/briefcase/inflatable{pixel_x = 3; pixel_y = 3},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
+"vU" = (/obj/structure/table/standard,/obj/item/weapon/scalpel,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/syndicate_station/start)
"vV" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/control)
"vW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
"vX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/control)
@@ -1243,11 +1243,11 @@
"xU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control)
"xV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control)
"xW" = (/obj/machinery/door/airlock/centcom{name = "Courthouse"; opacity = 1},/turf/unsimulated/floor{icon_state = "whiteshiny"},/area/centcom/control)
-"xX" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
+"xX" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/control)
"xY" = (/obj/structure/sign/nosmoking_2,/turf/unsimulated/wall,/area/centcom/control)
"xZ" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"ya" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
-"yb" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/handcuffs,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
+"yb" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/obj/item/weapon/handcuffs,/obj/item/weapon/storage/pill_bottle/dice,/obj/item/weapon/deck,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"yc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
"yd" = (/obj/structure/bed/chair/office/light,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"ye" = (/obj/structure/undies_wardrobe,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
@@ -1284,7 +1284,7 @@
"yJ" = (/obj/structure/table/rack,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/storage/backpack/security,/obj/item/clothing/under/syndicate/combat,/obj/item/clothing/shoes/galoshes,/obj/item/clothing/head/bio_hood/janitor,/obj/item/clothing/suit/bio_suit/janitor,/obj/item/clothing/gloves/purple,/obj/item/clothing/glasses/science,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = 6; pixel_y = 3},/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/reagent_containers/spray/plantbgone,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"yK" = (/obj/machinery/chemical_dispenser/ert,/obj/item/weapon/reagent_containers/glass/beaker/large,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"yL" = (/obj/structure/table/woodentable,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/centcom/control)
-"yM" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac)
+"yM" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac)
"yN" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"yO" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/control)
"yP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor,/area/centcom/control)
@@ -1303,7 +1303,7 @@
"zc" = (/obj/structure/table/reinforced,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/obj/item/device/megaphone,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
"zd" = (/obj/machinery/telecomms/relay/preset/centcom,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/creed)
"ze" = (/obj/structure/closet/crate,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-"zf" = (/obj/structure/table,/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control)
+"zf" = (/obj/structure/table/standard,/obj/item/device/assembly/signaler,/obj/item/weapon/handcuffs,/obj/item/weapon/melee/classic_baton,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/control)
"zg" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/specops)
"zh" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "specops_centcom_dock"; name = "docking port controller"; pixel_x = 0; pixel_y = -25; req_one_access = list(103); tag_door = "specops_centcom_dock_door"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
"zi" = (/obj/machinery/door/airlock/centcom{name = "Holding Cell"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
@@ -1364,11 +1364,11 @@
"Al" = (/turf/simulated/shuttle/wall{icon_state = "swallc3"},/area/shuttle/escape/centcom)
"Am" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/specops/centcom)
"An" = (/turf/simulated/mineral,/area/syndicate_mothership{name = "\improper Raider Base"})
-"Ao" = (/turf/unsimulated/wall{icon_state = "iron6"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ao" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 2; name = "thrower_throwdown"; tiles = 0},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/unsimulated/wall,/area/space)
"Ap" = (/turf/unsimulated/floor{icon_state = "green"; dir = 9},/area/centcom/holding)
"Aq" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 4},/area/centcom/holding)
"Ar" = (/turf/unsimulated/wall{icon_state = "iron12"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"As" = (/turf/unsimulated/wall{icon_state = "iron10"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"As" = (/turf/unsimulated/wall,/area/syndicate_mothership{name = "\improper Raider Base"})
"At" = (/turf/simulated/shuttle/wall{icon_state = "swall3"; dir = 2},/area/shuttle/escape/centcom)
"Au" = (/obj/machinery/door/window/holowindoor{dir = 1; name = "Jury Box"},/turf/simulated/floor/holofloor{icon_state = "carpet10-8"; dir = 4},/area/holodeck/source_courtroom)
"Av" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
@@ -1386,9 +1386,9 @@
"AH" = (/turf/unsimulated/wall,/area/centcom/ferry)
"AI" = (/obj/machinery/door/blast/regular{icon_state = "pdoor1"; id = "ASSAULT3"; name = "Launch Bay #3"; p_open = 0},/turf/unsimulated/floor{name = "plating"},/area/centcom/specops)
"AJ" = (/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/holding)
-"AK" = (/turf/unsimulated/wall{icon_state = "iron3"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"AK" = (/turf/simulated/wall/voxshuttle,/area/shuttle/skipjack/station)
"AL" = (/obj/structure/bed/chair/holochair,/turf/simulated/floor/holofloor{icon_state = "dark"},/area/holodeck/source_courtroom)
-"AM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"AM" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/extinguisher,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge West"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"AN" = (/obj/structure/window/reinforced/holowindow{dir = 1},/obj/structure/window/reinforced/holowindow{dir = 8},/obj/structure/table/woodentable/holotable,/turf/simulated/floor/holofloor{icon_state = "carpet6-2"; dir = 4},/area/holodeck/source_courtroom)
"AO" = (/obj/machinery/door/window/holowindoor{name = "Red Team"},/turf/simulated/floor/holofloor{icon_state = "dark"},/area/holodeck/source_emptycourt)
"AP" = (/turf/unsimulated/floor{icon_state = "green"; dir = 4},/area/centcom/holding)
@@ -1402,13 +1402,13 @@
"AX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
"AY" = (/turf/unsimulated/floor{icon_state = "warnplate"; dir = 8},/area/centcom/ferry)
"AZ" = (/obj/effect/landmark{name = "voxstart"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Ba" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Ba" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/obj/effect/decal/cleanable/cobweb2{icon_state = "spiderling"; name = "dead spider"; tag = "icon-spiderling"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Bb" = (/obj/machinery/door/blast/regular{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/holding)
"Bc" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"Bd" = (/obj/machinery/door/airlock/centcom{name = "Arrivals Processing"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"Be" = (/obj/structure/bed,/obj/item/weapon/bedsheet/red,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/centcom/holding)
"Bf" = (/obj/machinery/door/airlock/glass_security{name = "Holding Cell"; req_access = list(2)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
-"Bg" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Bg" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 3},/obj/item/weapon/extinguisher,/obj/item/weapon/crowbar,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Bh" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/holofloor{dir = 4; icon_state = "wood_siding8"},/area/holodeck/source_picnicarea)
"Bi" = (/turf/simulated/floor/holofloor/grass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor{icon_state = "wood_siding6"; dir = 2},/area/holodeck/source_picnicarea)
"Bj" = (/turf/simulated/floor/holofloor{icon_state = "asteroid"; dir = 2},/area/holodeck/source_picnicarea)
@@ -1442,12 +1442,12 @@
"BL" = (/obj/machinery/door/unpowered/shuttle,/turf/simulated/shuttle/floor,/area/shuttle/transport1/centcom)
"BM" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"BN" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "escape_shuttle"; pixel_x = 0; pixel_y = -25; req_one_access = list(13); tag_door = "escape_shuttle_hatch"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
-"BO" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table,/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge East"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"BO" = (/obj/machinery/status_display{pixel_y = 30},/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/toxin,/obj/machinery/camera/network/crescent{c_tag = "Shuttle Bridge East"},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"BP" = (/turf/unsimulated/floor{icon_state = "green"; dir = 10},/area/centcom/holding)
"BQ" = (/obj/structure/bed/chair/office/dark,/obj/machinery/button/remote/blast_door{desc = "A remote control switch for port-side blast doors."; id = "CentComPort"; name = "Security Doors"; pixel_x = -12; pixel_y = -25; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"BR" = (/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"BS" = (/obj/machinery/computer/secure_data,/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals North"; dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
-"BT" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"BT" = (/obj/structure/sign/securearea{name = "\improper CAUTION"; pixel_x = 32},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"BU" = (/obj/structure/table/woodentable/holotable,/obj/structure/window/reinforced/holowindow,/obj/structure/window/reinforced/holowindow{dir = 4},/turf/simulated/floor/holofloor{icon_state = "dark"},/area/holodeck/source_courtroom)
"BV" = (/turf/simulated/shuttle/wall{icon_state = "swall11"; dir = 2},/area/shuttle/escape/centcom)
"BW" = (/turf/simulated/shuttle/wall{icon_state = "swall_s5"; dir = 2},/area/shuttle/transport1/centcom)
@@ -1494,7 +1494,7 @@
"CL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"CM" = (/obj/structure/window/shuttle{icon_state = "window3"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"CN" = (/turf/unsimulated/wall,/area/centcom/holding)
-"CO" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
+"CO" = (/obj/structure/table/standard,/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/material/minihoe,/obj/item/weapon/beartrap,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"CP" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"CQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"CR" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 1},/area/centcom/holding)
@@ -1510,9 +1510,9 @@
"Db" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/centcom/holding)
"Dc" = (/obj/machinery/door/airlock/glass{name = "Arrivals Bar"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"Dd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
-"De" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"De" = (/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Df" = (/obj/structure/window/shuttle{icon_state = "window1"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
-"Dg" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Dg" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets{pixel_x = 2; pixel_y = 3},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Dh" = (/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding)
"Di" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{tag = "icon-siding8"; name = "plating"; icon_state = "siding8"},/area/centcom/holding)
"Dj" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/amanita_pie,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
@@ -1522,7 +1522,7 @@
"Dn" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/carrotcakeslice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Do" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Dp" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 2; icon_state = "carpetside"},/area/centcom/holding)
-"Dq" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Dq" = (/obj/structure/computerframe,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Dr" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 10; icon_state = "carpetside"},/area/centcom/holding)
"Ds" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding)
"Dt" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/snacks/boiledrice,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
@@ -1536,7 +1536,6 @@
"DB" = (/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/holding)
"DC" = (/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"DD" = (/obj/machinery/door/airlock/glass{name = "Arrivals Processing"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
-"DE" = (/turf/unsimulated/wall{icon_state = "iron13"},/area/syndicate_mothership{name = "\improper Raider Base"})
"DF" = (/obj/structure/bed/chair/comfy/brown{dir = 1},/turf/unsimulated/floor{dir = 6; icon_state = "carpetside"},/area/centcom/holding)
"DG" = (/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{tag = "icon-siding4"; name = "plating"; icon_state = "siding4"},/area/centcom/holding)
"DH" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
@@ -1554,7 +1553,6 @@
"DT" = (/obj/machinery/atmospherics/unary/cryo_cell,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"DU" = (/turf/unsimulated/wall{tag = "icon-iron4"; icon_state = "iron4"},/area/syndicate_mothership{name = "\improper Raider Base"})
"DV" = (/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
-"DW" = (/turf/unsimulated/wall{icon_state = "iron5"},/area/syndicate_mothership{name = "\improper Raider Base"})
"DX" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 4; icon_state = "whitegreenfull"},/area/centcom/holding)
"DY" = (/obj/machinery/sleeper,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"DZ" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
@@ -1587,7 +1585,7 @@
"EA" = (/turf/simulated/shuttle/wall{icon_state = "swall7"; dir = 2},/area/shuttle/escape/centcom)
"EB" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/shuttle/escape/centcom)
"EC" = (/turf/unsimulated/floor{icon_state = "warning"},/area/centcom/holding)
-"ED" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
+"ED" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/material/harpoon,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/stealth,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"EE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/centcom/holding)
"EF" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/holding)
"EG" = (/obj/structure/window/reinforced{dir = 1},/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/holding)
@@ -1610,7 +1608,7 @@
"EX" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "greencorner"; dir = 8},/area/centcom/holding)
"EY" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"EZ" = (/turf/unsimulated/beach/sand{tag = "icon-seashallow"; icon_state = "seashallow"},/area/centcom/holding)
-"Fa" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
+"Fa" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"Fb" = (/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"Fc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome)
"Fd" = (/turf/unsimulated/floor{icon_state = "neutral"; dir = 8},/area/tdome)
@@ -1625,11 +1623,11 @@
"Fm" = (/obj/structure/bed/chair{dir = 4},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"Fn" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"Fo" = (/obj/structure/bed/chair{dir = 8},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
-"Fp" = (/obj/structure/table,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-whitecorner"; name = "plating"; icon_state = "whitecorner"},/area/centcom/holding)
-"Fq" = (/obj/structure/table,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
-"Fr" = (/obj/structure/table,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
-"Fs" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
-"Ft" = (/obj/structure/table,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{tag = "icon-whitecorner (WEST)"; icon_state = "whitecorner"; dir = 8},/area/centcom/holding)
+"Fp" = (/obj/structure/table/standard,/obj/item/weapon/FixOVein{pixel_x = -6; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-whitecorner"; name = "plating"; icon_state = "whitecorner"},/area/centcom/holding)
+"Fq" = (/obj/structure/table/standard,/obj/item/weapon/cautery{pixel_y = 4},/obj/item/weapon/hemostat{pixel_y = 4},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
+"Fr" = (/obj/structure/table/standard,/obj/item/weapon/retractor{pixel_x = 0; pixel_y = 6},/obj/item/weapon/scalpel,/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
+"Fs" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel{pixel_x = 4; pixel_y = 3},/turf/unsimulated/floor{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
+"Ft" = (/obj/structure/table/standard,/obj/item/weapon/surgicaldrill,/obj/item/weapon/circular_saw,/turf/unsimulated/floor{tag = "icon-whitecorner (WEST)"; icon_state = "whitecorner"; dir = 8},/area/centcom/holding)
"Fu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding)
"Fv" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/unsimulated/floor{name = "plating"},/area/tdome)
"Fw" = (/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding)
@@ -1643,23 +1641,23 @@
"FE" = (/obj/machinery/optable,/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
"FF" = (/turf/unsimulated/floor{tag = "icon-whitehall (NORTHWEST)"; icon_state = "whitehall"; dir = 9},/area/centcom/holding)
"FG" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 0},/turf/unsimulated/wall,/area/centcom/holding)
-"FH" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreen"},/area/centcom/holding)
+"FH" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreen"},/area/centcom/holding)
"FI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/shuttle/plating,/area/centcom/holding)
"FJ" = (/turf/unsimulated/floor{icon_state = "red"; dir = 10},/area/tdome)
"FK" = (/turf/unsimulated/floor{icon_state = "red"; dir = 2},/area/tdome)
"FL" = (/turf/unsimulated/floor{icon_state = "green"},/area/tdome)
"FM" = (/turf/unsimulated/floor{icon_state = "green"; dir = 6},/area/tdome)
-"FN" = (/obj/structure/table,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"FN" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/box/masks,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"FO" = (/turf/unsimulated/floor{tag = "icon-escapecorner (EAST)"; icon_state = "escapecorner"; dir = 4},/area/centcom/holding)
"FP" = (/obj/machinery/computer/operating,/turf/unsimulated/floor{dir = 1; icon_state = "whitehall"; tag = "icon-whitehall (SOUTHEAST)"},/area/centcom/holding)
"FQ" = (/obj/machinery/iv_drip,/turf/unsimulated/floor{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/centcom/holding)
-"FR" = (/obj/structure/table,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
+"FR" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OPlus{pixel_x = 4; pixel_y = 2},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/obj/item/weapon/reagent_containers/blood/OMinus{pixel_x = -5; pixel_y = -1},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"FS" = (/obj/machinery/bodyscanner,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"FT" = (/obj/machinery/body_scanconsole,/turf/unsimulated/floor{tag = "icon-whitehall (EAST)"; icon_state = "whitehall"; dir = 4},/area/centcom/holding)
"FU" = (/obj/structure/bed/roller,/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding)
-"FV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding)
-"FW" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding)
-"FX" = (/obj/structure/table,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6; icon_state = "whitegreen"},/area/centcom/holding)
+"FV" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular{pixel_x = 2; pixel_y = 6},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/adv{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding)
+"FW" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/turf/unsimulated/floor{dir = 0; icon_state = "whitegreen"},/area/centcom/holding)
+"FX" = (/obj/structure/table/standard,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/glasses/hud/health,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/unsimulated/floor{dir = 6; icon_state = "whitegreen"},/area/centcom/holding)
"FY" = (/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"FZ" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Ga" = (/obj/structure/closet/secure_closet/bar,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
@@ -1667,8 +1665,8 @@
"Gc" = (/obj/machinery/gibber,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Gd" = (/obj/machinery/door/airlock/command{name = "Thunderdome"},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
"Ge" = (/obj/machinery/vending/cigarette,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
-"Gf" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
-"Gg" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
+"Gf" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
+"Gg" = (/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Gh" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Gi" = (/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Gj" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
@@ -1677,8 +1675,8 @@
"Gm" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "tdomeobserve"},/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Gn" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Go" = (/obj/machinery/vending/snack,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
-"Gp" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
-"Gq" = (/obj/structure/table,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Gp" = (/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
+"Gq" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Gr" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "white"},/area/tdome)
"Gs" = (/obj/machinery/computer/security/telescreen,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
"Gt" = (/obj/item/device/camera,/turf/unsimulated/floor{icon_state = "redbluefull"; dir = 8},/area/tdome/tdomeobserve)
@@ -1699,7 +1697,7 @@
"GI" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/tdome)
"GJ" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/tdome)
"GK" = (/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
-"GL" = (/obj/structure/table/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
+"GL" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"GM" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome2"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome2)
"GN" = (/obj/machinery/recharger{pixel_y = 4},/obj/effect/landmark{name = "tdome1"},/turf/unsimulated/floor{name = "plating"},/area/tdome/tdome1)
"GO" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; enabled = 0; req_one_access = list(103); use_power = 0},/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/holding)
@@ -1723,7 +1721,7 @@
"Hg" = (/obj/machinery/door/blast/regular{id = "thunderdomeaxe"; name = "Axe Supply"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome)
"Hh" = (/obj/effect/overlay/coconut,/turf/unsimulated/beach/sand,/area/beach)
"Hi" = (/turf/unsimulated/floor{icon_state = "redcorner"; dir = 8},/area/tdome)
-"Hj" = (/obj/structure/table/rack,/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
+"Hj" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/obj/machinery/light/small{dir = 8},/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/obj/item/weapon/beartrap,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Hk" = (/obj/item/tape/engineering{tag = "icon-engineering_v"; icon_state = "engineering_v"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Hl" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor,/area/tdome)
"Hm" = (/turf/unsimulated/wall{tag = "icon-iron1"; icon_state = "iron1"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -1739,22 +1737,22 @@
"Hw" = (/obj/item/weapon/wrench,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"Hx" = (/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/disposal,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"Hy" = (/obj/structure/bed/chair,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"Hz" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/unsimulated/beach/sand,/area/beach)
-"HA" = (/obj/structure/table,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
-"HB" = (/obj/structure/table,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HC" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"Hz" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/unsimulated/beach/sand,/area/beach)
+"HA" = (/obj/structure/table/standard,/obj/item/clothing/under/rainbow,/obj/item/clothing/glasses/sunglasses,/obj/item/clothing/head/collectable/petehat{pixel_y = 5},/turf/unsimulated/beach/sand,/area/beach)
+"HB" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 4},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HC" = (/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"HD" = (/obj/machinery/computer/pod{id = "thunderdomeaxe"; name = "Thunderdome Axe Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"HE" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"HF" = (/obj/machinery/computer/pod{id = "thunderdomehea"; name = "Thunderdome Heavy Supply"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
"HG" = (/obj/machinery/computer/pod{id = "thunderdome"; name = "Thunderdome Blast Door Control"},/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HH" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HI" = (/obj/structure/table,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HJ" = (/obj/structure/table,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HK" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HL" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HM" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
-"HN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach)
-"HO" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach)
+"HH" = (/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/item/stack/medical/ointment,/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HI" = (/obj/structure/table/standard,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/obj/item/stack/medical/bruise_pack,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HK" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HL" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HM" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/unsimulated/floor{icon_state = "redyellowfull"; dir = 5},/area/tdome/tdomeadmin)
+"HN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/snacks/chips,/turf/unsimulated/beach/sand,/area/beach)
+"HO" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/obj/item/weapon/reagent_containers/food/drinks/cans/cola,/turf/unsimulated/beach/sand,/area/beach)
"HP" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand,/area/beach)
"HQ" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar Center"},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"HR" = (/mob/living/simple_animal/crab/Coffee,/turf/unsimulated/beach/sand,/area/beach)
@@ -1778,11 +1776,11 @@
"Ij" = (/obj/structure/toilet{pixel_y = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
"Ik" = (/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
"Il" = (/obj/structure/mirror{pixel_y = 28},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
-"Im" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
+"Im" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"In" = (/turf/unsimulated/floor{dir = 8; icon_state = "carpetside"},/area/wizard_station)
"Io" = (/obj/effect/landmark/start{name = "wizard"},/turf/unsimulated/floor{dir = 2; icon_state = "carpetsymbol"},/area/wizard_station)
"Ip" = (/turf/unsimulated/floor{dir = 4; icon_state = "carpetside"},/area/wizard_station)
-"Iq" = (/obj/structure/mineral_door/iron,/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
+"Iq" = (/obj/structure/table/woodentable{dir = 5},/obj/item/weapon/flame/lighter/zippo,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/weapon/material/ashtray/bronze{pixel_x = -1; pixel_y = 1},/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar East"; dir = 4},/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Ir" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
"Is" = (/obj/structure/bookcase{name = "bookcase (Tactics)"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"It" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/obj/structure/closet/coffin,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -1798,12 +1796,11 @@
"ID" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"IE" = (/obj/structure/bookcase,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"IF" = (/obj/machinery/vending/magivend,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"IG" = (/obj/structure/mineral_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
+"IG" = (/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"IH" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_x = 32; subspace_transmission = 1; syndie = 1},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
-"II" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"II" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"IJ" = (/obj/structure/table/reinforced,/obj/item/weapon/tray{pixel_y = 5},/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"IK" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/camera/network/crescent{c_tag = "Crescent Arrivals South"; dir = 4},/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/holding)
-"IL" = (/turf/unsimulated/wall{icon_state = "iron14"},/area/syndicate_mothership{name = "\improper Raider Base"})
"IM" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack/cultpack,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"IN" = (/obj/structure/table/woodentable,/obj/item/clothing/glasses/monocle,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"IO" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/backpack,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
@@ -1811,7 +1808,7 @@
"IQ" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/shoes/sandal/marisa{desc = "A set of fancy shoes that are as functional as they are comfortable."; name = "Gentlemans Shoes"},/obj/item/clothing/under/gentlesuit,/obj/item/clothing/suit/wizrobe/gentlecoat,/obj/item/clothing/head/wizard/cap,/obj/item/weapon/staff/gentcane,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"IR" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/wizrobe/magusred,/obj/item/clothing/head/wizard/magus,/obj/item/weapon/staff,/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
"IS" = (/turf/unsimulated/wall{tag = "icon-iron2"; icon_state = "iron2"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"IT" = (/obj/structure/table,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
+"IT" = (/obj/structure/table/standard,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
"IU" = (/turf/unsimulated/floor{icon_state = "white"},/area/syndicate_mothership{name = "\improper Raider Base"})
"IV" = (/obj/machinery/door/airlock/glass_command{name = "Escape Shuttle Cockpit"; req_access = list(19)},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"IW" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/obj/effect/decal/cleanable/cobweb2{tag = "icon-cobweb1"; icon_state = "cobweb1"},/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -1819,8 +1816,7 @@
"IY" = (/obj/machinery/embedded_controller/radio/simple_docking_controller{frequency = 1380; id_tag = "centcom_shuttle_bay"; name = "shuttle bay controller"; pixel_x = 0; pixel_y = 25; tag_door = "centcom_shuttle_bay_door"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
"IZ" = (/obj/structure/flora/pottedplant{tag = "icon-plant-06"; icon_state = "plant-06"},/turf/simulated/floor/holofloor{icon_state = "wood"; dir = 4},/area/holodeck/source_theatre)
"Ja" = (/obj/machinery/computer/shuttle_control{req_access = list(101); shuttle_tag = "Centcom"},/turf/unsimulated/floor{name = "plating"},/area/centcom/ferry)
-"Jb" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Jc" = (/turf/unsimulated/wall{icon_state = "iron11"},/area/syndicate_mothership{name = "\improper Raider Base"})
+"Jb" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "dark"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Jd" = (/obj/structure/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 4},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Je" = (/obj/structure/table/woodentable,/obj/item/weapon/dice/d20,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Jf" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/cups,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
@@ -1835,7 +1831,6 @@
"Jo" = (/obj/item/tape/engineering{tag = "icon-engineering_h"; icon_state = "engineering_h"},/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Jp" = (/obj/structure/urinal{pixel_y = 32},/obj/item/weapon/soap/syndie,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
"Jq" = (/obj/structure/urinal{pixel_y = 32},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/syndicate_mothership{name = "\improper Raider Base"})
-"Jr" = (/turf/unsimulated/wall{icon_state = "iron9"},/area/syndicate_mothership{name = "\improper Raider Base"})
"Js" = (/obj/structure/table/woodentable,/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/snacks/milosoup,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Jt" = (/obj/structure/table/woodentable,/obj/item/weapon/dice,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"Ju" = (/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/wizard_station)
@@ -1906,7 +1901,7 @@
"KH" = (/obj/structure/flora/ausbushes/grassybush,/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station)
"KI" = (/mob/living/simple_animal/hostile/retaliate/goat{name = "Experiment 97d"},/turf/unsimulated/floor{icon_state = "grass1"; name = "grass"},/area/wizard_station)
"KJ" = (/obj/item/weapon/caution,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
-"KK" = (/obj/item/weapon/kitchenknife/ritual,/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
+"KK" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{dir = 1; icon_state = "chapel"},/area/wizard_station)
"KL" = (/obj/machinery/computer/station_alert,/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/syndicate_mothership{name = "\improper Raider Base"})
"KM" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"KN" = (/obj/item/clothing/head/philosopher_wig,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
@@ -1925,28 +1920,21 @@
"La" = (/obj/structure/closet/secure_closet/bar{req_access = list(25)},/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
"Lb" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_alc/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
"Lc" = (/obj/structure/table/woodentable{dir = 5},/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "grimy"},/area/centcom/holding)
-"Ld" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron1"},/area/shuttle/skipjack/station)
"Le" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Lf" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_west_control"; req_one_access = list(150)},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/skipjack/station)
-"Lg" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron6"},/area/shuttle/skipjack/station)
"Lh" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"Li" = (/obj/structure/table,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Li" = (/obj/structure/table/standard,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Lj" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"Lk" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron10"},/area/shuttle/skipjack/station)
"Ll" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Lm" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1331; master_tag = "vox_east_control"; req_access = list(150)},/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/skipjack/station)
"Ln" = (/obj/machinery/door/airlock/centcom{name = "Thunderdome"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
-"Lo" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron13"},/area/shuttle/skipjack/station)
-"Lp" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron12"},/area/shuttle/skipjack/station)
-"Lq" = (/obj/machinery/atmospherics/pipe/tank/air,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Lq" = (/obj/item/device/radio/intercom{desc = "Talk through this. Evilly"; freerange = 1; frequency = 1213; name = "Syndicate Intercom"; pixel_y = -32; subspace_transmission = 1; syndie = 1},/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Lr" = (/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/skipjack/station)
-"Ls" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron3"},/area/shuttle/skipjack/station)
-"Lt" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Lt" = (/obj/structure/table/standard,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Lu" = (/turf/unsimulated/floor{tag = "icon-ironsand7"; icon_state = "ironsand7"},/turf/unsimulated/floor{tag = "icon-asteroid7"; name = "plating"; icon_state = "asteroid7"},/area/wizard_station)
"Lv" = (/turf/unsimulated/floor{tag = "icon-ironsand12"; icon_state = "ironsand12"},/turf/unsimulated/floor{tag = "icon-asteroid2"; name = "plating"; icon_state = "asteroid2"},/area/wizard_station)
"Lw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Lx" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
-"Ly" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron7"},/area/shuttle/skipjack/station)
"Lz" = (/turf/simulated/floor/holofloor{icon_state = "carpet7-3"; dir = 4},/area/holodeck/source_theatre)
"LA" = (/turf/simulated/floor/holofloor/grass,/turf/simulated/floor/holofloor{icon_state = "wood_siding1"; dir = 2},/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/holofloor{icon_state = "wood_siding5"; dir = 2},/area/holodeck/source_picnicarea)
"LB" = (/turf/simulated/floor/holofloor{icon_state = "carpet11-12"; dir = 4},/area/holodeck/source_theatre)
@@ -1971,18 +1959,12 @@
"LU" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns12,/area/space)
"LV" = (/obj/effect/step_trigger/thrower{affect_ghosts = 1; direction = 8; name = "thrower_escapeshuttletop(left)"; tiles = 0},/turf/space/transit/north/shuttlespace_ns11,/area/space)
"LW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast{id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"LX" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron11"},/area/shuttle/skipjack/station)
-"LY" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron4"},/area/shuttle/skipjack/station)
-"LZ" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron8"},/area/shuttle/skipjack/station)
"Ma" = (/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Mb" = (/obj/machinery/door/airlock/hatch{req_access = list(150)},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Mc" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rainbow,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Md" = (/obj/structure/bed,/obj/item/weapon/bedsheet/hos,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"Me" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron5"},/area/shuttle/skipjack/station)
-"Mf" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron9"},/area/shuttle/skipjack/station)
-"Mg" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Mg" = (/obj/machinery/flasher{id = "syndieflash"; pixel_x = 0; pixel_y = 28},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/syndicate_station/start)
"Mh" = (/obj/structure/bed,/obj/item/weapon/bedsheet/orange,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"Mi" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron14"},/area/shuttle/skipjack/station)
"Mj" = (/obj/item/pizzabox/meat,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Mk" = (/obj/structure/bed,/obj/item/weapon/bedsheet/rd,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Ml" = (/obj/structure/bed,/obj/item/weapon/bedsheet/clown,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
@@ -1991,23 +1973,22 @@
"Mo" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Mp" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Mq" = (/obj/machinery/door/airlock/medical{name = "Operating Theatre"; req_access = list(45)},/turf/unsimulated/floor{icon_state = "white"},/area/centcom/holding)
-"Mr" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/ionrifle,/obj/item/weapon/harpoon,/obj/item/clothing/suit/space/void/merc,/obj/item/clothing/head/helmet/space/void/merc,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/obj/item/clothing/shoes/magboots,/obj/item/clothing/shoes/magboots,/obj/item/weapon/rig/light/stealth,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Mr" = (/obj/structure/table/rack,/obj/item/weapon/material/knife/ritual,/turf/unsimulated/floor{dir = 4; icon_state = "chapel"},/area/wizard_station)
"Ms" = (/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Mt" = (/obj/structure/table,/obj/item/seeds/potatoseed,/obj/item/seeds/potatoseed,/obj/item/seeds/ambrosiavulgarisseed,/obj/item/weapon/minihoe,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Mu" = (/obj/structure/table,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Mt" = (/obj/structure/simple_door/iron,/turf/unsimulated/floor{icon_state = "engine"},/area/wizard_station)
+"Mu" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_x = -1; pixel_y = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Mv" = (/obj/machinery/vending/hydroseeds,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Mw" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_west_sensor"; pixel_x = 25},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Mx" = (/obj/machinery/washing_machine,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"My" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/clothing/shoes/magboots,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Mz" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/sniperrifle,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/clothing/head/helmet/space/void/atmos,/obj/item/clothing/suit/space/void/atmos,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MA" = (/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/obj/effect/step_trigger/teleporter/random{affect_ghosts = 1; name = "escapeshuttle_leave"; teleport_x = 25; teleport_x_offset = 245; teleport_y = 25; teleport_y_offset = 245; teleport_z = 6; teleport_z_offset = 6},/turf/space/transit/north/shuttlespace_ns12,/area/space)
-"MB" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/obj/structure/table/reinforced{icon_state = "table"},/obj/item/weapon/flame/lighter/zippo,/obj/item/clothing/gloves/yellow,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/card/emag,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"MB" = (/obj/structure/simple_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"MC" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/vending/wallmed1{name = "Emergency NanoMed"; pixel_x = 28},/turf/unsimulated/floor{tag = "icon-whitecorner (NORTH)"; icon_state = "whitecorner"; dir = 1},/area/centcom/holding)
"MD" = (/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"ME" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"ME" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 1},/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "merc_shuttle_sensor"; pixel_x = 8; pixel_y = 25},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MF" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MG" = (/obj/machinery/airlock_sensor{frequency = 1331; id_tag = "vox_east_sensor"; pixel_x = -25},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"MH" = (/turf/simulated/shuttle/wall{dir = 2; icon = 'icons/turf/walls.dmi'; icon_state = "iron2"},/area/shuttle/skipjack/station)
"MI" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"MK" = (/obj/item/robot_parts/head,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
@@ -2020,11 +2001,11 @@
"MR" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"MS" = (/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"MT" = (/obj/machinery/vending/coffee,/turf/unsimulated/floor{icon_state = "green"; dir = 8},/area/centcom/holding)
-"MU" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
+"MU" = (/obj/machinery/vending/assist{contraband = null; name = "AntagCorpVend"; products = list(/obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/signaler = 4, /obj/item/device/assembly/infra = 4, /obj/item/device/assembly/prox_sensor = 4, /obj/item/weapon/handcuffs = 8, /obj/item/device/flash = 4, /obj/item/weapon/cartridge/signal = 4, /obj/item/clothing/glasses/sunglasses = 4)},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MV" = (/turf/unsimulated/beach/sand{tag = "icon-desert2"; icon_state = "desert2"},/area/centcom/holding)
"MW" = (/obj/item/weapon/inflatable_duck,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"MX" = (/obj/structure/sign/redcross,/turf/unsimulated/wall,/area/centcom/holding)
-"MY" = (/obj/machinery/status_display{pixel_y = 30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"MY" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"MZ" = (/turf/unsimulated/beach/sand{tag = "icon-desert1"; icon_state = "desert1"},/area/centcom/holding)
"Na" = (/obj/structure/window/shuttle{icon_state = "window12"},/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/escape/centcom)
"Nb" = (/obj/machinery/atmospherics/pipe/simple/visible,/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
@@ -2041,19 +2022,20 @@
"Nm" = (/obj/machinery/computer/med_data,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Nn" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_northeast_lock"; locked = 1; req_access = list(150)},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"No" = (/mob/living/simple_animal/crab,/turf/unsimulated/beach/sand{tag = "icon-desert3"; icon_state = "desert3"},/area/centcom/holding)
+"Np" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Nq" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{dir = 9; icon_state = "whitegreen"},/area/centcom/holding)
"Nr" = (/obj/item/weapon/beach_ball,/turf/unsimulated/beach/sand{tag = "icon-desert_dug"; icon_state = "desert_dug"},/area/centcom/holding)
"Ns" = (/obj/machinery/sleeper{icon_state = "sleeper_0-r"; orient = "RIGHT"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Nt" = (/obj/machinery/sleep_console{icon_state = "sleeperconsole-r"; orient = "RIGHT"},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Nu" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/camera/network/crescent{c_tag = "Shuttle West Storage"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
-"Nv" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/turf/unsimulated/floor{dir = 8; icon_state = "whitegreen"},/area/centcom/holding)
+"Nv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 5; pixel_y = 5},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 0; pixel_y = 0},/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = 7; pixel_y = 1},/obj/item/weapon/wrench,/turf/unsimulated/floor{dir = 8; icon_state = "whitegreen"},/area/centcom/holding)
"Nw" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHEAST)"; icon_state = "intact"; dir = 5},/obj/machinery/camera/network/crescent{c_tag = "Shuttle Medical"; dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Nx" = (/obj/machinery/recharge_station,/obj/machinery/camera/network/crescent{c_tag = "Shuttle East Storage"; dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"Ny" = (/obj/machinery/hologram/holopad,/turf/unsimulated/floor{tag = "icon-wood"; icon_state = "wood"},/area/centcom/holding)
"Nz" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Bar West"; dir = 4},/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"NA" = (/obj/effect/overlay/palmtree_l,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
"NB" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southeast_lock"; locked = 1; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"NC" = (/obj/machinery/status_display{pixel_y = -30},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"NC" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/item/weapon/reagent_containers/food/snacks/liquidfood,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"ND" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/holding)
"NE" = (/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"NF" = (/obj/structure/closet/hydrant{pixel_x = 30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
@@ -2061,28 +2043,28 @@
"NH" = (/obj/machinery/atmospherics/unary/cryo_cell{layer = 3.3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NI" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NJ" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"NK" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"NK" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NL" = (/obj/structure/closet/hydrant{pixel_x = -30; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"NM" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"NN" = (/obj/machinery/door/airlock/glass_mining{name = "Shuttle Cargo"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
"NO" = (/obj/machinery/hologram/holopad,/turf/unsimulated/beach/sand{tag = "icon-desert"; icon_state = "desert"},/area/centcom/holding)
-"NP" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
-"NQ" = (/obj/machinery/iv_drip,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"NP" = (/obj/machinery/recharger/wallcharger{pixel_x = -25},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
+"NQ" = (/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"NR" = (/obj/machinery/hologram/holopad,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NS" = (/turf/unsimulated/beach/sand{tag = "icon-beach"; icon_state = "beach"},/area/centcom/holding)
-"NT" = (/obj/machinery/recharge_station,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"NT" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"NU" = (/obj/item/robot_parts/robot_suit,/obj/item/robot_parts/r_leg,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"NV" = (/obj/machinery/atmospherics/pipe/simple/visible{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"NW" = (/turf/unsimulated/beach/sand{tag = "icon-beachcorner"; icon_state = "beachcorner"},/area/centcom/holding)
"NX" = (/turf/unsimulated/beach/sand{tag = "icon-beach (SOUTHEAST)"; icon_state = "beach"; dir = 6},/area/centcom/holding)
-"NY" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"NY" = (/obj/structure/bed/chair{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"NZ" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/tdome)
-"Oa" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
-"Ob" = (/obj/structure/table,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac)
+"Oa" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "redyellowfull"},/area/centcom/living)
+"Ob" = (/obj/structure/table/standard,/turf/unsimulated/floor{icon_state = "cafeteria"; dir = 2},/area/centcom/evac)
"Oc" = (/obj/structure/table/rack,/obj/item/weapon/rig/light/hacker,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Od" = (/obj/structure/table/rack,/obj/item/weapon/rig/industrial,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Oe" = (/obj/machinery/door/airlock/hatch{frequency = 1331; icon_state = "door_locked"; id_tag = "vox_southwest_lock"; locked = 1; req_access = list(150)},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Of" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access = list(150); tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Of" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/structure/bed/chair{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor4,/area/shuttle/escape/centcom)
"Og" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Oh" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Oi" = (/obj/item/weapon/wrench,/obj/item/weapon/mop,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
@@ -2092,39 +2074,38 @@
"Om" = (/obj/machinery/camera/network/crescent{c_tag = "Crescent Medical"; dir = 4},/turf/unsimulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/centcom/holding)
"On" = (/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
"Oo" = (/obj/machinery/atmospherics/pipe/manifold/visible{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Op" = (/obj/machinery/body_scanconsole,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"Op" = (/obj/structure/bed/chair{dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle West"; dir = 4},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Oq" = (/obj/machinery/bodyscanner,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"Or" = (/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"Os" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/obj/item/weapon/tank/nitrogen,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"Ot" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
-"Ou" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Ou" = (/obj/structure/bed/chair{dir = 8},/obj/structure/closet/walllocker/emerglocker{pixel_x = 28},/obj/machinery/camera/network/crescent{c_tag = "Shuttle East"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
"Ov" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "diagonalWall3"},/area/shuttle/skipjack/station)
"Ow" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"Ox" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"Oy" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/skipjack/station)
"Oz" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/skipjack/station)
-"OA" = (/obj/structure/table,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
-"OB" = (/obj/structure/table,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
-"OC" = (/obj/structure/table,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OA" = (/obj/structure/table/standard,/obj/item/weapon/deck,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"OB" = (/obj/structure/table/standard,/obj/item/weapon/legcuffs,/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"OC" = (/obj/structure/table/standard,/obj/item/weapon/circular_saw{pixel_y = 8},/obj/item/weapon/hemostat,/obj/item/weapon/scalpel,/obj/item/stack/medical/advanced/bruise_pack,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"OD" = (/obj/machinery/optable,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"OE" = (/obj/structure/table,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OE" = (/obj/structure/table/standard,/obj/item/weapon/cautery,/obj/item/weapon/retractor,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
"OF" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
"OG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"OH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/blast{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"OI" = (/obj/structure/table,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"OJ" = (/obj/structure/toilet{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
-"OK" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"OI" = (/obj/structure/table/standard,/obj/item/weapon/bonesetter,/obj/item/weapon/bonegel,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OJ" = (/obj/machinery/status_display{pixel_y = 30},/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"OK" = (/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
"OL" = (/obj/structure/table/rack,/obj/item/weapon/melee/energy/sword/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/clothing/suit/space/pirate,/obj/item/weapon/tank/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"OM" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"ON" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
-"OO" = (/obj/structure/table/rack,/obj/item/weapon/gun/launcher/crossbow,/obj/item/stack/rods{amount = 10},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
-"OP" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"OM" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"ON" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/fire{pixel_x = 1},/obj/item/weapon/storage/firstaid/o2{pixel_x = 3; pixel_y = 3},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OO" = (/obj/machinery/body_scanconsole,/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"OP" = (/obj/machinery/atmospherics/pipe/tank/air,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
"OQ" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/vox/stealth,/obj/item/clothing/head/helmet/space/vox/stealth,/obj/item/clothing/shoes/magboots/vox,/obj/item/clothing/gloves/yellow/vox,/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/under/vox/vox_robes,/turf/unsimulated/floor{tag = "icon-asteroid"; icon_state = "asteroid"},/area/syndicate_mothership{name = "\improper Raider Base"})
"OR" = (/obj/structure/bed/chair{dir = 1},/obj/item/clothing/glasses/thermal/plain/monocle,/obj/item/clothing/head/pirate,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
"OS" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/unsimulated/floor{icon_state = "floor"},/area/tdome)
"OT" = (/obj/machinery/door/airlock/command{name = "Thunderdome Administration"; req_access = list(102)},/turf/simulated/floor,/area/tdome)
"OU" = (/obj/structure/table/woodentable,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
-"OV" = (/turf/space,/area/shuttle/skipjack/station)
"OW" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donut,/turf/unsimulated/floor{dir = 8; icon_state = "wood"},/area/wizard_station)
"OX" = (/mob/living/carbon/human/monkey{name = "Murphey"},/turf/unsimulated/floor{icon_state = "freezerfloor"; dir = 2},/area/wizard_station)
"OY" = (/obj/machinery/door/airlock/centcom{name = "Engineering Special Operations"; opacity = 1; req_access = list(103)},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom/specops)
@@ -2136,6 +2117,27 @@
"Pe" = (/obj/machinery/camera/network/thunder{c_tag = "Thunderdome Arena"; invisibility = 101},/turf/simulated/floor/bluegrid,/area/tdome)
"Pf" = (/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
"Pg" = (/obj/structure/bed/chair,/obj/effect/landmark{name = "endgame_exit"},/turf/unsimulated/beach/sand,/area/beach)
+"Ph" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"Pi" = (/obj/machinery/light/small,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pj" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor7"},/area/shuttle/skipjack/station)
+"Pk" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/adv{pixel_x = 1},/obj/item/weapon/storage/firstaid/toxin{pixel_x = 3; pixel_y = 3},/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/skipjack/station)
+"Pl" = (/obj/structure/bed,/obj/item/weapon/bedsheet/green,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pm" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_east_vent"; tag_exterior_door = "vox_northeast_lock"; frequency = 1331; id_tag = "vox_east_control"; tag_interior_door = "vox_southeast_lock"; pixel_x = -24; req_access = list(150); tag_chamber_sensor = "vox_east_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1331; id_tag = "vox_east_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pn" = (/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Po" = (/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pp" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "vox_west_vent"; tag_exterior_door = "vox_northwest_lock"; frequency = 1331; id_tag = "vox_west_control"; tag_interior_door = "vox_southwest_lock"; pixel_x = 24; req_access = list(150); tag_chamber_sensor = "vox_west_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1331; id_tag = "vox_west_vent"},/obj/machinery/light/small,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pq" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pr" = (/obj/structure/table/rack,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/syndicate/black/engie,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/syndicate/black/engie,/obj/machinery/light/small{dir = 8},/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Ps" = (/obj/structure/simple_door/wood{tag = "icon-wood"; icon_state = "wood"},/turf/unsimulated/floor{icon_state = "grimy"},/area/wizard_station)
+"Pt" = (/obj/machinery/floodlight,/turf/simulated/shuttle/plating,/area/shuttle/skipjack/station)
+"Pu" = (/obj/structure/table/rack,/obj/item/weapon/grenade/empgrenade,/obj/item/weapon/grenade/flashbang,/obj/item/weapon/grenade/spawnergrenade,/obj/machinery/light/small{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/shuttle/skipjack/station)
+"Pv" = (/obj/machinery/status_display{pixel_y = -30},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/escape/centcom)
+"Pw" = (/obj/structure/bed/chair{dir = 8},/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Px" = (/obj/structure/bed/chair{dir = 4},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Py" = (/obj/structure/bed/roller,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 30},/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"Pz" = (/obj/machinery/iv_drip,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/shuttle/escape/centcom)
+"PA" = (/obj/machinery/recharge_station,/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
+"PB" = (/obj/structure/closet/crate/freezer/rations,/obj/machinery/light{dir = 4},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/escape/centcom)
(1,1,1) = {"
aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoalahajeEapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtwtwtwtwtwtwtwtwtwtwtwtwtwaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaPaOaOaOaOaOaOaOaOaOaOaQ
@@ -2238,31 +2240,31 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMmumumumumumuaMaMaMaMaMaMaMaMaMaMnvrPrIrIrIrBnzaMaMndnenfngnenenerlihncnjnknlihmumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMnvnHnInJninLnnnHnzaMndnenmnmnenenenenCnonononpihihihihihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMnHnQnRnRnSnRnRnLnHaMndnqnrnsntneneneihnonononuihbOkQbTihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHnZnRnRnRnRoanLnHaMndnenAnAnenenepaihnKnonDnEihbLkQmkihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHofnRnRognRnRohnHaMndnenenenenenenMihihihihihihbPkQnGihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMnHDgnRnRnRnRoaDqnHaMndnenAnAnenenepaihnKnonDnEihbLkQmkihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsDnRnRLqnRnRohnHaMndnenenenenenenMihihihihihihbPkQnGihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMomnHonnHnHnHnHnHooaMnTnananUihkdkdkdihkTkTnVnWihcikQrcihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoCoyoaounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQrcihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoCoyNpounFnHaMaMaMaMaMaMobkdkdkdoclalaododihcikQrcihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHoBoAoanRornHaMaMaMaMaMaMoikdkdkdihojlaihihihokolokihihihihmumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHoBoyoanRoGnHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPpKihihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHNPoyoanRNCnHnzaMaMmPmKoFihkdkdkdihihihihnOnOkQkQkQnPnPpKihihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnvnHnHnHnHvLoyoanRoLnHnHnHnHnzototihPakdkdkdihnYnXkQkQkQkQkQkQkQkQqKihmumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpioXoYnHnRoHnRoJnHnHoOoQoRoZpmpnpmkdkdkdkdoSkQkQkQkQkQoDkQkQkQkQoxihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHpiMgoYnHnRoHnRoJnHnHoOMEoRoZpmpnpmkdkdkdkdoSkQkQkQkQkQoDkQkQkQkQoxihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMphoWpjoWnHnHnHpbnHnHpfoOplpooZpmpLpmkdkdkdkdihoqopkQkQkQkQkQkQkQkQoMihmumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpknHnHnRnRpynHnHpzptpznHoIoIihoPnanUihihihihowovkQkQkQozozoeihihmumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMnHnHphpknHnHMYnRMUnHnHpzptpznHoIoIihoPnanUihihihihowovkQkQkQozozoeihihmumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHpxnRnRpHnHnRnRnRnHrbsoOZpInHmBaMmBaMaMaMaMmumuihihihokpcokihihihihmumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepApApepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqanRnRnRpCnRnRnRpJnRnRnRqdnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVpdpepepepepApApepepepepgoVoVoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHofnRnRnRpCnRnRnRpJnRnRnRoXnHmKmKmKmKaMaMaMaMmumumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVpdpppqprpspeqbpupepvpwpepepepgoVoVoNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMnHqCnRnRnRqcnRnRnRqpnRnRnRqFnHaMaMaMaMaMaMaMaMaMmumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpdpepBpBpBpBpeqDqDpepBpBpDpEpepepgoVpFpFpFpFpFaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnvnHnHnHnHnHnHnRnRnRnHnHnHnHnHnHnzaMaMaMaMaMmAaMmBmumuihoEkQoEihmumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpSpeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasesrqEnHrenRnRnHrfrfrfrgrgnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpepepMpNpOpPpepBpBpQpBpBpBpBpRpypeoVpFpTpUpVpFpFpFpFpFpWpXpXpYpFpFaMaMaMaMaMaMaMaMpZpZpZpZpZpZpZpZpZpZpZaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumumuaMaMaMaMnHqZrasesrqEnHqanRqdnHsurfrfrgscnHaMaMaMaMaMmAmBmumumuihoEkQoEihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfqgpBqhqhqhpepBpBpeqiqjqkqlqmqnpeoVpFqopUpUqIqqqrqsqtquqsqvqwqxpFpFpFpFpFpFpFpFpFpFqyqzqzqzqzqzqzqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMnxrjrjrjrjrjnHnRnRnRnHrenRnRnRrknwaMaMaMaMaMmPaMmumumuihihyxihihmumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfpBpBpBpBpBpQpBpBpepepepepepepeqHrdpFpFpFpFpFqqqvqsqJOaqsqvqvqvqLqMqMqMqMqMqMqMqMqNqyqOqPqPqPqPqPqQqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMnhrCrDrjrjrjrinRnRnRrqnRnRnRrGrHmiaMaMaMaMaMmAmBmBmumumuihihihmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpeqSpBqSpBqSpepBpBpBqTqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqvqvqLqMqMqMqMqMqMqMqMqNqyqXqYqYqYqYqYqXqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnyrjrjrjrjrjrtnRnRnRrAnRnRnRnRrSnBaMaMaMaMaMmAaMaMmBmumumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHrErjrjrjscnHpzrFpznHoKoKrOnRrQnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrRqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrTrururvpFrwrxrypZqzqXqYqYqYqYrzrZpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsasHssstnHsunRvUnHsbnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvqsqJrKqsqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsGrjsfslnHnHnRsJsKnHnHnHnRnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVpepepepepepepepBpBrhpBqUoVoVoVoVoVqVqWqMqMqMqLqvqvqvqvqvqvqvqqqqpFpFpFpFpFpFpFpFpFpZqyqXnZqYqYqYogqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHrErjrjrjoGnHpzrFpznHoQoKrOnRrQnHaMaMaMaMaMaMaMaMaMmumumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUpdpermrnrormrppepBpBpBrRqUoVoVoVoVoVoVpFpFpFpFpFqvqvqsqJquqsqvrrrspFrTrururvpFrwrxrypZqzqXqYqYqYqYrzrZpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHspsasHssstnHDenRBTnHsbnHnHnNnHnHaMaMaMaMaMaMaMmAaMmBmumumumumumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqeqfrJrJrJrJrJpQpBpBpepepepepepepepgoVpFpTpUpVpFqvqvqsqJrKqsqvqqqqpFrLrLrLrLpFrMrxrNpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHvUrjsfslnHnHnRsJsKnHnHnHsGnRLxnHaMaMaMaMaMaMaMmAmBmBmumumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqGqfrUrJrJrJrJpepBpBpBpBpBpepBrVrWpeoVpFqopUpUqIqvqvqvqvqvqvqvqvqvpFrLrXrYrYpFpFsqpFpZqzqXqYqYqYqYsvqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsWsXsYnHaMnHsZsZsZnHaMnHnLtatbnHaMaMaMaMaMaMaMmAaMmBaMmumumumumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUqRpepesgshshshpepBpNsipNpBpQpBsjskpeoVpFpFpFpFpFpFpFswpFpFpFqvqvqvsmrLsnsnrLrLrLrLrYpZqzqXqYqYqYqYqYsdpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMnHsZsZsZnHaMomtmtntoooaMnHsZsZsZnHaMaMaMaMaMaMaMmAmBmBmBmBmBmumumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVqRperJrJrJrJpepBsipNsipBpeqSpepeqHoVpFsxsyszpFsAsBsBsBsCpFqvqvqvqvrLrLrLrLsDrLrLrYpZqzqXqYqYqYqYsEsFpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMomtmtntoooaMaMaMaMaMaMaMomtmtntoooaMaMaMaMaMaMaMmAaMmBaMmBaMaMmumumumumumumumumumumu
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVqRpesLsMsIpepBpBpBpBpBpepepeqHoVoVpFsOsPsQsRsBsBsBsBsSpFqvqvqvsmsTrLrLrLsUrLrLsVpZqzqXqYqYqYqYqYqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVqRperJrJrJrJpepBsipNsipBpeqSpepeqHoVpFsxsyszpFsAsBsBsBsCpFqvqvqvqvrLrLrLrLpSrLrLrYpZqzqXqYqYqYqYsEsFpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMomtmtntoooaMaMaMaMaMaMaMomtmtntoooaMaMaMaMaMaMaMmAaMmBaMmBaMaMmumumumumumumumumumumu
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVqRpesLsMsIpepBpBpBpBpBpepepeqHoVoVpFsOsPsQsRsBsBsBsBsSpFqvqvqvsmsTrLrLrLsUrLrLsVpZqzqXnZqYqYqYogqXpZqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVqRpepepepepepepepepepeqHoVoVoVoVpFpFtctdpFpFpFtctetdpFqvqvqvpFtftgtgtgtgtgthpFpZqztitjqYqYqYtktlqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoToUoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVoVpFtptptptptptptptptppFpFsNpFpFtptptptptptptppFpZqztrtstttttttstuqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvtvyhyhyhyhyhyhyhtptptptxtxtxtxtxtxpFtytztypFtxtxtxtxtxtxtxtxpZqzqztAtBtBtBtCqzqAqBaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumumumu
@@ -2282,52 +2284,52 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvyAyDyCyKyGuhuhuhwoyQuhxQylyWySxQxQxQxQxcxQxQxQyYyXwoxQxQyZtvufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvuhuhuhuhuhuhuhuhxkzeuhxQzgzgzgxQxQxQxQxcxQxQxQyYyXxkyJyEyFtvufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvuhuhuhuhuhuhuhuhtvwCuhuhzhuhuhuhxQxQwCymxQxQxQyYyXtvtvtvtvtvtxxvzixYtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvzkzkzlznzmzCzxwDtvzOzDvMtvAbAbtvvMzDzOycAexQxQyYyXtvzvzwzwzvzFzGDCzHCNtxxvAhxYtxtxaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt
-mumumumumumumumumumumuAnAnAnAnAnAoArArArAsAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvtvtvtvtvtvtvtvtvzAzBzBzAtvtvtvtvABxQxQyYyXtvzvzIzIzvzJzQDCzHCNApAfDCAqAFCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumumumuAnAnAnAnAnAKAZASBaAKAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNBvBvzNzNzPaMtvBzxQxQyYyXtvzvzwzwzvAGzQDCzHCNAJDCDCDCAPCNaMaMaMaMaMaMaMaMaMaMaMaMzRzSNaNaNazTzUaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumumumuAnAnAnAnAnAKBMASASAKAnAnAnAnAnAnAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaBYAcAcAdCnzNzPtvtvxcxctvtvtvzvzvzvzvAQzQDCzHCNBcBbBcBdBcCNaMaMaMaMaMaMaMaMaMaMaMzRAiNiNjNkNlNmAlzUaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumuAnAnAnArDEArDIAnDUDEArDIEpDWArArArArArAsAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAmAcAcAcAcAcAcEsErwoxQxQxQxQxQxOzvBezvBezFzQDCBtBfAJDCBFDCBGCNaMaMaMaMaMaMaMaMaMaMzRAiAMAvADAvADAvBOAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnAnAnAnFYFZASASASASASASASASASASASASASASASASAKAnAnAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAxAyAzAzAzAzAzzNAAxPxQxQxQxQxQxczvBezvBezJzQDCBtBfBPDCBRBQBSCNaMaMaMaMaMaMaMaMaMaMACADADADBNNcADADADADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnAnASHkFYHkASASASASASASASASASASASASASASASASHmIJIIAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAEzNzNzNzNzNzNzNzNAAaMxkxQxQxQxQxQtvzvBezvBeAGCeCdCfCNBcCgCiChBcCNaMaMaMaMaMaMaMaMaMaMAtADBuNhNeNgNeNfCrADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnAnFYHkFYAnAnAnDUArArAsEpDUArILDIEpISASASASEpIUITAnAnAnmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHCNCNCNCNCNCNCNCNCNCjDCDCCkAPCNCNCNaMaMaMaMaMaMaMaMAtIVACATARAUARATACIVAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnFYFYAnAnAnAnAnAnAnAnAKASASBMAKIWASAKASASASEpIUIXAnAnISmumumumumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYIYJaClCmCmCmCmCmCNDyCoCpDCDCCuAPCoDyCNaMaMaMaMaMaMaMaMAtADCrAtMQCvMUAtBuADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnFYAnAnAnmumuAnDUArDIJcJbASAZAKJbAZAKASASASISIUIUIUJlAKmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBlBmBnBlBmBmBoBpBqBmBrBsAYAWAWCwCmCmCmCmCmCNDyCxCpDCDCDCAPCxDyCNCNCNCNCNCNaMaMaMACADCrCCMQMRMPCCBuADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuAnJoJoAnmumumuAnJpJqJqDWArArArDEArArJrASASASAKIUIUIUJyAKmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBlByJzBABBBCBCBCBCBCBCBDBEAYAWAWClCmCmCmCmCmCNDyCxCpDCDCDCCyCxDyDyDyDyDyDyCNaMaMzRAiADCrDfMQBwMPDfBuADAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnFYFYFYFYAnAnmumuAnJAJBJAEpASASASASASASASASASASAKJDJCJEDUJrmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBIBJBKBJBLBJBJBJBJBJBJBJJFAWAWAWCNCNCNCNCzCACNDyCxCpDCDCDCCFCECGCGCGCGCGCGCGCGCHAtBgADCrAlACJHACAiBuADBgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuJIFYFYFYFYJJAnmumuISJKJAJAEpASASASASASASASASASASAKAnAnAnAnAnmumumumumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBWBXJLBZBBCaCaCaCaCaCaCbCcAYAWAWCNCJCICKCPCPCNCQCLCRDCDCDCDCDDDCDCCSDCDCCTCVCmCVJNADADADMYCWADADMYADADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuJOJVJUFYJWFYFYmumuHmJXJYAoArArArArArArILArDIEpDUDEILArArArArArArAsmumuaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBWBmCsBWBmBmBoBpBqBmCtBsAYAWAWCNCYCXDbCPCPDcDCDDDCDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtDeADCrCCBuADCrCCBuADDgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuJZFYKaFYJUFYFYmumuAnAnAnAKASASASASASASAKKbKcKcKcKdAKASASASASASASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYAWAWCNDrDpDFCPCPDcDCDDDCDCDCDCDMDLCGEcDCDCECEdCNaMaMCCBuADCrCMBuADCrCMBuADCrCCaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnFYKjFYOQFYFYmumuaMaMmuAKASAZASASASASHmKcKcKuKcKcHmASASASASAZASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNEDCOCOCPCPCNEKEEEXDCEYDCCyFlDyFxDCCTGOFGCNaMaMCMBuADCrCMBuNcCrCMBuADCrCMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnKxKwFYFYKyFYmumuaMaMmuAKASASASASASASEpKcKcKzKcKcEpASASASASASASAKmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNGTGRGRGRHfCZDaCPCPCPHQCPCPCPCPCPCPCPCPCPCPNyCPCNDyCxIKDCDCDCCFCECGJMDCDCKvKiCNaMaMDfBuADCrCMBuADCrCMBuADCrDfaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnAnFYFYFYFYAnmumumAaMaMAKASASISKAKCKBISKcKLKDKcKcISKAKCKBISASASAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSMSMSDhDiDjDkDlCPDmDnDoDlCPCPCPCPCPCPCPCPCNDyCxMTDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtBTADCrDfBuADCrDfBuADDqAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnAnAnAnKMKNAnmumBmAaMaMHmASASHmaMaMaMDWDIKAKCKBDUJraMaMaMHmASASHmaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMVMSMSMSDsDiDtDuDlCPDmDvDwDlCPCPDxDxDxDxDxDxCNDyDzDADBDCDCDCDDDCDCDCDCDCCTCVCmCVKOADADNCADADADADADNCADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumuAnAnAnAnAnAnmuaMaMaMaMaMKPKQKQKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKQKQKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMWMSMSMSDsDaCPCPCPNyCPCPCPCPCPDGDHDHDHDHDHDHCNCNCNCNMXKSKSCNCNCNCNDdCGCGCGCGCGCHEAACNNATzSzTKTzSzTATNNACBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumumuaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMZMSNdDsDiDNDODlCPDmDPDQDlCPDGDRDSDSDSDSDSCNDTDTDTNDDVDVKWDXDXCNDyDyDyDyCNaMaMAtNENFAtNHNIEaNKNJAtNLNGAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumuaMaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNoMSMSNrMSDsDiEeEfDlCPDmEgEhDlCPDGDSDSDSDSDSDSCNEiEjEjElDVDVDVDXDXCNCNCNCNCNCNaMaMAtNuNYAtNwNVEaEaKXAtNTNxAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumumumumuaMaMaMaMaMKYKQKQKZaMaMaMKYaMaMaMaMaMKZaMaMaMKYKQKQKZaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNzMSMSMSMSEoDaCPCPCPCPCPCPCPCPCPDGDSDSLaEqLbLcCNEtDVDVDVEwExDVDVEyCNaMaMaMaMaMaMaMEAEBEBAtNQEaNREbNPAtEBEBBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMMHLfMLMHaMaMaMLgMOMIMIMIMJLkaMaMaMMHNnLmMHaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNANOMVNWNSEFEGEGEGEHEHEHEIEJLnELEMEHEHEHCNCNCNNvDVDVEwEPEQExERESCNaMaMaMaMaMaMaMETEVEVBVDYDZEaNtNsEAEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMLsMpMwLsaMaMKYLsLrMmMnMoLrLsKZaMaMLsMGMFLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSNWNXEZEZEZEZEZEHFaFbFcFdFeFfFgFbFaEHCNCNCNCNCNCNOmFiNqFkERESCNaMaMaMaMaMaMaMaMaMaMETATEUEUEUATEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMLsOoOuLsaMaMLgMfMaOhOROhMaMeLkaMaMLsOfOgLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNPbMSNWNXEZEZEZEZEZEZEHFbFmFnFdFeFfFnFoFbEHFpFqFrFsFtCNDVFhFkDVDVEwFuaMaMaMaMaMaMaMaMaMaMaMETEVEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMLyOeLpLoLpLpLXOdMaMaMaMaMaOcLyLpLpLoLpNBLXaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNWNXEZEZEZEZEZEZEZEHFvFbFvFdFeFfFvFbFvEHFwDVDVDVDVMqDVDVDVDVDVFyFzaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMLsMsMrMuMtMvLsOLMaMaMaMaMaOLLsMyMxMBMzMsLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNWNXEZEZEZEZEZEZEZEZEHFAFbFbFdFeFfFbFbFBEHFCFDFEFFMCCNDVDVDVDVDVFHFIaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumuaMaMaMaMaMaMaMaMaMaMaMLsMsMDMDMDMELsOwOGOHMbOwOGOHLsOKMDMDMKMsLsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHCNCNCNCNCNCNCNCNCNCNCNEHFJFKFKFdFeFfFLFLFMEHFNFOFPFQFRCNFSFTFUFVFWFXCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumuaMaMaMaMaMaMaMaMaMaMaMLwMsMDMDMDMDMbMaMaMaMaMaMaMaMbMDMDMMMDMsLwaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeFeFeFeFeFeFeFeFeFeFeEHEHMNEHEHFeEHEHMNEHEHEHEHEHEHEHCNCNCNCNCNCNCNCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMaMLWNbMDMDMDMDLsOOMaMaMaMaMaOPLsMDNMMDNUMsLWaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHEHEHEHNZEHEHEHFeFeFeFeFeFeEHFeEHFeFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMaMLeNbMDMDLgMDLoLpLkLjLiLhLgLpLoLlLkOjOiOkLeaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHEHEHEHEHEHEHEHGdEHEHEHEHEHEHEHEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMKYLsLqOlOlLsOnOnOnLwLjLtLhLwOqOpOrLsOtOsLqLsKZaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHGeGfGgGfGhGiGiGiGiGiGhGiGhGiGjEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMmumuaMaMaMOvLdKsKsLYLXOnOnOnLWLjLiLhLWOrOrOxLyLZKsKsLdOyaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGbGbGbGbGlEHGiGmGmGmGmGmGiGiGiGmGmGmGmGnGoEHFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMmumuaMaMaMaMOvOzOzOyLsOBOAOnLeMaMaMaLeOrOrOCLsOvOzOzOyaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGpGqGqGbGbGrGiGiGsGtGsGiGiGiGiGiGsGtGsGuGiEHFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMLsOnOnOnLyLpMbLpLXODOrOELsaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHFeEHEHEHEHEHEHEHEHGiGmGmGmGmGmGiGiGiGmGmGmGmGvGiEHEHEHEHEHEHEHFeEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMLsOnOnOFLsMcMaMdLsOrOrOILsaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAFeEHEHzazazazazaEHGxGxGxGxGxGxGxGxGxGxGxGxGxGyGxEHzbzbzbzbzbEHFeFeFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMMeLkOJOnLsMhMaMgLsONOMLgMfaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHEHEHHgHgHgHgHgEHGBGCGCGCGCGCGCGCGCGCGCGCGCGDGBEHHgHgHgHgHgEHEHEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMOvMeLpMiMfMkMjMlMeMiLpMfOyaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGGGGGGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGKGKGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMOvLdKsKsKsKsKsLdOyaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGMGGGMGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGNGKGNGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMmumumuaMaMaMaMaMaMaMaMOvOzOzOzOzOzOyaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGPcGGGGGFGIGCGCGCGCGCGPGQGPGCGCGCGCGDGJGFGKGKPdGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-mumumumumumuaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGGGGGGGGFGIGCGCGCGCGCGSPeGSGCGCGCGCGDGJGFGKGKGKGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGU
-mumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGMGGGMGGGFGIGCGCGCGCGCGVGWGXGCGCGCGCGDGJGFGKGNGKGNGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGZGYGYGYHaHaHaGYGYHaHaHaGYGYGYGYGYGU
-mumumumuaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHFbGHGGGGGGGGGGGFGIGCGCGCGCGCGCHcGCGCGCGCGCGDGJGFGKGKGKGKGKGHFbEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUHdGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYHeGU
-mumumumuaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHOSEHHbHbHbHbHbEHGBGCGCGCGCGCGCHcGCGCGCGCGCGDGBEHHbHbHbHbHbEHOSEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHhGYGYGYGYGYGU
-mumumumuaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFJHiFbEHGzGzGzGzGzEHGxGxGxGxGxGxOTHlOTGxGxGxGxGyGxEHGEGEGEGEGEEHFbHnFMEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHdGYGYGYGYGYGU
+mtmtmtmtmtmtmtmtmtmtAomtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvzkzkzlznzmzCzxwDtvzOzDvMtvAbAbtvvMzDzOycAexQxQyYyXtvzvzwzwzvzFzGDCzHCNtxxvAhxYtxtxaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt
+dCdCdCdCdCdCdCdCdCdCdCAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsAsdCdCdCdCdCdCdCmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMtvtvtvtvtvtvtvtvtvtvtvtvtvzAzBzBzAtvtvtvtvABxQxQyYyXtvzvzIzIzvzJzQDCzHCNApAfDCAqAFCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzKururzLzLururzKaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumumumumudCAnAnAnAnAnAsAZASBaAsAnAnAnAnAnAnAnAnAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzMzNzNzNzNBvBvzNzNzPaMtvBzxQxQyYyXtvzvzwzwzvAGzQDCzHCNAJDCDCDCAPCNaMaMaMaMaMaMaMaMaMaMaMaMzRzSNaNaNazTzUaMaMaMaMaMtxzVururururzWtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumumumumudCAnAnAnAnAnAsBMASASAsAnAnAnAnAnAnAnAnAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYzZAaBYAcAcAdCnzNzPtvtvxcxctvtvtvzvzvzvzvAQzQDCzHCNBcBbBcBdBcCNaMaMaMaMaMaMaMaMaMaMaMzRAiNiNjNkNlNmAlzUaMaMaMaMtxtxtxtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumuAnAnAnAsAsAsAsAnAsAsAsAsEpAsAsAsAsAsAsAsAnAnAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAmAcAcAcAcAcAcEsErwoxQxQxQxQxQxOzvBezvBezFzQDCBtBfAJDCBFDCBGCNaMaMaMaMaMaMaMaMaMaMzRAiAMAvADAvADAvBOAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnAnAnAnFYFZASASASASASASASASASASASASASASASASAsAnAnAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzXzYAxAyAzAzAzAzAzzNAAxPxQxQxQxQxQxczvBezvBezJzQDCBtBfBPDCBRBQBSCNaMaMaMaMaMaMaMaMaMaMACADADADBNNcOKADADADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnAnASHkFYHkASASASASASASASASASASASASASASASASAsIJIIAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAEzNzNzNzNzNzNzNzNAAaMxkxQxQxQxQxQtvzvBezvBeAGCeCdCfCNBcCgCiChBcCNaMaMaMaMaMaMaMaMaMaMAtNTBuNhNeNgNeNfCrNQAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnAnFYHkFYAnAnAnAsAsAsAsEpAsAsAsAsEpAsASASASEpIUITAnAnAnmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHAHCNCNCNCNCNCNCNCNCNCjDCDCCkAPCNCNCNaMaMaMaMaMaMaMaMAtIVACATARAUARATACIVAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnFYFYAnAnAnAnAnAnAnAnAsASASBMAsIWASAsASASASEpIUIXAnAnAsmumudCmumumumumtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYIYJaClCmCmCmCmCmCNDyCoCpDCDCCuAPCoDyCNaMaMaMaMaMaMaMaMAtADCrAtNYCvOfAtBuADAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnFYAnAnAnmumuAnDUArDIAsJbASAZAsJbAZAsASASASAsIUIUIUJlAsmumudCmumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBlBmBnBlBmBmBoBpBqBmBrBsAYAWAWCwCmCmCmCmCmCNDyCxCpDCDCDCAPCxDyCNCNCNCNCNCNaMaMaMACADCrCCMQMRMPCCBuADACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuAnJoJoAnmumumuAnJpJqJqAsAsAsAsAsAsAsAsASASASAsIUIUIUJyAsmumudCmumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBlByJzBABBBCBCBCBCBCBCBDBEAYAWAWClCmCmCmCmCmCNDyCxCpDCDCDCCyCxDyDyDyDyDyDyCNaMaMzRAiNTCrDfMQBwMPDfBuNQAlzUaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnFYFYFYFYAnAnmumuAnJAJBJAEpASASASASASASASASASASAsJDJCJEAsAsmumudCmumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBIBJBKBJBLBJBJBJBJBJBJBJJFAWAWAWCNCNCNCNCzCACNDyCxCpDCDCDCCFCECGCGCGCGCGCGCGCGCHAtBgADCrAlACJHACAiBuADBgAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuJIFYFYFYFYJJAnmumuISJKJAJAEpASASASASASASASASASASAsAnAnAnAnAnmumudCmumumuaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWBWBXJLBZBBCaCaCaCaCaCaCbCcAYAWAWCNCJCICKCPCPCNCQCLCRDCDCDCDCDDDCDCCSDCDCCTCVCmCVJNADADADOJCWADADOJADADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuJOJVJUFYJWFYFYmumuHmJXJYAsAsAsAsAsAsAsAsAsAsEpAsAsAsAsAsAsAsAsAsAsmumuaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWBWBmCsBWBmBmBoBpBqBmCtBsAYAWAWCNCYCXDbCPCPDcDCDDDCDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtOpADCrCCBuADCrCCBuADOuAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuJZFYKaFYJUFYFYmumuAnAnAnAsASASASASASASAsKbKcKcKcKdAsASASASASASASAsmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAVAWAWAWAWAWAWAWAWAWAWAWAWAWAXAYAWAWCNDrDpDFCPCPDcDCDDDCDCDCDCDMDLCGEcDCDCECEdCNaMaMCCBuADCrCMBuADCrCMBuADCrCCaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnFYKjFYOQFYFYmumuaMaMmuAsASAZASASASASAsKcKcKuKcKcAsASASASASAZASAsmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNCNIqImImCPCPCNEKEEEXDCEYDCCyFlDyFxDCCTGOFGCNaMaMCMBuADCrCMBuNcCrCMBuADCrCMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnKxKwFYFYKyFYmumuaMaMmuAsASASASASASASEpKcKcKzKcKcEpASASASASASASAsmuaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNGTGRGRGRHfCZDaCPCPCPHQCPCPCPCPCPCPCPCPCPCPNyCPCNDyCxIKDCDCDCCFCECGJMDCDCKvKiCNaMaMDfBuADCrCMBuADCrCMBuADCrDfaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnAnFYFYFYFYAnmumumAaMaMAsASASAsKAKCKBAsKcKLKDKcKcAsKAKCKBAsASASAsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSMSMSDhDiDjDkDlCPDmDnDoDlCPCPCPCPCPCPCPCPCNDyCxMTDCDCDCDCDDDCDCDCDCDCCTDdCGCHAtPxADCrDfBuADCrDfBuADPwAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnAnAnAnKMKNAnmumBmAaMaMAsASASAsaMaMaMAsAsKAKCKBAsAsaMaMaMAsASASAsaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMVMSMSMSDsDiDtDuDlCPDmDvDwDlCPCPDxDxDxDxDxDxCNDyDzDADBDCDCDCDDDCDCDCDCDCCTCVCmCVKOADADPvADADADADADPvADCrACaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmuAnAnAnAnAnAnmuaMaMaMaMaMKPKQKQKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKQKQKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMWMSMSMSDsDaCPCPCPNyCPCPCPCPCPDGDHDHDHDHDHDHCNCNCNCNMXKSKSCNCNCNCNDdCGCGCGCGCGCHEAACNNATzSzTKTzSzTATNNACBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumumumumuaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMZMSNdDsDiDNDODlCPDmDPDQDlCPDGDRDSDSDSDSDSCNDTDTDTNDDVDVKWDXDXCNDyDyDyDyCNaMaMAtNENFAtNHNIEaNKNJAtNLNGAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumumumuaMaMaMaMaMKPKVKUKRaMaMaMaMaMaMaMaMaMaMaMaMaMKPKVKUKRaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNoMSMSNrMSDsDiEeEfDlCPDmEgEhDlCPDGDSDSDSDSDSDSCNEiEjEjElDVDVDVDXDXCNCNCNCNCNCNaMaMAtNuPBAtNwNVEaEaKXAtPANxAtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumumumumuaMaMaMaMaMKYKQKQKZaMaMaMKYaMaMaMaMaMKZaMaMaMKYKQKQKZaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNzMSMSMSMSEoDaCPCPCPCPCPCPCPCPCPDGDSDSLaEqLbLcCNEtDVDVDVEwExDVDVEyCNaMaMaMaMaMaMaMEAEBEBAtPzEaNREbPyAtEBEBBVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMAKLfMLAKaMaMaMAKMOMIMIMIMJAKaMaMaMAKNnLmAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNANOMVNWNSEFEGEGEGEHEHEHEIEJLnELEMEHEHEHCNCNCNNvDVDVEwEPEQExERESCNaMaMaMaMaMaMaMETEVEVBVDYDZEaNtNsEAEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMAKMpMwAKaMaMKYAKLrMmMnMoLrAKKZaMaMAKMGMFAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSMSMSNWNXEZEZEZEZEZEHFaFbFcFdFeFfFgFbFaEHCNCNCNCNCNCNOmFiNqFkERESCNaMaMaMaMaMaMaMaMaMaMETATEUEUEUATEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMAKOoPpAKaMaMAKAKPoOhOROhPnAKAKaMaMAKPmOgAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNPbMSNWNXEZEZEZEZEZEZEHFbFmFnFdFeFfFnFoFbEHFpFqFrFsFtCNDVFhFkDVDVEwFuaMaMaMaMaMaMaMaMaMaMaMETEVEVEVEWaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMAKOeAKAKAKAKAKOdMaMaMaMaMaOcAKAKAKAKAKNBAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNMSNWNXEZEZEZEZEZEZEZEHFvFbFvFdFeFfFvFbFvEHFwDVDVDVDVMqDVDVDVDVDVFyFzaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMAKMsEDMuCOMvAKOLMaMaMaMaMaOLAKMyMxGLMzMsAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMCNNWNXEZEZEZEZEZEZEZEZEHFAFbFbFdFeFfFbFbFBEHFCFDFEFFMCCNDVDVDVDVDVFHFIaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumuaMaMaMaMaMaMaMaMaMaMaMAKMsMDMDMDPqAKOwOGOHMbOwOGOHAKPrMDMDMKMsAKaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMAHCNCNCNCNCNCNCNCNCNCNCNEHFJFKFKFdFeFfFLFLFMEHFNFOFPFQFRCNFSFTFUFVFWFXCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumuaMaMaMaMaMaMaMaMaMaMaMLwMsMDMDMDMDMbMaMaMaMaMaMaMaMbMDMDMMMDMsLwaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeFeFeFeFeFeFeFeFeFeFeEHEHMNEHEHFeEHEHMNEHEHEHEHEHEHEHCNCNCNCNCNCNCNCNaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMaMaMaMaMaMaMLWNbMDPtMDMDAKHjMaMaMaMaMaPuAKMDNMMDNUMsLWaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHEHEHEHNZEHEHEHFeFeFeFeFeFeEHFeEHFeFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMaMaMaMaMaMaMLeNbMDMDAKLlAKAKAKLjLiLhAKAKAKLlAKOjOiOkLeaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHEHEHEHEHEHEHEHGdEHEHEHEHEHEHEHEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMaMaMaMaMaMKYAKOPOlOlAKOnPhOnLwLjLtLhLwOqOOOrAKOtOsOMAKKZaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGaGbGbGbGbGcEHGeGfGgGfGhGiGiGiGiGiGhGiGhGiGjEHFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMmumuaMaMaMOvAKKsKsAKAKOnOnOnLWLjLiLhLWOrOrOxAKAKKsKsAKOyaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGbGbGbGbGlEHGiGmGmGmGmGmGiGiGiGmGmGmGmGnGoEHFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMmumuaMaMaMaMOvOzOzOyAKOBOAOnLePiMaPiLeOrOrOCAKOvOzOzOyaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFeEHGkGpGqGqGbGbGrGiGiGsGtGsGiGiGiGiGiGsGtGsGuGiEHFeFeFeFeFeFeFeEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMAKOnOnOnAKAKMbAKAKODOrOEAKaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHFeEHEHEHEHEHEHEHEHGiGmGmGmGmGmGiGiGiGmGmGmGmGvGiEHEHEHEHEHEHEHFeEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMAKOnOnOFAKMcMaMdAKOrOrOIAKaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAFeEHEHzazazazazaEHGxGxGxGxGxGxGxGxGxGxGxGxGxGyGxEHzbzbzbzbzbEHFeFeFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMAKAKPjOnAKMhMaPlAKONPkAKAKaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHEHEHHgHgHgHgHgEHGBGCGCGCGCGCGCGCGCGCGCGCGCGDGBEHHgHgHgHgHgEHEHEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMOvAKAKAKAKMkMjMlAKAKAKAKOyaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGGGGGGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGKGKGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMmumuaMaMaMaMaMaMaMaMOvAKKsKsKsKsKsAKOyaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGMGGGMGGGFGIGCGCGCGCGCGCGCGCGCGCGCGCGDGJGFGKGNGKGNGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMmumumuaMaMaMaMaMaMaMaMOvOzOzOzOzOzOyaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGPcGGGGGFGIGCGCGCGCGCGPGQGPGCGCGCGCGDGJGFGKGKPdGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+dCmumumumumuaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGGGGGGGGGFGIGCGCGCGCGCGSPeGSGCGCGCGCGDGJGFGKGKGKGKGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGUGU
+dCmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHzjGAGGGMGGGMGGGFGIGCGCGCGCGCGVGWGXGCGCGCGCGDGJGFGKGNGKGNGKGAGwEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGZGYGYGYHaHaHaGYGYHaHaHaGYGYGYGYGYGU
+dCmumumuaMaMaMaMaMaMaMaMaMaMmumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHFbGHGGGGGGGGGGGFGIGCGCGCGCGCGCHcGCGCGCGCGCGDGJGFGKGKGKGKGKGHFbEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUHdGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYGYHeGU
+dCmumumuaMaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFAEHOSEHHbHbHbHbHbEHGBGCGCGCGCGCGCHcGCGCGCGCGCGDGBEHHbHbHbHbHbEHOSEHFBEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHhGYGYGYGYGYGU
+dCmumumuaMaMaMaMaMaMaMmumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFJHiFbEHGzGzGzGzGzEHGxGxGxGxGxGxOTHlOTGxGxGxGxGyGxEHGEGEGEGEGEEHFbHnFMEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYGYGYGYGYGYGYGYGYHdGYGYGYGYGYGU
mumuaMaMaMaMaMaMaMaMaMaMmumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHEHFbEHEHEHEHEHEHEHHoHpHpHpHpHpHqHrHoHpHpHpHpHsHoEHEHEHEHEHEHEHFbEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYHtHhGYGYGYGYGYGYGYGYGYGYGYGYGYGU
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHFbFbFeFeFeFeFeEHHoHoHuHoHuHoHoHvHwHoHuHoHuHxHoEHFeFeFeFeFeFbFbEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYGYPfPfGYGYGYGYGYGYGYGYGYGYGYGYGU
mtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMEHEHEHEHEHEHEHFeMNHoHoHoHyHyHyHoHoHoHyHyHyHyHyHoMNFeEHEHEHEHEHEHEHaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMGUGYGYGYGYPfHzHAPfGYGYGYGYGYGYGYGYGYGYGYGU
@@ -2369,29 +2371,29 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHZHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIaIbIcIdIeIfHYIgIhIiHYIjIkIlHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcImInIoIpIqIkIkIrHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcMBInIoIpMtIkIkIrHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIsIsIcIcIcItHYIuIvIwHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIxHYIyIyIzHYIAIBICIDHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIEIEIcIcIcIFHYIyIyIyIGIyIyIyIHHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcOUHYIMINIOHYIPIQIRIDHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVaMaMaMOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcItHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJeJfJgIcJhJiJjJhJkGLJmJnHjHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVaMaMOVaMaMOVOVOVOVOVOVOVaMaMOVaMaMOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJsJtJgIcJuJuJuJuJvJwJxJwJxHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVaMOVOVOVOVOVOVOVOVOVaMOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJGOWJgIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVaMOVOVOVOVOVOVOVOVOVaMOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJPJQJgIcJuJuJuJuJuJuJRJSJTHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVaMOVOVOVOVOVOVOVOVOVaMOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKeKfKfKgKfKfKfKgKfKfKfKgKfKfKhHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKkKlKlJkKmKoKnJkKpKpKqJkKrOXKtHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKlKEKkJvKGLvLuJvKHKIKpJvKJKtKKHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVaMaMOVOVOVOVOVOVOVaMaMOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMOVOVOVOVOVaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIEIEIcIcIcIFHYIyIyIyPsIyIyIyIHHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcOUHYIMINIOHYIPIQIRIDHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcItHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJeJfJgIcJhJiJjJhJkKKJmJnMrHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJsJtJgIcJuJuJuJuJvJwJxJwJxHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJGOWJgIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcJdJPJQJgIcJuJuJuJuJuJuJRJSJTHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYIcIcIcIcIcIcJuJuJuJuJuJuJuJuJuHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKeKfKfKgKfKfKfKgKfKfKfKgKfKfKhHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKkKlKlJkKmKoKnJkKpKpKqJkKrOXKtHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYKlKEKkJvKGLvLuJvKHKIKpJvKJKtIGHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYHYaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
"}
diff --git a/maps/exodus-4.dmm b/maps/exodus-4.dmm
index 30e1b823d63..9a4353df6b8 100644
--- a/maps/exodus-4.dmm
+++ b/maps/exodus-4.dmm
@@ -27,9 +27,9 @@
"aA" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
"aB" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{tag = "icon-window (WEST)"; icon_state = "window"; dir = 8},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
"aC" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/obj/structure/window/basic{tag = "icon-window (NORTH)"; icon_state = "window"; dir = 1},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
-"aD" = (/obj/structure/table/reinforced,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/sheet/metal{amount = 50; pixel_x = 0; pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
-"aE" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/random/tech_supply,/obj/machinery/camera/motion/engineering_outpost,/turf/simulated/floor,/area/constructionsite/teleporter)
-"aF" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
+"aD" = (/obj/structure/table/reinforced,/obj/item/stack/material/plasteel{amount = 50},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
+"aE" = (/obj/structure/table/reinforced,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/item/stack/material/steel{amount = 50; pixel_x = 0; pixel_y = 0},/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
+"aF" = (/obj/structure/table/reinforced,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/random/tech_supply,/obj/machinery/camera/motion/engineering_outpost,/turf/simulated/floor,/area/constructionsite/teleporter)
"aG" = (/obj/structure/table/reinforced,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
"aH" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (WEST)"; icon_state = "window"; dir = 8},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
"aI" = (/obj/machinery/shieldgen,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
@@ -37,7 +37,7 @@
"aK" = (/obj/machinery/portable_atmospherics/canister/air,/obj/structure/window/basic{tag = "icon-window (EAST)"; icon_state = "window"; dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
"aL" = (/turf/simulated/floor,/area/constructionsite/teleporter)
"aM" = (/obj/structure/table/reinforced,/obj/item/clothing/shoes/magboots,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/glasses/meson,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/weapon/tank/oxygen,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
-"aN" = (/obj/structure/table/reinforced,/obj/item/stack/sheet/mineral/phoron{amount = 10},/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
+"aN" = (/obj/structure/table/reinforced,/obj/item/stack/material/phoron{amount = 10},/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/constructionsite/teleporter)
"aO" = (/obj/machinery/access_button/airlock_exterior{master_tag = "constructionsite_airlock"; pixel_x = 20; pixel_y = 0; req_access = list(10)},/turf/simulated/floor/airless,/area/constructionsite/hallway/fore)
"aP" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = 0},/obj/machinery/access_button/airlock_interior{master_tag = "constructionsite_airlock"; pixel_x = -20; pixel_y = 0; req_access = list(10)},/turf/simulated/floor,/area/constructionsite/teleporter)
"aQ" = (/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/port_gen/pacman,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/constructionsite/teleporter)
@@ -172,7 +172,7 @@
"dp" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/turf/simulated/floor/plating/airless,/area/space)
"dq" = (/obj/machinery/field_generator,/turf/simulated/floor/plating/airless,/area/space)
"dr" = (/obj/machinery/power/emitter{anchored = 1; dir = 8; id = "EngineEmitter"; state = 2},/turf/simulated/floor/plating/airless,/area/space)
-
+
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -243,7 +243,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavababaaaaaaabanaoaoaoaoapapapapaqapapapapapapapapapapaoaoaoapapapapapapapapapapaqapapapapauauauauanabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababaaaaabapapaoaoapapaeaeaeaeaeaeaeaeaeaeaeaeaeapaoaoaoapaeaeaeaeaeaeaeaeaeaeaeaeaeapapauauapapabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaabababanaoaoapaeaeawawawawawawawawawawaeaeapaoaoaoapaeaeaxaxaxaxaxaxaxaxaxaxaeaeapauaoanabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababaaaaaaabanaoaoapaeawawayayayayayayayayawaeaeapaoaoaoapaeaeaxazaAaBaCaDaEaFaGaxaxaeapauaoanabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababaaaaaaabanaoaoapaeawawayayayayayayayayawaeaeapaoaoaoapaeaeaxazaAaBaCaEaFaDaGaxaxaeapauaoanabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaabanaoaoapaeawayayayayayayayayayawaeaeapaoaoaoapaeaeaxaHaIaJaKaLaLaLaMaNaxaeapauaoanabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababaaabababanaoaoapaeawayayayayayayayayayawawawapaoaoaOaxaxaxaxaPaLaLaLaLaLaLaLaQaxaeapaoaoanabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavababavaaaaaaabanaoaoapaeawayayayayayayayayayaRayayaSaoaoaoaTaUaVaWaLaLaLaLaLaLaLaLaXaxaeapaoaoanabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -430,3 +430,4 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
+
diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm
index 114e31ec873..945e953347d 100644
--- a/maps/exodus-5.dmm
+++ b/maps/exodus-5.dmm
@@ -1,8 +1,8 @@
-"aa" = (/turf/space,/area/space)
+"aa" = (/turf/unsimulated/mineral,/area/mine/unexplored)
"ab" = (/turf/unsimulated/mask,/area/mine/unexplored)
-"ac" = (/turf/space,/area/syndicate_station/mining)
+"ac" = (/turf/simulated/floor/plating/airless/asteroid,/area/syndicate_station/mining)
"ad" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"ae" = (/obj/structure/lattice,/turf/space,/area/space)
+"ae" = (/turf/simulated/floor/airless/lava,/area/mine/unexplored)
"af" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/abandoned)
"ag" = (/obj/machinery/door/airlock/external,/turf/simulated/floor,/area/outpost/abandoned)
"ah" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
@@ -14,8 +14,8 @@
"an" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/hallway)
"ao" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/outpost/research/hallway)
"ap" = (/obj/machinery/door/window/westleft{dir = 1; name = "Sample Preparation Loading"; req_access = list(65)},/turf/simulated/floor{dir = 1; icon_state = "whiteblue"},/area/outpost/research/chemistry)
-"aq" = (/obj/structure/table,/obj/item/weapon/storage/box/solution_trays,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/outpost/research/chemistry)
-"ar" = (/obj/structure/table,/obj/machinery/light{dir = 1},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
+"aq" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/solution_trays,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/outpost/research/chemistry)
+"ar" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/machinery/reagentgrinder,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"as" = (/obj/structure/sign/nosmoking_2{pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"at" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/chemistry)
"au" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/turf/simulated/floor/grass,/area/outpost/research/chemistry)
@@ -25,7 +25,7 @@
"ay" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"az" = (/turf/simulated/wall/r_wall,/area/outpost/research/kitchen)
"aA" = (/turf/simulated/wall/r_wall,/area/outpost/research/analysis)
-"aB" = (/obj/structure/table,/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/turf/simulated/floor{icon_state = "dark"},/area/outpost/research/analysis)
+"aB" = (/obj/structure/table/standard,/obj/machinery/light/small{dir = 1},/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/obj/item/stack/nanopaste,/turf/simulated/floor{icon_state = "dark"},/area/outpost/research/analysis)
"aC" = (/obj/item/weapon/stool,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
"aD" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/outpost/research/analysis)
"aE" = (/obj/machinery/door/airlock/research{name = "Spectrometry Lab Sample Preparation"; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
@@ -37,9 +37,9 @@
"aK" = (/turf/simulated/floor,/area/outpost/research/chemistry)
"aL" = (/turf/simulated/floor{icon_state = "warning"},/area/outpost/research/chemistry)
"aM" = (/obj/structure/sign/botany{pixel_x = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/outpost/research/chemistry)
-"aN" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
+"aN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
"aO" = (/obj/structure/reagent_dispensers/coolanttank,/turf/simulated/floor{dir = 4; icon_state = "whitegreen"},/area/outpost/research/analysis)
-"aP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"aP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"aQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/outpost/abandoned)
"aR" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/outpost/abandoned)
"aS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/outpost/abandoned)
@@ -57,13 +57,13 @@
"be" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"bf" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"bg" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
-"bh" = (/obj/structure/table,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
+"bh" = (/obj/structure/table/standard,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"bi" = (/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
"bj" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"bk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"bl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/abandoned)
"bm" = (/turf/simulated/floor,/area/outpost/abandoned)
-"bn" = (/obj/structure/table,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
+"bn" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers{pixel_x = 2; pixel_y = 2},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"bo" = (/turf/simulated/floor{icon_state = "white"},/area/outpost/research/analysis)
"bp" = (/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_y = 32},/obj/structure/disposalpipe/trunk{dir = 1},/turf/simulated/floor,/area/outpost/research/chemistry)
"bq" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/hallway)
@@ -77,13 +77,13 @@
"by" = (/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/outpost/research/chemistry)
"bz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/chemistry)
"bA" = (/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
-"bB" = (/obj/structure/table,/obj/machinery/bunsen_burner,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
+"bB" = (/obj/structure/table/standard,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"bC" = (/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
-"bD" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
+"bD" = (/obj/item/weapon/material/shard{icon_state = "medium"},/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"bE" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/outpost/abandoned)
"bF" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Sample Preparation"; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"bG" = (/obj/machinery/artifact_analyser,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/bluegrid,/area/outpost/research/lab)
-"bH" = (/obj/structure/table,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
+"bH" = (/obj/structure/table/standard,/obj/machinery/bunsen_burner,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"bI" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/outpost/research/lab)
"bJ" = (/obj/machinery/conveyor{dir = 1; id = "anolaser"},/obj/structure/plasticflaps,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/lab)
"bK" = (/obj/machinery/conveyor_switch{id = "anolaser"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
@@ -92,15 +92,15 @@
"bN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/hallway)
"bO" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/outpost/research/hallway)
"bP" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/hallway)
-"bQ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
-"bR" = (/obj/structure/table,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
-"bS" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
-"bT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/lattice,/turf/space,/area/space)
+"bQ" = (/obj/structure/table/standard,/obj/item/weapon/flame/lighter/random,/obj/item/weapon/crowbar,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
+"bR" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
+"bS" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
+"bT" = (/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"bU" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Spectrometry Lab"; req_access = list(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{icon_state = "white"},/area/outpost/research/hallway)
"bV" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"bW" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"bX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Hallway Fore"; dir = 4},/turf/simulated/floor,/area/outpost/research/hallway)
-"bY" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
+"bY" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
"bZ" = (/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
"ca" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
"cb" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{dir = 2; icon_state = "whitepurplecorner"},/area/outpost/research/lab)
@@ -116,7 +116,7 @@
"cl" = (/obj/machinery/chem_master,/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
"cm" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "whitegreen"},/area/outpost/research/analysis)
"cn" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 6; icon_state = "whitegreen"},/area/outpost/research/analysis)
-"co" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"co" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"cp" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/outpost/abandoned)
"cq" = (/obj/item/stack/rods,/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"cr" = (/turf/simulated/wall,/area/outpost/abandoned)
@@ -141,9 +141,9 @@
"cK" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials"; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"cL" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/outpost/research/lab)
"cM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 1; icon_state = "whitepurple"},/area/outpost/research/lab)
-"cN" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
+"cN" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/water,/obj/item/weapon/reagent_containers/glass/beaker/fuel,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Sample Preparation"; dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
"cO" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
-"cP" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
+"cP" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"cQ" = (/obj/machinery/alarm{dir = 2; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"cR" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"cS" = (/obj/structure/sign/science{desc = "A warning sign which reads 'MASS SPECTROMETRY'"; name = "\improper MASS SPECTROMETRY"; pixel_x = 0; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whitegreencorner"},/area/outpost/research/hallway)
@@ -153,18 +153,18 @@
"cW" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/obj/machinery/requests_console{department = "Science"; departmentType = 2; name = "Science Requests Console"; pixel_x = -30; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"cX" = (/obj/structure/noticeboard/anomaly{icon_state = "nboard05"; pixel_y = 32},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"cY" = (/obj/structure/disposalpipe/segment,/obj/machinery/light/small{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 4; icon_state = "whitepurple"},/area/outpost/research/lab)
-"cZ" = (/obj/structure/table,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
+"cZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/large,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
"da" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
"db" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/outpost/research/hallway)
"dc" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/outpost/research/hallway)
-"dd" = (/obj/structure/table,/obj/effect/landmark{name = "bluespacerift"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
+"dd" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
"de" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/outpost/research/hallway)
"df" = (/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/outpost/research/hallway)
"dg" = (/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/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{dir = 8; icon_state = "whitepurplecorner"},/area/outpost/research/hallway)
"dh" = (/obj/machinery/power/emitter{anchored = 1; dir = 4; state = 2},/turf/simulated/floor{icon_state = "delivery"},/area/outpost/research/lab)
"di" = (/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
"dj" = (/obj/machinery/conveyor{dir = 1; id = "anolaser"},/obj/machinery/door/window/westleft{dir = 2; layer = 3.1; name = "laser testing"; req_access = list(65)},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/outpost/research/lab)
-"dk" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 9},/area/shuttle/alien/mine)
+"dk" = (/obj/structure/lattice,/turf/unsimulated/mask,/area/mine/unexplored)
"dl" = (/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 1},/area/shuttle/alien/mine)
"dm" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/outpost/research/disposal)
"dn" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/disposal)
@@ -183,8 +183,8 @@
"dA" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"dB" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/wood,/area/outpost/research/hallway)
"dC" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/wood,/area/outpost/research/hallway)
-"dD" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/outpost/research/hallway)
-"dE" = (/obj/structure/table,/obj/item/device/camera,/obj/item/weapon/stamp,/obj/item/weapon/folder,/turf/simulated/floor/wood,/area/outpost/research/hallway)
+"dD" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/light,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
+"dE" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
"dF" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/wood,/area/outpost/research/hallway)
"dG" = (/turf/simulated/floor/wood,/area/outpost/research/hallway)
"dH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/hallway)
@@ -194,8 +194,8 @@
"dL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"dM" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"dN" = (/obj/machinery/light/small,/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
-"dO" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
-"dP" = (/obj/structure/table,/obj/item/weapon/reagent_containers/glass/beaker/water,/obj/item/weapon/reagent_containers/glass/beaker/fuel,/obj/item/weapon/reagent_containers/glass/bottle/toxin,/obj/item/weapon/reagent_containers/glass/beaker/sulphuric{name = "beaker 'sulphuric acid'"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Sample Preparation"; dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whiteblue"},/area/outpost/research/chemistry)
+"dO" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 5},/obj/item/weapon/clipboard,/obj/item/weapon/pen,/obj/item/weapon/tape_roll,/turf/simulated/floor/wood,/area/outpost/research/hallway)
+"dP" = (/obj/structure/table/standard,/obj/item/device/camera,/obj/item/weapon/stamp,/obj/item/weapon/folder,/turf/simulated/floor/wood,/area/outpost/research/hallway)
"dQ" = (/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 4},/obj/structure/window/reinforced/tinted{dir = 4; icon_state = "twindow"},/turf/simulated/floor/plating/airless,/area/shuttle/alien/mine)
"dR" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/alien/mine)
"dS" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/shuttle/floor{icon_state = "floor2"},/area/shuttle/alien/mine)
@@ -213,8 +213,8 @@
"ee" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/wall/r_wall,/area/outpost/research/disposal)
"ef" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/outpost/research/disposal)
"eg" = (/obj/structure/disposaloutlet{dir = 2},/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/outpost/research/disposal)
-"eh" = (/obj/structure/table,/turf/simulated/floor/wood,/area/outpost/research/hallway)
-"ei" = (/obj/structure/table,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/simulated/floor/wood,/area/outpost/research/hallway)
+"eh" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/screwdriver{pixel_y = 15},/obj/item/weapon/melee/baton/loaded,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
+"ei" = (/obj/structure/table/standard,/turf/simulated/floor/wood,/area/outpost/research/hallway)
"ej" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/hallway)
"ek" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
"el" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/outpost/abandoned)
@@ -225,11 +225,11 @@
"eq" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_research{name = "Outpost Primary Access"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/dock)
"er" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/dock)
"es" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/dock)
-"et" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 5},/area/shuttle/alien/mine)
+"et" = (/turf/unsimulated/mask,/area/shuttle/alien/mine)
"eu" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 10},/area/shuttle/alien/mine)
"ev" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/dock)
"ew" = (/obj/structure/sign/science,/turf/simulated/wall,/area/outpost/research/dock)
-"ex" = (/turf/space,/area/shuttle/research/outpost)
+"ex" = (/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"ey" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/dock)
"ez" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "research_outpost_hatch"; locked = 1; name = "Research Outpost Docking Hatch"; req_access = list(13)},/turf/simulated/floor/plating,/area/outpost/research/dock)
"eA" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/outpost/research/dock)
@@ -261,12 +261,12 @@
"fa" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/plating,/area/outpost/abandoned)
"fb" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/outpost/abandoned)
"fc" = (/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"fd" = (/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/suit/space/syndicate,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"fe" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"fd" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_x = 32; pixel_y = 0},/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"fe" = (/obj/item/weapon/material/shard{icon_state = "small"},/obj/item/clothing/suit/space/syndicate,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"ff" = (/turf/simulated/floor/airless{icon_state = "damaged3"},/area/outpost/abandoned)
"fg" = (/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/wood,/area/outpost/research/hallway)
"fh" = (/obj/structure/bookcase/manuals/xenoarchaeology,/turf/simulated/floor/wood,/area/outpost/research/hallway)
-"fi" = (/obj/machinery/computer/reconstitutor,/turf/simulated/floor/wood,/area/outpost/research/hallway)
+"fi" = (/obj/item/weapon/material/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"fj" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/outpost/research/hallway)
"fk" = (/obj/structure/extinguisher_cabinet{pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"fl" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
@@ -281,7 +281,7 @@
"fu" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/washing_machine,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/hallway)
"fv" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/outpost/research/hallway)
"fw" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
-"fx" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
+"fx" = (/turf/simulated/floor/plating/airless/asteroid,/area/shuttle/research/outpost)
"fy" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 6},/area/shuttle/alien/mine)
"fz" = (/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/outpost/research/hallway)
"fA" = (/turf/simulated/floor/plating,/area/outpost/research/disposal)
@@ -289,8 +289,8 @@
"fC" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/outpost/research/disposal)
"fD" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/disposal)
"fE" = (/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"fF" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
-"fG" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/outpost/abandoned)
+"fF" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/drinkingglasses{pixel_x = 1; pixel_y = 4},/turf/simulated/floor/wood,/area/outpost/research/hallway)
+"fG" = (/obj/structure/table/standard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"fH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"fI" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"fJ" = (/obj/structure/bed/chair{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
@@ -328,14 +328,14 @@
"gp" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
"gq" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/outpost/abandoned)
"gr" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/outpost/abandoned)
-"gs" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/space,/area/outpost/abandoned)
-"gt" = (/obj/structure/lattice,/turf/space,/area/outpost/abandoned)
+"gs" = (/obj/item/weapon/material/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"gt" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/unsimulated/mask,/area/mine/unexplored)
"gu" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"gv" = (/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"gv" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"gw" = (/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/outpost/research/eva)
"gx" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/research{name = "Anomalous Materials Sample Preparation"; req_access = list(65)},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"gy" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"gz" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/space,/area/space)
+"gz" = (/turf/simulated/floor/airless/lava,/area/mine/explored)
"gA" = (/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced,/turf/simulated/floor,/area/outpost/research/hallway)
"gB" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/closet/secure_closet/xenoarchaeologist{req_access = list(47)},/obj/structure/window/reinforced,/turf/simulated/floor,/area/outpost/research/hallway)
"gC" = (/obj/machinery/door/window/westleft{dir = 2; name = "Locker room"; opacity = 0; req_access = list(65)},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/hallway)
@@ -357,17 +357,17 @@
"gS" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/outpost/research/dock)
"gT" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "warningcorner"; dir = 4},/area/outpost/research/dock)
"gU" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
-"gV" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
+"gV" = (/obj/structure/table/standard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/outpost/abandoned)
"gW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/research/dock)
"gX" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/dock)
"gY" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/outpost/research/eva)
"gZ" = (/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/outpost/research/eva)
-"ha" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/fire,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
-"hb" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"ha" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/firstaid/toxin,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
+"hb" = (/turf/simulated/floor/airless/lava,/area/outpost/research/disposal)
"hc" = (/obj/effect/alien/weeds{icon_state = "weeds1"},/obj/effect/decal/remains/xeno,/turf/simulated/floor/plating,/area/outpost/abandoned)
"hd" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/outpost/abandoned)
"he" = (/obj/effect/gibspawner/robot,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
-"hf" = (/obj/structure/table,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/outpost/research/dock)
+"hf" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/fire,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
"hg" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Kitchen"; dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"hh" = (/obj/structure/closet/emcloset,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor,/area/outpost/research/dock)
"hi" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "bluecorner"},/area/outpost/research/dock)
@@ -386,7 +386,7 @@
"hv" = (/obj/machinery/door/airlock/maintenance{name = "Maintenance Storage"; req_one_access = list(12,65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"hw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
"hx" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/research/isolation_monitoring)
-"hy" = (/obj/structure/table,/obj/item/weapon/anobattery{pixel_x = -6; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2; pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6; pixel_y = 6},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
+"hy" = (/obj/structure/table/standard,/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor{dir = 2; icon_state = "arrival"},/area/outpost/research/dock)
"hz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
"hA" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
"hB" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'RADIOACTIVE AREA'"; icon_state = "radiation"; name = "RADIOACTIVE AREA"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/anomaly_analysis)
@@ -406,7 +406,7 @@
"hP" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
"hQ" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"hR" = (/turf/simulated/floor/airless{icon_state = "damaged4"},/area/outpost/abandoned)
-"hS" = (/obj/item/weapon/shard,/obj/structure/lattice,/turf/space,/area/space)
+"hS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/material/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"hT" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"hU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/dock)
"hV" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal,/obj/structure/sign/deathsposal{pixel_x = 32},/turf/simulated/floor/wood,/area/outpost/research/kitchen)
@@ -436,7 +436,7 @@
"it" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "whitepurplecorner"},/area/outpost/research/hallway)
"iu" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold4w/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"iv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
-"iw" = (/obj/structure/table,/obj/item/weapon/anodevice{pixel_x = 3; pixel_y = 3},/obj/item/weapon/anodevice,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
+"iw" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/outpost/research/dock)
"ix" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/anomaly_analysis)
"iy" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/anomaly_analysis)
"iz" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/external{name = "Access Airlock"; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/research/anomaly_analysis)
@@ -455,20 +455,20 @@
"iM" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/hallway)
"iN" = (/obj/structure/reagent_dispensers/fueltank,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
"iO" = (/obj/structure/closet/hydrant{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
-"iP" = (/obj/structure/table,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/cell,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
+"iP" = (/obj/structure/table/standard,/obj/item/weapon/anobattery{pixel_x = -6; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = -2; pixel_y = -2},/obj/item/weapon/anobattery{pixel_x = 2; pixel_y = 2},/obj/item/weapon/anobattery{pixel_x = 6; pixel_y = 6},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
"iQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/outpost/research/hallway)
"iR" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/outpost/research/hallway)
"iS" = (/obj/structure/reagent_dispensers/watertank,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/outpost/research/chemistry)
"iT" = (/turf/simulated/floor/plating,/area/outpost/research/chemistry)
"iU" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/outpost/research/chemistry)
"iV" = (/turf/simulated/wall,/area/outpost/research/chemistry)
-"iW" = (/obj/structure/table,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/outpost/research/chemistry)
+"iW" = (/obj/structure/table/standard,/turf/simulated/floor/airless,/area/outpost/abandoned)
"iX" = (/obj/machinery/hologram/holopad,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/outpost/research/kitchen)
"iY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"iZ" = (/obj/structure/bed,/obj/item/weapon/bedsheet/brown,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
"ja" = (/obj/machinery/button/remote/airlock{id = "rdorm2"; name = "Door Bolt Control"; pixel_x = -25; pixel_y = 0; specialfunctions = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/carpet,/area/outpost/research/hallway)
-"jb" = (/obj/structure/table/rack,/obj/item/stack/sheet/metal{amount = 50; pixel_x = 5; pixel_y = 5},/obj/item/stack/sheet/glass{amount = 50},/obj/item/weapon/storage/belt/utility{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
-"jc" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
+"jb" = (/obj/structure/table/rack,/obj/item/stack/material/steel{amount = 50; pixel_x = 5; pixel_y = 5},/obj/item/stack/material/glass{amount = 50},/obj/item/weapon/storage/belt/utility{pixel_x = 3; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
+"jc" = (/obj/structure/table/standard,/obj/item/weapon/anodevice{pixel_x = 3; pixel_y = 3},/obj/item/weapon/anodevice,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_analysis)
"jd" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/research/chemistry)
"je" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall/r_wall,/area/outpost/research/kitchen)
"jf" = (/obj/machinery/button/remote/airlock{id = "rddorm1"; name = "Door Bolt Control"; pixel_x = 25; pixel_y = 0; specialfunctions = 4},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/carpet,/area/outpost/research/hallway)
@@ -480,8 +480,8 @@
"jl" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/research/hallway)
"jm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
"jn" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock{id_tag = "rddorm1"; name = "Dorm 1"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/outpost/research/hallway)
-"jo" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
-"jp" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/turf/simulated/floor/plating,/area/outpost/research/chemistry)
+"jo" = (/obj/structure/table/standard,/obj/item/device/analyzer/plant_analyzer,/obj/item/weapon/cell,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/outpost/research/chemistry)
+"jp" = (/obj/structure/closet/crate/hydroponics,/obj/item/weapon/shovel/spade,/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/material/minihoe,/obj/item/weapon/reagent_containers/spray/plantbgone{pixel_x = 13; pixel_y = 5},/obj/item/weedkiller/triclopyr,/obj/item/weapon/reagent_containers/glass/fertilizer/ez,/turf/simulated/floor/plating,/area/outpost/research/chemistry)
"jq" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"jr" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/maintenance{name = "Auxiliary Storage"; req_one_access = list(65,12)},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/chemistry)
"js" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
@@ -494,7 +494,7 @@
"jz" = (/obj/machinery/mineral/unloading_machine{icon_state = "unloader-corner"},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"jA" = (/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"jB" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Lobby Port"},/turf/simulated/floor{dir = 4; icon_state = "whitegreencorner"},/area/outpost/research/hallway)
-"jC" = (/obj/item/weapon/table_parts,/obj/structure/table/rack,/obj/item/stack/sheet/glass/reinforced{amount = 8},/obj/item/stack/rods{amount = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
+"jC" = (/obj/structure/table/standard,/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor,/area/outpost/research/chemistry)
"jD" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/outpost/mining_north)
"jE" = (/obj/structure/girder,/turf/simulated/floor/plating,/area/outpost/mining_north)
"jF" = (/turf/simulated/wall,/area/outpost/mining_north)
@@ -507,7 +507,7 @@
"jM" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/outpost/mining_north)
"jN" = (/obj/structure/closet/walllocker/emerglocker/south,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"; tag = "icon-intact-f (NORTHEAST)"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"jO" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_north_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = list(10,13)},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
-"jP" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_north_outpost_inner"; locked = 1; name = "Mining External Access"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
+"jP" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
"jQ" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Anomalous Materials Lab"; dir = 8},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/lab)
"jR" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/outpost/mining_north)
"jS" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
@@ -520,8 +520,8 @@
"jZ" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"ka" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/research{name = "Anomalous Materials Locker Room"; req_access = list(65)},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"kb" = (/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor/plating,/area/outpost/mining_north)
-"kc" = (/obj/effect/decal/cleanable/cobweb,/obj/item/stack/sheet/metal{amount = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/outpost/mining_north)
-"kd" = (/obj/structure/table,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
+"kc" = (/obj/structure/table,/obj/structure/table/rack,/obj/item/stack/material/glass/reinforced{amount = 8},/obj/item/stack/rods{amount = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
+"kd" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
"ke" = (/obj/machinery/recharge_station,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"kf" = (/obj/structure/bed/chair,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"kg" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/outpost/mining_north)
@@ -535,7 +535,7 @@
"ko" = (/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"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Hallway Central"; dir = 4},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"kp" = (/obj/machinery/atmospherics/pipe/simple/visible/supply{tag = "icon-intact-supply (NORTHEAST)"; icon_state = "intact-supply"; dir = 5},/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact-scrubbers (NORTHEAST)"; icon_state = "intact-scrubbers"; dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/power)
"kq" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_north_outpost_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = 25; req_one_access = list(13,54)},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
-"kr" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/light,/turf/simulated/floor/wood,/area/outpost/research/kitchen)
+"kr" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/research/hallway)
"ks" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact-scrubbers (SOUTHWEST)"; icon_state = "intact-scrubbers"; dir = 10},/turf/simulated/floor,/area/outpost/research/power)
"kt" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"ku" = (/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
@@ -548,14 +548,14 @@
"kB" = (/turf/simulated/wall,/area/outpost/research/eva)
"kC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
"kD" = (/turf/simulated/wall,/area/mine/unexplored)
-"kE" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'INTERNALS REQUIRED'."; name = "INTERNALS REQUIRED"; pixel_x = -32; pixel_y = 0},/turf/space,/area/space)
+"kE" = (/obj/item/stack/rods,/obj/structure/lattice,/turf/unsimulated/mask,/area/mine/unexplored)
"kF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
"kG" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
"kH" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"kI" = (/obj/machinery/disposal/deliveryChute{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/research/eva)
"kJ" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/outpost/abandoned)
"kK" = (/obj/structure/table/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/outpost/abandoned)
-"kL" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/outpost/abandoned)
+"kL" = (/obj/effect/decal/cleanable/cobweb,/obj/item/stack/material/steel{amount = 10},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/glasses/meson,/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/plating,/area/outpost/mining_north)
"kM" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/outpost/abandoned)
"kN" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
"kO" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
@@ -586,9 +586,9 @@
"ln" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/research/eva)
"lo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Hallway Port"; dir = 4},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/outpost/research/hallway)
"lp" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/research/eva)
-"lq" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
-"lr" = (/obj/machinery/conveyor_switch{id = "anotempload"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"ls" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/turf/simulated/floor,/area/outpost/research/eva)
+"lq" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"lr" = (/obj/item/weapon/material/shard,/obj/structure/lattice,/turf/unsimulated/mask,/area/mine/unexplored)
+"ls" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"lt" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor,/area/outpost/research/eva)
"lu" = (/turf/simulated/wall/r_wall,/area/outpost/research/anomaly_storage)
"lv" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/gloves{pixel_x = 4; pixel_y = 5},/obj/item/weapon/storage/box/samplebags{pixel_x = 3; pixel_y = -3},/obj/item/weapon/storage/toolbox/emergency{pixel_x = 5; pixel_y = 5},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
@@ -596,12 +596,12 @@
"lx" = (/obj/machinery/atmospherics/unary/heater{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"ly" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Hallway Starboard"},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/hallway)
"lz" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Shuttle Dock"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "arrival"},/area/outpost/research/dock)
-"lA" = (/obj/machinery/conveyor_switch{id = "anosample"; req_access = list(65)},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"lA" = (/obj/structure/lattice,/obj/item/weapon/material/shard{icon_state = "small"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/unsimulated/mask,/area/outpost/abandoned)
"lB" = (/obj/machinery/power/emitter,/turf/simulated/floor{icon_state = "delivery"},/area/outpost/research/isolation_monitoring)
"lC" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
"lD" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"lE" = (/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
-"lF" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"lF" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
"lG" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (EAST)"; icon_state = "map"; dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"lH" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless,/area/outpost/abandoned)
"lI" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless,/area/outpost/abandoned)
@@ -615,24 +615,24 @@
"lQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/outpost/research/hallway)
"lR" = (/obj/machinery/suspension_gen,/turf/simulated/floor,/area/outpost/research/eva)
"lS" = (/obj/machinery/conveyor{dir = 2; id = "anominerals"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/research/eva)
-"lT" = (/obj/structure/table,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/turf/simulated/floor,/area/outpost/research/eva)
+"lT" = (/obj/structure/lattice,/turf/unsimulated/mask,/area/outpost/abandoned)
"lU" = (/obj/machinery/door/airlock/external{id_tag = "riso1"; name = "Access Airlock"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_a)
"lV" = (/obj/machinery/door/airlock/external{id_tag = "riso2"; name = "Access Airlock"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_b)
"lW" = (/obj/machinery/atmospherics/unary/freezer{dir = 4; icon_state = "freezer"},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"lX" = (/obj/machinery/door/airlock/external{id_tag = "riso3"; name = "Access Airlock"; req_access = list(65)},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_c)
"lY" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor{icon_state = "delivery"},/area/outpost/research/isolation_monitoring)
-"lZ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
-"ma" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"lZ" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"ma" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
"mb" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow{tag = "icon-map (NORTH)"; icon_state = "map"; dir = 1},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mc" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"md" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"me" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (WEST)"; icon_state = "intact"; dir = 8},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/research/isolation_monitoring)
+"md" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'INTERNALS REQUIRED'."; name = "INTERNALS REQUIRED"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"me" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_north_outpost_inner"; locked = 1; name = "Mining External Access"},/obj/effect/decal/cleanable/dirt,/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"mf" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/lights/bulbs{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/box/lights/tubes{pixel_x = -5; pixel_y = 5},/obj/item/weapon/storage/box/lights/mixed,/obj/machinery/light/small,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"mg" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mh" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mi" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/storage/box/monkeycubes,/obj/item/weapon/reagent_containers/spray/cleaner,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"mj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/outpost/abandoned)
-"mk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"mk" = (/obj/item/weapon/material/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/outpost/abandoned)
"ml" = (/obj/machinery/light/small{dir = 8},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "research_pump"; tag_exterior_door = "research_outer"; frequency = 1379; id_tag = "research_airlock"; tag_interior_door = "research_inner"; pixel_x = -25; pixel_y = 0; tag_chamber_sensor = "research_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor,/area/outpost/research/eva)
"mm" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/outpost/abandoned)
"mn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
@@ -640,16 +640,16 @@
"mp" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_storage)
"mq" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"mr" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Hallway Aft"; dir = 1},/turf/simulated/floor{dir = 2; icon_state = "whitepurple"},/area/outpost/research/hallway)
-"ms" = (/obj/structure/table,/obj/item/weapon/folder,/obj/item/device/camera,/obj/item/weapon/pen,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"ms" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 0},/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/yellow,/turf/simulated/floor,/area/outpost/research/eva)
"mt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_storage)
"mu" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"mv" = (/obj/machinery/atmospherics/binary/pump{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mw" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mx" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"my" = (/obj/structure/table,/obj/item/clothing/gloves/latex,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"my" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/excavation,/obj/item/weapon/pickaxe,/obj/item/weapon/wrench,/obj/item/device/measuring_tape,/obj/item/stack/flag/green,/turf/simulated/floor,/area/outpost/research/eva)
"mz" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/door/window{dir = 4; name = "Air Tank Access"; req_one_access = list(47,10,24)},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/outpost/research/eva)
"mA" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/manifold/visible/supply,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"mB" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"mB" = (/obj/structure/table/standard,/obj/item/weapon/folder,/obj/item/device/camera,/obj/item/weapon/pen,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"mC" = (/obj/structure/plasticflaps/mining,/obj/machinery/conveyor{dir = 2; id = "anotempload"},/turf/simulated/floor/plating,/area/outpost/research/eva)
"mD" = (/obj/machinery/conveyor{dir = 1; id = "anosample"},/obj/structure/plasticflaps/mining,/turf/simulated/floor/plating,/area/outpost/research/eva)
"mE" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
@@ -700,14 +700,14 @@
"nx" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/outpost/abandoned)
"ny" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/outpost/research/anomaly_analysis)
"nz" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/outpost/research/anomaly_analysis)
-"nA" = (/obj/structure/table,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_one_access = list(47,24,11)},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"nA" = (/obj/structure/table/standard,/obj/item/clothing/gloves/latex,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"nB" = (/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/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{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_storage)
"nC" = (/obj/structure/bed,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"nD" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"nE" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
"nF" = (/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 27},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"nG" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers,/obj/machinery/atmospherics/pipe/simple/visible/supply,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"nH" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/tape_roll,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"nH" = (/obj/structure/table/standard,/obj/machinery/computer/atmoscontrol/laptop{monitored_alarm_ids = list("isolation_one","isolation_two","isolation_three"); req_one_access = list(47,24,11)},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"nI" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"nJ" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"nK" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
@@ -720,25 +720,25 @@
"nR" = (/obj/machinery/disposal/deliveryChute{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/outpost/research/eva)
"nS" = (/obj/machinery/conveyor{dir = 2; id = "anotempload"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/outpost/research/eva)
"nT" = (/obj/machinery/conveyor{dir = 5; id = "anosample"},/obj/machinery/light/small{dir = 1},/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = 32},/turf/simulated/floor/plating,/area/outpost/research/eva)
-"nU" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/outpost/abandoned)
+"nU" = (/obj/item/weapon/material/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/outpost/abandoned)
"nV" = (/obj/structure/table/rack,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
-"nW" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/outpost/abandoned)
+"nW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"nX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/meter,/turf/simulated/floor/plating,/area/outpost/research/power)
"nY" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/outpost/research/eva)
"nZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
"oa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor,/area/outpost/research/eva)
"ob" = (/obj/machinery/atmospherics/omni/filter{tag_east = 1; tag_south = 2; tag_west = 3},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"oc" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -29},/turf/simulated/floor{dir = 2; icon_state = "cmo"},/area/outpost/research/dock)
+"oc" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"od" = (/obj/machinery/light{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/outpost/research/eva)
"oe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/research/eva)
"of" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/archaeology,/obj/item/clothing/suit/space/anomaly,/obj/item/clothing/head/helmet/space/anomaly,/obj/item/clothing/mask/breath,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/outpost/research/eva)
"og" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
"oh" = (/obj/structure/closet/excavation,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
-"oi" = (/obj/structure/table,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
+"oi" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/tape_roll,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"oj" = (/obj/structure/bed/chair/office/light,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"ok" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"ol" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"om" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"om" = (/obj/structure/lattice,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"on" = (/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers,/turf/simulated/floor{icon_state = "warning"},/area/outpost/research/isolation_monitoring)
"oo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor{icon_state = "warningcorner"; dir = 1},/area/outpost/research/isolation_monitoring)
"op" = (/obj/machinery/portable_atmospherics/canister/phoron,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
@@ -755,47 +755,47 @@
"oA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_storage)
"oB" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/anomaly_storage)
"oC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/closet/walllocker/emerglocker/west,/turf/simulated/floor/plating,/area/outpost/research/emergency_storage)
-"oD" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"oE" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
+"oD" = (/obj/item/weapon/material/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/outpost/abandoned)
+"oE" = (/obj/structure/table/standard,/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"oF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"oG" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
"oH" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"oI" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/outpost/abandoned)
+"oI" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille/broken,/obj/item/stack/rods,/obj/item/weapon/material/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/outpost/abandoned)
"oJ" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/outpost/abandoned)
"oK" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/research/power)
-"oL" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille/broken,/obj/item/stack/rods,/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/outpost/abandoned)
-"oM" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille/broken,/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
-"oN" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_b)
-"oO" = (/obj/machinery/artifact_scanpad,/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a)
+"oL" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille/broken,/obj/item/weapon/material/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/outpost/abandoned)
+"oM" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"oN" = (/obj/structure/table/standard,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/outpost/abandoned)
+"oO" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell A"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
"oP" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a)
"oQ" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
-"oR" = (/obj/machinery/artifact_scanpad,/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b)
+"oR" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell B"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_b)
"oS" = (/obj/machinery/artifact_analyser,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b)
"oT" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_x = 0; pixel_y = -32},/turf/simulated/floor/plating{dir = 1; icon_state = "warnplatecorner"},/area/outpost/research/power)
"oU" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/outpost/research/power)
"oV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"oW" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
+"oW" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_b)
"oX" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/outpost/research/power)
"oY" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"oZ" = (/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{tag = "icon-intact-scrubbers (NORTHWEST)"; icon_state = "intact-scrubbers"; dir = 9},/turf/simulated/floor,/area/outpost/research/power)
"pa" = (/obj/structure/bed,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
-"pb" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/obj/machinery/light,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
+"pb" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
"pc" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"pd" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Medbay"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/outpost/research/medical)
"pe" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored)
"pf" = (/turf/simulated/wall/r_wall,/area/outpost/research/isolation_b)
"pg" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
-"ph" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
+"ph" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell C"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
"pi" = (/obj/structure/girder,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/outpost/abandoned)
-"pj" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/mine/explored)
+"pj" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"pk" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/outpost/research/eva)
"pl" = (/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "research_sensor"; pixel_x = -25; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1379; id_tag = "research_pump"},/turf/simulated/floor{icon_state = "warning"},/area/outpost/research/eva)
"pm" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall/r_wall,/area/outpost/research/power)
"pn" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/turf/simulated/floor{icon_state = "warning"},/area/outpost/research/eva)
-"po" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/space,/area/mine/explored)
+"po" = (/obj/structure/closet,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"pp" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/outpost/research/isolation_c)
"pq" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/outpost/research/isolation_b)
-"pr" = (/obj/structure/closet,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"pr" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"ps" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; dir = 8; pixel_x = 22; pixel_y = 0},/obj/machinery/atmospherics/unary/vent_scrubber{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/outpost/research/isolation_b)
"pt" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; use_power = 0},/obj/structure/cable/blue,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/outpost/research/isolation_b)
"pu" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/turf/simulated/floor{dir = 2; icon_state = "warning"},/area/outpost/research/isolation_a)
@@ -820,23 +820,23 @@
"pN" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
"pO" = (/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
"pP" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Port"; dir = 4},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
-"pQ" = (/obj/structure/table/rack,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"pQ" = (/obj/structure/table/standard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"pR" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_b)
-"pS" = (/obj/structure/table,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"pT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"pU" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"pV" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"pS" = (/obj/structure/table/standard,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/outpost/abandoned)
+"pT" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"pU" = (/obj/structure/table/rack,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"pV" = (/obj/machinery/conveyor_switch{id = "anosample"; req_access = list(65)},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"pW" = (/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
"pX" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/turf/simulated/floor,/area/outpost/research/power)
"pY" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"pZ" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"qa" = (/obj/structure/grille,/obj/structure/lattice,/turf/space,/area/space)
-"qb" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
-"qc" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
+"qa" = (/obj/machinery/conveyor_switch{id = "anotempload"; name = "conveyor switch"; pixel_x = 0; pixel_y = 0; req_access = list(65)},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"qb" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"qc" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"qd" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"qe" = (/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/mine/explored)
"qf" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
-"qg" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
+"qg" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"qh" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/maintenance{req_one_access = list(12,65)},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/outpost/research/eva)
"qi" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/outpost/engineering/meeting)
"qj" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/meeting)
@@ -853,23 +853,23 @@
"qu" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Starboard"; dir = 8},/turf/simulated/floor,/area/outpost/research/isolation_monitoring)
"qv" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/outpost/engineering/meeting)
"qw" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
-"qx" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/space)
+"qx" = (/obj/machinery/floodlight,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"qy" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"qz" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"qA" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
-"qB" = (/turf/space,/area/shuttle/constructionsite/site)
+"qB" = (/obj/structure/closet/crate,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"qC" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/explored)
"qD" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/atmospherics)
-"qE" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/space)
+"qE" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"qF" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"qG" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
-"qH" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
+"qG" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/outpost/engineering/hallway)
+"qH" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/outpost/engineering/hallway)
"qI" = (/obj/machinery/atmospherics/omni/filter{power_rating = 15000; tag_east = 5; tag_north = 1; tag_south = 2; tag_west = 6},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"qJ" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/atmospherics)
"qK" = (/obj/machinery/atmospherics/pipe/simple/visible/blue,/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/atmospherics)
-"qL" = (/turf/space,/area/mine/unexplored)
-"qM" = (/obj/structure/closet/crate,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"qN" = (/obj/machinery/floodlight,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"qL" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"qM" = (/obj/structure/sign/science{desc = "A warning sign which reads 'ANOMALOUS MATERIALS'"; name = "\improper ANOMALOUS MATERIALS"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"qN" = (/obj/structure/table/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"qO" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_mining{name = "Loading area"; req_access = list(65)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/research/eva)
"qP" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored)
"qQ" = (/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -885,10 +885,10 @@
"ra" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"rb" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "eoutpost_dock_pump"},/obj/machinery/light/small{dir = 4},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "eoutpost_solar_sensor"; pixel_x = 25; pixel_y = 0},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"rc" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
-"rd" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/mine/explored)
-"re" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
+"rd" = (/obj/machinery/light_construct/small,/obj/structure/table/rack,/obj/item/stack/material/steel{amount = 10},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"re" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"rf" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/outpost/research/power)
-"rg" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/space)
+"rg" = (/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
"rh" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 8; icon_state = "map"; tag = "icon-manifold-f (WEST)"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"ri" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
"rj" = (/obj/machinery/atmospherics/pipe/manifold/visible/cyan{dir = 1},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -905,8 +905,8 @@
"ru" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"rv" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/outpost/research/power)
"rw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
-"rx" = (/obj/machinery/light_construct/small,/obj/structure/table/rack,/obj/item/stack/sheet/metal{amount = 10},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"ry" = (/obj/structure/table/rack,/obj/item/weapon/pickaxe,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"rx" = (/obj/structure/table/standard,/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/wood{amount = 30},/obj/item/stack/material/plastic{amount = 10},/turf/simulated/floor,/area/outpost/engineering/storage)
+"ry" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"rz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"rA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"rB" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored)
@@ -949,7 +949,7 @@
"sm" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sn" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Atmospherics"; req_access = list(10)},/turf/simulated/floor,/area/outpost/engineering/hallway)
"so" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/outpost/engineering/hallway)
-"sp" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_inner"; locked = 1; name = "Engineering Dock Airlock"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"sp" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor,/area/outpost/engineering/hallway)
"sq" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sr" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/outpost/engineering/hallway)
"ss" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor,/area/outpost/engineering/hallway)
@@ -967,23 +967,23 @@
"sE" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"sF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sG" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"sH" = (/turf/simulated/floor/airless,/area/space)
+"sH" = (/obj/structure/grille,/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"sI" = (/obj/structure/ore_box,/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "research_pump"},/obj/structure/sign/vacuum{pixel_x = 32},/turf/simulated/floor{icon_state = "warning"},/area/outpost/research/eva)
"sJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sK" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eoutpost_main_airlock"; pixel_x = 0; pixel_y = -25; req_access = list(10); tag_airpump = "eoutpost_main_pump"; tag_chamber_sensor = "eoutpost_main_sensor"; tag_exterior_door = "eoutpost_main_outer"; tag_interior_door = "eoutpost_main_inner"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eoutpost_main_pump"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sL" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"sM" = (/obj/machinery/light_construct/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
-"sN" = (/turf/simulated/floor/plating/airless,/area/space)
+"sN" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/mine/explored)
"sO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
"sP" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
-"sQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "edock_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(10)},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/outpost/engineering/hallway)
-"sR" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored)
+"sQ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "edock_airlock"; name = "interior access button"; pixel_x = -25; pixel_y = -25; req_access = list(10)},/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/outpost/engineering/hallway)
+"sR" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/mine/explored)
"sS" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless,/area/mine/explored)
-"sT" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 1},/turf/space,/area/mine/explored)
-"sU" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/mine/explored)
-"sV" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/mine/explored)
-"sW" = (/obj/structure/lattice,/obj/structure/window/reinforced,/turf/space,/area/mine/explored)
-"sX" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored)
+"sT" = (/obj/machinery/power/solar,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/mine/explored)
+"sU" = (/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"sV" = (/obj/machinery/light_construct/small,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"sW" = (/obj/structure/cable/yellow,/turf/simulated/floor/plating/airless,/area/mine/explored)
+"sX" = (/obj/structure/lattice,/turf/unsimulated/mask,/area/mine/explored)
"sY" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"sZ" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/turf/simulated/floor/airless,/area/mine/explored)
"ta" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/airless,/area/mine/explored)
@@ -993,9 +993,9 @@
"te" = (/obj/machinery/light{dir = 1},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"tf" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"tg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/explored)
-"th" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/space,/area/mine/explored)
-"ti" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
-"tj" = (/obj/structure/lattice,/turf/space,/area/mine/explored)
+"th" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"ti" = (/turf/simulated/floor/plating/airless,/area/mine/explored)
+"tj" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/mine/explored)
"tk" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/outpost/engineering/hallway)
"tl" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Expedition Airlock"; dir = 4},/turf/simulated/floor/plating,/area/outpost/research/eva)
"tm" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor,/area/outpost/engineering/hallway)
@@ -1008,9 +1008,9 @@
"tt" = (/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiavulgaris,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"tu" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"tv" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"tw" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"tx" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/space,/area/mine/explored)
-"ty" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell A"; dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_a)
+"tw" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_inner"; locked = 1; name = "Engineering Dock Airlock"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
+"tx" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"ty" = (/obj/machinery/light,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_a)
"tz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/structure/extinguisher_cabinet{pixel_x = 25; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/outpost/engineering/meeting)
"tA" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/engineering/hallway)
"tB" = (/obj/structure/disposalpipe/trunk,/obj/structure/disposaloutlet{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
@@ -1022,22 +1022,22 @@
"tH" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/blue,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tI" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tJ" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
-"tK" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/space,/area/space)
+"tK" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/mine/explored)
"tL" = (/obj/machinery/atmospherics/pipe/simple/visible/blue,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tM" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/obj/machinery/computer/general_air_control/large_tank_control{frequency = 1441; input_tag = "outpost_n2_in"; name = "N2 Tank Monitor"; output_tag = "outpost_n2_out"; sensors = list("outpost_n2_sensor" = "Tank")},/obj/structure/sign/securearea{desc = "A warning sign which reads 'COMPRESSED GAS'."; name = "COMPRESSED GAS"; pixel_y = -32},/obj/machinery/light,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tN" = (/obj/machinery/atmospherics/pipe/simple/visible/purple,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tO" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
-"tP" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
+"tP" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tQ" = (/obj/machinery/mining/drill,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
-"tR" = (/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
+"tR" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tS" = (/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tT" = (/obj/machinery/atmospherics/pipe/simple/visible/blue,/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
-"tU" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (SOUTHEAST)"; icon_state = "intact"; dir = 6},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
+"tU" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 6},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tV" = (/obj/machinery/atmospherics/omni/filter{power_rating = 15000; tag_east = 4; tag_north = 1; tag_south = 2; tag_west = 3},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
-"tW" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/machinery/meter,/turf/simulated/floor,/area/outpost/engineering/atmospherics)
+"tW" = (/obj/machinery/atmospherics/pipe/simple/visible/purple{dir = 10},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tX" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{tag = "icon-intact (NORTHWEST)"; icon_state = "intact"; dir = 9},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"tY" = (/obj/machinery/light,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_x = -6; pixel_y = -28},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"tZ" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell B"; dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_b)
+"tZ" = (/obj/machinery/artifact_scanpad,/turf/simulated/floor/bluegrid,/area/outpost/research/isolation_b)
"ua" = (/obj/machinery/atmospherics/pipe/simple/visible/red{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/visible/blue{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"ub" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"uc" = (/obj/machinery/atmospherics/omni/mixer{tag_east = 1; tag_east_con = 0.79; tag_south = 1; tag_south_con = 0.21; tag_west = 2},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -1061,7 +1061,7 @@
"uu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"uv" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eoutpost_main_outer"; locked = 1; name = "Engineering Outpost"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"uw" = (/turf/simulated/floor,/area/outpost/engineering/storage)
-"ux" = (/obj/structure/table,/obj/item/stack/sheet/plasteel{amount = 10},/obj/item/stack/sheet/wood{amount = 30},/obj/item/stack/sheet/mineral/plastic{amount = 10},/turf/simulated/floor,/area/outpost/engineering/storage)
+"ux" = (/obj/structure/table/standard,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/turf/simulated/floor,/area/outpost/engineering/storage)
"uy" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/storage)
"uz" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor,/area/outpost/engineering/storage)
"uA" = (/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
@@ -1073,12 +1073,12 @@
"uG" = (/obj/machinery/vending/snack,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"uH" = (/obj/structure/flora/pottedplant{tag = "icon-plant-21"; icon_state = "plant-21"},/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"uI" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
-"uJ" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
-"uK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"uJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"uK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"uL" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/power)
"uM" = (/obj/structure/bed/chair,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"uN" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/bed/chair,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
-"uO" = (/obj/structure/table,/obj/random/tech_supply,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
+"uO" = (/obj/structure/table/standard,/obj/random/tech_supply,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"uP" = (/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"uQ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/stack/cable_coil/yellow,/obj/item/stack/cable_coil,/turf/simulated/floor,/area/outpost/engineering/storage)
"uR" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/outpost/engineering/storage)
@@ -1086,8 +1086,8 @@
"uT" = (/turf/simulated/wall,/area/outpost/engineering/storage)
"uU" = (/obj/machinery/floodlight,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"uV" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
-"uW" = (/obj/machinery/camera/network/research_outpost{c_tag = "Research Outpost Isolation Cell C"; dir = 8},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
-"uX" = (/obj/structure/sign/science{desc = "A warning sign which reads 'ANOMALOUS MATERIALS'"; name = "\improper ANOMALOUS MATERIALS"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"uW" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/outpost/research/isolation_c)
+"uX" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/mine/explored)
"uY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor,/area/outpost/engineering/hallway)
"uZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/outpost/engineering/storage)
"va" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -28},/turf/simulated/floor,/area/outpost/engineering/hallway)
@@ -1102,21 +1102,21 @@
"vj" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "edock_outer"; locked = 1; name = "Engineering Dock Airlock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"vk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/engineering/hallway)
"vl" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"vm" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "edock_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = 0; req_access = list(10)},/turf/space,/area/space)
-"vn" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/outpost/engineering/hallway)
+"vm" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"vn" = (/obj/machinery/light{dir = 1},/obj/structure/table/reinforced,/obj/item/weapon/wrench,/obj/item/weapon/screwdriver,/obj/item/weapon/crowbar,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
"vo" = (/obj/machinery/power/solar_control,/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/outpost/engineering/hallway)
"vp" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/outpost/engineering/hallway)
"vq" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1380; id_tag = "eoutpost_dock_pump"},/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "edock_airlock"; pixel_x = 30; pixel_y = 0; req_access = list(10); tag_airpump = "edock_pump"; tag_chamber_sensor = "edock_sensor"; tag_exterior_door = "edock_outer"; tag_interior_door = "edock_inner"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"vr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"vs" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
"vt" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/camera/network/mining{c_tag = "Mining Outpost North - Airlock"},/turf/simulated/floor/plating,/area/outpost/mining_north)
-"vu" = (/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating/airless,/area/space)
+"vu" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "edock_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = 0; req_access = list(10)},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"vv" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/power)
"vw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/engineering/power)
"vx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/outpost/engineering/hallway)
"vy" = (/obj/machinery/computer/shuttle_control/engineering,/turf/simulated/floor,/area/outpost/engineering/hallway)
"vz" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"vA" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/turf/simulated/floor,/area/outpost/engineering/hallway)
+"vA" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
"vB" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vC" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vD" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
@@ -1126,16 +1126,16 @@
"vH" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/sign/vacuum{pixel_y = -32},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
"vI" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor,/area/outpost/engineering/storage)
"vJ" = (/obj/structure/cable/blue{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/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Storage"; req_access = list(10)},/turf/simulated/floor,/area/outpost/engineering/storage)
-"vK" = (/obj/machinery/light{dir = 8},/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
+"vK" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/table/standard,/obj/random/tech_supply,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vL" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vM" = (/turf/simulated/wall/r_wall,/area/outpost/engineering/telecomms)
"vN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 82.1472; oxygen = 21.8366; temperature = 293.15},/area/outpost/engineering/telecomms)
"vO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 82.1472; oxygen = 21.8366; temperature = 293.15},/area/outpost/engineering/telecomms)
"vP" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/obj/machinery/light{dir = 1},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor,/area/outpost/engineering/hallway)
-"vQ" = (/obj/structure/table,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
+"vQ" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/storage)
-"vS" = (/obj/structure/table,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
-"vT" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor,/area/outpost/engineering/storage)
+"vS" = (/obj/structure/table/standard,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
+"vT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/lights/mixed,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"vU" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/outpost/engineering/storage)
"vV" = (/obj/machinery/telecomms/relay/preset/mining,/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 82.1472; oxygen = 21.8366; temperature = 293.15},/area/outpost/engineering/telecomms)
"vW" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/alarm{frequency = 1439; pixel_y = 22},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 82.1472; oxygen = 21.8366; temperature = 293.15},/area/outpost/engineering/telecomms)
@@ -1153,15 +1153,15 @@
"wi" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"wj" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"wk" = (/obj/machinery/door/airlock/engineering{name = "Restrooms"; req_access = list(10)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/engineering/meeting)
-"wl" = (/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/space)
+"wl" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/unsimulated/mask,/area/mine/explored)
"wm" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor,/area/outpost/engineering/hallway)
"wn" = (/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"},/obj/machinery/door/airlock/glass_engineering{name = "Telecommunications"; req_access = list(10)},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Server Walkway"; nitrogen = 82.1472; oxygen = 21.8366; temperature = 293.15},/area/outpost/engineering/hallway)
"wo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan,/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/outpost/engineering/hallway)
"wp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Power Distribution Center"; req_access = list(10)},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"wq" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating/airless,/area/space)
-"wr" = (/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating/airless,/area/space)
-"ws" = (/obj/machinery/power/tracker,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating/airless,/area/space)
-"wt" = (/obj/structure/table,/obj/machinery/cell_charger,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
+"wq" = (/turf/simulated/floor/plating/airless/asteroid,/area/shuttle/constructionsite/site)
+"wr" = (/obj/machinery/light/small,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"ws" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/yellow{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"wt" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/obj/item/stack/material/glass{amount = 50},/turf/simulated/floor,/area/outpost/engineering/storage)
"wu" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc/super{dir = 1; pixel_y = 24},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"wv" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/turf/simulated/floor,/area/outpost/engineering/hallway)
"ww" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
@@ -1172,14 +1172,14 @@
"wB" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/terminal,/turf/simulated/floor,/area/outpost/engineering/power)
"wC" = (/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = 28},/turf/simulated/floor,/area/outpost/engineering/hallway)
"wD" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/sensor{long_range = 1; name_tag = "Asteroid Main Grid"},/turf/simulated/floor,/area/outpost/engineering/power)
-"wE" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
-"wF" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"wE" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
+"wF" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
"wG" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/pipedispenser,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"wH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor/plating,/area/outpost/engineering/storage)
"wI" = (/obj/machinery/vending/coffee,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"wJ" = (/obj/structure/table/rack,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/stack/cable_coil/yellow,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/outpost/engineering/storage)
-"wK" = (/obj/structure/table,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/turf/simulated/floor,/area/outpost/engineering/storage)
-"wL" = (/obj/structure/cable/yellow,/turf/simulated/floor/plating/airless,/area/space)
+"wK" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor/carpet,/area/outpost/engineering/meeting)
+"wL" = (/obj/structure/grille,/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"wM" = (/obj/machinery/status_display{layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"wN" = (/turf/simulated/wall,/area/outpost/mining_main/east_hall)
"wO" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/effect/decal/cleanable/blood/oil,/obj/structure/cable,/obj/machinery/camera/network/mining{c_tag = "Mining Outpost North"; dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_north)
@@ -1195,7 +1195,7 @@
"wY" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/outpost/mining_main/medbay)
"wZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor{icon_state = "white"},/area/outpost/mining_main/medbay)
"xa" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/effect/decal/cleanable/dirt,/obj/structure/sign/securearea{desc = "A warning sign which reads 'MOVING PARTS'."; name = "\improper MOVING PARTS"; pixel_y = -32},/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/outpost/mining_north)
-"xb" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/table,/obj/random/tech_supply,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
+"xb" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"xc" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
"xd" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{long_range = 1; name_tag = "Mining Outpost"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
"xe" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eoutpost_solar_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access = list(10)},/turf/simulated/floor/plating/airless,/area/outpost/engineering/hallway)
@@ -1217,7 +1217,7 @@
"xu" = (/obj/machinery/sleep_console,/turf/simulated/floor{icon_state = "warnwhite"; dir = 5},/area/outpost/mining_main/medbay)
"xv" = (/obj/structure/ore_box,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"xw" = (/obj/machinery/sleeper,/turf/simulated/floor{icon_state = "warnwhite"; dir = 1},/area/outpost/mining_main/medbay)
-"xx" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "white"},/area/outpost/mining_main/medbay)
+"xx" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/o2{pixel_x = 2; pixel_y = 2},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor{icon_state = "white"},/area/outpost/mining_main/medbay)
"xy" = (/obj/structure/disposaloutlet{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"xz" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
"xA" = (/obj/machinery/atmospherics/valve/digital/open{dir = 4},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
@@ -1269,7 +1269,7 @@
"yu" = (/obj/machinery/door/window/westright{name = "Production Area"; req_access = list(48)},/turf/simulated/floor,/area/outpost/mining_main/refinery)
"yv" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yw" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_outpost_outer"; locked = 1; name = "Mining Dock Airlock"; req_access = list(13)},/turf/simulated/floor/plating,/area/outpost/mining_main/east_hall)
-"yx" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_outpost_inner"; locked = 1; name = "Mining Dock Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4; icon_state = "intact"; tag = "icon-intact-f (EAST)"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"yx" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_inner"; locked = 1; name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/outpost/mining_west)
"yy" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
"yz" = (/obj/machinery/mineral/input,/turf/simulated/floor{icon_state = "loadingarea"},/area/outpost/mining_main/refinery)
"yA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
@@ -1278,9 +1278,9 @@
"yD" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yE" = (/obj/machinery/embedded_controller/radio/airlock/docking_port{frequency = 1380; id_tag = "mining_outpost_airlock"; pixel_x = 0; pixel_y = 30; req_one_access = list(13,48); tag_airpump = "mining_outpost_pump"; tag_chamber_sensor = "mining_outpost_sensor"; tag_exterior_door = "mining_outpost_outer"; tag_interior_door = "mining_outpost_inner"},/obj/machinery/airlock_sensor{frequency = 1380; id_tag = "mining_outpost_sensor"; pixel_x = 0; pixel_y = -25},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 4; frequency = 1380; id_tag = "mining_outpost_pump"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yF" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/mining_main/east_hall)
-"yG" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/outpost/mining_main/refinery)
+"yG" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yH" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/refinery)
-"yI" = (/turf/space,/area/shuttle/mining/outpost)
+"yI" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"yJ" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1380; master_tag = "mining_outpost_airlock"; name = "interior access button"; pixel_x = -30; pixel_y = -25; req_one_access = list(13,48)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"; tag = "icon-intact-f (SOUTHWEST)"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yK" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/east_hall)
"yL" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/outpost/mining_main/east_hall)
@@ -1294,7 +1294,7 @@
"yT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/east_hall)
"yU" = (/obj/machinery/computer/shuttle_control/mining,/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"yV" = (/obj/machinery/conveyor{dir = 2; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/refinery)
-"yW" = (/turf/space,/area/mine/explored)
+"yW" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"yX" = (/obj/machinery/mineral/stacking_unit_console,/turf/simulated/wall/r_wall,/area/outpost/mining_main/refinery)
"yY" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/refinery)
"yZ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
@@ -1305,7 +1305,7 @@
"ze" = (/obj/structure/disposalpipe/segment,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/item/device/radio/intercom{freerange = 1; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -27},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"zf" = (/turf/simulated/wall/r_wall,/area/outpost/mining_main/east_hall)
"zg" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock"},/turf/simulated/floor,/area/outpost/engineering/hallway)
-"zh" = (/obj/structure/table,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
+"zh" = (/obj/structure/table/standard,/obj/machinery/microwave{pixel_y = 6},/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"zi" = (/turf/simulated/wall,/area/outpost/mining_main/dorms)
"zj" = (/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"zk" = (/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
@@ -1313,7 +1313,7 @@
"zm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_west)
"zn" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_west)
"zo" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "eoutpost_solar_pump"},/obj/machinery/embedded_controller/radio/airlock/airlock_controller{frequency = 1379; id_tag = "eoutpost_solar_airlock"; pixel_x = 0; pixel_y = -25; req_access = list(10); tag_airpump = "eoutpost_solar_pump"; tag_chamber_sensor = "eoutpost_solar_sensor"; tag_exterior_door = "eoutpost_solar_outer"; tag_interior_door = "eoutpost_solar_inner"},/obj/machinery/airlock_sensor{frequency = 1379; id_tag = "eoutpost_solar_sensor"; pixel_x = 0; pixel_y = 25},/obj/machinery/light/small{dir = 1},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Solar Access"},/turf/simulated/floor/plating,/area/outpost/engineering/hallway)
-"zp" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor,/area/outpost/mining_west)
+"zp" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor,/area/outpost/mining_west)
"zq" = (/obj/machinery/alarm{frequency = 1441; pixel_y = 22},/turf/simulated/floor,/area/outpost/mining_west)
"zr" = (/obj/machinery/recharge_station,/obj/machinery/status_display{layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor,/area/outpost/mining_west)
"zs" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_west)
@@ -1321,12 +1321,12 @@
"zu" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/outpost/mining_west)
"zv" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/outpost/mining_west)
"zw" = (/obj/structure/table/rack,/turf/simulated/floor,/area/outpost/mining_west)
-"zx" = (/obj/structure/table,/obj/item/weapon/pickaxe,/turf/simulated/floor,/area/outpost/mining_west)
+"zx" = (/obj/structure/table/standard,/obj/item/weapon/pickaxe,/turf/simulated/floor,/area/outpost/mining_west)
"zy" = (/turf/simulated/wall,/area/outpost/mining_west)
"zz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored)
"zA" = (/turf/simulated/wall,/area/outpost/mining_main/eva)
"zB" = (/obj/structure/disposalpipe/segment,/turf/simulated/wall,/area/outpost/mining_main/eva)
-"zC" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"zC" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"zD" = (/obj/machinery/door/window/westleft{name = "Production Area"; req_access = list(48)},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/refinery)
"zE" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
"zF" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
@@ -1336,24 +1336,24 @@
"zJ" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/dorms)
"zK" = (/obj/machinery/door/airlock{id_tag = "miningdorm3"; name = "Room 3"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 2; icon_state = "carpet"},/area/outpost/mining_main/dorms)
"zL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
-"zM" = (/obj/structure/table,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
+"zM" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/carpet,/area/outpost/mining_main/dorms)
"zN" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"zO" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"zP" = (/obj/structure/ore_box,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"zQ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/west_hall)
"zR" = (/obj/structure/closet/secure_closet/miner,/obj/machinery/atmospherics/unary/vent_pump/on,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"zS" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
-"zT" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
-"zU" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "mining_outpost_airlock"; name = "exterior access button"; pixel_x = -8; pixel_y = 25; req_one_access = list(13,48)},/turf/space,/area/space)
+"zT" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
+"zU" = (/obj/structure/lattice,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"zV" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining_west_outpost_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"zW" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
-"zX" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_inner"; locked = 1; name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/outpost/mining_west)
+"zX" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/outpost/mining_main/eva)
"zY" = (/turf/simulated/floor,/area/outpost/mining_west)
"zZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_west)
-"Aa" = (/turf/space,/area/skipjack_station/mining)
-"Ab" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor,/area/outpost/mining_west)
+"Aa" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"Ab" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor,/area/outpost/mining_west)
"Ac" = (/obj/machinery/atmospherics/pipe/manifold4w/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_west)
-"Ad" = (/obj/structure/table,/obj/item/weapon/shovel,/turf/simulated/floor,/area/outpost/mining_west)
+"Ad" = (/obj/structure/table/standard,/obj/item/weapon/shovel,/turf/simulated/floor,/area/outpost/mining_west)
"Ae" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Af" = (/obj/machinery/portable_atmospherics/canister/oxygen,/turf/simulated/floor,/area/outpost/engineering/storage)
"Ag" = (/obj/structure/table/rack,/obj/item/clothing/suit/space/void/mining,/obj/item/clothing/mask/breath,/obj/item/clothing/head/helmet/space/void/mining,/obj/item/weapon/mining_scanner,/turf/simulated/floor,/area/outpost/mining_main/eva)
@@ -1364,7 +1364,7 @@
"Al" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored)
"Am" = (/obj/machinery/light,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
"An" = (/obj/structure/bed/chair{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
-"Ao" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
+"Ao" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/beer,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"Ap" = (/obj/structure/ore_box,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored)
"Aq" = (/obj/machinery/light{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"Ar" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/mining_main/dorms)
@@ -1377,7 +1377,7 @@
"Ay" = (/obj/structure/table/rack,/obj/item/clothing/head/helmet/space/void/engineering,/obj/item/clothing/suit/space/void/engineering,/obj/item/clothing/shoes/magboots,/obj/item/clothing/gloves/yellow,/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/obj/item/weapon/storage/briefcase/inflatable,/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Storage"; dir = 1},/turf/simulated/floor,/area/outpost/engineering/storage)
"Az" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"AA" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/mining_west)
-"AB" = (/obj/structure/table,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
+"AB" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"AC" = (/obj/machinery/light/small{dir = 4},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Airlock Entry"; dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"AD" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor{icon_state = "bar"},/area/outpost/mining_main/dorms)
"AE" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/outpost/mining_west)
@@ -1386,7 +1386,7 @@
"AH" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor,/area/outpost/mining_west)
"AI" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_west_outpost_outer"; locked = 1; name = "Mining External Access"; req_access = list(10,13)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/outpost/mining_west)
"AJ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor,/area/outpost/mining_west)
-"AK" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/outpost/mining_west)
+"AK" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel,/obj/item/clothing/glasses/meson,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/outpost/mining_west)
"AL" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/outpost/mining_main/dorms)
"AM" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/dorms)
"AN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/dorms)
@@ -1411,21 +1411,21 @@
"Bg" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "mining_west_outpost_pump"; tag_exterior_door = "mining_west_outpost_outer"; frequency = 1379; id_tag = "mining_west_outpost_airlock"; tag_interior_door = "mining_west_outpost_inner"; pixel_x = 0; pixel_y = -25; tag_chamber_sensor = "mining_west_outpost_sensor"},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "mining_west_outpost_pump"},/turf/simulated/floor,/area/outpost/mining_west)
"Bh" = (/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"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Bi" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/outpost/mining_west)
-"Bj" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/outpost/mining_west)
+"Bj" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/outpost/mining_west)
"Bk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/outpost/mining_west)
"Bl" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/dorms)
"Bm" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/dorms)
"Bn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/outpost/mining_west)
"Bo" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/west_hall)
"Bp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/west_hall)
-"Bq" = (/obj/machinery/alarm{pixel_y = 24},/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/stack/flag/yellow,/obj/item/stack/flag/red,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"Bq" = (/obj/machinery/alarm{pixel_y = 24},/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/item/stack/flag/yellow,/obj/item/stack/flag/red,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"Br" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
"Bs" = (/obj/structure/dispenser/oxygen,/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor,/area/outpost/mining_main/eva)
"Bt" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/outpost/mining_main/eva)
"Bu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
"Bv" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
-"Bw" = (/obj/structure/table,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
-"Bx" = (/obj/structure/table,/obj/item/weapon/storage/backpack/satchel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"Bw" = (/obj/structure/table/standard,/obj/item/weapon/storage/belt/utility,/obj/item/weapon/pickaxe,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"Bx" = (/obj/structure/table/standard,/obj/item/weapon/storage/backpack/satchel,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"By" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
"Bz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1379; id_tag = "eoutpost_main_pump"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Airlock"; dir = 1},/turf/simulated/floor,/area/outpost/engineering/hallway)
"BA" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "mining_east_pump"},/obj/structure/closet/walllocker/emerglocker/north,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/mining_main/eva)
@@ -1446,11 +1446,11 @@
"BP" = (/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/mining_main/eva)
"BQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"BR" = (/obj/machinery/conveyor{dir = 8; id = "mining_west"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_west)
-"BS" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"BS" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access = list(54)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/eva)
"BT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/mining_main/east_hall)
-"BU" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/outpost/mining_main/eva)
+"BU" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
"BV" = (/obj/structure/disposalpipe/trunk{dir = 4},/obj/machinery/disposal/deliveryChute{dir = 8},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_west)
-"BW" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
+"BW" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_east_inner"; locked = 1; name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
"BX" = (/obj/machinery/mineral/input,/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_west"},/turf/simulated/floor,/area/outpost/mining_west)
"BY" = (/obj/machinery/mineral/unloading_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_west)
"BZ" = (/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 = "outpost_o2_in"; name = "O2 Tank Monitor"; output_tag = "outpost_o2_out"; sensors = list("outpost_o2_sensor" = "Tank")},/obj/machinery/camera/network/engineering_outpost{c_tag = "Engineering Outpost Atmospherics"; dir = 1},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
@@ -1465,13 +1465,13 @@
"Ci" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"Cj" = (/obj/machinery/alarm{pixel_y = 24},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"Ck" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
-"Cl" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on{dir = 1; frequency = 1441; id_tag = "outpost_o2_out"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/outpost/engineering/atmospherics)
+"Cl" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 1; frequency = 1441; id_tag = "outpost_o2_out"},/turf/simulated/floor/engine{name = "o2 floor"; nitrogen = 0; oxygen = 100000},/area/outpost/engineering/atmospherics)
"Cm" = (/obj/machinery/door/airlock{name = "Toilet"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/outpost/mining_main/west_hall)
"Cn" = (/obj/structure/sink{pixel_y = 30},/obj/machinery/light/small,/obj/structure/mirror{pixel_y = -32},/turf/simulated/floor{icon_state = "showroomfloor"},/area/outpost/mining_main/west_hall)
"Co" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/outpost/mining_main/west_hall)
"Cp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"Cq" = (/obj/machinery/conveyor{backwards = 2; dir = 2; forwards = 1; id = "mining_west"},/obj/structure/plasticflaps/mining,/turf/simulated/floor,/area/outpost/mining_west)
-"Cr" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on{dir = 1; frequency = 1441; id_tag = "outpost_n2_out"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/outpost/engineering/atmospherics)
+"Cr" = (/obj/machinery/atmospherics/unary/vent_pump/siphon/on/atmos{dir = 1; frequency = 1441; id_tag = "outpost_n2_out"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/outpost/engineering/atmospherics)
"Cs" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/eva)
"Ct" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"Cu" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor,/area/outpost/mining_main/eva)
@@ -1495,11 +1495,11 @@
"CM" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"CN" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"CO" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/outpost/mining_main/west_hall)
-"CP" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/glass_mining{name = "Mining Station EVA"; req_access = list(54)},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/outpost/mining_main/eva)
+"CP" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_east_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
"CQ" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall/r_wall,/area/outpost/engineering/hallway)
"CR" = (/obj/machinery/air_sensor{frequency = 1441; id_tag = "outpost_n2_sensor"},/turf/simulated/floor/engine{name = "n2 floor"; nitrogen = 100000; oxygen = 0},/area/outpost/engineering/atmospherics)
"CS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/west_hall)
-"CT" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "mining_east_inner"; locked = 1; name = "Mining External Access"},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
+"CT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"CU" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"CV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/west_hall)
"CW" = (/obj/machinery/light,/turf/simulated/floor,/area/outpost/mining_main/west_hall)
@@ -1511,7 +1511,7 @@
"Dc" = (/turf/simulated/floor{dir = 10; icon_state = "warning"},/area/outpost/mining_main/east_hall)
"Dd" = (/obj/machinery/atmospherics/pipe/simple/visible/blue{tag = "icon-intact (SOUTHWEST)"; icon_state = "intact"; dir = 10},/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/firealarm{dir = 4; layer = 3.3; pixel_x = 26},/turf/simulated/floor,/area/outpost/engineering/atmospherics)
"De" = (/obj/structure/ore_box,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
-"Df" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_east_airlock"; name = "interior access button"; pixel_x = 25; pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
+"Df" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light,/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"Dg" = (/obj/machinery/door/airlock/glass_mining{name = "Mining Station Bridge"; req_access = list(48)},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"Dh" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"},/turf/simulated/wall,/area/outpost/mining_main/maintenance)
"Di" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/medbay)
@@ -1558,12 +1558,12 @@
"DX" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 4},/area/mine/explored)
"DY" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
"DZ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
-"Ea" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating/airless,/area/space)
+"Ea" = (/obj/structure/lattice,/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"Eb" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/explored)
"Ec" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/explored)
"Ed" = (/obj/machinery/conveyor{icon_state = "conveyor0"; dir = 10; id = "mining_internal"},/obj/machinery/mineral/input,/turf/simulated/floor{dir = 8; icon_state = "loadingarea"},/area/outpost/mining_main/refinery)
"Ee" = (/obj/machinery/mineral/stacking_machine,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/refinery)
-"Ef" = (/obj/structure/lattice,/obj/structure/grille,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/space,/area/space)
+"Ef" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 4},/obj/machinery/light,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"Eg" = (/obj/machinery/conveyor{dir = 4; id = "mining_external"},/obj/machinery/mineral/input,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/refinery)
"Eh" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/refinery)
"Ei" = (/obj/machinery/conveyor{dir = 8; id = "mining_internal"},/obj/machinery/mineral/output,/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/refinery)
@@ -1587,17 +1587,17 @@
"EA" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera/network/mining{c_tag = "Mining Outpost EVA"; dir = 4},/turf/simulated/floor,/area/outpost/mining_main/eva)
"EB" = (/obj/machinery/hologram/holopad,/turf/simulated/floor/wood,/area/outpost/engineering/meeting)
"EC" = (/turf/simulated/floor{dir = 9; icon_state = "warning"},/area/outpost/engineering/hallway)
-"ED" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/space)
+"ED" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"EE" = (/obj/machinery/light_switch{pixel_x = 25; pixel_y = -9},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/machinery/status_display{layer = 4; pixel_x = 32; pixel_y = 10},/turf/simulated/floor,/area/outpost/mining_main/eva)
-"EF" = (/obj/structure/window/reinforced,/obj/structure/lattice,/turf/space,/area/space)
-"EG" = (/obj/structure/window/reinforced,/obj/structure/lattice,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/space)
-"EH" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/space,/area/space)
-"EI" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light{dir = 4},/turf/space,/area/space)
+"EF" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/turf/simulated/floor/airless/lava,/area/mine/explored)
+"EG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"EH" = (/obj/structure/lattice,/turf/simulated/floor/airless/lava,/area/mine/explored)
+"EI" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"EJ" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"EK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating/airless,/area/space)
-"EL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/mine/explored)
-"EM" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating/airless,/area/space)
-"EN" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating/airless,/area/space)
+"EK" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/wall,/area/mine/explored)
+"EL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/mine/explored)
+"EM" = (/turf/simulated/floor/plating/airless/asteroid,/area/shuttle/mining/outpost)
+"EN" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless/lava,/area/mine/explored)
"EO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/outpost/mining_main/east_hall)
"EP" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"EQ" = (/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; frequency = 1379; id_tag = "mining_east_pump"},/obj/structure/sign/vacuum{pixel_y = 32},/turf/simulated/floor{icon_state = "floorgrime"},/area/outpost/mining_main/eva)
@@ -1621,262 +1621,272 @@
"Fi" = (/obj/machinery/conveyor_switch/oneway{id = "mining_internal"; name = "mining conveyor"},/obj/machinery/light{dir = 4},/obj/machinery/camera/network/mining{c_tag = "Mining Outpost - Shuttle Airlock"; dir = 8},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
"Fj" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/camera/network/mining{c_tag = "Mining Outpost Production Room"; dir = 8},/turf/simulated/floor,/area/outpost/mining_main/refinery)
"Fk" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/outpost/mining_main/maintenance)
+"Fl" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "mining_outpost_inner"; locked = 1; name = "Mining Dock Airlock"; req_access = list(13)},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/east_hall)
+"Fm" = (/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/outpost/mining_main/refinery)
+"Fn" = (/obj/structure/lattice,/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "mining_outpost_airlock"; name = "exterior access button"; pixel_x = -8; pixel_y = 25; req_one_access = list(13,48)},/turf/simulated/floor/airless/lava,/area/mine/explored)
+"Fo" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 0},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
+"Fp" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
+"Fq" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"Fr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating/airless,/area/mine/explored)
+"Fs" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/plating/airless,/area/mine/explored)
+"Ft" = (/obj/machinery/light_construct/small,/turf/unsimulated/mask,/area/mine/explored)
+"Fu" = (/turf/simulated/floor/plating/airless/asteroid,/area/skipjack_station/mining)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababbaabababaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababbbababababababiLiKiKiJaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababaJaJaJaJaJabbbababababababiMeOeOdHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababaJiNiOiPaJaJbcaJaJaJaGaGaGaGiQiRaGaGaGaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaababababababababaJjbbiiUiViWbpaKaKiSaiiZjfaibXeOaijaiZaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababababaAaAaAaAjpjhiTjrjgjdjdjdccaijojmjnjkjljijjjcaGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaababababaAaAaNaOaAaJaJaJaJaKaKaLaLaMaiaiaiaiaIaHaiaiaiaGazazazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahagafaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababaAaBaCaDaEaFasaraqapawavauataiakajaiaoanaiamayaUaxamazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbmblaeaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababaAaWbocVaAbnbAbgbBbAbybxaubzaibubwbvbrbqbtbsbjddbhfJazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaPaRaQaSaeaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababaAaWaTdsaAaVbgbfbebdaJbcaJdzaGaGaGaGaZaYaiaXbjbhbhdvazaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldleubWbVblaeaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeaeaeaeaeaeabababaAaWcmcnaAclbYdPcabZgxcbcecdcgcfchaGcjcickamamiXamhgazhpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQdRdSdTbDbCbEaeaeababababababababababababababababababababababababababababababababababababababababababababababababababalalalaeaeaeaeaeaeaeaebTaGaGaGaGaGaGbUaGaGaGaGbFaGaGbIbHbGbLbKbJaGbPbObNbMbRbSbQhVjeiYalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaetdldlfycPbVcrabababababababababababababababababababababababababababababababababababababababababababababababababababalalalaaaaaaexexexexexexexaicWcXcUjBcScTcQcRdcdbdejIaGcYdacZdidhdjaGdgdfbNbMbMbMbMbMazalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaecocqcpcrabababababababababababababababababababababababababababababababababababababababababababababababababababababalaaaaaaexexexexexexexcscwcxcyctctcucvctcycFcEcDcCcBcAczcMcMcLcKcJcIcHcGcOkrcNazazalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefxemelekcrababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaexexexexexexexejcwdAdBdCeheidFdGdYaGeadZaGebedecdOdNjQaGdVdUaidWdWdWdWeeefegalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaedLdKdMcrdJdIcrcrcrcrabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaexexexexexexexdHcwdAdBdCdDdEdFdGdyaGdxdwaGkaaGaGaGaGcCaGkoduaidtdodpdmdndqdrdqdqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegzfefEfHfGfFafbCeYcrfbfacrabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaexexexexexexexaifkflfjdCfhfidFfgfvaGfzfwfsfrfuftfoaGeLeKfmeRaifnfAfBfCfDdqalalalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaefcfdfeffeUeTeWeVeYeXfaeZfbcrabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaeAereseyezeresevewepeqeneneneoeoeoeoeoeSeReQePeOeNeMaGfqfpeJeIaieHeFeGeDeEeCaGaGeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahSfchbfcfEfEdJheeUcrekhdcrfahccrabababababababababababababababababababababababababababababababababababababababababababababababdXaaaaaaaaaagMgPgQgNgOgTgQgRgSgWgXgUgVhaeogYgZgweoloeRgBgAgDgCgEaGgGgFgIgHaiaigJaiaiaieReRgKeBeBeBeBgLeBeBeBeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaegugvfEgsgtfEcpgqeTgrgpgocrcrcrcrcrcrababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaagngbgcgcgcgcgdgegfggghgigjgkeoglgmfVfUfTeIfXfWeReRfYfweReReJeIgafZfKfLfIlyeReRfMeBfOfPeBfNfRfSfQeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeiCiBhRfEgtiDffiGeUiFcriIiHcrhOhKbCiEcrabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaagngQgQgQhWgQlzhUgQibgXhZiahYeogmhXihigijiiidicifieillQimmrikieieieirisitiuinioipiqixiyiziAivmFiweBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaeababcrfFhLhPhQhRhThNeThOafbChKcrhOhLhKhMcrababababababababababababababababababababababababababababababababababalalalalalalababababababkDkEaaaaaahrgQgQhihjhfocgRhhhnhopdhqhkeohlhmhHeoeohGhGhFhuhEhxhuhJhuhIhwhwhwhwhxhuhvhththseBhChDeBhBhzhAhyeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecrcrcrcrcrcrfGeUnWhLeUgqnUhOhOeVeYiIcrhOcpeknVcrababababababababababababababababababababababababababababababababalalalgygygygyalalalababsEgygyaaaaaaaanwereseynwnwnwnwnwpMnwnununueopJeonSnTnRhGoTsjhunMnKnLnInJnGnHkmkmkmnFhunEnChtnBlulululupHnznyfQeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaecrmPeUhRoEcriCoDiBcrgrcroGoHoFcrbClLiFmOcpeleUcrabababababababababababababababababababababababababababababababalalgygygygygygygygyalalabgygyaaaaaaaaaaaaaaaeaekBohogoflnoeodpLqOoanZnYqhoqorosrIrfrvhuopokollDkmnGoiojkmkmmghuoCozhtoBoAovoulueBeBeBeBeBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcrmPcphRcpmUlLhLmShLmTbCbCmNeYbCcpcpcreUmOeUeUcrababababababababababababababababababababababababababababababalalgygygygygygygygygygymQmRgygyaaaaaaaaaaaaaaaaaekBmLllmMlOmImHmJkBkBllmKeomCmDhGhGnPnXhumEmxmbmvmwmAmBmynAmsnfhumqmuhtmtmpmpmoluabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababcrlMhReUcpnscpnrdJcpnqmTnrhKntcpkNekcrlIcpgobCcrabababababababababababababababababababababababababababababalmRgygygygygygygygygygygynDnjgyaeaaaaaaaaaaaaaaaaaekBmLllnppGnmnlllnkkBnneoeonNnOhGoXotoKhupPmVmWmXnQonoomEobmGquhungnhhtnineneneluabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababcrlMlNeUfFcrkPcrlJlKcrcpcrlJlKcreUlLcrdIlHiFlIcrabababababababababababababababababababababababababababababalomgygygygygygygygygygygygygygyaeaaaaaaaaaaaaaaaaaekBlmllqWlnmzlqltlskBlpeoowoxoyhGnamYmZhulxlFlGlDlElBlCkmnbkmkmhulwlvhtlululululuabababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababcrcrcrcrcrcrkPcrgokNcphTmmeUhTeUgoffcrmnmknxmjcrabababababababababababababababababababababababababababababalmQgygygygygygygygygygygygygygyaeaaaaaaaaaaaaaaaeaekBqZlRlPlOnolqndlTkBlSeooYoxoyhGnvhGnchulWmbmcmdmelYlZmamamhmghumimfhtababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababcrkPcrkNekkOhTkMcphKcreUekcrkLkJkJkKcradababababababababababababababababababababababababababababalalgygygyprgygygygygygygygygygyaeaaaaaaaaaaaaaeaeaekBkBkCkFkBkBkGlhkGkBkIeoowpBrVhGkpsekshukVkvkwkYkukzkAlckyknkmhuhththtababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababcrkPcrhTcpbVljeUekgocrkPcrcrhOeUkJkKlkadababababababababababababababababababababababababababababalpSpTgypUpSpQgygygygygygygygygytjaaaaaaaaaaaetjtjtjgygyqdqeqfkBmllglfkBlieogylrlAhGkSkTkTkUlUkWkXkUlVkZlalblXleldlbababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababcrkPcrcrcrcrcrcrcrcrcrkPcrphbCeUbCkKpiadababababababababababababababababababababababababababababalpSgygygypSpQgygygygygygygyqwqCpjsWsWsWsWsWsWpoqwqCgygygygygykBplpnsIkBpkgygygygyhGpApxpykUpwpupvkUptpqpslbpppEpDlbababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLababababababababababababababcrkPkPkPkPkPkPkPkPkPkPkPcrhOeUiFeUiEcradababababababababababababababababababababababababababababalgygygygyqMqNgygygygygygygygyrWqPqPqPqPqPqPqPqPrWgygygygygygykBtlrUkGkBpFrigygygypmpXkTkTkUpWpOtykUpRuStZlbpNpKuWlbababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababcrcrcrcrcrcrcrcrcrcrcrcrcrcrmjrOoMcrcradababababababababababababababababababababababababababababalgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygyuXpBrSpCvcpcpeoVoVoVxVoUsyoZkUoWoOoPkUoNoRoSlboQpbpalbabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababadadadcrkJkJeUcradadababababababababababababababababababababababababababababalpSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaalalalalalalalalgygygygygygypBpgpCgygyalhGhGhGhGkUkUkUkUkUpfpfpflblblblblbabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababadadadcroJoIoJcradabababababababababababababababababababababababababababababalpSgygygygygygygygygygygyaaaaaaaaaaaaaaaaalalalababababalalalalalalalgyjHgygyalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababadadcroLrOmjcradabababababababababababababababababababababababababababababalalpVryrxgygygygygyalalalaaaaaaaaaaaaaaaaaaababababababababalalalalalgyjHgygyalabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababadadadrBrCrDadadababababababababababababababababababababababababababababababalalalmRalgygymQmQalababaaaaaaaaaaaaaaaaaaababababababababababalalalgyjHgygyalababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalababaaaaaaaaaaaaaaaaaaabababababababababababalalgyjHgygyalababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaababaaaaaaaaababababababababababalalgyjqkhgyalababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaabababaaaaaaababababababababababalalgygyjHgyalabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaababaaaaaaababababababababababalalalgyjHgyalalalalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababababababababalalalgyjHgygygygyrHjFjFjFjFjFjFjFjFjFjFjFjFabababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababababalalalgyjHgygygygyrJvtkQjYjXkgkfkekdjFkckbjFababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaabababababababababalalalgykHjSjSjSoVjVjOjNvHjPkqjZkxktjWjRjTjFababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaabaaaaaaaaababababababababababalalgykigygygygyjFjFjFjFjFjFjKjJwOjFjMjLjFababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaabababaaaaababababababababababalalgyqqjsjujtjtjvjxjwjzjyxajAjUjCjEjDjGjFababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaabababaaaaaaabababababababababalalgygygykigygyjFjFjFjFkljFjFjFjFjFjFjFjFabababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababababalalalalgykigygygygysAkRsCsCalababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababababababababalalalrJkkrigygygygygygygyalababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababababalalalpBkjpCgygygygygygygyalababababababababababababababababababababababababababababababaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaabababababababababalalalgykigygygygygygygyalalabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaabaaaaabababababababababalalalgykigygyalmQalalalalalababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaabababaaaaababababababababalalalgykigygyalalalababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaabababaaaaaaabababababababalalalgykigyalalabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaababababababalalgykigyalalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababalalgykigygyalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaalalaaaaaaaaaaaaabababababalalgykigygyalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdXalalalaaaaaaaaaaaaabababababalalgyqqqngyalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLabababababababababqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdXalaaaaaaaaaaaaaaaaabababababalalgygykigyalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLabababababqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLabababababababababqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalaeaeaeaeaeaeaeaealalababababalmRsEgykigyalababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababababqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLababababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalsHsHsHsHsHsHsHsHalalalabababalalgygykigyalababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLabababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalaeaeaeaeaeaeaeaealabababababalgygygykigyalalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaababababababalgygygykigygyalabababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababababalgygygykigygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababalgygyrJkkrigyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababalgygypBkjpCgyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalgygykigygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalgypZpYgyalalabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalalgykigygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababalgygykigyalalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababalalgygykinDmRababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLabababababqLqLqLqLqLqLqLabababqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababalgygypZpYgyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLababababqLqLqLqLqLqLqLababababababqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalalalgygykigygyalalabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababqLqLqLqLqLqLqLababababababqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalgygygygykigygygyalabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababqLqLqLqLqLqLqLqLabababababqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygykigygygyalabababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLabababababqLqLqLqLqLqLqLqLababababababqLqLqLababababababqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygykigygygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygykigygygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygykigygygyalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaadXaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygykigygygyalalababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqaqaqaqaqaqaqaqaqaqaqaqaqaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygykigygygygyalalalalalababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaeaeaaaaaaaaaaaaaaaaaeaaaaaaaeaaaaaaaeaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygykigygygygygygygygyalalabababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaqgqxqbaaqgqxqbaaqgqxqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLabababababqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygygykigyrJrigygygygygygyalababababababababababababababababababababababababababababababababababababababababababaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeqgqcqbaeqgqcqbaeqgqcqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygygygygygyqqjsqoqpjsjsjsqngygyalalalababababababababababababababababababababababababababababababababqjqjqjqjqjqjqjabaaaaaaaaaeaaaaaaaaaaaeaaaaaeaeaaaaaaqgqcqbaaqgqcqbaaqgqcqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLabababababqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaagygygygygygygygypBpCgygygykigygygygyalababababababababababababababababababababababababababababababababqjqkqmqlrXqiqjababaaaaaaaeaaaaaaaeaaaeaaaeaeaeaeaaaaqgqcqbaaqgqcqbaaqgqcqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaalalgysLgygygygygygygygyqqjsqngygyalalabababababababababababababababababababababababababababababababqjqkqvtzqjqjqjababaaaaaaaeaeaeaeaeaeaeaeaeaaaaaeaeaaqgqcqbaeqgqcqbaeqgqcqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabalalmRalalalalalalgygygygykigygygyalalalabababababababababababababababababababababababababababababqjqkqtqsrXqrqjabababaaaaaeaaaeaaaaaaaeaaaaaaaaaeaaaaqgqcqbaaqgqcqbaaqgqcqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaababababababababalalgygygykigygygygygyalalababababababababababababababababababababababababuyuyuyuyuyvewkveveveqjqjqjabalaaaeaaaeaeaaaaaeaaaaaaaaaaaaaaqgqcqbaaqgqcqbaaqgqcqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLababababqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalaeaeaeaeaeaeaeaeaeaeaealalalalabababababalalgygyqqjsjsqngygygyalalababababababalalalababababababababababababababuyvbuZEqvJEpuVEoxnxbuOuOqjalalxyaeaaaeaaaaaaaeaeaeaeaeaeaeaeqgqcqbaeqgqcqbaeqgqcqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLababababqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalsHsHsHsHsHsHsHsHsHsHsHsHsHsHalalalalababababalgygygygygykigygygygyalalabababalalalgyalababababababababababababababuyuQuRxDuTuUuAuPuNuMuPxLypxMxMiYaeaaaaaaaaaaaeaaaaaeaaaaaaaaqgqcqbaaqgqcqbaaqgqcqbaaaeaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaealalabababababalalgygygygyqqjsjsqngygyalabalalalgygygyalababababababababababababababuyuzuwuxuFuGuAuBuKuJuIuHqjuLuLuLuLuLrMrLrLrNrtrMrNrtaaaaaaaaqgqcqbaaqgqcqbaaqgqcqbaaqaqaqaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalgysMgygykigygyalalalgygygygygypzpzpzpzabababababababvMvMvMvMuywJuwwKwHwIEBuPwFwEuIwGvewBwDyqwywxwAwzshwawwwvECrMrLrNaaaaaewLaeaaaewLaeaaaewLaeaaaeaaqaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLababababababababqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaababababababababababalalmRgygykigygygygygygygygygygyAwwuwtpzabababababababvMvXvVvWuyvUuwvTvRvSuAuPwjwiuPwhvewgwfwewdwcwbtEshwavZvYxlxmzoxqxewlsNsNsNsNsNsNsNsNsNsNwrwqwsaeqaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababqLqLabqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaababababababababababababalalgyqqjsqngygygygygygygygyAwAevQpzababrtrtrtrtabvMvNvOztuyAfvIAyuTvKuAvLvCvBuAvDvevEvGvFvwvvvgvxvzvysvvAEvrMrLrNaaaaaevuaeaaaevuaeaaaevuaeaaaeaaqaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaababababababababaaaaaaaaaaaaaaabababababababababababababalgygygyqygygygygygygygygyAwAeACrtrtrtrtviAWrtrtrtrtwnrtrtrGrGrGrGvhrNrGwRrGvhrNrGvsvrrGwpEtvlvkvpvorGvnEsrtaaaaaaaaqgrgqbaaqgrgqbaaqgrgqbaaqaqaqaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaabababababababababababababalalalrJqzrigygygygygygygypBAzuDuvvPsxulwosJBawCwmsDsFsGtdtetctfsYtctctctrtqtctcxCtktntmtAzgtDtCtvtuBbtwtEtFaaaeaaaaqgrgqbaaqgrgqbaaqgrgqbaaaeaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaabababababababababababababababalalAwrQrPrRrRrRrRrRrRrRrRrTswszBzsKsBuksdsdsdBLsoslsmstsdsdsssqsrsdsdvauYBMsdscsbsarZskvdrZsishshtYsQsusvaeaeaeaeqgrgqbaeqgrgqbaeqgrgqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaabababababaaaaaaaaaaaaabababababababababababababababababalalpBqApCgygygygygygygyrJsCrurtrtrtrtrtrtrtrtrtrwrzrArErzrFrGsnrGrKrtrtrtrtrtrtrtrtrtrtrtrMrLrLrNrtspsgrtaaaaaeaaqgrgqbaaqgrgqbaaqgrgqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLababababababababqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababalalalalgyqygygygygygygygygyAwowowalabababababababqDrlrjrkrorprmrnrrrsrqqDababababababababababaaaaaaaarcrhrbrcaaaaaeaaqgrgqbaaqgrgqbaaqgrgqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLabqLababababqLqLabababqLqLqLqLqLababababababababqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababalalalalalalgyqygygygygygygygygyAwumalalabababababababqDrlurusuqqQqQqQunuoupqDababababababababababaaaaaaaauuutvquuaeaeaeaeqgrgqbaeqgrgqbaeqgrgqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababalgygygygygygyqygygygygygygygygyAwumalababababababababqDrlujuhuhuiucuguaubDdqDababababababababababaaaaaaaaCQvfvjrtvmaaEfaaqgrgqbaaqgrgqbaaqgrgqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababalgypZjsjsjsjsragyalalgygygygyalalalalababababababababqDrltXqQqQqQtTtUtVtWCgqDabababababababababaaaaaaaaqBqBqBqBqBqBqBaaaaqgrgqbaaqgrgqbaaqgrgqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLabababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababababababababababababababalgykigygygygysLgyalalalalalalalabababababababababababqDtStOtJtJBZtHtItMtNtLqDababababababababaaaaaaaaaaqBqBqBqBqBqBqBaaaaqgrgqbaeqgrgqbaeqgrgqbaeqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLababababababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababababababababababalgykigyalalalmRalalabababababababababababababababababqDqGqIqHqQqDqSqRqDqJqKqDabababababababaaaaaaaaaaaaqBqBqBqBqBqBqBaaaaqgqEqbaaqgqEqbaaqgqEqbaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLababababababababqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaababababababababababababababalgykigyalalalalabababababababababababababababababababqDqVqUqTqQqDClqYqDqXCrqDababababababaaaaaaaaaaaaaaqBqBqBqBqBqBqBaaaaaaaeaaaaaaaeaaaaaaaeaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLababababababababqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLabababababqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaabababababababababababababalgykigyalalalababababababababababababababababababababqDqDqDqDqDqDCBrYqDsfCRqDababababaaaaaaaaaaaaaaaaaaqBqBqBqBqBqBqBaatKqaqaqaqaqaqaqaqaqaqaqaqaqaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLababababababqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaababababababababababalalgykigyalalababababababababababababababababababababababababababqDqDqDqDqDqDqDababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLababababqLabqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalgygykigyalalabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLabababqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaababababababababalgygykigyalabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLababababqLqLqLqLababababababqLqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababalalgypZragyalabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLababababqLqLqLababababababqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababalgygyqygygyalabababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLabababqLqLqLabababqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababmRsErJqzrigyalababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababalgypBqApCgyalababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLalalalqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababababababababalgygyqygygyalabababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLalalalalqLqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalaeaeaeaeaeaeaeaeaeaealalabababababababalalgyqygyalalalababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLabababqLqLqLqLqLqLgygyalalqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalsNsNsNsNsNsNsNsNsNalalalabababababababalalgyqygyalalalababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLabababqLqLqLqLqLqLgygygyalqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalaeaeaeaeaealalaeaeaealalabababababababababalgyqygyalalalabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLabababababqLqLqLqLgygygygyalalalalqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaalalalalaaaaaaababababababababababalalgyqygyalalalabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLababababababqLqLqLqLgygygygygyalalalqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaalalalalaaaaaaaaababababababababababalalgyqygyalalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLababqLqLqLqLqLqLqLababqLqLqLqLabababqLqLqLqLqLqLqLgygygygygyalalqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaalalaaaaaaaaaaabababababababababalalalgyqygyalalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLabababababababqLqLqLqLqLababqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLsOgysOgyalalalqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababalalalgyqygyalalabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLabababababababqLqLqLqLqLababqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLsPEnsPgyalqLqLqLqLabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalgyqygyalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLababababababababqLqLqLqLqLabababqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsTqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalgyqygyalalababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLababababababqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLabqLqLqLqLqLqLqLqLqLqLqLqLqLsRsSsUqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalgyqygyalabababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLababqLqLqLqLqLqLqLqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLgygyqwqCsVsWsWsWsWsWsWsXsSsUqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababalalalalgyqynDmRababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababqLqLqLqLqLqLqLqLqLqLgygygygyEnsZsZsZsZsZsZsZtatbsUqLqLqLqLqLqLababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababalalalalgyqygyalabababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLalgygygyqwtgrerererererethsStitjqLqLqLqLqLalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalgyqygyalabababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLabababqLabababqLqLqLqLqLqLalalalgygygygyqLqLqLqLqLqLsRsSsUqLqLqLalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFtotpabziziziziziziabababababababaaaaaaaaaaaaaaaaaaaaaaaaababababababababababalalalgyqygyalalababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLababqLqLqLqLqLqLqLqLqLqLababalalgygygyqLqLqLqLqLqLqLsRsSsUqLgyalalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababtstpttabziDwEmziDyziabababababababaaaaaaaaaaaaaaaaaaaaaaabababababababababababalalalgyqygyalalalalabababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababalalalgygyqLqLqLqLqLqLqLtxsSsUgygyalalalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFmRabzizMzLDADBziabababababababaaaaaaaaaaaaaaaaaaaaabababababababababababababalalgyqygygyalalalalalabababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLqLqLsOEnsOgygyalalalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababtBababziziziziDzzialalalalmRalalaaaaaaaaaaaaaaaaaaaaaaababababababababababababalalgyqygygygyalalalalalababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLgygysPgysPgygygygygygyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababpIababziDwEyziArDFgygygygytGgyalalaaaaaaaaaaaaaaaaaaaaababababababababababababalalgyqygygygygyalalalalalalababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLababababababqLqLqLqLqLqLqLqLqLqLabababababqLqLqLqLqLqLqLqLqLgygygygygygygygyDEDEDEgyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababpIababzizMzLDDzJDCgygygygygygygygygyaaaaaaaaaaaaaaaaaaaaababababababkDmRmRmRmRmRgygyqygygygygygygygyalabalalabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLababababababababqLqLqLqLqLqLqLababababababqLqLqLqLqLqLqLqLqLgygygygygygygygyDVDUDTgyalalalababababababababababababababababababababababababababababababalalalalalalalababababababababababababababababababziDSziziziziziziArDRgygygygygygygygygygygyaaaaaaaaaaaaaaaaaaabababababmRtPsCtQtQtRgyrJqzrigygygygygygygyadabalababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLababababababqLqLqLqLqLqLqLababababababqLqLqLqLalgyzyzyzyzyzyzyDPDQDOzyzyzyzyzygygygyalabababababababababababababababababababababababababababababalalalalalalalalalalalalabababababababababababziziziziDLDMDNziDwEzziDzzixhxhDJCcCdxhgygygygygygyaaaaaaaaaaaaaaaaaaabababalmRudowueueufgyAwDIrPDHAjAjAjAkgygygygygyalabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLababababababqLqLqLqLqLqLqLabababababqLqLalalalgyzyzxzqzpzszrzuDazwzvznErzlzmsCsCrialalalalabababababababababababababababababababababababababalalalalalalalalalalalalalalalalalabababababababzizhzkzjzIzHzGzizMzLzKzJzizPzOzNzRzNzQgygygygygygygyaaaaaaaaaaaaaaaaaaalalalmRuCuDuEuEpCgyAwzBzAzFzEzAzAzzgygygygygyalababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLabababqLqLqLqLqLqLqLqLabababqLqLabalalalgyzyAdzYAbzZAJBfBeBeBdzXAcAAAIzVzWufalalalalalalabababababababababababababababababababababalalalalalalalalalalalalalalalalalalalalababababababzizTzkzSAoAnAqziziziziArzizPAsAsAuAtAvgygygygygygygyaaaaaaaaaaaaaaaaaagygygygygygygygygygypBzBAgAgAgAizAAlAmAjAkgynDmRalabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLabababqLqLqLqLqLqLqLqLqLqLqLqLqLabalalalgyzyAKAHBnBFBEBkAEAGAFznBgAxEuxvBhufalalalalalalalalalabababababababababababababababababalalalmRalalalalalalalalalalalalalalalalalalalalabababziABADEwASARAQAPAOANAMALzizPAsExAVAUATgygygygygygyaaaaaaaaaaaaaaaaaaaaaaaagygygygygywNwNyKxQzBEAAZAYEEzAzAzAzAAXgygygyalalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLababalalalgyzyBjBiBIzsBHBGzYBczyzyzyzyzyzyBhufgygygygygygygyalalalalabababababababababababababababalalgytGgygygygygygygygyrJrigygygygygygyalalalalalababziziziziziziziBmBlBJBmBlzixhxhxhBKxhxhxhBoBpgygyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagygyxOxQBqBxBwBvBuBuBtBsBrEQBAByAXgygygymQalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLabababalalgyzyBBBDBCzZzYERzYzYESBXBYBRBVBNBQqpjsjsjsjsjsqngyalalalalalalababababababababababababalalalgypZjsjsjsjsjsjsjsjsqoqpjsjsjsjsqngyalalalalalabababababxhCoCnCmAsAsCpAsAsCjCiAsChAVETCkCkCeCfCcCdEGEFEFEFEFEFEFEFEFEFEFEFEFEFEFyKycCaCbxPBTBSCPBUBWBWDfCTBOBPCxCDgygygymQalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLabababalalgyzyzyzyzyzyzyzyzyzyzyCqzyzyzyzyowufgygygygygykigygygygyalalalalababababababababababalalgygygykigygygygygygygygypBpCgygygygykigyalalalalalalalalalabxhxhxhxhCLCNCMCGCGCGCFCGCGCICHCKCJCODlCGDlCyCyCyCyCyCyCyCyCyCyCyCyCyCyCyDgCzDgCACzCtxPCsEUCwCvCuBrDjCEEVCCsCsCrigyalalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLabababalalgygygygygygygygygygygyAwEWAhowowowufgysMgygygyqqjsjsqngyalalalalababababababababababalgygypZjspYgygygygyalgygysMgygygygygygykigyalalalalalalalalalalalalalxhCZCYAsAsAsAsCXAsCWCVCUDmAsEXCSCcCdEHEHEHEHEHEHEHEHEHEHEHEHEHEHEIyKycyMDcxPDbxPzBzAzAzAzAzAzAzAzAxXuDxJpCqFmQalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababalalalalalalalalalgygygypBuDuDuDuDDeApalmRalalgygygygykigyalalalalalabababababalalalalalgypZpYgygygyalalalalalalmRalalalalalgykigyalalalalalalmRalalalalalwVwVDiDuDiwXwXDhDtwXwXwXxIDsxIxhDkgygygyaaaaaaaaaeaaaaaaaeaaaaaaaaaaaeaayTxQxPDqDpDoDnxixixjDvDKEgDxDGDrDrDrqFgyalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababalalalalalalalalalalalalabalalalalalgykigygygygygyalalalalalalalalalalalgykigygyalalalabababababalalalalalalgykigygygyrJrigygytGgygyalalalwVwUwTwZwYwXwWxdxcFaEZwXxgxfxtxhgygygygygygyaaaaaeaaaaaaEDaeaeaeaeaeEDaeaewNwMwPFbwQwQwQwQxrwQwSwQwQxsqFqFqFqFgyalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababalalalalgyqqjsjsjsqngygygygygygygygygygygygygykigyalalabababababababalalalalalalgyqqjsjsjsqoqpjsjsjsqngyalalalwVxwxuFcxxwXxzxBxAFeFdwXxExGxFxhgygygygygygyaeaeaeaeaeaeaeyIyIyIyIyIaeaaaawNxkxoxPxWxRykxixixpxixjwQxKgygygygyalalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababalalalgygygygygyqqqngygyrJrigygypZjsjsjsjsjspYgyalabababababababababalalalalalgygygygygypBpCgygygykigygygygywVwVwVwVwVwXxHxNxAFgFfwXFhymxIxhgygygygygygyaaaaaeaaaaaaaeyIyIyIyIyIaeaaxOxQxPxSFiwQwQwQwQwQwQxTxUwQxKgygygyalalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababalalalgysMgygyqqjsjsqoqpjsjspYgygygygygygygyalabababababababababababalalalalalalalgygygygyalgyqqjsjsqngygygygygygywXEYFkDhwXwXwXowysufyZgygygygygyaaaaaaaeaaaaaaaeyIyIyIyIyIydycybyaxZylytyjyiyhygyfyexYxUwQxKgygygyalalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababalalmRalgygygygypBpCgygygygysMgyalalalalalababababababababababababababalalalalalalalalalgygygygykigygygygygygygygyyAowowowowowowufgygygygygygyaeaeaeaeaeaeaeaeyIyIyIyIyIywyEyxyJyvynxPxPxPyuyoyrFjyyyzwQxKgygygyalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababalalalalalalalalalalalmRalalabababababababababababababababababababababababababalalalalalgykigygygygygygygygyyNuDuDuDuDuDuDpCgygygygygygygyaaaaaaaaaaaaaeyIyIyIyIyIyKycyMyLxPyFyDyDyDzDyHyHyGyByCwQxKgygyzCmRabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababalalalalalalalalalalalababababababababababababababababababababababababababababalalalalgyqqjsjsjsjsjsjsjsjsyOjsjsjsjsjsjsjsjsyPgygygygygygyaaaaaaaaaaaeyIyIyIyIyIzUaayTxQyUySxPxPxPyRyQyryrxTyVwQxKgygygyalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababalalalalalababababababababababababababababababababababababababababababababalalalalgygygygygygygygygygygygygygygygygygygyqygyrJrigygygypzyWaaaaaaEDyIyIyIyIyIEDaaaaaazfzeytzdzczbzayYyXyyxUwQxKgygygyalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalalmRsEDYDWDZDXDWDWDWEcEbEaEaEaEaEaEaEaEaEaEaEaEaENEOEPxPElxPEjEkEhEiEeEdwQxKgyalalalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalgygygypBpCgygygypzyWaeaaaaaaaaaaaaaaaaaaaaaaEMzfwNyKxQwNwQwQwQwQwQwQwQxKgyalabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalalalalalalgygygyaeaaaaaaaaaaaaaaaaaaaaaaEKELrRrRrRrRrRrRrRrRrRrRrREJgyalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalgysMgygyaaaaaaaaaaaaaaaaaaaaaaaapzalalalalalalalalalalalalalalababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalmRalalaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalalalalalalabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalababalalalaaaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalalalalalabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalabababalalalaaaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalalalalalabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalalalalabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaalalalalalalalalababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaalalalalababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaalalababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaalababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaaaaaAaaaaaaaAaaaaaaaaaaaAaaaaaaaAaaaaaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaAaAaAaaaaaaaAaAaAaAaAaAaAaaaaaaaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaAaAaAaaaaaAaAaAaAaAaAaAaAaAaaaaaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaAaAaAaaaaaAaAaAaAaAaAaAaAaAaaaaaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababaaaaaaaaababababababababababababababaaabababaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaabababaaaaaaaaabababababaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaAaAaAaAaAaAaAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa
+aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa
+aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalabalalalalababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalgygygygygygyalalalgygyalalalalalalalalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalalababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFgygygygygyacacacacacacacgygygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeabababababababababababababababababababababababababababababababababalgyqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeababababababababababababababababababababababababababababababalalalgyqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeaeabababababababababababababababababababababababababababababalgygygyqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeaeaeababababababababababababababababababababababababababababalgygygyqFqFgygygygygyacacacacacacacgygygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeaeababababababababababababababababababababababababababababalgygygyqFqFgygygygygyacacacacacacacgygygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeaeababababababababababababababababababababababababababababalgygygyqFqFgygygygyacacacacacacacacacgygygygyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaebaaeababbTababababababababababababababababababababababababababalgygygyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaebbaeababbTababiLiKiKiJababababababababababababababababababababalgygygyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaJaJaJaJaJabbbababadbTadadiMeOeOdHababababababaeabababababababababababababalgygygyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaJiNiOjoaJaJbcaJaJaJaGaGaGaGiQiRaGaGaGaGababaeaeabababababababababababababalalalgyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaJjbbiiUiVjCbpaKaKiSaiiZjfaibXeOaijaiZaGabaeaeaeaeababababababababababababalgyalgyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaAaAaAaAjpjhiTjrjgjdjdjdccaikrjmjnjkjljijjkdaGaeaeaeaeaeababababababababababababalgyalgyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaAaAaNaOaAaJaJaJaJaKaKaLaLaMaiaiaiaiaIaHaiaiaiaGazazazaeaeababababababababababababalgygygyqFqFgyacacacacacacacacacacacacacacacgyqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababahagafababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaAaBaCaDaEaFasaraqapawavauataiakajaiaoanaiamayaUaxamazaeaeaeabababababababababababalalgygyqFqFacacacacacacacacacacacacacacacacacqFqFgyalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababbkbmbldkabababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyababababababaAaWbocVaAbnbAbgbHbAbybxaubzaibubwbvbrbqbtbsbjbBbhfJazaeaeaeababababababababababababalgygyqFqFacacacacacacacacacacacacacacacacacqFqFalalababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaPaRaQaSdkabababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygygygygyababababaAaWaTdsaAaVbgbfbebdaJbcaJdzaGaGaGaGaZaYaiaXbjbhbhdvazaeaeaeababababababababababababalgygyqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababetdldleubWbVbldkabababababababababababababababababababababababababababababababababababababababababababababababababababadadgyexexexexexexexexexadadabaAaWcmcnaAclcZcNcabZgxcbcecdcgcfchaGcjcickamamiXamhgazhpaeabababababababababababababalalalqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdQdRdSdTbDbCbEdkdkababababababababababababababababababababababababababababababababababababababababababababababababababgygygyexexexexexexexexfdaGaGaGaGaGaGbUaGaGaGaGbFaGaGbIbQbGbLbKbJaGbPbObNbMbSbYbRhVjeiYalabababababababababababababababalqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababetdldlfycPbVcrabababababababababababababababababababababababababababababababababababababababababababababababababababalgygygygygyfxfxfxfxfxfxfxaicWcXcUjBcScTcQcRdcdbdejIaGcYdadEdidhdjaGdgdfbNbMbMbMbMbMazalalabababababaeabababababababababalqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkcocqcpcrabababababababababababababababababababababababababababababababababababababababababababababababababababadadgygygygyfxfxfxfxfxfxfxcscwcxcyctctcucvctcycFcEcDcCcBcAczcMcMcLcKcJcIcHcGcOdDddazazalalalabababaeaeabaeaeabababababalalqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkgtemelekcrabababababababababababababababababababababababababababababababababababababababababababababababababababadgygygygygyfxfxfxfxfxfxfxejcwdAdBdCeifFdFdGdYaGeadZaGebedecehdNjQaGdVdUaidWdWdWdWeeefeggzgzaeaeaeaeaeaeaeaeabababababalgyqFqFacacacacacacacacacacacacacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkdLdKdMcrdJdIcrcrcrcrabababababababababababababababababababababababababababababababababababababababababababababababalgygygygygygyfxfxfxfxfxfxfxdHcwdAdBdCdOdPdFdGdyaGdxdwaGkaaGaGaGaGcCaGkoduaidtdodpdmdndqdrhbhbaeaeaeaeaeaeaegzgzgzgzalalalgyqFqFacacacacacgyacacacacacgyacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkkEfifEfHgVfGafbCeYcrfbfacrabababababababababababababababababababababababababababababababababababababababababababababababalgygygygygygyfxfxfxfxfxfxfxaifkflfjdCfhdGdFfgfvaGfzfwfsfrfuftfoaGeLeKfmeRaifnfAfBfCfDhbgzgzgzaeaeaeaeaeaeaegzqFqFqFqFqFqFqFqFqFacacacacacgyacacacacacgyacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkfcfefiffeUeTeWeVeYeXfaeZfbcrabababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyeAereseyezeresevewepeqeneneneoeoeoeoeoeSeReQePeOeNeMaGfqfpeJeIaieHeFeGeDeEeCaGaGeBaeaeaeaeaeaeaegzqFqFqFqFqFqFqFqFqFacacacacacgygygygygygygyacacacacacqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababablrfcgvfcfEfEdJheeUcrekhdcrfahccrabababababababababababababababababababababababababababababababababababababababababababababababalgygygygygygMgPgQgNgOgTgQgRgSgWgXgUhahfeogYgZgweoloeRgBgAgDgCgEaGgGgFgIgHaiaigJaiaiaieReRgKeBeBeBeBgLeBeBeBeBqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkgugsfElAlTfEcpgqeTgrgpgocrcrcrcrcrcrababababababababababababababababababababababababababababababababababababababababababababababgygygygygygngbgcgcgcgcgdgegfggghgigjgkeoglgmfVfUfTeIfXfWeReRfYfweReReJeIgafZfKfLfIlyeReRfMeBfOfPeBfNfRfSfQeBqFqFqFalalalgyqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalabababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkiCiBhRfElTiDffiGeUiFcriIiHcriWhKbCiEcrabababababababababababababababababababababababababababababababababababababababababababababababgygygygygngQgQgQhWgQlzhUgQibgXhZiahYeogmhXihigijiiidicifieillQimmrikieieieirisitiuinioipiqixiyiziAivmFjceBqFqFqFalabalalalgygygygygygygygygygygygygygyalgygygygyalalabababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkdkdkababcrfGhLhPhQhRhThNeTiWafbChKcriWhLhKhMcrababababababababababababababababababababababababababababababababababalalalalalalababababababkDmdgygygyhrgQgQhihjhyiwgRhhhnhopdhqhkeohlhmhHeoeohGhGhFhuhEhxhuhJhuhIhwhwhwhwhxhuhvhththseBhChDeBhBhzhAiPeBqFqFqFalabababalalalalalalalalalalalalalalalalalalalalalababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkcrcrcrcrcrcrgVeUnUhLeUgqmkiWiWeVeYiIcriWcpeknVcrababababababababababababababababababababababababababababababababalalalgygygygyalalalababsEgygygygygygynwereseynwnwnwnwnwpMnwnununueopJeonSnTnRhGoTsjhunMnKnLnInJnGoikmkmkmnFhunEnChtnBlulululupHnznyfQeBqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababdkcrmPeUhRoNcriCnWiBcrgrcroGoHoFcrbClLiFmOcpeleUcrabababababababababababababababababababababababababababababababalalgygygygygygygygyalalabgygygygygygygygygyexomkBohogoflnoeodpLqOoanZnYqhoqorosrIrfrvhuopokollDkmnGoEojkmkmmghuoCozhtoBoAovoulueBeBeBeBeBqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrmPcphRcpmUlLhLmShLmTbCbCmNeYbCcpcpcreUmOeUeUcrababababababababababababababababababababababababababababababalalgygygygygygygygygygyalmRgygygygygygygygygygyomkBmLllmMlOmImHmJkBkBllmKeomCmDhGhGnPnXhumEmxmbmvmwmAocnAnHmBnfhumqmuhtmtmpmpmoluababalalqFqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrlMhReUcpnscpnrdJcpnqmTnrhKntcpkNekcrlIcpgobCcrabababababababababababababababababababababababababababababalalqFqFqFqFqFgygygygygygynDnjgyexgygygygygygygygyomkBmLllnppGnmnlllnkkBnneoeonNnOhGoXotoKhupPmVmWmXnQonoomEobmGquhungnhhtnineneneluabalalqFqFqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrlMlNeUfGcrkPcrlJlKcrcpcrlJlKcreUlLcrdIlHiFlIcrabababababababababababababababababababababababababababababaloMqFqFmRqFqFqFgygygygygygygygyexgygygygygygygygyomkBlmllqWlnmzjPltmskBlpeoowoxoyhGnamYmZhulxlqlGlDlElBlCkmnbkmkmhulwlvhtlululululualalqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrcrcrcrcrcrkPcrgokNcphTmmeUhTeUgoffcrmnhSnxmjcrabababababababababababababababababababababababababababababalpjqFqFqFqFqFqFqFgygygygygygygyexgygygygygygygyexomkBqZlRlPlOnojPndmykBlSeooYoxoyhGnvhGnchulWmbmclZlFlYmalqlqmhmghumimfhtababababalalqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrkPcrkNekkOhTkMcphKcreUekcrhOkJkJkKcradababababababababababababababababababababababababababababalqFqFqFqFpoqFqFqFqFgygygygygygyexgygygygygygyexexomkBkBkCkFkBkBkGlhkGkBkIeoowpBrVhGkpsekshukVkvkwkYkukzkAlckyknkmhuhththtabababalalqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrkPcrhTcpbVljeUekgocrkPcrcriWeUkJkKlkadababababababababababababababababababababababababababababalpQprqFpTpQpUqFqFqFqFgygygygygyexgygygygygyexexexomqFqFqdqeqfkBmllglfkBlieoqFqapVhGkSkTkTkUlUkWkXkUlVkZlalblXleldlbabababababalalqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrkPcrcrcrcrcrcrcrcrcrkPcrpSbCeUbCkKpiadababababababababababababababababababababababababababababalpQqFqFqFpQpUqFqFqFqFqFqFqFqwqCqbqcqcqcqcqcqcqgqwqCqFqFqFqFqFkBplpnsIkBpkqFqFqFqFhGpApxpykUpwpupvkUptpqpslbpppEpDlbababababalalqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrkPkPkPkPkPkPkPkPkPkPkPcriWeUiFeUiEcradababababababababababababababababababababababababababababalqFqFqFqFqBqxqFqFqFqFqFqFqFqFrWqPqPqPqPqPqPqPqPrWqFqFqFqFqFqFkBtlrUkGkBpFriqFqFqFpmpXkTkTkUpWpOoOkUpRuSoRlbpNpKphlbabababalalqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababcrcrcrcrcrcrcrcrcrcrcrcrcrcrmjrOoLcrcradababababababababababababababababababababababababababababalqFqFqFqFqFqFqFqFqFqFqFqFqFqwqCqEqLqLqLqLqLqLqLqwqCqFqFqFqFqFqMpBrSpCvcpcpeoVoVoVxVoUsyoZkUpbtyoPkUoWtZoSlboQuWpalbababalalqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadadcrkJkJeUcradadababababababababababababababababababababababababababababalpQprqFqFqFqFqFqFqFqFgygygygygygygygygygyalalalalalqFqFqFqFqFqFqFqFqFpBpgpCqFqFqFhGhGhGhGkUkUkUkUkUpfpfpflblblblblbabalalqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadadcroJoDoJcradabababababababababababababababababababababababababababababalpQqFqFqFqFqFqFqFqFgygygygygygygygygygygyalalalababababalalalalalalalqFjHqFgyalalalababababababababababababababababalalqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadcroIrOmjcradabababababababababababababababababababababababababababababalqFqNrerdqFqFqFqFgyalalalgygygygygygygygygyababababababababalalalalalqFjHqFgyalalalalalalalalalalalalalalalalalalalalqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababadadadrBrCrDadadababababababababababababababababababababababababababababababqFqFqFmRqFqFqFalalalababgygygygygygygygygyababababababababababalalalqFjHqFgyqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababrgrgrgqFqFalalalalababgygygygygygygygygyabababababababababababalalqFjHqFgyqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyababgygygygyababababababababababalalqFjqkhqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFalalabababababababababababdXabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyabababgygygyababababababababababalalqFqFjHqFalalalalalalalalalalalalalalalalalalalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyababgygygyababababababababababalalalqFjHqFalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygygygygyababababababababababalalalqFjHqFgygygyrHjFjFjFjFjFjFjFjFjFjFjFjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygygygyababababababababababalalalqFjHqFgygygyrJvtkQjYjXkgkfkelsjFkLkbjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyababababababababababalalalqFkHjSjSjSoVjVjOjNvHmekqjZkxktjWjRjTjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyabgygygyabababababababababababalalqFkiqFqFqFqFjFjFjFjFjFjFjKjJwOjFjMjLjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqqjsjujtjtjvjxjwjzjyxajAjUkcjEjDjGjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqFqFkiqFgyjFjFjFjFkljFjFjFjFjFjFjFjFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFkiqFgygygysAkRsCsCalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalrJkkrigygygygygygygyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalpBkjpCgygygygygygygyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFkiqFgygygygygygyalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFkiqFgyalmQalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFkiqFgyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFkiqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFkiqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFkiqFgyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFkiqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqqqnqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqFkiqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalmRsEqFkiqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgyqFkiqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygyqFkiqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygyqFkiqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygyqFkiqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygyrJkkrigyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygypBkjpCgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgyqFkiqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFpZpYqFalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFkiqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFkiqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgyqFkirymRabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFpZpYqFalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalgyqFkiqFqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgygygyqFkiqFgygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyqFkiqFgygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyqFkiqFgygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyqFkiqFgygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyqFkiqFgygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygygygygygygygygygygygygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyqFkiqFgygyalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgysHsHsHsHsHsHsHsHsHsHsHsHsHsHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyqFkiqFgygygyalalalalalababababababababababababababababababababababababababababababababababababababadadadadababababababababababexexgyababgygygygygyexgygygyexgygygyexgygysHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyqFkiqFgygygygygygygyalalababababababababababababababababababababababababababababababababababababababababadgygygygygygygygygygygyexgyababgygygygysRsNsTgysRsNsTgysRsNsTgysHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyqFkiqFrJriqFqFqFqFqFgyalababababababababababababababababababababababababababababababababababababababababababexexexexexexexexexexexexexexexexexexsRsUsTexsRsUsTexsRsUsTexsHgygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyqFqqjsqoqpjsjsjsqnqFgyalalalababababababababababababababababababababababababababababababababqjqjqjqjqjqjqjabgygygygyexgygygygygyexgygyexexgygygysRsUsTgysRsUsTgysRsUsTgysHgygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyqFqFqFpBpCqFqFqFkiqFqFqFgyalababababababababababababababababababababababababababababababababqjqkqmqlrXqiqjabababababexabababexgyexgyexexexexgygysRsUsTgysRsUsTgysRsUsTgysHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgysLgygygygygygygyqFqqjsqnqFgyalalabababababababababababababababababababababababababababababababqjqkqvtzqjqjqjababgygygyexexexexexexexexexgygyexexgysRsUsTexsRsUsTexsRsUsTexsHgygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalmRalalalalalalgyqFqFqFkiqFgygyalalalabababababababababababababababababababababababababababababqjqkqtqsrXqrqjabababababexabexababgyexgygygygyexgygysRsUsTgysRsUsTgysRsUsTgysHgygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgygyqFkiqFqFqFqFgyalalababababababababababababababababababababababababuyuyuyuyuyvewkveveveqjqjqjabalabexabexexgygyexgygygygygygygysRsUsTgysRsUsTgysRsUsTgysHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgyqFqqjsjsqnqFgygyalalababababababalalalababababababababababababababuyvbuZEqvJEpuVEoxnvKuOuOqjalalxyexabexgygygyexexexexexexexexsRsUsTexsRsUsTexsRsUsTexsHgygygyababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFqFqFqFkiqFqFqFqFalalabababalalalgyalababababababababababababababuyuQuRxDuTuUuAuPuNuMuPxLypxMxMiYexababgygygyexgygyexgygygygysRsUsTgysRsUsTgysRsUsTgyexgygygyababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalgygygyqFqqjsjsqnqFgyalabalalalgygygyalababababababababababababababuyuzuwrxuFuGuAuBuKuJuIuHqjuLuLuLuLuLrMrLrLrNrtrMrNrtgygygygysRsUsTgysRsUsTgysRsUsTgysHsHsHgyababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFsVqFqFkiqFgyalalalgygygygygypzpzpzpzabababababababvMvMvMvMuywJuwwtwHwIEBuPwKwFuIwGvewBwDyqwywxwAwzshwawwwvECrMrLrNgygysXsWexgyexsWexgyexsWexgyexgysHgyababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalmRgyqFkiqFqFqFgygygygygygygyAwwuwEpzabababababababvMvXvVvWuyvUuwuxvRvTuAuPwjwiuPwhvewgwfwewdwcwbtEshwavZvYxlxmzoxqxethtititititititititititxtjtKexsHgyababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqqjsqnqFgygygygygygygyAwAevSpzababrtrtrtrtabvMvNvOztuyAfvIAyuTvQuAvLvCvBuAvDvevEvGvFvwvvvgvxvzvysvqGEvrMrLrNgygyexuXexgyexuXexgyexuXexgyexgysHgyababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFqFqyqFgygygygygygygyAwAeACrtrtrtrtviAWrtrtrtrtwnrtrtrGrGrGrGvhrNrGwRrGvhrNrGvsvrrGwpEtvlvkvpvorGqHEsrtgygygygysRvmsTgysRvmsTgysRvmsTgysHsHsHgyababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalrJqzriqFqFqFqFqFqFqFpBAzuDuvvPsxulwosJBawCwmsDsFsGtdtetctfsYtctctctrtqtctcxCtktntmtAzgtDtCtvtuBbsptEtFgyexgygysRvmsTgysRvmsTgysRvmsTgyexgygygyababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalAwrQrPrRrRrRrRrRrRrRrRrTswszBzsKsBuksdsdsdBLsoslsmstsdsdsssqsrsdsdvauYBMsdscsbsarZskvdrZsishshtYsQsusvexexexexsRvmsTexsRvmsTexsRvmsTexsHgygygyababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalpBqApCqFqFqFqFqFqFqFrJsCrurtrtrtrtrtrtrtrtrtrwrzrArErzrFrGsnrGrKrtrtrtrtrtrtrtrtrtrtrtrMrLrLrNrttwsgrtgygyexgysRvmsTgysRvmsTgysRvmsTgysHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyqFgygygygygygygyAwowowalabababababababqDrlrjrkrorprmrnrrrsrqqDabababababababadadadgygygygyrcrhrbrcgygyexgysRvmsTgysRvmsTgysRvmsTgysHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalqFqyqFgygygygygygygyAwumalalabababababababqDrlurusuqqQqQqQunuoupqDababababababababadadgygygygyuuutvquuexexexexsRvmsTexsRvmsTexsRvmsTexsHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFqFqFqFqFqyqFgygygygygygygyAwumalababababababababqDrlujuhuhuiucuguaubDdqDabababababababababadgygygygyCQvfvjrtvugywlgysRvmsTgysRvmsTgysRvmsTgysHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFpZjsjsjsjsraqFalalgygygygyalalalalababababababababqDrltXqQqQqQtTtPtVtRCgqDababababababababababgygygywqwqwqwqwqwqwqgygysRvmsTgysRvmsTgysRvmsTgysHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFkiqFqFqFqFwrqFalalalalalalalabababababababababababqDtStOtJtJBZtHtItMtNtLqDababababababababababgygygywqwqwqwqwqwqwqgygysRvmsTexsRvmsTexsRvmsTexsHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFkiqFalalalmRalalabababababababababababababababababqDtUqItWqQqDqSqRqDqJqKqDabababababababababgygygygywqwqwqwqwqwqwqgygysRwssTgysRwssTgysRwssTgysHgygyabababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFkiqFalalalalabababababababababababababababababababqDqVqUqTqQqDClqYqDqXCrqDabababababababababgygygygywqwqwqwqwqwqwqgygygyexgygygyexgygygyexgygysHgygyabababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFkiqFalalalababababababababababababababababababababqDqDqDqDqDqDCBrYqDsfCRqDababababababababababgygygywqwqwqwqwqwqwqgywLsHsHsHsHsHsHsHsHsHsHsHsHsHgygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFkiqFalalababababababababababababababababababababababababababqDqDqDqDqDqDqDababababababababababababgygygygygygygygygygygygygygygygygygygygygygygygygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFkiqFalalabababababababababababababababababababababababababababababababababababababababababababababgygygygygygyabgygygygygygygygygygygygygygygygygygyabababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqFkiqFalababababababababababababababababababababababababababababababababababababababababababababababababgygygyabababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFpZraqFalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFqyqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababmRsErJqzrigyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgypBqApCgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalgyqFqyqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqyqFalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqyqFalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygyalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalqFqyqFalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqyqFalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalqFqyqFalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFqyqFalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababsOgysOgyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFqyqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababsPEnsPgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababxbsSyIabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababxbsSyWabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyqFalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababgygyqwqCzCqcqcqcqcqcqczUsSyWabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyrymRabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababgygygygyEnsZsZsZsZsZsZsZtatbyWabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqyqFalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababalgygygyqwtgqLqLqLqLqLqLAasSEaexabababababalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFqyqFalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababalalalgygygygyababababababxbsSyWabababalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFtotpabziziziziziziabababababababababababababababababababababababababababababalalalqFqyqFalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababalgygygyabababababababxbsSyWabgyalalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababtstpttabziDwEmziDyziabababababababababababababababababababababababababababababalalalqFqyqFalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababalalgygyabababababababEfsSyWgygyalalalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFmRabzizMzLDADBziababababababababababababababababababababababababababababababalalqFqyqFgyalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababsOEnsOgygyalalalalalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababtBababziziziziDzzialalalalmRalalabababababababababababababababababababababababalalqFqyqFgygyalalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygysPqFsPgygygygygygyalalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababpIababziDwEyziArDFgygygygytGgyalalababababababababababababababababababababababalalqFqyqFgygygyalalalalalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygyqFqFqFqFqFDEDEDEqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababpIababzizMzLDDzJDCgygygygygygygygygyababababababababababababababababkDmRmRmRmRmRqFqFqyqFqFgygygygygyalabalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygyqFqFqFqFqFDVDUDTqFqFqFalababababababababababababababababababababababababababababababalalalalalalalababababababababababababababababababziDSziziziziziziArDRgygygygygygygygygygygyababababababababababababababmRvnsCtQtQvAqFrJqzriqFqFqFqFqFqFgyadabalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababalgyzyzyzyzyzyzyDPDQDOzyzyzyzyzyqFqFqFalabababababababababababababababababababababababababababababalalalalalalalalalalalalabababababababababababziziziziDLDMDNziDwEzziDzzixhxhDJCcCdxhgygygygygygyababababababababababababalmRudowueueufqFAwDIrPDHAjAjAjAkqFgygygygyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababalalalgyzyzxzqzpzszrzuDazwzvznErzlzmsCsCrialalalalabababababababababababababababababababababababababalalalalalalalalalalalalalalalalalabababababababzizhzkzjzIzHzGzizMzLzKzJzizPzOzNzRzNzQgygygygygygygyabalalabababalalalalalalmRuCuDuEuEpCqFAwzBzAzFzEzAzAzzqFqFqFqFgyalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababalalalgyzyAdzYAbzZAJBfBeBeBdyxAcAAAIzVzWufalalalalalalabababababababababababababababababababababalalalalalalalalalalalalalalalalalalalalababababababzizTzkzSAoAnAqziziziziArzizPAsAsAuAtAvgygygygygygygygygyalalalalalgygygygygygygygygygygygypBzBAgAgAgAizAAlAmAjAkqFnDmRalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababalalalgyzyAKAHBnBFBEBkAEAGAFznBgAxEuxvBhufalalalalalalalalalabababababababababababababababababalalalmRalalalalalalalalalalalalalalalalalalalalabababziABADEwASARAQAPAOANAMALzizPAsExAVAUATgygygygygygygygygygygygygygygygygygygygygygygywNwNyKxQzBEAAZAYEEzAzAzAzAAXqFgygyalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababalalalgyzyBjBiBIzsBHBGzYBczyzyzyzyzyzyBhufqFqFqFqFqFqFqFalalalalabababababababababababababababalalqFsAqFqFqFqFqFqFqFqFrJriqFqFqFqFqFqFalalalalalababziziziziziziziBmBlBJBmBlzixhxhxhBKxhxhxhBoBpgygygygygygygygygygygygygygygygygygygyxOxQBqBxBwBvBuBuBtBsBrEQBAByAXqFqFqFpjqFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababalalgyzyBBBDBCzZzYERzYzYESBXBYBRBVBNBQqpjsjsjsjsjsqnqFalalalalalalababababababababababababalalalqFpZjsjsjsjsjsjsjsjsqoqpjsjsjsjsqnqFalalalalalabababababxhCoCnCmAsAsCpAsAsCjCiAsChAVETCkCkCeCfCcCdqbqbqbqbqbqbqbqbqbqbqbqbqbqbqbyKycCaCbxPBTyGBSzXBUBUCPBWBOBPCxCDqFqFqFpjqFabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababalalgyzyzyzyzyzyzyzyzyzyzyCqzyzyzyzyowufqFqFqFqFqFkiqFqFqFqFalalalalababababababababababalalqFqFqFkiqFqFqFqFqFqFqFqFpBpCqFqFqFqFkiqFalalalalalalalalalabxhxhxhxhCLCNCMCGCGCGCFCGCGCICHCKCJCODlCTDlCyCyCyDfCyCyCyEGCyCyCyDfCyCyCyDgEIDgCACzCtxPCsEUCwCvCuBrDjCEEVCCsCsCriqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababalalgygygygygygygygygygygyAwEWAhowowowufgysMgygyqFqqjsjsqnqFalalalalababababababababababalqFqFpZjspYqFgygygyalgygysMgygygygygyqFkiqFalalalalalalalalalalalalalxhCZCYAsAsAsAsCXAsCWCVCUDmAsEXCSCcCdEDEDEDEDEDEDEDEDEDEDEDEDEDEFEFyKycyMDcxPDbxPzBzAzAzAzAzAzAzAzAxXuDxJpCqFpjalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalgygygypBuDuDuDuDDeApalmRalalqFqFqFqFkiqFalalalalalabababababalalalalalqFpZpYqFqFqFalalalalalalmRalalalalalqFkiqFalalalalalalmRalalalalalwVwVDiDuDiwXwXDhDtwXwXwXxIDsxIxhDkgygygygygygygyexgygygyexgygygygygzEHgzyTxQxPDqDpDoDnxixixjDvDKEgDxDGDrDrDrqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalabalalalalalqFkiqFqFqFqFgyalalalalalalalalalalalqFkiqFgyalalalabababababalalalalalalqFkiqFqFqFrJriqFqFsAqFqFalalalwVwUwTwZwYwXwWxdxcFaEZwXxgxfxtxhgygygygygygygygyexgygygyEKexexexexexEKEHEHwNwMwPFbwQwQwQwQxrwQwSwQwQxsqFqFqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalqFqqjsjsjsqnqFgygygygygyqFqFqFqFqFqFqFkiqFalalabababababababalalalalalalqFqqjsjsjsqoqpjsjsjsqnqFalalalwVxwxuFcxxwXxzxBxAFeFdwXxExGxFxhgygygygygygyexexexexexexexEMEMEMEMEMEHgzgzwNxkxoxPxWxRykxixixpxixjwQxKqFgzgzgzalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalqFqFqFqFqFqqqnqFqFrJriqFqFpZjsjsjsjsjspYqFalabababababababababalalalalalqFqFqFqFqFpBpCqFqFqFkiqFqFqFqFwVwVwVwVwVwXxHxNxAFgFfwXFhymxIxhgygygygygygygygyexgygygyexEMEMEMEMEMEHgzxOxQxPxSFiwQwQwQwQwQwQxTxUwQxKqFgzgzalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalgysMqFqFqqjsjsqoqpjsjspYqFqFqFqFqFqFqFalabababababababababababalalalalalalalgygygygyalqFqqjsjsqnqFgygygygygywXEYFkDhwXwXwXowysufyZgygygygygygygygyexgygygyexEMEMEMEMEMydycybyaxZylytyjyiyhygyfyexYxUwQxKqFgzgzalalabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalmRalqFqFqFqFpBpCqFqFqFqFsMgyalalalalalababababababababababababababalalalalalalalalalqFqFqFqFkiqFgygygygygygygyyAowowowowowowufgygygygygygyexexexexexexexexEMEMEMEMEMywyEFlyJyvynxPxPxPyuyoyrFjyyyzwQxKqFgzgzalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalmRalalabababababababababababababababababababababababababalalalalalqFkiqFqFqFqFqFqFqFqFyNuDuDuDuDuDuDpCqFqFgygygygygygygygygygygyexEMEMEMEMEMyKycyMyLxPyFyDyDyDzDyHyHFmyByCwQxKqFgzENmRababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalababababababababababababababababababababababababababababalalalalqFqqjsjsjsjsjsjsjsjsyOjsjsjsjsjsjsjsjsyPqFgygygygygygygygygygyexEMEMEMEMEMFngzyTxQyUySxPxPxPyRyQyryrxTyVwQxKqFgzgzalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalababababababababababababababababababababababababababababababababalalalalqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqyqFrJriqFqFqFpzgygygygyFoEMEMEMEMEMEKgzgzgzzfzeytzdzczbzayYyXyyxUwQxKqFgzgzalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalalmRFpDYDWDZDXDWDWDWEcEbEbEbEbEbEbEbEbEbEbEbEbEbFqEOEPxPElxPEjEkEhEiEeEdwQxKqFgzalalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalqFqFqFpBpCqFqFqFpzaldkabababababababababababFrzfwNyKxQwNwQwQwQwQwQwQwQxKqFgzababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalalalalalalalalgygygydkabababababababababababFsELrRrRrRrRrRrRrRrRrRrRrREJqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalFtalabababababababababababababpzqFqFqFqFqFqFqFqFqFqFqFqFqFalababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalalalalalababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalalababalalababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababalalalalalalalalalalalabababalababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFgygygygyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFqFgygygygygygyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFugygyFugygygyFugygygygygyFugygygyFugygyFugyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFugygygyFuFuFuFuFuFuFugygygyFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFugygyFuFuFuFuFuFuFuFuFugygyFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFugygyFuFuFuFuFuFuFuFuFugygyFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababqFqFFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygyFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyFuFuFuFuFuFuFuFuFuFuFuFuFugygygygygygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyFuFuFuFuFuFuFuFuFuFuFuFuFugygygygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygyFuFuFuFuFuFuFuFuFuFuFuFuFugygygygyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygyFuFuFuFuFuFuFuFuFuFuFuFuFugygyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyFuFuFuFuFuFuFuFuFugygygygyabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygyFuFuFuFuFuFuFugygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababgygygygygygygygygygygyababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaa
+aaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaa
+aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
diff --git a/maps/overmap/bearcat/bearcat.dmm b/maps/overmap/bearcat/bearcat.dmm
index be6541ec919..27ee41d46f3 100644
--- a/maps/overmap/bearcat/bearcat.dmm
+++ b/maps/overmap/bearcat/bearcat.dmm
@@ -8,9 +8,9 @@
"ah" = (/obj/machinery/computer/helm,/turf/simulated/floor/bluegrid,/area/ship/scrap/command)
"ai" = (/obj/machinery/computer/station_alert,/turf/simulated/floor/bluegrid,/area/ship/scrap/command)
"aj" = (/obj/effect/mapinfo/ship/bearcat,/turf/space,/area)
-"ak" = (/obj/structure/table,/obj/machinery/light,/obj/item/device/radio,/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command)
+"ak" = (/obj/structure/table/standard,/obj/machinery/light,/obj/item/device/radio,/obj/item/device/radio/intercom{pixel_y = -32},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command)
"al" = (/obj/structure/stool/bed/chair/comfy/teal{tag = "icon-comfychair_teal (NORTH)"; icon_state = "comfychair_teal"; dir = 1},/obj/machinery/atmospherics/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark/start{name = "Captain"},/turf/simulated/floor{tag = "icon-gcircuitoff"; icon_state = "gcircuitoff"; dir = 2},/area/ship/scrap/command)
-"am" = (/obj/structure/table,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/door_control{id = "scraplock"; name = "External Lockdown"},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command)
+"am" = (/obj/structure/table/standard,/obj/machinery/light,/obj/machinery/newscaster{pixel_y = -32},/obj/machinery/door_control{id = "scraplock"; name = "External Lockdown"},/turf/simulated/floor{tag = "icon-gcircuit (SOUTHEAST)"; icon_state = "gcircuit"; dir = 6},/area/ship/scrap/command)
"an" = (/turf/simulated/wall/r_wall,/area/ship/scrap/command)
"ao" = (/obj/machinery/door/airlock/hatch,/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor,/area/ship/scrap/command)
"ap" = (/turf/simulated/wall/r_wall,/area/ship/scrap/comms)
@@ -37,7 +37,7 @@
"aK" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_x = 0; pixel_y = -32; tag = "icon-alarm0 (NORTH)"},/turf/simulated/floor/bluegrid,/area/ship/scrap/comms)
"aL" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/window/reinforced{dir = 8},/obj/item/device/radio/intercom{pixel_y = -32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/ship/scrap/comms)
"aM" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command)
-"aN" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/table,/obj/item/weapon/gun/projectile/shotgun/pump/combat{desc = "When words don't strike hard enough."; name = "Solid Argument"},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain)
+"aN" = (/obj/machinery/light{tag = "icon-tube1 (WEST)"; icon_state = "tube1"; dir = 8},/obj/item/device/radio/intercom{pixel_x = -32},/obj/structure/table/standard,/obj/item/weapon/gun/projectile/shotgun/pump/combat{desc = "When words don't strike hard enough."; name = "Solid Argument"},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain)
"aO" = (/obj/structure/cable{tag = "icon-4-9"; icon_state = "4-9"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain)
"aP" = (/obj/structure/table/woodentable,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "Captain's Quarters APC"},/turf/simulated/floor{tag = "icon-cult"; icon_state = "cult"; dir = 2},/area/ship/scrap/command/captain)
"aQ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/atmospherics/pipe/simple{dir = 2; icon_state = "intact"; level = 1; tag = "icon-intact"},/turf/simulated/floor{tag = "icon-neutralfull (EAST)"; icon_state = "neutralfull"; dir = 4},/area/ship/scrap/command)
@@ -134,7 +134,7 @@
"cD" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon)
"cE" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/crew/saloon)
"cF" = (/obj/structure/stool,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon)
-"cG" = (/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/landmark{name = "Observer-Start"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/item/ashtray/glass,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon)
+"cG" = (/obj/structure/table/standard,/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/effect/landmark{name = "Observer-Start"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/item/ashtray/glass,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew/saloon)
"cH" = (/obj/structure/stool,/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor,/area/ship/scrap/crew/saloon)
"cI" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/crew/saloon)
"cJ" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew)
@@ -164,7 +164,7 @@
"dh" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/obj/machinery/power/apc{name = "Dorms APC"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor,/area/ship/scrap/crew/dorms)
"di" = (/obj/structure/stool/bed,/obj/structure/closet/walllocker/emerglocker/south,/obj/item/weapon/bedsheet/green,/turf/simulated/floor,/area/ship/scrap/crew/dorms)
"dj" = (/obj/structure/closet/secure_closet/personal,/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor,/area/ship/scrap/crew/dorms)
-"dk" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
+"dk" = (/obj/structure/table/standard,/obj/machinery/reagentgrinder,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dl" = (/obj/machinery/processor,/obj/item/device/radio/intercom{pixel_y = 32},/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dm" = (/obj/structure/closet/walllocker/emerglocker/north,/obj/structure/closet/secure_closet/freezer/fridge,/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen)
"dn" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 4; name = "Crew Deck APC"},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/ship/scrap/crew)
@@ -179,7 +179,7 @@
"dw" = (/turf/simulated/wall/r_wall,/area/ship/scrap/maintenance/engine)
"dx" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/maintenance/engine)
"dy" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/kitchen)
-"dz" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
+"dz" = (/obj/structure/table/standard,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dA" = (/obj/effect/landmark/start{name = "Chef"},/obj/structure/stool,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dB" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 4; name = "Galley APC"},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen)
"dC" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew)
@@ -193,7 +193,7 @@
"dK" = (/obj/machinery/sleep_console,/obj/machinery/light{tag = "icon-tube1 (NORTH)"; icon_state = "tube1"; dir = 1},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
"dL" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/medical,/obj/item/device/radio/intercom{pixel_y = 32},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
"dM" = (/turf/simulated/floor{tag = "icon-wall_thermite (SOUTHEAST)"; icon_state = "wall_thermite"; dir = 6},/area/ship/scrap/maintenance/engine)
-"dN" = (/obj/structure/table,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
+"dN" = (/obj/structure/table/standard,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/item/weapon/storage/box/donkpockets,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dO" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"dP" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; level = 2; on = 1},/obj/structure/disposalpipe/segment{tag = "icon-conpipe-c (EAST)"; icon_state = "conpipe-c"; dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen)
"dQ" = (/obj/machinery/atmospherics/pipe/simple{dir = 4; icon_state = "intact"; level = 2; tag = "icon-intact"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor,/area/ship/scrap/crew/kitchen)
@@ -215,15 +215,15 @@
"eg" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine)
"eh" = (/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/engine)
"ei" = (/turf/simulated/floor{tag = "icon-platingdmg1"; icon_state = "platingdmg1"; dir = 2},/area)
-"ej" = (/obj/structure/table,/obj/machinery/microwave,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
+"ej" = (/obj/structure/table/standard,/obj/machinery/microwave,/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -24; tag = "icon-alarm0 (EAST)"},/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"ek" = (/obj/structure/closet/secure_closet/freezer/meat,/turf/simulated/floor{tag = "icon-bar (SOUTHEAST)"; icon_state = "bar"; dir = 6},/area/ship/scrap/crew/kitchen)
"el" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{tag = "icon-pipe-t (NORTH)"; icon_state = "pipe-t"; dir = 1},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{tag = "icon-stage_bleft (SOUTHEAST)"; icon_state = "stage_bleft"; dir = 6},/area/ship/scrap/crew/kitchen)
"em" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew)
"en" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo)
"eo" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable,/obj/machinery/power/apc{dir = 4; name = "Cargo Hold APC"},/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/cargo)
-"ep" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/box/syringes,/obj/structure/cable,/obj/machinery/power/apc{name = "Medical Bay APC"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
-"eq" = (/obj/structure/table,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
-"er" = (/obj/structure/table,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
+"ep" = (/obj/structure/table/standard,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/weapon/storage/box/syringes,/obj/structure/cable,/obj/machinery/power/apc{name = "Medical Bay APC"},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
+"eq" = (/obj/structure/table/standard,/obj/item/weapon/storage/pill_bottle/antitox,/obj/item/weapon/storage/pill_bottle/kelotane,/obj/item/clothing/tie/stethoscope,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
+"er" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/crew/medbay)
"es" = (/obj/item/device/radio,/turf/simulated/floor/plating,/area)
"et" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/weapon/coin/gold,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine)
"eu" = (/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"; tag = "icon-warnplate (NORTH)"},/area/ship/scrap/maintenance/engine)
@@ -263,25 +263,25 @@
"fc" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1; pressure_checks = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash)
"fd" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{tag = "icon-pipe-t (NORTH)"; icon_state = "pipe-t"; dir = 1},/obj/machinery/light_switch{pixel_x = 28},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash)
"fe" = (/obj/machinery/light/small{tag = "icon-bulb1 (WEST)"; icon_state = "bulb1"; dir = 8},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/crew)
-"ff" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/item/device/t_scanner,/obj/item/weapon/cell/high,/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
+"ff" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/electrical,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/item/device/t_scanner,/obj/item/weapon/cell/high,/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
"fg" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/item/device/radio/intercom{pixel_y = 32},/obj/machinery/vending/tool,/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
"fh" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/maintenance/storage)
-"fi" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/obj/item/stack/rods,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table,/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
-"fj" = (/obj/structure/table,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage)
+"fi" = (/obj/structure/window/reinforced{dir = 8},/obj/item/stack/rods,/obj/item/stack/rods,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/obj/structure/table/standard,/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
+"fj" = (/obj/structure/table/standard,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage)
"fk" = (/obj/structure/closet/walllocker/emerglocker/west,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor{tag = "icon-stage_stairs (SOUTHEAST)"; icon_state = "stage_stairs"; dir = 6},/area/ship/scrap/crew)
"fl" = (/obj/effect/decal/cleanable/generic,/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/ship/scrap/unused2)
"fm" = (/turf/simulated/floor/plating,/area/ship/scrap/unused2)
"fn" = (/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/unused2)
"fo" = (/turf/simulated/floor{tag = "icon-platingdmg3"; icon_state = "platingdmg3"; dir = 2},/area)
"fp" = (/obj/machinery/washing_machine,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash)
-"fq" = (/obj/structure/table,/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash)
+"fq" = (/obj/structure/table/standard,/obj/machinery/light/small,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/ship/scrap/crew/wash)
"fr" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/crew/wash)
"fs" = (/obj/structure/closet/walllocker/emerglocker/east,/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/crew)
-"ft" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 5; pixel_y = -7},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/head/welding,/obj/item/device/analyzer,/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
+"ft" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 5; pixel_y = -7},/obj/item/weapon/storage/toolbox/mechanical,/obj/item/clothing/head/welding,/obj/item/device/analyzer,/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
"fu" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/stool,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage)
"fv" = (/obj/machinery/atmospherics/pipe/manifold{dir = 8; icon_state = "manifold"; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
"fw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; level = 2; on = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage)
-"fx" = (/obj/structure/table,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage)
+"fx" = (/obj/structure/table/standard,/obj/item/weapon/tank/jetpack/oxygen,/obj/item/clothing/suit/space/rig,/obj/item/clothing/shoes/magboots,/obj/item/clothing/head/helmet/space/rig,/obj/item/clothing/mask/breath,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage)
"fy" = (/obj/machinery/light/small{tag = "icon-bulb1 (EAST)"; icon_state = "bulb1"; dir = 4},/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/ship/scrap/crew)
"fz" = (/turf/simulated/floor{tag = "icon-wall_thermite"; icon_state = "wall_thermite"; dir = 2},/area/ship/scrap/unused2)
"fA" = (/turf/simulated/wall/r_wall,/area/ship/scrap/unused1)
@@ -301,8 +301,8 @@
"fO" = (/obj/machinery/alarm{pixel_y = 25},/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1)
"fP" = (/obj/structure/closet/walllocker/emerglocker/east,/obj/structure/reagent_dispensers,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/unused1)
"fQ" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0; tag = ""},/obj/machinery/door/airlock/maintenance_hatch{name = "Hatch"; normalspeed = 0},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
-"fR" = (/obj/structure/table,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/bulbs,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable,/obj/machinery/power/apc{name = "Tools Storage APC"},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
-"fS" = (/obj/structure/table,/obj/item/clothing/head/welding,/obj/item/device/radio,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
+"fR" = (/obj/structure/table/standard,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/bulbs,/obj/item/weapon/storage/box/lights/mixed,/obj/structure/cable,/obj/machinery/power/apc{name = "Tools Storage APC"},/turf/simulated/floor{tag = "icon-orange (WEST)"; icon_state = "orange"; dir = 8},/area/ship/scrap/maintenance/storage)
+"fS" = (/obj/structure/table/standard,/obj/item/clothing/head/welding,/obj/item/device/radio,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor,/area/ship/scrap/maintenance/storage)
"fT" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage)
"fU" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small,/obj/effect/decal/cleanable/dirt,/obj/structure/dispenser/oxygen,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance/storage)
"fV" = (/obj/machinery/recharge_station,/turf/simulated/floor{tag = "icon-orange (EAST)"; icon_state = "orange"; dir = 4},/area/ship/scrap/maintenance/storage)
@@ -343,11 +343,11 @@
"gE" = (/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/machinery/alarm{pixel_y = 32},/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance)
"gF" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/item/device/radio/intercom{pixel_y = 32},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/closet/toolcloset,/turf/simulated/floor{tag = "icon-bot"; icon_state = "bot"; dir = 2},/area/ship/scrap/maintenance)
"gG" = (/obj/machinery/atmospherics/pipe/simple{tag = "icon-intact"; icon_state = "intact"; dir = 2; level = 2},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
-"gH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light_switch{pixel_y = 25},/obj/structure/table,/obj/item/ashtray/plastic,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
+"gH" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light_switch{pixel_y = 25},/obj/structure/table/standard,/obj/item/ashtray/plastic,/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
"gI" = (/obj/structure/stool/bed/chair/comfy/brown,/obj/effect/landmark/start{name = "Chief Engineer"},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
"gJ" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/machinery/light/small{tag = "icon-bulb1 (NORTH)"; icon_state = "bulb1"; dir = 1},/turf/simulated/floor{tag = "icon-floorgrime (SOUTHEAST)"; icon_state = "floorgrime"; dir = 6},/area/ship/scrap/maintenance)
"gK" = (/obj/machinery/power/port_gen/pacman/super,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; name = "Power APC"},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power)
-"gL" = (/obj/structure/table,/obj/item/device/flashlight,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power)
+"gL" = (/obj/structure/table/standard,/obj/item/device/flashlight,/obj/item/weapon/storage/toolbox/electrical{pixel_x = 7; pixel_y = 4},/obj/machinery/light_switch{pixel_y = 25},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power)
"gM" = (/obj/structure/closet/crate,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/item/stack/sheet/mineral/uranium{amount = 50},/turf/simulated/floor/plating,/area/ship/scrap/maintenance/power)
"gN" = (/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/grille,/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id = "scraplock"; name = "External Blast Doors"; opacity = 0},/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor{icon_state = "white"},/area/ship/scrap/maintenance/atmos)
"gO" = (/obj/machinery/atmospherics/pipe/simple{dir = 5; icon_state = "intact"; level = 2},/obj/machinery/meter,/turf/simulated/floor/plating,/area/ship/scrap/maintenance/atmos)
diff --git a/maps/overmap/example_sector1.dmm b/maps/overmap/example_sector1.dmm
index 55e125eaf45..ec4ff9bf07b 100644
--- a/maps/overmap/example_sector1.dmm
+++ b/maps/overmap/example_sector1.dmm
@@ -27,9 +27,9 @@
"aA" = (/obj/structure/window/reinforced{dir = 4},/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
"aB" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
"aC" = (/obj/structure/filingcabinet,/turf/simulated/floor,/area/tcommsat/computer)
-"aD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Main Computer Room"; dir = 2; network = list("Tcomsat")},/obj/structure/table,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
-"aE" = (/obj/structure/table,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor,/area/tcommsat/computer)
-"aF" = (/obj/structure/table,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/tcommsat/computer)
+"aD" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 140; on = 1; pressure_checks = 0},/obj/machinery/camera{c_tag = "Main Computer Room"; dir = 2; network = list("Tcomsat")},/obj/structure/table/standard,/obj/item/weapon/folder/yellow,/obj/item/weapon/folder/yellow,/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/tcommsat/computer)
+"aE" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/obj/item/weapon/pen/blue{pixel_x = -3; pixel_y = 2},/turf/simulated/floor,/area/tcommsat/computer)
+"aF" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor,/area/tcommsat/computer)
"aG" = (/obj/item/weapon/syntiflesh{name = "Cuban Pete-Meat"},/turf/simulated/floor/engine,/area/tcommsat/computer)
"aH" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = -29; pixel_y = 0},/turf/simulated/floor,/area/tcommsat/computer)
"aI" = (/obj/structure/window/reinforced{dir = 4},/turf/space,/area/turret_protected/tcomsat)
@@ -58,7 +58,7 @@
"bf" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; layer = 2.4; on = 1},/turf/simulated/floor,/area/tcommsat/computer)
"bg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor,/area/tcommsat/computer)
"bh" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor,/area/tcommsat/computer)
-"bi" = (/obj/structure/table,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/tcommsat/computer)
+"bi" = (/obj/structure/table/standard,/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor,/area/tcommsat/computer)
"bj" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor,/area/tcommsat/computer)
"bk" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"bl" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
@@ -84,7 +84,7 @@
"bF" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
"bG" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/lattice,/obj/machinery/light,/turf/space,/area/turret_protected/tcomsat)
"bH" = (/obj/structure/window/reinforced{dir = 1},/turf/space,/area/turret_protected/tcomsat)
-"bI" = (/obj/machinery/light{dir = 8},/obj/structure/table,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer)
+"bI" = (/obj/machinery/light{dir = 8},/obj/structure/table/standard,/obj/item/device/multitool,/obj/structure/sign/electricshock{pixel_x = -32},/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer)
"bJ" = (/obj/machinery/atmospherics/unary/cold_sink/freezer{current_temperature = 80; dir = 1; on = 1},/turf/simulated/floor,/area/tcommsat/computer)
"bK" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor,/area/tcommsat/computer)
"bL" = (/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor,/area/tcommsat/computer)
@@ -128,7 +128,7 @@
"cx" = (/obj/machinery/telecomms/server/presets/common,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cy" = (/obj/machinery/telecomms/server/presets/engineering,/turf/simulated/floor{dir = 4; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"cz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cA" = (/obj/structure/table,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"cA" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/capacitor,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/turret_protected/tcomsat)
"cB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; external_pressure_bound = 101.325; on = 1; pressure_checks = 1},/obj/machinery/camera{c_tag = "Telecoms Storage"; network = list("Tcomsat")},/turf/simulated/floor,/area/turret_protected/tcomsat)
"cC" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/processor,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/server,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/bus,/obj/item/weapon/circuitboard/telecomms/broadcaster,/turf/simulated/floor,/area/turret_protected/tcomsat)
"cD" = (/obj/machinery/camera{c_tag = "West Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area)
@@ -140,9 +140,9 @@
"cJ" = (/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"cK" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
"cL" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"cM" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"cM" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/obj/item/weapon/stock_parts/subspace/treatment,/turf/simulated/floor,/area/turret_protected/tcomsat)
"cN" = (/turf/simulated/floor,/area/turret_protected/tcomsat)
-"cO" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"cO" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/obj/item/weapon/stock_parts/subspace/analyzer,/turf/simulated/floor,/area/turret_protected/tcomsat)
"cP" = (/turf/simulated/floor/plating,/area)
"cQ" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 8},/obj/machinery/light{dir = 4},/turf/space,/area/turret_protected/tcomsat)
"cR" = (/obj/structure/sign/nosmoking_2{pixel_x = -32; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -158,7 +158,7 @@
"db" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"dc" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
"dd" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/door/airlock/maintenance_hatch{name = "Telecoms Storage"; req_access_txt = "61"},/turf/simulated/floor{icon_state = "vault"; dir = 5},/area/turret_protected/tcomsat)
-"de" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat)
+"de" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/weapon/stock_parts/subspace/amplifier,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_x = 29; pixel_y = 0},/obj/machinery/light/small{dir = 4},/turf/simulated/floor,/area/turret_protected/tcomsat)
"df" = (/obj/machinery/telecomms/bus/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dg" = (/obj/machinery/telecomms/processor/preset_one,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dh" = (/obj/machinery/telecomms/receiver/preset_left,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
@@ -168,11 +168,11 @@
"dl" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/space,/area/turret_protected/tcomsat)
"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
"dn" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"do" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"do" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/turret_protected/tcomsat)
"dp" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/turret_protected/tcomsat)
-"dq" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"dr" = (/obj/structure/table,/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,/turf/simulated/floor,/area/turret_protected/tcomsat)
-"ds" = (/obj/structure/table,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/crystal,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"dq" = (/obj/structure/table/standard,/obj/item/weapon/stock_parts/subspace/transmitter,/obj/item/weapon/stock_parts/subspace/transmitter,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"dr" = (/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,/turf/simulated/floor,/area/turret_protected/tcomsat)
+"ds" = (/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,/turf/simulated/floor,/area/turret_protected/tcomsat)
"dt" = (/obj/machinery/telecomms/server/presets/science,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"du" = (/obj/machinery/telecomms/server/presets/medical,/turf/simulated/floor{dir = 1; icon_state = "vault"; name = "Mainframe floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
"dv" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 6},/turf/simulated/floor/bluegrid{icon_state = "dark"; name = "Mainframe Floor"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcommsat/chamber)
diff --git a/maps/overmap/example_sector2.dmm b/maps/overmap/example_sector2.dmm
index 48fa14cd97c..24f46b33bfc 100644
--- a/maps/overmap/example_sector2.dmm
+++ b/maps/overmap/example_sector2.dmm
@@ -42,8 +42,8 @@
"aP" = (/obj/item/weapon/shard,/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"aQ" = (/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"aR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
-"aS" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
-"aT" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
+"aS" = (/obj/structure/table/standard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
+"aT" = (/obj/structure/table/standard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"aU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned)
"aV" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor,/area/mine/abandoned)
"aW" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating,/area/mine/abandoned)
@@ -78,7 +78,7 @@
"bz" = (/turf/simulated/floor/airless,/area/mine/abandoned)
"bA" = (/obj/effect/alien/weeds,/turf/simulated/floor,/area/mine/abandoned)
"bB" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
-"bC" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned)
+"bC" = (/obj/structure/table/standard,/turf/simulated/floor,/area/mine/abandoned)
"bD" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned)
"bE" = (/obj/structure/rack,/turf/simulated/floor,/area/mine/abandoned)
"bF" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
@@ -86,13 +86,13 @@
"bH" = (/obj/effect/alien/weeds,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"bI" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"bJ" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
-"bK" = (/obj/structure/table,/turf/simulated/floor/airless,/area/mine/abandoned)
+"bK" = (/obj/structure/table/standard,/turf/simulated/floor/airless,/area/mine/abandoned)
"bL" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"bM" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
"bN" = (/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/airless,/area/mine/abandoned)
"bO" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
"bP" = (/obj/machinery/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned)
-"bQ" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
+"bQ" = (/obj/structure/table/standard,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
"bR" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
"bS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned)
"bT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
@@ -119,7 +119,7 @@
"co" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"cp" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
"cq" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned)
-"cr" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned)
+"cr" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned)
"cs" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"ct" = (/obj/structure/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"cu" = (/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
diff --git a/nano/images/nanomap_z1.png b/nano/images/nanomap_z1.png
index 079c4379b7f..ea35b7f06d1 100644
Binary files a/nano/images/nanomap_z1.png and b/nano/images/nanomap_z1.png differ
diff --git a/nano/templates/aicard.tmpl b/nano/templates/aicard.tmpl
new file mode 100644
index 00000000000..be860a52ac9
--- /dev/null
+++ b/nano/templates/aicard.tmpl
@@ -0,0 +1,103 @@
+
+
+
+
+{{if data.has_ai}}
+
+
+ Hardware Integrity:
+
+
+ {{:data.hardware_integrity}}%
+
+
+ Backup Capacitor:
+
+
+ {{:data.backup_capacitor}}%
+
+
+
+ {{if data.has_laws}}
+
+ | Index | Law |
+
+
+ Laws:
+
+ {{for data.laws}}
+ | {{:value.index}}. | {{:value.law}} |
+ {{/for}}
+
+ {{else}}
+ No laws found.
+ {{/if}}
+
+ {{if data.operational}}
+
+
+ | Radio Subspace Transceiver |
+ {{:helper.link("Enabled", null, {'radio' : 0}, data.radio ? 'selected' : null)}} |
+ {{:helper.link("Disabled", null, {'radio' : 1}, data.radio ? null : 'redButton' )}} |
+
+ | Wireless Interface |
+ {{:helper.link("Enabled", null, {'wireless' : 0}, data.wireless ? 'selected' : null)}} |
+ {{:helper.link("Disabled", null, {'wireless' : 1}, data.wireless ? null : 'redButton' )}} |
+
+ {{if data.flushing}}
+ | AI wipe in progress... |
+ {{else}}
+
+ | Wipe AI |
+ {{:helper.link("Wipe", 'radiation', {'wipe' : 1}, null, 'redButton')}} |
+
+ {{/if}}
+
+ {{/if}}
+{{else}}
+ Stored AI: No AI detected.
+{{/if}}
diff --git a/nano/templates/alarm_monitor.tmpl b/nano/templates/alarm_monitor.tmpl
index 0089467e434..2591763fc04 100644
--- a/nano/templates/alarm_monitor.tmpl
+++ b/nano/templates/alarm_monitor.tmpl
@@ -1,6 +1,7 @@
{{for data.categories}}
@@ -34,4 +35,4 @@ Used In File(s): \code\modules\nano\modules\alarm_monitor.dm
{{empty}}
--All Systems Nominal
{{/for}}
-{{/for}}
\ No newline at end of file
+{{/for}}
diff --git a/nano/templates/atmosphere_monitor.tmpl b/nano/templates/atmosphere_monitor.tmpl
deleted file mode 100644
index 0089467e434..00000000000
--- a/nano/templates/atmosphere_monitor.tmpl
+++ /dev/null
@@ -1,37 +0,0 @@
-
-
-{{for data.categories}}
- {{:value.category}}
- {{for value.alarms :alarmValue:alarmIndex}}
- {{if alarmValue.origin_lost}}
- {{:alarmValue.name}} Alarm Origin Lost
- {{else}}
- {{:alarmValue.name}}
- {{/if}}
- {{if alarmValue.has_cameras || alarmValue.lost_sources != ""}}
-
- {{if alarmValue.has_cameras}}
-
- {{for alarmValue.cameras :cameraValue:cameraIndex}}
- {{if cameraValue.deact}}
- {{:helper.link(cameraValue.name + " (deactivated)", '', {}, 'inactive')}}
- {{else}}
- {{:helper.link(cameraValue.name, '', {'switchTo' : cameraValue.camera})}}
- {{/if}}
- {{/for}}
-
- {{/if}}
- {{if alarmValue.lost_sources != ""}}
-
- Lost Alarm Sources: {{:alarmValue.lost_sources}}
-
- {{/if}}
-
- {{/if}}
- {{empty}}
- --All Systems Nominal
- {{/for}}
-{{/for}}
\ No newline at end of file
diff --git a/nano/templates/law_manager.tmpl b/nano/templates/law_manager.tmpl
index d4860c2b908..fa91140881e 100644
--- a/nano/templates/law_manager.tmpl
+++ b/nano/templates/law_manager.tmpl
@@ -41,18 +41,16 @@
}
-{{if data.isSlaved && data.isAdmin}}
- This unit is law synced to {{:data.isSlaved}}.
+{{if data.isSlaved}}
+ Law synced to {{:data.isSlaved}}.
{{/if}}
-{{if data.isMalf || data.isAIMalf}}
-
-
- {{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
- {{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
-
+
+
+ {{:helper.link('Law Management', null, {'set_view' : 0}, data.view == 0 ? 'selected' : null)}}
+ {{:helper.link('Law Sets', null, {'set_view' : 1}, data.view == 1 ? 'selected' : null)}}
-{{/if}}
+
{{if data.view == 0}}
{{if data.has_ion_laws}}
@@ -196,6 +194,8 @@
{{/if}}
{{else data.view == 1}}
+ Remember: Stating laws other than those currently loaded may be grounds for decommissioning - NanoTrasen
+
{{for data.law_sets}}
@@ -246,7 +246,7 @@
- {{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isSlaved ? 'disabled' : null)}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
+ {{:helper.link('Load Laws', null, {'transfer_laws' : value.ref}, data.isMalf ? null : 'disabled')}}{{:helper.link('State Laws', null, {'state_law_set' : value.ref})}}
{{/for}}
diff --git a/nano/templates/pai_manifest.tmpl b/nano/templates/pai_manifest.tmpl
index 0ab49c02fce..ca4924d70ae 100644
--- a/nano/templates/pai_manifest.tmpl
+++ b/nano/templates/pai_manifest.tmpl
@@ -6,9 +6,9 @@ Copy-pasted from pda.tmpl
- {{if data.cached.heads.length}}
+ {{if data.manifest.heads.length}}
| Command |
- {{for data.cached["heads"]}}
+ {{for data.manifest["heads"]}}
{{if value.rank == "Captain"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -16,9 +16,9 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.sec.length}}
+ {{if data.manifest.sec.length}}
| Security |
- {{for data.cached["sec"]}}
+ {{for data.manifest["sec"]}}
{{if value.rank == "Head of Security"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -26,9 +26,9 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.eng.length}}
+ {{if data.manifest.eng.length}}
| Engineering |
- {{for data.cached["eng"]}}
+ {{for data.manifest["eng"]}}
{{if value.rank == "Chief Engineer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -36,9 +36,9 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.med.length}}
+ {{if data.manifest.med.length}}
| Medical |
- {{for data.cached["med"]}}
+ {{for data.manifest["med"]}}
{{if value.rank == "Chief Medical Officer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -46,9 +46,9 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.sci.length}}
+ {{if data.manifest.sci.length}}
| Science |
- {{for data.cached["sci"]}}
+ {{for data.manifest["sci"]}}
{{if value.rank == "Research Director"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -56,9 +56,9 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.civ.length}}
+ {{if data.manifest.civ.length}}
| Civilian |
- {{for data.cached["civ"]}}
+ {{for data.manifest["civ"]}}
{{if value.rank == "Head of Personnel"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -66,11 +66,11 @@ Copy-pasted from pda.tmpl
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.misc.length}}
+ {{if data.manifest.misc.length}}
| Misc |
- {{for data.cached["misc"]}}
+ {{for data.manifest["misc"]}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{/for}}
{{/if}}
-
\ No newline at end of file
+
diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl
index 38cc5ef945d..3bb864fd010 100644
--- a/nano/templates/pda.tmpl
+++ b/nano/templates/pda.tmpl
@@ -297,9 +297,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{else data.mode== 41}}
- {{if data.cached.heads.length}}
+ {{if data.manifest.heads.length}}
| Command |
- {{for data.cached["heads"]}}
+ {{for data.manifest["heads"]}}
{{if value.rank == "Captain"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -307,9 +307,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.sec.length}}
+ {{if data.manifest.sec.length}}
| Security |
- {{for data.cached["sec"]}}
+ {{for data.manifest["sec"]}}
{{if value.rank == "Head of Security"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -317,9 +317,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.eng.length}}
+ {{if data.manifest.eng.length}}
| Engineering |
- {{for data.cached["eng"]}}
+ {{for data.manifest["eng"]}}
{{if value.rank == "Chief Engineer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -327,9 +327,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.med.length}}
+ {{if data.manifest.med.length}}
| Medical |
- {{for data.cached["med"]}}
+ {{for data.manifest["med"]}}
{{if value.rank == "Chief Medical Officer"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -337,9 +337,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.sci.length}}
+ {{if data.manifest.sci.length}}
| Science |
- {{for data.cached["sci"]}}
+ {{for data.manifest["sci"]}}
{{if value.rank == "Research Director"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -347,9 +347,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.civ.length}}
+ {{if data.manifest.civ.length}}
| Civilian |
- {{for data.cached["civ"]}}
+ {{for data.manifest["civ"]}}
{{if value.rank == "Head of Personnel"}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{else}}
@@ -357,9 +357,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{/if}}
{{/for}}
{{/if}}
- {{if data.cached.misc.length}}
+ {{if data.manifest.misc.length}}
| Misc |
- {{for data.cached["misc"]}}
+ {{for data.manifest["misc"]}}
| {{:value.name}} | {{:value.rank}} | {{:value.active}} |
{{/for}}
{{/if}}
diff --git a/nano/templates/robot_control.tmpl b/nano/templates/robot_control.tmpl
new file mode 100644
index 00000000000..57bbebd490b
--- /dev/null
+++ b/nano/templates/robot_control.tmpl
@@ -0,0 +1,83 @@
+{{if !data.is_ai}}
+
+
+ Emergency Self-Destruct:
+
+
+ {{if data.safety}}
+ {{:helper.link('ARM', 'unlocked', {'arm' : 1})}}
+ {{:helper.link('DETONATE', 'radiation', {'nuke' : 1}, 'disabled')}}
+ {{else}}
+ {{:helper.link('DISARM', 'locked', {'arm' : 1})}}
+ {{:helper.link('DETONATE', 'radiation', {'nuke' : 1}, null, 'redButton')}}
+ {{/if}}
+
+
+
+{{/if}}
+{{for data.robots}}
+
+
+ {{:value.name}}
+ Information
+
+ Status:
+
+
+ {{:value.status}}
+
+
+ Master AI:
+
+
+ {{:value.master_ai}}
+
+
+ Module:
+
+
+ {{:value.module}}
+
+
+ {{if value.hackable}}
+
+ Safeties:
+
+
+ ENABLED
+
+ {{else value.hacked}}
+
+ Safeties:
+
+
+ DISABLED
+
+ {{/if}}
+ Power Cell
+ {{if value.cell}}
+
+ Rating :
+
+
+ {{:value.cell_capacity}}
+
+ {{:helper.displayBar(value.cell_percentage, 0, 100, (value.cell_percentage >= 50) ? 'good' : (value.cell_percentage >= 25) ? 'average' : 'bad')}}
+ {{:value.cell_percentage}} %
+ {{else}}
+ Not Installed
+ {{:helper.displayBar(100, 0, 100, 'bad')}}
+ N/A %
+ {{/if}}
+ Actions
+ {{if value.status == "Operational"}}
+ {{:helper.link('Lockdown', 'locked', {'lockdown' : value.name})}}
+ {{else}}
+ {{:helper.link('Unlock', 'unlocked', {'lockdown' : value.name})}}
+ {{/if}}
+ {{:helper.link('Self-Destruct', 'radiation', {'detonate' : value.name}, null, 'redButton')}}
+ {{if value.hackable}}
+ {{:helper.link('Hack', 'calculator', {'hack' : value.name}, null, 'redButton')}}
+ {{/if}}
+
+{{/for}}
\ No newline at end of file
diff --git a/nano/templates/sec_camera.tmpl b/nano/templates/sec_camera.tmpl
index 886cb0f87c7..13ec5ab229f 100644
--- a/nano/templates/sec_camera.tmpl
+++ b/nano/templates/sec_camera.tmpl
@@ -12,7 +12,7 @@ Used In File(s): \code\game\machinery\computer\camera.dm
None
{{/if}}
-{{for data.cached.cameras}}
+{{for data.cameras}}
{{if data.current && value.name == data.current.name}}
{{:helper.link(value.name, '', {'switchTo' : value.camera}, 'selected')}}
{{else value.deact}}
diff --git a/nano/templates/sec_camera_map_content.tmpl b/nano/templates/sec_camera_map_content.tmpl
index 55d9e05d4db..a2706d8c359 100644
--- a/nano/templates/sec_camera_map_content.tmpl
+++ b/nano/templates/sec_camera_map_content.tmpl
@@ -2,7 +2,7 @@
Title: Security Camera Console (Map content)
Used In File(s): \code\game\machinery\computer\camera.dm
-->
-{{for data.cached.cameras}}
+{{for data.cameras}}
{{if value.z == 1}}
{{if data.current && value.name == data.current.name}}
diff --git a/nano/templates/supermatter_crystal.tmpl b/nano/templates/supermatter_crystal.tmpl
new file mode 100644
index 00000000000..b06aaae7466
--- /dev/null
+++ b/nano/templates/supermatter_crystal.tmpl
@@ -0,0 +1,25 @@
+{{if data.detonating}}
+
+ CRYSTAL DELAMINATING
+ Evacuate area immediately
+
+
+{{else}}
+ Crystal Integrity
+ {{:helper.displayBar(data.integrity_percentage, 0, 100, (data.integrity_percentage >= 90) ? 'good' : (data.integrity_percentage >= 25) ? 'average' : 'bad')}}
+ {{:data.integrity_percentage}} %
+ Environment
+
+ Temperature:
+
+
+ {{:helper.displayBar(data.ambient_temp, 0, 10000, (data.ambient_temp >= 5000) ? 'bad' : (data.ambient_temp >= 4000) ? 'average' : 'good')}}
+ {{:data.ambient_temp}} K
+
+
+ Pressure:
+
+
+ {{:data.ambient_pressure}} kPa
+
+{{/if}}
\ No newline at end of file
diff --git a/polaris.dme b/polaris.dme
index 1fe6df79975..26712852c2a 100644
--- a/polaris.dme
+++ b/polaris.dme
@@ -13,26 +13,38 @@
#include "code\global.dm"
#include "code\hub.dm"
#include "code\names.dm"
-#include "code\setup.dm"
#include "code\stylesheet.dm"
#include "code\world.dm"
-#include "code\__HELPERS\datum_pool.dm"
-#include "code\__HELPERS\files.dm"
-#include "code\__HELPERS\game.dm"
-#include "code\__HELPERS\global_lists.dm"
-#include "code\__HELPERS\icons.dm"
-#include "code\__HELPERS\lists.dm"
-#include "code\__HELPERS\logging.dm"
-#include "code\__HELPERS\maths.dm"
-#include "code\__HELPERS\mobs.dm"
-#include "code\__HELPERS\names.dm"
-#include "code\__HELPERS\sanitize_values.dm"
-#include "code\__HELPERS\text.dm"
-#include "code\__HELPERS\time.dm"
-#include "code\__HELPERS\turfs.dm"
-#include "code\__HELPERS\type2type.dm"
-#include "code\__HELPERS\unsorted.dm"
-#include "code\__HELPERS\vector.dm"
+#include "code\__defines\admin.dm"
+#include "code\__defines\atmos.dm"
+#include "code\__defines\chemistry.dm"
+#include "code\__defines\damage_organs.dm"
+#include "code\__defines\dna.dm"
+#include "code\__defines\gamemode.dm"
+#include "code\__defines\items_clothing.dm"
+#include "code\__defines\machinery.dm"
+#include "code\__defines\math_physics.dm"
+#include "code\__defines\misc.dm"
+#include "code\__defines\mobs.dm"
+#include "code\__defines\research.dm"
+#include "code\__defines\species_languages.dm"
+#include "code\_helpers\datum_pool.dm"
+#include "code\_helpers\files.dm"
+#include "code\_helpers\game.dm"
+#include "code\_helpers\global_lists.dm"
+#include "code\_helpers\icons.dm"
+#include "code\_helpers\lists.dm"
+#include "code\_helpers\logging.dm"
+#include "code\_helpers\maths.dm"
+#include "code\_helpers\mobs.dm"
+#include "code\_helpers\names.dm"
+#include "code\_helpers\sanitize_values.dm"
+#include "code\_helpers\text.dm"
+#include "code\_helpers\time.dm"
+#include "code\_helpers\turfs.dm"
+#include "code\_helpers\type2type.dm"
+#include "code\_helpers\unsorted.dm"
+#include "code\_helpers\vector.dm"
#include "code\_onclick\adjacent.dm"
#include "code\_onclick\ai.dm"
#include "code\_onclick\click.dm"
@@ -41,12 +53,15 @@
#include "code\_onclick\item_attack.dm"
#include "code\_onclick\observer.dm"
#include "code\_onclick\other_mobs.dm"
+#include "code\_onclick\rig.dm"
#include "code\_onclick\telekinesis.dm"
#include "code\_onclick\hud\_defines.dm"
+#include "code\_onclick\hud\action.dm"
#include "code\_onclick\hud\alien_larva.dm"
#include "code\_onclick\hud\hud.dm"
#include "code\_onclick\hud\human.dm"
#include "code\_onclick\hud\monkey.dm"
+#include "code\_onclick\hud\movable_screen_objects.dm"
#include "code\_onclick\hud\other_mobs.dm"
#include "code\_onclick\hud\robot.dm"
#include "code\_onclick\hud\screen_objects.dm"
@@ -85,15 +100,12 @@
#include "code\ATMOSPHERICS\components\unary\unary_base.dm"
#include "code\ATMOSPHERICS\components\unary\vent_pump.dm"
#include "code\ATMOSPHERICS\components\unary\vent_scrubber.dm"
-#include "code\controllers\_DynamicAreaLighting_TG.dm"
#include "code\controllers\autotransfer.dm"
#include "code\controllers\communications.dm"
#include "code\controllers\configuration.dm"
#include "code\controllers\emergency_shuttle_controller.dm"
-#include "code\controllers\failsafe.dm"
#include "code\controllers\hooks-defs.dm"
#include "code\controllers\hooks.dm"
-#include "code\controllers\lighting_controller.dm"
#include "code\controllers\master_controller.dm"
#include "code\controllers\shuttle_controller.dm"
#include "code\controllers\subsystems.dm"
@@ -101,18 +113,17 @@
#include "code\controllers\voting.dm"
#include "code\controllers\Processes\air.dm"
#include "code\controllers\Processes\alarm.dm"
+#include "code\controllers\Processes\chemistry.dm"
#include "code\controllers\Processes\disease.dm"
#include "code\controllers\Processes\emergencyShuttle.dm"
#include "code\controllers\Processes\event.dm"
#include "code\controllers\Processes\garbage.dm"
#include "code\controllers\Processes\inactivity.dm"
-#include "code\controllers\Processes\lighting.dm"
#include "code\controllers\Processes\machinery.dm"
#include "code\controllers\Processes\mob.dm"
#include "code\controllers\Processes\nanoui.dm"
#include "code\controllers\Processes\obj.dm"
#include "code\controllers\Processes\pipenet.dm"
-#include "code\controllers\Processes\powernet.dm"
#include "code\controllers\Processes\Shuttle.dm"
#include "code\controllers\Processes\sun.dm"
#include "code\controllers\Processes\supply.dm"
@@ -178,6 +189,7 @@
#include "code\datums\diseases\advance\symptoms\weight.dm"
#include "code\datums\helper_datums\construction_datum.dm"
#include "code\datums\helper_datums\events.dm"
+#include "code\datums\helper_datums\getrev.dm"
#include "code\datums\helper_datums\global_iterator.dm"
#include "code\datums\helper_datums\teleport.dm"
#include "code\datums\helper_datums\topic_input.dm"
@@ -196,6 +208,7 @@
#include "code\datums\wires\suit_storage_unit.dm"
#include "code\datums\wires\vending.dm"
#include "code\datums\wires\wires.dm"
+#include "code\defines\gases.dm"
#include "code\defines\obj.dm"
#include "code\defines\obj\weapon.dm"
#include "code\defines\procs\admin.dm"
@@ -210,11 +223,11 @@
#include "code\game\asteroid.dm"
#include "code\game\atoms.dm"
#include "code\game\atoms_movable.dm"
+#include "code\game\base_turf.dm"
#include "code\game\periodic_news.dm"
#include "code\game\response_team.dm"
#include "code\game\shuttle_engines.dm"
#include "code\game\skincmd.dm"
-#include "code\game\smoothwall.dm"
#include "code\game\sound.dm"
#include "code\game\supplyshuttle.dm"
#include "code\game\antagonist\antagonist.dm"
@@ -270,6 +283,7 @@
#include "code\game\gamemodes\cult\cult_items.dm"
#include "code\game\gamemodes\cult\cult_structures.dm"
#include "code\game\gamemodes\cult\hell_universe.dm"
+#include "code\game\gamemodes\cult\narsie.dm"
#include "code\game\gamemodes\cult\ritual.dm"
#include "code\game\gamemodes\cult\runes.dm"
#include "code\game\gamemodes\cult\talisman.dm"
@@ -291,8 +305,15 @@
#include "code\game\gamemodes\events\holidays\Other.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\heist\heist.dm"
-#include "code\game\gamemodes\malfunction\Malf_Modules.dm"
+#include "code\game\gamemodes\malfunction\malf_hardware.dm"
+#include "code\game\gamemodes\malfunction\malf_research.dm"
+#include "code\game\gamemodes\malfunction\malf_research_ability.dm"
#include "code\game\gamemodes\malfunction\malfunction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HARDWARE.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\HELPERS.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_interdiction.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_manipulation.dm"
+#include "code\game\gamemodes\malfunction\newmalf_ability_trees\tree_networking.dm"
#include "code\game\gamemodes\meteor\meteor.dm"
#include "code\game\gamemodes\meteor\meteors.dm"
#include "code\game\gamemodes\ninja\ninja.dm"
@@ -301,7 +322,9 @@
#include "code\game\gamemodes\revolution\revolution.dm"
#include "code\game\gamemodes\traitor\traitor.dm"
#include "code\game\gamemodes\wizard\wizard.dm"
+#include "code\game\jobs\_access_defs.dm"
#include "code\game\jobs\access.dm"
+#include "code\game\jobs\access_datum.dm"
#include "code\game\jobs\job_controller.dm"
#include "code\game\jobs\jobprocs.dm"
#include "code\game\jobs\jobs.dm"
@@ -371,6 +394,7 @@
#include "code\game\machinery\turret_control.dm"
#include "code\game\machinery\turrets.dm"
#include "code\game\machinery\vending.dm"
+#include "code\game\machinery\wall_frames.dm"
#include "code\game\machinery\washing_machine.dm"
#include "code\game\machinery\wishgranter.dm"
#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
@@ -513,7 +537,6 @@
#include "code\game\objects\weapons.dm"
#include "code\game\objects\effects\aliens.dm"
#include "code\game\objects\effects\bump_teleporter.dm"
-#include "code\game\objects\effects\chemsmoke.dm"
#include "code\game\objects\effects\effect_system.dm"
#include "code\game\objects\effects\explosion_particles.dm"
#include "code\game\objects\effects\gibs.dm"
@@ -526,6 +549,9 @@
#include "code\game\objects\effects\portals.dm"
#include "code\game\objects\effects\spiders.dm"
#include "code\game\objects\effects\step_triggers.dm"
+#include "code\game\objects\effects\chem\chemsmoke.dm"
+#include "code\game\objects\effects\chem\foam.dm"
+#include "code\game\objects\effects\chem\water.dm"
#include "code\game\objects\effects\decals\cleanable.dm"
#include "code\game\objects\effects\decals\contraband.dm"
#include "code\game\objects\effects\decals\crayon.dm"
@@ -543,13 +569,13 @@
#include "code\game\objects\effects\spawners\gibspawner.dm"
#include "code\game\objects\effects\spawners\vaultspawner.dm"
#include "code\game\objects\items\apc_frame.dm"
-#include "code\game\objects\items\ashtray.dm"
#include "code\game\objects\items\blueprints.dm"
#include "code\game\objects\items\bodybag.dm"
#include "code\game\objects\items\contraband.dm"
#include "code\game\objects\items\crayons.dm"
#include "code\game\objects\items\glassjar.dm"
#include "code\game\objects\items\latexballoon.dm"
+#include "code\game\objects\items\paintkit.dm"
#include "code\game\objects\items\shooting_range.dm"
#include "code\game\objects\items\toys.dm"
#include "code\game\objects\items\trash.dm"
@@ -597,9 +623,6 @@
#include "code\game\objects\items\stacks\sheets\glass.dm"
#include "code\game\objects\items\stacks\sheets\leather.dm"
#include "code\game\objects\items\stacks\sheets\light.dm"
-#include "code\game\objects\items\stacks\sheets\mineral.dm"
-#include "code\game\objects\items\stacks\sheets\sheet_types.dm"
-#include "code\game\objects\items\stacks\sheets\sheets.dm"
#include "code\game\objects\items\stacks\tiles\light.dm"
#include "code\game\objects\items\stacks\tiles\plasteel.dm"
#include "code\game\objects\items\stacks\tiles\tile_types.dm"
@@ -617,6 +640,7 @@
#include "code\game\objects\items\weapons\flamethrower.dm"
#include "code\game\objects\items\weapons\gift_wrappaper.dm"
#include "code\game\objects\items\weapons\handcuffs.dm"
+#include "code\game\objects\items\weapons\improvised_components.dm"
#include "code\game\objects\items\weapons\kitchen.dm"
#include "code\game\objects\items\weapons\manuals.dm"
#include "code\game\objects\items\weapons\mop.dm"
@@ -628,16 +652,15 @@
#include "code\game\objects\items\weapons\RCD.dm"
#include "code\game\objects\items\weapons\RSF.dm"
#include "code\game\objects\items\weapons\scrolls.dm"
-#include "code\game\objects\items\weapons\shards.dm"
#include "code\game\objects\items\weapons\shields.dm"
#include "code\game\objects\items\weapons\stunbaton.dm"
#include "code\game\objects\items\weapons\surgery_tools.dm"
#include "code\game\objects\items\weapons\swords_axes_etc.dm"
-#include "code\game\objects\items\weapons\table_rack_parts.dm"
#include "code\game\objects\items\weapons\tape.dm"
#include "code\game\objects\items\weapons\teleportation.dm"
#include "code\game\objects\items\weapons\tools.dm"
-#include "code\game\objects\items\weapons\twohanded.dm"
+#include "code\game\objects\items\weapons\traps.dm"
+#include "code\game\objects\items\weapons\trays.dm"
#include "code\game\objects\items\weapons\weaponry.dm"
#include "code\game\objects\items\weapons\weldbackpack.dm"
#include "code\game\objects\items\weapons\wires.dm"
@@ -674,6 +697,16 @@
#include "code\game\objects\items\weapons\implants\implantfreedom.dm"
#include "code\game\objects\items\weapons\implants\implantpad.dm"
#include "code\game\objects\items\weapons\implants\implantuplink.dm"
+#include "code\game\objects\items\weapons\material\ashtray.dm"
+#include "code\game\objects\items\weapons\material\bats.dm"
+#include "code\game\objects\items\weapons\material\kitchen.dm"
+#include "code\game\objects\items\weapons\material\knives.dm"
+#include "code\game\objects\items\weapons\material\material_weapons.dm"
+#include "code\game\objects\items\weapons\material\misc.dm"
+#include "code\game\objects\items\weapons\material\shards.dm"
+#include "code\game\objects\items\weapons\material\swords.dm"
+#include "code\game\objects\items\weapons\material\thrown.dm"
+#include "code\game\objects\items\weapons\material\twohanded.dm"
#include "code\game\objects\items\weapons\melee\energy.dm"
#include "code\game\objects\items\weapons\melee\misc.dm"
#include "code\game\objects\items\weapons\storage\backpack.dm"
@@ -704,7 +737,6 @@
#include "code\game\objects\structures\door_assembly.dm"
#include "code\game\objects\structures\electricchair.dm"
#include "code\game\objects\structures\extinguisher.dm"
-#include "code\game\objects\structures\false_walls.dm"
#include "code\game\objects\structures\flora.dm"
#include "code\game\objects\structures\girders.dm"
#include "code\game\objects\structures\grille.dm"
@@ -714,7 +746,6 @@
#include "code\game\objects\structures\ladders.dm"
#include "code\game\objects\structures\lamarr_cage.dm"
#include "code\game\objects\structures\lattice.dm"
-#include "code\game\objects\structures\mineral_doors.dm"
#include "code\game\objects\structures\mirror.dm"
#include "code\game\objects\structures\mop_bucket.dm"
#include "code\game\objects\structures\morgue.dm"
@@ -722,7 +753,7 @@
#include "code\game\objects\structures\noticeboard.dm"
#include "code\game\objects\structures\safe.dm"
#include "code\game\objects\structures\signs.dm"
-#include "code\game\objects\structures\tables_racks.dm"
+#include "code\game\objects\structures\simple_doors.dm"
#include "code\game\objects\structures\tank_dispenser.dm"
#include "code\game\objects\structures\target_stake.dm"
#include "code\game\objects\structures\transit_tubes.dm"
@@ -768,10 +799,10 @@
#include "code\game\turfs\unsimulated.dm"
#include "code\game\turfs\simulated\floor.dm"
#include "code\game\turfs\simulated\floor_types.dm"
+#include "code\game\turfs\simulated\wall_attacks.dm"
+#include "code\game\turfs\simulated\wall_icon.dm"
+#include "code\game\turfs\simulated\wall_types.dm"
#include "code\game\turfs\simulated\walls.dm"
-#include "code\game\turfs\simulated\walls_mineral.dm"
-#include "code\game\turfs\simulated\walls_misc.dm"
-#include "code\game\turfs\simulated\walls_reinforced.dm"
#include "code\game\turfs\space\space.dm"
#include "code\game\turfs\space\transit.dm"
#include "code\game\turfs\unsimulated\beach.dm"
@@ -885,6 +916,7 @@
#include "code\modules\clothing\masks\miscellaneous.dm"
#include "code\modules\clothing\masks\voice.dm"
#include "code\modules\clothing\shoes\colour.dm"
+#include "code\modules\clothing\shoes\jobs.dm"
#include "code\modules\clothing\shoes\magboots.dm"
#include "code\modules\clothing\shoes\miscellaneous.dm"
#include "code\modules\clothing\spacesuits\alien.dm"
@@ -930,13 +962,14 @@
#include "code\modules\clothing\under\syndicate.dm"
#include "code\modules\clothing\under\accessories\accessory.dm"
#include "code\modules\clothing\under\accessories\armband.dm"
+#include "code\modules\clothing\under\accessories\badges.dm"
#include "code\modules\clothing\under\accessories\holster.dm"
+#include "code\modules\clothing\under\accessories\lockets.dm"
#include "code\modules\clothing\under\accessories\storage.dm"
#include "code\modules\clothing\under\jobs\civilian.dm"
#include "code\modules\clothing\under\jobs\engineering.dm"
#include "code\modules\clothing\under\jobs\medsci.dm"
#include "code\modules\clothing\under\jobs\security.dm"
-#include "code\modules\customitems\item_defines.dm"
#include "code\modules\customitems\item_spawning.dm"
#include "code\modules\detectivework\evidence.dm"
#include "code\modules\detectivework\footprints_and_rag.dm"
@@ -1002,6 +1035,7 @@
#include "code\modules\food\recipes_microwave.dm"
#include "code\modules\games\cards.dm"
#include "code\modules\genetics\side_effects.dm"
+#include "code\modules\ghosttrap\trap.dm"
#include "code\modules\holodeck\HolodeckControl.dm"
#include "code\modules\holodeck\HolodeckObjects.dm"
#include "code\modules\holodeck\HolodeckPrograms.dm"
@@ -1029,11 +1063,23 @@
#include "code\modules\library\lib_items.dm"
#include "code\modules\library\lib_machines.dm"
#include "code\modules\library\lib_readme.dm"
+#include "code\modules\lighting\_lighting_defs.dm"
+#include "code\modules\lighting\light_source.dm"
+#include "code\modules\lighting\lighting_atom.dm"
+#include "code\modules\lighting\lighting_overlay.dm"
+#include "code\modules\lighting\lighting_process.dm"
+#include "code\modules\lighting\lighting_system.dm"
+#include "code\modules\lighting\lighting_turf.dm"
+#include "code\modules\lighting\~lighting_undefs.dm"
#include "code\modules\liquid\splash_simulation.dm"
#include "code\modules\maps\dmm_suite.dm"
#include "code\modules\maps\reader.dm"
#include "code\modules\maps\swapmaps.dm"
#include "code\modules\maps\writer.dm"
+#include "code\modules\materials\material_recipes.dm"
+#include "code\modules\materials\material_sheets.dm"
+#include "code\modules\materials\material_synth.dm"
+#include "code\modules\materials\materials.dm"
#include "code\modules\mining\abandonedcrates.dm"
#include "code\modules\mining\alloys.dm"
#include "code\modules\mining\coins.dm"
@@ -1043,7 +1089,7 @@
#include "code\modules\mining\machine_unloading.dm"
#include "code\modules\mining\mine_items.dm"
#include "code\modules\mining\mine_turfs.dm"
-#include "code\modules\mining\minerals.dm"
+#include "code\modules\mining\mineral_effect.dm"
#include "code\modules\mining\mint.dm"
#include "code\modules\mining\money_bag.dm"
#include "code\modules\mining\ore.dm"
@@ -1051,6 +1097,7 @@
#include "code\modules\mining\satchel_ore_boxdm.dm"
#include "code\modules\mining\drilling\drill.dm"
#include "code\modules\mining\drilling\scanner.dm"
+#include "code\modules\mob\animations.dm"
#include "code\modules\mob\death.dm"
#include "code\modules\mob\emote.dm"
#include "code\modules\mob\hear_say.dm"
@@ -1166,6 +1213,7 @@
#include "code\modules\mob\living\carbon\human\MedicalSideEffects.dm"
#include "code\modules\mob\living\carbon\human\npcs.dm"
#include "code\modules\mob\living\carbon\human\say.dm"
+#include "code\modules\mob\living\carbon\human\stripping.dm"
#include "code\modules\mob\living\carbon\human\unarmed_attack.dm"
#include "code\modules\mob\living\carbon\human\update_icons.dm"
#include "code\modules\mob\living\carbon\human\whisper.dm"
@@ -1209,7 +1257,6 @@
#include "code\modules\mob\living\silicon\ai\life.dm"
#include "code\modules\mob\living\silicon\ai\login.dm"
#include "code\modules\mob\living\silicon\ai\logout.dm"
-#include "code\modules\mob\living\silicon\ai\say.dm"
#include "code\modules\mob\living\silicon\decoy\death.dm"
#include "code\modules\mob\living\silicon\decoy\decoy.dm"
#include "code\modules\mob\living\silicon\decoy\life.dm"
@@ -1301,6 +1348,7 @@
#include "code\modules\nano\interaction\contained.dm"
#include "code\modules\nano\interaction\default.dm"
#include "code\modules\nano\interaction\inventory.dm"
+#include "code\modules\nano\interaction\inventory_deep.dm"
#include "code\modules\nano\interaction\physical.dm"
#include "code\modules\nano\interaction\self.dm"
#include "code\modules\nano\interaction\zlevel.dm"
@@ -1313,8 +1361,8 @@
#include "code\modules\nano\modules\power_monitor.dm"
#include "code\modules\nano\modules\rcon.dm"
#include "code\modules\organs\blood.dm"
+#include "code\modules\organs\misc.dm"
#include "code\modules\organs\organ.dm"
-#include "code\modules\organs\organ_alien.dm"
#include "code\modules\organs\organ_external.dm"
#include "code\modules\organs\organ_icon.dm"
#include "code\modules\organs\organ_internal.dm"
@@ -1322,6 +1370,11 @@
#include "code\modules\organs\pain.dm"
#include "code\modules\organs\robolimbs.dm"
#include "code\modules\organs\wound.dm"
+#include "code\modules\organs\subtypes\diona.dm"
+#include "code\modules\organs\subtypes\machine.dm"
+#include "code\modules\organs\subtypes\standard.dm"
+#include "code\modules\organs\subtypes\unbreakable.dm"
+#include "code\modules\organs\subtypes\xenos.dm"
#include "code\modules\overmap\_defines.dm"
#include "code\modules\overmap\sectors.dm"
#include "code\modules\overmap\ships\ship.dm"
@@ -1394,7 +1447,6 @@
#include "code\modules\power\singularity\field_generator.dm"
#include "code\modules\power\singularity\generator.dm"
#include "code\modules\power\singularity\investigate.dm"
-#include "code\modules\power\singularity\narsie.dm"
#include "code\modules\power\singularity\singularity.dm"
#include "code\modules\power\singularity\particle_accelerator\particle.dm"
#include "code\modules\power\singularity\particle_accelerator\particle_accelerator.dm"
@@ -1437,8 +1489,19 @@
#include "code\modules\projectiles\projectile\energy.dm"
#include "code\modules\projectiles\projectile\force.dm"
#include "code\modules\projectiles\projectile\special.dm"
-#include "code\modules\random_map\mining_distribution.dm"
+#include "code\modules\random_map\_random_map_setup.dm"
#include "code\modules\random_map\random_map.dm"
+#include "code\modules\random_map\random_map_verbs.dm"
+#include "code\modules\random_map\automata\automata.dm"
+#include "code\modules\random_map\automata\caves.dm"
+#include "code\modules\random_map\building\building.dm"
+#include "code\modules\random_map\mazes\maze.dm"
+#include "code\modules\random_map\mazes\maze_cell.dm"
+#include "code\modules\random_map\noise\desert.dm"
+#include "code\modules\random_map\noise\magma.dm"
+#include "code\modules\random_map\noise\noise.dm"
+#include "code\modules\random_map\noise\ore.dm"
+#include "code\modules\random_map\noise\tundra.dm"
#include "code\modules\reagents\Chemistry-Colours.dm"
#include "code\modules\reagents\Chemistry-Holder.dm"
#include "code\modules\reagents\Chemistry-Machinery.dm"
@@ -1456,6 +1519,7 @@
#include "code\modules\reagents\dispenser\_defines.dm"
#include "code\modules\reagents\dispenser\cartridge.dm"
#include "code\modules\reagents\dispenser\cartridge_presets.dm"
+#include "code\modules\reagents\dispenser\cartridge_spawn.dm"
#include "code\modules\reagents\dispenser\dispenser2.dm"
#include "code\modules\reagents\dispenser\dispenser_presets.dm"
#include "code\modules\reagents\dispenser\supply.dm"
@@ -1466,7 +1530,6 @@
#include "code\modules\reagents\reagent_containers\glass.dm"
#include "code\modules\reagents\reagent_containers\hypospray.dm"
#include "code\modules\reagents\reagent_containers\pill.dm"
-#include "code\modules\reagents\reagent_containers\robodropper.dm"
#include "code\modules\reagents\reagent_containers\spray.dm"
#include "code\modules\reagents\reagent_containers\syringes.dm"
#include "code\modules\reagents\reagent_containers\food\cans.dm"
@@ -1536,8 +1599,6 @@
#include "code\modules\research\xenoarchaeology\finds\finds_misc.dm"
#include "code\modules\research\xenoarchaeology\finds\finds_special.dm"
#include "code\modules\research\xenoarchaeology\finds\finds_talkingitem.dm"
-#include "code\modules\research\xenoarchaeology\genetics\prehistoric_animals.dm"
-#include "code\modules\research\xenoarchaeology\genetics\reconstitutor.dm"
#include "code\modules\research\xenoarchaeology\machinery\artifact_analyser.dm"
#include "code\modules\research\xenoarchaeology\machinery\artifact_harvester.dm"
#include "code\modules\research\xenoarchaeology\machinery\artifact_scanner.dm"
@@ -1627,18 +1688,22 @@
#include "code\modules\spells\targeted\projectile\projectile.dm"
#include "code\modules\supermatter\supermatter.dm"
#include "code\modules\surgery\bones.dm"
-#include "code\modules\surgery\brainrepair.dm"
#include "code\modules\surgery\encased.dm"
-#include "code\modules\surgery\eye.dm"
#include "code\modules\surgery\face.dm"
#include "code\modules\surgery\generic.dm"
-#include "code\modules\surgery\headreattach.dm"
#include "code\modules\surgery\implant.dm"
+#include "code\modules\surgery\limb_reattach.dm"
#include "code\modules\surgery\organs_internal.dm"
#include "code\modules\surgery\other.dm"
-#include "code\modules\surgery\robolimbs.dm"
+#include "code\modules\surgery\robotics.dm"
#include "code\modules\surgery\slimes.dm"
#include "code\modules\surgery\surgery.dm"
+#include "code\modules\tables\flipping.dm"
+#include "code\modules\tables\interactions.dm"
+#include "code\modules\tables\presets.dm"
+#include "code\modules\tables\rack.dm"
+#include "code\modules\tables\tables.dm"
+#include "code\modules\tables\update_triggers.dm"
#include "code\modules\vehicles\cargo_train.dm"
#include "code\modules\vehicles\train.dm"
#include "code\modules\vehicles\vehicle.dm"
@@ -1654,6 +1719,8 @@
#include "code\modules\virus2\helpers.dm"
#include "code\modules\virus2\isolator.dm"
#include "code\modules\virus2\items_devices.dm"
+#include "code\modules\xgm\xgm_gas_data.dm"
+#include "code\modules\xgm\xgm_gas_mixture.dm"
#include "code\TriDimension\controller.dm"
#include "code\TriDimension\controller_presets.dm"
#include "code\TriDimension\Movement.dm"
@@ -1662,8 +1729,6 @@
#include "code\TriDimension\Structures_presets.dm"
#include "code\TriDimension\Turfs.dm"
#include "code\ZAS\_docs.dm"
-#include "code\ZAS\_gas_mixture_xgm.dm"
-#include "code\ZAS\_xgm_gas_data.dm"
#include "code\ZAS\Airflow.dm"
#include "code\ZAS\Atom.dm"
#include "code\ZAS\Connection.dm"
@@ -1673,7 +1738,6 @@
#include "code\ZAS\Debug.dm"
#include "code\ZAS\Diagnostic.dm"
#include "code\ZAS\Fire.dm"
-#include "code\ZAS\Gas.dm"
#include "code\ZAS\Phoron.dm"
#include "code\ZAS\Turf.dm"
#include "code\ZAS\Variable Settings.dm"
diff --git a/sound/machines/airlock_creaking.ogg b/sound/machines/airlock_creaking.ogg
new file mode 100644
index 00000000000..e69ebc275fc
Binary files /dev/null and b/sound/machines/airlock_creaking.ogg differ
diff --git a/tools/AddToChangelog/AddToChangelog.sln b/tools/AddToChangelog/AddToChangelog.sln
deleted file mode 100644
index d402865fa5f..00000000000
--- a/tools/AddToChangelog/AddToChangelog.sln
+++ /dev/null
@@ -1,20 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 11.00
-# Visual C# Express 2010
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AddToChangelog", "AddToChangelog\AddToChangelog.csproj", "{838EA2DE-A108-4213-8409-7F562F1009BE}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x86 = Debug|x86
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {838EA2DE-A108-4213-8409-7F562F1009BE}.Debug|x86.ActiveCfg = Debug|x86
- {838EA2DE-A108-4213-8409-7F562F1009BE}.Debug|x86.Build.0 = Debug|x86
- {838EA2DE-A108-4213-8409-7F562F1009BE}.Release|x86.ActiveCfg = Release|x86
- {838EA2DE-A108-4213-8409-7F562F1009BE}.Release|x86.Build.0 = Release|x86
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/tools/AddToChangelog/AddToChangelog/AddToChangelog.csproj b/tools/AddToChangelog/AddToChangelog/AddToChangelog.csproj
deleted file mode 100644
index cb18329318f..00000000000
--- a/tools/AddToChangelog/AddToChangelog/AddToChangelog.csproj
+++ /dev/null
@@ -1,140 +0,0 @@
-
-
-
- Debug
- x86
- 8.0.30703
- 2.0
- {838EA2DE-A108-4213-8409-7F562F1009BE}
- WinExe
- Properties
- AddToChangelog
- AddToChangelog
- v4.0
- Client
- 512
- publish\
- true
- Disk
- false
- Foreground
- 7
- Days
- false
- false
- true
- 0
- 1.0.0.%2a
- false
- false
- true
-
-
- x86
- true
- full
- false
- bin\Debug\
- DEBUG;TRACE
- prompt
- 4
-
-
- x86
- pdbonly
- true
- bin\Release\
- TRACE
- prompt
- 4
-
-
- changelog.ico
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Form
-
-
- Form1.cs
-
-
-
-
- Form1.cs
-
-
- ResXFileCodeGenerator
- Resources.Designer.cs
- Designer
-
-
- True
- Resources.resx
-
-
- SettingsSingleFileGenerator
- Settings.Designer.cs
-
-
- True
- Settings.settings
- True
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- False
- Microsoft .NET Framework 4 Client Profile %28x86 and x64%29
- true
-
-
- False
- .NET Framework 3.5 SP1 Client Profile
- false
-
-
- False
- .NET Framework 3.5 SP1
- false
-
-
- False
- Windows Installer 3.1
- true
-
-
-
-
-
\ No newline at end of file
diff --git a/tools/AddToChangelog/AddToChangelog/Form1.Designer.cs b/tools/AddToChangelog/AddToChangelog/Form1.Designer.cs
deleted file mode 100644
index 63b3b0771db..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Form1.Designer.cs
+++ /dev/null
@@ -1,263 +0,0 @@
-namespace AddToChangelog
-{
- partial class MainForm
- {
- ///
- /// Required designer variable.
- ///
- private System.ComponentModel.IContainer components = null;
-
- ///
- /// Clean up any resources being used.
- ///
- /// true if managed resources should be disposed; otherwise, false.
- protected override void Dispose(bool disposing)
- {
- if (disposing && (components != null))
- {
- components.Dispose();
- }
- base.Dispose(disposing);
- }
-
- #region Windows Form Designer generated code
-
- ///
- /// Required method for Designer support - do not modify
- /// the contents of this method with the code editor.
- ///
- private void InitializeComponent()
- {
- System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
- this.label1 = new System.Windows.Forms.Label();
- this.label2 = new System.Windows.Forms.Label();
- this.authorBox = new System.Windows.Forms.TextBox();
- this.label3 = new System.Windows.Forms.Label();
- this.dateBox = new System.Windows.Forms.MaskedTextBox();
- this.dropdownBox = new System.Windows.Forms.ComboBox();
- this.getButton = new System.Windows.Forms.Button();
- this.addButton = new System.Windows.Forms.Button();
- this.resultsBox = new System.Windows.Forms.TextBox();
- this.addLineButton = new System.Windows.Forms.Button();
- this.addLineBox = new System.Windows.Forms.TextBox();
- this.listBox = new System.Windows.Forms.TextBox();
- this.saveButton = new System.Windows.Forms.Button();
- this.editBox = new System.Windows.Forms.TextBox();
- this.reloadButton = new System.Windows.Forms.Button();
- this.pictureBox = new System.Windows.Forms.PictureBox();
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).BeginInit();
- this.SuspendLayout();
- //
- // label1
- //
- this.label1.AutoSize = true;
- this.label1.Location = new System.Drawing.Point(20, 46);
- this.label1.Name = "label1";
- this.label1.Size = new System.Drawing.Size(33, 13);
- this.label1.TabIndex = 10;
- this.label1.Text = "Date:";
- //
- // label2
- //
- this.label2.AutoSize = true;
- this.label2.Location = new System.Drawing.Point(20, 21);
- this.label2.Name = "label2";
- this.label2.Size = new System.Drawing.Size(41, 13);
- this.label2.TabIndex = 11;
- this.label2.Text = "Author:";
- //
- // authorBox
- //
- this.authorBox.Location = new System.Drawing.Point(67, 18);
- this.authorBox.Name = "authorBox";
- this.authorBox.Size = new System.Drawing.Size(154, 20);
- this.authorBox.TabIndex = 1;
- //
- // label3
- //
- this.label3.AutoSize = true;
- this.label3.Location = new System.Drawing.Point(330, 21);
- this.label3.Name = "label3";
- this.label3.Size = new System.Drawing.Size(68, 13);
- this.label3.TabIndex = 12;
- this.label3.Text = "Add change:";
- //
- // dateBox
- //
- this.dateBox.Location = new System.Drawing.Point(67, 43);
- this.dateBox.Mask = "00/00/0000";
- this.dateBox.Name = "dateBox";
- this.dateBox.Size = new System.Drawing.Size(79, 20);
- this.dateBox.TabIndex = 2;
- this.dateBox.ValidatingType = typeof(System.DateTime);
- //
- // dropdownBox
- //
- this.dropdownBox.DisplayMember = "\"";
- this.dropdownBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
- this.dropdownBox.FormattingEnabled = true;
- this.dropdownBox.Items.AddRange(new object[] {
- "Added feature",
- "Removed feature",
- "Bugfix",
- "Work in progress",
- "Tweak",
- "Experimental feature",
- "Added icon",
- "Removed icon",
- "Added sound",
- "Removed sound"});
- this.dropdownBox.Location = new System.Drawing.Point(856, 17);
- this.dropdownBox.MaxDropDownItems = 10;
- this.dropdownBox.Name = "dropdownBox";
- this.dropdownBox.Size = new System.Drawing.Size(121, 21);
- this.dropdownBox.TabIndex = 7;
- this.dropdownBox.SelectedIndexChanged += new System.EventHandler(this.dropdownBox_SelectedIndexChanged);
- //
- // getButton
- //
- this.getButton.Location = new System.Drawing.Point(17, 70);
- this.getButton.Name = "getButton";
- this.getButton.Size = new System.Drawing.Size(69, 21);
- this.getButton.TabIndex = 3;
- this.getButton.Text = "Get HTML";
- this.getButton.UseVisualStyleBackColor = true;
- this.getButton.Click += new System.EventHandler(this.getButton_Click);
- //
- // addButton
- //
- this.addButton.Location = new System.Drawing.Point(92, 70);
- this.addButton.Name = "addButton";
- this.addButton.Size = new System.Drawing.Size(69, 21);
- this.addButton.TabIndex = 4;
- this.addButton.Text = "Lazy Add";
- this.addButton.UseVisualStyleBackColor = true;
- this.addButton.Click += new System.EventHandler(this.addButton_Click);
- //
- // resultsBox
- //
- this.resultsBox.Location = new System.Drawing.Point(11, 101);
- this.resultsBox.Multiline = true;
- this.resultsBox.Name = "resultsBox";
- this.resultsBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.resultsBox.Size = new System.Drawing.Size(318, 356);
- this.resultsBox.TabIndex = 10;
- //
- // addLineButton
- //
- this.addLineButton.Location = new System.Drawing.Point(983, 17);
- this.addLineButton.Name = "addLineButton";
- this.addLineButton.Size = new System.Drawing.Size(21, 21);
- this.addLineButton.TabIndex = 8;
- this.addLineButton.Text = "+";
- this.addLineButton.UseVisualStyleBackColor = true;
- this.addLineButton.Click += new System.EventHandler(this.addLineButton_Click);
- //
- // addLineBox
- //
- this.addLineBox.Location = new System.Drawing.Point(404, 18);
- this.addLineBox.Name = "addLineBox";
- this.addLineBox.Size = new System.Drawing.Size(415, 20);
- this.addLineBox.TabIndex = 6;
- //
- // listBox
- //
- this.listBox.Location = new System.Drawing.Point(335, 46);
- this.listBox.Multiline = true;
- this.listBox.Name = "listBox";
- this.listBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.listBox.Size = new System.Drawing.Size(669, 49);
- this.listBox.TabIndex = 9;
- //
- // saveButton
- //
- this.saveButton.Location = new System.Drawing.Point(260, 70);
- this.saveButton.Name = "saveButton";
- this.saveButton.Size = new System.Drawing.Size(69, 21);
- this.saveButton.TabIndex = 5;
- this.saveButton.Text = "Save";
- this.saveButton.UseVisualStyleBackColor = true;
- this.saveButton.Click += new System.EventHandler(this.saveButton_Click);
- //
- // editBox
- //
- this.editBox.Location = new System.Drawing.Point(335, 101);
- this.editBox.MaxLength = 9999999;
- this.editBox.Multiline = true;
- this.editBox.Name = "editBox";
- this.editBox.ScrollBars = System.Windows.Forms.ScrollBars.Vertical;
- this.editBox.Size = new System.Drawing.Size(669, 356);
- this.editBox.TabIndex = 13;
- //
- // reloadButton
- //
- this.reloadButton.Location = new System.Drawing.Point(185, 70);
- this.reloadButton.Name = "reloadButton";
- this.reloadButton.Size = new System.Drawing.Size(69, 21);
- this.reloadButton.TabIndex = 14;
- this.reloadButton.Text = "Reload";
- this.reloadButton.UseVisualStyleBackColor = true;
- this.reloadButton.Click += new System.EventHandler(this.reloadButton_Click);
- //
- // pictureBox
- //
- this.pictureBox.Location = new System.Drawing.Point(834, 20);
- this.pictureBox.Name = "pictureBox";
- this.pictureBox.Size = new System.Drawing.Size(16, 16);
- this.pictureBox.TabIndex = 15;
- this.pictureBox.TabStop = false;
- //
- // MainForm
- //
- this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
- this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
- this.BackColor = System.Drawing.SystemColors.ControlLightLight;
- this.ClientSize = new System.Drawing.Size(1016, 469);
- this.Controls.Add(this.pictureBox);
- this.Controls.Add(this.reloadButton);
- this.Controls.Add(this.editBox);
- this.Controls.Add(this.saveButton);
- this.Controls.Add(this.listBox);
- this.Controls.Add(this.addLineBox);
- this.Controls.Add(this.addLineButton);
- this.Controls.Add(this.resultsBox);
- this.Controls.Add(this.addButton);
- this.Controls.Add(this.getButton);
- this.Controls.Add(this.dropdownBox);
- this.Controls.Add(this.dateBox);
- this.Controls.Add(this.label3);
- this.Controls.Add(this.authorBox);
- this.Controls.Add(this.label2);
- this.Controls.Add(this.label1);
- this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
- this.Name = "MainForm";
- this.Text = "Add To Changelog";
- this.Load += new System.EventHandler(this.MainForm_Load);
- this.Shown += new System.EventHandler(this.MainForm_Shown);
- ((System.ComponentModel.ISupportInitialize)(this.pictureBox)).EndInit();
- this.ResumeLayout(false);
- this.PerformLayout();
-
- }
-
- #endregion
-
- private System.Windows.Forms.Label label1;
- private System.Windows.Forms.Label label2;
- private System.Windows.Forms.TextBox authorBox;
- private System.Windows.Forms.Label label3;
- private System.Windows.Forms.MaskedTextBox dateBox;
- private System.Windows.Forms.ComboBox dropdownBox;
- private System.Windows.Forms.Button getButton;
- private System.Windows.Forms.Button addButton;
- private System.Windows.Forms.TextBox resultsBox;
- private System.Windows.Forms.Button addLineButton;
- private System.Windows.Forms.TextBox addLineBox;
- private System.Windows.Forms.TextBox listBox;
- private System.Windows.Forms.Button saveButton;
- private System.Windows.Forms.TextBox editBox;
- private System.Windows.Forms.Button reloadButton;
- private System.Windows.Forms.PictureBox pictureBox;
- }
-}
-
diff --git a/tools/AddToChangelog/AddToChangelog/Form1.cs b/tools/AddToChangelog/AddToChangelog/Form1.cs
deleted file mode 100644
index 567c1fb3e50..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Form1.cs
+++ /dev/null
@@ -1,268 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Windows.Forms;
-using System.IO;
-using System.Reflection;
-
-namespace AddToChangelog
-{
- public partial class MainForm : Form
- {
-
- public string changelogPath = "changelog.html";
- public string changelogMarker = "#ADDTOCHANGELOGMARKER#";
- public string longDateFormat = "d MMMM yyyy";
- public string shortDateFormat = "ddMMyyyy";
-
- public Dictionary ItemList = new Dictionary()
- {
- { "Added feature", "rscadd" },
- { "Removed feature", "rscdel" },
- { "Bugfix", "bugfix" },
- { "Work in progress", "wip" },
- { "Tweak", "tweak" },
- { "Experimental feature", "experiment" },
- { "Added icon", "imageadd" },
- { "Removed icon", "imagedel" },
- { "Added sound", "soundadd" },
- { "Removed sound", "sounddel" }
- };
-
- public Dictionary ImageList = new Dictionary();
-
- public MainForm()
- {
- InitializeComponent();
- this.dropdownBox.SelectedIndex = 0;
- this.dateBox.Text = DateTime.Now.ToString(shortDateFormat);
- this.listBox.Text = "# Enter your logs in the text box above and it'll be parsed into here. You can use 'Get HTML' to format it for the changelog. You can also use Lazy Add to automatically add the logs to the changelog, no effort needed (just remember to save)! Below is the changelog, you can edit and save it from here to easily fix mistakes. Save will save the changelog below, reload will undo any unsaved changes.";
- }
-
- public void SaveChangelog()
- {
- DialogResult dialogResult = MessageBox.Show("Are you sure?", "Confirm", MessageBoxButtons.YesNo);
- if (dialogResult == DialogResult.Yes)
- {
- try
- {
- File.WriteAllText(changelogPath, editBox.Text);
- }
- catch
- {
- MessageBox.Show("Could not find '" + changelogPath + "'. Please place me on the same folder as " + changelogPath + ".");
- }
- }
- }
-
- public void ScrollToMarker()
- {
- int selection = editBox.Text.IndexOf(changelogMarker);
- if (selection > 0)
- {
- // Hacky way to scroll the edit text box to the beginning of the changelog entries
- this.ActiveControl = editBox;
- this.Refresh();
- editBox.SelectionStart = editBox.Text.Length - 1;
- editBox.SelectionLength = 0;
- editBox.ScrollToCaret();
- editBox.SelectionStart = selection - 2;
- editBox.ScrollToCaret();
- }
- }
-
- // Load up the changelog
-
- public void ReadChangelog()
- {
- try
- {
- string changelog = File.ReadAllText(changelogPath);
- editBox.Text = changelog;
- ScrollToMarker();
- }
- catch (Exception e)
- {
- MessageBox.Show("Could not find '" + changelogPath + "'. Please place me on the same folder as " + changelogPath + "." + e);
- }
- }
-
- // Get the log notes
-
- public string GetHTMLLines()
- {
- StringReader stringReader = new StringReader(listBox.Text);
- string html = "";
- string aLine = "";
-
- do
- {
- aLine = stringReader.ReadLine();
- if (aLine != null)
- {
- // remove < and >
- if (aLine.StartsWith("<") && aLine.Contains(">"))
- {
- string tag = aLine.Substring(1, aLine.IndexOf(">") - 1); // extract the tag
- aLine = aLine.Substring(aLine.IndexOf(">") + 1); // now remove the tag from the line
- aLine = "\t\t- " + aLine + "
\r\n"; // give html
- }
- else
- {
- aLine = "\t\t- " + aLine + "
\r\n";
- }
-
- html += aLine;
- }
-
- } while (aLine != null);
-
- return html;
- }
-
- private void addLineButton_Click(object sender, EventArgs e)
- {
- if (addLineBox.Text == "")
- {
- return;
- }
-
- string textAdd = this.addLineBox.Text;
- string listItem = this.dropdownBox.SelectedItem.ToString();
- string itemClass = ItemList[listItem];
-
- if (itemClass == null)
- {
- return;
- }
-
- if (listBox.Text.StartsWith("#"))
- {
- listBox.Text = "";
- }
-
- listBox.Text += "<" + itemClass + ">" + textAdd + "\r\n";
- addLineBox.Text = "";
-
- }
-
- private void getButton_Click(object sender, EventArgs e)
- {
- if (listBox.Text != "")
- {
- DateTime dateTime;
- if (!DateTime.TryParse(dateBox.Text, out dateTime))
- {
- MessageBox.Show("Invalid date time.");
- return;
- }
-
- resultsBox.Text = "\r\n";
- resultsBox.Text += "\t " + dateTime.ToString(longDateFormat) + "\r\n";
- resultsBox.Text += "\t " + authorBox.Text + " updated:\r\n";
- resultsBox.Text += "\t \r\n";
- resultsBox.Text += GetHTMLLines();
- resultsBox.Text += "\t \r\n";
- resultsBox.Text += " ";
- }
- }
-
- // Automatically add to changelog
-
- private void addButton_Click(object sender, EventArgs e)
- {
- if (resultsBox.Text == "")
- {
- getButton_Click(this, EventArgs.Empty);
- }
-
- if (resultsBox.Text == "")
- {
- return;
- }
-
- string html = resultsBox.Text;
-
- string[] changelogFile = null;
-
- changelogFile = Regex.Split(editBox.Text, "\r\n");
-
- if (changelogFile != null)
- {
- bool foundMarker = false;
- for (int i = 0; i < changelogFile.Length; i++)
- {
- if (foundMarker == false)
- {
- string line = changelogFile[i];
- if (line.Contains(changelogMarker))
- {
- line += "\r\n\r\n";
- line += resultsBox.Text;
- line += "\r\n";
- changelogFile[i] = line;
- foundMarker = true;
- break;
- }
- }
- }
-
- if (foundMarker == false)
- {
- MessageBox.Show("Could not find '#ADDTOCHANGELOGMARKER#' in '" + changelogPath + "'. Please place one above where the changelog entries start, inside a comment.");
- }
- else
- {
- editBox.Text = String.Join("\r\n", changelogFile);
- ScrollToMarker();
- }
-
- }
- }
-
- private void saveButton_Click(object sender, EventArgs e)
- {
- SaveChangelog();
- }
-
- private void reloadButton_Click(object sender, EventArgs e)
- {
- ReadChangelog();
- }
-
- private void MainForm_Shown(object sender, EventArgs e)
- {
- ReadChangelog();
- }
-
- private void dropdownBox_SelectedIndexChanged(object sender, EventArgs e)
- {
- // Change the image to reflect the drop down box selection
- if (ImageList.Count > 0)
- {
- string value = ItemList[dropdownBox.SelectedItem.ToString()];
- pictureBox.Image = ImageList[value];
- }
- }
-
- private void MainForm_Load(object sender, EventArgs e)
- {
- // Get our embedded images. Use our dictionaries to help.
- foreach (string value in ItemList.Values)
- {
- Assembly myAssembly = Assembly.GetExecutingAssembly();
- Stream myStream = myAssembly.GetManifestResourceStream("AddToChangelog." + value + ".png");
- Bitmap image = new Bitmap(myStream);
-
- ImageList.Add(value, image);
- }
-
- pictureBox.Image = ImageList["rscadd"];
- }
- }
-}
diff --git a/tools/AddToChangelog/AddToChangelog/Form1.resx b/tools/AddToChangelog/AddToChangelog/Form1.resx
deleted file mode 100644
index 56c5b622846..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Form1.resx
+++ /dev/null
@@ -1,1906 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
-
-
- AAABAAYAgIAAAAEAIAAoCAEAZgAAAEhIAAABACAAiFQAAI4IAQAwMAAAAQAgAKglAAAWXQEAICAAAAEA
- IACoEAAAvoIBABgYAAABACAAiAkAAGaTAQAQEAAAAQAgAGgEAADunAEAKAAAAIAAAAAAAQAAAQAgAAAA
- AAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAEAAAACAAA
- AA4AAAARAAAAEwAAABYAAAAaAAAAHQAAACEAAAAiAAAAJQAAACgAAAAqAAAALAAAAC4AAAAwAAAAMgAA
- ADQAAAA1AAAANgAAADcAAAA4AAAAOQAAADoAAAA6AAAAOwAAADwAAAA8AAAAPQAAAD0AAAA+AAAAPgAA
- AD4AAAA+AAAAPgAAAD4AAAA+AAAAPQAAAD0AAAA8AAAAPAAAADsAAAA6AAAAOgAAADkAAAA4AAAANwAA
- ADYAAAA1AAAANAAAADEAAAAwAAAALQAAACwAAAApAAAAJwAAACUAAAAiAAAAIAAAAB0AAAAZAAAAFQAA
- ABMAAAARAAAADQAAAAcAAAADAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAADAAAACQAAABEAAAAWAAAAGgAAAB0AAAAgAAAAIgAAACUAAAAoAAAAKgAA
- ACwAAAAvAAAAMgAAADUAAAA3AAAAOAAAADkAAAA7AAAAPAAAADwAAAA+AAAAPwAAAEAAAABBAAAAQgAA
- AEMAAABEAAAARQAAAEYAAABHAAAARwAAAEgAAABJAAAASQAAAEkAAABJAAAASwAAAE0AAABLAAAASQAA
- AEcAAABFAAAARAAAAEMAAABCAAAAQQAAAEAAAAA/AAAAPgAAADwAAAA8AAAAOgAAADkAAAA4AAAANwAA
- ADQAAAAxAAAALwAAACwAAAAqAAAAJwAAACQAAAAhAAAAHwAAAB0AAAAZAAAAFgAAABAAAAAIAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAACgAA
- ABAAAAAVAAAAGAAAABsAAAAeAAAAIQAAACQAAAAnAAAAKQAAACsAAAAuAAAAMAAAADMAAAA0AAAANgAA
- ADgAAAA4AAAAOQAAADsAAAA8AAAAPgAAAEAAAABDAAAAQwAAAEIAAABCAAAAQgAAAEMAAABEAAAARAAA
- AEUAAABFAAAARgAAAE0AAABbAAAAYwAAAGEAAABcAAAAVgAAAFEAAABMAAAARwAAAEIAAABAAAAAPQAA
- ADwAAAA7AAAAOQAAADgAAAA3AAAANgAAADQAAAAyAAAAMAAAAC0AAAArAAAAKQAAACYAAAAjAAAAIQAA
- AB0AAAAaAAAAGAAAABUAAAAPAAAACgAAAAQAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAwAAAAQAAAAGAAAACQAAAA4AAAARAAAAEwAA
- ABQAAAAWAAAAGAAAABsAAAAeAAAAIgAAACUAAAAmAAAAKAAAACoAAAAsAAAAMAAAADYAAABAAAAASgAA
- AFIAAABRAAAAQgAAADYAAAA0AAAAMwAAADMAAAA0AAAANAAAADQAAAA6AAAAVAwMDHoxMTGULi4ukBoa
- GoYGBgZ6AAAAcQAAAGYAAABaAAAAUAAAAEYAAAA5AAAALwAAACsAAAApAAAAKAAAACYAAAAkAAAAIgAA
- AB8AAAAbAAAAGAAAABYAAAAUAAAAEgAAABEAAAAPAAAACgAAAAYAAAAEAAAAAgAAAAEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAACAAAABAAAAAUAAAAGAAAABwAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAJAAAACgAAAAwAAAAPAAAAEQAA
- ABIAAAATAAAAGwAAACgAAAA2AAAASAcHB1sXFxdyJCQkghkZGXkAAABPAAAAKgAAABYAAAATAAAAEgAA
- ABEAAAASAAAAEwAAACcAAABXaGhoqaysrOKqqqrhn5+f2ZKSks6AgIC+ZmZmqUZGRpEnJyd7FhYWZwAA
- AEgAAAAmAAAAEAAAAAsAAAALAAAACgAAAAoAAAAJAAAABwAAAAQAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAwAAAAYAAAAKAAAADQAA
- ABAAAAASAAAAEwAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAVAAAAGwAAACgAAAA9AAAAVRgYGG5CQkKPbm5ur5iY
- mM2xsbHkkpKSyBwcHHEAAAA2AAAADgAAAAYAAAADAAAAAQAAAAAAAAABAAAAIRsbG2WgoKDNzs7O/8/P
- z//Pz8//zs7O/srKyvrFxcX1vr6+7q+vr9yUlJTANDQ0eQAAADIAAAAHAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAGAAAADAAAABQAAAAbAAAAIQAAACUAAAAnAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKQAA
- ADoAAABTCwsLbTMzM4xpaWmxlpaW0rW1tevGxsb5ysrK/MvLy/6/v7/zZmZmrQcHB14AAAAnAAAAEAAA
- AAkAAAAEAAAAAgAAAAkAAAA2TU1Niry8vOrQ0ND/09PT/9TU1P/U1NT/1NTU/9TU1P/T09P/0NDQ/cbG
- xvVfX1+ZBAQEPQAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABAAAAAkAAAAUAAAAIAAA
- ACwAAAA1AAAAPAAAAD4AAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABIAAAAaigoKJh5eXnHrKys6MXFxfjMzMz+y8vL/8nJ
- yf/Kysr/ysrK/8zMzP6jo6PgLi4ukQAAAE4AAAAjAAAAEgAAAA0AAAAJAAAAFhEREVKGhoa0y8vL+dLS
- 0v/U1NT/1dXV/9bW1v/W1tb/19fX/9jY2P/W1tb/ycnJ+WNjY50EBAQ/AAAACgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAEAAAAFAAAADQAAABsAAAAsAAAAPAAAAEoAAABS////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- /////////////////////////////////////////////////////////////////////////////+zs
- 7P+xsbH/p6en/8jIyP/Kysr/ycnJ/8jIyP/IyMj/ycnJ/8rKyv/Ly8v/zMzM/8vLy/+pqan/h4eH2x8f
- H1kAAAA4AAAAMwAAADIAAAA8NDQ0dbKyst3Pz8/+1NTU/9XV1f/W1tb/19fX/9jY2P/Z2dn/2dnZ/9jY
- 2P/Kysr5ZGRkngMDA0AAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAMAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAYAAAAQAAAAIQAA
- ADYAAABKAAAAWwAAAGX/////+Pj4//f39//4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v//Pz8//z8
- /P/8/Pz//Pz8//z8/P/8/Pz//f39//39/f/9/f3//f39//39/f/9/f3//f39//7+/v/+/v7//v7+//7+
- /v/+/v7//v7+//7+/v/+/v7//f39//z8/P/7+/v/6enp/7CwsP+oqKj/ysrK/8jIyP/Hx8f/yMjI/8nJ
- yf/Kysr/y8vL/8vLy//MzMz/z8/P/7y8vP+VlZX/iYmJ+TU1NZEmJiaBKysrfy8vL4FycnKqxsbG9NLS
- 0v/V1dX/1tbW/9fX1//Y2Nj/2NjY/9ra2v/a2tr/2NjY/8vLy/lqamqhCwsLQQAAAAoAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAAdAAAALAAAACcAAAASAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAABwAAABIAAAAlAAAAPAAAAFIAAABlAAAAcP/////29vb/9vb2//f3
- 9//39/f/9/f3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/+/v7//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9/f3//f39//39
- /f/9/f3//f39//39/f/9/f3//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9/f3//Pz8//v7
- +//x8fH/u7u7/6Wlpf/IyMj/ysrK/8nJyf/Kysr/ysrK/8vLy//MzMz/zc3N/83Nzf/Pz8//zc3N/7S0
- tP+qqqr/ra2t/q6urumzs7Pltra25sPDw/HS0tL/1dXV/9fX1//Y2Nj/2NjY/9nZ2f/a2tr/29vb/9vb
- 2//a2tr/zMzM+W5ubqILCwtBAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAKQwMDFNKSkp/Ly8vcAMD
- A0MAAAAdAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEwAA
- ACcAAAA/AAAAVgAAAGoAAAB2//////b29v/29vb/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+fn5//n5
- +f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8
- /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39/f/9/f3//f39//39/f/9/f3//f39//39/f/+/v7//v7+//7+
- /v/+/v7//v7+//7+/v/+/v7//f39//39/f/8/Pz/+/v7//X19f/Gxsb/oaGh/8bGxv/MzMz/ysrK/8rK
- yv/Ly8v/zMzM/83Nzf/Ozs7/zs7O/8/Pz//Q0ND/0dHR/9HR0f/S0tL/0tLS/9LS0v/T09P/09PT/9TU
- 1P/X19f/2NjY/9nZ2f/Z2dn/2tra/9vb2//c3Nz/3Nzc/9ra2v/MzMz5e3t7rA4ODlYAAAAwAAAAFgAA
- AAgAAAADAAAADwAAADIhISFidnZ2qLW1teCjo6PPXl5ekQwMDFMAAAApAAAACwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9vb2//b2
- 9v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//f39//39
- /f/9/f3//f39//39/f/9/f3//f39//7+/v/+/v7//v7+//n5+f/7+/v//v7+//7+/v/9/f3//f39//z8
- /P/7+/v/9vb2/8/Pz/+enp7/xMTE/83Nzf/Ly8v/zMzM/8zMzP/Nzc3/zs7O/8/Pz//Pz8//0NDQ/9HR
- 0f/S0tL/09PT/9PT0//U1NT/1dXV/9XV1f/W1tb/19fX/9jY2P/Z2dn/2tra/9ra2v/b29v/3Nzc/93d
- 3f/e3t7/29vb/9LS0v2ysrLbeXl5pjw8PHcDAwNQAAAAMQAAACYAAAA8KSkpb5KSkrrFxcXv1tbW/9XV
- 1f27u7vlgYGBqhUVFWEAAAAxAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////29vb/9/f2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7
- +//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v7+//j4
- +P/n5+f/0tLS/9XV1f/p6en/9/f3//39/f/8/Pz//Pz8//v7+//09PT/0NDQ/5ubm//AwMD/zs7O/8zM
- zP/Nzc3/zc3N/87Ozv/Pz8//0NDQ/9DQ0P/R0dH/0tLS/9PT0//U1NT/1NTU/9XV1f/W1tb/19fX/9fX
- 1//Y2Nj/2dnZ/9ra2v/b29v/29vb/9zc3P/d3d3/3t7e/97e3v/e3t7/2tra/9bW1v7MzMz2srKy24GB
- ga9AQEB6DQ0NX0lJSYOcnJzIzc3N99vb2/7l5eX/5OTk/9ra2v7Hx8fwiIiItTExMW0AAAA1AAAADwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////b2
- 9v/39/b/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39
- /f/9/f3//f39//39/f/9/f3//f39//7+/v/6+vr/4eHh/7e3t/+hoaH/oqKi/7Gxsf/S0tL/7e3t//n5
- +f/8/Pz/7Ozs/9LS0v+vr6//nJyc/8PDw//R0dH/zs7O/87Ozv/Pz8//z8/P/9DQ0P/R0dH/0tLS/9PT
- 0//T09P/1NTU/9XV1f/V1dX/1tbW/9fX1//Y2Nj/2dnZ/9ra2v/a2tr/29vb/9zc3P/d3d3/3t7e/97e
- 3v/f39//4ODg/+Hh4f/h4eH/4ODg/93d3f/Y2Nj/z8/P+bOzs9yTk5O8sLCw2dTU1P3f39//5+fn/+rq
- 6v/r6+v/6enp/9/f3//Pz8/3m5ubwzAwMHMAAAA4AAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9vb2//f39v/39/f/9/f3//f39//4+Pj/+Pj4//j4
- +P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//v7
- +//7+/v//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//f39//39/f/9/f3//f39//39/f/9/f3/+/v7/+Tk
- 5P+3t7f/pKSk/7y8vP+9vb3/qamp/6SkpP+5ubn/2NjY/+Pj4//CwsL/pKSk/6Wlpf++vr7/0dHR/9DQ
- 0P/Ozs7/z8/P/8/Pz//Q0ND/0dHR/9LS0v/S0tL/09PT/9TU1P/V1dX/1tbW/9fX1//Y2Nj/2NjY/9nZ
- 2f/a2tr/29vb/9vb2//c3Nz/3d3d/93d3f/e3t7/39/f/+Dg4P/h4eH/4uLi/+Li4v/j4+P/5OTk/+Tk
- 5P/f39//2dnZ/dLS0vrX19f94uLi/+np6f/q6ur/6+vr/+zs7P/s7Oz/6+vr/+Hh4f7Pz8/3nZ2dxjw8
- PHYAAAA4AAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///29vb/9/f2//f39//5+fn/5OTk/97e3v/39/f/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8
- /P/9/f3//f39//39/f/9/f3//f39//39/f/p6en/ubm5/6SkpP++vr7/0tLS/9HR0f/Pz8//urq6/6Sk
- pP+kpKT/q6ur/56env+wsLD/zMzM/9HR0f/Pz8//z8/P/8/Pz//Pz8//0NDQ/9HR0f/S0tL/09PT/9PT
- 0//V1dX/1dXV/9bW1v/X19f/2NjY/9jY2P/Z2dn/2tra/9ra2v/c3Nz/3Nzc/93d3f/e3t7/3t7e/+Dg
- 4P/g4OD/4eHh/+Li4v/j4+P/4+Pj/+Tk5P/l5eX/5ubm/+bm5v/l5eX/4+Pj/+Xl5f/q6ur/6urq/+vr
- 6//s7Oz/7e3t/+3t7f/u7u7/7u7u/+Pj4/7U1NT8lZWVvRsbG14AAAAbAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////b29v/39/b/9/f3/9TU1P+Ojo7/oKCg/8LC
- wv/39/f/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7
- +//7+/v/+/v7//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39/f/9/f3//f39//39/f/8/Pz/6+vr/8DA
- wP+jo6P/vr6+/9DQ0P/Kysr/yMjI/8zMzP/Pz8//ycnJ/7S0tP+rq6v/vr6+/9HR0f/Q0ND/z8/P/8/P
- z//Pz8//0NDQ/9HR0f/S0tL/09PT/9PT0//U1NT/1dXV/9bW1v/W1tb/19fX/9jY2P/Z2dn/2tra/9ra
- 2v/b29v/3Nzc/93d3f/d3d3/3t7e/9/f3//g4OD/4eHh/+Hh4f/i4uL/4+Pj/+Tk5P/l5eX/5eXl/+bm
- 5v/n5+f/6Ojo/+jo6P/p6en/6urq/+vr6//s7Oz/7Ozs/+3t7f/u7u7/7+/v/+/v7//w8PD/6urq/9fX
- 1/2enp7EICAgXwAAABsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////9vb2//f39v/39/f/s7Oz/3x8fP+Ojo7/paWl//Ly8v/5+fn/+fn5//n5+f/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v//Pz8//z8/P/8/Pz//Pz8//z8
- /P/8/Pz//f39//39/f/9/f3//f39//Dw8P/Hx8f/oqKi/7a2tv/R0dH/y8vL/8fHx//Hx8f/ycnJ/8vL
- y//Pz8//09PT/9TU1P/T09P/0NDQ/87Ozv/Pz8//0NDQ/9DQ0P/R0dH/0tLS/9PT0//T09P/1NTU/9XV
- 1f/W1tb/19fX/9fX1//Y2Nj/2tra/9vb2//d3d3/3d3d/9/f3//f39//4ODg/+Dg4P/h4eH/4eHh/+Hh
- 4f/i4uL/4uLi/+Pj4//k5OT/5eXl/+Xl5f/m5ub/5+fn/+jo6P/p6en/6enp/+rq6v/r6+v/7Ozs/+3t
- 7f/t7e3/7u7u/+/v7//w8PD/8PDw//Dw8P/i4uL/xcXF62NjY5IAAAA/AAAADwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////29vb/9vb2//f39//h4eH/hYWF/4KC
- gv/BwcH/9fX1//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7
- +//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9/f3//f39//39/f/5+fn/1NTU/6Ki
- ov+zs7P/0dHR/8zMzP/IyMj/yMjI/8nJyf/Kysr/ysrK/8vLy//Ozs7/0dHR/8/Pz//Pz8//z8/P/9DQ
- 0P/R0dH/0tLS/9LS0v/T09P/1NTU/9XV1f/V1dX/1tbW/9fX1//a2tr/3t7e/+Pj4//n5+f/6urq/+zs
- 7P/s7Oz/7u7u/+3t7f/s7Oz/7Ozs/+vr6//p6en/6Ojo/+fn5//l5eX/5eXl/+Xl5f/m5ub/5+fn/+jo
- 6P/o6Oj/6enp/+rq6v/r6+v/7Ozs/+zs7P/t7e3/7u7u/+/v7//w8PD/8PDw//Hx8f/x8fH/6urq/9bW
- 1vqTk5O8ICAgXgAAAB8AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4//////b29v/29vb/9/f3//f39//v7+//7Ozs//X19f/4+Pj/+fn5//n5+f/5+fn/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/8/Pz//Pz8//z8
- /P/8/Pz//Pz8//39/f/9/f3//Pz8/+Tk5P+wsLD/qKio/83Nzf/Pz8//yMjI/8jIyP/Jycn/ysrK/8vL
- y//Ly8v/zMzM/83Nzf/Ozs7/z8/P/9DQ0P/Q0ND/0dHR/9LS0v/S0tL/09PT/9TU1P/V1dX/1tbW/9jY
- 2P/d3d3/5OTk/+vr6//v7+//8fDw/+zp5//q6OX/6Ofm/+bk4//j4uD/4+Hg/+Ti4f/l5OP/5+bm/+no
- 6P/t7ez/7+/v/+3t7f/r6+v/6urq/+jo6P/o6Oj/6enp/+np6f/q6ur/6+vr/+vr6//t7e3/7e3t/+7u
- 7v/v7+//8PDw//Dw8P/x8fH/8vLy//Dw8P/h4eH+vb294UhISIIAAAA3AAAACgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9vb2//b29v/39/f/9/f3//f3
- 9//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7
- +//7+/v/+/v7//v7+//7+/v//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//f39//39/f/6+vr/z8/P/6Sk
- pP/ExMT/0tLS/8rKyv/Jycn/ysrK/8rKyv/Ly8v/zMzM/83Nzf/Nzc3/zs7O/8/Pz//Q0ND/0NDQ/9HR
- 0f/S0tL/09PT/9TU1P/U1NT/1dXV/9fX1//e3t7/6Ojo//Hx8f/z8/P/7erp/9fMwP/Fsp//uKeV/7Gk
- lv+upZz/q6Ob/6ujmv+ropr/qqGa/6uim/+vqKH/uLKs/8bCvv/T0M3/4N/e/+7t7f/v7+//7e3t/+zs
- 7P/r6+v/6+vr/+vr6//s7Oz/7e3t/+7u7v/u7u7/7+/v//Dw8P/w8PD/8fHx//Ly8v/z8/P/6Ojo/9TU
- 1PiIiIivBgYGUwAAABkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////29vb/9vb2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8
- /P/8/Pz//Pz8//z8/P/9/f3//f39//r6+v/Pz8//pKSk/8HBwf/S0tL/zMzM/8rKyv/Kysr/y8vL/8zM
- zP/Nzc3/zc3N/87Ozv/Pz8//0NDQ/9HR0f/S0tL/0tLS/9PT0//U1NT/1dXV/9bW1v/c3Nz/5+fn//Ly
- 8v/y8fD/49vU/8Oumf+kgl//kmlB/5V1Vf+pmIj/tayi/7qxqf+8tKz/vbat/721rf+8s6v/ubCp/7Wt
- pf+vpp7/qJ+W/6Wbkv+up5//v7m0/9TSz//o5+b/7+/v/+/v7//t7e3/7e3t/+3t7f/t7e3/7u7u/+/v
- 7//w8PD/8fHx//Ly8v/z8/P/8/Pz//Pz8//j4+P/xMTE6VhYWJAAAABGAAAAEgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////b29v/29vb/9/f3//f3
- 9//39/f/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9/f3/+/v7/+Hh
- 4f+wsLD/pqam/8jIyP/S0tL/zMzM/8zMzP/MzMz/zc3N/87Ozv/Pz8//z8/P/9DQ0P/R0dH/0tLS/9PT
- 0//T09P/1NTU/9XV1f/X19f/4+Pj//Ly8v/4+Pj/6uTe/7+nkv+UaT7/gUkS/41eL/+rknn/wrmv/8zE
- vf/TzMX/2NHL/9nUzv/b1c//2tTP/9jQyv/PwbP/xrKd/7yhh/+yknP/qIZl/6GCY/+cgmj/n4t3/7Gk
- l//Rzcj/7ezs//Hx8f/x8fH/7+/v/+/v7//w8PD/8fHx//Hx8f/y8vL/8/Pz//T09P/09PT/9fX1/+vr
- 6//Y2Nj7mpqavhISEmIAAAAoAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////9vb2//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v//Pz8//z8
- /P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39/f/9/f3/+fn5/9zc3P+rq6v/q6ur/8/Pz//S0tL/zc3N/87O
- zv/Ozs7/z8/P/9DQ0P/Q0ND/0dHR/9LS0v/T09P/1NTU/9TU1P/V1dX/2tra/+jo6P/4+Pj/9PLv/868
- q/+ackn/f0YN/4RGCf+fcUX/wK2a/9HKwv/b1c//4NvW/+Tg3P/p5eH/6+fj/+fe1f/YwKj/xppt/7d7
- P/+sZR7/pVgL/6JUB/+eUgb/mlAG/5NNB/+OTg//ilYi/5FpQ/+wmYP/2tLM//Hx8P/y8vL/8PDw//Hx
- 8f/x8fH/8vLy//Pz8//09PT/9fX1//X19f/29vb/9fX1/+fn5/7Nzc3venp6pg8PD1AAAAAXAAAAAwAA
- AAIAAAAEAAAACwAAAA8AAAAPAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////29vb/9vb2//f3
- 9v/39/f/9/f3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//f39//39
- /f/9/f3/9/f3/9bW1v+mpqb/sLCw/9LS0v/S0tL/z8/P/8/Pz//Q0ND/0dHR/9HR0f/S0tL/09PT/9TU
- 1P/V1dX/1dXV/9vb2//r6+v/+Pj4/+vm4P+1mHz/g04Z/38/AP+MSQj/rIJY/87Asv/c1tH/4t7a/+jl
- 4v/t6+n/8e/u//Pw7f/m0bz/y5hk/7VrH/+tWAL/q1UA/6tUAP+qVAD/qFQA/6dTAP+kUgD/oU8A/5tM
- AP+SSAD/iEMA/4FECf+TaUD/wrCd/+7t6//z8/P/8/Pz//Pz8//z8/P/9PT0//X19f/19fX/9vb2//f3
- 9//4+Pj/9fX1/+Pj4/68vLzgUVFRhAAAADoAAAAiAAAAKAAAADEAAAA8AAAARgAAAEUAAAApAAAACwAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4//////b29v/29vb/9/f2//j4+P/w8PD/6urq//r6+v/4+Pj/+fn4//n5
- +f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7
- +//8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3/8fHx/8bGxv+jo6P/vLy8/9jY
- 2P/S0tL/0NDQ/9HR0f/S0tL/09PT/9TU1P/U1NT/1dXV/9bW1v/b29v/7Ozs//j4+P/g1sz/o35b/4FI
- D/+EQQD/kUoF/69/UP/Sw7X/4d3Z/+jl4//u7ev/8/Lx//f19f/07+r/3b2d/8KCQv+1aBr/tGQV/7Rk
- Ff+zYhL/sl8O/7BcCf+uWQT/rVcB/6xVAP+pVAD/plIA/6JQAP+aTAD/j0cA/4RCAv+JVSD/t52C/+rl
- 4P/19fX/9PT0//X19f/19fX/9vb2//f39//4+Pj/+Pj4//n5+f/6+vr/8vLy/93d3fudnZ3BJiYmcR0d
- HWdBQUF4Xl5einR0dJ2GhoaucHBwnxMTE1wAAAAhAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9vb2//b2
- 9v/39/b/4ODg/5SUlP+jo6P/ysrK//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//39
- /f/9/f3//f39//39/f/5+fn/09PT/6Ojo/+3t7f/2dnZ/9PT0//R0dH/0tLS/9PT0//U1NT/1dXV/9XV
- 1f/W1tb/2tra/+np6f/29vb/2MzB/5x0Tv97PgL/h0MA/5RKAP+vekX/1MW3/+Xi3//s6ur/8fHw//X1
- 9f/29vb/8uzm/9m0kP+9dzL/t2oe/7htIv+5byX/unIp/7pyKv+6cCf/uGwh/7VnGf+yYhH/sF0K/65Z
- BP+tVgH/q1QA/6ZTAP+fTwD/lEkA/4ZCAP+BRw7/ro9w/+fh2//29vb/9vb2//b29v/39/f/+Pj4//n5
- +f/5+fn/+vr6//v7+//6+vr/6+vr/9PT0/S2trbZt7e32cHBwePKysrr1dXV89zc3PvIyMjqYGBgkgQE
- BDwAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////29vb/9vb2//f39v+0tLT/f39//5GRkf+mpqb/8/Pz//j4
- +P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/wMDA/7CwsP/t7e3/rq6u/729
- vf/z8/P/s7Oz/8PDw//p6en/oqKi/8LCwv/8/Pz/s7Oz/9XV1f/29vb/sLCw//Dw8P9+fn7/oqKi/8rK
- yv/W1tb/0tLS/9LS0v/T09P/1NTU/9XV1f/W1tb/19fX/9nZ2f/m5ub/8/Pz/9vQxv+ZcUr/fkIG/4pE
- AP+WSgD/qGgo/9G6pf/n5eP/7e3s//Hx8f/z8/P/8/Pz//Lv7P/Uq4T/uGwi/7NiEf+0YxT/tWYX/7Vo
- G/+3ax//uG4j/7pwJ/+7cyv/u3Iq/7lvJf+3ah7/tGUW/7JgD/+wXAj/rloF/6tWA/+jUgD/lkoA/4hD
- AP+FTBP/sZN0/+3o5P/4+Pj/+fn5//n5+f/5+fn/+vr6//v7+//7+/v//Pz8//39/f/4+Pj/6enp/+Li
- 4v7m5ub+6enp/+3t7f/w8PD/7u7u/93d3fuhoaHFGBgYXAAAABwAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////b2
- 9v/29vb/9vb2/9fX1/92dnb/f39//7a2tv/09PT/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v+wsLD/+vr6/8jIyP+rq6v/9/f3/8HBwf+srKz//Pz8/8bGxv+xsbH/7u7u/8LC
- wv+2trb/5OTk/8/Pz/+YmJj/z8/P/3V1df+srKz/19fX/9TU1P/T09P/09PT/9XV1f/V1dX/1tbW/9fX
- 1//Y2Nj/4uLi//Ly8v/j3Nf/o4Jf/3s/A/+JRAD/lksA/6NYDf/Fn3n/5uPg/+3t7f/v7+//8PDw//Hx
- 8f/w7uz/272g/7dtI/+vWgX/sFwH/7BdCv+xYA3/smIS/7RmF/+2aRz/uG0i/7pyKf+8dS//vXgz/713
- Mv+7cyv/uG4j/7VpG/+0ZBT/smEQ/69eDP+nVgf/mEwC/4hEAP+CSA//vKKI//X08v/6+vr/+vr6//r6
- +v/7+/v//Pz8//z8/P/9/f3//f39//z8/P/5+fn/9/f3//n5+f/6+vr/+fn5//n5+f/39/f/6Ojo/sjI
- yOhLS0uAAAAALwAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9vb2//b29v/29vb/9vb2/+Xl5f/Z2dn/8fHx//j4
- +P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6/83Nzf/k5OT/8/Pz/5mZ
- mf/5+fn/9PT0/5+fn//6+vr/+fn5/6Ghof/x8fH/y8vL/6ampv/s7Oz/zs7O/5iYmP+jo6P/h4eH/8nJ
- yf/Y2Nj/09PT/9TU1P/V1dX/1tbW/9bW1v/X19f/2NjY/93d3f/s7Oz/7uzr/6qNcf98Qwr/h0IA/5ZK
- AP+fTwD/uH9H/+DVyv/r6ur/7Ozs/+7u7v/u7u7/8PDw/+XWx/+/fz//rlcB/65XAP+uVwH/rlgD/7Bb
- B/+xXw3/s2MT/7VnGf+3ax//unAm/7x0Lf++eTT/wH06/8B+O/++ezf/vHYw/7pxJ/+3bCD/tmkc/7Rm
- Gv+rXhL/mVEI/4ZDAP+MWCX/yrek//r5+f/7+/v/+/v7//z8/P/9/f3//f39//39/f/8/Pz//Pz8//v7
- +//6+vr/+fn5//n5+f/4+Pj/9/f3//f39//u7u7/2dnZ+IaGhqsAAABIAAAAEQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///29vX/9vb2//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6/83Nzf/Jycn/pKSk/+fn5//7+/v/4+Pj//v7+//5+fn/0dHR/5iY
- mP+Kior/f39//7CwsP+vr6//j4+P/5ubm/+cnJz/2dnZ/9bW1v/U1NT/1dXV/9XV1f/W1tb/19fX/9jY
- 2P/a2tr/5eXl/+/u7v/Juan/gk4c/4NAAP+TSQD/n08A/6pdEf/QspT/6Ojn/+rq6v/r6+v/7Ozs/+3t
- 7f/t6+n/0KZ+/7BcCP+uVwD/rlcC/69ZBP+vWgb/sF0J/7FfDP+zYhH/tWYX/7ZpHP+5biP/u3Mr/713
- Mv+/fDj/wYA//8KDRP/CgUH/v3w4/7x1Lv+5byX/uGsg/7ZpHv+rYRj/llEM/4RFBf+YbEH/5dzT//z8
- /P/8/Pz//f39//39/f/9/f3//Pz8//v7+//7+/v/+vr6//r6+v/5+fn/+Pj4//f39//39/f/9vb2//Pz
- 8//i4uL+rq6uzSMjI2QAAAAdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////b29f/29vb/9vb2//f39v/39/f/9/f3//j4
- 9//4+Pj/+Pj4//n5+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7
- +//Z2dn/0NDQ//v7+//u7u7/y8vL/+3t7f+5ubn/o6Oj/7S0tP+3t7f/t7e3/7e3t/+4uLj/vb29/9TU
- 1P/a2tr/1dXV/9XV1f/W1tb/19fX/9jY2P/Z2dn/2dnZ/9/f3//t7e3/497Z/5x3Uv98PgD/jkYA/51O
- AP+lUwH/u3w//+DVy//n5+f/6enp/+rq6v/r6+v/7Ozs/+TYzP+8ejj/rlgB/69ZBP+wWwf/sV4K/7Ff
- Df+yYQ//s2MS/7RkFf+1Zhj/tmkc/7htIf+6cSj/vHUu/714M/+/fDj/wX8//8KCQv/BgUD/v3s3/7t0
- LP+4bCH/tWga/7JlF/+mXRX/klAN/4BFCf+3mn3/+ff2//39/f/9/f3//Pz8//z8/P/7+/v/+vr6//r6
- +v/5+fn/+Pj4//f39//39/f/9vb2//b29v/19fX/9PT0/+jo6P/Ly8voUFBQhQAAADIAAAAHAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////9vb1//b29v/29vb/9/f2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/8PDw/7i4uP+5ubn/+/v7//v7+//7+/v/39/f/6ur
- q/+9vb3/29vb/9nZ2f/Y2Nj/2NjY/9nZ2f/Y2Nj/29vb/9fX1//W1tb/1tbW/9fX1//Y2Nj/2dnZ/9nZ
- 2f/b29v/5ubm/+zr6/+4oYv/e0IL/4dDAP+YTAD/o1EA/6xbCf/MpX//5OHf/+bm5v/o6Oj/6enp/+rq
- 6v/q6ej/2b6j/7NkFf+vWwf/sV0K/7FfDf+zYhD/s2MT/7RlFv+1Zxn/tmkc/7dqHv+3ax//t2sg/7hs
- If+4biP/uXAn/7tzLP+9dzH/vns3/8B9O//Afjv/vXgz/7lwJ/+2aRv/s2MU/61fEf+eVg//ikoK/49e
- Lf/bzsL/+/v7//z8/P/7+/v/+/v7//r6+v/5+fn/+fn5//j4+P/39/f/9/f3//b29v/19fX/9fX1//T0
- 9P/z8/P/7e3t/9vb2/h6enqjCwsLRAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////29vX/9vb2//b29v/29vb/9/f3//f3
- 9//39/f/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/+/v7//n5+f/7+/v/+/v7//f39//S0tL/oaGh/8zMzP/Z2dn/09PT/9PT0//U1NT/1dXV/9XV
- 1f/W1tb/1tbW/9fX1//X19f/2NjY/9nZ2f/a2tr/2tra/9/f3//q6ur/3NXP/5NpQf99PgD/kUcA/59P
- AP+oUwD/s2cc/9fEsf/k5OT/5eXl/+bm5v/o6Oj/6enp/+fk4P/Nonf/smEQ/7FfDP+yYRD/s2MT/7Rl
- Fv+1Zxn/tmkc/7dqHv+3ax//t2sf/7dqHf+2aBv/tmca/7ZnGf+2aBv/t2sf/7lvJP+7cyr/vHYw/756
- Nv++ejb/u3Qt/7dsIP+zZBT/sF8N/6ZYCv+UTgj/hEkN/7GSdP/z8e7/+vr6//r6+v/6+vr/+fn5//n5
- +f/4+Pj/9/f3//f39//29vb/9fX1//X19f/09PT/8/Pz//Ly8v/s7Oz/3t7e/J2dnb4eHh5cAAAAHgAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4//////b29f/29vb/9vb2//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//7+/v/9fX1/8XF
- xf+ioqL/1dXV/9fX1//S0tL/09PT/9TU1P/V1dX/1dXV/9bW1v/X19f/2NjY/9jY2P/Z2dn/2tra/9vb
- 2//c3Nz/4+Pj/+np6P+/rpz/f0kU/4ZDAP+ZSwD/pVEA/6xVAP+8fT//3NPK/+Pj4//k5OT/5eXl/+bm
- 5v/o6Oj/5uDb/8SOWP+zYxL/s2IS/7RlFf+1Zxn/tmkc/7dqHv+3ax//t2oe/7dpHP+2aBr/tWcY/7Rl
- Fv+0ZBT/tGMT/7NjEv+zYxP/tGYX/7ZqHf+4biP/unIq/712MP+9dzH/unAn/7VnGf+xXw3/q1gG/5xQ
- BP+IRgP/kF4u/+DWzP/5+fn/+fn5//n5+f/4+Pj/9/f3//f39//29vb/9vb2//X19f/09PT/9PT0//Pz
- 8//w8PD/6+vr/+Pj4/3Q0NDuhISEqxUVFVMAAAAVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9fX1//b29f/29vb/9vb2//j4
- 9//19fX/+fn5//j49//4+Pj/+Pj4//n5+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+/v7//v7+//7+/v/+/v7//v7+//y8vL/ubm5/62trf/Z2dn/1tbW/9PT0//U1NT/1dXV/9XV
- 1f/W1tb/19fX/9jY2P/Z2dn/2dnZ/9ra2v/b29v/3Nzc/97e3v/m5ub/4+Hf/5x7WP97PgH/jkcA/6BP
- AP+pVAD/rVYA/8OQXv/f29j/4uLi/+Pj4//l5eX/5ubm/+fn5//k39n/wYZL/7RlFv+0Zhf/tmgb/7dq
- Hv+3ax//t2sf/7dpHP+2aBr/tWcY/7VlFv+0ZBT/s2IS/7JhEP+yYA//sV8N/7FeC/+xXgz/s2EQ/7Rl
- F/+3ah7/uW4k/7tzK/+7cyv/t2wg/7NjEv+tWQb/oVEA/49IAP+DRgv/v6eP//f39//4+Pj/+Pj4//f3
- 9//39/f/9vb2//X19f/19fX/9PT0//Pz8//y8vL/7e3t/+bm5v7Y2Nj1tLS003V1dZwaGhpgAAAALwAA
- AAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////19fX/9vb1//b29v/n5+f/nZ2d/6ampv/W1tb/9/f3//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7/+jo
- 6P+urq7/ubm5/9nZ2f/V1dX/1NTU/9XV1f/W1tb/19fX/9jY2P/Y2Nj/2dnZ/9ra2v/b29v/29vb/9zc
- 3P/d3d3/4ODg/+fn5//RyMD/iFot/4FAAP+WSgD/pVIA/6xWAP+uWQP/x592/9/f3//h4eH/4uLi/+Tk
- 5P/l5eX/5ubm/+Te2f/CiE7/tmkb/7dpHP+3ah//t2sf/7ZpHf+2aBv/tWYZ/7RlFv+0ZBT/s2IS/7Jh
- EP+xXw7/sV4M/7BdCv+wXAj/r1sG/69aBf+vWgX/sF0K/7JhEf+1Zxn/uG0h/7pyKf+5cSf/tmkb/7Fg
- Dv+nVQP/l0sA/4RBAP+lf1r/7urn//f39//39/f/9vb2//b29v/19fX/9PT0//T09P/z8/P/8PDw/+jo
- 6P/g4OD7wsLC3oeHh6o8PDxyBwcHRQAAACIAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////X19f/29vX/9vb2/7a2
- tv+CgoL/lJSU/6qqqv/z8/P/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//7+/v/39/f/6Wlpf/CwsL/3Nzc/9XV1f/V1dX/1tbW/9fX
- 1//Y2Nj/2dnZ/9nZ2f/a2tr/29vb/9zc3P/d3d3/3d3d/97e3v/i4uL/5ubm/7ilkv97RA3/h0MA/5tO
- AP+pVAD/rVYA/69dCv/KqIX/39/f/+Dg4P/i4uL/4+Pj/+Xl5f/m5ub/5N/a/8eUYP+4bCH/uGwg/7dq
- Hv+2aRz/tmcZ/7VmF/+0ZBX/s2MS/7JiEP+yYA7/sV8M/7BdCv+wXAj/r1sG/69aBP+uWAL/rlcA/65X
- AP+uWAL/r1sH/7JhEf+1aBr/uG0j/7pyKf+5byX/tWYY/6xbCv+cTwH/ikQA/49eLf/az8X/9fX1//b2
- 9v/19fX/9fX1//T09P/09PT/8/Pz//Ly8v/t7e3/4uLi/rGxsc9NTU2BBgYGTgAAACsAAAASAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////9fX1//X19f/29vb/zs7O/3Jycv+CgoL/r6+v//Ly8v/4+Pj/+Pj4//j4
- +P/5+fj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//n5+f/l5eX/8PDw//v7+//7+/v/+/v7//v7
- +//Y2Nj/pKSk/8rKyv/d3d3/1tbW/9bW1v/X19f/2NjY/9nZ2f/a2tr/2tra/9vb2//c3Nz/3d3d/97e
- 3v/e3t7/39/f/+Pj4//j4+L/qY5z/3g7AP+MRQD/oFAA/6tVAP+tVgD/sWAQ/8yuj//e3t7/39/f/+Hh
- 4f/j4+P/5OTk/+Xl5f/k4d7/zqd//7lvJf+3ah7/tmgb/7VnGf+0ZRb/tGQU/7NiEv+yYQ//sV8N/7Fe
- C/+wXQn/r1sG/69ZBP+uWAL/rlcB/65XAP+uVwD/rlcA/65XAP+uWAL/sF0J/7NjE/+2aRz/uW8l/7py
- Kv+4bCL/sGIT/6FTBv+PRgD/gUYL/8q3pf/09PP/9PT0//X19f/09PT/8/Pz//Ly8v/y8vL/8fHx/+3t
- 7f/h4eH5g4ODqQAAAEoAAAAdAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////19fX/9fX1//b2
- 9f/z8/P/09PT/8PDw//r6+v/9/f3//j49//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6
- +v/6+vr/3d3d/6ysrP/Q0ND/zs7O/+fn5//7+/v/2dnZ/6CgoP+Li4v/zMzM/97e3v/X19f/19fX/9jY
- 2P/Z2dn/2tra/9ra2v/b29v/3Nzc/93d3f/e3t7/3t7e/9/f3//g4OD/4+Pj/93a1/+belr/ezwA/5FH
- AP+kUQD/rVYA/65XAP+yYhP/zbCT/93d3f/f39//4ODg/+Li4v/j4+P/5eXl/+Xk4//XvqT/unIq/7Zo
- G/+1Zhj/tGUW/7NjE/+zYhH/smAO/7FfDP+wXQn/sFsH/69aBf+uWAL/rlcB/65XAP+uVwD/rlcA/65X
- AP+uVwD/rlcA/65XAP+uWQP/sV8M/7RlFf+3ax//unEo/7pxKP+0aBz/plkN/5RKAv+BQQT/vKSM//Dv
- 7v/z8/P/9PT0//Pz8//y8vL/8vLy//Hx8f/w8PD/7u7u/+Tk5P6QkJCyBgYGSQAAABAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4//////X19f/19fX/9vb1//b29v/29vb/9vb2//f39//39/f/9/f3//j4
- +P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/s7Oz/tra2//r6+v/7+/v/y8vL/+vr
- 6/+tra3/0NDQ/6SkpP+8vLz/3t7e/+Dg4P/d3d3/29vb/9vb2//b29v/3Nzc/93d3f/d3d3/3t7e/9/f
- 3//g4OD/4eHh/+Hh4f/i4uL/1tHM/49nQP9+PgD/lEkA/6dTAP+tVgD/rlcB/7JjFP/MrpD/3Nzc/9/f
- 3//g4OD/4eHh/+Pj4//k5OT/5eXl/97Sxv/Ag0b/tWYY/7RkFf+zYxP/smEQ/7JfDf+xXgv/sFwI/69a
- Bv+uWQT/rlcB/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+vWgX/smAP/7Vm
- GP+4bSL/unIq/7duJP+qXxX/mE8H/4RDA/+sjGz/6ufl//Ly8v/z8/P/8vLy//Hx8f/x8fH/8PDw/+/v
- 7//u7u7/5eXl/6CgoL0YGBhTAAAAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9fX1//X1
- 9f/29vX/9vb2//b29v/29vb/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+fn4//n5+f/5+fn/+fn5//r6
- +v/6+vr/+vr6//r6+v+pqan/+vr6//r6+v/09PT/t7e3/8fHx/++vr7/s7Oz/4WFhf+kpKT/u7u7/9XV
- 1f/e3t7/39/f/97e3v/d3d3/3t7e/97e3v/f39//4ODg/+Hh4f/h4eH/4uLi/+Li4v/RysP/g1Yp/4A/
- AP+WSgD/qVQA/65XAf+vWQT/smIS/8qpiP/c3Nz/3t7e/9/f3//h4eH/4uLi/+Pj4//j4+P/4+De/8yj
- e/+1Zxr/s2MS/7JhEP+xXw3/sV0K/7BcCP+vWgb/rlkD/65YAf+uVwD/rlcA/65XAP+uVwD/rlcA/65X
- AP+uVwD/rlcA/65XAP+uVwD/rlcA/65YAv+wXQn/s2MT/7ZpHf+5cCf/uXEp/6xlHf+bVA7/hkUE/6B6
- Vf/m49//8fHx//Ly8v/x8fH/8PDw//Dw8P/v7+//7u7u/+3t7f/m5ub/qKiowx8fH1gAAAAWAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////19fT/9fX1//X19f/29vX/9vb2//b29v/39/b/9/f3//f3
- 9//4+Pf/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/4ODg/6mpqf/4+Pj/+vr6//Dw
- 8P+srKz/+/v7/8/Pz/+bm5v/lpaW/6+vr/+VlZX/nJyc/7CwsP/Jycn/4+Pj/+Dg4P/f39//39/f/+Dg
- 4P/h4eH/4uLi/+Li4v/i4uL/4eHh/83Fvf99Th3/gUAA/5dLAP+qVQD/rlgD/7BbB/+yXw7/yKB6/9vb
- 2//d3d3/39/f/+Hh4f/h4eH/4uLi/+Li4v/j4+P/2ci3/719Pf+yYRD/smAN/7FdCv+wXAj/r1oG/65Y
- A/+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65a
- Bf+yYA7/tWYY/7htI/+5cir/rmgi/51YE/+JSAj/mnJJ/+Tf2//v7+//8fHx//Dw8P/v7+//7+/v/+7u
- 7v/u7u7/7Ozs/+fn5/+tra3GHh4eYwAAACkAAAANAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////X1
- 9P/19fX/9fX1//b29f/29vb/9vb2//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/MzMz/t7e3/+Hh4f/b29v/qqqq/9/f3//7+/v/+/v7//n5+f/09PT/6Ojo/9XV
- 1f+/v7//qamp/6Wlpf/b29v/4uLi/+Dg4P/g4OD/4eHh/+Li4v/j4+P/5OTk/+Pj4//f39//y8K6/3tJ
- GP+CQAD/mEwA/6tXA/+vWwb/sF0K/7JgD//DlGb/2dbT/9zc3P/e3t7/39/f/+Dg4P/g4OD/4eHh/+Li
- 4v/g3dr/zqyJ/7VqHv+xXQr/sFwI/69aBf+uWAP/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65X
- AP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlgB/7BdCf+zYxT/tmoe/7hwJ/+vayb/nlwZ/4tL
- Df+ZcUj/4t7Z/+7u7v/w8PD/7+/v/+7u7v/u7u7/7e3t/+zs7P/r6+v/5+fn/8fHx+BkZGSVHBwcYgMD
- A0MAAAAsAAAAFwAAAAkAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9fX0//X19f/19fX/9vb1//b29v/29vb/9vb2//f3
- 9//39/f/9/f3//j49//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/19fX/4ODg/+Dg
- 4P/09PT/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+Pj4/+3t7f/Jycn/o6Oj/9HR0f/j4+P/4eHh/+Hh
- 4f/i4uL/4+Pj/+Tk5P/l5eX/5OTk/9/f3//Lw7v/fU0d/4FAAP+YTQH/q1gG/7BdCf+xXw3/s2IS/76F
- TP/Wzsb/3Nzc/93d3f/e3t7/3t7e/9/f3//g4OD/4ODg/+Hg4P/e19H/xJFf/7FfDP+vWgX/rlgD/65X
- AP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65X
- AP+uVwD/r1oF/7JgD/+1Zxr/tm0j/65rJ/+fXx7/jE4R/5x1T//i3dn/7Ozs/+/v7//v7+//7u7u/+3t
- 7f/t7e3/7Ozs/+vr6//o6Oj/5eXl/dHR0eivr6/Kenp6oD8/P3gVFRVVAAAAOAAAABkAAAADAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///09PT/9fX0//X19f/19fX/+fn4//r6+v/39/f/9/f2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7+//7+/v/+/v7//v7
- +//7+/v/+fn5/9XV1f+mpqb/0dHR/+Tk5P/i4uL/4uLi/+Pj4//k5OT/5eXl/+bm5v/l5eX/3t7e/8zG
- vv+CVyv/fz8A/5dOBP+rWgj/sV4M/7JhEP+0ZBX/unUx/9PCsv/b29r/3Nzc/9zc3P/d3d3/3d3d/97e
- 3v/f39//39/f/+Dg4P/ZzL7/xJJf/7ZqHf+2aBv/t2od/7drH/+3bCD/t2oe/7ZoG/+1Zhf/s2MT/7Ff
- DP+vWgX/rlcA/65XAP+uVwD/rlcA/65XAP+uVwD/rlcA/65XAP+uWAP/sV4M/7RlFv+zaR//q2kl/59g
- If+MURX/ooBe/+Le2//r6+v/7u7u/+3t7f/t7e3/7Ozs/+zs7P/r6+v/6urq/+np6f/o6Oj/5ubm/uTk
- 5Pzc3Nz0yMjI36SkpLxnZ2eKAAAAPwAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////T09P/19fT/9fX1/+/v7/+urq7/rq6u/+Dg
- 4P/29vb/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+fn4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/2dnZ/6ioqP/Nzc3/5eXl/+Pj
- 4//k5OT/5eXl/+Xl5f/m5ub/5+fn/+bm5v/e3t7/z8rG/4xmQf99PgH/lU0F/6laCv+xYA7/s2MT/7Vl
- F/+3bSP/y6qK/9nX1f/b29v/29vb/9zc3P/d3d3/3t7e/+Dg4P/i4uL/5eXl/+bm5v/i18z/0amA/8iQ
- V//IjlT/yY9W/8mQV//IjlX/x4xR/8aJTf/Ehkf/wYA//756Nv+7cyv/t2of/7JhEP+vWwb/rlgC/65X
- AP+uVwD/rlcA/65XAf+wXAn/s2IT/7BmG/+oZSP/nWAj/4xSGv+vlHn/5OLg/+vr6//t7e3/7e3t/+zs
- 7P/r6+v/6+vr/+rq6v/p6en/6enp/+jo6P/n5+f/5+fn/+bm5v7n5+f+5+fn/qysrMcGBgZVAAAAFgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////9PT0//X19P/19fX/ubm5/4WFhf+Xl5f/rq6u//T09P/39/b/9/f3//f39//39/f/+Pj4//j4
- +P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/7+/v/+/v7//v7
- +//7+/v/+/v7//r6+v/c3Nz/qqqq/8fHx//m5ub/5OTk/+Xl5f/m5ub/5ubm/+fn5//o6Oj/5+fn/9/f
- 3//T0c//mXpc/3o+A/+RTAf/p1oM/7JiEf+0ZBX/tWca/7drIP/BjFb/1c3G/9nZ2f/a2tr/3Nzc/+Dg
- 4P/j4+P/5eXl/+fn5//o6Oj/6enp/+rq6v/m4Nr/28Cm/8+fcP/LlV7/y5Ve/8uUXf/Lk1z/ypJa/8mQ
- WP/Jj1X/x41S/8aKTv/EhUj/wYA//714Mv+4bCD/smAO/65YAv+uVwD/rlcA/69aBv+xYBD/rGMY/6Ri
- H/+aXiP/iVMd/7yok//l5eT/6urq/+zs7P/s7Oz/6+vr/+rq6v/q6ur/6enp/+jo6P/o6Oj/5+fn/+bm
- 5v/l5eX/5eXl/+Xl5f/m5ub9pqamwgAAAFMAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////09PT/9PT0//X19P/ExMT/cnJy/4WF
- hf+oqKj/8fHx//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fj/+fn5//n5+f/5+fn/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//4+Pj/5+fn/8bGxv+goKD/wMDA/+jo
- 6P/l5eX/5ubm/+fn5//o6Oj/6Ojo/+np6f/q6ur/4eHh/9bW1f+iinL/dT0F/4xKCP+jWQ7/sWIT/7Vm
- F/+2aRz/t2sf/7p1MP/Ot5//2tra/9/f3//i4uL/4+Pj/+Xl5f/m5ub/5+fn/+jo6P/p6en/6urq/+vq
- 6v/p5uT/4tHA/9ezj//Om2j/zZhk/8yXYv/LlV//y5Rc/8qSWv/JkFb/x41S/8aLT//FiEv/xIRG/8KB
- QP++eTT/uG0h/7JhD/+vWAP/r1kE/65eDf+oXxX/oF4c/5ZcIf+MXCz/xrip/+Xl5f/p6en/6+vr/+vr
- 6//q6ur/6enp/+np6f/o6Oj/5+fn/+fn5//m5ub/5eXl/+Xl5f/k5OT/5OTk/+Tk5Pqampq1AAAASwAA
- ABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4//////T09P/09PT/9fX0//Dw8P+9vb3/r6+u/+Dg4P/29vb/9vb2//f39v/39/f/9/f3//j4
- 9//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/7+/v/9nZ2f+4uLj/pKSk/7Kysv/Y2Nj/6Ojo/+fn5//n5+f/6Ojo/+np6f/p6en/6urq/+vr
- 6//j4+P/19fX/7Khkf95Rxb/hkcJ/55XD/+uYRX/tWca/7dqHv+4bCD/unEo/8mgdf/c2dX/4eHh/+Li
- 4v/j4+P/5OTk/+Xl5f/m5ub/5+fn/+jo6P/p6en/6+vr/+zs7P/s7Oz/593T/9Wthf/PnGr/zpto/82Z
- Zf/Ml2H/y5Re/8qSWv/Jj1X/x4xR/8aJTf/Fhkj/w4ND/8GAPv+/fDn/vHYv/7dpHf+xXgz/q1sM/6Nb
- E/+bWxr/klkf/5hxSf/RycL/5eXl/+np6f/q6ur/6urq/+np6f/o6Oj/6Ojo/+fn5//m5ub/5ubm/+Xl
- 5f/k5OT/5OTk/+Pj4//k5OT/4ODg9oiIiKQAAABBAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////9PT0//T09P/09PT/9fX0//X1
- 9f/19fX/9vb1//b29v/29vb/9/f2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//n5+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/9fX1/+Li4v/BwcH/qamp/6qqqv/Hx8f/4eHh/+jo
- 6P/o6Oj/6Ojo/+jo6P/p6en/6urq/+rq6v/r6+v/7Ozs/+jo6P/Y2Nj/xb+4/4VeNf+ARQr/mFQQ/6lf
- Ff+0Zxv/t2wg/7t0LP/Afz3/x49X/9bBrP/f3t3/4eHh/+Li4v/j4+P/5eXl/+bm5v/n5+f/6Ojo/+np
- 6f/r6+v/7Ozs/+3t7f/s6ef/3cKn/9Ghcv/Qnmz/z5tp/82ZZf/MlmH/y5Rc/8mQV//IjVL/xolN/8WG
- Sf/Dg0T/wYA+/798Of++eTT/vHQt/7VrIf+pYBX/n1kT/5dYGP+NVh//qIxv/97c2//l5eX/6urq/+np
- 6f/p6en/6Ojo/+fn5//n5+f/5ubm/+bm5v/l5eX/5OTk/+Pj4//j4+P/4uLi/+Tk5P/c3NzybW1tkAAA
- ADYAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////09PP/9PT0//T09P/19fT/9fX1//X19f/29vX/9vb2//b29v/29vb/9/f2//f3
- 9//39/f/+Pj3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/k5OT/tLS0/6Wlpf+7u7v/3Nzc/+jo6P/o6Oj/6Ojo/+jo6P/o6Oj/6enp/+rq6v/r6+v/6+vr/+zs
- 7P/t7e3/7Ozs/9zc3P/Qz83/mHxg/3pEDf+PTxD/o10X/7FmHv+6cyz/wH89/8ODRf/Ehkj/zKF2/9rP
- xv/g4OD/4eHh/+Li4v/k5OT/5eXl/+bm5v/n5+f/6enp/+rq6v/r6+v/7Ozs/+3t7f/l2Mr/1Kl+/9Gg
- cP/PnWv/zppm/8yXYv/LlF3/yZFY/8iNUv/GiU3/xIZI/8OCQ//Bfz3/v3s3/754Mv+7dC3/s24o/6hm
- I/+cWxr/klUX/4xaJ/+8qpn/4eHh/+bm5v/p6en/6enp/+jo6P/n5+f/5+fn/+bm5v/l5eX/5eXl/+Tk
- 5P/j4+P/4+Pj/+Li4v/i4uL/5eXl/9XV1elGRkZ7AAAAKwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////T08//09PT/9PT0//X1
- 9P/19fT/9fX1//X19f/29vX/9vb2//b29v/39/b/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+fn4//n5
- +f/5+fn/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/9vb2/9DQ0P+hoaH/y8vL/+fn5//o6Oj/5+fn/+jo
- 6P/o6Oj/6enp/+rq6v/q6ur/6+vr/+zs7P/t7e3/7e3t/+7u7v/u7u7/5OTk/9PS0v+1p5r/e0we/4dK
- EP+cWRf/rWgk/7t5N//BgD//woFB/8ODQ//FiU3/0K+O/93Z1P/f39//4eHh/+Li4v/k5OT/5eXl/+bm
- 5v/n5+f/6enp/+rq6v/r6+v/7e3t/+rk4P/auJb/0aBw/8+da//NmWX/zJZg/8qSW//Ij1X/x4tQ/8WH
- Sv/DhEX/wYFA/8B9Ov++eTX/vHYw/7dwKf+taCT/o2Qj/5ZbH/+MUxr/lm1F/9HKw//h4eH/5+fn/+jo
- 6P/o6Oj/5+fn/+bm5v/m5ub/5eXl/+Tk5P/k5OT/4+Pj/+Li4v/i4uL/4eHh/+Hh4f/l5eX9w8PD1yws
- LGcAAAAfAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////8/Pz//T08//09PT/9PT0//X19P/19fX/9fX1//b29f/29vb/9vb2//b2
- 9v/39/b/9/f3//f39//4+Pf/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6//r6
- +v/29vb/z8/P/6Ghof/Q0ND/6urq/+fn5//n5+f/6Ojo/+np6f/q6ur/6+vr/+vr6//s7Oz/7e3t/+7u
- 7v/u7u7/7+/v//Dw8P/s7Oz/2NjY/8jFwf+MbEv/fEUP/5JVGP+lZij/tXU1/757Ov/Afj3/woA//8OC
- Q//Fi1H/0raa/93a2P/f39//4eHh/+Li4v/j4+P/5eXl/+bm5v/o6Oj/6enp/+rq6v/r6+v/6+rq/97G
- rv/Qn27/zZpm/8yXYf/Kk1z/yZBX/8eMUf/FiUz/xIVG/8KBQf/Afjz/vno3/713Mf+5civ/sGok/6Zi
- H/+bXR//jFQc/4RSIf+ul4H/2tnY/+Li4v/o6Oj/6Ojo/+fn5//m5ub/5eXl/+Xl5f/k5OT/5OTk/+Xl
- 5f/k5OT/5OTk/+Pj4//i4uL/4+Pj/+bm5vujo6O6GxsbUwAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////z8/P/9PTz//T0
- 9P/09PT/9fX0//X19P/19fX/9fX1//b29f/29vb/9vb2//b29v/39/f/9/f3//f39//4+Pj/+Pj4//j4
- +P/4+Pj/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/i4uL/rKys/7+/v//r6+v/6Ojo/+jo
- 6P/p6en/6urq/+vr6//s7Oz/7Ozs/+3t7f/u7u7/7+/v/+/v7//w8PD/8fHx//Hx8f/h4eH/0NDQ/6ub
- i/96TB//hE0X/5ddJP+qay7/tnQz/7x6N//AfTv/wX89/8KBQP/GkFr/0rmf/9za1//f39//4ODg/+Hh
- 4f/j4+P/5OTk/+bm5v/n5+f/6Ojo/+np6f/q6ur/4tXI/9Chc//LlF7/yZJa/8iPVf/HjFD/xYlL/8SF
- Rv/CgUH/wH48/797N/+9dzL/unMs/7JsJv+oYx//nlwb/5BVGf+BTBf/jWdC/8jAuP/d3d3/5eXl/+fn
- 5//n5+f/5ubm/+Xl5f/k5OT/5OTk/+Tk5P/p6en/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/5eXl9nV1
- dZwEBAQ/AAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4//////Pz8//09PP/9PTz//T09P/29vb/+Pj3//X19f/19fX/9vb1//b2
- 9v/29vb/9vb2//f39v/39/f/9/f3//f39//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/5+fn/+vr6//r6
- +v/6+vr/+vr6/+zs7P+6urr/sbGx/+Xl5f/q6ur/6enp/+rq6v/r6+v/7Ozs/+3t7f/t7e3/7u7u/+/v
- 7//w8PD/8PDw//Hx8f/y8vL/8/Pz/+3t7f/X19f/x8TB/5R4Xf91RBT/h1Ec/5xgJf+rayv/tnIw/7x4
- NP+/ezf/wH05/8F+PP/Ei1L/0bac/9vW0f/e3t7/39/f/+Hh4f/i4uL/4+Pj/+Tk5P/l5eX/5ubm/+fn
- 5//k39r/0ah//8iOVf/Hi1D/xYlN/8SHSP/Dg0T/wYA//799Ov++ejb/vXcx/7lyK/+yayX/qWQe/59c
- Gf+TVBX/hUwU/35NHv+umob/2djX/+Dg4P/m5ub/5ubm/+bm5v/l5eX/5OTk/+Pj4//j4+P/5eXl/+np
- 6fu4uLjOjY2NrYqKiquKioqrioqKq4qKiquEhISiKioqZwAAACgAAAAEAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////8/Pz//Pz
- 8//09PP/8/Pz/7+/v/++vr7/6urp//b29v/19fX/9vb1//b29v/29vb/9vb2//f39//39/f/9/f3//j4
- 9//4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/9vb2/87Ozv+np6f/1dXV/+zs
- 7P/r6+v/7Ozs/+zs7P/t7e3/7u7u/+7u7v/v7+//8PDw//Hx8f/y8vL/8/Pz//Pz8//09PT/9PT0/+Xl
- 5f/Pz8//tauh/35ZNv93RBP/i1Mb/51fIv+raSf/tG8s/7l1L/+9dzL/vnk0/756Nv/Chkv/zKmF/9jP
- xf/c3Nz/3t7e/9/f3//g4OD/4eHh/+Lg3//g2dL/3tDD/9nCrP/NnnD/xYhM/8OERv/CgkL/wYA+/799
- Ov++ejb/vXcy/7x0Lf+4cCj/sWkj/6hiHP+fWxf/lFMS/4ZLD/97RRD/mXpc/83Hwv/b29v/4+Pj/+bm
- 5v/l5eX/5eXl/+Tk5P/j4+P/4+Pj/+Li4v/n5+f/19fX519fX4sAAABOAAAAQwAAAEIAAABCAAAAQgAA
- AD4AAAApAAAADQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////z8/L/8/Pz//T08//AwMD/iIiI/5qamv+zs7P/9PT0//X1
- 9f/29vX/9vb2//b29v/29vb/9/f2//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/5+fn/39/f/6enp/+/v7//6urq/+zs7P/s7Oz/7e3t/+7u7v/v7+//8PDw//Dw
- 8P/x8fH/8vLy//Pz8//09PT/9PT0//X19f/29vb/8vLy/9ra2v/Ix8b/oI17/3RJH/97RhL/jVIY/51d
- Hf+oZSL/sGsm/7ZwKf+6cyv/vHUt/7x2L/++fDj/xpZm/9G7pf/Y0sv/2dHJ/9bFtf/St5z/z6mF/8uc
- bv/Gjlf/w4VH/8KBQP/Afjz/wH06/797N/++eTT/vXcw/7t0Lf+5cCj/tWwk/69mH/+mXxn/nVkU/5NR
- D/+GSQr/ekEK/4deN/+/tav/19fX/+Dg4P/l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Li4v/i4uL/4+Pj/+np
- 6f2urq7FGxsbXgAAACIAAAAOAAAADgAAAA4AAAAOAAAADAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////Pz
- 8v/z8/P/8/Pz/7u7u/92dnb/iIiI/6ampv/w8O//9fX1//X19f/29vX/9vb2//b29v/29vb/9/f3//f3
- 9//39/f/+Pj3//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//n5+f/6+vr/+vr6//r6+v/v7+//vb29/6ur
- q//j4+P/7u7u/+7u7v/u7u7/7+/v//Dw8P/x8fH/8fHx//Ly8v/z8/P/9PT0//X19f/19fX/9vb2//f3
- 9//4+Pj/7e3t/9TU1P/HxcT/mIJs/24/Ef98RRD/jFAT/5lZGP+lYBz/q2Ue/7JpIP+2bSP/uG4k/7lw
- Jv+6cSj/vX08/8KNV//BiVD/v4FC/758Ov++eDP/vnk0/754M/+9eDP/vXgy/7x2MP+8dS7/u3Ms/7py
- Kf+5byX/tWwi/7BnHf+qYRn/olsU/5tWEP+STwz/hUYH/3k+BP98TR//rpyL/9bW1v/c3Nz/5OTk/+Xl
- 5f/k5OT/5OTk/+Pj4//i4uL/4eHh/+Hh4f/n5+f+3Nzc73FxcZYAAAA/AAAADQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////8/Py//Pz8v/z8/P/7Ozs/6enp/+enp7/1NTU//T0
- 8//19fX/9fX1//X19f/29vX/9vb2//b29v/39/b/9/f3//f39//39/f/+Pj3//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//n5+f/6+vr/+vr6//f39//S0tL/paWl/87Ozv/t7e3/7+/v/+/v7//u7u7/7e3t/+zs
- 7P/s7Oz/8fHx//T09P/19fX/9vb2//b29v/39/f/+Pj4//n5+f/5+fn/6enp/9DQ0P++urX/kXdd/3FC
- FP97Qw3/iUsQ/5VTEv+fWRT/pV4W/6thF/+wZBn/s2cb/7VpHP+2ah3/t2wh/7htIv+5biT/uW8l/7lv
- Jv+6cCb/unAm/7lvJv+5byX/uG4j/7htIf+2ayD/tGgd/7BlGv+qYBb/pFsS/55WD/+XUQv/jksH/4ND
- BP93PAL/fEwd/6qWgv/Qzsz/2dnZ/+Li4v/l5eX/5OTk/+Pj4//j4+P/4uLi/+Hh4f/h4eH/4+Pj/+rq
- 6vyxsbHJJycnZQAAACMAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///z8/L/8/Py//Pz8//z8/P/8/Py//Hx8f/09PT/9PT0//X19P/19fX/9fX1//b29f/29vb/9vb2//b2
- 9v/39/b/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+Pj4//n5+f/5+fn/+fn5//r6+v/6+vr/+vr6/+fn
- 5/+0tLT/s7Oz/+Li4v/i4uL/3t7e/9bW1v/Jycn/vb29/8rKyv/t7e3/8/Pz//b29v/39/f/9/f3//j4
- +P/5+fn/+vr6//v7+//5+fn/5OTk/83NzP/AvLj/kXdd/24/EP94QQv/hEcM/45NDP+XUg3/nlUN/6JY
- Dv+nWxD/ql0Q/61fEP+xYhP/s2MV/7RlF/+0Zhj/tWYZ/7VnGf+1Zhn/tGYY/7NmGP+xZBb/rmIV/6tf
- Ev+nXBD/o1gO/55VC/+YUAj/kksF/4lGAv9+PwH/dDoA/3lKG/+kjnj/0M7N/9bW1v/g4OD/5OTk/+Tk
- 5P/j4+P/4+Pj/+Li4v/h4eH/4ODg/+Hh4f/n5+f/6enp+Xt7e6QAAABHAAAAEwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////Ly8v/z8/L/8/Py//Pz8//z8/P/9PTz//T0
- 9P/09PT/9fX0//X19f/19fX/9fX1//b29f/29vb/9vb2//b29v/39/f/9/f3//f39//39/f/+Pj4//j4
- +P/4+Pj/+fn4//n5+f/5+fn/+fn5//r6+v/6+vr/9PT0/9DQ0P+lpaX/p6en/4aGhv+kpKT/pKSk/6qq
- qv+rq6v/oKCg/83Nzf/w8PD/9vb2//j4+P/5+fn/+fn5//r6+v/7+/v//Pz8//39/f/5+fn/5eXl/8zM
- zP+8uLT/mIJt/3RIHf90Pgn/fkMI/4dHCP+PSwf/lU4H/5pQBv+dUQX/oFMF/6NVB/+mVwj/qFkK/6la
- C/+qWwz/qVsM/6lbDP+oWgv/p1kK/6RXCf+hVQj/nlMG/5pQBf+WTQP/kUoC/4tFAf+CQAD/eTwA/3I6
- Av+BVy7/rp2M/83Myv/V1dX/3t7e/+Tk5P/j4+P/4+Pj/+Li4v/i4uL/4eHh/+Dg4P/f39//39/f/+Tk
- 5P/r6+v7rKyswycnJ2YAAAArAAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////8vLy//Pz8v/z8/L/8/Pz//Pz8//09PP/9PTz//T09P/09PT/9fX0//X19f/19fX/9fX1//b2
- 9f/29vb/9vb2//f39v/39/f/9/f3//f39//4+Pf/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+fn5//r6
- +v/6+vr/7+/v/9LS0v/BwcH/iYmJ/87Ozv/X19f/39/f/9vb2/+0tLT/r6+v/9/f3//z8/P/+Pj4//r6
- +v/6+vr/+/v7//z8/P/9/f3//v7+//39/f/5+fn/4+Pj/87Ozv/DwcD/oI99/31aNv9wPQv/dz4G/35C
- Bv+GRQX/jEcD/5FIAf+USQD/l0sA/5lMAP+bTQH/nE4B/51PAv+dTwL/nE8C/5tOAf+ZTQH/l0wB/5VL
- AP+SSQD/j0cA/4pEAP+DQQD/ez0A/3Q5AP91QQ7/jmxL/7aroP/Ozs3/1dXV/97e3v/k5OT/4+Pj/+Pj
- 4//i4uL/4eHh/+Hh4f/g4OD/39/f/97e3v/e3t7/3t7e/+fn5/7l5eXzi4uLqgsLC1YAAAAgAAAABAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////y8vL/8vLy//Pz8v/z8/L/8/Pz//Pz
- 8//09PP/9PT0//T09P/09PT/9fX0//X19f/19fX/9vb1//b29v/29vb/9vb2//f39v/39/f/vr6+/66u
- rv/p6en/zMzM/729vf/u7u7/n5+f/8fHx//l5eX/o6Oj/9TU1P/g4OD/sLCw/8bGxv++vr7/vb29/9HR
- 0f/f39//9fX1/5iYmP+IiIj/tra2/+rq6v/39/f/+/v7//v7+//8/Pz//f39//39/f/9/f3//Pz8//v7
- +//4+Pj/6Ojo/9LS0v/DwsL/saif/5B2Xv9zSB3/bzoF/3Y8BP98PwP/gUAB/4VCAP+KRQD/jUYA/49H
- AP+RSAD/kkkA/5JJAP+RSAD/kEgA/49HAP+MRQD/iUQA/4VCAP9/PwD/ejwA/3Q5AP9wOQP/gVgv/6ON
- eP/Bu7X/zc3N/9bW1v/f39//5OTk/+Pj4//i4uL/4uLi/+Hh4f/g4OD/4ODg/9/f3//e3t7/3t7e/93d
- 3f/c3Nz/3t7e/+jo6P/b29vofHx8mgYGBkoAAAAZAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4//////Ly8f/y8vL/8vLy//Pz8v/z8/P/8/Pz//T08//09PP/9PT0//T09P/19fT/9fX1//X1
- 9f/19fX/9vb1//b29v/29vb/9vb2//f39v+urq7/9vb2/7+/v/+np6f/8vLy/7m5uf+6urr/5eXl/7i4
- uP/MzMz/3t7e/7+/v//Q0ND/7e3t/7e3t//Ozs7/+vr6/76+vv/19fX/p6en/8vLy/+EhIT/yMjI//Hx
- 8f/5+fn//Pz8//39/f/9/f3//Pz8//z8/P/7+/v/+vr6//n5+f/4+Pj/7e3t/9fX1//Jycn/v727/6ea
- jf+LblH/dksg/3E9C/9yOQL/dToA/3g8AP97PQD/fz8A/4FAAP+DQQD/g0EA/4JBAP+BQAD/fz8A/3s9
- AP94OwD/dDkA/3E5Av9zPw3/f1Us/5qAZv+4r6b/ysnJ/9DQ0P/Y2Nj/4eHh/+Pj4//j4+P/4uLi/+Hh
- 4f/h4eH/4ODg/9/f3//f39//3t7e/93d3f/d3d3/3Nzc/9vb2//b29v/3t7e/+rq6v7Ozs7bYmJiiQAA
- AEEAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////8vLx//Ly8f/y8vL/8/Py//Pz
- 8//09PT/8/Pz//T08//09PP/9PT0//T09P/19fT/9fX1//X19f/19fX/9vb1//b29v/29vb/9vb2/8vL
- y//g4OD/8fHx/5aWlv/29vb/8PDw/6SkpP/4+Pj/y8vL/729vf/5+fn/yMjI/7a2tv/6+vr/1NTU/6ys
- rP/6+vr/u7u7/+bm5v+qqqr/3t7e/6Ghof+lpaX/7Ozs//n5+f/9/f3//Pz8//z8/P/7+/v/+/v7//r6
- +v/5+fn/+fn5//j4+P/39/f/8/Pz/+Tk5P/S0tL/x8fH/7+9u/+wpp3/l4Fr/4JfPP94SyD/bz0K/202
- AP9vNwD/cDcA/3E4AP9xOAD/cTgA/3A3AP9uNgD/bjcC/3JAEP98Uij/imlI/6WSgP+7s63/x8bF/83N
- zf/V1dX/3t7e/+Pj4//j4+P/4uLi/+Li4v/h4eH/4ODg/+Dg4P/f39//3t7e/97e3v/d3d3/3Nzc/9zc
- 3P/b29v/2tra/9nZ2f/Z2dn/4ODg/+/v7/6zs7PGEhISXgAAABsAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////y8vH/8vLx//Ly8v/19fX/0dHR/83Nzf/x8fH/8/Pz//T08//09PT/9PT0//T0
- 9P/19fT/9fX1//X19f/29vX/9vb2//b29v/29vb/9vb1/8rKyv/Hx8f/r6+v/+Hh4f/4+Pj/4+Pj/8bG
- xv/BwcD/rKys//n5+f/09PT/5eXl//r6+v/29vb/n5+f/8HBwf+xsbH/+Pj4/9ra2v/Ly8v/paWl/8zM
- zP/09PT/+/v7//39/f/8/Pz/+/v7//r6+v/6+vr/+fn5//j4+P/4+Pj/9/f3//f39//29vb/9PT0/+7u
- 7v/g4OD/0tLS/8nJyP/DwsL/vbm2/6+km/+fjXv/l39m/5BzWP+JaEn/hGE//4JeO/+GY0H/jGxN/5R4
- Xf+bhG3/ppWE/7ewqP/CwL7/x8fG/8zMzP/U1NT/3Nzc/+Li4v/j4+P/4+Pj/+Li4v/i4uL/4eHh/+Dg
- 4P/f39//39/f/97e3v/d3d3/3d3d/9zc3P/c3Nz/29vb/9ra2v/Z2dn/2dnZ/9nZ2f/i4uL/6urq+KSk
- pLoRERFXAAAAGAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////Hx8f/y8vH/8vLx/8jI
- yP+Li4v/nZ2d/7q6uv/z8/P/9PTz//T08//09PT/9PT0//X19P/19fT/9fX1//X19f/29vX/9vb2//b2
- 9v/29vb/9/f2//f39//39/f/9/f3//j49//4+Pj/+Pj4//j4+P+srKz/+fn5//n5+f/T09P/5eXl/83N
- zf+/v7//+vr6//r6+v/5+fn/0NDQ/5CQkP+7u7v/8PDw//n5+f/8/Pz/+/v7//v7+//6+vr/+fn5//n5
- +f/4+Pj/9/f3//f39//29vb/9fX1//T09P/09PT/8/Pz//Ly8v/u7u7/5eXl/9nZ2f/Ozs7/ysrK/8fH
- x//ExMP/wb++/767uP+8uLX/u7ez/725tf+/vLr/wsHA/8bFxf/IyMj/ysrK/8/Pz//Y2Nj/39/f/+Pj
- 4//k5OT/4+Pj/+Li4v/i4uL/4eHh/+Hh4f/g4OD/39/f/9/f3//e3t7/3t7e/93d3f/c3Nz/29vb/9ra
- 2v/a2tr/2dnZ/9jY2P/Y2Nj/39/f/+vr6/3FxcXUT09PegAAADMAAAAJAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////8fHx//Hx8f/y8vH/tra2/3h4eP+Li4v/paWl/+/v7//z8/P/9PTz//T0
- 8//09PT/9PT0//X19P/19fX/9fX1//X19f/29vX/9vb2//b29v/29vb/9/f2//f39//39/f/9/f3//j4
- 9//4+Pj/1dXV/6CgoP/s7Ov/+fn5//n5+f/19fX/+fn5//r6+v/6+vr/+vr6/+7u7v/CwsL/p6en/97e
- 3v/39/f/+/v7//v7+//7+/v/+vr6//n5+f/4+Pj/+Pj4//f39//39/f/9vb2//X19f/19fX/9PT0//Pz
- 8//y8vL/8vLy//Hx8f/w8PD/7u7u/+vr6//l5eX/3t7e/9nZ2f/V1dX/0tLS/9LS0v/R0dH/0dHR/9PT
- 0//U1NT/19fX/9vb2//g4OD/4+Pj/+Tk5P/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh4f/g4OD/4ODg/9/f
- 3//e3t7/3t7e/+Dg4P/n5+f/6enp/+Hh4f/b29v/2tra/9nZ2f/Y2Nj/2NjY/9zc3P/q6ur+19fX4m5u
- bo8DAwNDAAAAFQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////x8fD/8fHx//Ly
- 8f/n5+b/lZWV/5CQkP/Ly8v/8vLx//Pz8//z8/P/9PTz//T09P/09PT/9PT0//X19P/19fX/9fX1//X1
- 9f/29vX/9vb2//b29v/29vb/9/f2//f39//39/f/9/f3//j49//4+Pj/+Pj4//b29v/5+fj/+fn5//n5
- +f/5+fn/+fn5//r6+v/5+fn/29vb/6ampv+/v7//8/Pz//r6+v/7+/v/+/v7//r6+v/5+fn/+fn5//j4
- +P/39/f/9vb2//b29v/19fX/9PT0//T09P/z8/P/8vLy//Ly8v/x8fH/8PDw//Dw8P/v7+//7u7u/+7u
- 7v/t7e3/7Ozs/+rq6v/o6Oj/5+fn/+bm5v/m5ub/5ubm/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Tk
- 5P/j4+P/4uLi/+Li4v/h4eH/4ODg/9/f3//f39//3t7e/97e3v/i4uL/6+vr/+zs7P/m5ub/7u7u/+bm
- 5v/d3d3/2NjY/9jY2P/b29v/6enp/97e3uuEhISiCQkJTwAAABsAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4//////Hx8P/x8fH/8fHx//Ly8f/v7+7/7e3t//Ly8v/z8/L/8/Py//Pz
- 8//z8/P/9PTz//T09P/09PT/9PT0//X19P/19fX/9fX1//b29f/29vX/9vb2//b29v/29vb/9/f3//f3
- 9//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/5+fj/+fn5//n5+f/5+fn/+fn5//X19f/Kysr/q6ur/9/f
- 3//39/f/+vr6//r6+v/5+fn/+fn5//j4+P/39/f/9vb2//b29v/19fX/9fX1//T09P/z8/P/8/Pz//Ly
- 8v/x8fH/8PDw//Dw8P/v7+//7+/v/+7u7v/t7e3/7e3t/+zs7P/r6+v/6urq/+rq6v/p6en/6enp/+jo
- 6P/n5+f/5+fn/+bm5v/l5eX/5OTk/+Tk5P/j4+P/4uLi/+Li4v/h4eH/4eHh/+Dg4P/f39//3t7e/97e
- 3v/f39//5eXl/+7u7v/g4OD/tbW1/6urq//ExMT/5ubm/+7u7v/j4+P/3d3d/+jo6P7j4+PwkpKSryMj
- I1wAAAAiAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////8fHw//Hx
- 8P/x8fH/8fHx//Ly8f/y8vH/8vLy//Pz8v/z8/L/8/Pz//Pz8//09PP/9PTz//T09P/09PT/9fX0//X1
- 9P/19fX/9fX1//b29f/29vb/9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//j4
- +P/5+fj/+fn5//n5+f/5+fn/9vb2/9HR0f+kpKT/x8fH//Ly8v/4+Pj/+fn5//n5+f/4+Pj/9/f3//f3
- 9//29vb/9fX1//X19f/19fX/9fX1//Pz8//y8vL/8fHx//Dw8P/w8PD/7+/v/+7u7v/u7u7/7e3t/+3t
- 7f/s7Oz/6+vr/+vr6//q6ur/6enp/+jo6P/o6Oj/5+fn/+bm5v/m5ub/5eXl/+Tk5P/k5OT/4+Pj/+Li
- 4v/i4uL/4eHh/+Dg4P/g4OD/39/f/97e3v/e3t7/4+Pj/+vr6//t7e3/0tLS/6+vr/+pqan/tbW1/6Wl
- pf+wsLD/z8/P/+vr6//v7+/+5ubm8pmZmbgWFhZkAAAAKwAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////w8PD/8fHw//Hx8P/x8fH/8vLx//Ly8f/y8vL/8vLy//Pz
- 8v/z8/L/8/Pz//Pz8//09PP/9PTz//T09P/09PT/9fX0//X19P/19fX/9fX1//b29f/29vb/9vb2//b2
- 9v/29vb/9/f3//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/5ubm/7y8
- vP+pqan/yMjI//Ly8v/4+Pj/9/f3//f39//29vb/9vb2//X19f/19fX/9vb2//b29v/z8/P/9fX1//Pz
- 8//x8fH/8PDw/+/v7//u7u7/7u7u/+3t7f/s7Oz/6+vr/+vr6//q6ur/6urq/+np6f/o6Oj/6Ojo/+fn
- 5//m5ub/5eXl/+Xl5f/k5OT/4+Pj/+Pj4//i4uL/4uLi/+Hh4f/g4OD/39/f/9/f3//e3t7/3d3d/+Hh
- 4f/v7+//6urq/7y8vP+pqan/t7e3/9zc3P/n5+f/2dnZ/7q6uv+pqan/t7e3/7e3t9yJiYm8JiYmbwAA
- ADQAAAANAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////Dw
- 8P/x8fD/8fHw//Hx8P/x8fH/8vLx//Ly8f/y8vL/8vLy//Pz8v/z8/L/8/Pz//Pz8//09PP/9PTz//T0
- 9P/09PT/9fX0//X19f/19fX/9fX1//b29f/29vb/9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//j4
- 9//4+Pj/+Pj4//j4+P/4+Pj/+fn5//n5+f/4+Pj/5OTk/729vf+kpKT/yMjI/+/v7//39/f/9vb2//X1
- 9f/19fX/9vb2//b29v/k5OT/wcHB/7q6uv/Y2Nj/7+/v//Pz8//y8vL/8PDw/+7u7v/t7e3/7Ozs/+vr
- 6//r6+v/6urq/+np6f/p6en/6Ojo/+fn5//n5+f/5ubm/+Xl5f/l5eX/5OTk/+Pj4//j4+P/4uLi/+Hh
- 4f/h4eH/4ODg/9/f3//f39//3t7e/93d3f/d3d3/4+Pj/+7u7v/Dw8P/oqKi/8fHx//m5ub/+vr6//z8
- /P/6+vr/6urq/9HR0f+zs7P/Hh4ejQoKCnEAAAA9AAAAFQAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////8PDv//Dw8P/x8fD/8fHw//Hx8f/x8fH/8vLx//Ly
- 8f/y8vL/8vLy//Pz8v/z8/L/8/Pz//Pz8//09PP/9PT0//T09P/09PT/9fX0//X19f/w8PD/9PT0//b2
- 9f/29vb/9vb2//b29v/29vb/9/f3//f39//39/f/9/f3//j49//4+Pj/6+vr/83Nzf/u7u7/+fn5//n5
- +f/4+Pj/5ubm/8HBwf+np6f/vr6+/+vr6//39/f/9vb2//b29v/39/f/2dnZ/6+vr/+np6f/rq6u/6am
- pv+3t7f/1dXV/+3t7f/19fX/8fHx/+zs7P/r6+v/6urq/+np6f/p6en/6Ojo/+jo6P/n5+f/5ubm/+bm
- 5v/l5eX/5OTk/+Pj4//j4+P/4uLi/+Li4v/h4eH/4ODg/9/f3//f39//3t7e/93d3f/d3d3/3Nzc/9zc
- 3P/g4OD/7e3t/8HBwf+vr6//4uLi//r6+v/8/Pz//Pz8//z8/P/8/Pz/9vb2/+np6f8AAABZAAAAPQAA
- ABsAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///w8O//8PDw//Dw8P/x8fD/8fHw//Hx8f/y8vH/8vLx//Ly8f/y8vL/8/Py//Pz8v/z8/P/8/Pz//Pz
- 8//09PP/9PT0//T09P/09PT/0tLR/6ysrP/BwcH/2NjY/9DQz/+/v7//xMTE/+Xl5f/29vb/vb29/+Tk
- 5P/39/f/1dXV/7Cwr//W1tb/ysrK/7W1tf/r6+v/qamp/8XFxf/Nzc3/4uLi/4SEhP+EhIT/paWl/+Hh
- 4f/09PT/8PDw/87Ozv+EhIT/i4uL/6+vr//d3d3/j4+P/4SEhP+YmJj/mpqa/9zc3P/19fX/7Ozs/+rq
- 6v/p6en/6enp/+jo6P/n5+f/5+fn/+bm5v/l5eX/5ubm/+Xl5f/l5eX/5eXl/+Tk5P/l5eX/5+fn/+bm
- 5v/h4eH/3t7e/97e3v/d3d3/3d3d/9zc3P/b29v/29vb/93d3f/u7u7/zMzM/6mpqf/i4uL/+/v7//z8
- /P/8/Pz//Pz8//z8/P/7+/v//////wAAAEEAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4//////Dw7//w8O//8PDw//T08//k5OP/3Nzc//T0
- 9P/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//Pz8//09PP/9PT0//T09P+wsLD/7+/u//X1
- 9f/b29v/n5+f//b29f/19fX/sbGx//b29v/BwcH/ubm5//f39/+8vLz/5+fn/8vLyv/c3Nz/qKio/8bG
- xv+xsbH/3d3c//Dw8P+5ubn/uLi4/9PT0/+pqan/l5eX/7+/v//Hx8f/mpqa/3t7e//CwsL/8fHx/8XF
- xf+ioqL/5+fn/8DAwP90dHT/zc3N//X19f/r6+v/6enp/+jo6P/o6Oj/5+fn/+bm5v/m5ub/5eXl/+jo
- 6P/w8PD/8/Pz//T09P/19fX/9fX1//T09P/y8vL/9vb2/+np6f/e3t7/3d3d/9zc3P/c3Nz/29vb/9ra
- 2v/a2tr/2tra/+3t7f/X19f/paWl/9vb2//6+vr/+/v7//v7+//7+/v/+/v7//v7+///////AAAAQAAA
- ACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////8PDv//Dw7//w8O//09PT/46Ojv+goKD/wcHB//Ly8v/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz
- 8v/z8/P/8/Pz//T08//09PP/9PT0/8jIyP/c3Nz/9PTz//Hx8f+rq6v/zs7O//b29f+np6f/ycnJ/7W1
- tf/IyMj/1tbW/7S0tP/v7+//7e3t/6ampv/w8PD/0NDQ/6ysrP/e3t7/wMDA/+vr6/+oqKj/9PT0/9bW
- 1v+xsbH/bW1t/6ioqP+/v7//nJyc/+jo6P+2trb/9/f3/56env/19fX/39/f/4SEhP/IyMj/9fX1/+rq
- 6v/o6Oj/5+fn/+fn5//m5ub/5eXl/+Xl5f/k5OT/7e3t//Ly8v/X19f/zs7O/8rKyv/FxcX/vb29/7y8
- vP/d3d3/8fHx/+Hh4f/c3Nz/29vb/9vb2//a2tr/2dnZ/9nZ2f/Y2Nj/6urq/+Dg4P+pqan/0tLS//n5
- +f/7+/v/+/v7//v7+//7+/v/+/v7//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////v7+//8PDv//Dw7/+zs7P/fHx8/46O
- jv+lpaX/7u7u//Hx8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//T08//09PP/9PT0/8rK
- yv/ExMT/z8/O//T09P/Nzc3/qamp/8DAwP/19fX/2tra/+Xl5f/MzMz/q6ur//f39//39/f/ubm5/9jY
- 2P/4+Pf/0tLS/87Ozv/Dw8P/+Pj4/+Hh4f/Nzc3/s7Oz/9fX1/+Pj4//wMDA/9HR0f/S0tL/y8vL/76+
- vv/r6+v/sLCw/8vLy//IyMj/kJCQ/8bGxv/19fX/6urq/+jo6P/n5+f/5ubm/+bm5v/l5eX/5OTk/+Xl
- 5f/y8vL/ycnJ/5OTk/+rq6v/q6ur/6urq/+urq7/pKSk/7e3t//v7+//6enp/9zc3P/a2tr/2tra/9nZ
- 2f/Z2dn/2NjY/9ra2v/r6+v/6Ojo/66urv/Jycn/9vb2//v7+//7+/v/+/v7//v7+//7+/v//////wAA
- AEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4/////+/v7v/v7+//8PDv/97e3v+FhYX/goKC/8DAwP/v7+7/8fHx//Hx8f/y8vH/8vLx//Ly
- 8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//T08//09PP/9PT0//T09P/09PT/9fX0//X19f/09PT/9fX1//b2
- 9f/29vX/9vb2//b29v/29vb/9/f2//f39//39/f/9/f3//f39//4+Pf/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/5+fn/9PT0/8vLy/+7u7v/6urq/+np6f/6+vr/+vr6//j4+P/e3t7/rq6u/9bW1v+hoaH/y8vL//X1
- 9f/p6en/5ubm/+Xl5f/l5eX/5OTk/+Tk5P/j4+P/6urq//Ly8v+5ubn/sLCw/9XV1f/i4uL/5eXl/+fn
- 5//R0dH/pqam/8vLy//y8vL/4ODg/9ra2v/Z2dn/2dnZ/9zc3P/k5OT/7Ozs//T09P/a2tr/p6en/8rK
- yv/29vb/+/v7//v7+//7+/v/+/v7//v7+///////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////7+/u/+/v7v/v7+//8PDv/+rq
- 6f/o6Oj/7u7u//Hx8P/x8fD/8fHx//Hx8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//T0
- 8//09PP/9PT0//T09P/09PT/9fX0//X19f/19fX/9fX1//b29f/29vX/9vb2//b29v/29vb/9/f2//f3
- 9//39/f/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+Pj4//j4+P/5+fj/+fn5/+Xl5f/5+fn/+fn5//n5
- +f/6+vr/+vr6//r6+v/m5ub/5OTk/62trf/Ly8v/9/f3/+rq6v/n5+f/5eXl/+Tk5P/k5OT/4+Pj/+Pj
- 4//v7+//5eXl/6ampv/IyMj/8fHx//v7+//7+/v/+/v7/+3t7f+8vLz/rq6u/+Xl5f/s7Oz/4ODg/+Pj
- 4//r6+v/8PDw/+/v7//f39//wcHB/6qqqv+wsLD/3d3d//r6+v/7+/v/+/v7//v7+//7+/v/+/v7////
- //8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Hx
- 8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//T08//09PP/9PT0//T09P/09PT/9fX0//X1
- 9f/19fX/9fX1//X19f/29vX/9vb2//b29v/29vb/9vb2//f39v/39/f/9/f3//f39//39/f/+Pj3//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+vr6//r6+v/l5eX/sLCw/8XF
- xf/6+vr/9/f3//Pz8//u7u7/6urq/+jo6P/m5ub/6Ojo//b29v/MzMz/qqqq/97e3v/5+fn/+vr6//r6
- +v/6+vr/9/f3/9zc3P+srKz/xMTE//f39//39/f/8vLy/+Li4v/Kysr/tLS0/6enp/+vr6//xsbG/+Hh
- 4f/19fX/+/v7//v7+//7+/v/+/v7//v7+//7+/v//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+/v7v/v7+7/7+/u/+/v
- 7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz
- 8v/z8/P/8/Pz//T08//09PP/9PT0//T09P/09PT/9fX0//X19P/19fX/9fX1//X19f/29vX/9vb2//b2
- 9v/29vb/9vb2//f39v/39/f/9/f3//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//n5+f/5+fn/+fn5/+zs7P/AwMD/qamp/7y8vP/Ly8v/39/f/+zs7P/x8fH/8fHx//Ly
- 8v/09PT/9fX1/7a2tv+7u7v/7e3t//r6+v/6+vr/+vr6//r6+v/6+vr/8PDw/8XFxf+kpKT/xMTE/8TE
- xP+0tLT/qamp/6ampv+4uLj/zc3N/+Li4v/y8vL/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////7u7u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx
- 8P/x8fD/8fHx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//T08//09PP/9PT0//T0
- 9P/09PT/9fX0//X19P/19fX/9fX1//X19f/29vX/9vb2//b29v/29vb/9vb2//b29v/39/f/9/f3//f3
- 9//39/f/9/f3//j49//4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/5+fn/+fn5//n5+f/5+fn/9/f3/+Pj
- 4//Gxsb/tLS0/62trf+lpaX/pKSk/62trf+8vLz/xsbG/87Ozv/ExMT/q6ur/9PT0//39/f/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/5ubm/7y8vP+srKz/r6+v/7q6uv/Ozs7/3t7e/+3t7f/29vb/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//////8AAABAAAAAKAAAABQAAAAIAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////u7u3/7u7u/+/v
- 7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly8f/y8vH/8vLx//Ly
- 8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//Pz8//09PP/9PT0//T09P/09PT/9fX0//X19P/19fX/9fX1//X1
- 9f/29vX/9vb1//b29v/29vb/9vb2//b29v/39/b/9/f3//f39//39/f/9/f3//f39//4+Pf/+Pj4//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/+fn5//n5+f/5+fn/+Pj4//Hx8f/p6en/4eHh/9TU1P/IyMj/wMDA/7e3
- t/+urq7/qKio/6qqqv/ExMT/6+vr//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/4+Pj/6+vr/+Hh
- 4f/g4OD/7Ozs//b29v/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4/////+7u7f/u7u3/7u7u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw
- 7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//Pz
- 8//09PP/9PTz//T09P/09PT/9PT0//X19P/19fX/9fX1//X19f/19fX/9vb1//b29v/29vb/9vb2//b2
- 9v/29vb/9/f2//f39//39/f/9/f3//f39//39/f/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//n5
- +f/5+fn/+fn5//n5+f/5+fn/9/f3//T09P/y8vL/8PDw/+np6f/i4uL/4+Pj//Dw8P/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//b29v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v//////AAAAQAAAACgAAAAUAAAACAAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////7u7t/+7u
- 7f/u7u3/8fHw/+3t7f/n5+f/9PT0/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly
- 8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/P/8/Pz//Pz8//09PP/9PTz//T09P/09PT/9PT0//X1
- 9P/19fT/9fX1//X19f/19fX/9vb1//b29f/29vb/9vb2//b29v/29vb/9/f2/9bW1v/W1tb/9/f3//f3
- 9//39/f/9/f3//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/5+fj/+fn5//n5+f/5+fn/+fn5//n5
- +f/5+fn/+fn5//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/09PT/vb29//j4
- +P/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////u7u3/7u7t/+7u7f/c3Nv/lJSU/6Ojo//Kysr/8fHw/+/v
- 7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly8f/y8vH/vLy7/62trf/m5ub/q6ur/7m5
- uf/q6ur/srKy/8rKyv/Hx8b/9PTz/+3t7f+ioqL/xcXF/9XV1P+8vLz/xcXF/+Li4v/19fX/qamp/+/v
- 7//29vb/9vb2//b29v/29vb/wsLC/8LCwf/Y2Nj/0NDQ/7m5uf/S0tL/2NjY/6Wlpf/MzMv/+Pj4//j4
- +P/s7Oz/oKCg/8zMzP/v7+//sLCw/97e3v/e3t7/wsLC//Dw8P+urq7/+fn5/9HR0f+vr6//4ODg/6mp
- qf/CwsL/ysrK//T09P+wsLD/ubm5/+Xl5f+1tbX/6Ojo//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr//////wAAAEAAAAAoAAAAFAAA
- AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+3t
- 7P/u7u3/7u7t/7Ozs/9+fn7/kZGR/6enp//u7u7/7+/v/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx
- 8P/x8fD/8fHx//Hx8f+traz/8fHw/8PDw/+oqKj/7+/u/7Gxsf+7u7v/8/Pz/8zMzP/W1tX/3t7d/76+
- vv/q6ur/nZ2d//Hx8f/19fT/r6+v//X19f+zs7P/y8vL//b29f/29vX/9vb2//b29v/29vb/q6ur/8XF
- xf/CwsL/4ODg/9/f3/+ysrL/2dnZ/+3t7f/39/f/+Pj3/97e3v/Hx8f/3t7e/7m5uf/IyMj/1NTU/8vL
- y/+goKD/9fX1/5+fn//e3t7/yMjI/93d3f++vr7/paWl/9jY2P/z8/P/xMTE/6ampv/5+fn/7u7u//n5
- +f/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6
- +v/6+vr/+vr6//r6+v//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////7e3s/+3t7f/u7u3/1NTU/3Z2dv9+fn7/tra2/+3t
- 7P/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx/8fHx//d3dz/6+vq/5iY
- mP/w8PD/5+fm/5ubm//v7+7/29vb/6enp//ExMT/qamp//T08/+xsbH/xcXF//T09P+qqqr/x8fH/7Cw
- sP/ExMT/3t7e//Pz8//29vX/9vb1/+np6f+1tbX/8vLy/7a2tv/Jycn/9/f2/7q6uv/Dw8P/9/f3//f3
- 9//39/f/8vLy/7u7uv/4+Pj/wcHB/8TExP/4+Pj/x8fH/7S0tP/Q0ND/rq6u/8nJyf/Q0ND/ysrK//Hx
- 8f+dnZ3/6enp/7a2tv/29vb/np6e//X19f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5
- +f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//////8AAABAAAAAKAAA
- ABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///t7ez/7e3s/+3t7f/u7u3/4eHh/9fX1//q6ur/7+/u/+/v7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw
- 7//w8PD/8fHw//Hx8P/x8fD/8PDw/8fHx//ExMP/oqKi/9/f3//y8vL/4uLi/76+vf+goKD/4+Pj//Pz
- 8/+pqan/9PTz//T08//Ozs7/q6ur/7u7u//y8vL/3t7e/+Pj4v/Pz8//rq6u//X19f/19fX/7e3s/6Sk
- pP/29vb/6+vr/+fn5//09PT/z8/P/6qqqf/Z2dn/2tra//Pz8//39/f/3t7e/8jIyP+9vb3/vb28//j4
- +P/w8PD/1dXV/+Tk5P+ioqL/9PT0/7W1tf/MzMz/+Pj4/97e3v/Kysr/vLy8/+rq6v+wsLD/ysrK/9vb
- 2//k5OT/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5
- +f/5+fn/+fn5//n5+f/5+fn//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u
- 7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Hx
- 8f/T09L/ysrJ//Ly8f/y8vL/8fHx//Pz8v/z8/L/8/Py/7CwsP/u7u7/8/Pz//T08//z8/L/9PT0//T0
- 9P/09PT/9fX0//X19P/19fX/9fX1//X19f/19fX/9fX1//b29f/29vb/ysrK/+np6f/r6+v/pqam/+Hh
- 4f/m5uX/8PDw//f39//39/f/9/f3//f39//39/f/9/f3//f39//4+Pf/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/9vb2/9zc3P+urq7/6enp/+bm5f/5+fj/+fn5//n5+f/5+fn/+fn5//n5
- +f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+P//////AAAAQAAA
- ACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////7Ozs/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v
- 7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/5+fn/7S0tP+1tbX/8vLx//Ly8f/y8vL/8vLy//Pz
- 8v/d3d3/pqal/9ra2v/z8/P/8/Pz//T08//09PP/9PT0//T09P/09PT/9PT0//X19P/19fT/9fX1//X1
- 9f/19fX/9fX1//b29f/29vX/8vLy//b29v/t7e3/7Ozs//b29v/29vb/9vb2//f39v/39/f/9/f3//f3
- 9//39/f/9/f3//f39//39/f/9/f3//j49//4+Pf/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4/+Tk
- 5P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////s7Ov/7e3s/+3t7P/t7ez/7e3s/+3t
- 7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8PDw//Hx
- 8P/x8fD/8fHw/+/v7//x8fH/8vLx//Ly8f/y8vL/8vLy//Hx8f/z8/L/8vLx//Pz8v/z8/P/8/Pz//Pz
- 8//09PP/9PTz//T09P/09PT/9PT0//T09P/19fT/9fX0//X19f/19fX/9fX1//X19f/19fX/9vb1//b2
- 9f/29vb/9vb2//b29v/29vb/9vb2//b29v/39/b/9/f2//f39//39/f/9/f3//f39//39/f/9/f3//f3
- 9//39/f/9/f3//f39//4+Pf/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj//////wAA
- AEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4/////+zs6//s7Ov/7e3s/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v
- 7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8f/x8fH/8vLx//Ly
- 8f/y8vH/8vLy//Ly8v/z8/L/8/Py//Pz8v/z8/P/8/Pz//Pz8//09PP/9PTz//T08//09PT/9PT0//T0
- 9P/09PT/9fX0//X19P/19fX/9fX1//X19f/19fX/9fX1//b29f/29vX/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//f39v/39/b/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3
- 9//39/f/9/f3//j49//4+Pf/+Pj3//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/4+Pj/+Pj4//j4+P/4+Pj/+Pj3//j49///////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////7Ozr/+zs6//s7Ov/7e3s/+3t
- 7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u3/7+/u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw
- 7//w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8f/x8fH/8vLx//Ly8f/y8vH/8vLy//Ly8v/y8vL/8/Py//Pz
- 8v/z8/L/8/Pz//Pz8//z8/P/9PTz//T08//09PT/9PT0//T09P/09PT/9PT0//X19P/19fT/9fX1//X1
- 9f/19fX/9fX1//X19f/29vX/9vb1//b29f/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//f3
- 9v/39/b/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3
- 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3////
- //8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////s7Ov/7Ozr/+zs6//t7ez/8/Py//Hx8f/y8vH/7e3s/+3t7f/u7u3/7u7t/+7u
- 7f/u7u3/7+/u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8O//8PDw//Hx8P/x8fD/8fHw//Hx
- 8P/x8fH/8fHx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8/Py//Pz8v/z8/L/8/Pz//Pz8//z8/P/8/Pz//T0
- 8//09PP/9PT0//T09P/09PT/9PT0//T09P/y8vH/7e3s//X19f/19fX/9fX1//X19f/19fX/9fX1//b2
- 9f/29vX/9vb1//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//f39v/39/b/9/f2//f3
- 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f3
- 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+vr6v/s7Ov/7Ozr/+Tk
- 5P+cnJz/pqam/9XV1f/v7+7/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v7v/v7+7/7+/u/+/v
- 7//v7+//8PDv//Dw7//w8O//8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fH/8fHx//Ly8f/y8vH/8vLx//Ly
- 8v/y8vL/8vLy//Pz8v/z8/L/8/Py//Pz8//z8/P/8/Pz//Pz8//09PP/9PTz//T09P/09PT/9PT0/+Hh
- 4f+8vLz/9fX0//X19P/19fT/9fX1//X19f/19fX/9fX1//X19f/19fX/9vb1//b29f/29vX/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9/f2//f39v/39/b/9/f2//f3
- 9v/39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/b/9/f2//f3
- 9v//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////6+vq/+vr6v/s7Ov/tra2/4KCgv+Tk5P/qamp/+3t7P/t7ez/7e3s/+3t
- 7P/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v7v/v7+7/7+/u/+/v7v/v7+//8PDv//Dw7//w8O//8PDw//Dw
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx8f/y8vH/8vLx//Ly8f/y8vL/8vLy//Ly8v/z8/L/8/Py//Pz
- 8v/z8/P/8/Pz//Pz8//z8/P/9PTz//T08//09PP/8PDw/66urv/09PT/9PT0//X19P/e3t3/zs7N//Hx
- 8f/19fX/9fX1//X19f/19fX/9fX1//X19f/29vX/9vb1//b29f/29vX/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//////8AAABAAAAAKAAAABQAAAAIAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////r6+r/6+vq/+vr
- 6v/Nzc3/cnJy/4KCgv+urq7/6+vr/+3t7P/t7ez/7e3s/+3t7P/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v
- 7v/v7+7/y8vK/6Wlpf++vr7/ysrK/+Hh4P+zs7L/xsbF/9HR0f/w8PD/urq6/9jY2P/x8fD/8fHx/7S0
- tP+8vLv/wsLB/+Xl5P/MzMv/zMzM/9vb2/+4uLj/8/Py/8DAv/+xsbH/5ubm//Pz8//z8/P/v7+//76+
- vf/a2tn/pKSk/8zMzP/Ly8v/7Ozs/8vLy//Ly8v/v7++/9/f3v+np6f/1NTU/+Hh4f+urq7/4eHh/7Oz
- s//o6Oj/wsLC/9bW1v/29vX/q6ur/7+/v//z8/L/9vb1//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4/////+rq6f/r6+r/6+vq/+np6P/S0tL/wcHB/+Tk5P/s7Ov/7Ozs/+3t
- 7P/t7ez/7e3s/+3t7P/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v7v/Ly8r/yMjH/+/v7v/v7+//v7+//9bW
- 1f/w8O//tra2/+jo6P/IyMj/srKx//Hx8P/x8fD/mpqa/83Nzf/r6+v/ysrJ/8XFxP+pqan/7Ozr/5ub
- m//i4uL/tra1/+bm5v/CwsH/8fHw//Pz8/+wsLD/7u7u/9HR0f+pqan/7e3s//Hx8P+4uLj/9PT0/8HB
- wf+0tLT/z8/P/8vLy//a2tn/t7e2/9vb2//IyMf/s7Oz/8bGxv/T09P/qKio//Ly8v+qqqr/7+/v/8bG
- xv/19fX/9fX1//b29f/29vX/9vb1//b29f/29vX/9vb1//b29f/29vX/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29f/29vX/9vb1//b29f//////AAAAQAAAACgAAAAUAAAACAAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////6urp/+rq
- 6f/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t7P/t7e3/7u7t/+7u
- 7f/u7u3/7u7t/97e3v+2trX/7+/u/+/v7v/X19b/s7Oz//Dw7/+/v77/tra2/7i4uP+0tLT/zc3N//Dw
- 7/+rq6v/5eXk/7CwsP/r6+v/ubm5/7y8vP/Q0M//rKyr/8DAwP/Dw8P/09PT/+vr6v/Pz87/8/Py/8HB
- wP/b29v/8/Pz/6ysrP/T09P/8/Pz/6ampv/09PP/qamo//T09P/Hx8f/sLCw//T09P+xsbH/09PT//Pz
- 8/+qqqr/zc3M/9TU0/+1tbT/xMTE/62trf/x8fH/2tra/+Pj4//19fX/9fX1//X19f/19fX/9fX1//X1
- 9f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9vb1//b29f/19fX/9fX1//X19f/19fX/9fX1//X1
- 9f/19fX/9fX1//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAA
- ABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////q6un/6urp/+rq6f/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs
- 6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t7P/t7e3/7u7t/+7u7f/u7u3/7e3s/6ampv/v7+7/7+/u/+/v
- 7v/U1NP/s7Oz/6qqqv/q6un/5+fm/9LS0f/a2tr/pKSk/+Dg3//BwcH/ubm4/+jo5//i4uL/2NjY/9bW
- 1v+pqan/7Ozr/6qqqf/U1NT/8vLy//Ly8v/y8vL/5OTj/+vr6v/z8/L/19fW/6enp/+1tbX/xMTE//Pz
- 8/+ioqL/6+vq//T08//BwcD/9PT0/97e3v/Hx8f/9PT0/9XV1f/o6Oj/w8PD/76+vv/i4uH/oqKh/+7u
- 7f/19fT/9PTz//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X1
- 9f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX//////wAAAEAAAAAoAAAAFAAA
- AAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+rp
- 6P/q6un/6urp/+rq6f/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t
- 7P/t7ez/7u7t/+7u7f/u7u3/paWl/+3t7f/v7+7/7+/u/+/v7v/u7u3/7+/u/+/v7//w8O//8PDv//Dw
- 7//w8O//8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8v/y8vL/wMDA/+bm5f/CwsH/zMzM//Pz8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//T08//09PP/9PTz//T0
- 8//09PP/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9fX0//X19P/19fT/9fX0//X1
- 9P/19fT/9fX0//X19P/19fT/9fX0//X19P/19fX/9fX1//X19f/19fX/9fX1//X19f/19fT/9fX0//X1
- 9P/19fT/9fX0//X19P//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAA
- AAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////6eno/+rp6P/q6un/6urp/+rq6f/r6+r/6+vq/+vr
- 6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t7P/t7ez/7u7t/+7u7f/GxsX/6Ojn/+7u
- 7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7//v7+//8PDv//Dw7//w8O//8PDv//Dw8P/w8PD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8f/x8fH/8fHx//Ly8f/y8vH/8vLx//Ly8f/y8vL/7u7u//Ly8v/z8/L/8/Py//Pz
- 8v/z8/L/8/Py//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T08//09PP/9PTz//T08//09PP/9PT0//T0
- 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9fX0//X1
- 9P/19fT/9fX0//X19P/19fT/9fX0//X19P/09PT/9PT0//T09P/09PT/9PT0//////8AAABAAAAAKAAA
- ABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP//
- ///p6ej/6eno/+rp6P/q6un/6urp/+rq6f/r6+r/6+vq/+vr6v/r6+r/7Ozr/+zs6//s7Ov/7Ozr/+zs
- 7P/t7ez/7e3s/+3t7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v
- 7v/v7+//8PDv//Dw7//w8O//8PDv//Dw7//w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8P/x8fH/8fHx//Hx
- 8f/y8vH/8vLx//Ly8f/y8vH/8vLy//Ly8v/y8vL/8vLy//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Pz//Pz
- 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//T08//09PP/9PTz//T08//09PP/9PTz//T08//09PT/9PT0//T0
- 9P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T0
- 9P/09PT/9PT0//T09P/09PT//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+no5//p6ej/6eno/+np6P/x8fD/8/Pz/+3t
- 7P/r6un/6+vq/+vr6v/r6+r/7Ozr/+zs6//s7Ov/7Ozr/+zs6//t7ez/7e3s/+3t7P/t7ez/7e3s/+7u
- 7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v7v/v7+7/7+/u/+/v7v/v7+//7+/v//Dw7//w8O//8PDv//Dw
- 7//w8PD/8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f/y8vL/8vLy//Ly8v/y8vL/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Pz//Pz8//z8/P/8/Pz//Pz
- 8//z8/P/8/Pz//Pz8//09PP/9PTz//T08//09PP/9PTz//T08//09PP/9PTz//T08//09PP/9PTz//T0
- 8//09PP/9PTz//T08//09PP/9PTz//T08//09PP/9PTz//T08//09PP/9PTz//T08///////AAAAQAAA
- ACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAA
- AHj/////6Ojn/+no5//p6ej/6urp/62trf+tra3/39/f/+zs6//r6un/6+vq/+vr6v/r6+r/7Ozr/+zs
- 6//s7Ov/7Ozr/+zs6//t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v
- 7v/v7+7/7+/u/+/v7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8O//8PDw//Dw8P/w8PD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8f/x8fH/8fHx//Hx8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8vLy//Ly
- 8v/y8vL/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz
- 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//09PP/9PTz//T08//09PP/9PTz//T08//09PP/9PTz//T0
- 8//09PP/8/Pz//Pz8//z8/P/8/Pz//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////o6Of/6Ojn/+no5/+6urr/hISE/5eX
- l/+urq7/7Ozs/+rq6f/q6un/6+vq/+vr6v/r6+r/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Oz/7e3s/+3t
- 7P/t7ez/7e3s/+3t7P/u7u3/7u7t/+7u7f/u7u3/7u7t/+7u7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v
- 7//v7+//8PDv//Dw7//w8O//8PDv//Dw7//w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx
- 8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8/Py//Pz
- 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz
- 8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P//////wAA
- AEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAA
- AGwAAAB4/////+jn5v/o6Of/6Ojn/8PDw/9ycnL/hISE/6mpqf/p6Of/6urp/+rq6f/q6un/6+vq/+vr
- 6v/r6+r/6+vq/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7e3s/+3t7P/t7ez/7e3s/+3t7P/t7e3/7u7t/+7u
- 7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+//7+/v//Dw7//w8O//8PDv//Dw
- 7//w8O//8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fH/8fHx//Hx8f/y8vH/8vLx//Ly
- 8f/y8vH/8vLx//Ly8f/y8vH/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Pz8v/z8/L/8/Py//Pz
- 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz
- 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////5+fm/+jn5v/o6Of/5eXl/729
- vf+vr6//29vb/+np6P/q6ej/6urp/+rq6f/q6un/6+rp/+vr6v/r6+r/6+vq/+zs6//s7Ov/7Ozr/+zs
- 6//s7Ov/7Ozs/+3t7P/t7ez/7e3s/+3t7P/t7ez/7u7t/+7u7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+/v
- 7v/v7+7/7+/u/+/v7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8O//8PDv//Dw8P/w8PD/8PDw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8f/x8fH/8fHx//Hx8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f/y8vH/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Pz8v/z8/L/8/Py//Pz
- 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py////
- //8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAA
- AFgAAABsAAAAeP/////n5+b/5+fm/+jn5v/o6Of/6Ojn/+jo5//p6Of/6eno/+np6P/p6ej/6urp/+rq
- 6f/q6un/6+rp/+vr6v/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t
- 7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+7u7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v
- 7//v7+//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDw//Dw8P/w8PD/8fHw//Hx8P/x8fD/8fHw//Hx
- 8P/x8fD/8fHx//Hx8f/x8fH/8fHx//Hx8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f/y8vH/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly
- 8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAAACgAAABAAAAAWAAAAGwAAAB4/////+fm5f/n5+b/5+fm/+jn
- 5v/o5+b/6Ojn/+jo5//p6Of/6eno/+np6P/p6ej/6uno/+rq6f/q6un/6urp/+vr6v/r6+r/6+vq/+vr
- 6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs7P/t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u
- 7f/u7u3/7u7t/+7u7v/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+//7+/v/+/v7//w8O//8PDv//Dw
- 7//w8O//8PDv//Dw8P/w8PD/8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx
- 8f/x8fH/8fHx//Hx8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f//////AAAAQAAAACgAAAAUAAAACAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAA
- AEAAAABYAAAAbAAAAHj/////5ubl/+fm5f/n5+b/5+fm/+jn5v/o5+b/6Ojn/+jo5//p6Of/6eno/+np
- 6P/p6ej/6uno/+rq6f/q6un/6urp/+vq6f/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs
- 6//t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7P/t7e3/7u7t/+7u7f/u7u3/7u7t/+7u7f/u7u7/7u7u/+/v
- 7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7//v7+//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw
- 8P/w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8f/x8fH/8fHx//Hx
- 8f/x8fH/8fHx//Hx8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly
- 8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//////8AAABAAAAAKAAAABQAAAAIAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAACAAAACAAAABQAAAAoAAAAQAAAAFgAAABsAAAAeP/////m5uX/5ubl/+fm
- 5f/n5uX/5+fm/+fn5v/o5+b/6Ojn/+jo5//p6Of/6ejn/+np6P/p6ej/6eno/+rq6f/q6un/6urp/+rq
- 6f/r6+r/6+vq/+vr6v/r6+r/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7e3s/+3t7P/t7ez/7e3s/+3t
- 7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7f/u7u3/7u7t/+7u7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v
- 7v/v7+//7+/v/+/v7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDw//Dw8P/w8PD/8PDw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx8f/x8fH/8fHx//Hx
- 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx
- 8f/x8fH//////wAAAEAAAAAoAAAAFAAAAAgAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAIAAAAFAAA
- ACgAAABAAAAAWAAAAGwAAAB4/////+bl5P/m5uX/5ubl/+fm5f/n5uX/5+fm/+fn5v/o5+b/6Ojn/+jo
- 5//o6Of/6ejn/+np6P/p6ej/6eno/+rp6P/q6un/6urp/+rq6f/r6un/6+vq/+vr6v/r6+r/6+vq/+zs
- 6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u
- 7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7//v7+//7+/v//Dw
- 7//w8O//8PDv//Dw7//w8O//8PDv//Dw7//w8O//8PDw//Dw8P/w8PD/8PDw//Dw8P/x8fD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P//////AAAAQAAAACgAAAAUAAAACAAA
- AAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAgAAAAUAAAAKAAAAEAAAABYAAAAbAAAAHj/////5uXk/+bl
- 5P/m5eT/5ubl/+fm5f/n5uX/5+fm/+fn5v/o5+b/6Ofm/+jo5//o6Of/6ejn/+np6P/p6ej/6eno/+rp
- 6P/q6un/6urp/+rq6f/q6un/6+vq/+vr6v/r6+r/6+vq/+zs6//s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs
- 7P/t7ez/7e3s/+3t7P/t7ez/7e3s/+3t7P/t7e3/7u7t/+7u7f/u7u3/7u7t/+7u7f/u7u3/7u7u/+7u
- 7v/v7+7/7+/u/+/v7v/v7+7/7+/u/+/v7v/v7+7/7+/v/+/v7//v7+//7+/v//Dw7//w8O//8PDv//Dw
- 7//w8O//8PDv//Dw7//w8O//8PDv//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/x8fD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx
- 8P/x8fD/8fHw//////8AAABAAAAAKAAAABQAAAAIAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABwAA
- ABMAAAAnAAAAPwAAAFYAAABqAAAAdv/////r6+r/5eXk/+bl5P/m5eT/5ubl/+fm5f/n5uX/5+fm/+fn
- 5v/o5+b/6Ofm/+jo5//o6Of/6Ojn/+no5//p6ej/6eno/+np6P/q6ej/6urp/+rq6f/q6un/6+rp/+vr
- 6v/r6+r/6+vq/+vr6v/s7Ov/7Ozr/+zs6//s7Ov/7Ozr/+zs6//s7Oz/7e3s/+3t7P/t7ez/7e3s/+3t
- 7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7f/u7u3/7u7t/+7u7f/u7u7/7u7u/+/v7v/v7+7/7+/u/+/v
- 7v/v7+7/7+/u/+/v7v/v7+7/7+/v/+/v7//v7+//7+/v//Dw7//w8O//8PDv//Dw7//w8O//8PDv//Dw
- 7//w8O//8PDv//Dw7//w8O//8PDv//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw
- 8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/z8/P//////wAAAD8AAAAnAAAAEwAA
- AAcAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAHAAAAEgAAACUAAAA8AAAAUgAAAGUAAABw////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////////////////////////////////////////////////////////////
- ////////////////////////AAAAPAAAACUAAAASAAAABwAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA
- AAYAAAAQAAAAIQAAADYAAABKAAAAWwAAAGUAAABqAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAA
- AGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGwAAABsAAAAbAAAAGoAAABlAAAAWwAAAEoAAAA2AAAAIQAA
- ABAAAAAGAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAABQAAAA0AAAAbAAAALAAAADwAAABKAAAAUgAA
- AFYAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAAAFgAAABYAAAAWAAA
- AFgAAABYAAAAVgAAAFIAAABKAAAAPAAAACwAAAAbAAAADQAAAAUAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAAEAAAACQAAABQAAAAgAAAALAAAADUAAAA8AAAAPgAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAA
- AEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAA+AAAAPAAAADUAAAAsAAAAIAAA
- ABQAAAAJAAAABAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAGAAAADAAAABQAAAAbAAAAIQAA
- ACUAAAAnAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAA
- ACgAAAAoAAAAKAAAACcAAAAlAAAAIQAAABsAAAAUAAAADAAAAAYAAAACAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAQAAAAMAAAAGAAAACgAAAA0AAAAQAAAAEgAAABMAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAA
- ABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAFAAAABQAAAAUAAAAEwAAABIAAAAQAAAADQAA
- AAoAAAAGAAAAAwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAEAAAABQAA
- AAYAAAAHAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAABwAAAAYAAAAFAAAABAAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAA
- AAEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////////gAAAAAAAAAAD/////////
- wAAAAAAAAAAAf////////8AAAAAAAAAAAH//4AAAAAAAAAAAAAAAAAP//8AAAAAAAAAAAAAAAA////+A
- AAAAAAAAAAAQAA//////gAAAAAAAAAAAAAAP/////wAAAAAAAAAAAAAAD/////8AAAAAAAAAAAAAAA/H
- ////AAAAAAAAAAAAAAAPgf///wAAAAAAAAAAAAAADwD///8AAAAAAAAAAAAAAAAAf///AAAAAAAAAAAA
- AAAAAD///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAAf//wAAAAAA
- AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8A
- AAAAAAAAAAAAAAAAD///AAAAAAAAAAAAAAAAAB///wAAAAAAAAAAAAAAAAAf//8AAAAAAAAAAAAAAAAA
- D///AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAf/AAAAAAAAAAAA
- AAAAAAAH/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAP/AAAAAAAAAAAAAAAAAAAD/wAAAAAA
- AAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAP8A
- AAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAA/8AAAAAAAAAAAAAAAAA
- AAf/AAAAAAAAAAAAAAAAAAAf/wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAAAD//AAAAAAAAAAAA
- AAAAAAA//wAAAAAAAAAAAAAAAAAAD/8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAAAAAAAAAA/wAAAAAA
- AAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP8A
- AAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAA/wAAAAAAAAAAAAAAAAAAAP8AAAAAAAAAAAAAAAAA
- AAD/AAAAAAAAAAAAAAAAAAAB/wAAAAAAAAAAAAAAAAAAAf8AAAAAAAAAAAAAAAAAAAH/AAAAAAAAAAAA
- AAAAAAAD/wAAAAAAAAAAAAAAAAAAB/8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAH//wAAAAAA
- AAAAAAAAAAAD//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAAAAAAAAD//wAAAAAAAAAAAAAAAAAAf/8A
- AAAAAAAAAAAAAAAAAH//AAAAAAAAAAAAAAAAAAA//wAAAAAAAAAAAAAAAAAAP/8AAAAAAAAAAAAAAAAA
- AH//AAAAAAAAAAAAAAAAAAB//wAAAAAAAAAAAAAAAAAA//8AAAAAAAAAAAAAAAAAAf//AAAAAAAAAAAA
- AAAAAAP//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAA
- AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8A
- AAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAA
- B///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAA
- AAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAA
- AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8A
- AAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAA
- B///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAA
- AAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAA
- AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8A
- AAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAA
- B///AAAAAAAAAAAAAAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAA
- AAAAAAf//wAAAAAAAAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///AAAAAAAAAAAAAAAAAAf//wAAAAAA
- AAAAAAAAAAAH//8AAAAAAAAAAAAAAAAAB///gAAAAAAAAAAAAAAAAA///4AAAAAAAAAAAAAAAAAP///A
- AAAAAAAAAAAAAAAAH///4AAAAAAAAAAAAAAAAD///////////////////////ygAAABIAAAAkAAAAAEA
- IAAAAAAAYFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAkAAAARAAAAFwAAABwAAAAiAAAAJgAAACsAAAAvAAAAMgAA
- ADUAAAA4AAAAOgAAADsAAAA9AAAAPgAAAEAAAABBAAAAQgAAAEMAAABDAAAARAAAAEMAAABBAAAAPwAA
- AD0AAAA8AAAAOgAAADgAAAA2AAAAMwAAAC8AAAArAAAAJwAAACIAAAAcAAAAGAAAABIAAAAKAAAAAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAgAAAAcAAAAOAAAAFAAAABoAAAAfAAAAIgAAACcAAAAsAAAALwAAADIAAAA0AAAAOQAA
- AEAAAABGAAAAQwAAAD4AAAA+AAAAPwAAAEAAAABLDAwMaRAQEGsDAwNfAAAAVAAAAEkAAAA/AAAAOAAA
- ADQAAAAyAAAALwAAACsAAAAnAAAAIwAAAB4AAAAaAAAAFAAAAA8AAAAIAAAAAgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAABQAAAAcAAAAJAAAACQAAAAkAAAAJAAAACQAA
- AAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAAAAkAAAAJAAAACQAA
- AAkAAAAJAAAACgAAAAwAAAAMAAAADQAAAA8AAAASAAAAFgAAABwAAAAuEBAQSTMzM21ISEiFHh4eXQAA
- ACQAAAAXAAAAFQAAABkPDw9KhoaGvJ2dndKOjo7EeHh4rFpaWo4xMTFkBAQEKQAAABAAAAAOAAAADQAA
- AAoAAAAGAAAABAAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAIAAAAKAAAAFQAAAB4AAAAhAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA
- ACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAAACIAAAAiAAAAIgAA
- ACIAAAAiAAAAIgAAACIAAAAiAgICMxwcHFdUVFSJjIyMvLCwsOG8vLzueXl5qQYGBjcAAAALAAAAAwEB
- AQtERERlwcHB7tHR0f/R0dH+z8/P+8jIyPSZmZnAHx8fNgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAYAAAAYAAAAMQAAAETNzc2g0NDQpNDQ0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ
- 0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ0KTQ0NCk0NDQpNDQ
- 0KTIyMimhoaGvJ+fn+DDw8P4ycnJ/snJyf/Kysr+ubm58HNzc68YGBg4AAAAIQwMDC+Ghoalz8/P/dTU
- 1P/W1tb/19fX/9fX1/+rq6vUJiYmPAAAAAIAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAjAAAASAAA
- AGP4+Pj59/f3//f39//4+Pj/+Pj4//n5+f/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//z8
- /P/8/Pz//Pz8//z8/P/9/f3//f39//39/f/9/f3//v7+//7+/v/+/v7//f39//z8/P/19fX/uLi4/7+/
- v//IyMj/ycnJ/8rKyv/Ly8v/zMzM/6+vr/6KiorbcXFxpnx8fKi5ubnj1NTU/tbW1v/Y2Nj/2dnZ/9nZ
- 2f+urq7VLCwsPgAAAAMAAAAAAAAAAgQEBB4mJiZCEBAQKgAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAoAAAAUQAAAHD39/f69vb2//f3
- 9//39/f/+Pj4//j4+P/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8
- /P/9/f3//f39//39/f/9/f3//v7+//z8/P/9/f3//f39//z8/P/4+Pj/wcHB/7y8vP/Kysr/ysrK/8zM
- zP/Nzc3/zs7O/87Ozv/Ly8v+zc3N+8/Pz/vT09P+19fX/9nZ2f/a2tr/29vb/9vb2/+4uLjfS0tLZw8P
- DygAAAAPDg4OKmxsbISsrKzNi4uLpC4uLkkBAQEOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2//f39//39/f/+Pj4//j4
- +P/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/9/f3//f39//39
- /f/8/Pz/7+/v/9jY2P/n5+f/+Pj4//v7+//19fX/wsLC/7i4uP/MzMz/zMzM/87Ozv/Pz8//0NDQ/9LS
- 0v/T09P/1dXV/9bW1v/X19f/2dnZ/9ra2v/b29v/3d3d/93d3f/U1NT6uLi42YeHh6BERERleXl5lcfH
- x+ne3t791dXV9qCgoL49PT1TBgYGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2//b29v/29vb/9/f3//j4+P/5+fn/+vr6//r6
- +v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/9/f3//f39//z8/P/v7+//urq6/7Gx
- sf+wsLD/yMjI/+fn5//Hx8f/rq6u/8TExP/Ozs7/zs7O/8/Pz//R0dH/0tLS/9TU1P/V1dX/19fX/9jY
- 2P/a2tr/29vb/9zc3P/d3d3/39/f/+Hh4f/h4eH/4ODg/9jY2PvDw8Pn0tLS9eXl5f7q6ur/6urq/9/f
- 3/yrq6vLQUFBWQEBARAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL39/f69vb2/+Xl5f/BwcH/6urq//j4+P/5+fn/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/9/f3//Pz8//Ly8v++vr7/urq6/83Nzf/Ly8v/uLi4/6ur
- q/+zs7P/zMzM/8/Pz//Pz8//0NDQ/9LS0v/T09P/1NTU/9bW1v/X19f/2dnZ/9ra2v/b29v/3Nzc/97e
- 3v/g4OD/4eHh/+Pj4//k5OT/5eXl/+bm5v/m5ub/6Ojo/+vr6//s7Oz/7e3t/+7u7v/f39/9kZGRqxIS
- EikAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL39/f69vb2/8jIyP+JiYn/0NDQ//j4+P/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7
- +//8/Pz//Pz8//z8/P/9/f3/9vb2/8fHx/+2trb/y8vL/8fHx//Jycn/zMzM/83Nzf/Pz8//zs7O/8/P
- z//Q0ND/0tLS/9PT0//V1dX/19fX/9ra2v/e3t7/4eHh/+Li4v/j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Tk
- 5P/l5eX/5+fn/+jo6P/q6ur/6+vr/+3t7f/u7u7/7+/v/+/v7//S0tLwaWlpfAQEBBcAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2/+/v
- 7//Y2Nj/8PDw//j4+P/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8
- /P/8/Pz/2dnZ/7Ozs//Ly8v/yMjI/8nJyf/Kysr/y8vL/87Ozv/Pz8//0NDQ/9HR0f/S0tL/1NTU/9jY
- 2P/f39//5uXl/+Xh3v/f2tX/3NnW/9nX1P/Z1tT/29jX/+De3f/m5uX/6enp/+np6f/o6Oj/6enp/+rq
- 6v/s7Oz/7e3t/+/v7//w8PD/8fHx/+bm5v2fn5+6JCQkNgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2//f39//39/f/+Pj4//j4
- +P/5+fn/+vr6//r6+v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/7+/v/ycnJ/7u7
- u//Nzc3/ycnJ/8vLy//MzMz/zc3N/8/Pz//Q0ND/0dHR/9PT0//V1dX/3t7e/+no5//g18//wauV/6uQ
- df+ypJX/t66m/7iwqP+3rqf/tKuj/7Oqof+3r6f/ysXA/+De3P/s6+v/7Ozs/+zs7P/t7e3/7+/v//Dw
- 8P/y8vL/8fHx/9fX1/ZcXFyAAQEBFwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2//f39//39/f/+Pj4//j4+P/5+fn/+vr6//r6
- +v/6+vr/+vr6//v7+//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz/5OTk/7Ozs//Hx8f/zc3N/83N
- zf/Ozs7/z8/P/9HR0f/S0tL/09PT/9jY2P/o6Oj/6uXg/7WYe/+QXi3/o39b/8e8sf/Y0sz/4NvW/+DY
- 0P/RuqT/vZNo/654Qv+iazT/mWc1/5lzTf+6p5T/5eDd//Dw8P/w8PD/8fHx//Ly8v/09PT/9PT0/+fn
- 5/2dnZ24IiIiOQAAAAUAAAABAAAABgAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL39/f69vb2//b29v/z8/P/+Pj4//j4+P/5+fn/+vr6//r6+v/6+vr/+vr6//v7
- +//7+/v/+/v7//v7+//8/Pz//Pz8//z8/P/8/Pz/+/v7/97e3v+wsLD/zs7O/9DQ0P/Q0ND/0dHR/9PT
- 0//U1NT/2dnZ/+vq6f/ZzL//lmc4/41PEv+3lnX/3NTO/+jm4//w7ez/5dK//8eQWP+yZBb/rloI/6tW
- A/+oVAD/o1EA/5pNAf+NSAb/mGo9/9DBsv/x8fD/8/Pz//T09P/19fX/9/f3//f39/7b29v0eHh4jRgY
- GEE4ODhNT09PZDc3N1YGBgYXAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL39/f69vb2/9fX1v+lpaX/3d3d//j4+P/5+fn/+fn5//r6+v/6+vr/+vr6/+7u7v/v7+//5+fn//Hx
- 8f/t7e3/6urq//T09P/s7Oz/8/Pz/+fn5/+srKz/ycnJ/9LS0v/S0tL/09PT/9XV1f/Z2dn/6Ofn/828
- q/+PWib/kEsG/72Xcv/i3Nb/7+7t//Pz8v/hx67/v307/7dqHv+3bCH/uG0j/7ZqHv+zYxT/r1wJ/6xW
- A/+jUgH/k0oB/5BYIf/JtaH/9PPz//b29v/4+Pj/+fn5//r6+v/09PT+z8/P6Lu7u9PIyMjf1dXV7K6u
- rsg4ODhHAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/f69vb2/9DQ
- 0P+Pj4//1dXV//j4+P/5+fn/+fn5//r6+v/6+vr/+vr6/9HR0f/Z2dn/xsbG/8jIyP/Z2dn/v7+//9ra
- 2v/Gxsb/ycnJ/7a2tv+bm5v/09PT/9PT0//U1NT/1dXV/9fX1//l5eX/0sW4/5FfLf+PSAH/sHY8/+La
- 0v/t7e3/8PDv/+XVxv+6ciz/sF0K/7FgDv+0ZRf/t2sg/7pyKv+7dC7/uXAo/7VpG/+yYRD/qloK/5dN
- Bf+QWSL/2Mq8//n4+P/6+vr/+/v7//z8/P/8/Pz/9PT0/vLy8v719fX/9fX1/9ra2vJwcHB+AAAAEQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/b69vb1//X19f/t7e3/9vb2//j4
- +P/5+fj/+fn5//r6+v/6+vr/+vr6/+rq6v/X19f/xcXF/+Xl5f/u7u7/z8/P/6+vr/+np6f/sbGx/5qa
- mv+7u7v/1dXV/9TU1P/V1dX/19fX/97e3v/j3tr/lmk+/4xGAf+jVwz/1b2m/+rp6f/s7Oz/6+bh/8WN
- Vv+uVwH/rlgD/69bCP+yYRD/tWga/7lwJv+9dzL/wH47/799PP+7dS7/t2wh/7BkGf+XUQv/mGk6/+3m
- 4f/7+/v//Pz8//z8/P/7+/v/+vr6//n5+f/39/f/9vb2/+rq6v2jo6O1ERERKgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL39/b69vb1//b29v/39/f/9/f3//j4+P/4+Pj/+fn5//r6
- +v/6+vr/+vr6//r6+v/19fX/x8fH//T09P/m5ub/wsLC/7u7u//Gxsb/xsbG/8rKyv/X19f/1dXV/9bW
- 1v/Y2Nj/2tra/+fn5/+1m4L/h0cG/51OAP+6fED/5ODc/+jo6P/q6ur/3sq3/7JjFP+wWwf/sV8N/7Ji
- Ef+0ZRf/tmgb/7hsIf+6cSn/vHcx/799Ov/Afjv/u3Qt/7VpHP+rXxP/jk0L/7yghP/49/X/+/v7//v7
- +//5+fn/+Pj4//f39//19fX/9fX1//Dw8P/Hx8fdPDw8UAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL39/b69vb1//b29v/39/f/9/f3//j4+P/4+Pj/+fn5//r6+v/6+vr/+vr6//r6
- +v/5+fn/8vLy//r6+v/u7u7/tbW1/9PT0//T09P/1NTU/9XV1f/W1tb/19fX/9jY2P/a2tr/39/f/97Y
- 0/+MWij/k0gA/6hWBf/KpH7/5OTj/+bm5v/o5+b/0a2J/7FgD/+yYhL/tGYX/7VoG/+2aR3/tmkc/7Vn
- Gf+1Zhj/tmkc/7hvJP+7dS//vHcx/7htI/+wYBD/nlMI/5VhLv/i2M//+fn5//n5+f/4+Pj/9vb2//X1
- 9f/09PT/8/Pz/+3t7f7Q0NDpV1dXbAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL29vb69fX1//Hx8f/l5eX/9PT0//f39//4+Pj/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+/v7//v7
- +//m5ub/tra2/9bW1v/T09P/1NTU/9bW1v/X19f/2dnZ/9ra2v/c3Nz/4uLh/72ql/+FRQb/n08A/69e
- Dv/Tvaf/4uLi/+Xl5f/m5OP/y59z/7RlFv+2aBv/tmod/7ZpHP+1Zxj/tGQV/7JhEf+xYA7/sV4M/7Jg
- Dv+1Zxn/uW4l/7pxKP+0Zhf/p1YE/41JBv/Apoz/9/b2//f39//29vb/9fX1//T09P/w8PD+5ubm+sfH
- x92KioqYJiYmOwAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69fX1/8zM
- zP+VlZX/1dXV//f39//4+Pj/+fn4//n5+f/5+fn/+vr6//n5+f/5+fn/+/v7//v7+//a2tr/u7u7/9fX
- 1//V1dX/1tbW/9jY2P/Z2dn/29vb/9zc3P/e3t7/4N7c/515Vv+NRgD/p1MA/7JlGP/WyLr/4eHh/+Pj
- 4//l5OL/zaR8/7dqHv+2aR3/tWca/7RlFv+yYhH/sWAO/7BdCv+vWwf/rlkD/65YAf+vWwb/s2QU/7ht
- Iv+4biP/r18O/5RKAf+jeVD/7uzp//X19f/09PT/8/Pz//Hx8f/m5ub8qqqqv0tLS2AREREkAAAABgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69fX1/93d3f+mpqb/4ODg//f3
- 9//4+Pj/+Pj4//n5+f/5+fn/+vr6/+np6f/V1dX/6enp//Pz8/+8vLz/vLy8/9nZ2f/W1tb/2NjY/9nZ
- 2f/b29v/3d3d/97e3v/g4OD/2dTQ/4tcLv+VSQD/q1UA/7RqIP/Wy8D/39/f/+Li4v/k5OP/1bqe/7ds
- If+1Zhj/s2MU/7JhEP+wXgv/sFsH/65ZA/+uVwH/rlcA/65XAP+uVwD/r1wH/7RmF/+5byb/tWoe/55S
- B/+TXCb/49vU//T09P/z8/P/8fHx//Dw8P/j4+P4ZGRkfgAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69fX1//X19f/z8/P/9vb2//f39//4+Pj/+Pj4//n5
- +f/5+fn/+vr6/+np6f/c3Nz/6+vr/8zMzP+8vLz/q6ur/8zMzP/a2tr/3Nzc/9zc3P/d3d3/3t7e/+Dg
- 4P/h4eH/z8e//4ROGf+bTAD/rFYA/7RrIf/Vyb3/39/f/+Hh4f/j4+P/3dLG/7x4Nv+zYxP/sWAO/7Bd
- Cv+vWgX/rlcB/65XAP+uVwD/rlcA/65XAP+uVwD/rlcB/7FeC/+2aRz/uHAn/6VbE/+QVRr/1cm8//Ly
- 8v/x8fH/8PDw/+7u7v/m5ub7e3t7jAgICBEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL29vb69fX0//X19f/29vb/9vb2//f39//39/f/+Pj4//n5+f/5+fn/+vr6/97e
- 3v/X19f/5+fn/9LS0v/X19f/s7Oz/7S0tP+xsbH/ycnJ/9/f3//f39//4ODg/+Li4v/h4eH/yb+0/39G
- Df+dTgD/rlgE/7RoHP/TwrP/3d3d/+Dg4P/h4eH/4d7c/8ukff+yYxP/sFwJ/69aBf+uVwH/rlcA/65X
- AP+uVwD/rlcA/65XAP+uVwD/rlcA/65aBP+zYxT/uG4l/6hjHf+RVRr/zb6v//Dw8P/v7+//7u7u/+3t
- 7f/m5ub8i4uLoBISEi8AAAAPAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL29vb69PT0//X19f/29vb/9vb2//f39v/39/f/+Pj4//j4+P/5+fn/+fn5/+7u7v/j4+P/4ODg//T0
- 9P/6+vr/+Pj4//Hx8f/U1NT/tra2/97e3v/g4OD/4uLi/+Tk5P/i4uL/x72z/39FDf+eUAL/r1wJ/7Rm
- Gf/Ns5r/3Nzc/97e3v/f39//4ODg/9zUzP+9f0L/sF0K/69aBf+vWQT/r1kE/65YA/+uWAH/rlcA/65X
- AP+uVwD/rlcA/65XAf+xXgz/tWoe/6hmIv+TWiH/zb6v/+3t7f/u7u7/7e3t/+vr6//o6Oj+z8/P5JmZ
- madiYmJvMDAwOgAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69PT0/+vr
- 6//MzMz/7u7u//b29v/39/f/9/f3//j4+P/4+Pj/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+/v7//v7
- +//s7Oz/ubm5/97e3v/j4+P/5OTk/+Xl5f/k5OT/ysK6/4JOGv+cUQb/sF8O/7RlF//GmnD/2tnY/9vb
- 2//d3d3/39/f/+Li4v/cz8H/x5Jd/8GAP//BgUD/wH49/756Nv+6cyv/tmkc/7JgD/+uWQT/rlcA/65X
- AP+vWgf/smUY/6VkIv+WYi3/0se8/+zs7P/s7Oz/6+vr/+rq6v/p6en/5+fn/uTk5Pza2trwpaWlswIC
- Ai0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69PT0/8PDw/+JiYn/zMzM//b2
- 9v/39/f/9/f3//j4+P/4+Pj/+fn5//n5+f/6+vr/+vr6//r6+v/6+vr/+/v7//r6+v/k5OT/tLS0/9zc
- 3P/l5eX/5ubm/+fn5//m5ub/0c3J/4hcMP+WUAn/sGES/7VnGv+8fDv/1c3F/9zc3P/h4eH/5eXl/+fn
- 5//p6en/5t/Z/9m6nP/Nm2n/y5Vf/8qSW//JkFf/xotQ/8OFR/++ejb/tmkd/7BcCP+uWQT/rWAS/59f
- Hv+ZbD7/2tTO/+rq6v/r6+v/6enp/+jo6P/n5+f/5ubm/+Tk5P/k5OT+tLS0wwAAAC8AAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL29vb69PT0/+jo6P/Dw8P/6urq//b29v/39/b/9/f3//j4
- +P/4+Pj/+fn4//n5+f/6+vr/+vr6//r6+v/5+fn/8vLy/9bW1v+3t7f/xcXF/+Pj4//n5+f/6Ojo/+np
- 6f/p6en/19XT/5Z2Vv+OTQz/rGAV/7ZqHf+7dS7/0Laa/+Df3v/i4uL/5OTk/+bm5v/o6Oj/6urq/+rn
- 5P/cwKX/zpxq/82YZP/LlF7/yY9W/8aKTv/EhEb/wH47/7t0Lf+zZBb/plsQ/5dZG/+mhGH/4N3b/+np
- 6f/p6en/5+fn/+bm5v/l5eX/5OTk/+Pj4//i4uL8pqamrwAAACEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL29vX69PTz//T09P/19fT/9fX1//b29f/29vb/9/f3//f39//4+Pj/+Pj4//n5
- +f/5+fn/+vr6//r6+v/09PT/xsbG/7q6uv/X19f/5ubm/+jo6P/o6Oj/6urq/+vr6//s7Oz/39/f/7Gh
- kf+ESxL/pF0Y/7dwKv/BgD//yJRg/9rPxf/g4OD/4+Pj/+Xl5f/n5+f/6urq/+vr6//m3NH/0qV4/86b
- af/MlmH/yZBY/8aKTv/DhEX/wH47/713Mv+0bif/oV8c/5FYH/+6pZH/5OTk/+jo6P/n5+f/5ubm/+Xl
- 5f/k5OT/4uLi/+Hh4f/g4OD5jIyMkwAAABUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL19fX68/Pz//T09P/19fT/9fX1//X19f/29vb/9vb2//f39//39/f/+Pj4//j4+P/5+fn/+vr6//r6
- +v/u7u7/tbW1/9zc3P/n5+f/6Ojo/+np6f/q6ur/7Ozs/+3t7f/u7u7/6ejo/8vHw/+GWzD/l1ga/7Ny
- Mf+/fT3/woJD/82lff/b1c//4ODg/+Pj4//l5eX/6Ojo/+rq6v/q5+X/1rGM/82ZZf/Kk1z/x41T/8SH
- Sf/BgED/vno2/7lzLP+rZiL/lloe/5NoPf/Px7//5eXl/+fn5//l5eX/5eXl/+Tk5P/k5OT/4+Pj/+Li
- 4v/a2trva2trcgAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fX68/Pz//T0
- 9P/29vX/9fX1//X19f/29vb/9vb2//f39//39/f/+Pj4//j4+P/5+fn/+fn5//r6+v/19fX/xMTE/9HR
- 0f/o6Oj/6enp/+vr6//s7Oz/7u7u/+/v7//w8PD/8PDw/9zc3P+mkn//g1Ae/59iJ/+1czH/vns4/8GB
- Qf/Lo3v/29TO/9/f3//i4uL/5OTk/+bm5v/n5+b/2sCn/8mRWf/Gi1D/xIZI/8GAP/++ejb/uXMt/65o
- Iv+bWhn/hU4Y/66ZhP/d3Nv/5ubm/+Xl5f/k5OT/4+Pj/+Tk5PnJycnawcHB0sHBwdKtra26MjIyRQAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fX68/Py/93d3P+ysrL/5OTk//X1
- 9f/29vX/9vb2//f39v/39/f/9/f3//j4+P/4+Pj/+fn5//n5+f/5+fn/2dnZ/7y8vP/q6ur/6+vr/+3t
- 7f/u7u7/7+/v//Hx8f/z8/P/9PT0/+7u7v/JxsP/i2pL/4ROGf+gYSH/sm4q/7p1L/+9ejf/xpZl/9TF
- tf/c2db/3NTN/9rLvP/Wu6D/zaBz/8OERv/Afz7/vns3/7x2MP+3byj/q2Qe/5tYFP+HSw//km1I/9HN
- yf/i4uL/5OTk/+Tk5P/i4uL/5OTk/sjIyNY2NjZXFxcXMxcXFzMUFBQsBAQEDgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fX68/Py/8rKyv+Ojo7/0dHR//T09P/19fX/9vb1//b2
- 9v/39/b/9/f3//j49//4+Pj/+fn5//n5+f/5+fn/7Ozs/7W1tf/i4uL/7e3t/+7u7v/v7+//8PDw//Pz
- 8//09PT/9fX1//f39//l5eX/urKq/4ReOf+ESxL/nFoY/6tkHf+zaiH/t28l/7x7Of/CjVf/wIVK/79+
- Pf++ejb/vHcx/7t0Lf+6cir/t20k/7BnHf+lXRb/l1IO/4VHCP+FWCv/wbeu/97e3v/k5OT/4+Pj/+Li
- 4v/h4eH/4eHh9pOTk5oEBAQeAAAAAgAAAAIAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL19fX68vLy/+7u7v/b29r/7u7u//T09P/19fX/9fX1//b29v/29vb/9/f3//f3
- 9//4+Pj/+Pj4//n5+P/5+fn/9vb2/8nJyf/Hx8f/2tra/9bW1v/Ly8v/29vb//Pz8//29vb/9/f3//n5
- +f/4+Pj/3d3c/7Sqn/+AWDD/gUcO/5NQDv+fVw//p1wR/6xfEv+xYxX/s2YZ/7RnGv+0Zxr/s2Ya/7Bk
- F/+sYBT/pVsQ/5xUC/+QSgb/gEIE/4JUJv+2qJr/2dnZ/+Pj4//j4+P/4uLi/+Dg4P/i4uL/1dXV5VJS
- UmYAAAALAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL19fX68vLy//Pz8v/z8/P/9PTz//T09P/09PT/9fX1//b29f/29vb/9vb2//X19f/29vb/9vb2//f3
- 9//39/f/9/f3/+vr6/+8vLz/n5+f/8HBwf/Hx8f/sbGx/+fn5//39/f/+fn5//v7+//8/Pz/+Pj4/93d
- 3f+4sar/hWNB/3lCDP+ERQb/j0kE/5ZMAv+cTwL/n1EE/6FTBf+hUwX/n1IE/5tPA/+WTAL/jkcB/4RC
- AP95PgX/i2U//7uwpf/X19f/4uLi/+Li4v/h4eH/4ODg/97e3v/f39//4ODg9JKSkpsLCwspAAAAAQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fX68vLx//Ly
- 8v/z8/P/9PTz//T08//09PT/9fX1//X19f/29vX/9vb2/8zMzP/R0dH/x8fH/8bGxv/Ly8v/wsLC/9TU
- 1P/Jycn/wcHB/9fX1//i4uL/oqKi/7W1tf/w8PD/+/v7//z8/P/8/Pz/+/v7//f39//j4+P/xMG//52J
- dv99VCv/dz8J/3w9AP+CQQD/h0MA/4pFAP+KRAD/iEMA/4NAAP99PQD/dz4G/35QI/+kjnn/yMTB/9nZ
- 2f/i4uL/4uLi/+Hh4f/f39//3t7e/93d3f/c3Nz/3t7e/9vb2+x2dnaDAAAAGgAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fT68vLx//Hx8f/o6Oj/8/Py//Pz
- 8//09PT/9PT0//X19f/19fX/9vb2/9/f3//Z2dn/xcXF/9nZ2f/V1dX/xMTE/+Pj4//b29v/0dHR/8/P
- z//W1tb/xsbG/6qqqv/l5eX/+/v7//v7+//6+vr/+fn5//j4+P/29vb/6+vr/9TT0/++uLP/o5KB/41t
- Tv9+Uyj/e0ob/3lGFP95RhT/e0oa/39TKP+NbEz/ppOA/7+5s//S0dD/3t7e/+Li4v/h4eH/4ODg/9/f
- 3//e3t7/3d3d/9vb2//a2tr/2dnZ/+Dg4P3CwsLNDAwMOgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL19fT68fHx/8/Pz/+goKD/2NjY//Pz8//09PP/9PT0//X1
- 9P/19fX/9fX1//T09P/s7Ov/7Ozs//X19f/s7Oz/xcXF//f39//l5eX/2dnZ/+Hh4f/v7+//ubm5/8vL
- y//19fX/+/v7//r6+v/5+fn/9/f3//b29v/19fX/9PT0//Dw8P/n5+f/2tnZ/8zKyf/BvLf/ubGq/7Sq
- of+0qZ//ubGp/8G8t//KyMb/1dXU/93d3f/i4uL/4uLi/+Hh4f/g4OD/3t7e/9/f3//f39//29vb/9ra
- 2v/Y2Nj/2tra/t7e3vOTk5OYBQUFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL09PT68fHw/9LS0v+VlZX/19fW//Ly8v/z8/P/9PTz//T09P/09PT/9fX1//b2
- 9f/29vb/9vb2//f39//09PT/4eHh//X19f/4+Pj/+Pj4//n5+f/n5+f/tLS0/+zs7P/6+vr/+vr6//n5
- +f/39/f/9vb2//X19f/09PT/8vLy//Hx8f/w8PD/7u7u/+vr6//m5ub/4uLi/9/f3//e3t7/39/f/+Hh
- 4f/j4+P/5OTk/+Pj4//i4uL/4eHh/9/f3//e3t7/39/f/+Xl5f/k5OT/4uLi/9ra2v/Z2dn+4eHh+bKy
- srcnJyc9AAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL09PT68fHw//Hx8P/w8O//8vLy//Pz8v/z8/P/9PTz//T09P/09PT/9fX0//X19f/29vb/9vb2//b2
- 9v/39/f/9/f3//j4+P/4+Pj/+fn4//j4+P/b29v/u7u7//Pz8//5+fn/+Pj4//f39//19fX/9fX1//T0
- 9P/y8vL/8fHx/+/v7//u7u7/7e3t/+zs7P/r6+v/6enp/+jo6P/n5+f/5ubm/+Xl5f/j4+P/4uLi/+Hh
- 4f/g4OD/39/f/97e3v/j4+P/5OTk/7+/v/+wsLD/xcXF/+Li4v/m5ub7s7OzwTo6Ok4AAAAIAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL09PT68PDw//Hx
- 8P/x8fH/8vLx//Ly8v/z8/L/8/Pz//T08//09PP/9PT0//X19f/19fX/9vb2//b29v/29vb/9/f3//f3
- 9//4+Pf/+Pj4//j4+P/v7+//vr6+/8nJyf/x8fH/9vb2//X19f/19fX/6+vr/+Dg4P/u7u7/8fHx/+/v
- 7//t7e3/6+vr/+rq6v/p6en/6Ojo/+fn5//m5ub/5OTk/+Pj4//i4uL/4eHh/+Dg4P/e3t7/3d3d/+Li
- 4v/g4OD/tbW1/9HR0f/o6Oj/0dHR/7m5uf+FhYW1NDQ0WAEBAREAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL09PT68PDv//Dw8P/x8fD/8vLx//Ly
- 8f/y8vL/8/Py//Pz8//z8/P/9PT0/+vr6//j4+P/7Ozs/+fn5//w8PD/7e3t//T09P/q6un/4ODg/9/f
- 3//p6en/39/f/7q6uv+5ubn/6enp//T09P/c3Nz/sLCw/7W1tf+urq7/z8/P/+3t7f/t7e3/6urq/+np
- 6f/n5+f/5ubm/+Xl5f/k5OT/4+Pj/+Pj4//i4uL/39/f/97e3v/d3d3/3Nzc/+Dg4P/S0tL/w8PD//f3
- 9//7+/v/+fn5/+vr6/8dHR1VAAAAHAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL09PT68PDv/+vr6//b29v/7u7u//Ly8f/y8vH/8vLy//Pz
- 8v/z8/P/9PTz/9HR0P/f39//x8fH/9/f3v/S0tL/zs7O/97e3v/MzMz/0tLS/8HBwf++vr7/2trZ/7+/
- v/+2trb/srKy/8nJyf+dnZ3/uLi4/8vLy/+4uLj/np6e/9jY2P/s7Oz/6Ojo/+fn5//m5ub/5ubm/+vr
- 6//q6ur/6enp/+fn5//q6ur/4eHh/9zc3P/b29v/2tra/93d3f/b29v/v7+///j4+P/7+/v/+/v7//39
- /f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHL09PT67+/u/8TExP+Pj4//zs7O//Hx8P/x8fH/8vLx//Ly8v/z8/L/8/Pz/+Tk
- 5P/W1tb/2tra/83Nzf/FxcX/1dXV/9XV1f/Nzc3/4ODg/9bW1v/S0tL/zc3N/+Dg4P/U1NT/vr6+/56e
- nv/ExMT/zMzM/9bW1v/Hx8f/sLCw/9PT0//r6+v/5+fn/+bm5v/k5OT/6Ojo/9jY2P+2trb/uLi4/7Oz
- s//Kysr/5+fn/9vb2//Z2dn/2dnZ/9zc3P/j4+P/u7u7//X19f/7+/v/+/v7//39/f8lJSU9AAAAEwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHL09PP67+/u/+Dg4P+zs7P/4eHh//Dw8P/x8fH/8vLx//Ly8v/y8vL/8/Py//Pz8//09PP/9PT0//T0
- 9P/19fT/9fX1//b29f/29vb/9vb2//f39//39/f/9/f3//j4+P/4+Pj/9PT0/9bW1v/v7+//+Pj4//f3
- 9//W1tb/wsLC/9jY2P/r6+v/5eXl/+Tk5P/j4+P/6urq/8LCwv/T09P/7u7u/+np6f+8vLz/3Nzc/+Dg
- 4P/f39//5eXl/+Xl5f/MzMz/vb29//b29v/7+/v/+/v7//39/f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHL09PP67+/u/+/v
- 7v/v7+7/8PDv//Dw8P/x8fD/8fHx//Ly8f/y8vH/8vLy//Pz8v/z8/P/9PTz//T09P/09PT/9fX0//X1
- 9f/19fX/9vb2//b29v/39/b/9/f3//f39//39/f/+Pj4//f39//4+Pj/+fn5//n5+f/39/f/z8/P/8vL
- y//o6Oj/6+vr/+rq6v/q6ur/5ubm/729vf/v7+//+vr6//j4+P/Z2dn/v7+//+Tk5P/Y2Nj/w8PD/7u7
- u//Ly8v/6urq//r6+v/6+vr/+vr6//39/f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLz8/P67u7t/+/v7v/v7+7/8PDv//Dw
- 7//w8PD/8fHw//Hx8f/y8vH/8vLx//Ly8v/z8/L/8/Pz//Pz8//09PT/9PT0//X19P/19fX/9fX1//b2
- 9f/29vb/9vb2//f39v/39/f/9/f3//j49//4+Pj/+Pj4//j4+P/4+Pj/6urq/8fHx/++vr7/vLy8/8PD
- w//MzMz/w8PD/8/Pz//4+Pj/+vr6//r6+v/z8/P/ysrK/729vf/Hx8f/2dnZ/+vr6//29vb/+vr6//r6
- +v/6+vr/+vr6//z8/P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLz8/P67u7t/+7u7v/u7u3/7+/v/+/v7//w8O//8PDw//Hx
- 8P/x8fD/8vLx//Ly8f/y8vL/8/Py//Pz8//z8/P/9PTz//T09P/09PT/9fX0//X19f/29vX/9vb2//b2
- 9v/29vb/9fX0//f39//39/f/9/f3//j4+P/4+Pj/+Pj4//X19f/v7+//5eXl/93d3f/S0tL/1NTU/+/v
- 7//6+vr/+vr6//r6+v/4+Pj/9PT0/+/v7//29vb/+fn5//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//z8
- /P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHLz8/P67u7t/+Hh4f/CwsL/5ubm/+/v7//w8O//8PDv//Hx8P/x8fD/8fHx/9zc
- 2//e3t7/0NDQ/+Hh4f/a2tr/7Ozr/9ra2v/e3t3/2tra/+jo6P/e3t7/9PT0//b29v/s7Oz/zs7O/+Tk
- 5P/c3Nz/3t7e/97e3v/39/f/3t7e/+bm5v/f39//6Ojo/+np6f/i4uL/4eHh/+Dg4P/X19f/6+vr/9fX
- 1//c3Nz/39/f//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//r6+v/6+vr/+vr6//z8/P8lJSU9AAAAEwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHLz8/L67e3s/8PDw/+Ghob/zMzM/+7u7v/v7+//8PDv//Dw7//w8PD/8fHw/8/Pzv/Y2Nf/xcXE/8HB
- wf/a2tr/y8vK/8PDwv/Ozs7/29vb/8rKyv/FxcX/2tra//T09P/09PP/yMjI/8nJyf/b29v/xMTE/+fn
- 5//29vb/1NTU/9XV1f/Kysr/zs7O/8rKyv+7u7v/z8/P/8vLy//Gxsb/2dnZ/8TExP/z8/P/9/f3//n5
- +f/5+fn/+fn5//n5+f/5+fn/+fn5//n5+f/5+fn/+fn5//z8/P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLz8/L67e3s/+fn
- 5v/S0tH/6Ojn/+7u7v/v7+7/7+/u//Dw7//w8O//8PDw/+jo6P/U1NT/w8PD/+fn5v/R0dD/1tbW/8jI
- yP/s7Ov/1tbV/87Ozv/j4+P/39/f/9zc3P/z8/P/09PT/+zs7P/j4+P/zMzM/9HR0f/s7Oz/6+vr/9fX
- 1//X19f/7e3t/+Dg4P/R0dH/1NTU/+np6f/a2tr/3Nzc/8LCwv/e3t7/8/Pz//n5+f/5+fn/+fn5//n5
- +f/5+fn/+fn5//n5+f/5+fn/+fn4//z8/P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLz8/L67Ozr/+3t7P/t7ez/7u7t/+7u
- 7f/u7u7/7+/u/+/v7v/v7+//8PDv//Dw8P/r6+v/xMTE/+7u7f/x8fH/8fHw/8rKyv/n5+f/8/Py//Pz
- 8//09PP/9PT0//T09P/09PT/9fX0//X19f/s7Ov/6urq/+bm5v/z8/P/9vb2//b29v/39/b/9/f3//f3
- 9//39/f/9/f3//f39//39/f/9/f3/+fn5//t7e3/9vb2//j4+P/4+Pj/+Pj4//j4+P/4+Pj/+Pj4//j4
- +P/4+Pj/+Pj4//v7+/8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLy8vL67Ozr/+zs6//t7ez/7e3s/+3t7f/u7u3/7u7t/+/v
- 7v/v7+7/7+/v//Dw7//w8PD/8PDv//Hx8P/x8fH/8fHx//Ly8f/y8vH/8vLy//Pz8v/z8/P/8/Pz//T0
- 8//09PT/9PT0//T09P/19fT/9fX1//X19f/19fX/9vb1//b29f/29vb/9vb2//b29v/29vb/9/f2//f3
- 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v7
- +/8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHLy8vL67Ozr/+3t7P/v7+7/7u7t/+3t7P/u7u3/7u7t/+/v7v/v7+7/7+/u//Dw
- 7//w8O//8PDw//Hx8P/x8fD/8fHx//Ly8f/y8vH/8vLy//Pz8v/z8/L/8/Pz//Pz8//09PP/9PT0//T0
- 9P/09PP/8vLy//X19f/19fX/9fX1//X19f/29vX/9vb2//b29v/29vb/9vb2//b29v/39/b/9/f2//f3
- 9//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//f39//39/f/9/f3//v7+/8lJSU9AAAAEwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHLy8vL66+vq/9PT0/+mpqb/29va/+3t7P/t7ez/7u7t/+7u7f/u7u3/7+/u/+/v7v/v7+//8PDv//Dw
- 7//w8PD/8fHw//Hx8P/x8fH/8vLx//Ly8f/y8vL/8/Py//Pz8v/z8/P/8/Pz//T08//v7+7/09PT//T0
- 9P/w8O//7e3t//X19P/19fX/9fX1//X19f/29vX/9vb1//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
- 9v/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//v7+v8lJSU9AAAAEwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLy8vL66+vq/8vL
- y/+RkZH/0NDQ/+zs6//t7ez/7e3s/+7u7f/u7u3/7u7t/9fX1v/Ly8r/29vb/8/Pzv/a2tn/1tbW/+Tk
- 4//b29v/zMzL/9zc2//Q0ND/0tLS/97e3f/Pz8//7e3s/9vb2//X19b/vr6+/93d3f/b29v/yMjI/9PT
- 0v/W1tb/0dHR/8/Pz//b29v/3d3c/8/Pz//i4uL/9fX1//X19f/29vX/9vb1//b29f/29vX/9vb2//b2
- 9v/29vb/9vb2//b29v/29vX/9vb1//r6+v8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLy8vH66urp/+np6P/e3t7/6urp/+zs
- 6//s7Ov/7e3s/+3t7P/t7ez/7u7t/9nZ2f/b29r/4ODf/9LS0f/IyMj/w8PD/8nJyf/Pz8//zMzM/9PT
- 0v+8vLz/wcHA/8XFxf/U1NT/4ODf/9XV1f/j4+P/wsLC/97e3f/V1dX/xcXF/8fHx//U1NT/zc3M/8fH
- x//Nzc3/wMDA/8LCwv/g4OD/7+/v//X19f/19fX/9fX1//X19f/19fX/9fX1//X19f/19fX/9fX1//X1
- 9f/19fX/9fX1//r6+v8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLy8fH66uno/+rq6f/r6+r/6+vq/+zs6//s7Ov/7Ozr/+3t
- 7P/t7ez/7e3s/+Li4f/R0dH/7+/u/93d3P/W1tX/6urp/+Pj4//Y2Nf/2tra/+bm5f/m5ub/2tra/+Hh
- 4P/i4uL/8vLx/+7u7v/e3t7/y8vK/8/Pzv/o6Oj/3d3c/+rq6f/s7Ov/5OTk/+zs6//m5ub/39/f/9vb
- 2v/z8/L/9PTz//X19P/19fT/9fX0//X19P/19fT/9fX0//X19f/19fX/9fX1//X19P/19fT/9fX0//r6
- +v8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHLx8fH66eno/+rp6P/q6un/6+vq/+vr6v/r6+r/7Ozr/+zs6//s7Oz/7e3s/+np
- 6P/h4eD/7u7t/+7u7f/u7u7/7+/u/+/v7v/v7+//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHx//Ly
- 8f/v7+7/7+/v//Ly8f/y8vL/8/Py//Pz8v/z8/L/8/Pz//Pz8//z8/P/8/Pz//T08//09PP/9PTz//T0
- 8//09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/09PT/9PT0//n5+f8lJSU9AAAAEwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHLx8fD66ejn/+fn5v/e3t3/6eno/+vq6f/r6+r/6+vq/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3t/+7u
- 7f/u7u3/7u7u/+/v7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw8P/w8PD/8fHw//Hx8P/x8fH/8fHx//Ly
- 8f/y8vH/8vLx//Ly8v/y8vL/8vLy//Pz8v/z8/L/8/Py//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz
- 8//z8/P/9PTz//T08//09PP/9PTz//T08//z8/P/8/Pz//n5+f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLx8fD66Ojn/8jI
- yP+Xl5f/0tLS/+rq6f/q6un/6+vq/+vr6v/r6+r/7Ozr/+zs6//t7ez/7e3s/+3t7P/t7e3/7u7t/+7u
- 7f/u7u3/7+/u/+/v7v/v7+7/7+/v//Dw7//w8O//8PDv//Dw8P/x8fD/8fHw//Hx8P/x8fH/8fHx//Ly
- 8f/y8vH/8vLx//Ly8f/y8vL/8vLy//Ly8v/y8vL/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz
- 8v/z8/L/8/Py//Pz8v/z8/L/8/Py//n5+f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLx8PD65+fm/9PT0/+hoaH/19fW/+np
- 6P/q6un/6urp/+vq6f/r6+r/6+vq/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+7u7f/u7u3/7u7t/+7u
- 7v/v7+7/7+/u/+/v7v/v7+//8PDv//Dw7//w8O//8PDv//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx
- 8f/x8fH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly
- 8v/y8vL/8vLy//n5+f8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAsAAAApAAAAUgAAAHLw8PD65+bl/+fn5v/o5+b/6Ojn/+no5//p6ej/6uno/+rq
- 6f/q6un/6+vq/+vr6v/s7Ov/7Ozr/+zs6//t7ez/7e3s/+3t7P/t7e3/7u7t/+7u7f/u7u7/7+/u/+/v
- 7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8PD/8PDw//Hx8P/x8fD/8fHw//Hx8P/x8fH/8fHx//Hx
- 8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//Ly8f/y8vH/8vLx//n5
- +P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAsAAAApAAAAUgAAAHLw8PD65ubl/+fm5f/n5+b/6Ofm/+jo5//p6Of/6eno/+np6P/q6un/6urp/+vr
- 6v/r6+r/7Ozr/+zs6//s7Ov/7Ozr/+3t7P/t7ez/7e3s/+3t7f/u7u3/7u7t/+7u7f/u7u7/7+/u/+/v
- 7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8O//8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx
- 8P/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//j4+P8lJSU9AAAAEwAA
- AAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAApAAAAUgAA
- AHLw8O/65uXk/+bl5P/n5uX/5+fm/+jn5v/o6Of/6Ojn/+np6P/p6ej/6urp/+rq6f/q6un/6+vq/+vr
- 6v/s7Ov/7Ozr/+zs6//s7Ov/7e3s/+3t7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7v/u7u7/7+/u/+/v
- 7v/v7+7/7+/v/+/v7//v7+//8PDv//Dw7//w8O//8PDv//Dw7//w8PD/8PDw//Dw8P/w8PD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHw//j4+P8lJSU9AAAAEwAAAAMAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAsAAAAoAAAAUQAAAHDy8vH65+fm/+fn
- 5v/o5+b/6Ojn/+no5//p6ej/6eno/+rp6f/q6un/6+rp/+vr6v/r6+r/7Ozr/+zs6//s7Ov/7e3s/+3t
- 7P/t7ez/7e3t/+7u7f/u7u3/7u7t/+7u7v/v7+7/7+/u/+/v7v/v7+7/7+/v//Dw7//w8O//8PDv//Dw
- 7//w8PD/8PDw//Dw8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/x8fD/8fHx//Hx8f/x8fH/8fHx//Hx
- 8f/x8fH/8fHx//Hx8f/x8fH/8fHx//n5+f8lJSU8AAAAEgAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAkAAAASQAAAGWqqqqura2tsa2trbGtra2xra2tsa2t
- rbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2t
- rbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2t
- rbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2trbGtra2xra2tsa2t
- rbGtra2xsLCwrbu7u6MUFBQzAAAAEAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAYAAAAZAAAAMwAAAEYAAABOAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA
- AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA
- AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAA
- AE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAATwAAAE8AAABPAAAASgAA
- ADwAAAAiAAAACwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAMAAAAMAAAAGAAAACEAAAAlAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAA
- ACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAA
- ACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAA
- ACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAmAAAAJgAAACYAAAAlAAAAIwAAABwAAAAQAAAABQAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAABgAA
- AAkAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA
- AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA
- AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACgAA
- AAoAAAAKAAAACgAAAAoAAAAKAAAACgAAAAoAAAAKAAAACQAAAAcAAAAEAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAD////wAAAAAA8AAAD////wAAAAAA8AAAD8AAAAAAAAAH8AAAD4AAAAAAAAf/8AAAD4AAAAAAAAd/8A
- AAD4AAAAAAAAQf8AAAD4AAAAAAAAAP8AAAD4AAAAAAAAAH8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAH8AAAD4AAAAAAAAAAcAAAD4AAAAAAAAAAMA
- AAD4AAAAAAAAAAEAAAD4AAAAAAAAAAEAAAD4AAAAAAAAAAEAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAA
- AAD4AAAAAAAAAAAAAAD4AAAAAAAAAAEAAAD4AAAAAAAAAAcAAAD4AAAAAAAAAAcAAAD4AAAAAAAAAAEA
- AAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAA
- AAD4AAAAAAAAAAAAAAD4AAAAAAAAAAAAAAD4AAAAAAAAAAEAAAD4AAAAAAAAAAMAAAD4AAAAAAAAAB8A
- AAD4AAAAAAAAAA8AAAD4AAAAAAAAAA8AAAD4AAAAAAAAAAcAAAD4AAAAAAAAAA8AAAD4AAAAAAAAAA8A
- AAD4AAAAAAAAAB8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8A
- AAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAD8AAAD4AAAAAAAAAH8A
- AAD8AAAAAAAAAH8AAAD///////////8AAAAoAAAAMAAAAGAAAAABACAAAAAAAIAlAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAARAAAAGQAAACIAAAAnAAAALgAAADIAAAA3AAAAOwAA
- AD8AAAA/AAAAQAAAAEEBAQFJBgYGUAAAAEkAAABCAAAAOwAAADcAAAAzAAAALwAAACgAAAAiAAAAGQAA
- ABIAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAEAAAABgAAAAYAAAAGAAAABgAA
- AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAcAAAALAAAADwAAABIAAAAVAAAAGwAA
- ACEEBAQ2ICAgVS8vL2YKCgo5AAAAIwAAACQ8PDxneXl5qm1tbZtQUFB+Hh4eSQEBASIAAAAZAAAAFgAA
- ABAAAAAMAAAACQAAAAUAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAABMAAAAmkZGRTJOT
- k02Tk5NNk5OTTZOTk02Tk5NNk5OTTZOTk02Tk5NNk5OTTZOTk02Tk5NNk5OTTZOTk02Tk5NNk5OTTZOT
- k02Tk5NNeXl5VGFhYXiTk5O6srKy4rS0tOJubm5/DQ0NFQYGBhOTk5Oizs7O+tLS0v3Ozs75j4+Plx8f
- HxQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAA
- ACoAAABQ7e3t3e3t7eDu7u7g7u7u4O/v7+Dv7+/g7+/v4PDw8ODw8PDg8fHx4PHx8eDx8fHg8vLy4PLy
- 8uDy8vLg8vLy4PLy8uDx8fHg1NTU47GxsfDHx8f9ycnJ/snJyf2tra3rd3d3lmtra326urre1NTU/tfX
- 1//Y2Nj/nJycoiYmJhYAAAAAAwMDDSAgICYMDAwMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADUAAABm9vb2+/b29v/39/f/+Pj4//n5+f/6+vr/+vr6//r6+v/7+/v/+/v7//z8
- /P/8/Pz//f39//39/f/7+/v/8vLy//f39//7+/v/5eXl/7y8vP/Kysr/zMzM/87Ozv/Pz8//zs7O/dDQ
- 0PzV1dX+2NjY/9ra2v/b29v/s7OzyW9vb2RCQkI3iYmJiLi4uNOKioqKKysrGgYGBgEAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb2+/b29v/29vb/9/f3//n5+f/6+vr/+vr6//r6
- +v/7+/v/+/v7//z8/P/8/Pz//f39//z8/P/m5ub/wsLC/8nJyf/m5ub/y8vL/7y8vP/Nzc3/zs7O/9DQ
- 0P/S0tL/1dXV/9fX1//Z2dn/29vb/93d3f/f39//2dnZ+cnJyeOysrLE0tLS6+Xl5f3V1dXuiYmJgi0t
- LRwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb2++Tk5P+/v7//8PDw//n5
- +f/6+vr/+vr6//r6+v/7+/v/+/v7//z8/P/8/Pz/+/v7/+vr6/+8vLz/x8fH/8bGxv+5ubn/wcHB/87O
- zv/Pz8//0dHR/9TU1P/W1tb/2tra/9zc3P/d3d3/39/f/+Hh4f/i4uL/5OTk/+bm5v/n5+f/6urq/+3t
- 7f/u7u7/xsbG2WFhYUsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb2++jo
- 6P/Kysr/8fHx//n5+f/6+vr/+vr6//r6+v/7+/v/+/v7//z8/P/8/Pz/8/Pz/8fHx//FxcX/yMjI/8rK
- yv/MzMz/z8/P/9DQ0P/S0tL/1dXV/93d3f/h393/3tvY/9za2P/c2tn/397d/+Xl5f/n5+f/5+fn/+np
- 6f/r6+v/7e3t/+/v7//r6+v+oqKioTo6OiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn9vb2+/b29v/39/f/+Pj4//n5+f/6+vr/+vr6//r6+v/7+/v/+/v7//z8/P/8/Pz/7e3t/8DA
- wP/Kysr/y8vL/83Nzf/Pz8//0dHR/9PT0//d3dz/29PM/8Cokf+1nYb/wLas/8W9tf+8rZ7/s5yF/7Oc
- hv/Ds6P/4NrW/+zr6//u7u7/8PDw//Ly8v/j4+P6bGxsbREREQwAAAAAAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn9vb2+/b29v/19fX/+Pj4//n5+f/6+vr/+vr6//r6+v/7+/v/+/v7//z8
- /P/8/Pz/+fn5/9vb2/+/v7//zs7O/8/Pz//R0dH/1NTU/+Df3//Pvq3/onVI/7SUdf/WzcT/5t7Y/9a3
- l/+5ejv/rmUd/6NaEf+bWRf/o3VJ/8y7qv/x8fD/8/Pz//X19f/z8/P+tra2u0RERENAQEA5Pj4+PgYG
- BgoAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb2+9/f3/+xsbH/7u7u//n5+f/5+fn/+vr6/+vr
- 6//j4+P/4ODg/+Li4v/m5ub/4eHh/9vb2/+ysrL/0NDQ/9PT0//V1dX/3tzb/8axnf+SVRn/uZFp/+jm
- 4//u6ub/y5dl/7ZqHv+2ah//t2wi/7RmGf+wXg3/o1QF/5VSEf/HsJn/8vDv//n5+f/6+vr/7u7u+dPT
- 0+bb29vsysrK305OTj4AAAACAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb1++3t7P/X19f/8/Pz//n5
- +P/5+fn/+vr6/+np6f/R0dH/09PT/93d3f/BwcH/s7Oz/6qqqv+8vLz/09PT/9XV1f/Z2dn/0MK1/5dh
- LP+rbTH/3c/B/+zr6v/Zu57/sF0M/69bCP+zZBX/uG4j/7x3Mv+8dzL/tmsg/6tfFP+cZS7/2su8//v7
- +//7+/v/+vr6/vf39/729vb/6urq+4mJiXcODg4LAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9vb1+/b2
- 9f/39/f/9/f3//j4+P/5+fn/+vr6//r6+v/r6+v/6+vr/9ra2v/BwcH/ysrK/8zMzP/W1tb/1tbW/9nZ
- 2f/h397/nXBE/5lNAv/LpoL/5uXk/+Tb0/+/gUT/sV4M/7JjE/+1Zxn/tmkd/7huJf+7di//vXk0/7dt
- I/+kWQ//pXZI//Px7v/6+vr/+Pj4//b29v/09PT/8PDw/rS0tLM9PT0iAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn9fX1+/Pz8//u7u7/9vb2//j4+P/5+fn/+vr6//r6+v/5+fn/+fn5/9fX1//Kysr/09PT/9XV
- 1f/X19f/2dnZ/93d3P/Qxrz/jUwL/6ZWB//Ww7H/5OTk/97PwP+7eDX/tGYZ/7VoG/+1Zhj/s2MU/7Jh
- Ef+zYxP/t20j/7lwJ/+tXw//llIO/9rMvv/39/f/9vb2//T09P/v7+/93Nzc7pWVlZA0NDQdAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn9fX1+93d3f+vr6//7Ozs//j4+P/4+Pj/+fn5//X19f/v7+//9/f3/8nJ
- yf/Ozs7/1dXV/9fX1//a2tr/3Nzc/97d3P+uk3j/l0sA/69gEf/Z0Mj/4eHh/93RxP+/gEH/tWca/7Nk
- Ff+xXw3/r1wI/65ZA/+uVwH/r1wH/7RnGf+1ah7/n1QI/7eWd//x7+7/8/Pz//Hx8f/R0dHfcnJyZw8P
- DxEAAAABAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9fX1++/v7//g4OD/9PT0//j4+P/4+Pj/+fn5/+7u
- 7v/f39//3t7e/7i4uP/FxcX/2dnZ/9ra2v/c3Nz/3t7e/9vZ1/+felb/n04A/7FjFf/Y0Mj/4ODg/+Da
- 1P/FkFz/s2MT/7FfDf+vWgX/rlcB/65XAP+uVwD/rlcA/7BdCv+3bCD/qV8W/6l/Vf/q5uP/8fHx/+/v
- 7//MzMzTXV1dOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9fX1+/T09P/29vb/9vb2//f3
- 9//4+Pj/+fn5/+rq6v/e3t7/39/f/9ra2v/IyMj/vr6+/9XV1f/f39//4uLi/9nV0v+XbUT/olIC/7Ji
- E//Ux7v/3t7e/+Df3//Wwq7/s2ca/69aBv+uVwH/rlcB/65XAP+uVwD/rlcA/65YAf+zZRf/rWYg/6V5
- Tf/j3tn/7u7u/+zs7P/V1dXliIiIdkZGRiYfHx8JAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9fX1+/Dw
- 8P/h4eH/9PT0//f39//39/f/+Pj4//f39//y8vL/9fX1//r6+v/4+Pj/1dXV/9HR0f/i4uL/5OTk/9rX
- 1P+Zckv/olUH/7JiE//OtJz/29vb/97e3v/f3tz/y6N6/7x3Mv+6cyv/uW8m/7VnGf+xXwz/rlcB/65X
- AP+wXw7/qmUf/6iAWP/i3tr/7Ozs/+rq6v/l5eX71tbW5re3t7FkZGREAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn9fX1+9vb2/+vr6//6+vr//f39v/39/f/+Pj4//n5+P/6+vr/+vr6//n5+f/x8fH/y8vL/9LS
- 0v/m5ub/5+fn/+Df3v+kiGz/nFQM/7NlGP/DkmH/2dXP/+Li4v/l5eX/6Obl/+HRwv/QonT/y5Vf/8iP
- Vv/FiEz/vXg0/7VoGv+uXQz/oV0Z/7KUd//l4+H/6enp/+fn5//l5eX/5OTk/9XV1ed5eXlbAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn9fX0+/Hx8f/o6Oj/9PTz//b29v/39/f/+Pj4//j4+P/5+fn/+vr6/+rq
- 6v/Jycn/0dHR/+Li4v/o6Oj/6urq/+bl5f+5q5z/kVES/7FoIP/Ch0z/1sKv/+Hh4f/k5OT/6Ojo/+rp
- 6f/cwqj/zpxr/8qTXf/Hi1H/woJB/714M/+uZh7/mFob/8OxoP/m5uX/5+fn/+Xl5f/j4+P/4uLi/87O
- ztpxcXFEAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9PT0+/Pz8//19fT/9fX1//b29v/29vb/9/f3//j4
- +P/5+fn/+fn5/97e3v/Ozs7/5+fn/+np6f/r6+v/7e3t/+3t7f/Z19X/kGU6/6JkJ/+9ezv/xpBb/9jM
- v//g39//5OTk/+fn5//j1sr/z6By/8eOVf/Ehkj/vns5/7dyLP+eXR3/mGxB/9nV0v/l5eX/5OTk/+Tk
- 5P3a2trx2NjY77i4uLRRUVEmAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9PT0++np6P/T09P/8fHx//b2
- 9f/29vb/9/f3//f39//4+Pj/+fn5/+vr6//IyMj/6enp/+vr6//t7e3/7+/v//Ly8v/r6+v/q5iG/4tY
- J/+rain/unYy/8WTYf/Uwa//3tvY/97Vzf/Yv6b/yZNf/8GBQf++ezf/tm8p/6ZhHP+NVh7/sp2J/+Hh
- 4f/k5OT/4uLi/tjY2OuIiIh5iYmJZ25ubkciIiILAAAAAAAAAAAAAAAAAAAABwAAADYAAABn9PTz+9/f
- 3/+4uLj/6+vr//X19f/19fX/9vb2//f39//4+Pj/+Pj4//X19f/MzMz/3d3d/+bm5v/k5OT/7+/v//X1
- 9f/39/f/3t3b/6SPev+IUBn/nVoW/65lHP+0bif/vH0+/7t3NP+6civ/t28m/7NqIP+rYhn/mVMO/4dL
- D/+mjXT/2NXT/+Pj4//h4eH/4ODg+q2trasDAwMQAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn8/Pz+/Hx8f/t7ez/8/Pz//T09P/19fX/9vb2//X19f/29vb/9/f3//f39//n5+f/u7u7/8DA
- wP/FxcX/3Nzc//f39//5+fn/9vb2/9nX1f+agGb/gk0Y/5BMCP+bUQf/o1YJ/6ZZC/+mWQv/o1YK/5pQ
- B/+PSQT/gkkS/51+YP/Sz8z/4eHh/+Hh4f/f39//3t7e+aysrKsJCQkUAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn8/Pz+/Hx8f/w8PD/8/Py//T09P/09PT/9fX1/97e3v/Pz8//ysrK/8rK
- yv/R0dH/zMzM/8/Pz//Ozs7/sLCw//Hx8f/7+/v/+vr6//j4+P/h4OD/urCn/45sS/+DUSH/gUYL/4NF
- B/+ERAf/gkYL/4NRIP+Pakb/vLGn/9fW1v/h4eH/4ODg/97e3v/c3Nz/29vb/9zc3PaIiIh0BgYGDAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8/Py++Li4f/FxcX/7Ozs//T08//09PT/9fX1/+/v
- 7//j4+P/5+fn/9nZ2f/h4eH/3d3d/9nZ2f/Y2Nj/v7+///Pz8//6+vr/+Pj4//f39//z8/P/6unp/9PQ
- zf+8sqn/qJWD/6GKdP+hinP/qJWC/7qwpv/Oy8f/3d3d/+Hh4f/f39//3t7e/93d3f/a2tr/2NjY/tzc
- 3PmVlZV+CAgIDgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8vLy++Pj4v/CwsH/7Ozr//Pz
- 8//09PP/9PT0//X19P/29vb/9vb2//Dw8P/x8fH/+Pj4//j4+P/U1NT/29vb//n5+f/4+Pj/9vb2//X1
- 9f/y8vL/8PDw/+7u7v/s7Oz/5ubm/+Li4v/h4eH/4uLi/+Pj4//i4uL/4ODg/9/f3//g4OD/29vb/9TU
- 1P/b29v/2tra9bW1ta8jIyMdAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8vLy+/Dw
- 8P/x8fD/8vLx//Pz8v/z8/P/9PTz//T09P/19fX/9vb2//b29v/39/f/+Pj3//j4+P/Z2dn/zs7O//T0
- 9P/29vb/8vLy/+np6f/v7+//7+/v/+zs7P/r6+v/6enp/+fn5//l5eX/5OTk/+Li4v/g4OD/3t7e/9/f
- 3//X19f/yMjI/9LS0v/IyMj/oKCgsVlZWUEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn8vLy++7u7v/r6+v/8fHw//Ly8f/y8vL/8/Pz/+jo5//g4OD/4uLi/+Tk5P/p6en/3t7d/9fX
- 1//b29v/xsbG/8LCwv/g4OD/wMDA/7m5uf+1tbX/2NjY/+vr6//o6Oj/5ubm/+bm5v/l5eX/5OTk/+Pj
- 4//e3t7/29vb/93d3f/Ozs7/5eXl//r6+v/z8/P/GhoaOwAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn8vLy+9vb2v+4uLj/6eno//Hx8f/y8vH/8/Py/+Tk5P/X19f/09PS/8zM
- zP/W1tb/0dHR/9PT0//Nzc3/09PT/8TExP+wsLD/u7u7/83Nzf+6urr/xsbG/+rq6v/m5ub/5eXl/+Hh
- 4f/Hx8f/xcXF/9ra2v/e3t7/2dnZ/9vb2//U1NT/4uLi//v7+//8/Pz/ICAgLwAAAAgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8vLx++jo5//R0dH/7Ozs//Hx8P/x8fH/8vLx//Ly
- 8v/z8/P/9PTz//T09P/19fT/9fX1//b29v/39/b/9/f3//b29v/n5+f/9PT0//f39//Y2Nj/z8/P/+np
- 6f/m5ub/5ubm/83Nzf/j4+P/7+/v/8nJyf/c3Nz/29vb/9fX1//Ly8v/6Ojo//r6+v/8/Pz/ICAgLwAA
- AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8fHx++7u7f/v7+7/8PDv//Dw
- 8P/x8fD/8vLx//Ly8f/z8/L/8/Pz//T09P/09PT/9fX1//X19f/29vb/9vb2//f39//39/f/+Pj4//j4
- +P/w8PD/0NDQ/8vLy//Ozs7/09PT/8rKyv/29vb/+fn5/97e3v/IyMj/zs7O/9fX1//r6+v/+Pj4//r6
- +v/7+/v/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8fHw++vr
- 6v/j4+P/7e3t//Dw7//w8O//8fHw/+zs7P/p6en/6+vq/+zs7P/t7ez/7Ozr/+/v7v/w8O//9fX1/+/v
- 7v/t7e3/7u7u/+/v7//09PT/7+/v/+jo6P/i4uL/19fX/+Tk5P/w8PD/8PDw/+7u7v/w8PD/+Pj4//n5
- +f/6+vr/+vr6//r6+v/7+/v/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn8fHw+9fX1/+tra3/5eXl/+/v7//w8O//8PDw/93d3P/U1NP/ysrK/9jY2P/Ozs3/1dXV/9bW
- 1v/U1NT/7u7u/+Tk4//Pz8//1tbW/9zc3P/s7Oz/2dnZ/9LS0v/V1dX/zMzM/9LS0v/S0tL/0dHR/+zs
- 7P/19fX/+fn5//n5+f/5+fn/+fn5//n5+f/7+/v/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn8PDv++rq6f/g4N//7Ozs/+7u7v/v7+7/7+/v/+zs7P/T09P/3Nzb/9zc
- 3P/Q0ND/5ubm/9zc2//n5+f/5OTk/+zs7P/p6en/4ODg/9fX1//u7u7/5eXl/+bm5v/q6ur/3t7e/+np
- 6f/k5OT/1dXV/+jo6P/39/f/+Pj4//j4+P/4+Pj/+Pj4//j4+P/6+vr/ICAgLwAAAAgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn8PDv++zs6//t7ez/7e3s/+7u7f/u7u3/7+/u/+/v
- 7//q6un/6+vq//Hx8P/o6Oj/7+/v//Ly8v/z8/P/8/Pz//T09P/09PT/8fHx//Dw8P/09PT/9vb1//b2
- 9v/29vb/9vb2//f39v/39/f/8/Pz//T09P/39/f/9/f3//f39//39/f/9/f3//f39//5+fn/ICAgLwAA
- AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn7+/v++bm5f/c3Nv/6+vq/+3t
- 7P/u7u3/7u7t/+/v7v/v7+//8PDv//Dw8P/x8fD/8fHx//Ly8f/y8vL/8/Py//Pz8//z8/P/7u7u//Dw
- 8P/y8vL/9PTz//X19f/19fX/9vb1//b29f/29vb/9vb2//b29v/29vb/9vb2//b29v/29vb/9vb2//b2
- 9v/5+fn/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn7+/v+9fX
- 1/+rq6v/5OTj/+3t7P/t7ez/7u7t/+Tk4//a2tr/3Nzb/+Dg3//l5eT/39/e/9/f3v/b29v/4uLh/+Hh
- 4f/n5+b/1tbV/9ra2v/d3d3/2tra/9/f3//c3Nz/5OTj/9/f3v/s7Oz/9fX1//b29f/29vX/9vb1//b2
- 9v/29vb/9vb2//b29f/4+Pj/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn7+7u++np6P/l5eT/6+vq/+zs6//s7Ov/7e3s/+Hh4f/c3Nv/2trZ/83Nzf/R0dH/0dHR/9bW
- 1f/Jycn/zMzM/93d3P/g4N//19fX/9LS0f/W1tb/0NDQ/9nZ2f/T09P/0dHR/8rKyv/p6en/8/Pz//X1
- 9P/19fT/9fX0//X19P/19fX/9fX0//X19P/4+Pj/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABwAAADYAAABn7u7t++np6P/q6un/6+vq/+vr6v/s7Ov/7Ozs/+jo5//h4eH/6urp/+jo
- 5//r6+v/5+fn/+vr6v/r6+v/6urq/+3t7f/w8PD/5+fm/+Xl5P/t7e3/7u7t/+/v7//v7+//7e3t/+vr
- 6//z8/L/9PTz//T09P/09PT/9PT0//T09P/09PT/9PT0//T09P/39/f/ICAgLwAAAAgAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn7u3s++Dg3//Pz87/5+fm/+rq6f/r6+r/6+vq/+zs
- 6//t7ez/7e3s/+3t7f/u7u3/7u7t/+/v7v/v7+7/7+/v//Dw7//w8O//8fHw//Hx8P/x8fH/8fHx//Ly
- 8f/y8vH/8vLy//Ly8v/y8vL/8/Py//Pz8v/z8/L/8/Py//Pz8v/z8/L/8/Py//Pz8v/29vb/ICAgLwAA
- AAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn7e3s+9fX1/+wsK//4uLh/+rq
- 6f/q6un/6+vq/+vr6v/s7Ov/7Ozr/+3t7P/t7ez/7u7t/+7u7f/v7+7/7+/u/+/v7//w8O//8PDv//Dw
- 7//x8fD/8fHw//Hx8P/x8fH/8fHx//Ly8f/y8vH/8vLx//Ly8v/y8vL/8vLy//Ly8v/y8vL/8vLy//Ly
- 8v/29vb/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAADYAAABn7Ozs++bm
- 5f/n5+b/6Ofm/+no5//p6ej/6urp/+rq6f/r6+r/7Ozr/+zs6//s7Ov/7e3s/+3t7P/u7u3/7u7t/+7u
- 7v/v7+7/7+/u/+/v7//w8O//8PDv//Dw7//w8PD/8fHw//Hx8P/x8fD/8fHw//Hx8f/x8fH/8fHx//Hx
- 8f/x8fH/8fHx//Hx8f/29vX/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAA
- ADYAAABn7Ozr++bl5P/n5uX/5+fm/+jo5//o6Of/6eno/+rq6f/q6un/6+vq/+zs6//s7Ov/7Ozr/+3t
- 7P/t7ez/7e3t/+7u7f/u7u3/7u7u/+/v7v/v7+7/7+/v/+/v7//w8O//8PDv//Dw7//w8PD/8PDw//Dw
- 8P/x8fD/8fHw//Hx8P/x8fD/8fHw//Hx8P/19fX/ICAgLwAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAABgAAADMAAABi3Nzc4tjY1+TY2Nfk2djY5NnZ2OTa2dnk2trZ5Nva2uTb29rk29vb5Nzc
- 2+Tc3Nvk3Nzc5N3d3OTd3dzk3d3d5N3d3eTd3d3k3d3d5N7e3eTe3t3k3t7d5N7e3uTe3t7k39/e5N/f
- 3uTf397k39/e5N/f3uTf39/k39/f5N/f3+Tf39/k39/f5N/f3+Tm5ubhGxsbKwAAAAcAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAACYAAABIWlpabltbW29bW1tvW1tbb1tbW29bW1tvW1tbb1tb
- W29bW1tvW1tbb1tbW29bW1tvW1tbb1tbW29bW1tvW1tbb1tbW29bW1tvW1tbb1tbW29bW1tvW1tbb1tb
- W29bW1tvW1tbb1tbW29bW1tvW1tbb1tbW29bW1tvW1tbb1tbW29bW1tvW1tbb1xcXG5nZ2diBwcHHgAA
- AAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAsAAAAWAAAAHAAAABwAAAAcAAAAHAAA
- ABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAA
- ABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAA
- ABsAAAAWAAAACQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAACAAAAAwAA
- AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
- AAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAADAAAAAwAA
- AAMAAAADAAAAAwAAAAMAAAACAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAA///gAAAHAADwAAAAAAcAAOAA
- AAAD/wAA4AAAAAI/AADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAACwAA4AAAAAAB
- AADgAAAAAAAAAOAAAAAAAAAA4AAAAAAAAADgAAAAAAAAAOAAAAAAAAAA4AAAAAADAADgAAAAAAAAAOAA
- AAAAAAAA4AAAAAAAAADgAAAAAAAAAOAAAAAAAAAA4AAAAAAAAADgAAAAAAMAAOAAAAAABwAA4AAAAAAD
- AADgAAAAAAMAAOAAAAAABwAA4AAAAAAHAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAA
- AAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAP
- AADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAOAAAAAADwAA4AAAAAAPAADgAAAAAA8AAPAA
- AAAAHwAAKAAAACAAAABAAAAAAQAgAAAAAACAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAANAAAAGQAAACMAAAAsAAAANQkJ
- CUMDAwNAAAAAOwoKCkkmJiZhGBgYUQQEBDsAAAAvAAAAKAAAAB8AAAAVAAAACAAAAAAAAAAAAAAAAAAA
- AAAAAAAEAAAAGIqKijWKioo2ioqKNoqKijaKioo2ioqKNoqKijaKioo2ioqKNoqKijaIiIg3h4eHOGNj
- Y0R3d3d/n5+fv3Nzc38HBwcUeXl5ab6+vuq4uLjcbm5uYQAAAAUAAAADAAAAAQAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAAAAAAA8AAABN8PDw6PHx8ery8vLq8/Pz6vPz8+r09PTq9PT06vX19er29vbq9vb26vb2
- 9ur19fXqzc3N7sLCwvvKysr+vr6+9Z2dnbK5ubnT1tbW/tnZ2f6QkJCDCgoKCmlpaT1iYmI3AQEBAgAA
- AAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAFv29vb89vb2//j4+P/5+fn/+vr6//v7+//7+/v//Pz8//z8
- /P/x8fH/z8/P/+fn5//Ly8v/x8fH/87Ozv/R0dH+1NTU/tfX1/7a2tr/3d3d/s3NzeWoqKioz8/P4c7O
- zuFycnJOAQEBAgAAAAAAAAAAAAAAAAAAAAAAAAASAAAAW/Pz8/zFxcX/8vLy//n5+f/6+vr/+/v7//v7
- +//8/Pz/9fX1/8bGxv/IyMj/wcHB/8jIyP/Pz8//09PT/9jX1//c29v/3t3d/+Dg4P/j4+P/5eXl/ujo
- 6P7s7Oz/7e3t/rCwsKoMDAwJAAAAAAAAAAAAAAAAAAAAAAAAABIAAABb9vb2/PHx8f/39/f/+fn5//r6
- +v/7+/v/+/v7//z8/P/i4uL/w8PD/8rKyv/Nzc3/0NDQ/9fX1//VzcX/xrWl/8vDvP/IvrX/wbGi/8zB
- tf/l4uD/7e3t//Dw8P/p6en8cHBwWQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAFv19fX85OTk//b2
- 9v/5+fn/+fn5//b29v/29vb/9/f3//Hx8f/FxcX/z8/P/9HR0f/Z2Nf/xa+Y/62FXv/Zz8X/28Oq/71/
- Qf+uZBr/o1kQ/6ZzQf/b0MT/9PT0//X19f6+vr62l5eXbYCAgFYjIyMEAAAAAAAAAAAAAAASAAAAW/T0
- 8/zR0dH/9PTz//n5+f/39/f/2NjY/9nZ2f/Nzc3/vb29/7W1tf/T09P/19fX/8e1o/+fYyj/3M7B/+PU
- xf+0ZRj/s2MU/7lvJv+5cir/r2IW/6RsNP/p4tv/+/v7/vb29v3x8fH7z8/P01RUVBsAAAAAAAAAAAAA
- ABIAAABb9vb1/PX19f/39/f/+fn5//n5+f/z8/P/7e3t/8bGxv/Nzc3/1NTU/9fX1//d29n/l10j/8CQ
- YP/m5uX/yJdm/7JhEf+0Zhj/tmgc/7lwJv+7dC7/rGAU/7iTbf/39vX/9/f3//T09P7h4eHwcnJyQwAA
- AAAAAAAAAAAAEgAAAFvy8vL8y8vL//Ly8v/4+Pj/+fn5//T09P/t7e3/ysrK/9XV1f/Y2Nj/3Nzc/8S1
- pf+bTgP/y6qJ/+Pj4v/Fkl7/tWca/7JjEv+wXQr/r1oF/7NjEv+1aRz/oGEj/+nk3v/z8/P/4+Pj8Jqa
- mnc/Pz8RAAAAAAAAAAAAAAASAAAAW/T09Pzq6ur/9fX1//j4+P/39/f/4ODg/9TU1P+9vb3/0dHR/93d
- 3f/g4OD/r5R5/6VTBP/LrY7/4ODg/9CwkP+xYBD/r1oF/65XAP+uVwD/rlgC/7RmGP+iXhr/2s7C/+/v
- 7/7Z2dnkWlpaLQAAAAAAAAAAAAAAAAAAABIAAABb9PT0/Ovr6//19fX/9/f3//j4+P/t7e3/8vLy//Dw
- 8P/MzMz/4ODg/+Pj4/+rjnL/p1gJ/8addv/c3Nz/3trW/8CGTP+2ah7/tGYY/7BdCv+uVwD/sF0L/6Ni
- If/Vyb3/7Ozs/uXl5fnCwsK9fX19SwAAAAAAAAAAAAAAEgAAAFvx8fH8x8fH//Dw8P/39/f/+Pj4//n5
- +f/5+fn/6+vr/8rKyv/k5OT/5+fn/7mol/+hWRH/voJG/9zW0f/k5OT/5+Th/9i4mP/LlWD/xotQ/714
- M/+wYhT/oGct/9zW0P/o6Oj/5eXl/uPj4/6goKB9AAAAAAAAAAAAAAASAAAAW/T08/z09PT/9fX1//b2
- 9v/39/f/+Pj4//f39//Kysr/5eXl/+rq6v/s7Oz/2dXS/5VeKf+6eTn/z66N/+De3P/m5ub/5NrP/82b
- af/Fik7/vns4/6pnI/+ohGD/4uHg/+Xl5f7g4OD42dnZ8IiIiFIAAAAAAAAAAAAAABIAAABb8fHw/MvL
- y//w8PD/9vb1//f39//4+Pj/+Pj4/9HR0f/p6en/7e3t//Hx8f/w8PD/rZiE/5leI/+2dDH/yKB2/9S+
- qP/QrYn/woVI/7t2Mf+qZB//k10n/8m/tf/j4+P/39/f96Kion2EhIRDR0dHEAAAAAAAAAAAAAAAEgAA
- AFvy8vL85eXl//Ly8v/19fX/9vb2//b29v/39/f/5+fn/8TExP/Nzc3/6Ojo//j4+P/p5+b/oohu/4xP
- E/+fVg7/ql8U/6xgE/+nWxD/mVIK/4lSG/+5qZn/4ODf/+Dg4P/X19fpY2NjNwAAAAAAAAAAAAAAAAAA
- AAAAAAASAAAAW/Ly8vzq6ur/8vLy//T09P/y8vL/1dXU/9HR0f/R0dH/0NDQ/9HR0f/Gxsb/+fn5//n5
- +f/s7Oz/vLGm/5NvTf+HVCH/h1Ab/4lZKv+bfWD/zMbB/+Dg4P/f39//3Nzc/9vb2/23t7ekBwcHCQAA
- AAAAAAAAAAAAAAAAABIAAABb7+/v/MXFxf/u7u3/9PTz//T09P/z8/P/8/Pz/+rq6v/v7+//39/f/+Dg
- 4P/5+fn/9vb2//Pz8//v7+//5OTk/9fV0//Sz8z/19bU/9/e3v/h4eH/39/f/9ra2v/a2tr/1tbW7piY
- mGIEBAQCAAAAAAAAAAAAAAAAAAAAEgAAAFvx8fH88fHw//Ly8f/z8/L/8/Pz//Dw8P/y8vL/9PT0//Hx
- 8f/j4+P/0tLS//Hx8f/h4eH/29vb/+zs7P/q6ur/5+fn/+Xl5f/j4+P/4ODg/93d3f/Y2Nj/19fX/9jY
- 2P6CgoJ0IyMjCQAAAAAAAAAAAAAAAAAAAAAAAAASAAAAW+/v7vzNzc3/7e3t//Ly8f/w8PD/2dnZ/9TU
- 0//X19f/09PT/87Ozv/Ly8v/vLy8/7y8vP++vr7/1NTU/+fn5//l5eX/19fX/9PT0//f39//2tra/9bW
- 1v/r6+v/+vr6/hsbGyUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAABb8PDv/N/f3//u7u7/8fHx//Ly
- 8f/z8/L/9PTz//X19P/19fX/9vb2//f39//w8PD/9vb2/+fn5//W1tb/4+Pj/9/f3//b29v/5ubm/9TU
- 1P/W1tb/0tLS//Hx8f/7+/v+GxsbIwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAFvv7+/86Ojo/+/v
- 7v/w8O//8fHw/+3t7P/t7e3/8PDv/+/v7//y8vL/9fX1//Dw8P/x8fH/8/Pz/+Li4v/X19f/1NTU/+3t
- 7f/y8vL/4uLi/+zs7P/39/f/+vr6//r6+v4bGxsjAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAASAAAAW+3t
- 7PzExMT/6urq/+/v7v/t7e3/1NTU/9LS0v/Q0ND/2dnZ/9bW1v/r6+v/19fX/9bW1v/n5+f/2NjY/9ra
- 2v/Q0ND/1tbW/9bW1v/z8/P/+fn5//n5+f/5+fn/+vr6/hsbGyMAAAABAAAAAAAAAAAAAAAAAAAAAAAA
- ABIAAABb7u7u/Ovr6v/t7ez/7u7t/+/v7v/n5+f/6eno/+Xl5f/t7e3/8PDw//Ly8f/y8vL/7Ozs//Dw
- 8P/z8/L/9PT0//Pz8v/09PT/7u7u//b29v/39/f/9/f3//f39//5+fn+GxsbIwAAAAAAAAAAAAAAAAAA
- AAAAAAAAAAAAEgAAAFvs7Oz809PS/+rq6f/u7u3/7u7t/+zs6//t7ez/7u7u/+7u7v/v7+7/7+/v//Hx
- 8f/n5+f/7+/v//Dw8P/x8fH/8vLy//Pz8//29vb/9vb2//b29v/29vb/9vb2//j4+P4bGxsjAAAAAAAA
- AAAAAAAAAAAAAAAAAAAAAAASAAAAW+zs6/zV1dT/6eno/+zs6//r6+r/2NjY/9XV1f/U1NT/0tLS/9DQ
- 0P/S0tL/4eHg/9HR0f/X19f/09PT/9PT0//T09L/39/f//T09P/19fT/9fX0//X19f/19fX/9/f3/hsb
- GyMAAAABAAAAAAAAAAAAAAAAAAAAAAAAABIAAABb7Ozr/Ojn5v/r6un/6+vq/+zs6//m5uX/6urp/+zs
- 6//q6ur/7e3s/+zs7P/w8O//6enp/+3t7P/w8O//8PDw/+/v7v/x8fH/8/Pz//Pz8//09PP/9PTz//T0
- 8//29vb+GxsbIwAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAEgAAAFvp6Oj8vb29/+Xl5P/q6un/6+vq/+zs
- 6//s7Oz/7e3s/+7u7f/u7u7/7+/u//Dw7//w8O//8PDw//Hx8P/x8fH/8fHx//Ly8f/y8vH/8vLy//Ly
- 8v/y8vL/8vLy//X19f4bGxsjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAW+rq6fzn5uX/6Ofm/+np
- 6P/q6un/6+vq/+zs6//s7Ov/7e3s/+3t7f/u7u3/7u7u/+/v7v/v7+//8PDv//Dw7//w8PD/8fHw//Hx
- 8P/x8fD/8fHw//Hx8P/x8fD/9PT0/hsbGyMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABEAAABY4ODf693d
- 3O3e3t3t397e7eDf3u3g4N/t4eHg7eHh4e3i4uHt4uLi7ePj4u3j4+Pt4+Pj7eTk4+3k5OTt5OTk7eXl
- 5O3l5eTt5eXk7eXl5e3l5eXt5eXl7eXl5e3q6unrGRkZIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAA
- ADRNTU1WTk5OV05OTldOTk5XTk5OV05OTldOTk5XTk5OV05OTldOTk5XTk5OV05OTldOTk5XTk5OV05O
- TldOTk5XTk5OV05OTldOTk5XTk5OV05OTldOTk5XTk5OVlZWVk4FBQUSAAAAAAAAAAAAAAAAAAAAAAAA
- AAAAAAABAAAABgAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAA
- AAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAABwAAAAIAAAAAAAAAAAAA
- AAD/8AADwAAAD8AAAAfAAAADwAAAA8AAAAPAAAAAwAAAAMAAAADAAAAAwAAAAcAAAADAAAAAwAAAAMAA
- AADAAAADwAAAAcAAAAHAAAADwAAAB8AAAAfAAAADwAAAA8AAAAfAAAAHwAAAA8AAAAPAAAAHwAAAB8AA
- AAfAAAAHwAAABygAAAAYAAAAMAAAAAEAIAAAAAAAYAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
- AAEAAAADAAAAAwAAAAMAAAADAAAAAwAAAAMAAAAFAAAAEQAAABwAAAAnCwsLPxMTE0gAAAAyQEBAakBA
- QGkKCgo3AAAAJAAAABkAAAAOAAAAAgAAAAAAAAAAAAAAAQAAAC3W1taV19fXl9fX15fY2NiX2NjYl9nZ
- 2ZfZ2dmX2tral9nZ2ZeoqKiouLi45q2trdJkZGRPwMDA3tTU1P2IiIhYAwMDAxsbGwwAAAAAAAAAAAAA
- AAAAAAAAAAAAAwAAAE729vb99/f3//n5+f/6+vr/+/v7//z8/P/8/Pz/5eXl/+jo6P/Kysr/zMzM/9DQ
- 0P/S0tL+2NjY/tzc3P+9vb3Cq6urm8bGxtJsbGwuAAAAAAAAAAAAAAAAAAAAAwAAAE7u7u7929vb//n5
- +f/6+vr/+/v7//z8/P/o6Oj/xMTE/8XFxf/Ly8v/0tLS/9rZ2f/c29r/3t3d/+Tk5P/m5ub/6+vr/+3t
- 7f6hoaF5AAAAAAAAAAAAAAAAAAAAAwAAAE729vb99/f3//n5+f/6+vr/+/v7//z8/P/g4OD/yMjI/8/P
- z//W1tb/yrmn/8CqlP/QwrT/tYpf/62AVP/Pva3/8PDw/+/v7/2Hh4dePT09HgYGBgIAAAAAAAAAAwAA
- AE7u7u792tra//n5+f/y8vL/2tra/9nZ2f/Gxsb/xMTE/9XV1f/CrJb/tYhd/+fd1P+4byb/tmoe/7ds
- Iv+mXBL/zLSd//r6+v/t7e334uLi8W1tbTEAAAAAAAAAAwAAAE719fX99PT0//j4+P/6+vr/8vLy/8/P
- z//Pz8//19fX/9rX1P+aWBb/282//8+pg/+zZBX/tWYZ/7ZqHv+5cSj/o2Ad/+/r5//29vb/7Ozs+pSU
- lGEAAAAAAAAAAwAAAE7u7u793Nzc//j4+P/19fX/6enp/8XFxf/Y2Nj/3Nzc/8KxoP+lVwn/3djU/9Cv
- jf+zYxP/r1sH/65XAf+wXgv/rWIX/867p//x8fH/tLS0lA4ODgQAAAAAAAAAAwAAAE7z8/P98PDw//f3
- 9//09PT/6enp/+Xl5f/Ozs7/4uLi/7mjjf+qWwz/183E/93X0v+6dzP/tGQV/7BdCf+uVwD/r2QZ/8Wt
- lv/s7Oz/z8/Pz5CQkEkAAAAAAAAAAwAAAE7t7e393d3d//f39v/4+Pj/+fn5/+fn5//U1NT/5+fn/8m+
- s/+kXRb/zayL/+Pj4//n4t7/0aV5/8eNVP+8djH/pV4X/9DEt//n5+f/5OTk/7m5uZgAAAAAAAAAAwAA
- AE7x8fH96+vr//b29v/39/f/+fn5/9fX1//p6en/7e3t/+no6P+abkT/uns8/9TAq//i39z/1bKQ/8KE
- Rf+0byr/nW9C/+Hg3//h4eH5v7+/sJSUlEsAAAAAAAAAAwAAAE7u7u794eHg//X19f/29vb/9/f3/+jo
- 6P/Pz8//3d3d//f39//Vzsj/kF0r/6NcFP+waSH/rmQa/6JZEf+QWST/zMS9/+Hh4f/KysrSBgYGCQAA
- AAAAAAAAAAAAAwAAAE7u7u795eXl//T09P/u7u7/2dnZ/9XV1f/U1NT/xcXF//b29v/4+Pj/3tvZ/6iQ
- eP+Ta0L/lGpC/6eNdf/U0c//4ODg/9zc3P/b29v7gYGBQwAAAAAAAAAAAAAAAwAAAE7u7u395OTj//Pz
- 8//09PT/9fX1//Pz8//4+Pf/1dXV//f39//x8fH/8PDw/+zs7P/m5ub/4+Pj/+Li4v/f39//1tbW/9LS
- 0v+0tLSlICAgCAAAAAAAAAAAAAAAAwAAAE7r6+v939/f//Ly8f/s7Oz/29vb/9zc3P/W1tb/0NDQ/8bG
- xv/AwMD/w8PD/+np6f/l5eX/1dXV/97e3v/b29v/2tra//n5+f8YGBgfAAAAAAAAAAAAAAAAAAAAAwAA
- AE7u7u395+fm//Hx8P/y8vH/8/Pz//T09P/19fX/9vb2//Pz8//39/f/2tra/9ra2v/U1NT/8PDw/9PT
- 0//W1tb/5ubm//v7+/8bGxsbAAAAAAAAAAAAAAAAAAAAAwAAAE7p6ej92dnZ//Dw7//q6ur/3Nzc/+Dg
- 3//h4eH/6urq/+Tk4//j4+P/6urq/9zc3P/W1tb/4eHh//Dw8P/5+fn/+fn5//r6+v8bGxsbAAAAAAAA
- AAAAAAAAAAAAAwAAAE7t7ez96eno/+7u7f/u7u7/4eHg/+Hh4f/p6ej/7Ozs/+/v7//m5ub/7+/v/+/v
- 7//t7e3/6enp//Ly8v/39/f/9/f3//n5+P8bGxsbAAAAAAAAAAAAAAAAAAAAAwAAAE7n5+b91dXV/+3t
- 7P/s7Ov/5eXl/+np6f/o6Oj/6Ojo/+zs6//j4+P/5+fn/+np6f/r6+v/8/Pz//b29f/29vb/9vb2//f3
- 9/8bGxsbAAAAAAAAAAAAAAAAAAAAAwAAAE7s6+v96eno/+zs6//p6ej/4ODf/9zc3P/e3t7/29va/+fn
- 5v/d3d3/4ODg/+Pj4v/d3d3/8fHw//T09P/09PT/9PT0//b29v8bGxsbAAAAAAAAAAAAAAAAAAAAAwAA
- AE7k5OT90tLR/+rq6f/r6+r/7Ozr/+3t7P/u7u3/7+/u//Dw7//w8PD/8fHw//Hx8f/y8vH/8vLx//Ly
- 8v/y8vL/8vLy//T09P8bGxsbAAAAAAAAAAAAAAAAAAAAAwAAAE7p6ej95+fm/+jo5//q6un/6+vq/+zs
- 6//t7ez/7e3t/+7u7f/v7+7/7+/v//Dw7//w8O//8PDw//Hx8P/x8fD/8fHw//Pz8/8bGxsbAAAAAAAA
- AAAAAAAAAAAAAgAAAEGwsLCpr6+vqrCwr6qxsLCqsbGxqrKysaqysrKqsrKyqrOzsqqzs7Oqs7OzqrOz
- s6q0tLOqtLSzqrS0tKq0tLSqtLS0qrq6uqUQEBAVAAAAAAAAAAAAAAAAAAAAAAAAAAkAAAAPAAAADwAA
- AA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAAAA8AAAAPAAAADwAA
- AA0AAAACAAAAAAAAAADAAAEAgAAHAIAAAwCAAAMAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAA
- AQCAAAEAgAABAIAAAwCAAAMAgAADAIAAAwCAAAMAgAADAIAAAwCAAAMAgAADAMAAAwAoAAAAEAAAACAA
- AAABACAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeIiIgbiIiIG4iIiBuIiIgbeHh4H1dX
- VytLS0tJZmZmcDQ0NECPj4+eNDQ0NAAAABMAAAAHAAAAAAAAAAAAAAAy8/Pz8/b29vT39/f0+Pj49Pb2
- 9vTo6Oj0yMjI+srKyvzExMTg2tra/q6uroe5ubmNbGxsFAAAAAAAAAAAAAAAN+jo6P339/f/+vr6//v7
- +//Y2Nj/yMjI/9DQ0P/Ry8X/087K/9TNxv/o5+f+7e3t/pSUlEMAAAAAAAAAAAAAADfn5+f99/f3/+/v
- 7//l5eX/ysrK/9PT0//BqI//0b6q/8CDRv+xZx//tYRU//Px8P7a2trHrq6uUgAAAAAAAAA36urq/ff3
- 9//29vb/2tra/9TU1P/V0cz/r3lE/9a8o/+zZBX/s2QU/7NoHP/Os5n/8PDw+7e3t28AAAAAAAAAN+/v
- 7/329vb/7+/v/93d3f/W1tb/x7mr/7d9RP/b0sn/tmsg/7BcCP+wXAn/vZZv/+fn5/ahoaFNAAAAAAAA
- ADfo6Oj99fX1//j4+P/p6en/39/f/9nUz/+rbS7/3NLI/+LXzP/JkVr/tW8p/8Goj//k5OT9ycnJrwAA
- AAAAAAA35eXl/fPz8//39/f/6urq/9ra2v/w8PD/tJl//6puMv+/ilb/r2ol/6BvPv/b2Nb/xsbGpXd3
- dxUAAAAAAAAAN+Tk5P3y8vL/6+vr/+Dg4P/c3Nz/5ubm//T09P/JvbH/rpJ3/7eij//b2dj/3Nzc/8nJ
- ybwGBgYDAAAAAAAAADfn5+f98fHw/+vr6//k5OT/3d3d/9PT0//Ozs7/5OTk/+Li4v/d3d3/2dnZ/+Xl
- 5f5kZGQpAAAAAAAAAAAAAAA36urp/fDw7//w8PD/8fHx//Pz8//z8/P/8PDw/9zc3P/f39//5OTk/+Pj
- 4//4+Pj+GxsbEgAAAAAAAAAAAAAAN+Li4v3t7ez/5ubm/9zc3P/j4+P/6enp/+bm5v/m5ub/4+Pj/+vr
- 6//4+Pj/+fn5/hsbGxIAAAAAAAAAAAAAADfg4N/96+vq/+fn5v/h4eH/4ODf/+Xl5P/g4N//4uLh/+bm
- 5v/19fX/9fX1//b29v4bGxsSAAAAAAAAAAAAAAA33t7e/enp6P/q6un/7Ozr/+3t7P/v7+7/7u7t//Dw
- 8P/x8fD/8/Py//Pz8v/09PT+GxsbEgAAAAAAAAAAAAAANuTj4/Xk4+L25eXk9ufn5vbo6Of26eno9urq
- 6fbq6ur26+vq9uvr6/br6+v27e3t9RoaGhEAAAAAAAAAAAAAABFGRkYvR0dHL0dHRy9HR0cvR0dHL0dH
- Ry9HR0cvR0dHL0dHRy9HR0cvR0dHL0pKSi0EBAQFAAAAAIABAACAAQAAgAEAAIAAAACAAAAAgAAAAIAA
- AACAAAAAgAAAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAA=
-
-
-
\ No newline at end of file
diff --git a/tools/AddToChangelog/AddToChangelog/Program.cs b/tools/AddToChangelog/AddToChangelog/Program.cs
deleted file mode 100644
index 5ab64361f68..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Program.cs
+++ /dev/null
@@ -1,21 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Windows.Forms;
-
-namespace AddToChangelog
-{
- static class Program
- {
- ///
- /// The main entry point for the application.
- ///
- [STAThread]
- static void Main()
- {
- Application.EnableVisualStyles();
- Application.SetCompatibleTextRenderingDefault(false);
- Application.Run(new MainForm());
- }
- }
-}
diff --git a/tools/AddToChangelog/AddToChangelog/Properties/AssemblyInfo.cs b/tools/AddToChangelog/AddToChangelog/Properties/AssemblyInfo.cs
deleted file mode 100644
index 5857e24764e..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Properties/AssemblyInfo.cs
+++ /dev/null
@@ -1,36 +0,0 @@
-using System.Reflection;
-using System.Runtime.CompilerServices;
-using System.Runtime.InteropServices;
-
-// General Information about an assembly is controlled through the following
-// set of attributes. Change these attribute values to modify the information
-// associated with an assembly.
-[assembly: AssemblyTitle("AddToChangelog")]
-[assembly: AssemblyDescription("An open source application designed to allow the /tg/station open source project to easily add changelog notes to the changelog.html file.")]
-[assembly: AssemblyConfiguration("")]
-[assembly: AssemblyCompany("Nanotrasen")]
-[assembly: AssemblyProduct("AddToChangelog")]
-[assembly: AssemblyCopyright("Copyright © 2013")]
-[assembly: AssemblyTrademark("")]
-[assembly: AssemblyCulture("")]
-
-// Setting ComVisible to false makes the types in this assembly not visible
-// to COM components. If you need to access a type in this assembly from
-// COM, set the ComVisible attribute to true on that type.
-[assembly: ComVisible(false)]
-
-// The following GUID is for the ID of the typelib if this project is exposed to COM
-[assembly: Guid("3f069aeb-901f-4fc0-8104-29da028252dc")]
-
-// Version information for an assembly consists of the following four values:
-//
-// Major Version
-// Minor Version
-// Build Number
-// Revision
-//
-// You can specify all the values or you can default the Build and Revision Numbers
-// by using the '*' as shown below:
-// [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("1.0.0.0")]
-[assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/tools/AddToChangelog/AddToChangelog/Properties/Resources.Designer.cs b/tools/AddToChangelog/AddToChangelog/Properties/Resources.Designer.cs
deleted file mode 100644
index b3b35d3f326..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Properties/Resources.Designer.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.296
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace AddToChangelog.Properties
-{
-
-
- ///
- /// A strongly-typed resource class, for looking up localized strings, etc.
- ///
- // This class was auto-generated by the StronglyTypedResourceBuilder
- // class via a tool like ResGen or Visual Studio.
- // To add or remove a member, edit your .ResX file then rerun ResGen
- // with the /str option, or rebuild your VS project.
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
- [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- internal class Resources
- {
-
- private static global::System.Resources.ResourceManager resourceMan;
-
- private static global::System.Globalization.CultureInfo resourceCulture;
-
- [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
- internal Resources()
- {
- }
-
- ///
- /// Returns the cached ResourceManager instance used by this class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Resources.ResourceManager ResourceManager
- {
- get
- {
- if ((resourceMan == null))
- {
- global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AddToChangelog.Properties.Resources", typeof(Resources).Assembly);
- resourceMan = temp;
- }
- return resourceMan;
- }
- }
-
- ///
- /// Overrides the current thread's CurrentUICulture property for all
- /// resource lookups using this strongly typed resource class.
- ///
- [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
- internal static global::System.Globalization.CultureInfo Culture
- {
- get
- {
- return resourceCulture;
- }
- set
- {
- resourceCulture = value;
- }
- }
- }
-}
diff --git a/tools/AddToChangelog/AddToChangelog/Properties/Resources.resx b/tools/AddToChangelog/AddToChangelog/Properties/Resources.resx
deleted file mode 100644
index af7dbebbace..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Properties/Resources.resx
+++ /dev/null
@@ -1,117 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- text/microsoft-resx
-
-
- 2.0
-
-
- System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
- System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
-
-
\ No newline at end of file
diff --git a/tools/AddToChangelog/AddToChangelog/Properties/Settings.Designer.cs b/tools/AddToChangelog/AddToChangelog/Properties/Settings.Designer.cs
deleted file mode 100644
index 5165895d5ab..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Properties/Settings.Designer.cs
+++ /dev/null
@@ -1,30 +0,0 @@
-//------------------------------------------------------------------------------
-//
-// This code was generated by a tool.
-// Runtime Version:4.0.30319.296
-//
-// Changes to this file may cause incorrect behavior and will be lost if
-// the code is regenerated.
-//
-//------------------------------------------------------------------------------
-
-namespace AddToChangelog.Properties
-{
-
-
- [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
- [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
- internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
- {
-
- private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
-
- public static Settings Default
- {
- get
- {
- return defaultInstance;
- }
- }
- }
-}
diff --git a/tools/AddToChangelog/AddToChangelog/Properties/Settings.settings b/tools/AddToChangelog/AddToChangelog/Properties/Settings.settings
deleted file mode 100644
index 39645652af6..00000000000
--- a/tools/AddToChangelog/AddToChangelog/Properties/Settings.settings
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/tools/AddToChangelog/AddToChangelog/Thumbs.db b/tools/AddToChangelog/AddToChangelog/Thumbs.db
deleted file mode 100644
index 18cb6ca03ef..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/Thumbs.db and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/bugfix.png b/tools/AddToChangelog/AddToChangelog/bugfix.png
deleted file mode 100644
index 9934db406b1..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/bugfix.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/changelog.ico b/tools/AddToChangelog/AddToChangelog/changelog.ico
deleted file mode 100644
index 34cc7b4d404..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/changelog.ico and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/experiment.png b/tools/AddToChangelog/AddToChangelog/experiment.png
deleted file mode 100644
index b2a4f670a86..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/experiment.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/imageadd.png b/tools/AddToChangelog/AddToChangelog/imageadd.png
deleted file mode 100644
index 308c1ae0a28..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/imageadd.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/imagedel.png b/tools/AddToChangelog/AddToChangelog/imagedel.png
deleted file mode 100644
index b2bac2c45ab..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/imagedel.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/rscadd.png b/tools/AddToChangelog/AddToChangelog/rscadd.png
deleted file mode 100644
index bcc4dc24b20..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/rscadd.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/rscdel.png b/tools/AddToChangelog/AddToChangelog/rscdel.png
deleted file mode 100644
index e6f2d3228b8..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/rscdel.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/soundadd.png b/tools/AddToChangelog/AddToChangelog/soundadd.png
deleted file mode 100644
index ea7f36c6ba3..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/soundadd.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/sounddel.png b/tools/AddToChangelog/AddToChangelog/sounddel.png
deleted file mode 100644
index 1b9478f43e7..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/sounddel.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/tweak.png b/tools/AddToChangelog/AddToChangelog/tweak.png
deleted file mode 100644
index 1a59de688d5..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/tweak.png and /dev/null differ
diff --git a/tools/AddToChangelog/AddToChangelog/wip.png b/tools/AddToChangelog/AddToChangelog/wip.png
deleted file mode 100644
index e22eb61b8fe..00000000000
Binary files a/tools/AddToChangelog/AddToChangelog/wip.png and /dev/null differ
diff --git a/tools/AddToChangelog/icon.png b/tools/AddToChangelog/icon.png
deleted file mode 100644
index 3c60e6745c7..00000000000
Binary files a/tools/AddToChangelog/icon.png and /dev/null differ
diff --git a/tools/Event Probabilities/Event Probabilities.xls b/tools/Event Probabilities/Event Probabilities.xls
index e8085e8d9df..3d6132045bb 100644
Binary files a/tools/Event Probabilities/Event Probabilities.xls and b/tools/Event Probabilities/Event Probabilities.xls differ
diff --git a/tools/GenerateChangelog/ss13_genchangelog.py b/tools/GenerateChangelog/ss13_genchangelog.py
index 472fbc69aaa..6f434a8d250 100644
--- a/tools/GenerateChangelog/ss13_genchangelog.py
+++ b/tools/GenerateChangelog/ss13_genchangelog.py
@@ -53,9 +53,9 @@ validPrefixes = [
'rscadd',
'imageadd',
'imagedel',
+ 'maptweak',
'spellcheck',
- 'experiment',
- 'tgs'
+ 'experiment'
]
def dictToTuples(inp):
|