diff --git a/code/WorkInProgress/Ported/policetape.dm b/code/WorkInProgress/Ported/policetape.dm
index a4d2c31bdc..4425a9713b 100644
--- a/code/WorkInProgress/Ported/policetape.dm
+++ b/code/WorkInProgress/Ported/policetape.dm
@@ -98,8 +98,8 @@
//is_blocked_turf(var/turf/T)
usr << "\blue You finish placing the [src]." //Git Test
-/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob)
- if (istype(A, /obj/machinery/door/airlock))
+/obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity)
+ if (proximity && istype(A, /obj/machinery/door/airlock))
var/turf/T = get_turf(A)
var/obj/item/tape/P = new tape_type(T.x,T.y,T.z)
P.loc = locate(T.x,T.y,T.z)
diff --git a/code/WorkInProgress/computer3/computers/crew.dm b/code/WorkInProgress/computer3/computers/crew.dm
index 170bd92607..836500a344 100644
--- a/code/WorkInProgress/computer3/computers/crew.dm
+++ b/code/WorkInProgress/computer3/computers/crew.dm
@@ -35,7 +35,7 @@
var/life_status = "[H.stat > 1 ? "Deceased" : "Living"]"
var/damage_report = "([dam1]/[dam2]/[dam3]/[dam4])"
- log += "
| [H.get_id_name()] | "
+ log += "
| [H.get_authentification_name()] ([H.get_assignment()]) | "
switch(C.sensor_mode)
if(1)
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index c0ef908406..ac400269b5 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -42,6 +42,15 @@
index = findtext(t, char)
return t
+/proc/readd_quotes(var/t)
+ var/list/repl_chars = list(""" = "\"")
+ for(var/char in repl_chars)
+ var/index = findtext(t, char)
+ while(index)
+ t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index+5)
+ index = findtext(t, char)
+ return t
+
//Runs byond's sanitization proc along-side sanitize_simple
/proc/sanitize(var/t,var/list/repl_chars = null)
return html_encode(sanitize_simple(t,repl_chars))
diff --git a/code/_onclick/item_attack.dm b/code/_onclick/item_attack.dm
index 365865543f..a81c6f30fa 100644
--- a/code/_onclick/item_attack.dm
+++ b/code/_onclick/item_attack.dm
@@ -46,7 +46,11 @@
playsound(loc, hitsound, 50, 1, -1)
return hit
else
- user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!")
+ if(attack_verb.len)
+ user.visible_message("[M] has been [pick(attack_verb)] with [src] by [user]!")
+ else
+ user.visible_message("[M] has been attacked with [src] by [user]!")
+
if (hitsound)
playsound(loc, hitsound, 50, 1, -1)
switch(damtype)
diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm
index 04afb6c63e..be678b8397 100644
--- a/code/defines/procs/hud.dm
+++ b/code/defines/procs/hud.dm
@@ -12,7 +12,7 @@ proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt)
if(P.Mob.see_invisible < patient.invisibility)
continue
- if(!(local_scanner || hassensorlevel(P, SUIT_SENSOR_VITAL)))
+ if(!(local_scanner || hassensorlevel(patient, SUIT_SENSOR_VITAL)))
continue
P.Client.images += patient.hud_list[HEALTH_HUD]
diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm
index f875b9975c..c793ecb857 100755
--- a/code/game/area/Space Station 13 areas.dm
+++ b/code/game/area/Space Station 13 areas.dm
@@ -57,6 +57,8 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
var/list/ambience = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg','sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg','sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg','sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg','sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg','sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
var/sound/forced_ambience = null
+ var/rad_shielded = 0
+
/*Adding a wizard area teleport list because motherfucking lag -- Urist*/
/*I am far too lazy to make it a proper list of areas so I'll just make it run the usual telepot routine at the start of the game*/
var/list/teleportlocs = list()
@@ -458,6 +460,7 @@ var/list/ghostteleportlocs = list()
icon_state = "yellow"
requires_power = 0
unlimited_power = 1
+ rad_shielded = 1
/area/syndicate_station/start
name = "\improper Mercenary Forward Operating Base"
@@ -512,35 +515,33 @@ var/list/ghostteleportlocs = list()
icon_state = "yellow"
requires_power = 0
+/area/vox_station
+ requires_power = 0
+ rad_shielded = 1
+
/area/vox_station/transit
name = "\improper hyperspace"
icon_state = "shuttle"
- requires_power = 0
/area/vox_station/southwest_solars
name = "\improper aft port solars"
icon_state = "southwest"
- requires_power = 0
/area/vox_station/northwest_solars
name = "\improper fore port solars"
icon_state = "northwest"
- requires_power = 0
/area/vox_station/northeast_solars
name = "\improper fore starboard solars"
icon_state = "northeast"
- requires_power = 0
/area/vox_station/southeast_solars
name = "\improper aft starboard solars"
icon_state = "southeast"
- requires_power = 0
/area/vox_station/mining
name = "\improper nearby mining asteroid"
icon_state = "north"
- requires_power = 0
//PRISON
/area/prison
@@ -633,6 +634,9 @@ var/list/ghostteleportlocs = list()
//Maintenance
+/area/maintenance
+ rad_shielded = 1
+
/area/maintenance/aft
name = "Aft Maintenance"
icon_state = "amaint"
@@ -906,6 +910,7 @@ var/list/ghostteleportlocs = list()
/area/crew_quarters
name = "\improper Dormitories"
icon_state = "Sleep"
+ rad_shielded = 1
/area/crew_quarters/toilet
name = "\improper Dormitory Toilets"
diff --git a/code/game/atoms.dm b/code/game/atoms.dm
index 30f04da4b1..be45d49d97 100644
--- a/code/game/atoms.dm
+++ b/code/game/atoms.dm
@@ -195,7 +195,10 @@ its easier to just keep the beam vertical.
f_name = "some "
else
f_name = "a "
- f_name += "blood-stained [name][infix]!"
+ if(blood_color != "#030303")
+ f_name += "blood-stained [name][infix]!"
+ else
+ f_name += "oil-stained [name][infix]."
user << "\icon[src] That's [f_name] [suffix]"
diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm
index d8568c8f60..5dcc891fa9 100644
--- a/code/game/gamemodes/changeling/changeling_powers.dm
+++ b/code/game/gamemodes/changeling/changeling_powers.dm
@@ -657,7 +657,7 @@ var/list/datum/dna/hivemind_bank = list()
src << "We return our vocal glands to their original location."
return
- var/mimic_voice = input("Enter a name to mimic.", "Mimic Voice", null) as text
+ var/mimic_voice = stripped_input(usr, "Enter a name to mimic.", "Mimic Voice", null, MAX_NAME_LEN)
if(!mimic_voice)
return
@@ -856,4 +856,4 @@ var/list/datum/dna/hivemind_bank = list()
changeling.absorbed_species += T.species.name
feedback_add_details("changeling_powers","ED")
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm
index 4a0712c712..9964a37813 100644
--- a/code/game/gamemodes/epidemic/epidemic.dm
+++ b/code/game/gamemodes/epidemic/epidemic.dm
@@ -113,7 +113,7 @@
world.Reboot()
var/datum/disease2/disease/lethal = new
- lethal.makerandom(1)
+ lethal.makerandom(3)
lethal.infectionchance = 5
// the more doctors, the more will be infected
diff --git a/code/game/gamemodes/setupgame.dm b/code/game/gamemodes/setupgame.dm
index 9c1b30bc89..bea6029b46 100644
--- a/code/game/gamemodes/setupgame.dm
+++ b/code/game/gamemodes/setupgame.dm
@@ -91,7 +91,7 @@
//REMOTEVIEWBLOCK = getAssignedBlock("REMOTEVIEW", numsToAssign, DNA_HARDER_BOUNDS)
//REGENERATEBLOCK = getAssignedBlock("REGENERATE", numsToAssign, DNA_HARDER_BOUNDS)
//INCREASERUNBLOCK = getAssignedBlock("INCREASERUN", numsToAssign, DNA_HARDER_BOUNDS)
- //REMOTETALKBLOCK = getAssignedBlock("REMOTETALK", numsToAssign, DNA_HARDER_BOUNDS)
+ REMOTETALKBLOCK = getAssignedBlock("REMOTETALK", numsToAssign, DNA_HARDER_BOUNDS)
//MORPHBLOCK = getAssignedBlock("MORPH", numsToAssign, DNA_HARDER_BOUNDS)
//COLDBLOCK = getAssignedBlock("COLD", numsToAssign)
//HALLUCINATIONBLOCK = getAssignedBlock("HALLUCINATION", numsToAssign)
diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm
index f187957f5b..5285235fbf 100644
--- a/code/game/machinery/computer/communications.dm
+++ b/code/game/machinery/computer/communications.dm
@@ -496,8 +496,14 @@
return
emergency_shuttle.call_transfer()
- log_game("[key_name(user)] has called the shuttle.")
- message_admins("[key_name_admin(user)] has called the shuttle.", 1)
+
+ //delay events in case of an autotransfer
+ if (isnull(user))
+ event_manager.delay_events(EVENT_LEVEL_MODERATE, 9000) //15 minutes
+ event_manager.delay_events(EVENT_LEVEL_MAJOR, 9000)
+
+ log_game("[user? key_name(user) : "Autotransfer"] has called the shuttle.")
+ message_admins("[user? key_name_admin(user) : "Autotransfer"] has called the shuttle.", 1)
return
diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm
index 4fc82ebf4a..381a9790fb 100644
--- a/code/game/machinery/cryopod.dm
+++ b/code/game/machinery/cryopod.dm
@@ -96,7 +96,7 @@
if(!allow_items) return
if(frozen_items.len == 0)
- user << "\blue There is nothing to recover from storage."
+ user << "There is nothing to recover from storage."
return
var/obj/item/I = input(usr, "Please choose which object to retrieve.","Object recovery",null) as null|anything in frozen_items
@@ -104,10 +104,10 @@
return
if(!(I in frozen_items))
- user << "\blue \The [I] is no longer in storage."
+ user << "\The [I] is no longer in storage."
return
- visible_message("\blue The console beeps happily as it disgorges \the [I].", 3)
+ visible_message("The console beeps happily as it disgorges \the [I].", 3)
I.loc = get_turf(src)
frozen_items -= I
@@ -116,10 +116,10 @@
if(!allow_items) return
if(frozen_items.len == 0)
- user << "\blue There is nothing to recover from storage."
+ user << "There is nothing to recover from storage."
return
- visible_message("\blue The console beeps happily as it disgorges the desired objects.", 3)
+ visible_message("The console beeps happily as it disgorges the desired objects.", 3)
for(var/obj/item/I in frozen_items)
I.loc = get_turf(src)
@@ -141,7 +141,7 @@
//Decorative structures to go alongside cryopods.
/obj/structure/cryofeed
- name = "\improper cryogenic feed"
+ name = "cryogenic feed"
desc = "A bewildering tangle of machinery and pipes."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "cryo_rear"
@@ -163,7 +163,7 @@
//Cryopods themselves.
/obj/machinery/cryopod
- name = "\improper cryogenic freezer"
+ name = "cryogenic freezer"
desc = "A man-sized pod for entering suspended animation."
icon = 'icons/obj/Cryogenic2.dmi'
icon_state = "body_scanner_0"
@@ -277,113 +277,125 @@
if(!find_control_computer(urgent=1))
return
- //Drop all items into the pod.
- for(var/obj/item/W in occupant)
- if(istype(W, /obj/item/device/mmi))
- if(istype(occupant, /mob/living/silicon/robot))
- var/mob/living/silicon/robot/R = occupant
- if(R.mmi == W)
- del(W)
- continue
- occupant.drop_from_inventory(W)
- W.loc = src
+ despawn_occupant()
- if(W.contents.len) //Make sure we catch anything not handled by del() on the items.
- for(var/obj/item/O in W.contents)
- if(istype(O,/obj/item/weapon/storage/internal)) //Stop eating pockets, you fuck!
- continue
- O.loc = src
+// This function can not be undone; do not call this unless you are sure
+// Also make sure there is a valid control computer
+/obj/machinery/cryopod/robot/despawn_occupant()
+ var/mob/living/silicon/robot/R = occupant
+ if(!istype(R)) return ..()
- //Delete all items not on the preservation list.
- var/list/items = src.contents
- items -= occupant // Don't delete the occupant
- items -= announce // or the autosay radio.
+ del(R.mmi)
+ for(var/obj/item/I in R.module) // the tools the borg has; metal, glass, guns etc
+ for(var/obj/item/O in I) // the things inside the tools, if anything; mainly for janiborg trash bags
+ O.loc = R
+ del(I)
+ del(R.module)
- for(var/obj/item/W in items)
+ return ..()
- var/preserve = null
- for(var/T in preserve_items)
- if(istype(W,T))
- preserve = 1
- break
+// This function can not be undone; do not call this unless you are sure
+// Also make sure there is a valid control computer
+/obj/machinery/cryopod/proc/despawn_occupant()
+ //Drop all items into the pod.
+ for(var/obj/item/W in occupant)
+ occupant.drop_from_inventory(W)
+ W.loc = src
- if(!preserve)
- del(W)
- else
- if(control_computer && control_computer.allow_items)
- control_computer.frozen_items += W
- W.loc = null
- else
- W.loc = src.loc
+ if(W.contents.len) //Make sure we catch anything not handled by del() on the items.
+ for(var/obj/item/O in W.contents)
+ if(istype(O,/obj/item/weapon/storage/internal)) //Stop eating pockets, you fuck!
+ continue
+ O.loc = src
- //Update any existing objectives involving this mob.
- for(var/datum/objective/O in all_objectives)
- // We don't want revs to get objectives that aren't for heads of staff. Letting
- // them win or lose based on cryo is silly so we remove the objective.
- if(istype(O,/datum/objective/mutiny) && O.target == occupant.mind)
- del(O)
- else if(O.target && istype(O.target,/datum/mind))
- if(O.target == occupant.mind)
- if(O.owner && O.owner.current)
- O.owner.current << "\red You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..."
- O.target = null
- spawn(1) //This should ideally fire after the occupant is deleted.
- if(!O) return
- O.find_target()
- if(!(O.target))
- all_objectives -= O
- O.owner.objectives -= O
- del(O)
+ //Delete all items not on the preservation list.
+ var/list/items = src.contents
+ items -= occupant // Don't delete the occupant
+ items -= announce // or the autosay radio.
- //Handle job slot/tater cleanup.
- var/job = occupant.mind.assigned_role
+ for(var/obj/item/W in items)
- job_master.FreeRole(job)
+ var/preserve = null
+ for(var/T in preserve_items)
+ if(istype(W,T))
+ preserve = 1
+ break
- if(occupant.mind.objectives.len)
- del(occupant.mind.objectives)
- occupant.mind.special_role = null
+ if(!preserve)
+ del(W)
+ else
+ if(control_computer && control_computer.allow_items)
+ control_computer.frozen_items += W
+ W.loc = null
else
- if(ticker.mode.name == "AutoTraitor")
- var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
- current_mode.possible_traitors.Remove(occupant)
+ W.loc = src.loc
- // Delete them from datacore.
+ //Update any existing objectives involving this mob.
+ for(var/datum/objective/O in all_objectives)
+ // We don't want revs to get objectives that aren't for heads of staff. Letting
+ // them win or lose based on cryo is silly so we remove the objective.
+ if(istype(O,/datum/objective/mutiny) && O.target == occupant.mind)
+ del(O)
+ else if(O.target && istype(O.target,/datum/mind))
+ if(O.target == occupant.mind)
+ if(O.owner && O.owner.current)
+ O.owner.current << "You get the feeling your target is no longer within your reach. Time for Plan [pick(list("A","B","C","D","X","Y","Z"))]..."
+ O.target = null
+ spawn(1) //This should ideally fire after the occupant is deleted.
+ if(!O) return
+ O.find_target()
+ if(!(O.target))
+ all_objectives -= O
+ O.owner.objectives -= O
+ del(O)
- if(PDA_Manifest.len)
- PDA_Manifest.Cut()
- for(var/datum/data/record/R in data_core.medical)
- if ((R.fields["name"] == occupant.real_name))
- del(R)
- for(var/datum/data/record/T in data_core.security)
- if ((T.fields["name"] == occupant.real_name))
- del(T)
- for(var/datum/data/record/G in data_core.general)
- if ((G.fields["name"] == occupant.real_name))
- del(G)
+ //Handle job slot/tater cleanup.
+ var/job = occupant.mind.assigned_role
- if(orient_right)
- icon_state = "[base_icon_state]-r"
- else
- icon_state = base_icon_state
+ job_master.FreeRole(job)
- //TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags?
+ if(occupant.mind.objectives.len)
+ del(occupant.mind.objectives)
+ occupant.mind.special_role = null
+ else
+ if(ticker.mode.name == "AutoTraitor")
+ var/datum/game_mode/traitor/autotraitor/current_mode = ticker.mode
+ current_mode.possible_traitors.Remove(occupant)
- //This should guarantee that ghosts don't spawn.
- occupant.ckey = null
+ // Delete them from datacore.
- //Make an announcement and log the person entering storage.
- control_computer.frozen_crew += "[occupant.real_name]"
+ if(PDA_Manifest.len)
+ PDA_Manifest.Cut()
+ for(var/datum/data/record/R in data_core.medical)
+ if ((R.fields["name"] == occupant.real_name))
+ del(R)
+ for(var/datum/data/record/T in data_core.security)
+ if ((T.fields["name"] == occupant.real_name))
+ del(T)
+ for(var/datum/data/record/G in data_core.general)
+ if ((G.fields["name"] == occupant.real_name))
+ del(G)
- announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
- visible_message("\blue \The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3)
+ if(orient_right)
+ icon_state = "[base_icon_state]-r"
+ else
+ icon_state = base_icon_state
- // Delete the mob.
- del(occupant)
- occupant = null
- name = initial(name)
+ //TODO: Check objectives/mode, update new targets if this mob is the target, spawn new antags?
- return
+ //This should guarantee that ghosts don't spawn.
+ occupant.ckey = null
+
+ //Make an announcement and log the person entering storage.
+ control_computer.frozen_crew += "[occupant.real_name]"
+
+ announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]")
+ visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3)
+
+ // Delete the mob.
+ del(occupant)
+ occupant = null
+ name = initial(name)
/obj/machinery/cryopod/attackby(var/obj/item/weapon/G as obj, var/mob/user as mob)
@@ -391,7 +403,7 @@
if(istype(G, /obj/item/weapon/grab))
if(occupant)
- user << "\blue \The [src] is in use."
+ user << "\The [src] is in use."
return
if(!ismob(G:affecting))
@@ -428,15 +440,15 @@
else
icon_state = occupied_icon_state
- M << "\blue [on_enter_occupant_message]"
- M << "\blue If you ghost, log out or close your client now, your character will shortly be permanently removed from the round."
+ M << "[on_enter_occupant_message]"
+ M << "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round."
occupant = M
time_entered = world.time
// Book keeping!
var/turf/location = get_turf(src)
log_admin("[key_name_admin(M)] has entered a stasis pod. (JMP)")
- message_admins("\blue [key_name_admin(M)] has entered a stasis pod.")
+ message_admins("[key_name_admin(M)] has entered a stasis pod.")
//Despawning occurs when process() is called with an occupant without a client.
src.add_fingerprint(M)
@@ -476,7 +488,7 @@
return
if(src.occupant)
- usr << "\blue \The [src] is in use."
+ usr << "\The [src] is in use."
return
for(var/mob/living/carbon/slime/M in range(1,usr))
@@ -492,7 +504,7 @@
return
if(src.occupant)
- usr << "\blue \The [src] is in use."
+ usr << "\The [src] is in use."
return
usr.stop_pulling()
@@ -506,8 +518,8 @@
else
icon_state = occupied_icon_state
- usr << "\blue [on_enter_occupant_message]"
- usr << "\blue If you ghost, log out or close your client now, your character will shortly be permanently removed from the round."
+ usr << "[on_enter_occupant_message]"
+ usr << "If you ghost, log out or close your client now, your character will shortly be permanently removed from the round."
occupant = usr
time_entered = world.time
diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm
index 8d166b4dae..c853ac8441 100644
--- a/code/game/machinery/doors/airlock.dm
+++ b/code/game/machinery/doors/airlock.dm
@@ -876,6 +876,7 @@ About the new airlock wires panel:
src.welded = 1
else
src.welded = null
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
src.update_icon()
return
else
@@ -924,7 +925,7 @@ About the new airlock wires panel:
da.created_name = src.name
da.update_state()
- if(operating == -1)
+ if(operating == -1 || (stat & BROKEN))
new /obj/item/weapon/circuitboard/broken(src.loc)
operating = 0
else
diff --git a/code/game/machinery/doors/blast_door.dm b/code/game/machinery/doors/blast_door.dm
index c409ef3080..f1f4306f56 100644
--- a/code/game/machinery/doors/blast_door.dm
+++ b/code/game/machinery/doors/blast_door.dm
@@ -54,6 +54,7 @@
src.update_icon()
src.SetOpacity(0)
sleep(15)
+ src.layer = open_layer
src.operating = 0
// Proc: force_close()
@@ -61,6 +62,7 @@
// Description: Closes the door. No checks are done inside this proc.
/obj/machinery/door/blast/proc/force_close()
src.operating = 1
+ src.layer = closed_layer
flick(icon_state_closing, src)
src.density = 1
update_nearby_tiles()
diff --git a/code/game/machinery/doors/firedoor.dm b/code/game/machinery/doors/firedoor.dm
index 264fecbc2b..55b392feff 100644
--- a/code/game/machinery/doors/firedoor.dm
+++ b/code/game/machinery/doors/firedoor.dm
@@ -186,13 +186,14 @@
add_fingerprint(user)
if(operating)
return//Already doing something.
- if(istype(C, /obj/item/weapon/weldingtool))
+ if(istype(C, /obj/item/weapon/weldingtool) && !repairing)
var/obj/item/weapon/weldingtool/W = C
if(W.remove_fuel(0, user))
blocked = !blocked
user.visible_message("\The [user] [blocked ? "welds" : "unwelds"] \the [src] with \a [W].",\
"You [blocked ? "weld" : "unweld"] \the [src] with \the [W].",\
"You hear something being welded.")
+ playsound(src, 'sound/items/Welder.ogg', 100, 1)
update_icon()
return
@@ -203,7 +204,7 @@
update_icon()
return
- if(blocked && istype(C, /obj/item/weapon/crowbar))
+ if(blocked && istype(C, /obj/item/weapon/crowbar) && !repairing)
if(!hatch_open)
user << "You must open the maintenance hatch first!"
else
@@ -215,19 +216,24 @@
user.visible_message("[user] has removed the electronics from \the [src].",
"You have removed the electronics from [src].")
- new/obj/item/weapon/airalarm_electronics(src.loc)
+ if (stat & BROKEN)
+ new /obj/item/weapon/circuitboard/broken(src.loc)
+ else
+ new/obj/item/weapon/airalarm_electronics(src.loc)
+
var/obj/structure/firedoor_assembly/FA = new/obj/structure/firedoor_assembly(src.loc)
FA.anchored = 1
FA.density = 1
+ FA.wired = 1
FA.update_icon()
del(src)
return
if(blocked)
- user << "\The [src] is welded solid!"
+ user << "\The [src] is welded shut!"
return
- if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/melee/energy/blade) || istype(C,/obj/item/weapon/twohanded/fireaxe))
+ if(istype(C, /obj/item/weapon/crowbar) || istype(C,/obj/item/weapon/twohanded/fireaxe))
if(operating)
return
@@ -262,6 +268,8 @@
spawn(0)
close()
return
+
+ return ..()
// CHECK PRESSURE
/obj/machinery/door/firedoor/process()
diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm
index 017e758ef3..1372997f83 100644
--- a/code/game/machinery/doors/firedoor_assembly.dm
+++ b/code/game/machinery/doors/firedoor_assembly.dm
@@ -6,6 +6,7 @@ obj/structure/firedoor_assembly
anchored = 0
opacity = 0
density = 0
+ var/wired = 0
obj/structure/firedoor_assembly/update_icon()
if(anchored)
@@ -14,7 +15,28 @@ obj/structure/firedoor_assembly/update_icon()
icon_state = "door_construction"
obj/structure/firedoor_assembly/attackby(C as obj, mob/user as mob)
- if(istype(C, /obj/item/weapon/airalarm_electronics))
+ if(istype(C, /obj/item/stack/cable_coil) && !wired && anchored)
+ var/obj/item/stack/cable_coil/cable = C
+ if (cable.get_amount() < 1)
+ user << "You need one length of coil to wire \the [src]."
+ return
+ user.visible_message("[user] wires \the [src].", "You start to wire \the [src].")
+ if(do_after(user, 40) && !wired && anchored)
+ if (cable.use(1))
+ wired = 1
+ user << "You wire \the [src]."
+
+ else if(istype(C, /obj/item/weapon/wirecutters) && wired )
+ playsound(src.loc, 'sound/items/Wirecutter.ogg', 100, 1)
+ user.visible_message("[user] cuts the wires from \the [src].", "You start to cut the wires from \the [src].")
+
+ if(do_after(user, 40))
+ if(!src) return
+ user << "You cut the wires!"
+ new/obj/item/stack/cable_coil(src.loc, 1)
+ wired = 0
+
+ else if(istype(C, /obj/item/weapon/airalarm_electronics) && wired)
if(anchored)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
user.visible_message("[user] has inserted a circuit into \the [src]!",
diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm
index 1a3cce2cf9..4d192c5dd9 100644
--- a/code/game/machinery/machinery.dm
+++ b/code/game/machinery/machinery.dm
@@ -230,6 +230,10 @@ Class Procs:
/mob/living/silicon/ai/canUseTopic(atom/movable/M)
if(stat)
return
+ // Prevents the AI from using Topic on admin levels (by for example viewing through the court/thunderdome cameras)
+ // unless it's on the same level as the object it's interacting with.
+ if(!(z == M.z || M.z in config.player_levels))
+ return
//stop AIs from leaving windows open and using then after they lose vision
//apc_override is needed here because AIs use their own APC when powerless
if(cameranet && !cameranet.checkTurfVis(get_turf(M)) && !apc_override)
diff --git a/code/game/machinery/portable_turret.dm b/code/game/machinery/portable_turret.dm
index 7cfb901350..603fc9fe98 100644
--- a/code/game/machinery/portable_turret.dm
+++ b/code/game/machinery/portable_turret.dm
@@ -546,7 +546,7 @@
raising = 0
cover.icon_state = "turretCover"
raised = 0
- invisibility = 2
+ invisibility = INVISIBILITY_LEVEL_TWO
update_icon()
diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm
index 2314509098..ed996e3f1e 100644
--- a/code/game/objects/effects/decals/Cleanable/humans.dm
+++ b/code/game/objects/effects/decals/Cleanable/humans.dm
@@ -57,15 +57,21 @@ var/global/list/image/splatter_cache=list()
if((!l_foot || l_foot.status & ORGAN_DESTROYED) && (!r_foot || r_foot.status & ORGAN_DESTROYED))
hasfeet = 0
if(perp.shoes && !perp.buckled)//Adding blood to shoes
- perp.shoes.blood_color = basecolor
- perp.shoes:track_blood = max(amount,perp.shoes:track_blood)
- if(!perp.shoes.blood_overlay)
- perp.shoes.generate_blood_overlay()
- if(!perp.shoes.blood_DNA)
- perp.shoes.blood_DNA = list()
- perp.shoes.blood_overlay.color = basecolor
- perp.shoes.overlays += perp.shoes.blood_overlay
- perp.shoes.blood_DNA |= blood_DNA.Copy()
+ var/obj/item/clothing/shoes/S = perp.shoes
+ if(istype(S))
+ S.blood_color = basecolor
+ S.track_blood = max(amount,S.track_blood)
+ if(!S.blood_overlay)
+ S.generate_blood_overlay()
+ if(!S.blood_DNA)
+ S.blood_DNA = list()
+ S.blood_overlay.color = basecolor
+ S.overlays += S.blood_overlay
+ if(S.blood_overlay && S.blood_overlay.color != basecolor)
+ S.blood_overlay.color = basecolor
+ S.overlays.Cut()
+ S.overlays += S.blood_overlay
+ S.blood_DNA |= blood_DNA.Copy()
else if (hasfeet)//Or feet
perp.feet_blood_color = basecolor
@@ -108,13 +114,19 @@ var/global/list/image/splatter_cache=list()
amount = 2
/obj/effect/decal/cleanable/blood/drip
- name = "drips of blood"
- desc = "It's red."
- gender = PLURAL
- icon = 'icons/effects/drip.dmi'
- icon_state = "1"
- random_icon_states = list("1","2","3","4","5")
- amount = 0
+ name = "drips of blood"
+ desc = "It's red."
+ gender = PLURAL
+ icon = 'icons/effects/drip.dmi'
+ icon_state = "1"
+ random_icon_states = list("1","2","3","4","5")
+ amount = 0
+ var/list/drips = list()
+
+/obj/effect/decal/cleanable/blood/drip/New()
+ ..()
+ spawn(1)
+ drips |= icon_state
/obj/effect/decal/cleanable/blood/writing
icon_state = "tracks"
diff --git a/code/game/objects/explosion.dm b/code/game/objects/explosion.dm
index c48d062e9e..32f05901b4 100644
--- a/code/game/objects/explosion.dm
+++ b/code/game/objects/explosion.dm
@@ -70,8 +70,12 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
var/lighting_controller_was_processing = lighting_controller.processing //Pause the lighting updates for a bit
lighting_controller.processing = 0
+
+
+ var/approximate_intensity = (devastation_range * 3) + (heavy_impact_range * 2) + light_impact_range
var/powernet_rebuild_was_deferred_already = defer_powernet_rebuild
- if(defer_powernet_rebuild != 2)
+ // Large enough explosion. For performance reasons, powernets will be rebuilt manually
+ if(!defer_powernet_rebuild && (approximate_intensity > 25))
defer_powernet_rebuild = 1
if(heavy_impact_range > 1)
@@ -110,9 +114,9 @@ proc/explosion(turf/epicenter, devastation_range, heavy_impact_range, light_impa
sleep(8)
if(!lighting_controller.processing) lighting_controller.processing = lighting_controller_was_processing
- if(!powernet_rebuild_was_deferred_already)
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
+ if(!powernet_rebuild_was_deferred_already && defer_powernet_rebuild)
+ makepowernets()
+ defer_powernet_rebuild = 0
return 1
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 089b47aadd..09850e3963 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -115,10 +115,7 @@
size = "bulky"
if(5.0)
size = "huge"
- else
- //if ((CLUMSY in usr.mutations) && prob(50)) t = "funny-looking"
- var/custom_suffix = "It is a [size] item."
- return ..(user, distance, suffix = custom_suffix)
+ return ..(user, distance, "", "It is a [size] item.")
/obj/item/attack_hand(mob/user as mob)
if (!user) return
diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm
index 9280ccba90..b24bf75ec1 100755
--- a/code/game/objects/items/devices/PDA/PDA.dm
+++ b/code/game/objects/items/devices/PDA/PDA.dm
@@ -966,6 +966,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
U.last_target_click = world.time
var/t = input(U, "Please enter message", P.name, null) as text
t = copytext(sanitize(t), 1, MAX_MESSAGE_LEN)
+ t = readd_quotes(t)
if (!t || !istype(P))
return
if (!in_range(src, U) && loc != U)
diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm
index f6485f0a16..d7a05a7173 100644
--- a/code/game/objects/items/weapons/tanks/tanks.dm
+++ b/code/game/objects/items/weapons/tanks/tanks.dm
@@ -117,10 +117,16 @@
ui_interact(user)
/obj/item/weapon/tank/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
+ var/mob/living/carbon/location = null
+ if(istype(loc, /obj/item/weapon/rig)) // check for tanks in rigs
+ if(istype(loc.loc, /mob/living/carbon))
+ location = loc.loc
+ else if(istype(loc, /mob/living/carbon))
+ location = loc
+
var/using_internal
- if(istype(loc,/mob/living/carbon))
- var/mob/living/carbon/location = loc
+ if(istype(location))
if(location.internal==src)
using_internal = 1
@@ -133,9 +139,20 @@
data["valveOpen"] = using_internal ? 1 : 0
data["maskConnected"] = 0
- if(istype(loc,/mob/living/carbon))
- var/mob/living/carbon/location = loc
- if(location.internal == src)
+
+ if(istype(location))
+ var/mask_check = 0
+
+ if(location.internal == src) // if tank is current internal
+ mask_check = 1
+ else if(src in location) // or if tank is in the mobs possession
+ if(!location.internal) // and they do not have any active internals
+ mask_check = 1
+ else if(istype(src.loc, /obj/item/weapon/rig) && src.loc in location) // or the rig is in the mobs possession
+ if(!location.internal) // and they do not have any active internals
+ mask_check = 1
+
+ if(mask_check)
if(location.wear_mask && (location.wear_mask.flags & AIRTIGHT))
data["maskConnected"] = 1
else if(istype(location, /mob/living/carbon/human))
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 5a290d3fbd..84ec0adecb 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -27,7 +27,9 @@
if (istype(A,/mob/living/carbon))
var/mob/living/carbon/M = A
- if(M.lying) return
+ if(M.lying)
+ ..()
+ return
dirt++
var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src)
if (dirt >= 50)
diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm
index 6c9ee85751..1f86703322 100644
--- a/code/game/turfs/turf.dm
+++ b/code/game/turfs/turf.dm
@@ -128,34 +128,27 @@
if(!istype(atom, /atom/movable))
return
- var/atom/movable/M = atom
+ var/atom/movable/A = atom
var/loopsanity = 100
- if(ismob(M))
- if(!M:lastarea)
- M:lastarea = get_area(M.loc)
- if(M:lastarea.has_gravity == 0)
+ if(ismob(A))
+ var/mob/M = A
+ if(!M.lastarea)
+ M.lastarea = get_area(M.loc)
+ if(M.lastarea.has_gravity == 0)
inertial_drift(M)
- /*
- if(M.flags & NOGRAV)
- inertial_drift(M)
- */
-
-
-
else if(!istype(src, /turf/space))
- M:inertia_dir = 0
- var/mob/M1 = M
- M1.make_floating(0)
+ M.inertia_dir = 0
+ M.make_floating(0)
..()
var/objects = 0
- for(var/atom/A as mob|obj|turf|area in range(1))
+ for(var/atom/O as mob|obj|turf|area in range(1))
if(objects > loopsanity) break
objects++
spawn( 0 )
- if ((A && M))
- A.HasProximity(M, 1)
+ if ((O && A))
+ O.HasProximity(A, 1)
return
return
@@ -257,9 +250,9 @@
//W.Assimilate_Air()
W.lighting_lumcount += old_lumcount
- if(old_lumcount != W.lighting_lumcount)
- W.lighting_changed = 1
- lighting_controller.changed_turfs += W
+
+ if(W.lighting_lumcount)
+ W.UpdateAffectingLights()
if(old_fire)
fire = old_fire
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 82a81e5af7..ab3c8dcc80 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -59,7 +59,8 @@
//Do 175 damage divided by the number of damage types applied.
if(damagetype & BRUTELOSS)
- adjustBruteLoss(175/damage_mod)
+ adjustBruteLoss(30/damage_mod) //hack to prevent gibbing
+ adjustOxyLoss(145/damage_mod)
if(damagetype & FIRELOSS)
adjustFireLoss(175/damage_mod)
diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 9c3acb9c78..f090d8665d 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -653,6 +653,7 @@ var/global/floorIsLava = 0
Ghost Mode
Make all players retarded
Make all items look like guns
+ Paintball Mode
Japanese Animes Mode
Egalitarian Station Mode
Launch a shuttle
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 8d9e62cdcf..6548454789 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -608,12 +608,14 @@ var/list/admin_verbs_mentor = list(
var/datum/disease2/disease/D = new /datum/disease2/disease()
- var/greater = ((input("Is this a lesser or greater disease?", "Give Disease") in list("Lesser", "Greater")) == "Greater")
-
- D.makerandom(greater)
- if (!greater)
- D.infectionchance = 1
+ var/severity = 1
+ var/greater = input("Is this a lesser, greater, or badmin disease?", "Give Disease") in list("Lesser", "Greater", "Badmin")
+ switch(greater)
+ if ("Lesser") severity = 1
+ if ("Greater") severity = 2
+ if ("Badmin") severity = 99
+ D.makerandom(severity)
D.infectionchance = input("How virulent is this disease? (1-100)", "Give Disease", D.infectionchance) as num
if(istype(T,/mob/living/carbon/human))
@@ -626,8 +628,8 @@ var/list/admin_verbs_mentor = list(
infect_virus2(T,D,1)
feedback_add_details("admin_verb","GD2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
- log_admin("[key_name(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].")
- message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [(greater)? "greater":"lesser"] disease2 with infection chance [D.infectionchance].", 1)
+ log_admin("[key_name(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].")
+ message_admins("\blue [key_name_admin(usr)] gave [key_name(T)] a [greater] disease2 with infection chance [D.infectionchance].", 1)
/client/proc/make_sound(var/obj/O in world) // -- TLE
set category = "Special Verbs"
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index bb1416dac0..7c2a12e1d5 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -2399,6 +2399,16 @@
W.item_color = "schoolgirl"
message_admins("[key_name_admin(usr)] activated Japanese Animes mode")
world << sound('sound/AI/animes.ogg')
+ if("paintball")
+ feedback_inc("admin_secrets_fun_used",1)
+ feedback_add_details("admin_secrets_fun_used","PB")
+ for(var/species in all_species)
+ var/datum/species/S = all_species[species]
+ S.blood_color = "rainbow"
+ for(var/obj/effect/decal/cleanable/blood/B in world)
+ B.basecolor = "rainbow"
+ B.update_icon()
+ message_admins("[key_name_admin(usr)] activated Paintball mode")
if("eagles")//SCRAW
feedback_inc("admin_secrets_fun_used",1)
feedback_add_details("admin_secrets_fun_used","EgL")
diff --git a/code/modules/client/preferences_gear.dm b/code/modules/client/preferences_gear.dm
index 3e8c8e3a3c..c83571650f 100644
--- a/code/modules/client/preferences_gear.dm
+++ b/code/modules/client/preferences_gear.dm
@@ -517,7 +517,7 @@ var/global/list/gear_datums = list()
cost = 2
slot = slot_wear_suit
-/datum/gear/gponcho
+/datum/gear/bponcho
display_name = "poncho, blue"
path = /obj/item/clothing/suit/poncho/blue
cost = 3
@@ -529,7 +529,7 @@ var/global/list/gear_datums = list()
cost = 3
slot = slot_wear_suit
-/datum/gear/rponcho
+/datum/gear/pponcho
display_name = "poncho, purple"
path = /obj/item/clothing/suit/poncho/purple
cost = 3
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index 38b60890c0..83a0e1864d 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -399,8 +399,6 @@ BLIND // can't see anything
*/
var/obj/item/clothing/tie/hastie = null
var/displays_id = 1
- var/rolled_down = 0
- var/basecolor
sprite_sheets = list("Vox" = 'icons/mob/species/vox/uniform.dmi')
/obj/item/clothing/under/update_clothing_icon()
@@ -526,11 +524,14 @@ BLIND // can't see anything
if(!istype(usr, /mob/living)) return
if(usr.stat) return
- if(copytext(item_color,-2) != "_d")
- basecolor = item_color
- if(basecolor + "_d_s" in icon_states('icons/mob/uniform.dmi'))
- body_parts_covered = "[basecolor]" ? LEGS|LOWER_TORSO : UPPER_TORSO|LOWER_TORSO|LEGS|ARMS
- item_color = item_color == "[basecolor]" ? "[basecolor]_d" : "[basecolor]"
+ if(initial(item_color) + "_d_s" in icon_states('icons/mob/uniform.dmi'))
+ if (item_color == initial(item_color))
+ body_parts_covered &= LOWER_TORSO|LEGS|FEET
+ item_color = "[initial(item_color)]_d"
+ else
+ body_parts_covered = initial(body_parts_covered)
+ item_color = initial(item_color)
+
update_clothing_icon()
else
usr << "You cannot roll down the uniform!"
diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm
index 002f53d114..3872b326bc 100644
--- a/code/modules/economy/cash.dm
+++ b/code/modules/economy/cash.dm
@@ -31,30 +31,11 @@
bundle = W
bundle.worth += src.worth
bundle.update_icon()
- if (!istype(src.loc, /turf) && istype(user, /mob/living/carbon/human))
+ if(istype(user, /mob/living/carbon/human))
var/mob/living/carbon/human/h_user = user
- if(h_user.r_hand == src)
- h_user.drop_from_inventory(src)
- h_user.put_in_r_hand(bundle)
- else if(h_user.l_hand == src)
- h_user.drop_from_inventory(src)
- h_user.put_in_l_hand(bundle)
- else if (h_user.l_store == src)
- h_user.drop_from_inventory(src)
- bundle.loc = h_user
- bundle.layer = 20
- h_user.l_store = bundle
- h_user.update_inv_pockets()
- else if (h_user.r_store == src)
- h_user.drop_from_inventory(src)
- bundle.loc = h_user
- bundle.layer = 20
- h_user.r_store = bundle
- h_user.update_inv_pockets()
- else
- src.loc = get_turf(h_user)
- if(h_user.client) h_user.client.screen -= src
- h_user.put_in_hands(bundle)
+ h_user.drop_from_inventory(src)
+ h_user.drop_from_inventory(bundle)
+ h_user.put_in_hands(bundle)
user << "You add [src.worth] Thalers worth of money to the bundles.
It holds [bundle.worth] Thalers now."
del(src)
diff --git a/code/modules/events/carp_migration.dm b/code/modules/events/carp_migration.dm
index e7c9f5a402..16d623d3da 100644
--- a/code/modules/events/carp_migration.dm
+++ b/code/modules/events/carp_migration.dm
@@ -18,19 +18,27 @@
/datum/event/carp_migration/start()
if(severity == EVENT_LEVEL_MAJOR)
- for(var/i = 1 to rand(3,5))
- spawn_fish(landmarks_list.len)
- else if(severity == EVENT_LEVEL_MODERATE)
spawn_fish(landmarks_list.len)
+ else if(severity == EVENT_LEVEL_MODERATE)
+ spawn_fish(rand(4, 6)) //12 to 30 carp, in small groups
else
- spawn_fish(rand(1, 5))
+ spawn_fish(rand(1, 3), 1, 2) //1 to 6 carp, alone or in pairs
+
+/datum/event/carp_migration/proc/spawn_fish(var/num_groups, var/group_size_min=3, var/group_size_max=5)
+ var/list/spawn_locations = list()
-/datum/event/carp_migration/proc/spawn_fish(var/limit)
for(var/obj/effect/landmark/C in landmarks_list)
if(C.name == "carpspawn")
- spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(C.loc))
- if(spawned_carp.len >= limit)
- return
+ spawn_locations.Add(C.loc)
+ spawn_locations = shuffle(spawn_locations)
+ num_groups = min(num_groups, spawn_locations.len)
+
+ var/i = 1
+ while (i <= num_groups)
+ var/group_size = rand(group_size_min, group_size_max)
+ for (var/j = 1, j <= group_size, j++)
+ spawned_carp.Add(new /mob/living/simple_animal/hostile/carp(spawn_locations[i]))
+ i++
/datum/event/carp_migration/end()
for(var/mob/living/simple_animal/hostile/carp/C in spawned_carp)
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 4f2675a512..758d50ebdd 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -25,7 +25,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
if(!next_event_time)
set_event_delay()
- if(delayed)
+ if(delayed || !config.allow_random_events)
next_event_time += (world.time - last_world_time)
else if(world.time > next_event_time)
start_event()
@@ -139,22 +139,22 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
/datum/event_container/moderate
severity = EVENT_LEVEL_MODERATE
available_events = list(
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 10),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 5, list(ASSIGNMENT_ENGINEER = 25, ASSIGNMENT_SECURITY = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 10, list(ASSIGNMENT_ENGINEER = 5)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 50, list(ASSIGNMENT_AI = 25, ASSIGNMENT_SECURITY = 25)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 50)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 25, list(ASSIGNMENT_ENGINEER = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 15, list(ASSIGNMENT_ENGINEER = 5, ASSIGNMENT_JANITOR = 15)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 10)),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 5, list(ASSIGNMENT_SECURITY = 5), 1),
- new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5,list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
- new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
- new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 25, ASSIGNMENT_CYBORG = 25, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SCIENTIST = 5)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Nothing", /datum/event/nothing, 1230),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Carp School", /datum/event/carp_migration, 100, list(ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_SECURITY = 20), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Rogue Drones", /datum/event/rogue_drone, 20, list(ASSIGNMENT_SECURITY = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Space vines", /datum/event/spacevine, 200, list(ASSIGNMENT_ENGINEER = 10)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Meteor Shower", /datum/event/meteor_shower, 0, list(ASSIGNMENT_ENGINEER = 20)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Communication Blackout", /datum/event/communications_blackout, 500, list(ASSIGNMENT_AI = 150, ASSIGNMENT_SECURITY = 120)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Prison Break", /datum/event/prison_break, 0, list(ASSIGNMENT_SECURITY = 100)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Grid Check", /datum/event/grid_check, 200, list(ASSIGNMENT_ENGINEER = 60)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Electrical Storm", /datum/event/electrical_storm, 250, list(ASSIGNMENT_ENGINEER = 20, ASSIGNMENT_JANITOR = 150)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Radiation Storm", /datum/event/radiation_storm, 0, list(ASSIGNMENT_MEDICAL = 50), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Appendicitis", /datum/event/spontaneous_appendicitis, 0, list(ASSIGNMENT_MEDICAL = 10), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Viral Infection", /datum/event/viral_infection, 0, list(ASSIGNMENT_MEDICAL = 150)),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, 100, list(ASSIGNMENT_SECURITY = 30), 1),
+ new /datum/event_meta(EVENT_LEVEL_MODERATE, "Ion Storm", /datum/event/ionstorm, 0, list(ASSIGNMENT_AI = 50, ASSIGNMENT_CYBORG = 50, ASSIGNMENT_ENGINEER = 15, ASSIGNMENT_SCIENTIST = 5)),
+ new /datum/event_meta/alien(EVENT_LEVEL_MODERATE, "Alien Infestation", /datum/event/alien_infestation, 2.5, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
+ new /datum/event_meta/ninja(EVENT_LEVEL_MODERATE, "Space Ninja", /datum/event/space_ninja, 0, list(ASSIGNMENT_SECURITY = 1), 1, 0, 5),
)
/datum/event_container/major
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index 5701415699..806e9a331e 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -45,6 +45,10 @@
log_debug("Event '[EM.name]' has completed at [worldtime2text()].")
+/datum/event_manager/proc/delay_events(var/severity, var/delay)
+ var/list/datum/event_container/EC = event_containers[severity]
+ EC.next_event_time += delay
+
/datum/event_manager/proc/Interact(var/mob/living/user)
var/html = GetInteractWindow()
@@ -75,6 +79,7 @@
/datum/event_manager/proc/GetInteractWindow()
var/html = "Refresh"
+ html += "Pause All - [config.allow_random_events ? "Pause" : "Resume"]"
if(selected_event_container)
var/event_time = max(0, selected_event_container.next_event_time - world.time)
@@ -92,7 +97,7 @@
html += "[EM.max_weight] | "
html += "[EM.one_shot] | "
html += "[EM.enabled] | "
- html += "[EM.get_weight()] | "
+ html += "[EM.get_weight(number_active_with_role())] | "
html += "Remove | "
html += "
"
html += ""
@@ -207,6 +212,9 @@
var/datum/event_container/EC = locate(href_list["pause"])
EC.delayed = !EC.delayed
admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.")
+ else if(href_list["pause_all"])
+ config.allow_random_events = text2num(href_list["pause_all"])
+ admin_log_and_message_admins("has [config.allow_random_events ? "resumed" : "paused"] countdown for all events.")
else if(href_list["interval"])
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
if(delay && delay > 0)
diff --git a/code/modules/events/grid_check.dm b/code/modules/events/grid_check.dm
index c485827efb..40a38e2383 100644
--- a/code/modules/events/grid_check.dm
+++ b/code/modules/events/grid_check.dm
@@ -8,7 +8,8 @@
power_failure(0)
/datum/event/grid_check/announce()
- command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
+ if (prob(30))
+ command_announcement.Announce("Abnormal activity detected in [station_name()]'s powernet. As a precautionary measure, the station's power will be shut off for an indeterminate duration.", "Automated Grid Check", new_sound = 'sound/AI/poweroff.ogg')
/datum/event/grid_check/end()
power_restore()
diff --git a/code/modules/events/radiation_storm.dm b/code/modules/events/radiation_storm.dm
index a5b6c6be55..a288752ff7 100644
--- a/code/modules/events/radiation_storm.dm
+++ b/code/modules/events/radiation_storm.dm
@@ -30,12 +30,12 @@
/datum/event/radiation_storm/proc/radiate()
for(var/mob/living/carbon/C in living_mob_list)
- var/turf/T = get_turf(C)
- if(!T)
+ var/area/A = get_area(C)
+ if(!A)
continue
- if(!(T.z in config.station_levels))
+ if(!(A.z in config.station_levels))
continue
- if(istype(T.loc, /area/maintenance) || istype(T.loc, /area/crew_quarters))
+ if(A.rad_shielded)
continue
if(istype(C,/mob/living/carbon/human))
diff --git a/code/modules/events/viral_infection.dm b/code/modules/events/viral_infection.dm
index 6e40d38d33..55dbe2b823 100644
--- a/code/modules/events/viral_infection.dm
+++ b/code/modules/events/viral_infection.dm
@@ -1,11 +1,36 @@
+datum/event/viral_infection
+ var/list/viruses = list()
+
datum/event/viral_infection/setup()
announceWhen = rand(0, 3000)
endWhen = announceWhen + 1
+
+ //generate 1-3 viruses. This way there's an upper limit on how many individual diseases need to be cured if many people are initially infected
+ var/num_diseases = rand(1,3)
+ for (var/i=0, i < num_diseases, i++)
+ var/datum/disease2/disease/D = new /datum/disease2/disease
+
+ var/strength = 1 //whether the disease is of the greater or lesser variety
+ if (severity >= EVENT_LEVEL_MAJOR && prob(75))
+ strength = 2
+ D.makerandom(strength)
+ viruses += D
datum/event/viral_infection/announce()
- command_announcement.Announce("Confirmed outbreak of level five biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
+ var/level
+ if (severity == EVENT_LEVEL_MUNDANE)
+ return
+ else if (severity == EVENT_LEVEL_MODERATE)
+ level = pick("one", "two", "three", "four")
+ else
+ level = "five"
+
+ if (severity == EVENT_LEVEL_MAJOR || prob(60))
+ command_announcement.Announce("Confirmed outbreak of level [level] biohazard aboard [station_name()]. All personnel must contain the outbreak.", "Biohazard Alert", new_sound = 'sound/AI/outbreak5.ogg')
datum/event/viral_infection/start()
+ if(!viruses.len) return
+
var/list/candidates = list() //list of candidate keys
for(var/mob/living/carbon/human/G in player_list)
if(G.client && G.stat != DEAD)
@@ -13,9 +38,10 @@ datum/event/viral_infection/start()
if(!candidates.len) return
candidates = shuffle(candidates)//Incorporating Donkie's list shuffle
- severity = severity == 1 ? 1 : severity - 1
+ severity = max(EVENT_LEVEL_MUNDANE, severity - 1)
var/actual_severity = severity * rand(1, 3)
while(actual_severity > 0 && candidates.len)
- infect_mob_random_lesser(candidates[1])
+ var/datum/disease2/disease/D = pick(viruses)
+ infect_mob(candidates[1], D.getcopy())
candidates.Remove(candidates[1])
actual_severity--
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index cac59fc767..777c17fdbc 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -120,7 +120,7 @@
else
msg += "[t_He] [t_has] \icon[gloves] \a [gloves] on [t_his] hands.\n"
else if(blood_DNA)
- msg += "[t_He] [t_has] blood-stained hands!\n"
+ msg += "[t_He] [t_has] [(hand_blood_color != "#030303") ? "blood" : "oil"]-stained hands!\n"
//handcuffed?
@@ -145,7 +145,7 @@
else
msg += "[t_He] [t_is] wearing \icon[shoes] \a [shoes] on [t_his] feet.\n"
else if(feet_blood_DNA)
- msg += "[t_He] [t_has] blood-stained feet!\n"
+ msg += "[t_He] [t_has] [(feet_blood_color != "#030303") ? "blood" : "oil"]-stained feet!\n"
//mask
if(wear_mask && !skipmask)
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 8700b4ebcb..0eb025f635 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -871,6 +871,7 @@
else
target.show_message("\blue You hear a voice that seems to echo around the room: [say]")
usr.show_message("\blue You project your mind into [target.real_name]: [say]")
+ log_say("[key_name(usr)] sent a telepathic message to [key_name(target)]: [say]")
for(var/mob/dead/observer/G in world)
G.show_message("Telepathic message from [src] to [target]: [say]")
diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm
index 545fa41c03..0a504ca148 100644
--- a/code/modules/mob/living/carbon/human/inventory.dm
+++ b/code/modules/mob/living/carbon/human/inventory.dm
@@ -640,9 +640,10 @@ It can still be worn/put on as normal.
W.hold.close(usr)
usr.put_in_hands(tie)
suit.hastie = null*/
- suit.hastie.on_removed(usr)
- suit.hastie = null
- target.update_inv_w_uniform()
+ if(suit && suit.hastie)
+ suit.hastie.on_removed(usr)
+ suit.hastie = null
+ target.update_inv_w_uniform()
if("id")
slot_to_process = slot_wear_id
if (target.wear_id)
diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm
index 17293f2b67..590ff71ea5 100644
--- a/code/modules/mob/living/silicon/ai/freelook/eye.dm
+++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm
@@ -12,6 +12,7 @@
status_flags = GODMODE // You can't damage it.
mouse_opacity = 0
see_in_dark = 7
+ invisibility = INVISIBILITY_MAXIMUM
// Movement code. Returns 0 to stop air movement from moving it.
/mob/aiEye/Move()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index aeebc30bb3..c928cdd3a5 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -23,6 +23,11 @@ var/list/robot_verbs_default = list(
var/integrated_light_power = 6
var/datum/wires/robot/wires
+//Icon stuff
+
+ var/icontype //Persistent icontype tracking allows for cleaner icon updates
+ var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
+
//Hud stuff
var/obj/screen/cells = null
@@ -106,6 +111,8 @@ var/list/robot_verbs_default = list(
robot_modules_background.icon_state = "block"
robot_modules_background.layer = 19 //Objects that appear on screen are on layer 20, UI should be just below it.
ident = rand(1, 999)
+ module_sprites["Basic"] = "robot"
+ icontype = "Default"
updatename("Default")
updateicon()
@@ -227,11 +234,10 @@ var/list/robot_verbs_default = list(
modules+="Combat"
modtype = input("Please, select a module!", "Robot", null, null) in modules
- var/module_sprites[0] //Used to store the associations between sprite names and sprite index.
-
if(module)
return
+ module_sprites = list()
switch(modtype)
if("Standard")
module = new /obj/item/weapon/robot_module/standard(src)
@@ -958,38 +964,25 @@ var/list/robot_verbs_default = list(
overlays.Cut()
if(stat == 0)
- overlays += "eyes"
- overlays.Cut()
- overlays += "eyes-[icon_state]"
- else
- overlays -= "eyes"
-
- if(opened && custom_sprite == 1) //Custom borgs also have custom panels, heh
- if(wiresexposed)
- overlays += "[src.ckey]-openpanel +w"
- else if(cell)
- overlays += "[src.ckey]-openpanel +c"
- else
- overlays += "[src.ckey]-openpanel -c"
+ overlays += "eyes-[module_sprites[icontype]]"
if(opened)
+ var/panelprefix = custom_sprite ? src.ckey : "ov"
if(wiresexposed)
- overlays += "ov-openpanel +w"
+ overlays += "[panelprefix]-openpanel +w"
else if(cell)
- overlays += "ov-openpanel +c"
+ overlays += "[panelprefix]-openpanel +c"
else
- overlays += "ov-openpanel -c"
+ overlays += "[panelprefix]-openpanel -c"
if(module_active && istype(module_active,/obj/item/borg/combat/shield))
- overlays += "[icon_state]-shield"
+ overlays += "[module_sprites[icontype]]-shield"
if(modtype == "Combat")
- var/base_icon = ""
- base_icon = icon_state
if(module_active && istype(module_active,/obj/item/borg/combat/mobility))
- icon_state = "[icon_state]-roll"
+ icon_state = "[module_sprites[icontype]]-roll"
else
- icon_state = base_icon
+ icon_state = module_sprites[icontype]
return
//Call when target overlay should be added/removed
@@ -1222,8 +1215,6 @@ var/list/robot_verbs_default = list(
else
triesleft--
- var/icontype
-
if (custom_sprite == 1)
icontype = "Custom"
triesleft = 0
@@ -1304,4 +1295,4 @@ var/list/robot_verbs_default = list(
if(2) //New Module
connected_ai << "
NOTICE - [braintype] module change detected: [name] has loaded the [module.name].
"
if(3) //New Name
- connected_ai << "
NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].
"
\ No newline at end of file
+ connected_ai << "
NOTICE - [braintype] reclassification detected: [oldname] is now designated as [newname].
"
diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm
index e8fa3727ce..7cbc5bef5e 100644
--- a/code/modules/mob/living/silicon/robot/robot_modules.dm
+++ b/code/modules/mob/living/silicon/robot/robot_modules.dm
@@ -34,8 +34,11 @@
if(!stacktypes || !stacktypes.len) return
for(var/T in stacktypes)
- var/O = locate(T) in src.modules
- var/obj/item/stack/S = O
+ var/obj/item/stack/S
+ for(var/obj/O in src.modules)
+ if(O.type == T)
+ S = O
+ break
if(!S)
src.modules -= null
@@ -43,6 +46,9 @@
src.modules |= S
S.amount = 1
+ if(!istype(S))
+ continue
+
if(S && S.amount < stacktypes[T])
S.amount++
diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm
index 568998a3c6..03bf90b0f5 100644
--- a/code/modules/mob/living/simple_animal/hostile/hostile.dm
+++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm
@@ -113,7 +113,11 @@
/mob/living/simple_animal/hostile/proc/ListTargets(var/dist = 7)
var/list/L = hearers(src, dist)
- L += mechas_list
+
+ for (var/obj/mecha/M in mechas_list)
+ if (get_dist(src, M) <= dist)
+ L += M
+
return L
/mob/living/simple_animal/hostile/death()
diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm
index b3e04533d4..be66fe5611 100644
--- a/code/modules/mob/mob_helpers.dm
+++ b/code/modules/mob/mob_helpers.dm
@@ -360,6 +360,8 @@ It's fairly easy to fix if dealing with single letters but not so much with comp
return
M.shakecamera = 1
spawn(1)
+ if(!M.client)
+ return
var/atom/oldeye=M.client.eye
var/aiEyeFlag = 0
diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm
index 8d4144a550..067ef6a42e 100644
--- a/code/modules/organs/blood.dm
+++ b/code/modules/organs/blood.dm
@@ -290,29 +290,24 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
source.data["blood_type"] = donor.dna.b_type
// Are we dripping or splattering?
- if(!large)
-
- // Only a certain number of drips can be on a given turf.
- var/list/drips = list()
- var/list/drip_icons = list("1","2","3","4","5")
-
- for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
- drips += drop
- drip_icons.Remove(drop.icon_state)
-
- // If we have too many drips, remove them and spawn a proper blood splatter.
- if(drips.len >= 5)
- //TODO: copy all virus data from drips to new splatter?
- for(var/obj/effect/decal/cleanable/blood/drip/drop in drips)
- del drop
- else
- decal_type = /obj/effect/decal/cleanable/blood/drip
+ var/list/drips = list()
+ // Only a certain number of drips (or one large splatter) can be on a given turf.
+ for(var/obj/effect/decal/cleanable/blood/drip/drop in T)
+ drips |= drop.drips
+ del(drop)
+ if(!large && drips.len < 3)
+ decal_type = /obj/effect/decal/cleanable/blood/drip
// Find a blood decal or create a new one.
B = locate(decal_type) in T
if(!B)
B = new decal_type(T)
+ var/obj/effect/decal/cleanable/blood/drip/drop = B
+ if(istype(drop) && drips && drips.len && !large)
+ drop.overlays |= drips
+ drop.drips |= drips
+
// If there's no data to copy, call it quits here.
if(!source)
return B
@@ -330,11 +325,7 @@ proc/blood_splatter(var/target,var/datum/reagent/blood/source,var/large)
else
B.blood_DNA[source.data["blood_DNA"]] = "O+"
- // Update virus information. //Looks like this is out of date.
- //for(var/datum/disease/D in source.data["viruses"])
- // var/datum/disease/new_virus = D.Copy(1)
- // source.viruses += new_virus
- // new_virus.holder = B
+ // Update virus information.
if(source.data["virus2"])
B.virus2 = virus_copylist(source.data["virus2"])
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 0882531ab6..b45d0aafa7 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -562,7 +562,7 @@ Note that amputating the affected organ does in fact remove the infection from t
O.setAmputatedTree()
//Handles dismemberment
-/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0)
+/datum/organ/external/proc/droplimb(var/override = 0,var/no_explode = 0,var/amputation=0)
if(destspawn) return
if(override)
status |= ORGAN_DESTROYED
@@ -579,9 +579,13 @@ Note that amputating the affected organ does in fact remove the infection from t
germ_level = 0
+ // If any organs are attached to this, destroy them
+ for(var/datum/organ/external/O in children)
+ O.droplimb(1, no_explode, amputation)
+
//Replace all wounds on that arm with one wound on parent organ.
wounds.Cut()
- if (parent)
+ if (parent && !amputation)
var/datum/wound/W
if(max_damage < 50)
W = new/datum/wound/lost_limb/small(max_damage)
@@ -591,10 +595,6 @@ Note that amputating the affected organ does in fact remove the infection from t
parent.update_damages()
update_damages()
- // If any organs are attached to this, destroy them
- for(var/datum/organ/external/O in children)
- O.droplimb(1)
-
var/obj/organ //Dropped limb object
switch(body_part)
if(HEAD)
diff --git a/code/modules/paperwork/handlabeler.dm b/code/modules/paperwork/handlabeler.dm
index 940a797add..fe519e01d4 100644
--- a/code/modules/paperwork/handlabeler.dm
+++ b/code/modules/paperwork/handlabeler.dm
@@ -6,9 +6,13 @@
var/label = null
var/labels_left = 30
var/mode = 0 //off or on.
+
+/obj/item/weapon/hand_labeler/attack()
+ return
/obj/item/weapon/hand_labeler/afterattack(atom/A, mob/user as mob, proximity)
- if(!proximity) return
+ if(!proximity)
+ return
if(!mode) //if it's off, give up.
return
if(A == loc) // if placing the labeller into something (e.g. backpack)
@@ -24,10 +28,13 @@
user << "Label too big."
return
if(ishuman(A))
- user << "You can't label humans."
+ user << "The label refuses to stick to [A.name]."
return
if(issilicon(A))
- user << "You can't label cyborgs."
+ user << "The label refuses to stick to [A.name]."
+ return
+ if(isobserver(A))
+ user << "[src] passes through [A.name]."
return
if(istype(A, /obj/item/weapon/reagent_containers/glass))
user << "The label can't stick to the [A.name]. (Try using a pen)"
diff --git a/code/modules/power/port_gen.dm b/code/modules/power/port_gen.dm
index 0799900909..5b188f0bca 100644
--- a/code/modules/power/port_gen.dm
+++ b/code/modules/power/port_gen.dm
@@ -79,6 +79,9 @@ display round(lastgen) and phorontank amount
icon_state = initial(icon_state)
handleInactive()
+/obj/machinery/power/powered()
+ return 1 //doesn't require an external power source
+
/obj/machinery/power/port_gen/attack_hand(mob/user as mob)
if(..())
return
diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm
index 8f90743e46..0825d9a194 100644
--- a/code/modules/power/singularity/singularity.dm
+++ b/code/modules/power/singularity/singularity.dm
@@ -206,8 +206,6 @@ var/global/list/uneatable = list(
/obj/machinery/singularity/proc/eat()
set background = 1
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 1
// Let's just make this one loop.
for(var/atom/X in orange(grav_pull,src))
var/dist = get_dist(X, src)
@@ -226,9 +224,6 @@ var/global/list/uneatable = list(
// Turf and movable atoms
else if(dist <= consume_range && (isturf(X) || istype(X, /atom/movable)))
consume(X)
-
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
return
@@ -567,11 +562,7 @@ var/global/list/uneatable = list(
/obj/machinery/singularity/narsie/wizard/eat()
set background = 1
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 1
for(var/atom/X in orange(consume_range,src))
if(isturf(X) || istype(X, /atom/movable))
consume(X)
- if(defer_powernet_rebuild != 2)
- defer_powernet_rebuild = 0
return
diff --git a/code/modules/power/smes.dm b/code/modules/power/smes.dm
index 11bcef5881..18aa6b4885 100644
--- a/code/modules/power/smes.dm
+++ b/code/modules/power/smes.dm
@@ -301,6 +301,13 @@
data["outputMax"] = output_level_max
data["outputLoad"] = round(output_used)
+ if(outputting)
+ data["outputting"] = 2 // smes is outputting
+ else if(!outputting && output_attempt)
+ data["outputting"] = 1 // smes is online but not outputting because it's charge level is too low
+ else
+ data["outputting"] = 0 // smes is not outputting
+
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
@@ -322,11 +329,11 @@
return 1
if( href_list["cmode"] )
- inputting(!inputting)
+ inputting(!input_attempt)
update_icon()
else if( href_list["online"] )
- outputting(!outputting)
+ outputting(!output_attempt)
update_icon()
else if( href_list["input"] )
switch( href_list["input"] )
diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm
index 0e02c10ad4..a2ea7c6f0c 100644
--- a/code/modules/reagents/Chemistry-Machinery.dm
+++ b/code/modules/reagents/Chemistry-Machinery.dm
@@ -187,20 +187,20 @@
max_energy = 100
dispensable_reagents = list("water","ice","coffee","cream","tea","icetea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","watermelonjuice")
- /obj/machinery/chem_dispenser/soda/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
- ..()
- if(istype(B, /obj/item/device/multitool))
- if(hackedcheck == 0)
- user << "You change the mode from 'McNano' to 'Pizza King'."
- dispensable_reagents += list("thirteenloko","grapesoda")
- hackedcheck = 1
- return
+/obj/machinery/chem_dispenser/soda/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
+ ..()
+ if(istype(B, /obj/item/device/multitool))
+ if(hackedcheck == 0)
+ user << "You change the mode from 'McNano' to 'Pizza King'."
+ dispensable_reagents += list("thirteenloko","grapesoda")
+ hackedcheck = 1
+ return
- else
- user << "You change the mode from 'Pizza King' to 'McNano'."
- dispensable_reagents -= list("thirteenloko")
- hackedcheck = 0
- return
+ else
+ user << "You change the mode from 'Pizza King' to 'McNano'."
+ dispensable_reagents -= list("thirteenloko","grapesoda")
+ hackedcheck = 0
+ return
/obj/machinery/chem_dispenser/beer
icon_state = "booze_dispenser"
@@ -212,21 +212,21 @@
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
dispensable_reagents = list("lemon_lime","sugar","orangejuice","limejuice","sodawater","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequilla","vermouth","cognac","ale","mead")
- /obj/machinery/chem_dispenser/beer/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
- ..()
+/obj/machinery/chem_dispenser/beer/attackby(var/obj/item/weapon/B as obj, var/mob/user as mob)
+ ..()
- if(istype(B, /obj/item/device/multitool))
- if(hackedcheck == 0)
- user << "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
- dispensable_reagents += list("goldschlager","patron","watermelonjuice","berryjuice")
- hackedcheck = 1
- return
+ if(istype(B, /obj/item/device/multitool))
+ if(hackedcheck == 0)
+ user << "You disable the 'nanotrasen-are-cheap-bastards' lock, enabling hidden and very expensive boozes."
+ dispensable_reagents += list("goldschlager","patron","watermelonjuice","berryjuice")
+ hackedcheck = 1
+ return
- else
- user << "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
- dispensable_reagents -= list("goldschlager","patron","watermelonjuice","berryjuice")
- hackedcheck = 0
- return
+ else
+ user << "You re-enable the 'nanotrasen-are-cheap-bastards' lock, disabling hidden and very expensive boozes."
+ dispensable_reagents -= list("goldschlager","patron","watermelonjuice","berryjuice")
+ hackedcheck = 0
+ return
/obj/machinery/chem_dispenser/meds
name = "chem dispenser magic"
diff --git a/code/modules/research/research.dm b/code/modules/research/research.dm
index 3dcd21e9bb..c7ed90f786 100644
--- a/code/modules/research/research.dm
+++ b/code/modules/research/research.dm
@@ -185,7 +185,7 @@ datum/tech/materials
datum/tech/engineering
name = "Engineering Research"
- desc = "Development of new and improved engineering parts and."
+ desc = "Development of new and improved engineering parts."
id = "engineering"
datum/tech/phorontech
diff --git a/code/modules/surgery/generic.dm b/code/modules/surgery/generic.dm
index 238657c28d..2642b87cb7 100644
--- a/code/modules/surgery/generic.dm
+++ b/code/modules/surgery/generic.dm
@@ -305,7 +305,7 @@
var/datum/organ/external/affected = target.get_organ(target_zone)
user.visible_message("\blue [user] cuts off [target]'s [affected.display_name] with \the [tool].", \
"\blue You cut off [target]'s [affected.display_name] with \the [tool].")
- affected.droplimb(1,0)
+ affected.droplimb(1,1,1)
fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
var/datum/organ/external/affected = target.get_organ(target_zone)
diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm
index 3f5cc5800f..825a4c582e 100644
--- a/code/modules/surgery/surgery.dm
+++ b/code/modules/surgery/surgery.dm
@@ -98,7 +98,7 @@ proc/do_surgery(mob/living/carbon/M, mob/living/user, obj/item/tool)
//We had proper tools! (or RNG smiled.) and user did not move or change hands.
if(prob(S.tool_quality(tool)) && do_mob(user, M, rand(S.min_duration, S.max_duration)))
S.end_step(user, M, user.zone_sel.selecting, tool) //finish successfully
- else if (tool in user.contents && user.Adjacent(M)) //or
+ else if ((tool in user.contents) && user.Adjacent(M)) //or
S.fail_step(user, M, user.zone_sel.selecting, tool) //malpractice~
else // This failing silently was a pain.
user << "\red You must remain close to your patient to conduct surgery."
diff --git a/code/modules/virus2/disease2.dm b/code/modules/virus2/disease2.dm
index b4ae3bd033..78418f6bd0 100644
--- a/code/modules/virus2/disease2.dm
+++ b/code/modules/virus2/disease2.dm
@@ -16,17 +16,21 @@
uniqueID = rand(0,10000)
..()
-/datum/disease2/disease/proc/makerandom(var/greater=0)
+/datum/disease2/disease/proc/makerandom(var/severity=1)
for(var/i=1 ; i <= max_stage ; i++ )
var/datum/disease2/effectholder/holder = new /datum/disease2/effectholder
holder.stage = i
- if(greater)
- holder.getrandomeffect(2)
- else
- holder.getrandomeffect()
+ holder.getrandomeffect(severity)
effects += holder
uniqueID = rand(0,10000)
- infectionchance = rand(60,90)
+ switch(severity)
+ if(1)
+ infectionchance = 1
+ if(2)
+ infectionchance = rand(10,20)
+ else
+ infectionchance = rand(60,90)
+
antigen |= text2num(pick(ANTIGENS))
antigen |= text2num(pick(ANTIGENS))
spreadtype = prob(70) ? "Airborne" : "Contact"
@@ -76,7 +80,7 @@
clicks += 10
//Moving to the next stage
- if(clicks > stage*100 && prob(10))
+ if(clicks > max(stage*100, 200) && prob(10))
if(stage == max_stage)
src.cure(mob)
mob.antibodies |= src.antigen
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index 3ebeefeba8..fcf666a985 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -33,14 +33,14 @@
multiplier = rand(1,effect.maxm)
/datum/disease2/effectholder/proc/majormutate()
- getrandomeffect(2)
+ getrandomeffect(3)
////////////////////////////////////////////////////////////////
////////////////////////EFFECTS/////////////////////////////////
////////////////////////////////////////////////////////////////
/datum/disease2/effect
- var/chance_maxm = 50
+ var/chance_maxm = 50 //note that disease effects only proc once every 3 ticks for humans
var/name = "Blanking effect"
var/stage = 4
var/maxm = 1
@@ -56,10 +56,16 @@
////////////////////////STAGE 4/////////////////////////////////
+/datum/disease2/effect/nothing
+ name = "Nil Syndrome"
+ stage = 4
+ badness = 1
+ chance_maxm = 0
+
/datum/disease2/effect/gibbingtons
name = "Gibbingtons Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.gib()
@@ -67,19 +73,21 @@
name = "Radian's Syndrome"
stage = 4
maxm = 3
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.radiation += (2*multiplier)
/datum/disease2/effect/deaf
name = "Dead Ear Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.ear_deaf += 20
/datum/disease2/effect/monkey
name = "Monkism Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob,/mob/living/carbon/human))
var/mob/living/carbon/human/h = mob
@@ -88,7 +96,7 @@
/datum/disease2/effect/suicide
name = "Suicidal Syndrome"
stage = 4
- badness = 2
+ badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
mob.suiciding = 1
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
@@ -101,12 +109,14 @@
/datum/disease2/effect/killertoxins
name = "Toxification Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.adjustToxLoss(15*multiplier)
/datum/disease2/effect/dna
name = "Reverse Pattern Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
mob.bodytemperature = max(mob.bodytemperature, 350)
scramble(0,mob,10)
@@ -115,6 +125,7 @@
/datum/disease2/effect/organs
name = "Shutdown Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -140,6 +151,7 @@
/datum/disease2/effect/immortal
name = "Longevity Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -157,11 +169,10 @@
var/backlash_amt = 5*multiplier
mob.apply_damages(backlash_amt,backlash_amt,backlash_amt,backlash_amt)
-////////////////////////STAGE 3/////////////////////////////////
-
/datum/disease2/effect/bones
name = "Fragile Bones Syndrome"
stage = 4
+ badness = 2
activate(var/mob/living/carbon/mob,var/multiplier)
if(istype(mob, /mob/living/carbon/human))
var/mob/living/carbon/human/H = mob
@@ -174,6 +185,8 @@
for (var/datum/organ/external/E in H.organs)
E.min_broken_damage = initial(E.min_broken_damage)
+////////////////////////STAGE 3/////////////////////////////////
+
/datum/disease2/effect/toxins
name = "Hyperacidity"
stage = 3
@@ -192,9 +205,8 @@
name = "Telepathy Syndrome"
stage = 3
activate(var/mob/living/carbon/mob,var/multiplier)
- mob.dna.check_integrity()
mob.dna.SetSEState(REMOTETALKBLOCK,1)
- domutcheck(mob, null)
+ domutcheck(mob, null, MUTCHK_FORCED)
/datum/disease2/effect/mind
name = "Lazy Mind Syndrome"
@@ -239,10 +251,10 @@
activate(var/mob/living/carbon/mob,var/multiplier)
mob.apply_damage(2, CLONE)
-
/datum/disease2/effect/groan
name = "Groaning Syndrome"
stage = 3
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*groan")
////////////////////////STAGE 2/////////////////////////////////
@@ -250,6 +262,7 @@
/datum/disease2/effect/scream
name = "Loudness Syndrome"
stage = 2
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*scream")
@@ -262,6 +275,7 @@
/datum/disease2/effect/sleepy
name = "Resting Syndrome"
stage = 2
+ chance_maxm = 15
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*collapse")
@@ -288,6 +302,7 @@
/datum/disease2/effect/fridge
name = "Refridgerator Syndrome"
stage = 2
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*shiver")
@@ -333,17 +348,19 @@
name = "Flemmingtons"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
- mob << "\red Mucous runs down the back of your throat."
+ mob << "Mucous runs down the back of your throat."
/datum/disease2/effect/drool
name = "Saliva Effect"
stage = 1
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*drool")
/datum/disease2/effect/twitch
name = "Twitcher"
stage = 1
+ chance_maxm = 25
activate(var/mob/living/carbon/mob,var/multiplier)
mob.say("*twitch")
@@ -351,4 +368,4 @@
name = "Headache"
stage = 1
activate(var/mob/living/carbon/mob,var/multiplier)
- mob << " Your head hurts a bit"
+ mob << "Your head hurts a bit."
diff --git a/code/modules/virus2/helpers.dm b/code/modules/virus2/helpers.dm
index 483f3a985f..0a8a00435d 100644
--- a/code/modules/virus2/helpers.dm
+++ b/code/modules/virus2/helpers.dm
@@ -72,16 +72,15 @@ proc/airborne_can_reach(turf/source, turf/target)
return
if(M.reagents.has_reagent("spaceacillin"))
return
-
- if(istype(M,/mob/living/carbon/monkey))
- var/mob/living/carbon/monkey/chimp = M
- if (!(chimp.greaterform in disease.affected_species))
- return
-
- if(istype(M,/mob/living/carbon/human))
- var/mob/living/carbon/human/chump = M
- if (!(chump.species.name in disease.affected_species))
- return
+
+ if(!disease.affected_species.len)
+ return
+
+ if (!(M.species.name in disease.affected_species))
+ if (forced)
+ disease.affected_species[1] = M.species.name
+ else
+ return //not compatible with this species
// log_debug("Infecting [M]")
@@ -96,20 +95,24 @@ proc/airborne_can_reach(turf/source, turf/target)
M.virus2["[D.uniqueID]"] = D
BITSET(M.hud_updateflag, STATUS_HUD)
+//Infects mob M with disease D
+/proc/infect_mob(var/mob/living/carbon/M, var/datum/disease2/disease/D)
+ infect_virus2(M,D,1)
+ M.hud_updateflag |= 1 << STATUS_HUD
+
//Infects mob M with random lesser disease, if he doesn't have one
/proc/infect_mob_random_lesser(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom()
- D.infectionchance = 1
- infect_virus2(M,D,1)
- BITSET(M.hud_updateflag, STATUS_HUD)
+
+ D.makerandom(1)
+ infect_mob(M, D)
//Infects mob M with random greated disease, if he doesn't have one
/proc/infect_mob_random_greater(var/mob/living/carbon/M)
var/datum/disease2/disease/D = new /datum/disease2/disease
- D.makerandom(1)
- infect_virus2(M,D,1)
- BITSET(M.hud_updateflag, STATUS_HUD)
+
+ D.makerandom(2)
+ infect_mob(M, D)
//Fancy prob() function.
/proc/dprob(var/p)
diff --git a/icons/mob/custom-synthetic.dmi b/icons/mob/custom-synthetic.dmi
index a82446462f..3525678125 100644
Binary files a/icons/mob/custom-synthetic.dmi and b/icons/mob/custom-synthetic.dmi differ
diff --git a/icons/mob/items_lefthand.dmi b/icons/mob/items_lefthand.dmi
index 53cf56309f..9d7c3845d9 100644
Binary files a/icons/mob/items_lefthand.dmi and b/icons/mob/items_lefthand.dmi differ
diff --git a/icons/mob/items_righthand.dmi b/icons/mob/items_righthand.dmi
index cae6ddf042..6155e0994c 100644
Binary files a/icons/mob/items_righthand.dmi and b/icons/mob/items_righthand.dmi differ
diff --git a/icons/obj/doors/DoorHazard.dmi b/icons/obj/doors/DoorHazard.dmi
index 037c1475f2..35f4c474bf 100644
Binary files a/icons/obj/doors/DoorHazard.dmi and b/icons/obj/doors/DoorHazard.dmi differ
diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm
index 485152df1a..4478171d36 100644
--- a/maps/exodus-1.dmm
+++ b/maps/exodus-1.dmm
@@ -645,7 +645,7 @@
"amu" = (/obj/machinery/door/airlock/engineering{name = "Security Substation"; req_access_txt = "0"; req_one_access_txt = "11;24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/substation/security)
"amv" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/machinery/power/sensor{name = "Powernet Sensor - Security Subgrid"; name_tag = "Security Subgrid"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/structure/cable/green,/turf/simulated/floor/plating,/area/maintenance/substation/security)
"amw" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/substation/security)
-"amx" = (/turf/simulated/floor/plating,/area/space)
+"amx" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/space)
"amy" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/glass_security{name = "Security Lobby"; req_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/fore)
"amz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/hallway/primary/fore)
"amA" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/camera{c_tag = "Brig Toxin Control"; dir = 4; network = list("SS13")},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 10},/area/security/brig)
@@ -763,7 +763,7 @@
"aoI" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoJ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/maintenance/dormitory)
"aoK" = (/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"aoL" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
+"aoL" = (/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
"aoM" = (/obj/machinery/door/blast/regular{id = "Cell 2"; name = "Cell Door"},/turf/simulated/floor,/area/security/prison)
"aoN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison)
"aoO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Secure Gate"; name = "Security Blast Door"; opacity = 0},/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/turf/simulated/floor/plating,/area/security/prison)
@@ -854,7 +854,7 @@
"aqv" = (/obj/structure/table,/obj/item/weapon/dice,/turf/simulated/floor/wood,/area/maintenance/dormitory)
"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" = (/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 5},/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)
"aqz" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"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)
@@ -923,7 +923,7 @@
"arM" = (/obj/structure/stool/bed/chair/wood/wings{icon_state = "wooden_chair_wings"; dir = 1},/turf/simulated/floor/wood,/area/maintenance/dormitory)
"arN" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/wood,/area/maintenance/dormitory)
"arO" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "dorm_inner"; locked = 1; name = "Dormitory Internal Access"; req_access = null; req_access_txt = "13"},/obj/machinery/atmospherics/pipe/simple/visible,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/maintenance/dormitory)
-"arP" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "arrivals_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/turf/simulated/floor/plating,/area/space)
+"arP" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "dorm_airlock"; name = "exterior access button"; pixel_x = -25; pixel_y = -25; req_access_txt = "13"},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating/airless,/area/maintenance/dormitory)
"arQ" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating,/area/maintenance/evahallway)
"arR" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/security/brig)
"arS" = (/obj/machinery/door/airlock/glass_security{name = "Solitary Confinement 1"; req_access_txt = "2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/security/brig)
@@ -5174,7 +5174,7 @@
"bVz" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/engine/vacuum,/area/rnd/mixing)
"bVA" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor{icon_state = "bot"},/area/rnd/research)
"bVB" = (/obj/machinery/atmospherics/pipe/simple/hidden{tag = "icon-intact (EAST)"; icon_state = "intact"; dir = 4},/turf/simulated/wall/r_wall,/area/rnd/mixing)
-"bVC" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/binary/pump/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/engine,/area/rnd/mixing)
+"bVC" = (/obj/machinery/airlock_sensor{id_tag = "tox_airlock_sensor"; master_tag = "tox_airlock_control"; pixel_y = 24},/obj/machinery/light/small{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 4},/turf/simulated/floor/engine,/area/rnd/mixing)
"bVD" = (/obj/machinery/meter,/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "tox_airlock_pump"; tag_exterior_door = "tox_airlock_exterior"; id_tag = "tox_airlock_control"; tag_interior_door = "tox_airlock_interior"; pixel_x = -24; pixel_y = 0; tag_chamber_sensor = "tox_airlock_sensor"},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "warnwhitecorner"},/area/rnd/mixing)
"bVE" = (/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
"bVF" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 5; icon_state = "warning"},/area/rnd/mixing)
@@ -5325,7 +5325,7 @@
"bYu" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bYv" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/rnd/research)
"bYw" = (/obj/machinery/door/firedoor/border_only{dir = 4; name = "Firelock East"},/obj/machinery/door/window/eastright{dir = 8; name = "Chemistry Desk"; req_access_txt = "33"},/obj/machinery/door/blast/shutters{density = 0; dir = 4; icon_state = "shutter0"; id = "chemcounter"; name = "Pharmacy Counter Shutters"; opacity = 0},/obj/structure/table/reinforced,/turf/simulated/floor{icon_state = "yellowfull"; dir = 8},/area/medical/chemistry)
-"bYx" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/binary/pump/on{dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/turf/simulated/floor/engine,/area/rnd/mixing)
+"bYx" = (/obj/structure/sign/fire{pixel_y = -32},/obj/machinery/atmospherics/pipe/simple/hidden/cyan,/obj/machinery/atmospherics/binary/pump{dir = 8},/turf/simulated/floor/engine,/area/rnd/mixing)
"bYy" = (/obj/machinery/meter,/obj/machinery/door_control{id = "mixvent"; name = "Mixing Room Vent Control"; pixel_x = -25; pixel_y = 5; req_access_txt = "7"},/obj/machinery/ignition_switch{id = "mixingsparker"; pixel_x = -25; pixel_y = -5},/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warnwhitecorner"},/area/rnd/mixing)
"bYz" = (/obj/machinery/atmospherics/valve{dir = 4},/obj/machinery/light,/obj/structure/extinguisher_cabinet{pixel_x = 0; pixel_y = -29},/turf/simulated/floor{dir = 4; icon_state = "warnwhite"},/area/rnd/mixing)
"bYA" = (/obj/machinery/atmospherics/portables_connector{dir = 8},/turf/simulated/floor{dir = 6; icon_state = "warning"},/area/rnd/mixing)
@@ -5467,12 +5467,12 @@
"cbg" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cbh" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/research_starboard)
"cbi" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless,/area/engine/engine_eva_maintenance)
-"cbj" = (/obj/machinery/airlock_sensor{command = "cycle_exterior"; frequency = 1379; id_tag = "eng_eva_ext_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/engine/engine_eva_maintenance)
+"cbj" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "eng_eva_airlock"; name = "exterior access button"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/engine/engine_eva_maintenance)
"cbk" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_outer"; locked = 1; name = "Engineering EVA External Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/airless{icon_state = "circuit"},/area/engine/engine_eva_maintenance)
"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/engine/engine_eva_maintenance)
"cbm" = (/obj/machinery/embedded_controller/radio/airlock/airlock_controller{tag_airpump = "eng_eva_pump"; tag_exterior_door = "eng_eva_outer"; frequency = 1379; id_tag = "eng_eva_airlock"; tag_interior_door = "eng_eva_inner"; name = "Engineering Airlock Console"; pixel_y = 25; req_access_txt = "13"; tag_chamber_sensor = "eng_eva_sensor"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"; tag = "icon-manifold-f (EAST)"},/turf/simulated/floor{dir = 5; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance)
"cbn" = (/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "eng_eva_inner"; locked = 1; name = "Engineering EVA Internal Access"; req_access = null; req_access_txt = "13"},/turf/simulated/floor/plating,/area/engine/engine_eva_maintenance)
-"cbo" = (/obj/machinery/airlock_sensor{command = "cycle_interior"; frequency = 1379; id_tag = "eng_eva_int_sensor"; master_tag = "eng_eva_airlock"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance)
+"cbo" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "eng_eva_airlock"; name = "interior access button"; pixel_x = 0; pixel_y = 25; req_access_txt = "13"},/turf/simulated/floor{dir = 8; icon_state = "floorgrimecaution"},/area/engine/engine_eva_maintenance)
"cbp" = (/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/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance)
"cbq" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/engine/engine_eva_maintenance)
"cbr" = (/obj/structure/closet/secure_closet/engineering_chief{req_access_txt = "0"},/obj/item/weapon/tank/emergency_oxygen/engi,/turf/simulated/floor,/area/crew_quarters/heads/chief)
@@ -6123,8 +6123,8 @@
"cnM" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/hallway/primary/aft)
"cnN" = (/obj/structure/disposalpipe/segment,/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/hallway/primary/aft)
"cnO" = (/turf/simulated/wall/r_wall,/area/engine/workshop)
-"cnP" = (/obj/machinery/atmospherics/binary/pump{dir = 1; icon_state = "map_on"; use_power = 1},/turf/simulated/floor,/area/atmos)
-"cnQ" = (/obj/machinery/atmospherics/binary/pump{icon_state = "map_on"; use_power = 1},/turf/simulated/floor,/area/atmos)
+"cnP" = (/obj/machinery/atmospherics/binary/pump/on{dir = 1},/turf/simulated/floor,/area/atmos)
+"cnQ" = (/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor,/area/atmos)
"cnR" = (/turf/simulated/wall/r_wall,/area/engine/storage_hard)
"cnS" = (/obj/effect/decal/cleanable/dirt,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating{dir = 4; icon_state = "warnplatecorner"},/area/maintenance/engineering)
"cnT" = (/obj/structure/table,/obj/item/weapon/hemostat,/obj/machinery/light,/obj/item/weapon/cautery,/turf/simulated/floor{icon_state = "white"},/area/medical/surgery)
@@ -6790,6 +6790,7 @@
"cAD" = (/obj/machinery/portable_atmospherics/canister/nitrogen,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cAE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
"cAF" = (/obj/machinery/portable_atmospherics/canister/carbon_dioxide,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
+"cAG" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 10; pixel_y = -22},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/binary/pump,/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cAH" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/plating,/area/atmos)
"cAI" = (/turf/simulated/wall/r_wall,/area/engine/hallway)
"cAJ" = (/obj/machinery/door/firedoor/border_only{dir = 1; name = "Engineering Firelock"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering Hallway"; req_one_access_txt = "10;24"},/turf/simulated/floor,/area/engine/hallway)
@@ -6831,6 +6832,7 @@
"cBt" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/purple{tag = "icon-intact (NORTH)"; icon_state = "intact"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/atmos)
"cBu" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos)
"cBv" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/atmospherics/pipe/simple/visible/green,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/atmos)
+"cBw" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cBz" = (/obj/machinery/atmospherics/pipe/manifold/visible/purple,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/engine/engine_room)
"cBA" = (/obj/machinery/atmospherics/pipe/simple/visible/yellow{dir = 4},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/engine/engine_room)
"cBB" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/atmos)
@@ -6894,8 +6896,6 @@
"cCR" = (/obj/machinery/atmospherics/valve,/turf/simulated/floor/plating,/area/maintenance/engineering)
"cCS" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"; tag = "icon-intact-f (SOUTHEAST)"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/engineering)
"cCT" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/maintenance/engineering)
-"cCU" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; layer = 3.1; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = 10; pixel_y = -22},/obj/structure/sign/fire{pixel_x = -32; pixel_y = 0},/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/binary/pump/on,/turf/simulated/floor/plating,/area/maintenance/incinerator)
-"cCV" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "incinerator_access_control"; name = "Incinerator airlock control"; pixel_x = -8; pixel_y = 24},/obj/structure/sign/fire{pixel_x = 32; pixel_y = 0},/obj/machinery/atmospherics/binary/pump/on{dir = 1},/turf/simulated/floor/plating,/area/maintenance/incinerator)
"cCW" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating/airless,/area/space)
"cCX" = (/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
"cCY" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "virology_airlock"; name = "exterior access button"; pixel_x = 20; pixel_y = 20; req_access_txt = "13"},/turf/simulated/floor/plating/airless,/area/maintenance/medbay)
@@ -7312,15 +7312,15 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfagBafYajFafYajGajHajIajJajKajLajMajNajOajPajQajRajSajTajUajVajWajXajUajYajWajWajZakaakaakbakcakdahOakeakfakgajzakhakiakjakkaklakmaknakoakpalaakZakqabOaaaaaaaaaaaaaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaIaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzaaaahzahzahzahzahzahzahzahzahzaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaamaamaaIaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWagWagWagWagWagWaksaktakuakvakwakxakyakzakAakBakCakDakEakFakwakGakwakwakHakIakJakKakLakMakNakOakPakJakQakRakSakTakUakVakWakXakYakoalIabbamsalbactaaaaaaaaaaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaafaaaaaqaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWalcaldalealfagWalgalhahLalialjagWacTacuacTagWabValnabUagWalpalqalralsagDaltalualvalwalxagWabTabSabSabRagWalBalCalDalEalFalGalHakoamtanQamuanQanQaaaaaaaafaafaaaaaaaaaaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabQaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabPalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaamxaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTaoWamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafamxaafaafamxaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQantaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafamxaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiaojaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoKaoLaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafabMaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafabfadEabPalMalMalNalOalPalQalRahKalSaljagWalTalUalValWalXalYalZamaahKambahKamcamdameameamfamgamhamiamjamkamlammakoamnamoampamqalDalDamrakoadQanQamvawKamwaaaaaaaaLaaaaaaaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaaIaaIaaIaaIaaaaaaaaaabpaaaaaaaaaaaIaaIaamaamaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaamaamaaIaaIaaaaaaaaaaoXaaaaaaaaaaaIaaIaamaamaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfadEagWamAamBamCamDagWamEalRaljamFamGagWamHamIamJalWamKamLamMamNamOamPamQamRamSamgamgamfamgamTaoWamVamWamXamYakoamZanaalDamqalDalDanbakoancandaneanfangaafaaLaafaafaaLaafaafaafakrakranhakrakraaaaaaaaaaaaaaaaaaaaqaaaaaaaafaafaafaaaaaaaoYaafaafaaaaafaafaaaaaaaamaaaaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaafaafaaaaaaaaaaoVaafaafaaaaafaafaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfankagWagWagWagWanlanmannanoanmanmanmanmanpaoPanpanraoQantaoRanvaoSaoTaoUanzanAamgamgamfanBanCamianDanEamXanFanGanHanIanJanKanLanManNanGanOanPawLanRanSaaaaaaaafaaaaafaaLaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanXanYanZaoaagDaobaocagWaodaoealKaogaohaoiaojaokaolaomaonaooaonaopaoqaoraonaoOaotamgamgaouaovaowamiaoxanEamXaoyanGaozaoAaoBaoCaoDaoEaoFanGaoGanQanQanQanQaoIaoJaoHaoLarPaaaaafaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaaaaaaaacaaaaaaaaaanXanXapaapbagDalMapcapdapeapfaofaphapiaoMaonaonapkaplaonapmapnaoraonapoaonaoNapqapramgamfamgamTaosamYanEamXaptanGapuapvapwapxapyapzapAanGapBaoHapCapDapEapFapGaoHaoHapHaoHaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaahzahzahzahzaaaaaaahzahzahzahzahzahzahzaaaaaaahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaapKapaapbagDapLapMagWalgapNalKapOapPapQapRaokapSanWapUapVapWapXapYapZaqaanUaqcaqdaovaqeaovaqfaqgaqhaqiaqjaqkanGaqlaqmapyaqnaqoaqpaqoaqqaqraqsapFaqtaquapFaqvaoHaqwaqxaqyaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaafalkaaaaaaaaaaafaaaaaaaaaaaqaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaqzaqAaqBagDagWagWagWaqCalRagWalWalWalWaqDaqEapkaqFaqGaqHaonaqIaqJaqKaqLanyaqNaqOaqPaqQaqRaqSanxaqUaqVaqWamVanGaqXaqYaqZaraarbarcardanGarearfapFaqtaqtapFargaoHarhariarjaoHaaaakrakrakrakrakraaaaaaaaaaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarkaqBagDaobarlagWarmarnalKaogaroaoiaokarparqarrarsartaonarualWarvarwarxalLarzarAamUamzamyarEarFarGarHamjanGanGarIanGanGanGanGanGanGarJarKarLarMarMapFarNaoHaoHarOaoHaoHaaaaaaakrakrakraaaaaaaaaaaaaaaaaaaaaaaIaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamxarPamxaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarQaqBagDarRapcarSarTarUaefapharWaloaonaonarYarZasaasbaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslasmasnasoasoaspaspasqasrassastastasuasvasvaswasxasyaszaqsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaLamxaaLaaaaaaaaaaaaaaaaaaaaaaaIaafalzalyalyalyalyalAalkallaivaivaivaivagEaafaaIaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaqzarQaqBagDarRapcarSarTarUaefapharWaloaonaonarYarZasaasbaonascalWasdasealmasgasharAasiasjaskarEaoHaoHaoHaoHaoHaslasmasnasoasoaspaspasqasrassastastasuasvasvaswasxasyaszaqsaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaafapIapIapIapIapIaafalJaafapIapIapIapIapIaafaaIaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafasAasBasAaaaaaaaaaaaaaaaaaaaaaaaIaafapJapJapJapJapJaafalkaafapJapJapJapJapJaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasCarQapbagDapLapMagWasDasEalKapOasFaoiasGasGasHasIaonasJaonasKalWasLasMbgMasOasParAasQasRasSarEasTasUasUasVasWasVasXasYasZasZasZasZasZasZasZasZasZasmataatbatcaoKatdateatfaafatgathathatiathathatjaafaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalJaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatkatlatmaaaatnatoatpaaaaafatqatratqaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaaaafaaaaaaaaaalkaaaaaaaaaaafaaaaaaaaaaamaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaanXatsattagDagDagDagWagWagWagWalWalWalWalWalWatuaonaoratvaqEatwalWalWalWatxatxatxarAatyatzatAarEatBasZasZasZasZatCatDatEatFatGatHatIatJatKatLatMatNatOatPatPatPatPatPatPatPatPatQatRatRatRatRatRatQatPaaaaaaaaaaaIaafanTanTanTanTanTaafalJaafanTanTanTanTanTaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaahzahzahzahzahzaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatSatTatUatTatSatVatWatVatSaafatqatXatYaaaaaaaaaaaaaaaaaaaaaaaIaafanVanVanVanVanVaafalkaafanVanVanVanVanVaafaaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafatZauaanYaubaucanXaafaafalWaudaueaufaugauhauiaonapnaonasJaqEaujaukaulaumaunauoauparAauqaurausarEatBasZauuaySauvatCauxauyatFatGauzauAauBauCauDatMatNauEauFauGauHauIauJauwauLatPauMatRatRatRatRatRatQatPaafaaaaaaaamaafanianjanjanjanjanualJansanqanqanqanqanwaafaaIaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -7405,7 +7405,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaafaaaaaaaaacptcpucymcpucpucpucyocpucpucpucyocpucpucpucpucpucrRcpucywcpucyncvpcpucpucylcykcuhcyjcoCctdcoCcoCcpucyiczBcxCcyGcoQcxDcoQcnOckYczEczFczGczHcoXcnOczIczJczJczKczLczMczNczOcvNcxNczPczQcxNczRczSczTcvNczUczVcrGaaaaaaaaaaaaaaaaaacqvczWcuMczXcuVczYczZcAactFcAbcAccsPcyXczWcAdcAecqvaaaaaaaaaaaackEcdOcAfcAgcAgcAhcAicAjcAkcAlcAmcAncAocApcAqcokcAraaaaaacrPaafcwjcwjcwjcwjcwjaaackxaafcwjcwjcwjcwjcwjaaacrPaaacyhaaaaaacyhaaaaaacyhcyhcyhcyhcyhcyhcyhaaaaaacyhaaaaaacyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaamaaaaaaaaacyxcpucymcpucqKcqMcyucqMcuacqMcyucqMcuacqMcqMcqMcyqcytcyqcyscyrcuhcyBcyCcACcADcAEcAFcoCclacnzcoCcoCcoCcoCcoCcAIcAJcAKcAJcnOcnOcnOcnOcnOcnOcnOcnOcALczJczJcAMcANcAObPxcAPcvNcAQcARcAScATcAUcAVcAWcvNcAXcAYcrGaaaaaaaaaaaaaaaaaacqvcuQcAZcAectFcBacBbcBcctFcBdcBecBfcBgcBhcBicBjcqvaafaafaaaaaaaaaaaabquaaacdOcBlcBmcBncBocBpcBmcBqcBrcBpcBmcBscdOaaaaaabZSaaaaafaaaaafaaaaafaaackxaaaaafaaaaafaafaafaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIvaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabZSaaaaaaaaaaaaaamaaaaaaaaacyDcpucymcpucywcwscymcpucywcwscymcpucywcwscpucpucyvcpucywcwscyEczfczhczecBBcBCcBDcBEcoCcyFcBGcvqcBIcBJcBKcBLcBMcBKcBNcBKcBOcBPcBQcBRcBScBScBTcBUcBVcBWcBWcBXcBYcAObPxcBZcvNcvNcCacCbcCccCbcCacCdcvNcrGcCecrGaaaaaaaaaaaaaaaaaacqvctFcCfcuVctFcCgcChcCictFcCjcCkcqycgvcCmcCncCocrHaaaaaaaaaaaaaaaaaacgwaafcdOcCqcluclUcomclsclpclqcomcloclVclWcdOaaaaaacrPaaactXctXctXctXctXaafckxaafctXctXctXctXctXaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacCUcAVcCVcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaafaafaamaafaafaafcyDczwczAczyczgczsczqczpczkcznczmczlczoczscpuczwczvczuczrczncztcoCcoCcoCcCzcCzcCzcCzcCzcvrcCzcCBcCCcCDcCEcCFcCEcCEcCGcCEcCEcCHcCEcCDcCIcCJcCKcCLciCcCNcCOcCPcCQcAObPwcCRcCScCTcCacAGcAVcBwcCacCWaafcCXcCYcCXaaaaaaaaaaaaaaaaaacqvcCZctDcuQcDacDbcuQcDccDdcDeaafaaachxchFchEclXaaaaaaaaaaacaaaaaaaaaaaaaaacdOcDhcplcplcomcDicplcplcomcDicplcplcdOaafaafcrPaafckVckSckSckSckSckyckxckwckvckvckvckvckUaafcrPaaacyhcyhcyhcyhaaacyhcyhcyhcyhcyhcyhcyhcyhcyhaaacyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcpFaaaaaaaaaaamaaaaaaaaacAzcAvcAwcAxcAycABcAAcAHcAycABcAAcAHcAycABcBucBucBvcAHcAycABcBtcoCaaacDvcDwcDxcDycDzcDAcAucDCcDDcDDcDEcDFcDGcDHcDIcDJcDHcDIcDGcDKcDLcDMcDKcCBcCBcAOcDNcDOcDPcDQcAObNUcDRcDScDTcCacCbcDUcCbcCacCWaafaaaaafaaaaaaaaaaaaaaaaaaaaacqvcCZcDVcDWcDXcDXcDWcsPcDYcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcDZcplcplcomcEacplcplcomcEacplcplcdOaaaaaacrPaafcwjcwjcwjcwjcwjaaackxaaacwjcwjcwjcwjcwjaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPcClcqLcqLcqLcpEcpIcpIcpIcqLcpIcpPcpIcpGcpIcpPcpIcpGcpIcpPcpIcpGcpIcqLcpIcpRcpIcpGcpIcqNaafaaacEicEjcEkcElcEmcEncAucEocDDcEpcEqcErcEscEtcEucEvcEwcExcEscEycEzcEAcDKaaaaafcAOcEBcECcEDaafaaabNUbPxbPxbSkcCaclZcEFclYcCacCWaafaafaaaaaaaaaaaaaaaaaaaaaaaacqvcEHcuXcEIcEJcEJcEIcuQcEKcqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacdOcplcplcplcomcELcplcplcomcELcplcplcdOaacaaacrPaaaaaaaafaafaafaaaaaacmTaafaaaaaaaafaafaaaaaacrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactYctYctYctYctYctYctYctYctYctYctYctYctYctYctYaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacrPaafaafaaaaaaaaqaaaaaaaaaaafcgRcCpcmtcmvcgRcCpcmtcmvcgRcCpcmtcmxcgRaaacgRcmycmtcmxcgRaaaaafaaacEicEQcERcEScEQcCAcDBcEUcDDcEVcEWcEXcEscEYcEZcFacFbcFccEscFdcFecFfcDKaaaaaacAOcFgcFhcFiaaaaaabNUbPxbPxbNUcCacmUcmUcmUcCacFkcmWaaaaaaaaaaaaaaaaaaaaaaaaaaacqvcFmcFncuQcuQcuQcuQcuQcFocqvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaackEcdOcdOcdOcdOcdOcdOcdOcdOcmYcmYcmYckEaaaaaacrPcrPcrPcrPcrPaaaaaaaaacmZaaaaaaaaacrPcrPcrPbZScrPaaacyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhcyhaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-2.dmm b/maps/exodus-2.dmm
index a9301e064d..2903dec322 100644
--- a/maps/exodus-2.dmm
+++ b/maps/exodus-2.dmm
@@ -1198,7 +1198,7 @@
"xb" = (/obj/structure/table/reinforced,/obj/item/weapon/gun/energy/gun/nuclear,/obj/item/weapon/hand_tele,/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"xc" = (/obj/machinery/door/airlock/centcom{name = "Armory Special Operations"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
"xd" = (/obj/machinery/door/airlock/centcom{name = "Engineering Special Operations"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 8},/area/centcom)
-"xe" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; use_power = 0; req_one_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
+"xe" = (/obj/machinery/porta_turret{anchored = 0; check_records = 0; on = 0; req_one_access = list(103); req_one_access_txt = "103"; use_power = 0},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"xf" = (/turf/unsimulated/floor{icon_state = "bot"},/area/centcom/specops)
"xg" = (/obj/machinery/door/airlock/centcom{name = "Special Operations"; opacity = 1; req_access_txt = "103"},/turf/unsimulated/floor{icon_state = "delivery"},/area/centcom/specops)
"xh" = (/obj/machinery/door/airlock/centcom{name = "Bridge"; opacity = 1; req_access_txt = "109"},/turf/unsimulated/floor{icon_state = "floor"},/area/centcom/control)
@@ -1927,7 +1927,6 @@
"Lc" = (/turf/space,/turf/simulated/shuttle/wall{dir = 4; icon_state = "diagonalWall3"},/area/shuttle/vox/station)
"Ld" = (/obj/structure/shuttle/engine/propulsion,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/shuttle/vox/station)
"Le" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/blast/regular{dir = 2; id = "skipjack"; name = "Skipjack Blast Shielding"},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
-"Lf" = (/obj/machinery/porta_turret{anchored = 1; check_records = 0; use_power = 0; req_one_access_txt = "103"},/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"Lg" = (/obj/structure/table/rack,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/mounted/taser,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/maneuvering_jets,/obj/item/rig_module/grenade_launcher,/obj/item/rig_module/device/drill,/obj/item/rig_module/device/healthscanner,/obj/item/rig_module/device/plasmacutter,/obj/item/rig_module/device/rcd,/obj/item/rig_module/chem_dispenser/combat,/obj/item/rig_module/chem_dispenser/injector,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom)
"Lh" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
"Li" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/shuttle/plating/vox,/area/shuttle/vox/station)
@@ -1947,7 +1946,7 @@
"Lw" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 0; req_access = null; req_access_txt = "150"},/obj/item/weapon/surgicaldrill,/obj/item/clothing/gloves/latex,/obj/item/clothing/mask/surgical,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/obj/item/weapon/reagent_containers/syringe,/turf/simulated/shuttle/wall{icon_state = "wall3"},/area/syndicate_station/start)
"Lx" = (/obj/structure/sign/nosmoking_2{pixel_x = 32},/turf/simulated/shuttle/floor{icon_state = "floor6"},/area/syndicate_station/start)
"Ly" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/box/handcuffs,/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/sunglasses/sechud{pixel_y = 3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night{pixel_x = -1; pixel_y = -3},/obj/item/clothing/glasses/night,/obj/item/weapon/storage/box/handcuffs,/turf/unsimulated/floor{icon_state = "vault"; dir = 1},/area/centcom/specops)
-
+
(1,1,1) = {"
aaabacadaeafagahaaaiajakalamanaoagafajacadahakaeamaiaoapaqarasatauavawaxayazaAaBaCaDaEaFaGaHaIaJaKawaxayazaAaBaCaDaEaFaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaNaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaPaOaOaOaOaOaQ
ajaRaSaTaUaVaWaXaYaZbabbbcbdbebfaWaVbaaSaTaXbbaUbdaZabatauavbgbhbibjaAbkblbmapaqarasatauavbgbhbibjbnbkblbmapaqarasataJaLaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMbobpbpbpbpbpbrbsbtbsbtbsbrbubqbqbqbqbrbwbwbwbwbwbrbxbxbxbxbxbraMaMaMaMaMbrbybzbzbzbAbB
@@ -2090,7 +2089,7 @@ aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNxlxmvMxnoNvPuhwkoNtZxqtZxrtZxsxtxttZxutvxvxwxwxxxyxzxAtvxBxBxBtvufufvBxCxDwNxEufxFwRxGxCvDufufxjurururururxjurururururururxjwwwwwwwwwwtxuOuOtxtxtxtxtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMwVoVoVoVoVoVoVoVoVoVoVoVoVoVxHoUoVoVoVqVxHxIxJvMwnxKuhtZtZxLtZxMtZwmwmxNxNwmwmxutvxOxOxOxPxQxPxRtvtvtvtvtvufufvVwLxSufxiufxiufxSwLueufuftxxTxUxUxUxVtxtxxWtxtxtxuOtxtxtxxXxXxXtxtxurururxYurxZtxaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMxkoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNoNLgyaoNoNoNoNoNyboNycwmydyeyfygwmxutvtvyhyiyjykylymyhaMaMaMtxufufvVtxtxynyoufypyqtxtxueufuftxaMaMaMaMaMtxyrystxuNytuNuNyuyvywywywyxtxururuQuQururyyaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmumumumumuaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
-aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNLfwmydyfyfygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
+aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNoNoNoNyzyAxowDtZoNxewmydyfyfygwmxpyEyFyhyGyHyIyByKyhaMaMaMtxufufvVtxtxvlvmvmvmvotxtxueufuftxaMaMaMaMaMtxysystxyLyLyLuNyuywywywywyMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzitZtZtZtZtZtZoNxetZtZwqwqwmwmwmwmyRyhySyIyIyIyIyhaMaMaMtxufufwKyTyTyTyTyTyTyTyTyTwTufuftxaMaMaMaMaMtxyUystxyLyVyLuNyuyuyuyuyuyutxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNyQtZtZtZtZtZyWoNyXtZtZyYtZtZwCvdyJzcyhyIyIyIyIzdyhtxtxtxtxtxtxzetxtxufufufufuftxtxtxtxtxtxaMaMaMaMaMtxzfystxvFuNuNuNyuaMaMaMaMaMtxuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMmtaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaM
aMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMoNzgzgzhyDyZzkzloNyXzmzmoNznznoNoNoNoNyhyIzozpzqzryhzsztztzszuzvufzwtxtxtxzxtxtxdCaMaMaMaMaMaMaMaMaMaMtxtxtxtxtxtxtxtxyuaMaMaMaMaMzyuryNuPuPyOuryPaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMaMzzmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtwgmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmt
diff --git a/maps/exodus-3.dmm b/maps/exodus-3.dmm
index e88029d54a..ad3f736587 100644
--- a/maps/exodus-3.dmm
+++ b/maps/exodus-3.dmm
@@ -101,7 +101,7 @@
"bW" = (/obj/structure/table,/obj/item/weapon/screwdriver,/obj/machinery/light,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bX" = (/obj/structure/table,/obj/item/device/radio/off,/turf/simulated/shuttle/floor{icon_state = "floor3"},/area/derelict/ship)
"bY" = (/obj/structure/lattice,/obj/structure/grille,/turf/space,/area/space)
-"bZ" = (/obj/machinery/power/solar/fake,/turf/simulated/floor{icon_state = "solarpanel"},/area/space)
+"bZ" = (/obj/machinery/power/solar/fake,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/space)
"ca" = (/turf/simulated/floor/plating/airless,/area/space)
"cb" = (/obj/structure/lattice,/obj/structure/grille{density = 0; icon_state = "brokengrille"},/turf/space,/area/space)
"cc" = (/obj/machinery/camera{c_tag = "North Solars"; dir = 8; network = list("Tcomsat")},/turf/space,/area/space)
diff --git a/maps/exodus-4.dmm b/maps/exodus-4.dmm
index 39e1ff0072..d0a2adf82a 100644
--- a/maps/exodus-4.dmm
+++ b/maps/exodus-4.dmm
@@ -33,11 +33,11 @@
"aG" = (/turf/space,/area/solar/constructionsite)
"aH" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/solar/constructionsite)
"aI" = (/obj/structure/grille,/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aJ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aJ" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aK" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aL" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/tracker,/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aL" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aM" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
-"aN" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"aN" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/power/tracker,/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"aO" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
"aP" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating/airless,/area/djstation/solars)
"aQ" = (/turf/simulated/wall,/area/djstation)
@@ -58,7 +58,7 @@
"bf" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation/solars)
"bg" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/djstation/solars)
"bh" = (/obj/machinery/door/airlock/engineering{name = "Construction Area"; req_access_txt = "32"},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/floor/plating,/area/djstation)
-"bi" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"bi" = (/obj/structure/cable,/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/djstation/solars)
"bk" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/djstation)
"bl" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/djstation)
@@ -86,7 +86,7 @@
"bH" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'EXTERNAL AIRLOCK'"; icon_state = "space"; layer = 4; name = "EXTERNAL AIRLOCK"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 4},/area/djstation)
"bI" = (/obj/machinery/door/blast/regular{id = "constructiondriver2"; name = "Construction Driver Door"},/turf/simulated/floor/plating,/area/djstation)
"bJ" = (/turf/simulated/floor/airless{tag = "icon-gcircuit"; icon_state = "gcircuit"},/area/constructionsite/ai)
-"bK" = (/obj/structure/cable,/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor{icon_state = "solarpanel"},/area/djstation/solars)
+"bK" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/solar{id = "construction_solar"; name = "Construction Solar Array"},/turf/simulated/floor/airless{icon_state = "solarpanel"},/area/djstation/solars)
"bL" = (/obj/item/weapon/extinguisher,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/djstation)
"bM" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/smes/buildable{charge = 2e+006},/turf/simulated/floor/plating,/area/djstation)
"bN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor/plating,/area/djstation)
@@ -403,16 +403,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabaaabaaabaaabacaeapapapapauauaoaoaoauauapapapapaeacabaaabaaabaaabanauauapaeacaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaEaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabaaabaaabababapaqapauauauauauaoaoaoauauauauauapaqapabababaaabaaabanaoauapaeacaFaEaFaEaFaEaFaEaFaFaEaEaEaFaFaFabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIaIaIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanababababababapapauauauaoaoaoaoaoaoaoaoaoaoauauauauapapababababababanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIaJaKaLaMaNaIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaIaJaOaJaPaNaIababaaaaaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaRapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaIaJaOaJaPaNaIabababaaaSaTaUaVaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaWaXaYaXaWapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaIaJaOaJaPaNaIababababaZbabbaVaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaWaXaYaXaWababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIaJaKaNaMaLaIabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacacacacapapauauauaoaoaoaoaoaoaoaoaoaoaoaoaoaoauauapapacacacacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababaIaJaOaJaPaLaIababaaaaaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeaeaqauauaoaoaoaoaoapapapaRapapapaoaoaoaoauauauaqaeaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababaIaJaOaJaPaLaIabababaaaSaTaUaVaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababacaeapaoaoanabacaeaeapapauauaoaoaoapapapaWaXaYaXaWapapapaoaoaoauauapapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababaIaJaOaJaPaLaIababababaZbabbaVaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaabaaabacaeapaoaoanabacaeaeapauauauaoaoapapababaWaXaYaXaWababapapaoaoaoauauapaeaeacabanauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaIaIaIaIaIbcbdbebcbfbgbcaIaIaIaIaQaQbhaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaababalabalalababalababalacaeapaoaoanabacaeaeapauaoaoaoapapabababaWaXaYaXaWabababapapauaoauauapaeaeacabanaoauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibibjbkblbmbnbobjbibibibiaQbpbqbrbsaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaWaWaWbtaWaWaWabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKbjbkblbmbnbobjbKbKbKbKaQbpbqbrbsaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababalababalalalalalalalalalalalacaeapaoaoapacacaeapapauaoaoaoapabababaWaWaWbtaWaWaWabababapauauaoauapapaeacacapauaoapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbubvbvbvbwbxaVbybzbAbwbBbBbBbCaQbpbDbEbFbGbHcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabalalalalalalalalalalalalalalalalalalacaeapaoaoapaeaeaeapauauaoaoapapababaWaWbJbJaXbJbJaWaWababapapauaoauauapaeaeaeapauauapaeacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKbcbLaVbMaVbNbcbKbKbKbKaQbObqaVbPaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibibcbLaVbMaVbNbcbibibibiaQbObqaVbPaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabavabababababavavavavavabalabalabalabalabalacacacacacacacacacacacaeapaoaoapaqapapapauauauauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauauapacacavavavababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbQbRbRbRbSbTbUbVaVbWbSbXbXbXaKaQbYbDbEbEbZbHcraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalabalalalalalalalalalalalalalaeaeaeaeaeaeaeaeaeaeaeaeapaoaoauauauauauauaoauauapaXaXaXaWbJbJaXaYaXbJbJaWaXaXaXapauauaoauauauauaoauauaoapaeaealalalalalalalalalalalalaaaaabaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbKbKbKbKcbcccdcecfcgcbbKbKbKbKaQchbqaVciaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcjaecjaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauauckaYaYaYclaXaXaXaYaXaXaXcmaYaYaYcnaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaIbibibibicbcccdcecfcgcbbibibibiaQchbqaVciaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababalalalalalababalalabalabalabalabalabalcjaecjaeaeaeaeaeaeaeaeaeapauauauauauauauaoauauauckaYaYaYclaXaXaXaYaXaXaXcmaYaYaYcnaoauaoaoaoaoaoaoauauauapaeaealalalalalalalalalabalabalabalalalabalaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQaQaQaQaQaQaQaQaQcoaQaQaQaQaQaQaQaQcpbDbEbEcqbHbIaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababalalalalalalalabalabalalalalalaeaeaecjaeaeaeaeaeaeaeaeapaoaoauaoaoaoaoaoaoaoaoapaXaXaXaWbJbJaXaYaXbJbJaWcscscsapauauaoauauauauauauaoaoapaeaealalalalalalalalalalalalalalalalabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabctcucvcwcwcxctcyczcAcBcCcDcEcFbEcEcDbEcGaVcHaQaQaQaQaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavavavabababababavavavavavavavavavavavacacacacacacacacacacacacapaoaoapcIapapapcJaucJauapaWaWaWaWaXbJaXaXaXbJaXaWaWaWaWapauauaoauapapapaqapauaoapacacavavavavavababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcKcucLcucucLcKcMcMcNcMcMaQaQaQaQaQaQcOcPbEcQcRcScTcUaQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababaccjcVcWcWcVaeaeaecVcXcXcXcXcVcVababaWaWbJbJaXbJbJaWaWababcVcVcXcXcXcXcVaeaeaecVcWcWcXaeacababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/maps/exodus-5.dmm b/maps/exodus-5.dmm
index 9fb4fa0d41..bb8c4fc319 100644
--- a/maps/exodus-5.dmm
+++ b/maps/exodus-5.dmm
@@ -21,6 +21,7 @@
"au" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral,/area/mine/unexplored)
"av" = (/obj/structure/transit_tube{icon_state = "E-SW"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"aw" = (/obj/structure/transit_tube,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/grille,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
+"ax" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"ay" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/research_outpost/hallway)
"az" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/hallway)
"aA" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/transit_tube,/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -142,7 +143,7 @@
"cM" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 8},/turf/simulated/floor/plating,/area/research_outpost/atmos)
"cN" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor,/area/research_outpost/atmos)
"cO" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor{icon_state = "bot"},/area/research_outpost/atmos)
-"cP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating,/area/mine/abandoned)
+"cP" = (/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard{icon_state = "small"},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"cQ" = (/obj/item/stack/rods,/obj/structure/door_assembly/door_assembly_ext{name = "Broken External Airlock"},/turf/simulated/floor,/area/mine/abandoned)
"cR" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned)
"cS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
@@ -165,7 +166,7 @@
"dj" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/light/small,/turf/simulated/floor,/area/research_outpost/atmos)
"dk" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 9},/area/shuttle/alien/mine)
"dl" = (/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 1},/area/shuttle/alien/mine)
-"dm" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 10},/area/shuttle/alien/mine)
+"dm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"dn" = (/obj/item/stack/rods,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"do" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"dp" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SE"},/turf/space,/area/space)
@@ -225,7 +226,7 @@
"er" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"es" = (/turf/simulated/mineral,/area/mine/explored)
"et" = (/turf/space,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 5},/area/shuttle/alien/mine)
-"eu" = (/turf/simulated/floor/plating,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 6},/area/shuttle/alien/mine)
+"eu" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 10},/area/shuttle/alien/mine)
"ev" = (/obj/item/weapon/shard,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"ew" = (/turf/simulated/wall,/area/mine/abandoned)
"ex" = (/turf/space,/area/shuttle/research/outpost)
@@ -251,7 +252,7 @@
"eR" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/turf/simulated/floor{dir = 4; icon_state = "whiteyellow"},/area/research_outpost/hallway)
"eS" = (/turf/simulated/wall/r_wall,/area/research_outpost/power)
"eT" = (/obj/machinery/door/airlock/glass_atmos{name = "Outpost Atmospherics"; req_access_txt = "0"; req_one_access_txt = "65;10;24"},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor/plating,/area/research_outpost/power)
-"eU" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating,/area/mine/abandoned)
+"eU" = (/obj/item/stack/rods,/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"eV" = (/obj/item/stack/rods,/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"eW" = (/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"eX" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -281,7 +282,7 @@
"fv" = (/obj/machinery/light/small{dir = 8},/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"fw" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"fx" = (/obj/structure/lattice,/obj/item/weapon/shard{icon_state = "medium"},/turf/space,/area/space)
-"fy" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/mine/abandoned)
+"fy" = (/turf/simulated/floor/plating/airless,/turf/simulated/shuttle/wall{icon_state = "pwall"; dir = 6},/area/shuttle/alien/mine)
"fz" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"fA" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"fB" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/hallway)
@@ -498,9 +499,9 @@
"jE" = (/turf/simulated/floor/airless,/area/mine/abandoned)
"jF" = (/obj/effect/alien/weeds,/turf/simulated/floor,/area/mine/abandoned)
"jG" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
-"jH" = (/obj/structure/table,/turf/simulated/floor,/area/mine/abandoned)
-"jI" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/mine/abandoned)
-"jJ" = (/obj/structure/table/rack,/turf/simulated/floor,/area/mine/abandoned)
+"jH" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"jI" = (/obj/structure/table/rack,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
+"jJ" = (/obj/structure/table/rack,/turf/simulated/floor/airless,/area/mine/abandoned)
"jK" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/transit_tube{icon_state = "D-NE"},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/research_outpost/entry)
"jL" = (/obj/structure/transit_tube{icon_state = "S-NW"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/research_outpost/entry)
"jM" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/research_outpost/entry)
@@ -612,15 +613,15 @@
"lO" = (/obj/machinery/alarm{dir = 1; pixel_y = -24},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/turf/simulated/floor{icon_state = "vault"; dir = 8},/area/research_outpost/harvesting)
"lP" = (/obj/machinery/artifact_scanpad,/obj/machinery/light/small,/turf/simulated/floor/bluegrid,/area/research_outpost/harvesting)
"lQ" = (/obj/machinery/portable_atmospherics/hydroponics{closed_system = 1; name = "isolation tray"},/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned)
-"lR" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched2"},/area/mine/abandoned)
-"lS" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lT" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lU" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lW" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
-"lX" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/mine/abandoned)
+"lR" = (/obj/item/weapon/table_parts,/turf/simulated/floor/airless,/area/mine/abandoned)
+"lS" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
+"lT" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
+"lU" = (/obj/structure/transit_tube,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
+"lV" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/explored)
+"lW" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
+"lX" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
"lY" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor,/area/mine/abandoned)
-"lZ" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
+"lZ" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless,/area/mine/abandoned)
"ma" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mb" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mc" = (/obj/structure/transit_tube{icon_state = "E-NW"},/obj/structure/lattice,/turf/space,/area/space)
@@ -662,7 +663,7 @@
"mM" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"mN" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"mO" = (/obj/effect/decal/remains/xeno,/turf/simulated/floor,/area/mine/abandoned)
-"mP" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
+"mP" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless,/area/mine/abandoned)
"mQ" = (/obj/structure/ore_box,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"mR" = (/turf/simulated/wall,/area/mine/explored)
"mS" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/wall,/area/mine/explored)
@@ -698,13 +699,13 @@
"nw" = (/obj/structure/transit_tube{icon_state = "W-NE"},/obj/structure/lattice,/turf/space,/area/space)
"nx" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/space,/area/space)
"ny" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor{icon_state = "dark"},/area/mine/abandoned)
-"nz" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned)
+"nz" = (/obj/effect/decal/remains/human,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"nA" = (/obj/effect/gibspawner/human,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"nB" = (/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned)
"nC" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"nD" = (/obj/machinery/light_construct/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"nE" = (/obj/machinery/door/window/westleft,/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"nF" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"nF" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"nG" = (/obj/structure/window/reinforced{dir = 8},/obj/structure/lattice,/turf/space,/area/space)
"nH" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/turf/simulated/floor,/area/research_outpost/gearstore)
"nI" = (/obj/machinery/door/airlock/glass_mining{name = "Equipment storage"; req_access_txt = "65"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -732,14 +733,14 @@
"oe" = (/turf/simulated/floor{tag = "icon-vault (NORTH)"; icon_state = "vault"; dir = 1},/area/research_outpost/longtermstorage)
"of" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"og" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"oh" = (/obj/effect/decal/remains/human,/turf/simulated/floor{icon_state = "green"; dir = 8},/area/mine/abandoned)
+"oh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"oi" = (/obj/effect/alien/resin,/turf/simulated/floor/airless{icon_state = "floorgrime"},/area/mine/abandoned)
"oj" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/abandoned)
"ok" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
-"ol" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
+"ol" = (/obj/effect/alien/weeds,/turf/simulated/floor/airless{icon_state = "damaged4"},/area/mine/abandoned)
"om" = (/obj/structure/ore_box,/obj/machinery/light_construct/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
"on" = (/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"oo" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"oo" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"op" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0},/obj/structure/dispenser/oxygen,/turf/simulated/floor,/area/research_outpost/gearstore)
"oq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/research_outpost/gearstore)
"or" = (/obj/structure/window/reinforced{dir = 1},/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/door/window{dir = 4; name = "Air Tank Access"; req_access_txt = "0"; req_one_access_txt = "47;10;24"},/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -764,8 +765,8 @@
"oK" = (/turf/simulated/wall/r_wall,/area/research_outpost/maintstore2)
"oL" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/wall/r_wall,/area/research_outpost/longtermstorage)
"oM" = (/obj/structure/transit_tube{icon_state = "N-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"oN" = (/obj/effect/alien/weeds{icon_state = "weeds2"},/turf/simulated/floor/airless{icon_state = "damaged3"},/area/mine/abandoned)
-"oO" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4},/obj/item/weapon/shard,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/abandoned)
+"oN" = (/obj/effect/alien/weeds{icon_state = "weeds"},/turf/simulated/floor/airless,/area/mine/abandoned)
+"oO" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless{icon_state = "damaged2"},/area/mine/abandoned)
"oP" = (/obj/machinery/door/airlock/glass{name = "Glass Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"oQ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/mine/abandoned)
"oR" = (/obj/machinery/suspension_gen,/turf/simulated/floor,/area/research_outpost/gearstore)
@@ -790,8 +791,8 @@
"pk" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/mineral/random,/area/mine/unexplored)
"pl" = (/obj/structure/transit_tube{icon_state = "NE-SW"},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"pm" = (/obj/structure/transit_tube{icon_state = "D-NW"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
-"pn" = (/obj/effect/decal/remains/human,/obj/item/clothing/mask/facehugger{icon_state = "facehugger_dead"; stat = 2},/turf/simulated/floor,/area/mine/abandoned)
-"po" = (/obj/item/weapon/table_parts,/turf/simulated/floor,/area/mine/abandoned)
+"pn" = (/obj/structure/transit_tube{icon_state = "N-S"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
+"po" = (/obj/machinery/door/airlock,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"pp" = (/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"pq" = (/obj/structure/table/rack,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
"pr" = (/obj/structure/closet,/turf/simulated/floor/plating/airless/asteroid,/area/mine/explored)
@@ -830,8 +831,8 @@
"pY" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "D-SE"},/turf/space,/area/mine/explored)
"pZ" = (/obj/structure/lattice,/obj/structure/transit_tube{icon_state = "E-SW"},/turf/space,/area/mine/explored)
"qa" = (/obj/structure/lattice,/obj/structure/transit_tube,/turf/space,/area/mine/explored)
-"qb" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
-"qc" = (/obj/structure/transit_tube/station{dir = 2; icon_state = "closed"},/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"qb" = (/obj/structure/table/rack,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
+"qc" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"qd" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"qe" = (/turf/simulated/floor/mech_bay_recharge_floor{icon_state = "recharge_floor_asteroid"},/area/mine/explored)
"qf" = (/obj/machinery/computer/mech_bay_power_console,/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
@@ -875,22 +876,22 @@
"qR" = (/obj/machinery/door/firedoor/border_only{dir = 2},/obj/machinery/door/airlock/external{frequency = 1379; icon_state = "door_locked"; id_tag = "research_outer"; locked = 1; name = "Research Outpost External Access"; req_access = null; req_access_txt = "10;13"},/turf/simulated/floor/plating,/area/research_outpost/gearstore)
"qS" = (/obj/structure/disposalpipe/segment,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/mine/explored)
"qT" = (/obj/machinery/door/window/westleft,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"qU" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"qU" = (/obj/structure/table,/obj/item/weapon/paper/crumpled,/turf/simulated/floor/airless{icon_state = "floorscorched1"},/area/mine/abandoned)
"qV" = (/obj/structure/transit_tube{icon_state = "E-SW"},/turf/simulated/wall/r_wall,/area/mine/explored)
"qW" = (/obj/structure/transit_tube,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"qX" = (/obj/structure/transit_tube,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
-"qY" = (/obj/structure/transit_tube,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/unexplored)
-"qZ" = (/obj/structure/transit_tube/station,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/unexplored)
-"ra" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/unexplored)
+"qY" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"qZ" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
+"ra" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"rb" = (/obj/machinery/door/airlock/external{name = "External Airlock"; req_access_txt = "0"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/abandoned)
-"rc" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating,/area/mine/abandoned)
+"rc" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/grille{density = 0; icon_state = "brokengrille"},/obj/item/weapon/shard{icon_state = "small"},/obj/item/stack/rods,/turf/simulated/floor/plating/airless,/area/mine/abandoned)
"rd" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/space,/area/mine/explored)
"re" = (/obj/structure/lattice,/obj/structure/window/reinforced{dir = 1},/turf/space,/area/mine/explored)
"rf" = (/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "research_airlock"; name = "exterior access button"; pixel_x = 25; pixel_y = 25; req_access_txt = null; req_one_access = list(13,65); req_one_access_txt = null},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"rg" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
"rh" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 1},/area/mine/explored)
"ri" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 5},/area/mine/explored)
-"rj" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/mine/explored)
+"rj" = (/obj/structure/transit_tube{icon_state = "S-NE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 8},/area/mine/explored)
"rk" = (/obj/structure/transit_tube{icon_state = "D-NW"},/turf/simulated/wall/r_wall,/area/mine/explored)
"rl" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = -32; pixel_y = -32},/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"rm" = (/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
@@ -898,7 +899,7 @@
"ro" = (/obj/machinery/door/window/westleft{dir = 4},/obj/structure/window/reinforced,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/unexplored)
"rp" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
"rq" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'VACUUM'"; icon_state = "space"; layer = 4; name = "VACUUM"; pixel_x = 0; pixel_y = -32},/obj/machinery/door/window/westleft,/turf/simulated/floor/plating/airless{icon_state = "asteroidplating"},/area/mine/explored)
-"rr" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/obj/structure/transit_tube_pod,/turf/simulated/floor{icon_state = "bot"; dir = 1},/area/mine/explored)
+"rr" = (/obj/structure/transit_tube/station{dir = 8; icon_state = "closed"},/obj/structure/transit_tube_pod,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/explored)
"rs" = (/obj/effect/glowshroom,/obj/machinery/light/small,/turf/simulated/floor/plating/airless/asteroid,/area/mine/unexplored)
"rt" = (/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
"ru" = (/obj/item/weapon/shard{icon_state = "medium"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/abandoned)
@@ -1113,6 +1114,7 @@
"vv" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor,/area/mine/living_quarters)
"vw" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/turf/simulated/floor,/area/mine/living_quarters)
"vx" = (/obj/machinery/camera{c_tag = "Storage Room"; dir = 1; network = list("MINE")},/turf/simulated/floor,/area/mine/living_quarters)
+"vy" = (/obj/structure/table,/turf/simulated/floor/airless{icon_state = "damaged5"},/area/mine/abandoned)
"vz" = (/turf/simulated/wall,/area/mine/production)
"vA" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production)
"vB" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/mine/production)
@@ -1374,6 +1376,10 @@
"Ax" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Ay" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{dir = 5; icon_state = "asteroidfloor"},/area/mine/explored)
"Az" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/explored)
+"AA" = (/obj/structure/transit_tube,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 10},/area/mine/unexplored)
+"AB" = (/obj/structure/transit_tube{icon_state = "W-NE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 6},/area/mine/unexplored)
+"AC" = (/obj/structure/transit_tube/station,/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 2},/area/mine/unexplored)
+"AD" = (/obj/structure/transit_tube{icon_state = "D-SE"},/turf/simulated/floor/airless{icon_state = "asteroidwarning"; dir = 9},/area/mine/explored)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -1424,33 +1430,33 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaRababababababababaSaTaUaVaWaXaYaZbabbbcbdbebcbfbgbcbhbdaMaeaebibjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababbkbkababbkbkbkbkabbkbkbkbkbkbkbkababababababababaaaaaaaaaaaaaaaaaaaRabababababaSaSaSaSblbmaUbnbobpbpbpbqbcbrbsbtbubvbwbxbyaMaeaebzbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababbkababababababbkbkababababbkbkbkbkabbkbkbkbkbkbkbkbkbkbkbkbkbkbkabaaaaaaaaaaaaaaaaaaaRababababaSaSbBbCaSbDbDbDbDbEbFbGbGbHbcbcbcbcbIbJbKbKbKbKbKbKbLbMbNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabObPbOaaaaaaaaaaababababababababababababababababababababababbkabababbkbkabbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaRababababaSbQbRbSbTbUbVbWbXbYbZcacbccbccdcebccfcgbKchcicjckclcmcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacpcqcpaeaaaaaaababababababababababababbkbkbkbkbkbkabababababababbkbkbkbkbkabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaRababababaScrcsctaScucvcwcxcyczcAcbcBbccCcDcEcFcGcHcIcJcKcLcMcNcOcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxbPbOaaaaaaaaaaababababababababababababababababababababababbkabababbkbkabbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkaaaaaaaaaaaaaaaaaRababababaSbQbRbSbTbUbVbWbXbYbZcacbccbccdcebccfcgbKchcicjckclcmcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmcqcpaeaaaaaaababababababababababababbkbkbkbkbkbkabababababababbkbkbkbkbkabababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaaaaRababababaScrcsctaScucvcwcxcyczcAcbcBbccCcDcEcFcGcHcIcJcKcLcMcNcOcoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacPcQcRcSaeaaaaabababababababbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaaafcTaaabababaScrcUcVaScWcwcXcYcZdadbdadcdadadaaMdddebKdfdgcKdhdidjcncoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldldmdndocpaeaaaaababababbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaedpdqaBaBaBdrdsaaabababaScrdtduaSdvdwdxdydzdAdBdCdDdEdFdGaMdHdIbKdJdKdLdMdNbKdOdPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadkdldleudndocpaeaaaaababababbkbkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaedpdqaBaBaBdrdsaaabababaScrdtduaSdvdwdxdydzdAdBdCdDdEdFdGaMdHdIbKdJdKdLdMdNbKdOdPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadQdRdSdTdUdVdWaeaebkbkababbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaedYdsaeaeaeaeaedZaSaSaSaSaSaSeaaSbDaMaMebecdaedeeefegeheiaMejekelemeneoepeqeleresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaetdldleuevdoewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaaaaaRexexexexexexexbceyezeAeBeCeDeEeFeGeHeIeJdaeKeLeMeNeOePdaeQeReSeSeSeTeSeSeSeresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaetdldlfyevdoewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXdXdXaaaaaRexexexexexexexbceyezeAeBeCeDeEeFeGeHeIeJdaeKeLeMeNeOePdaeQeReSeSeSeTeSeSeSeresaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeeUeVeWewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkdXaaaaaRexexexexexexexeXeYeZfaeZeZfbfceZfdfefffgfhfifjfkflfmfnfofpfqeSfrfsfufteSfvfwesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefxfyfzfAewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaRexexexexexexexfBfCfDfEfFfGfHfIfJfKaMfLfMaMfNfOfPfQfRfSdafTfUfVfWfXfYfZgagbgcesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaefxjHfzfAewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaRexexexexexexexfBfCfDfEfFfGfHfIfJfKaMfLfMaMfNfOfPfQfRfSdafTfUfVfWfXfYfZgagbgcesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacacacacacacacacacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaegdgegfewggghewewewewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaRexexexexexexexgifCfDfEfFgjgkfIfJglaMgmgnaMgodadadadagpdagqgreSgsgtgugvgwergxgygyaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaegzgAgBgCgDgEbOdVgFewgGgHewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaaaRexexexexexexexbcgIgJgKfFgLgMfIgNgOaMgPgQgRgSgTgUgVaMgWgXgYgZeShahbhchdheeresesesaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacacacacacaaacacacacacaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaehfhggAhhhihjhkhlgFhmgHhngGewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahohphqhrhshphqhthuhvhwhxhyhyaMaMaMaMaMhzhAhBhCbghDhEaMhFhGhHhIaMhJhKhLhMhNhOhPaMhQdqaBaBaBaBaBaBaChRaaaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaacacacacacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahShfhThfgBgBgghUhiewfAhVewgHhWewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkaaaaaaaaaaaahXhYhZiaibichZidieifhZigihiiijikilimaMinhAioipiqirisaMitiuiviwaMeSixeSaMaMiyiziAiBiCiDiDiEiDiDiDiFbjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeiGiHgBiIiJgBeWiKhjiLiMiNewewewewewewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababaaaaaaaaaaiOiPiQiQiQiQiRiSiTiUiViWiXiYijiZjajbjcjdjejfjgeZeZjhjieZeZjjjkjljmjnjojpjqeZeZjrjsjtjuiDjvjwjxjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaejzjAjBgBiJjChhjDhijEewjFjGewjHgFjIjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababaaaaaaaajKjLhZhZjMhZjNjOhZjPhZjQjRjSijjajTjUjVjWjXjYjZkakbkckdkekfkckdkdkgkhkikjkkklkmknkokpkqkrksktkukviDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewjHfAgFjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewjHeWlmjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQdVhjlRewlSlTlUewiLewlVlWlXewdVlYcqlZeWfzcqewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWdVhhiLlYkwmMkwmNdVdVmOgFdVeWeWewcqmPeWdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnynzeWeWiLeWlmggeWnAmNlmkCnBeWnCfAewkwcqlYdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEnFnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSnTnUkYnVnWnXlanYnZoalaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnyohhhgDewoiewojokewhjewojokewhilYewmOolcqjFewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonoonGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewoNgFhjjFfAhikzhiiNhhewojoOoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpapboEpcpdpeoGpfpgphoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewgFjFpniKdohhgFewhifAewpopppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCpEpFpGoEpHpIpJoGpKpLpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewjFdViNgFhifAiNewoiewewjHcqpppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqaqbqcqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewjHcqjIcqpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewjHjIjIjIjJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTqUqVaiaiaiaiqWaiaiaiaiaiqXqYqZraogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaejzjAjBgBiJjChhjDhijEewjFjGewkBkCdVjJewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababababababababababababababaaaaaaaajKjLhZhZjMhZjNjOhZjPhZjQjRjSijjajTjUjVjWjXjYjZkakbkckdkekfkckdkdkgkhkikjkkklkmknkokpkqkrksktkukviDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaeaebkbkewgEkwkxkyjBkzkAhjkBbOdVkCewkBkwkCjIewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababababesesesesesesababababababkDkEaaaaaakFkGhZkHkIkJkKidkLkMkNkOkPkQijkRkSkTkUkUaMaMkVkWkWkXkWkYkYkZkYlalalblaaMlcaMldleiDlflgiDlhlikuljiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewewewewewewgDhilkkwhiiKllkBkBhlgFjFewkBeWfAqbewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesgygygygyesesesabablnlolphRaaaaaalqlrhqhrlslslslslsltlsbcbcbcijlukUlvlwlxlylzlAkWlBlClDkYlElFlGlalHlIlJlalKlLldlMldiDiDiDlNlOlPjyiDbAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeewlQhijBqUewjzqcjAewiLewqZraqYewdVlYjEoNeWfzhiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabababesesgygygygygygygygyesesabmambbimcaBaBaBdrdsaeaemdmemfmgmhmimjmkmlmmmnmompmqmrmsmtmungkWmwmxmykYmzmAmBlamCmDmElamFmGldmHmImJmKiDiDiDiDiDmLcTaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkewlQeWjBeWoOlYkwmMkwmNdVdVmOgFdVeWeWewhioNhihiewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesgygygygygygygygygygymQmRmSmRaaaaaaaaaaaaaaaaaemdmTmUmVmWmXmYmZnananbnckUndnelylynfmvkWnhninjkYnknlnmlannnonplanqnrldnsntntnuldnvagaBaBnwnxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkewnyjBhieWpoeWlmggeWnAmNlmkCnBeWnCfAewmPeWiNdVewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmRgygygygygygygygygygygynDnEpnnGaaaaaaaaaaaaaaaaaemdmTmUnHnInJnKmUnLnanMijijnNnOlynPnQnRkWnSnTnUkYnVnWnXlanYnZoalaobocldodoeoeoeldofogbkaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkewnynzhigEewoiewojokeweWewojokewhilYewghlZjEmPewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesomgygygygygygygygygygygygyonlXnGaaaaaaaaaaaaaaaaaemdopmUoqmhorosotounaovijowoxoylyozoAoBoCoCoDoCoEoEoFoEoGoGoHoGoGoIoJoKldldldldoLoMabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkewewewewewewoiewiNnCeWkzolhikzhiiNhhewooohoPoQewbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesmQgygygygygygygygygygygygyonnFnGaaaaaaaaaaaaaaaeaemdoRoSoTmWoUosoVoWnaoXijoYoxoylylylylyoCoZpapboEpcpdpeoGpfpgphoGpipjoKabbkabpkplpmabbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewnCfAlTkzlSeWkCewhifAewlRpppppqewadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesesgygygyprgygygygygygygygypsptaeaaaaaaaaaaaaaeaeaemdmdpupvmdmdpwpxpwmdpypzpApBpCpDgygygyoCpEpFpGoEpHpIpJoGpKpLpMoGoKoKpNpOaiaipPogababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkewoiewkzeWdolWhifAiNewoiewewkBhipppqpRadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgypUpSpQgygygygygygygygypWpXaaaaaaaaaaaepYpZqalUlVqdqeqfmdqgqhqimdqjpzgygygygygygygyoCqkqlqmoCqnqoqpoEqqqrqsoGabauqtogquabababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabkbkbkbkbkbkbkbkbkbkbkbkbkewoiewewewewewewewewewoiewvydVhidVpqqvadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygypSpQgygygygygygygyqwqxqyqzqzqzqzqzqzqAqBqCqDqDqEqFqFmdqGqHqImdqJgygygygygypzpzpzoCoCoCoCoCoEoEoEoEoGoGoGoGauqtogqKadqKababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLaaaaaaaaaaqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkewoioioioioioioioioioioiewkBhijEhijJewadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygyqMqNgygygygygygygygyqOqPqPqPqPqPqPqPqPqOgygygygygygymdqQqRpwmdqSgygygygygyqTADqVaiaiaiaiqWaiaiaiaiaiqXAAACABogadadadqKkDabbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkewewewewewewewewewewewewewewoQrbrcewewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesgygygygygygygygygygygygygyqwqCrdrerererererereqwqCgygygygygygypBrfpCrgrhrigygygygyonrjrkababbkbkbkbkbkbkbkbkrlrmrnroadqKadadqKabababbkbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewppppjIewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewpppphiewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSpTgygygygygygygygygygyaaaaaaaaaaaaaaaaesesesesesesesesgygygygygygypBrppCgygygygyrqrrpzbkabbkbkbkbkbkbkbkkDqKadrsadqKadadadabababababbkbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadewrtrurtewadadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabespSgygygygygygygygygygygyaaaaaaaaaaaaaaaaesesesababababesesesgygygygygyrvgygydXgygypzpzpzbkbkbkbkbkbkbkbkbkbkbkbkkDbkadqubkabbkbkababababbkbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadewrwrboQewadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabesespVryrxgygygygygyesesesaaaaaaaaaaaaaaaaaaababababababababesesesgygygyrvgygydXdXdXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkababababbkbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqLqLqLqLqLqLqLqLqLqLqLqLrArAqLqLqLqLqLqLqLqLqLqLqLqLqLqLbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkadadadrBrCrDadadadadbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkababesesesmResgygymQmQesababaaaaaaaaaaaaaaaaaabkbkbkbkbkabababababesesgygyrvgygydXdXbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkbkabbkbkbkbkbkababababbkbkaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
diff --git a/nano/templates/smes.tmpl b/nano/templates/smes.tmpl
index 8b72cefedd..799ac3911d 100644
--- a/nano/templates/smes.tmpl
+++ b/nano/templates/smes.tmpl
@@ -50,6 +50,14 @@
{{:helper.link('Online', 'power', {'online' : 1}, data.outputOnline ? 'selected' : null)}}{{:helper.link('Offline', 'close', {'online' : 1}, data.outputOnline ? null : 'selected')}}
+
+ {{if data.outputting == 2}}
+ [Outputting]
+ {{else data.outputting == 1}}
+ [Stored energy too low]
+ {{else}}
+ [Not Outputting]
+ {{/if}}