diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm
index 544baf8339..ccbb9306ed 100644
--- a/code/__defines/subsystems.dm
+++ b/code/__defines/subsystems.dm
@@ -30,3 +30,4 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
#define INIT_ORDER_SHUTTLES 3
#define INIT_ORDER_LIGHTING 0
#define INIT_ORDER_AIR -1
+#define INIT_ORDER_XENOARCH -20
diff --git a/code/controllers/master_controller.dm b/code/controllers/master_controller.dm
index 8e6a06b02a..28ce7fce53 100644
--- a/code/controllers/master_controller.dm
+++ b/code/controllers/master_controller.dm
@@ -36,8 +36,8 @@ datum/controller/game_controller/New()
datum/controller/game_controller/proc/setup()
setup_objects()
- setupgenetics()
- SetupXenoarch()
+ // setupgenetics() Moved to SSatoms
+ // SetupXenoarch() - Moved to SSxenoarch
transfer_controller = new
admin_notice("Initializations complete.", R_DEBUG)
diff --git a/code/controllers/subsystem.dm b/code/controllers/subsystem.dm
index bd9a2aeafb..437c10424b 100644
--- a/code/controllers/subsystem.dm
+++ b/code/controllers/subsystem.dm
@@ -166,7 +166,7 @@
- if(can_fire && !(SS_NO_FIRE in flags))
+ if(can_fire && !(SS_NO_FIRE & flags))
msg = "[round(cost,1)]ms|[round(tick_usage,1)]%|[round(ticks,0.1)]\t[msg]"
else
msg = "OFFLINE\t[msg]"
diff --git a/code/controllers/subsystems/atoms.dm b/code/controllers/subsystems/atoms.dm
index 8716292eaf..6b5669878c 100644
--- a/code/controllers/subsystems/atoms.dm
+++ b/code/controllers/subsystems/atoms.dm
@@ -18,7 +18,7 @@ SUBSYSTEM_DEF(atoms)
var/list/BadInitializeCalls = list()
/datum/controller/subsystem/atoms/Initialize(timeofday)
- setupgenetics() //to set the mutations' place in structural enzymes, so monkey.initialize() knows where to put the monkey mutation.
+ setupgenetics() //to set the mutations' place in structural enzymes, so initializers know where to put mutations.
initialized = INITIALIZATION_INNEW_MAPLOAD
to_world_log("Initializing objects")
admin_notice("Initializing objects", R_DEBUG)
diff --git a/code/modules/xenoarcheaology/master_controller.dm b/code/controllers/subsystems/xenoarch.dm
similarity index 79%
rename from code/modules/xenoarcheaology/master_controller.dm
rename to code/controllers/subsystems/xenoarch.dm
index a6689e36b6..eb6c97ea75 100644
--- a/code/modules/xenoarcheaology/master_controller.dm
+++ b/code/controllers/subsystems/xenoarch.dm
@@ -1,14 +1,35 @@
-/datum/controller/game_controller
- var/list/artifact_spawning_turfs = list()
- var/list/digsite_spawning_turfs = list()
-
#define XENOARCH_SPAWN_CHANCE 0.5
#define DIGSITESIZE_LOWER 4
#define DIGSITESIZE_UPPER 12
#define ARTIFACTSPAWNNUM_LOWER 6
#define ARTIFACTSPAWNNUM_UPPER 12
-/datum/controller/game_controller/proc/SetupXenoarch()
+//
+// Xenoarch subsystem handles initialization of Xenoarcheaology artifacts and digsites.
+//
+SUBSYSTEM_DEF(xenoarch)
+ name = "Xenoarch"
+ init_order = INIT_ORDER_XENOARCH
+ flags = SS_NO_FIRE
+ var/list/artifact_spawning_turfs = list()
+ var/list/digsite_spawning_turfs = list()
+
+/datum/controller/subsystem/xenoarch/Initialize(timeofday)
+ SetupXenoarch()
+ ..()
+
+/datum/controller/subsystem/xenoarch/Recover()
+ if (istype(SSxenoarch.artifact_spawning_turfs))
+ artifact_spawning_turfs = SSxenoarch.artifact_spawning_turfs
+ if (istype(SSxenoarch.digsite_spawning_turfs))
+ digsite_spawning_turfs = SSxenoarch.digsite_spawning_turfs
+
+/datum/controller/subsystem/xenoarch/stat_entry(msg)
+ if (!Debug2)
+ return // Only show up in stat panel if debugging is enabled.
+ . = ..()
+
+/datum/controller/subsystem/xenoarch/proc/SetupXenoarch()
for(var/turf/simulated/mineral/M in world)
if(!M.density)
continue
diff --git a/code/datums/repositories/radiation.dm b/code/datums/repositories/radiation.dm
index 4755b982ec..5d06eccc77 100644
--- a/code/datums/repositories/radiation.dm
+++ b/code/datums/repositories/radiation.dm
@@ -116,7 +116,7 @@ var/global/repository/radiation/radiation_repository = new()
else if(O.density) //So open doors don't get counted
var/material/M = O.get_material()
if(!M) continue
- cached_rad_resistance += M.weight
+ cached_rad_resistance += M.radiation_resistance
// Looks like storing the contents length is meant to be a basic check if the cache is stale due to items enter/exiting. Better than nothing so I'm leaving it as is. ~Leshana
radiation_repository.resistance_cache[src] = (length(contents) + 1)
diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm
index bfaf2658bf..2c2e26d97d 100644
--- a/code/datums/supplypacks/medical.dm
+++ b/code/datums/supplypacks/medical.dm
@@ -330,8 +330,8 @@
access = access_cmo
/datum/supply_packs/med/defib
- name = "Defibrilator crate"
+ name = "Defibrillator crate"
contains = list(/obj/item/device/defib_kit = 2)
cost = 30
containertype = /obj/structure/closet/crate/medical
- containername = "Defibrilator crate"
\ No newline at end of file
+ containername = "Defibrillator crate"
\ No newline at end of file
diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm
index 4cd21a5527..b6a45d9a07 100644
--- a/code/defines/obj/weapon.dm
+++ b/code/defines/obj/weapon.dm
@@ -102,8 +102,9 @@
temp_blade.attack_self()
/obj/item/weapon/cane/concealed/attack_self(var/mob/user)
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
if(concealed_blade)
- user.visible_message("[user] has unsheathed \a [concealed_blade] from \his [src]!", "You unsheathe \the [concealed_blade] from \the [src].")
+ user.visible_message("[user] has unsheathed \a [concealed_blade] from [T.his] [src]!", "You unsheathe \the [concealed_blade] from \the [src].")
// Calling drop/put in hands to properly call item drop/pickup procs
playsound(user.loc, 'sound/weapons/flipblade.ogg', 50, 1)
user.drop_from_inventory(src)
@@ -117,7 +118,8 @@
/obj/item/weapon/cane/concealed/attackby(var/obj/item/weapon/material/butterfly/W, var/mob/user)
if(!src.concealed_blade && istype(W))
- user.visible_message("[user] has sheathed \a [W] into \his [src]!", "You sheathe \the [W] into \the [src].")
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ user.visible_message("[user] has sheathed \a [W] into [T.his] [src]!", "You sheathe \the [W] into \the [src].")
user.drop_from_inventory(W)
W.loc = src
src.concealed_blade = W
diff --git a/code/game/gamemodes/changeling/powers/armblade.dm b/code/game/gamemodes/changeling/powers/armblade.dm
index 5ab724789b..35526be0d6 100644
--- a/code/game/gamemodes/changeling/powers/armblade.dm
+++ b/code/game/gamemodes/changeling/powers/armblade.dm
@@ -86,7 +86,8 @@
..()
/obj/item/weapon/melee/changeling/suicide_act(mob/user)
- viewers(user) << "[user] is impaling \himself the [src.name]! It looks like \he's trying to commit suicide."
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ viewers(user) << "[user] is impaling [T.himself] with the [src.name]! It looks like [T.he] [T.is] trying to commit suicide."
return(BRUTELOSS)
/obj/item/weapon/melee/changeling/process() //Stolen from ninja swords.
diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm
index 98b091abaa..ab8111000d 100644
--- a/code/game/gamemodes/changeling/powers/revive.dm
+++ b/code/game/gamemodes/changeling/powers/revive.dm
@@ -38,7 +38,7 @@
for(var/limb in H.organs_by_name)
var/obj/item/organ/external/current_limb = H.organs_by_name[limb]
if(current_limb)
- current_limb.undislocate()
+ current_limb.relocate()
current_limb.open = 0
BITSET(H.hud_updateflag, HEALTH_HUD)
@@ -60,4 +60,4 @@
- return 1
\ No newline at end of file
+ return 1
diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm
index d2fdffcb16..0e0ff60791 100644
--- a/code/game/gamemodes/cult/runes.dm
+++ b/code/game/gamemodes/cult/runes.dm
@@ -168,7 +168,8 @@ var/list/sacrificed = list()
if (!target.can_feel_pain())
target.visible_message("The markings below \the [target] glow a bloody red.")
else
- target.visible_message("[target] writhes in pain as the markings below \him glow a bloody red.", "AAAAAAHHHH!", "You hear an anguished scream.")
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
+ target.visible_message("[target] writhes in pain as the markings below [TT.him] glow a bloody red.", "AAAAAAHHHH!", "You hear an anguished scream.")
if(!waiting_for_input[target]) //so we don't spam them with dialogs if they hesitate
waiting_for_input[target] = 1
@@ -373,15 +374,18 @@ var/list/sacrificed = list()
sleep(10 SECONDS)
if(corpse_to_raise.client)
+
+ var/datum/gender/TU = gender_datums[corpse_to_raise.get_visible_gender()]
+ var/datum/gender/TT = gender_datums[body_to_sacrifice.get_visible_gender()]
cult.add_antagonist(corpse_to_raise.mind)
corpse_to_raise.revive()
usr.say("Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!")
- corpse_to_raise.visible_message("[corpse_to_raise]'s eyes glow with a faint red as he stands up, slowly starting to breathe again.", \
+ corpse_to_raise.visible_message("[corpse_to_raise]'s eyes glow with a faint red as [TU.he] stand[TU.s] up, slowly starting to breathe again.", \
"Life... I'm alive again...", \
"You hear a faint, slightly familiar whisper.")
- body_to_sacrifice.visible_message("[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from \his remains!", \
+ body_to_sacrifice.visible_message("[body_to_sacrifice] is torn apart, a black smoke swiftly dissipating from [TT.his] remains!", \
"You feel as your blood boils, tearing you apart.", \
"You hear a thousand voices, all crying in pain.")
body_to_sacrifice.gib()
@@ -433,8 +437,9 @@ var/list/sacrificed = list()
ajourney() //some bits copypastaed from admin tools - Urist
if(usr.loc==src.loc)
var/mob/living/carbon/human/L = usr
+ var/datum/gender/TU = gender_datums[L.get_visible_gender()]
usr.say("Fwe[pick("'","`")]sh mah erl nyag r'ya!")
- usr.visible_message("[usr]'s eyes glow blue as \he freezes in place, absolutely motionless.", \
+ usr.visible_message("[usr]'s eyes glow blue as [TU.he] freeze[TU.s] in place, absolutely motionless.", \
"The shadow that is your spirit separates itself from your body. You are now in the realm beyond. While this is a great sight, being here strains your mind and body. Hurry...", \
"You hear only complete silence for a moment.")
announce_ghost_joinleave(usr.ghostize(1), 1, "You feel that they had to use some [pick("dark", "black", "blood", "forgotten", "forbidden")] magic to [pick("invade","disturb","disrupt","infest","taint","spoil","blight")] this place!")
@@ -599,11 +604,12 @@ var/list/sacrificed = list()
mend()
var/mob/living/user = usr
+ var/datum/gender/TU = gender_datums[usr.get_visible_gender()]
src = null
user.say("Uhrast ka'hfa heldsagen ver[pick("'","`")]lot!")
user.take_overall_damage(200, 0)
runedec+=10
- user.visible_message("\The [user] keels over dead, \his blood glowing blue as it escapes \his body and dissipates into thin air.", \
+ user.visible_message("\The [user] keels over dead, [TU.his] blood glowing blue as it escapes [TU.his] body and dissipates into thin air.", \
"In the last moment of your humble life, you feel an immense pain as fabric of reality mends... with your blood.", \
"You hear faint rustle.")
for(,user.stat==2)
@@ -886,7 +892,8 @@ var/list/sacrificed = list()
if (cultist == user) //just to be sure.
return
if(cultist.buckled || cultist.handcuffed || (!isturf(cultist.loc) && !istype(cultist.loc, /obj/structure/closet)))
- user << "You cannot summon \the [cultist], for \his shackles of blood are strong."
+ var/datum/gender/TU = gender_datums[cultist.get_visible_gender()]
+ user << "You cannot summon \the [cultist], for [TU.his] shackles of blood are strong."
return fizzle()
cultist.loc = src.loc
cultist.lying = 1
diff --git a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
index 81a6148e2c..1051587d13 100644
--- a/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
+++ b/code/game/gamemodes/endgame/supermatter_cascade/blob.dm
@@ -99,7 +99,9 @@
/turf/unsimulated/wall/supermatter/Bumped(atom/AM as mob|obj)
if(istype(AM, /mob/living))
- AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\
+ var/mob/living/M = AM
+ var/datum/gender/T = gender_datums[M.get_visible_gender()]
+ AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash.",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
"You hear an unearthly noise as a wave of heat washes over you.")
else
diff --git a/code/game/gamemodes/newobjective.dm b/code/game/gamemodes/newobjective.dm
index 3db262d3df..f952dbad06 100644
--- a/code/game/gamemodes/newobjective.dm
+++ b/code/game/gamemodes/newobjective.dm
@@ -1252,7 +1252,8 @@ datum
proc/find_target()
..()
if(target && target.current)
- explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role], has defied us for the last time. Make an example of [target.current.gender == MALE ? "him" : target.current.gender == FEMALE ? "her" : "them"], and bring us [target.current.gender == MALE ? "his" : target.current.gender == FEMALE ? "her" : "their"] severed head."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : target.assigned_role], has defied us for the last time. Make an example of [T.him], and bring us [T.his] severed head."
else
explanation_text = "Free Objective"
return target
@@ -1261,7 +1262,8 @@ datum
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
- explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)], has defied us for the last time. Make an example of [target.current.gender == MALE ? "him" : target.current.gender == FEMALE ? "her" : "them"], and bring us [target.current.gender == MALE ? "his" : target.current.gender == FEMALE ? "her" : "their"] severed head."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [target.role_alt_title ? target.role_alt_title : (!role_type ? target.assigned_role : target.special_role)], has defied us for the last time. Make an example of [T.him], and bring us [T.his] severed head."
else
explanation_text = "Free Objective"
return target
diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm
index 7237669a77..c4494a9ee8 100644
--- a/code/game/gamemodes/objective.dm
+++ b/code/game/gamemodes/objective.dm
@@ -69,7 +69,8 @@ datum/objective/anti_revolution/execute
find_target()
..()
if(target && target.current)
- explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute \him[target.current]."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute [T.him]."
else
explanation_text = "Free Objective"
return target
@@ -78,7 +79,8 @@ datum/objective/anti_revolution/execute
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
- explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute \him[target.current]."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute [T.him]."
else
explanation_text = "Free Objective"
return target
@@ -127,7 +129,8 @@ datum/objective/anti_revolution/demote
find_target()
..()
if(target && target.current)
- explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [using_map.company_name]'s goals. Demote \him[target.current] to assistant."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant."
else
explanation_text = "Free Objective"
return target
@@ -135,7 +138,8 @@ datum/objective/anti_revolution/demote
find_target_by_role(role, role_type=0)
..(role, role_type)
if(target && target.current)
- explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [using_map.company_name]'s goals. Demote \him[target.current] to assistant."
+ var/datum/gender/T = gender_datums[target.current.get_visible_gender()]
+ explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [using_map.company_name]'s goals. Demote [T.him] to assistant."
else
explanation_text = "Free Objective"
return target
diff --git a/code/game/gamemodes/technomancer/spells/illusion.dm b/code/game/gamemodes/technomancer/spells/illusion.dm
index 5eac627728..3e6d2dd8ab 100644
--- a/code/game/gamemodes/technomancer/spells/illusion.dm
+++ b/code/game/gamemodes/technomancer/spells/illusion.dm
@@ -167,8 +167,9 @@
switch(M.a_intent)
if(I_HELP)
- M.visible_message("[M] hugs [src] to make \him feel better!", \
- "You hug [src] to make \him feel better!")
+ var/datum/gender/T = gender_datums[src.get_visible_gender()]
+ M.visible_message("[M] hugs [src] to make [T.him] feel better!", \
+ "You hug [src] to make [T.him] feel better!") // slightly redundant as at the moment most mobs still use the normal gender var, but it works and future-proofs it
playsound(src.loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1)
if(I_DISARM)
diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm
index ef67a53084..7d786ce1a3 100644
--- a/code/game/machinery/Sleeper.dm
+++ b/code/game/machinery/Sleeper.dm
@@ -39,10 +39,8 @@
if(!sleeper)
findsleeper()
- if(sleeper)
- return sleeper.ui_interact(user)
- else if(sleeper)
- return sleeper.ui_interact(user)
+ if(sleeper)
+ return ui_interact(user)
else
to_chat(user, "Sleeper not found!")
@@ -59,6 +57,94 @@
else
icon_state = initial(icon_state)
+/obj/machinery/sleep_console/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state)
+ var/data[0]
+
+ var/obj/machinery/sleeper/S = sleeper
+ var/mob/living/carbon/human/occupant = sleeper.occupant
+
+ data["power"] = S.stat & (NOPOWER|BROKEN) ? 0 : 1
+
+ var/list/reagents = list()
+ for(var/T in S.available_chemicals)
+ var/list/reagent = list()
+ reagent["id"] = T
+ reagent["name"] = S.available_chemicals[T]
+ if(occupant)
+ reagent["amount"] = occupant.reagents.get_reagent_amount(T)
+ reagents += list(reagent)
+ data["reagents"] = reagents.Copy()
+
+ if(occupant)
+ data["occupant"] = 1
+ switch(occupant.stat)
+ if(CONSCIOUS)
+ data["stat"] = "Conscious"
+ if(UNCONSCIOUS)
+ data["stat"] = "Unconscious"
+ if(DEAD)
+ data["stat"] = "Dead"
+ data["health"] = occupant.health
+ data["maxHealth"] = occupant.getMaxHealth()
+ if(iscarbon(occupant))
+ var/mob/living/carbon/C = occupant
+ data["pulse"] = C.get_pulse(GETPULSE_TOOL)
+ data["brute"] = occupant.getBruteLoss()
+ data["burn"] = occupant.getFireLoss()
+ data["oxy"] = occupant.getOxyLoss()
+ data["tox"] = occupant.getToxLoss()
+ else
+ data["occupant"] = 0
+ if(S.beaker)
+ data["beaker"] = S.beaker.reagents.get_free_space()
+ else
+ data["beaker"] = -1
+ data["filtering"] = S.filtering
+
+ var/stasis_level_name = "Error!"
+ for(var/N in S.stasis_choices)
+ if(S.stasis_choices[N] == S.stasis_level)
+ stasis_level_name = N
+ break
+ data["stasis"] = stasis_level_name
+
+ ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
+ if(!ui)
+ ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state)
+ ui.set_initial_data(data)
+ ui.open()
+ ui.set_auto_update(1)
+
+/obj/machinery/sleep_console/Topic(href, href_list)
+ if(..())
+ return 1
+
+ var/obj/machinery/sleeper/S = sleeper
+
+ if(usr == S.occupant)
+ to_chat(usr, "You can't reach the controls from the inside.")
+ return
+
+ add_fingerprint(usr)
+
+ if(href_list["eject"])
+ S.go_out()
+ if(href_list["beaker"])
+ S.remove_beaker()
+ if(href_list["sleeper_filter"])
+ if(S.filtering != text2num(href_list["sleeper_filter"]))
+ S.toggle_filter()
+ if(href_list["chemical"] && href_list["amount"])
+ if(S.occupant && S.occupant.stat != DEAD)
+ if(href_list["chemical"] in S.available_chemicals) // Your hacks are bad and you should feel bad
+ S.inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"]))
+ if(href_list["change_stasis"])
+ var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in S.stasis_choices
+ if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE)
+ S.stasis_level = S.stasis_choices[new_stasis]
+
+ return 1
+
/obj/machinery/sleeper
name = "sleeper"
desc = "A stasis pod with built-in injectors, a dialysis machine, and a limited health scanner."
@@ -122,89 +208,6 @@
/obj/machinery/sleeper/update_icon()
icon_state = "sleeper_[occupant ? "1" : "0"]"
-/obj/machinery/sleeper/ui_interact(var/mob/user, var/ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = outside_state)
- var/data[0]
-
- data["power"] = stat & (NOPOWER|BROKEN) ? 0 : 1
-
- var/list/reagents = list()
- for(var/T in available_chemicals)
- var/list/reagent = list()
- reagent["id"] = T
- reagent["name"] = available_chemicals[T]
- if(occupant)
- reagent["amount"] = occupant.reagents.get_reagent_amount(T)
- reagents += list(reagent)
- data["reagents"] = reagents.Copy()
-
- if(occupant)
- data["occupant"] = 1
- switch(occupant.stat)
- if(CONSCIOUS)
- data["stat"] = "Conscious"
- if(UNCONSCIOUS)
- data["stat"] = "Unconscious"
- if(DEAD)
- data["stat"] = "Dead"
- data["health"] = occupant.health
- data["maxHealth"] = occupant.getMaxHealth()
- if(iscarbon(occupant))
- var/mob/living/carbon/C = occupant
- data["pulse"] = C.get_pulse(GETPULSE_TOOL)
- data["brute"] = occupant.getBruteLoss()
- data["burn"] = occupant.getFireLoss()
- data["oxy"] = occupant.getOxyLoss()
- data["tox"] = occupant.getToxLoss()
- else
- data["occupant"] = 0
- if(beaker)
- data["beaker"] = beaker.reagents.get_free_space()
- else
- data["beaker"] = -1
- data["filtering"] = filtering
-
- var/stasis_level_name = "Error!"
- for(var/N in stasis_choices)
- if(stasis_choices[N] == stasis_level)
- stasis_level_name = N
- break
- data["stasis"] = stasis_level_name
-
- ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
- if(!ui)
- ui = new(user, src, ui_key, "sleeper.tmpl", "Sleeper UI", 600, 600, state = state)
- ui.set_initial_data(data)
- ui.open()
- ui.set_auto_update(1)
-
-/obj/machinery/sleeper/Topic(href, href_list)
- if(..())
- return 1
-
- if(usr == occupant)
- to_chat(usr, "You can't reach the controls from the inside.")
- return
-
- add_fingerprint(usr)
-
- if(href_list["eject"])
- go_out()
- if(href_list["beaker"])
- remove_beaker()
- if(href_list["sleeper_filter"])
- if(filtering != text2num(href_list["sleeper_filter"]))
- toggle_filter()
- if(href_list["chemical"] && href_list["amount"])
- if(occupant && occupant.stat != DEAD)
- if(href_list["chemical"] in available_chemicals) // Your hacks are bad and you should feel bad
- inject_chemical(usr, href_list["chemical"], text2num(href_list["amount"]))
- if(href_list["change_stasis"])
- var/new_stasis = input("Levels deeper than 50% stasis level will render the patient unconscious.","Stasis Level") as null|anything in stasis_choices
- if(new_stasis && CanUseTopic(usr, default_state) == STATUS_INTERACTIVE)
- stasis_level = stasis_choices[new_stasis]
-
- return 1
-
/obj/machinery/sleeper/attackby(var/obj/item/I, var/mob/user)
add_fingerprint(user)
if(istype(I, /obj/item/weapon/grab))
diff --git a/code/game/objects/effects/decals/remains.dm b/code/game/objects/effects/decals/remains.dm
index ff3c8d4a61..d35da75324 100644
--- a/code/game/objects/effects/decals/remains.dm
+++ b/code/game/objects/effects/decals/remains.dm
@@ -22,9 +22,39 @@
icon_state = "mouse"
/obj/effect/decal/remains/lizard
- desc = "They look like the remains of a small rodent."
+ desc = "They look like the remains of a small lizard."
icon_state = "lizard"
+/obj/effect/decal/remains/unathi
+ desc = "They look like Unathi remains. Pointy."
+ icon_state = "remainsunathi"
+
+/obj/effect/decal/remains/tajaran
+ desc = "They look like Tajaran remains. They're surprisingly small."
+ icon_state = "remainstajaran"
+
+/obj/effect/decal/remains/ribcage
+ desc = "They look like animal remains of some sort... You hope."
+ icon_state = "remainsribcage"
+
+/obj/effect/decal/remains/deer
+ desc = "They look like the remains of a large herbivore, picked clean."
+ icon_state = "remainsdeer"
+
+/obj/effect/decal/remains/posi
+ desc = "This looks like part of an old FBP. Hopefully it was empty."
+ icon_state = "remainsposi"
+
+/obj/effect/decal/remains/mummy1
+ name = "mummified remains"
+ desc = "They look like human remains. They've been here a long time."
+ icon_state = "mummified1"
+
+/obj/effect/decal/remains/mummy2
+ name = "mummified remains"
+ desc = "They look like human remains. They've been here a long time."
+ icon_state = "mummified2"
+
/obj/effect/decal/remains/attack_hand(mob/user as mob)
user << "[src] sinks together into a pile of ash."
var/turf/simulated/floor/F = get_turf(src)
diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm
index 6689811b89..a58241ada2 100644
--- a/code/game/objects/effects/step_triggers.dm
+++ b/code/game/objects/effects/step_triggers.dm
@@ -185,11 +185,12 @@ var/global/list/tele_landmarks = list() // Terrible, but the alternative is loop
A.forceMove(T) // Harmlessly move ghosts.
return
- if(isliving(A)) // Someday, implement parachutes. For now, just turbomurder whoever falls.
- var/mob/living/L = A
- L.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this.
- message_admins("\The [A] fell out of the sky.")
A.forceMove(T)
+ // Living things should probably be logged when they fall...
+ if(isliving(A))
+ message_admins("\The [A] fell out of the sky.")
+ // ... because they're probably going to die from it.
+ A.fall_impact(T, 42, 90, FALSE, TRUE) //You will not be defibbed from this.
else
message_admins("ERROR: planetary_fall step trigger lacks a planet to fall onto.")
return
diff --git a/code/game/objects/items/devices/communicator/phone.dm b/code/game/objects/items/devices/communicator/phone.dm
index f4c61ae7d7..8668627f8e 100644
--- a/code/game/objects/items/devices/communicator/phone.dm
+++ b/code/game/objects/items/devices/communicator/phone.dm
@@ -42,7 +42,7 @@
comm.visible_message("\icon[src] Connecting to [src].")
to_chat(user, "\icon[src] Attempting to call [comm].")
sleep(10)
- to_chat(user, "\icon[src] Dialing internally from [station_name()], [system_name()].") // Vorestation edit
+ to_chat(user, "\icon[src] Dialing internally from [station_name()], [system_name()].")
sleep(20) //If they don't have an exonet something is very wrong and we want a runtime.
to_chat(user, "\icon[src] Connection re-routed to [comm] at [comm.exonet.address].")
sleep(40)
diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm
index 4187cfc422..ae255d2f7b 100644
--- a/code/game/objects/items/devices/scanners.dm
+++ b/code/game/objects/items/devices/scanners.dm
@@ -266,22 +266,26 @@ REAGENT SCANNER
if(0)
to_chat(usr, "The scanner will now perform a basic analysis.")
-/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
+/obj/item/device/healthanalyzer/advanced //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
name = "advanced health analyzer"
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
advscan = 1
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
- icon_state = "advhealth"
+ icon_state = "health1"
-/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
- name = "advanced health analyzer"
+/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as radiation severity and minor brain damage
+ name = "enhanced health analyzer"
+ desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
advscan = 2
- icon_state = "advhealth"
+ origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
+ icon_state = "health2"
-/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as name and quantity of nonmed reagents in stomach
+/obj/item/device/healthanalyzer/phasic //reports all of the above, as well as name and quantity of nonmed reagents in stomach
name = "phasic health analyzer"
+ desc = "Possibly the most advanced health analyzer to ever have existed, utilising bluespace technology to determine almost everything worth knowing about a patient."
advscan = 3
- icon_state = "advhealth"
+ origin_tech = list(TECH_MAGNET = 7, TECH_BIO = 8)
+ icon_state = "health3"
/obj/item/device/analyzer
name = "analyzer"
diff --git a/code/game/objects/items/devices/text_to_speech.dm b/code/game/objects/items/devices/text_to_speech.dm
new file mode 100644
index 0000000000..bc0c9d5304
--- /dev/null
+++ b/code/game/objects/items/devices/text_to_speech.dm
@@ -0,0 +1,28 @@
+/obj/item/device/text_to_speech
+ name = "TTS device"
+ desc = "A device that speaks an inputted message. Given to crew which can not speak properly or at all."
+ icon = 'icons/obj/electronic_assemblies.dmi'
+ icon_state = "setup_small"
+ w_class = ITEMSIZE_SMALL
+ var/named
+
+/obj/item/device/text_to_speech/attack_self(mob/user as mob)
+ if(user.incapacitated(INCAPACITATION_ALL)) //Are you in a state to actual use the device?
+ to_chat(user, "You cannot activate the device in your state.")
+ return
+
+ if(!named)
+ to_chat(user, "You input your name into the device.")
+ name = "[initial(name)] ([user.real_name])"
+ desc = "[initial(desc)] This one is assigned to [user.real_name]."
+ named = 1
+ /* //Another way of naming the device. Gives more freedom, but could lead to issues.
+ device_name = copytext(sanitize(input(user, "What would you like to name your device? You must input a name before the device can be used.", "Name your device", "") as null|text),1,MAX_NAME_LEN)
+ name = "[initial(name)] - [device_name]"
+ named = 1
+ */
+
+ var/message = sanitize(input(user,"Choose a message to relay to those around you.") as text|null)
+ if(message)
+ var/obj/item/device/text_to_speech/O = src
+ audible_message("\icon[O] \The [O.name] states, \"[message]\"")
diff --git a/code/game/objects/items/paintkit.dm b/code/game/objects/items/paintkit.dm
index 259a054c16..61939b2325 100644
--- a/code/game/objects/items/paintkit.dm
+++ b/code/game/objects/items/paintkit.dm
@@ -66,7 +66,7 @@
var/new_light_overlay
/obj/item/device/kit/suit/can_customize(var/obj/item/I)
- return istype(I, /obj/item/clothing/head/helmet/space/void) || istype(I, /obj/item/clothing/suit/space/void) || istype(I, /obj/item/clothing/suit/storage/hooded/explorer)
+ return istype(I, /obj/item/clothing/head/helmet/space/void) || istype(I, /obj/item/clothing/suit/space/void) || istype(I, /obj/item/clothing/suit/storage/hooded)
/obj/item/device/kit/suit/set_info(var/kit_name, var/kit_desc, var/kit_icon, var/kit_icon_file = CUSTOM_ITEM_OBJ, var/kit_icon_override_file = CUSTOM_ITEM_MOB, var/additional_data)
..()
diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm
index b1f623081d..ea838cce0b 100644
--- a/code/game/objects/items/weapons/handcuffs.dm
+++ b/code/game/objects/items/weapons/handcuffs.dm
@@ -112,7 +112,9 @@ var/last_chew = 0
var/obj/item/organ/external/O = H.organs_by_name[(H.hand ? BP_L_HAND : BP_R_HAND)]
if (!O) return
- var/s = "[H.name] chews on \his [O.name]!"
+ var/datum/gender/T = gender_datums[H.get_visible_gender()]
+
+ var/s = "[H.name] chews on [T.his] [O.name]!"
H.visible_message(s, "You chew on your [O.name]!")
H.attack_log += text("\[[time_stamp()]\] [s] ([H.ckey])")
log_attack("[s] ([H.ckey])")
diff --git a/code/game/objects/items/weapons/material/chainsaw.dm b/code/game/objects/items/weapons/material/chainsaw.dm
index 7126fb3ef8..703512bf52 100644
--- a/code/game/objects/items/weapons/material/chainsaw.dm
+++ b/code/game/objects/items/weapons/material/chainsaw.dm
@@ -113,7 +113,8 @@ obj/item/weapon/chainsaw/examine(mob/user)
to_chat(usr, "The [src] feels like it contains roughtly [get_fuel()] units of fuel left.")
obj/item/weapon/chainsaw/suicide_act(mob/user)
- to_chat(viewers(user), "[user] is lying down and pulling the chainsaw into \him, it looks like \he's trying to commit suicide!")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ to_chat(viewers(user), "[user] is lying down and pulling the chainsaw into [TU.him], it looks like [TU.he] [TU.is] trying to commit suicide!")
return(BRUTELOSS)
obj/item/weapon/chainsaw/update_icon()
diff --git a/code/game/objects/items/weapons/material/knives.dm b/code/game/objects/items/weapons/material/knives.dm
index 02f48b15d0..f2528f5786 100644
--- a/code/game/objects/items/weapons/material/knives.dm
+++ b/code/game/objects/items/weapons/material/knives.dm
@@ -68,9 +68,10 @@
attack_verb = list("slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/material/knife/suicide_act(mob/user)
- viewers(user) << pick("\The [user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.", \
- "\The [user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.", \
- "\The [user] is slitting \his stomach open with \the [src]! It looks like \he's trying to commit seppuku.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << pick("\The [user] is slitting [TU.his] wrists with \the [src]! It looks like [TU.hes] trying to commit suicide.", \
+ "\The [user] is slitting [TU.his] throat with \the [src]! It looks like [TU.hes] trying to commit suicide.", \
+ "\The [user] is slitting [TU.his] stomach open with \the [src]! It looks like [TU.hes] trying to commit seppuku.")
return (BRUTELOSS)
/obj/item/weapon/material/knife/hook
@@ -99,6 +100,7 @@
force_divisor = 0.3 // 18 when hardness 60 (steel)
attack_verb = list("slashed", "chopped", "gouged", "ripped", "cut")
var/should_cleave = TRUE //Now hatchets inherit from the machete, and thus knives. Tables turned.
+ slot_flags = SLOT_BELT
// This cannot go into afterattack since some mobs delete themselves upon dying.
/obj/item/weapon/material/knife/machete/pre_attack(var/mob/living/target, var/mob/living/user)
diff --git a/code/game/objects/items/weapons/material/shards.dm b/code/game/objects/items/weapons/material/shards.dm
index 4fb7172563..ba7438a685 100644
--- a/code/game/objects/items/weapons/material/shards.dm
+++ b/code/game/objects/items/weapons/material/shards.dm
@@ -17,8 +17,9 @@
drops_debris = 0
/obj/item/weapon/material/shard/suicide_act(mob/user)
- viewers(user) << pick("\The [user] is slitting \his wrists with \the [src]! It looks like \he's trying to commit suicide.",
- "\The [user] is slitting \his throat with \the [src]! It looks like \he's trying to commit suicide.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << pick("\The [user] is slitting [TU.his] wrists with \the [src]! It looks like [TU.hes] trying to commit suicide.",
+ "\The [user] is slitting [TU.his] throat with \the [src]! It looks like [TU.hes] trying to commit suicide.")
return (BRUTELOSS)
/obj/item/weapon/material/shard/set_material(var/new_material)
diff --git a/code/game/objects/items/weapons/material/swords.dm b/code/game/objects/items/weapons/material/swords.dm
index e73bcc8f9c..9efe911360 100644
--- a/code/game/objects/items/weapons/material/swords.dm
+++ b/code/game/objects/items/weapons/material/swords.dm
@@ -19,7 +19,8 @@
return 0
/obj/item/weapon/material/sword/suicide_act(mob/user)
- viewers(user) << "[user] is falling on the [src.name]! It looks like \he's trying to commit suicide."
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << "[user] is falling on the [src.name]! It looks like [TU.he] [TU.is] trying to commit suicide."
return(BRUTELOSS)
/obj/item/weapon/material/sword/katana
@@ -29,5 +30,6 @@
slot_flags = SLOT_BELT | SLOT_BACK
/obj/item/weapon/material/sword/katana/suicide_act(mob/user)
- viewers(user) << "[user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku."
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ visible_message(span("danger", "[user] is slitting [TU.his] stomach open with \the [src.name]! It looks like [TU.hes] trying to commit seppuku."), span("danger", "You slit your stomach open with \the [src.name]!"), span("danger", "You hear the sound of flesh tearing open.")) // gory, but it gets the point across
return(BRUTELOSS)
diff --git a/code/game/objects/items/weapons/melee/energy.dm b/code/game/objects/items/weapons/melee/energy.dm
index c2952cfc1e..f7497ec3ff 100644
--- a/code/game/objects/items/weapons/melee/energy.dm
+++ b/code/game/objects/items/weapons/melee/energy.dm
@@ -39,9 +39,10 @@
set_light(0,0)
/obj/item/weapon/melee/energy/attack_self(mob/living/user as mob)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if (active)
if ((CLUMSY in user.mutations) && prob(50))
- user.visible_message("\The [user] accidentally cuts \himself with \the [src].",\
+ user.visible_message("\The [user] accidentally cuts [TU.himself] with \the [src].",\
"You accidentally cut yourself with \the [src].")
user.take_organ_damage(5,5)
deactivate(user)
@@ -57,10 +58,10 @@
return
/obj/item/weapon/melee/energy/suicide_act(mob/user)
- var/tempgender = "[user.gender == MALE ? "he's" : user.gender == FEMALE ? "she's" : "they are"]"
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if(active)
- user.visible_message(pick("\The [user] is slitting \his stomach open with \the [src]! It looks like [tempgender] trying to commit seppuku.",\
- "\The [user] is falling on \the [src]! It looks like [tempgender] trying to commit suicide."))
+ user.visible_message(pick("\The [user] is slitting [TU.his] stomach open with \the [src]! It looks like [TU.he] [TU.is] trying to commit seppuku.",\
+ "\The [user] is falling on \the [src]! It looks like [TU.he] [TU.is] trying to commit suicide."))
return (BRUTELOSS|FIRELOSS)
/*
@@ -104,7 +105,8 @@
..()
/obj/item/weapon/melee/energy/axe/suicide_act(mob/user)
- visible_message("\The [user] swings \the [src] towards \his head! It looks like \he's trying to commit suicide.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ visible_message("\The [user] swings \the [src] towards [TU.his] head! It looks like [TU.he] [TU.is] trying to commit suicide.")
return (BRUTELOSS|FIRELOSS)
/*
diff --git a/code/game/objects/items/weapons/melee/misc.dm b/code/game/objects/items/weapons/melee/misc.dm
index 3554cd45c0..a7f6565a2d 100644
--- a/code/game/objects/items/weapons/melee/misc.dm
+++ b/code/game/objects/items/weapons/melee/misc.dm
@@ -11,5 +11,6 @@
attack_verb = list("flogged", "whipped", "lashed", "disciplined")
suicide_act(mob/user)
- viewers(user) << "\The [user] is strangling \himself with \the [src]! It looks like \he's trying to commit suicide."
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ user.visible_message(span("danger", "\The [user] [T.is] strangling [T.himself] with \the [src]! It looks like [T.he] [T.is] trying to commit suicide."), span("danger", "You start to strangle yourself with \the [src]!"), span("danger", "You hear the sound of someone choking!"))
return (OXYLOSS)
diff --git a/code/game/objects/items/weapons/storage/firstaid.dm b/code/game/objects/items/weapons/storage/firstaid.dm
index 24ba099e8f..43b7c9e22b 100644
--- a/code/game/objects/items/weapons/storage/firstaid.dm
+++ b/code/game/objects/items/weapons/storage/firstaid.dm
@@ -128,6 +128,7 @@
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
new /obj/item/stack/medical/splint(src)
+ new /obj/item/device/healthanalyzer/advanced(src)
return
/obj/item/weapon/storage/firstaid/surgery
@@ -149,7 +150,7 @@
new /obj/item/weapon/surgical/bonegel(src)
new /obj/item/weapon/surgical/FixOVein(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
- new /obj/item/device/healthanalyzer/advanced(src)
+ new /obj/item/device/healthanalyzer/enhanced(src)
return
/obj/item/weapon/storage/firstaid/clotting
diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm
index ec3f3e2631..21bebfa399 100644
--- a/code/game/objects/items/weapons/storage/toolbox.dm
+++ b/code/game/objects/items/weapons/storage/toolbox.dm
@@ -68,26 +68,29 @@
item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi")
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
force = 14
+ var/powertools = FALSE
+
+/obj/item/weapon/storage/toolbox/syndicate/powertools
+ powertools = TRUE
/obj/item/weapon/storage/toolbox/syndicate/New() // This is found in maint, so it should have the basics, plus some gloves.
- ..()
- new /obj/item/clothing/gloves/yellow(src)
- new /obj/item/weapon/screwdriver(src)
- new /obj/item/weapon/wrench(src)
- new /obj/item/weapon/weldingtool(src)
- new /obj/item/weapon/crowbar(src)
- new /obj/item/weapon/wirecutters(src)
- new /obj/item/device/multitool(src)
-
-/obj/item/weapon/storage/toolbox/syndicate/powertools/New() // Available in the uplink and is the 'real' syndie toolbox.
- // ..() isn't called or else this box would contain the basic tools, power tools, and duplicate gloves.
- new /obj/item/clothing/gloves/yellow(src)
- new /obj/item/weapon/screwdriver/power(src)
- new /obj/item/weapon/weldingtool/experimental(src)
- new /obj/item/weapon/crowbar/power(src)
- new /obj/item/device/multitool(src)
- new /obj/item/stack/cable_coil/random(src,30)
- new /obj/item/device/analyzer(src)
+ ..() //all storage items need this to work properly!
+ if(powertools)
+ new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/weapon/screwdriver/power(src)
+ new /obj/item/weapon/weldingtool/experimental(src)
+ new /obj/item/weapon/crowbar/power(src)
+ new /obj/item/device/multitool(src)
+ new /obj/item/stack/cable_coil/random(src,30)
+ new /obj/item/device/analyzer(src)
+ else
+ new /obj/item/clothing/gloves/yellow(src)
+ new /obj/item/weapon/screwdriver(src)
+ new /obj/item/weapon/wrench(src)
+ new /obj/item/weapon/weldingtool(src)
+ new /obj/item/weapon/crowbar(src)
+ new /obj/item/weapon/wirecutters(src)
+ new /obj/item/device/multitool(src)
/obj/item/weapon/storage/toolbox/lunchbox
max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox
diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm
index f468d1d77e..268a8d5ad7 100644
--- a/code/game/objects/items/weapons/stunbaton.dm
+++ b/code/game/objects/items/weapons/stunbaton.dm
@@ -20,7 +20,8 @@
var/hitcost = 240
/obj/item/weapon/melee/baton/suicide_act(mob/user)
- user.visible_message("\The [user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ user.visible_message("\The [user] is putting the live [name] in [TU.his] mouth! It looks like [TU.he] [TU.is] trying to commit suicide.")
return (FIRELOSS)
/obj/item/weapon/melee/baton/New()
diff --git a/code/game/objects/items/weapons/surgery_tools.dm b/code/game/objects/items/weapons/surgery_tools.dm
index 96f5e30f69..50468951a4 100644
--- a/code/game/objects/items/weapons/surgery_tools.dm
+++ b/code/game/objects/items/weapons/surgery_tools.dm
@@ -69,8 +69,9 @@
attack_verb = list("drilled")
suicide_act(mob/user)
- viewers(user) << pick("\The [user] is pressing \the [src] to \his temple and activating it! It looks like \he's trying to commit suicide.",
- "\The [user] is pressing \the [src] to \his chest and activating it! It looks like \he's trying to commit suicide.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << pick("\The [user] is pressing \the [src] to [TU.his] temple and activating it! It looks like [TU.hes] trying to commit suicide.",
+ "\The [user] is pressing \the [src] to [TU.his] chest and activating it! It looks like [TU.hes] trying to commit suicide.")
return (BRUTELOSS)
/*
@@ -91,11 +92,12 @@
origin_tech = list(TECH_MATERIAL = 1, TECH_BIO = 1)
matter = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 5000)
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
-
+
suicide_act(mob/user)
- viewers(user) << pick("\The [user] is slitting \his wrists with the [src.name]! It looks like \he's trying to commit suicide.", \
- "\The [user] is slitting \his throat with the [src.name]! It looks like \he's trying to commit suicide.", \
- "\The [user] is slitting \his stomach open with the [src.name]! It looks like \he's trying to commit seppuku.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << pick("\The [user] is slitting [TU.his] wrists with the [src.name]! It looks like [TU.hes] trying to commit suicide.", \
+ "\The [user] is slitting [TU.his] throat with the [src.name]! It looks like [TU.hes] trying to commit suicide.", \
+ "\The [user] is slitting [TU.his] stomach open with the [src.name]! It looks like [TU.hes] trying to commit seppuku.")
return (BRUTELOSS)
/*
diff --git a/code/game/objects/items/weapons/tools.dm b/code/game/objects/items/weapons/tools.dm
index 74a3f6f418..ae6838d084 100644
--- a/code/game/objects/items/weapons/tools.dm
+++ b/code/game/objects/items/weapons/tools.dm
@@ -106,8 +106,9 @@
var/random_color = TRUE
suicide_act(mob/user)
- viewers(user) << pick("\The [user] is stabbing the [src.name] into \his temple! It looks like \he's trying to commit suicide.", \
- "\The [user] is stabbing the [src.name] into \his heart! It looks like \he's trying to commit suicide.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << pick("\The [user] is stabbing the [src.name] into [TU.his] temple! It looks like [TU.hes] trying to commit suicide.", \
+ "\The [user] is stabbing the [src.name] into [TU.his] heart! It looks like [TU.hes] trying to commit suicide.")
return(BRUTELOSS)
/obj/item/weapon/screwdriver/New()
diff --git a/code/game/objects/items/weapons/traps.dm b/code/game/objects/items/weapons/traps.dm
index 317dba9ba9..27927b8180 100644
--- a/code/game/objects/items/weapons/traps.dm
+++ b/code/game/objects/items/weapons/traps.dm
@@ -13,7 +13,8 @@
var/deployed = 0
/obj/item/weapon/beartrap/suicide_act(mob/user)
- viewers(user) << "[user] is putting the [src.name] on \his head! It looks like \he's trying to commit suicide."
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ viewers(user) << "[user] is putting the [src.name] on [T.his] head! It looks like [T.hes] trying to commit suicide."
return (BRUTELOSS)
/obj/item/weapon/beartrap/proc/can_use(mob/user)
diff --git a/code/game/objects/items/weapons/weaponry.dm b/code/game/objects/items/weapons/weaponry.dm
index 50434de460..8938e611c0 100644
--- a/code/game/objects/items/weapons/weaponry.dm
+++ b/code/game/objects/items/weapons/weaponry.dm
@@ -11,7 +11,8 @@
w_class = ITEMSIZE_SMALL
suicide_act(mob/user)
- viewers(user) << "[user] is impaling \himself with the [src.name]! It looks like \he's trying to commit suicide."
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ viewers(user) << "[user] is impaling [T.himself] with the [src.name]! It looks like [T.he] [T.is] trying to commit suicide."
return (BRUTELOSS|FIRELOSS)
/obj/item/weapon/nullrod/attack(mob/M as mob, mob/living/user as mob) //Paste from old-code to decult with a null rod.
diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm
index 42b7884169..53323bb4b9 100644
--- a/code/game/objects/structures/kitchen_spike.dm
+++ b/code/game/objects/structures/kitchen_spike.dm
@@ -19,7 +19,8 @@
to_chat(user, "The spike already has something on it, finish collecting its meat first!")
else
if(spike(G.affecting))
- visible_message("[user] has forced [G.affecting] onto the spike, killing \him instantly!")
+ var/datum/gender/T = gender_datums[G.affecting.get_visible_gender()]
+ visible_message("[user] has forced [G.affecting] onto the spike, killing [T.him] instantly!")
var/mob/M = G.affecting
M.forceMove(src)
qdel(G)
diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm
index 3bdbca1b54..9882ca4507 100644
--- a/code/game/objects/structures/watercloset.dm
+++ b/code/game/objects/structures/watercloset.dm
@@ -411,9 +411,10 @@
R.cell.charge -= 20
else
B.deductcharge(B.hitcost)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
user.visible_message( \
- "[user] was stunned by \his wet [O]!", \
- "[user] was stunned by \his wet [O]!")
+ "[user] was stunned by [TU.his] wet [O]!", \
+ "[user] was stunned by [TU.his] wet [O]!")
return 1
else if(istype(O, /obj/item/weapon/mop))
O.reagents.add_reagent("water", 5)
diff --git a/code/game/verbs/suicide.dm b/code/game/verbs/suicide.dm
index 8f6beee8d6..4a40ea97cb 100644
--- a/code/game/verbs/suicide.dm
+++ b/code/game/verbs/suicide.dm
@@ -73,14 +73,16 @@
return
log_and_message_admins("[key_name(src)] commited suicide")
-
+
+ var/datum/gender/T = gender_datums[get_visible_gender()]
+
var/suicidemsg
- suicidemsg = pick("[src] is attempting to bite \his tongue off! It looks like \he's trying to commit suicide.", \
- "[src] is jamming \his thumbs into \his eye sockets! It looks like \he's trying to commit suicide.", \
- "[src] is twisting \his own neck! It looks like \he's trying to commit suicide.", \
- "[src] is holding \his breath! It looks like \he's trying to commit suicide.")
+ suicidemsg = pick("[src] is attempting to bite [T.his] tongue off! It looks like [T.he] [T.is] trying to commit suicide.", \
+ "[src] is jamming [T.his] thumbs into [T.his] eye sockets! It looks like [T.he] [T.is] trying to commit suicide.", \
+ "[src] is twisting [T.his] own neck! It looks like [T.he] [T.is] trying to commit suicide.", \
+ "[src] is holding [T.his] breath! It looks like [T.he] [T.is] trying to commit suicide.")
if(isSynthetic())
- suicidemsg = "[src] is attempting to switch \his power off! It looks like \he's trying to commit suicide."
+ suicidemsg = "[src] is attempting to switch [T.his] power off! It looks like [T.he] [T.is] trying to commit suicide."
visible_message(suicidemsg)
adjustOxyLoss(max(175 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
@@ -125,7 +127,7 @@
if(confirm == "Yes")
suiciding = 1
- viewers(src) << "[src] is powering down. It looks like \he's trying to commit suicide."
+ viewers(src) << "[src] is powering down. It looks like they're trying to commit suicide."
//put em at -175
adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth()
@@ -145,7 +147,7 @@
if(confirm == "Yes")
suiciding = 1
- viewers(src) << "[src] is powering down. It looks like \he's trying to commit suicide."
+ viewers(src) << "[src] is powering down. It looks like they're trying to commit suicide."
//put em at -175
adjustOxyLoss(max(getMaxHealth() * 2 - getToxLoss() - getFireLoss() - getBruteLoss() - getOxyLoss(), 0))
updatehealth()
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 0c76648e77..4293fe224b 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -897,13 +897,13 @@ var/list/admin_verbs_event_manager = list(
if(!H.client)
usr << "Only mobs with clients can alter their own appearance."
return
-
+ var/datum/gender/T = gender_datums[H.get_visible_gender()]
switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel"))
if("Yes")
- log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.")
+ log_and_message_admins("has allowed [H] to change [T.his] appearance, without whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0)
if("No")
- log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.")
+ log_and_message_admins("has allowed [H] to change [T.his] appearance, with whitelisting of races.")
H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1)
feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
diff --git a/code/modules/client/preference_setup/loadout/loadout_utility.dm b/code/modules/client/preference_setup/loadout/loadout_utility.dm
index 02c711e76e..a8d694a9d6 100644
--- a/code/modules/client/preference_setup/loadout/loadout_utility.dm
+++ b/code/modules/client/preference_setup/loadout/loadout_utility.dm
@@ -8,6 +8,11 @@
display_name = "clipboard"
path = /obj/item/weapon/clipboard
+/datum/gear/utility/tts_device
+ display_name = "text to speech device"
+ path = /obj/item/device/text_to_speech
+ cost = 3 //Not extremely expensive, but it's useful for mute chracters.
+
/datum/gear/utility/communicator
display_name = "communicator selection"
path = /obj/item/device/communicator
diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm
index d31a9e390a..538bc56299 100644
--- a/code/modules/clothing/clothing.dm
+++ b/code/modules/clothing/clothing.dm
@@ -196,7 +196,7 @@
gender = PLURAL //Carn: for grammarically correct text-parsing
w_class = ITEMSIZE_SMALL
icon = 'icons/obj/clothing/gloves.dmi'
- siemens_coefficient = 0.75
+ siemens_coefficient = 0.9
var/wired = 0
var/obj/item/weapon/cell/cell = 0
var/fingerprint_chance = 0 //How likely the glove is to let fingerprints through
diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm
index d7e0362272..ef9d0e713d 100644
--- a/code/modules/clothing/gloves/color.dm
+++ b/code/modules/clothing/gloves/color.dm
@@ -6,21 +6,22 @@
permeability_coefficient = 0.05
/obj/item/clothing/gloves/fyellow //Cheap Chinese Crap
- desc = "These gloves are cheap copies of the coveted gloves, no way this can end badly."
+ desc = "These gloves are cheap copies of proper insulated gloves. No way this can end badly."
name = "budget insulated gloves"
icon_state = "yellow"
- siemens_coefficient = 1 //Set to a default of 1, gets overridden in New()
+ siemens_coefficient = 1 //Set to a default of 1, gets overridden in initialize()
permeability_coefficient = 0.05
- New()
- //average of 0.5, somewhat better than regular gloves' 0.75
- siemens_coefficient = pick(0,0.1,0.3,0.5,0.5,0.75,1.35)
+/obj/item/clothing/gloves/fyellow/initialize()
+ . = ..()
+ //Picks a value between 0 and 1, in 5% increments
+ var/shock_pick = rand(0,20)
+ siemens_coefficient = shock_pick * 0.05
/obj/item/clothing/gloves/black
desc = "These work gloves are thick and fire-resistant."
name = "black gloves"
icon_state = "black"
- siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
diff --git a/code/modules/clothing/gloves/miscellaneous.dm b/code/modules/clothing/gloves/miscellaneous.dm
index ea194e1a51..27db4424d7 100644
--- a/code/modules/clothing/gloves/miscellaneous.dm
+++ b/code/modules/clothing/gloves/miscellaneous.dm
@@ -16,7 +16,6 @@
name = "forensic gloves"
icon_state = "forensic"
item_state = "black"
- siemens_coefficient = 0.50
permeability_coefficient = 0.05
cold_protection = HANDS
@@ -81,14 +80,13 @@
icon_state = "leather"
item_state_slots = list(slot_r_hand_str = "lightbrown", slot_l_hand_str = "lightbrown")
permeability_coefficient = 0.05
- siemens_coefficient = 0.50 //thick work gloves
+ siemens_coefficient = 0.75 //thick work gloves
/obj/item/clothing/gloves/duty
desc = "These brown duty gloves are made from a durable synthetic."
name = "work gloves"
icon_state = "work"
item_state = "wgloves"
- siemens_coefficient = 0.50
armor = list(melee = 10, bullet = 10, laser = 10, energy = 5, bomb = 0, bio = 0, rad = 0)
/obj/item/clothing/gloves/tactical
@@ -97,7 +95,7 @@
icon_state = "work"
item_state = "wgloves"
force = 5
- siemens_coefficient = 0.50
+ siemens_coefficient = 0.75
permeability_coefficient = 0.05
armor = list(melee = 30, bullet = 10, laser = 10, energy = 15, bomb = 20, bio = 0, rad = 0)
diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm
index c60bdb1e70..9308e44cb0 100644
--- a/code/modules/clothing/spacesuits/rig/modules/computer.dm
+++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm
@@ -46,9 +46,6 @@
var/obj/item/ai_card // Reference to the MMI, posibrain, intellicard or pAI card previously holding the AI.
var/obj/item/ai_verbs/verb_holder
-/mob
- var/get_rig_stats = 0
-
/obj/item/rig_module/ai_container/process()
if(integrated_ai)
var/obj/item/weapon/rig/rig = get_rig()
diff --git a/code/modules/clothing/spacesuits/void/station.dm b/code/modules/clothing/spacesuits/void/station.dm
index 3c5dc32e68..57df9d7c0a 100644
--- a/code/modules/clothing/spacesuits/void/station.dm
+++ b/code/modules/clothing/spacesuits/void/station.dm
@@ -153,10 +153,10 @@
//Medical Streamlined Voidsuit
/obj/item/clothing/head/helmet/space/void/medical/alt
name = "streamlined medical voidsuit helmet"
- desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a fetching green."
+ desc = "A trendy, lightly radiation-shielded voidsuit helmet trimmed in a sleek blue."
icon_state = "rig0-medicalalt"
armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 80)
- light_overlay = "helmet_light_dual_green"
+ light_overlay = "helmet_light_dual_blue"
/obj/item/clothing/suit/space/void/medical/alt
icon_state = "rig-medicalalt"
diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm
index 97fc8721a8..94f49a2b1a 100644
--- a/code/modules/clothing/suits/armor.dm
+++ b/code/modules/clothing/suits/armor.dm
@@ -269,7 +269,7 @@
//Medical
/obj/item/clothing/suit/armor/vest/ert/medical
name = "emergency response team medical armor"
- desc = "A set of armor worn by medical members of the Emergency Response Team. Has red and white highlights."
+ desc = "A set of armor worn by medical members of the Emergency Response Team. Has blue and white highlights."
icon_state = "ertarmor_med"
//New Vests
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 9b88496119..5ecef18d7d 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -782,7 +782,7 @@ obj/item/clothing/suit/storage/toggle/peacoat
hooded = TRUE
hoodtype = /obj/item/clothing/head/hood/explorer
siemens_coefficient = 0.9
- armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50) // Inferior to sec vests in bullet/laser but better for environmental protection.
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35) // Inferior to sec vests in bullet/laser but better for environmental protection.
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/gun,
@@ -807,7 +807,7 @@ obj/item/clothing/suit/storage/toggle/peacoat
flags_inv = HIDEEARS | BLOCKHAIR
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
siemens_coefficient = 0.9
- armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 50, bio = 100, rad = 50)
+ armor = list(melee = 30, bullet = 20, laser = 20, energy = 20, bomb = 35, bio = 75, rad = 35)
/obj/item/clothing/suit/varsity
name = "black varsity jacket"
diff --git a/code/modules/events/rogue_drones.dm b/code/modules/events/rogue_drones.dm
index b597837d17..768628f8fb 100644
--- a/code/modules/events/rogue_drones.dm
+++ b/code/modules/events/rogue_drones.dm
@@ -26,13 +26,13 @@
var/rng = rand(1,5)
switch(rng)
if(1)
- msg = "A combat drone wing operating near various asteroids in the Kara subsystem has failed to return from a anti-piracy sweep. If any are sighted, \
+ msg = "A combat drone wing operating in close orbit above Sif has failed to return from a anti-piracy sweep. If any are sighted, \
approach with caution."
if(2)
- msg = "Contact has been lost with a combat drone wing operating out in the asteroid field near Kara. If any are sighted in the area, approach with \
+ msg = "Contact has been lost with a combat drone wing in Sif orbit. If any are sighted in the area, approach with \
caution."
if(3)
- msg = "Unidentified hackers have targeted a combat drone wing deployed in the Kara subsystem. If any are sighted in the area, approach with caution."
+ msg = "Unidentified hackers have targeted a combat drone wing deployed around Sif. If any are sighted in the area, approach with caution."
if(4)
msg = "A passing derelict ship's drone defense systems have just activated. If any are sighted in the area, use caution."
if(5)
diff --git a/code/modules/games/cards.dm b/code/modules/games/cards.dm
index 31e2f95727..cbeff5fb34 100644
--- a/code/modules/games/cards.dm
+++ b/code/modules/games/cards.dm
@@ -173,7 +173,8 @@
H.concealed = 1
H.update_icon()
if(user==target)
- user.visible_message("\The [user] deals [dcard] card(s) to \himself.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ user.visible_message("\The [user] deals [dcard] card(s) to [TU.himself].")
else
user.visible_message("\The [user] deals [dcard] card(s) to \the [target].")
H.throw_at(get_step(target,target.dir),10,1,H)
diff --git a/code/modules/genetics/side_effects.dm b/code/modules/genetics/side_effects.dm
index f3a9efb6d2..fbbce61398 100644
--- a/code/modules/genetics/side_effects.dm
+++ b/code/modules/genetics/side_effects.dm
@@ -68,7 +68,8 @@
duration = 10*30
start(mob/living/carbon/human/H)
- H.emote("me", 1, "has drool running down from [H.gender == MALE ? "his" : H.gender == FEMALE ? "her" : "their"] mouth.")
+ var/datum/gender/T = gender_datums[H.get_visible_gender()]
+ H.emote("me", 1, "has drool running down from [T.his] mouth.")
finish(mob/living/carbon/human/H)
if(!H.reagents.has_reagent("anti_toxin"))
diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm
index c921ac5164..442e8e42fe 100644
--- a/code/modules/library/lib_machines.dm
+++ b/code/modules/library/lib_machines.dm
@@ -149,8 +149,9 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f
dat += "7. Access the Forbidden Lore Vault
"
if(src.arcanecheckout)
new /obj/item/weapon/book/tome(src.loc)
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
user << "Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it."
- user.visible_message("\The [user] stares at the blank screen for a few moments, \his expression frozen in fear. When \he finally awakens from it, \he looks a lot older.", 2)
+ user.visible_message("\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2)
src.arcanecheckout = 0
if(1)
// Inventory
diff --git a/code/modules/lore_codex/news_data/main.dm b/code/modules/lore_codex/news_data/main.dm
index 52ff382199..fec4ae7c3e 100644
--- a/code/modules/lore_codex/news_data/main.dm
+++ b/code/modules/lore_codex/news_data/main.dm
@@ -5,6 +5,7 @@
articles. You are encouraged to check back frequently."
children = list(
/datum/lore/codex/page/article1,
+ /datum/lore/codex/page/article2,
/datum/lore/codex/page/about_news,
)
@@ -31,4 +32,17 @@
\
The bill passed fairly quietly this afternoon, owing to the closed nature of the Bicamarial. A post-facto Occulum poll of voting-age\
VGA citizens suggest that fully 80% of them did not even know what a Promethean was prior to the most recent general election. A\
- follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation."
\ No newline at end of file
+ follow-up poll indicates that an appreciable number of Sivians do not support the framework's current implementation."
+
+/datum/lore/codex/page/article2
+ name = "2/3/62-- Corporate Coup on Aetolus"
+ data = "A recent incident aboard the NRS Prometheus issued in a major change in the leadership of the Promethean homeworld. During \
+ a late-night meeting of the Nanotrasen Board of Trustees, several high-ranking personnel, including Head of Research Naomi Harper,\
+ announced their intention to assume direct control of Nanotrasen facilities in the system. It is known that several dissenting \
+ members of the board were shot to death by Promethean test subjects. Our information comes from a survivor of the coup, who for \
+ reasons of security has chosen to remain annonymous. All outbound shipments affiliated with Nanotrasen have ceased.\
+
\
+ While neither Grayson Manufacturies nor Nanotrasen have made an official statement, Nanotrasen CEO Albary Moravec has called the \
+ incident \"shocking, if the allegations are to be believed\" and has assured shareholders that Nanotrasen will respond to the \
+ incident with as much force as it warrents.
Requests for a statement directed to the Board of Trustees or Dr. Harper were \
+ not responded to. Free Traders are recommended to stay clear of the region until the situation resolves itself."
diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm
index 0f76f6172e..d212851071 100644
--- a/code/modules/materials/material_sheets.dm
+++ b/code/modules/materials/material_sheets.dm
@@ -94,6 +94,13 @@
apply_colour = 1
no_variants = FALSE
+/obj/item/stack/material/lead
+ name = "lead"
+ icon_state = "sheet-adamantine"
+ default_type = "lead"
+ apply_colour = 1
+ no_variants = TRUE
+
/obj/item/stack/material/sandstone
name = "sandstone brick"
icon_state = "sheet-sandstone"
diff --git a/code/modules/materials/materials.dm b/code/modules/materials/materials.dm
index af5e1b7475..2fa2b1dbbe 100644
--- a/code/modules/materials/materials.dm
+++ b/code/modules/materials/materials.dm
@@ -99,6 +99,7 @@ var/list/name_to_material
var/conductivity = null // How conductive the material is. Iron acts as the baseline, at 10.
var/list/composite_material // If set, object matter var will be a list containing these values.
var/luminescence
+ var/radiation_resistance = 20 // Radiation resistance, used in calculating how much radiation a material absorbs. Equivlent to weight, but does not affect weaponry.
// Placeholder vars for the time being, todo properly integrate windows/light tiles/rods.
var/created_window
@@ -236,6 +237,7 @@ var/list/name_to_material
weight = 22
stack_origin_tech = list(TECH_MATERIAL = 5)
door_icon_base = "stone"
+ radiation_resistance = 80 //dense, so it's okay-ish as rad shielding.
/material/diamond
name = "diamond"
@@ -261,6 +263,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 4)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
+ radiation_resistance = 120 //gold is dense.
/material/gold/bronze //placeholder for ashtrays
name = "bronze"
@@ -276,7 +279,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 3)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
-
+ radiation_resistance = 22
//R-UST port
/material/supermatter
name = "supermatter"
@@ -337,6 +340,7 @@ var/list/name_to_material
door_icon_base = "stone"
sheet_singular_name = "brick"
sheet_plural_name = "bricks"
+ radiation_resistance = 22
/material/stone/marble
name = "marble"
@@ -345,6 +349,7 @@ var/list/name_to_material
hardness = 100
integrity = 201 //hack to stop kitchen benches being flippable, todo: refactor into weight system
stack_type = /obj/item/stack/material/marble
+ radiation_resistance = 26
/material/steel
name = DEFAULT_WALL_MATERIAL
@@ -391,6 +396,7 @@ var/list/name_to_material
conductivity = 13 // For the purposes of balance.
stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT, "platinum" = SHEET_MATERIAL_AMOUNT) //todo
+ radiation_resistance = 60 //Plasteel is presumably dense and is the dominant material used in the engine. Still not great.
// Very rare alloy that is reflective, should be used sparingly.
/material/durasteel
@@ -408,6 +414,7 @@ var/list/name_to_material
reflectivity = 0.7 // Not a perfect mirror, but close.
stack_origin_tech = list(TECH_MATERIAL = 8)
composite_material = list("plasteel" = SHEET_MATERIAL_AMOUNT, "diamond" = SHEET_MATERIAL_AMOUNT) //shrug
+ radiation_resistance = 120 //it reflects XRAY LASERS.
/material/plasteel/titanium
name = "titanium"
@@ -436,6 +443,7 @@ var/list/name_to_material
window_options = list("One Direction" = 1, "Full Window" = 4, "Windoor" = 2)
created_window = /obj/structure/window/basic
rod_product = /obj/item/stack/material/glass/reinforced
+ radiation_resistance = 15
/material/glass/build_windows(var/mob/living/user, var/obj/item/stack/used_stack)
@@ -527,6 +535,7 @@ var/list/name_to_material
created_window = /obj/structure/window/reinforced
wire_product = null
rod_product = null
+ radiation_resistance = 30
/material/glass/phoron
name = "borosilicate glass"
@@ -554,6 +563,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 2)
composite_material = list() //todo
rod_product = null
+ radiation_resistance = 30
/material/plastic
name = "plastic"
@@ -568,6 +578,7 @@ var/list/name_to_material
conductivity = 2 // For the sake of material armor diversity, we're gonna pretend this plastic is a good insulator.
melting_point = T0C+371 //assuming heat resistant plastic
stack_origin_tech = list(TECH_MATERIAL = 3)
+ radiation_resistance = 12
/material/plastic/holographic
name = "holoplastic"
@@ -618,6 +629,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 2)
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
+ radiation_resistance = 27
/material/iron
name = "iron"
@@ -627,6 +639,17 @@ var/list/name_to_material
conductivity = 10
sheet_singular_name = "ingot"
sheet_plural_name = "ingots"
+ radiation_resistance = 22
+
+/material/lead
+ name = "lead"
+ stack_type = /obj/item/stack/material/lead
+ icon_colour = "#273956"
+ weight = 35
+ conductivity = 10
+ sheet_singular_name = "ingot"
+ sheet_plural_name = "ingots"
+ radiation_resistance = 350 //actual radiation shielding, yay...
// Adminspawn only, do not let anyone get this.
/material/alienalloy
@@ -640,6 +663,7 @@ var/list/name_to_material
hardness = 500
weight = 500
protectiveness = 80 // 80%
+ radiation_resistance = 500
// Likewise.
/material/alienalloy/elevatorium
@@ -697,6 +721,7 @@ var/list/name_to_material
destruction_desc = "splinters"
sheet_singular_name = "plank"
sheet_plural_name = "planks"
+ radiation_resistance = 18
/material/wood/log
name = MAT_LOG
@@ -739,7 +764,7 @@ var/list/name_to_material
stack_origin_tech = list(TECH_MATERIAL = 1)
door_icon_base = "wood"
destruction_desc = "crumples"
-
+ radiation_resistance = 1
/material/snow
name = MAT_SNOW
stack_type = /obj/item/stack/material/snow
@@ -756,7 +781,7 @@ var/list/name_to_material
destruction_desc = "crumples"
sheet_singular_name = "pile"
sheet_plural_name = "pile" //Just a bigger pile
-
+ radiation_resistance = 1
/material/cloth //todo
name = "cloth"
stack_origin_tech = list(TECH_MATERIAL = 2)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index d891af76ce..745025e3e3 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -630,8 +630,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
)
toggle_visibility(TRUE)
else
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
user.visible_message ( \
- "\The [user] just tried to smash \his book into that ghost! It's not very effective.", \
+ "\The [user] just tried to smash [T.his] book into that ghost! It's not very effective.", \
"You get the feeling that the ghost can't become any more visible." \
)
diff --git a/code/modules/mob/gender.dm b/code/modules/mob/gender.dm
index 393e0fb6c2..0e9bf244b5 100644
--- a/code/modules/mob/gender.dm
+++ b/code/modules/mob/gender.dm
@@ -18,6 +18,9 @@
var/has = "have"
var/is = "are"
var/does = "do"
+ var/himself = "themselves"
+ var/s = ""
+ var/hes = "they're"
/datum/gender/male
key = "male"
@@ -30,6 +33,9 @@
has = "has"
is = "is"
does = "does"
+ himself = "himself"
+ s = "s"
+ hes = "he's"
/datum/gender/female
key = "female"
@@ -42,6 +48,9 @@
has = "has"
is = "is"
does = "does"
+ himself = "herself"
+ s = "s"
+ hes = "she's"
/datum/gender/neuter
key = "neuter"
@@ -54,3 +63,6 @@
has = "has"
is = "is"
does = "does"
+ himself = "itself"
+ s = "s"
+ hes = "it's"
diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm
index 797a106ae7..54551db698 100644
--- a/code/modules/mob/living/carbon/carbon.dm
+++ b/code/modules/mob/living/carbon/carbon.dm
@@ -168,8 +168,9 @@
if (src.health >= config.health_threshold_crit)
if(src == M && istype(src, /mob/living/carbon/human))
var/mob/living/carbon/human/H = src
+ var/datum/gender/T = gender_datums[H.get_visible_gender()]
src.visible_message( \
- text("[src] examines [].",src.gender==MALE?"himself":"herself"), \
+ "[src] examines [T.himself].", \
"You check yourself for injuries." \
)
@@ -243,33 +244,30 @@
src.ExtinguishMob()
src.fire_stacks = 0
else
- var/t_him = "it"
- if (src.gender == MALE)
- t_him = "him"
- else if (src.gender == FEMALE)
- t_him = "her"
if (istype(src,/mob/living/carbon/human) && src:w_uniform)
var/mob/living/carbon/human/H = src
H.w_uniform.add_fingerprint(M)
var/show_ssd
var/mob/living/carbon/human/H = src
+ var/datum/gender/T = gender_datums[H.get_visible_gender()] // make sure to cast to human before using get_gender() or get_visible_gender()!
if(istype(H)) show_ssd = H.species.show_ssd
if(show_ssd && !client && !teleop)
- M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \
- "You shake [src], but they do not respond... Maybe they have S.S.D?")
+ M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
+ "You shake [src], but [T.he] [T.does] not respond... Maybe [T.he] [T.has] S.S.D?")
else if(lying || src.sleeping)
src.sleeping = max(0,src.sleeping-5)
if(src.sleeping == 0)
src.resting = 0
if(H) H.in_stasis = 0 //VOREStation Add - Just In Case
- M.visible_message("[M] shakes [src] trying to wake [t_him] up!", \
- "You shake [src] trying to wake [t_him] up!")
+ M.visible_message("[M] shakes [src] trying to wake [T.him] up!", \
+ "You shake [src] trying to wake [T.him] up!")
else
var/mob/living/carbon/human/hugger = M
+ var/datum/gender/TM = gender_datums[M.get_visible_gender()]
if(M.resting == 1) //Are they resting on the ground?
- M.visible_message("[M] grabs onto [src] and pulls \himself up", \
- "You grip onto [src] and pull yourself up off the ground!") //AHHH gender checks are hard, but this should work
+ M.visible_message("[M] grabs onto [src] and pulls [TM.himself] up", \
+ "You grip onto [src] and pull yourself up off the ground!")
if(M.fire_stacks >= (src.fire_stacks + 3)) //Fire checks.
src.adjust_fire_stacks(1)
M.adjust_fire_stacks(-1)
@@ -280,8 +278,8 @@
else if(istype(hugger))
hugger.species.hug(hugger,src)
else
- M.visible_message("[M] hugs [src] to make [t_him] feel better!", \
- "You hug [src] to make [t_him] feel better!")
+ M.visible_message("[M] hugs [src] to make [T.him] feel better!", \
+ "You hug [src] to make [T.him] feel better!")
if(M.fire_stacks >= (src.fire_stacks + 3))
src.adjust_fire_stacks(1)
M.adjust_fire_stacks(-1)
diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm
index d18b7c538e..2e6d022b4f 100644
--- a/code/modules/mob/living/carbon/human/emote.dm
+++ b/code/modules/mob/living/carbon/human/emote.dm
@@ -1,5 +1,7 @@
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
var/param = null
+
+ var/datum/gender/T = gender_datums[get_visible_gender()]
if (findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
@@ -58,13 +60,13 @@
use_sound = 'sound/machines/synth_no.ogg'
else if(act == "rcough")
display_msg = "emits a robotic cough"
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
else
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
else if(act == "rsneeze")
display_msg = "emits a robotic sneeze"
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
else
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
@@ -162,7 +164,7 @@
if ("choke")
if(miming)
- message = "clutches [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] throat desperately!"
+ message = "clutches [T.his] throat desperately!"
m_type = 1
else
if (!muzzled)
@@ -182,14 +184,14 @@
if ("flap")
if (!src.restrained())
- message = "flaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] wings."
+ message = "flaps [T.his] wings."
m_type = 2
if(miming)
m_type = 1
if ("aflap")
if (!src.restrained())
- message = "flaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] wings ANGRILY!"
+ message = "flaps [T.his] wings ANGRILY!"
m_type = 2
if(miming)
m_type = 1
@@ -243,7 +245,7 @@
robotic = 1
if(!robotic)
message = "coughs!"
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
if(species.female_cough_sounds)
playsound(src, pick(species.female_cough_sounds), 120)
else
@@ -252,7 +254,7 @@
else
message = "emits a robotic cough"
var/use_sound
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
else
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
@@ -365,7 +367,7 @@
message = "cries."
m_type = 2
else
- message = "makes a weak noise. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"] [get_visible_gender() == NEUTER ? "frown" : "frowns"]."
+ message = "makes a weak noise. [T.he] [get_visible_gender() == NEUTER ? "frown" : "frowns"]." // no good, non-unwieldy alternative to this ternary at the moment
m_type = 2
if ("sigh")
@@ -468,7 +470,7 @@
m_type = 1
if("shake")
- message = "shakes [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] head."
+ message = "shakes [T.his] head."
m_type = 1
if ("shrug")
@@ -517,7 +519,7 @@
robotic = 1
if(!robotic)
message = "sneezes."
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
playsound(src, species.female_sneeze_sound, 70)
else
playsound(src, species.male_sneeze_sound, 70)
@@ -525,7 +527,7 @@
else
message = "emits a robotic sneeze"
var/use_sound
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
else
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
@@ -597,7 +599,7 @@
if (M)
message = "hugs [M]."
else
- message = "hugs [get_visible_gender() == MALE ? "himself" : get_visible_gender() == FEMALE ? "herself" : "themselves"]."
+ message = "hugs [T.himself]."
if ("handshake")
m_type = 1
@@ -615,7 +617,7 @@
if (M.canmove && !M.r_hand && !M.restrained())
message = "shakes hands with [M]."
else
- message = "holds out [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] hand to [M]."
+ message = "holds out [T.his] hand to [M]."
if("dap")
m_type = 1
@@ -629,7 +631,7 @@
if (M)
message = "gives daps to [M]."
else
- message = "sadly can't find anybody to give daps to, and daps [get_visible_gender() == MALE ? "himself" : get_visible_gender() == FEMALE ? "herself" : "themselves"]. Shameful."
+ message = "sadly can't find anybody to give daps to, and daps [T.himself]. Shameful."
if("slap", "slaps")
m_type = 1
@@ -644,7 +646,7 @@
message = "slaps [M] across the face. Ouch!"
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
else
- message = "slaps [get_visible_gender() == MALE ? "himself" : get_visible_gender() == FEMALE ? "herself" : "themselves"]!"
+ message = "slaps [T.himself]!"
playsound(loc, 'sound/effects/snap.ogg', 50, 1)
if("scream", "screams")
@@ -656,7 +658,7 @@
message = "[species.scream_verb]!"
m_type = 2
/* Removed, pending the location of some actually good, properly licensed sounds.
- if(gender == FEMALE)
+ if(get_gender() == FEMALE)
playsound(loc, "[species.female_scream_sound]", 80, 1)
else
playsound(loc, "[species.male_scream_sound]", 80, 1) //default to male screams if no gender is present.
@@ -681,7 +683,7 @@
to_chat(usr, "You need at least one hand in good working order to snap your fingers.")
return
- message = "snaps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] fingers."
+ message = "snaps [T.his] fingers."
playsound(loc, 'sound/effects/fingersnap.ogg', 50, 1, -3)
if("swish")
@@ -735,8 +737,10 @@
set name = "Set Pose"
set desc = "Sets a description which will be shown when someone examines you."
set category = "IC"
+
+ var/datum/gender/T = gender_datums[get_visible_gender()]
- pose = sanitize(input(usr, "This is [src]. [get_visible_gender() == MALE ? "He" : get_visible_gender() == FEMALE ? "She" : "They"]...", "Pose", null) as text)
+ pose = sanitize(input(usr, "This is [src]. [T.he]...", "Pose", null) as text)
/mob/living/carbon/human/verb/set_flavor()
set name = "Set Flavour Text"
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index dca45248dd..28fbf81b25 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -85,7 +85,7 @@
var/list/msg = list("*---------*\nThis is ")
- var/datum/gender/T = gender_datums[get_gender()]
+ var/datum/gender/T = gender_datums[get_visible_gender()]
if(skipjumpsuit && skipface) //big suits/masks/helmets make it hard to tell their gender
T = gender_datums[PLURAL]
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index dfade3414b..2fd8f4170f 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -773,7 +773,8 @@
/mob/living/carbon/human/proc/play_xylophone()
if(!src.xylophone)
- visible_message("\The [src] begins playing \his ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.")
+ var/datum/gender/T = gender_datums[get_visible_gender()]
+ visible_message("\The [src] begins playing [T.his] ribcage like a xylophone. It's quite spooky.","You begin to play a spooky refrain on your ribcage.","You hear a spooky xylophone melody.")
var/song = pick('sound/effects/xylophone1.ogg','sound/effects/xylophone2.ogg','sound/effects/xylophone3.ogg')
playsound(loc, song, 50, 1, -1)
xylophone = 1
@@ -863,8 +864,8 @@
gender = NEUTER
regenerate_icons()
check_dna()
-
- visible_message("\The [src] morphs and changes [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!")
+ var/datum/gender/T = gender_datums[get_visible_gender()]
+ visible_message("\The [src] morphs and changes [T.his] appearance!", "You change your appearance!", "Oh, god! What the hell was that? It sounded like flesh getting squished and bone ground into a different shape!")
/mob/living/carbon/human/proc/remotesay()
set name = "Project mind"
@@ -932,10 +933,13 @@
remoteview_target = null
reset_view(0)
-/mob/living/carbon/human/proc/get_visible_gender()
+/mob/living/carbon/human/get_visible_gender()
if(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT && ((head && head.flags_inv & HIDEMASK) || wear_mask))
- return NEUTER
- return gender
+ return PLURAL //plural is the gender-neutral default
+ if(species)
+ if(species.ambiguous_genders)
+ return PLURAL // regardless of what you're wearing, your gender can't be figured out
+ return get_gender()
/mob/living/carbon/human/proc/increase_germ_level(n)
if(gloves)
@@ -1091,14 +1095,17 @@
var/self = 0
if(usr.stat || usr.restrained() || !isliving(usr)) return
+
+ var/datum/gender/TU = gender_datums[usr.get_visible_gender()]
+ var/datum/gender/T = gender_datums[get_visible_gender()]
if(usr == src)
self = 1
if(!self)
- usr.visible_message("[usr] kneels down, puts \his hand on [src]'s wrist and begins counting their pulse.",\
+ usr.visible_message("[usr] kneels down, puts [TU.his] hand on [src]'s wrist and begins counting [T.his] pulse.",\
"You begin counting [src]'s pulse")
else
- usr.visible_message("[usr] begins counting their pulse.",\
+ usr.visible_message("[usr] begins counting [T.his] pulse.",\
"You begin counting your pulse.")
if(src.pulse)
@@ -1356,9 +1363,9 @@
if(..(slipped_on,stun_duration))
return 1
-/mob/living/carbon/human/proc/undislocate()
+/mob/living/carbon/human/proc/relocate()
set category = "Object"
- set name = "Undislocate Joint"
+ set name = "Relocate Joint"
set desc = "Pop a joint back into place. Extremely painful."
set src in view(1)
@@ -1406,7 +1413,7 @@
else
U << "You pop [S]'s [current_limb.joint] back in!"
S << "[U] pops your [current_limb.joint] back in!"
- current_limb.undislocate()
+ current_limb.relocate()
/mob/living/carbon/human/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
if(W in organs)
diff --git a/code/modules/mob/living/carbon/human/human_attackhand.dm b/code/modules/mob/living/carbon/human/human_attackhand.dm
index 587c17d52e..7acb587fbd 100644
--- a/code/modules/mob/living/carbon/human/human_attackhand.dm
+++ b/code/modules/mob/living/carbon/human/human_attackhand.dm
@@ -18,6 +18,7 @@
return null
/mob/living/carbon/human/attack_hand(mob/living/carbon/M as mob)
+ var/datum/gender/TT = gender_datums[M.get_visible_gender()]
var/mob/living/carbon/human/H = M
if(istype(H))
var/obj/item/organ/external/temp = H.organs_by_name["r_hand"]
@@ -131,7 +132,7 @@
var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src)
if(buckled)
- M << "You cannot grab [src], \he is buckled in!"
+ M << "You cannot grab [src], [TT.he] is buckled in!"
if(!G) //the grab will delete itself in New if affecting is anchored
return
M.put_in_active_hand(G)
@@ -228,7 +229,7 @@
if(!src.lying)
attack_message = "[H] attempted to strike [src], but missed!"
else
- attack_message = "[H] attempted to strike [src], but \he rolled out of the way!"
+ attack_message = "[H] attempted to strike [src], but [TT.he] rolled out of the way!"
src.set_dir(pick(cardinal))
miss_type = 1
@@ -417,8 +418,10 @@
user << "Someone is already applying pressure to [user == src? "your [organ.name]" : "[src]'s [organ.name]"]."
return 0
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+
if(user == src)
- user.visible_message("\The [user] starts applying pressure to \his [organ.name]!", "You start applying pressure to your [organ.name]!")
+ user.visible_message("\The [user] starts applying pressure to [TU.his] [organ.name]!", "You start applying pressure to your [organ.name]!")
else
user.visible_message("\The [user] starts applying pressure to [src]'s [organ.name]!", "You start applying pressure to [src]'s [organ.name]!")
spawn(0)
@@ -430,7 +433,7 @@
organ.applied_pressure = null
if(user == src)
- user.visible_message("\The [user] stops applying pressure to \his [organ.name]!", "You stop applying pressure to your [organ]!")
+ user.visible_message("\The [user] stops applying pressure to [TU.his] [organ.name]!", "You stop applying pressure to your [organ]!")
else
user.visible_message("\The [user] stops applying pressure to [src]'s [organ.name]!", "You stop applying pressure to [src]'s [organ.name]!")
diff --git a/code/modules/mob/living/carbon/human/species/species_attack.dm b/code/modules/mob/living/carbon/human/species/species_attack.dm
index 15bc491a1a..2654715f74 100644
--- a/code/modules/mob/living/carbon/human/species/species_attack.dm
+++ b/code/modules/mob/living/carbon/human/species/species_attack.dm
@@ -24,12 +24,13 @@
/datum/unarmed_attack/claws/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/skill = user.skills["combat"]
var/obj/item/organ/external/affecting = target.get_organ(zone)
-
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
if(!skill) skill = 1
attack_damage = Clamp(attack_damage, 1, 5)
if(target == user)
- user.visible_message("[user] [pick(attack_verb)] \himself in the [affecting.name]!")
+ user.visible_message("[user] [pick(attack_verb)] [T.himself] in the [affecting.name]!")
return 0
switch(zone)
@@ -37,20 +38,20 @@
// ----- HEAD ----- //
switch(attack_damage)
if(1 to 2)
- user.visible_message("[user] scratched [target] across \his cheek!")
+ user.visible_message("[user] scratched [target] across [TT.his] cheek!")
if(3 to 4)
user.visible_message("[user] [pick(attack_verb)] [target]'s [pick("head", "neck")]!") //'with spread claws' sounds a little bit odd, just enough that conciseness is better here I think
if(5)
user.visible_message(pick(
- "[user] rakes \his [pick(attack_noun)] across [target]'s face!",
- "[user] tears \his [pick(attack_noun)] into [target]'s face!",
+ "[user] rakes [T.his] [pick(attack_noun)] across [target]'s face!",
+ "[user] tears [T.his] [pick(attack_noun)] into [target]'s face!",
))
else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("[user] scratched [target]'s [affecting.name]!")
if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [pick("", "", "the side of")] [target]'s [affecting.name]!")
- if(5) user.visible_message("[user] tears \his [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.name]!")
+ if(5) user.visible_message("[user] tears [T.his] [pick(attack_noun)] [pick("deep into", "into", "across")] [target]'s [affecting.name]!")
/datum/unarmed_attack/claws/strong
attack_verb = list("slashed")
diff --git a/code/modules/mob/living/carbon/human/unarmed_attack.dm b/code/modules/mob/living/carbon/human/unarmed_attack.dm
index 2de060887f..1c54a4258f 100644
--- a/code/modules/mob/living/carbon/human/unarmed_attack.dm
+++ b/code/modules/mob/living/carbon/human/unarmed_attack.dm
@@ -44,6 +44,7 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/proc/apply_effects(var/mob/living/carbon/human/user,var/mob/living/carbon/human/target,var/armour,var/attack_damage,var/zone)
var/stun_chance = rand(0, 100)
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
if(attack_damage >= 5 && armour < 2 && !(target == user) && stun_chance <= attack_damage * 5) // 25% standard chance
switch(zone) // strong punches can have effects depending on where they hit
@@ -74,7 +75,7 @@ var/global/list/sparring_attack_cache = list()
target.set_dir(reverse_dir[target.dir])
target.apply_effect(attack_damage * 0.4, WEAKEN, armour)
if(BP_GROIN)
- target.visible_message("[target] looks like \he is in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]")
+ target.visible_message("[target] looks like [TT.he] [TT.is] in pain!", "[(target.gender=="female") ? "Oh god that hurt!" : "Oh no, not your[pick("testicles", "crown jewels", "clockweights", "family jewels", "marbles", "bean bags", "teabags", "sweetmeats", "goolies")]!"]") // I see no easy way to fix this for non-organic or neuter characters.
target.apply_effects(stutter = attack_damage * 2, agony = attack_damage* 3, blocked = armour)
if("l_leg", "l_foot", "r_leg", "r_foot")
if(!target.lying)
@@ -94,13 +95,15 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/proc/handle_eye_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target)
var/obj/item/organ/internal/eyes/eyes = target.internal_organs_by_name[O_EYES]
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
if(eyes)
eyes.take_damage(rand(3,4), 1)
- user.visible_message("[user] presses \his [eye_attack_text] into [target]'s [eyes.name]!")
+ user.visible_message("[user] presses [TU.his] [eye_attack_text] into [target]'s [eyes.name]!")
var/eye_pain = eyes.organ_can_feel_pain()
target << "You experience[(eye_pain) ? "" : " immense pain as you feel" ] [eye_attack_text_victim] being pressed into your [eyes.name][(eye_pain)? "." : "!"]"
return
- user.visible_message("[user] attempts to press \his [eye_attack_text] into [target]'s eyes, but they don't have any!")
+ user.visible_message("[user] attempts to press [TU.his] [eye_attack_text] into [target]'s eyes, but [TT.he] [TT.does]n't have any!")
/datum/unarmed_attack/bite
attack_verb = list("bit")
@@ -128,11 +131,14 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/punch/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
var/organ = affecting.name
+
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
attack_damage = Clamp(attack_damage, 1, 5) // We expect damage input of 1 to 5 for this proc. But we leave this check juuust in case.
if(target == user)
- user.visible_message("[user] [pick(attack_verb)] \himself in the [organ]!")
+ user.visible_message("[user] [pick(attack_verb)] [TU.himself] in the [organ]!")
return 0
if(!target.lying)
@@ -141,7 +147,7 @@ var/global/list/sparring_attack_cache = list()
// ----- HEAD ----- //
switch(attack_damage)
if(1 to 2)
- user.visible_message("[user] slapped [target] across \his cheek!")
+ user.visible_message("[user] slapped [target] across [TT.his] cheek!")
if(3 to 4)
user.visible_message(pick(
40; "[user] [pick(attack_verb)] [target] in the head!",
@@ -151,21 +157,21 @@ var/global/list/sparring_attack_cache = list()
if(5)
user.visible_message(pick(
30; "[user] gave [target] a resounding [pick("slap", "punch")] to the face!",
- 40; "[user] smashed \his [pick(attack_noun)] into [target]'s face!",
+ 40; "[user] smashed [TU.his] [pick(attack_noun)] into [target]'s face!",
30; "[user] gave a strong blow against [target]'s jaw!"
))
else
// ----- BODY ----- //
switch(attack_damage)
if(1 to 2) user.visible_message("[user] threw a glancing punch at [target]'s [organ]!")
- if(1 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
+ if(1 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in [TT.his] [organ]!")
if(5)
user.visible_message(pick(
- 50; "[user] smashed \his [pick(attack_noun)] into [target]'s [organ]!",
+ 50; "[user] smashed [TU.his] [pick(attack_noun)] into [target]'s [organ]!",
50; "[user] landed a striking [pick(attack_noun)] on [target]'s [organ]!"
))
else
- user.visible_message("[user] [pick("punched", "threw a punch against", "struck", "slammed their [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets?
+ user.visible_message("[user] [pick("punched", "threw a punch against", "struck", "slammed [TU.his] [pick(attack_noun)] into")] [target]'s [organ]!") //why do we have a separate set of verbs for lying targets?
/datum/unarmed_attack/kick
attack_verb = list("kicked", "kicked", "kicked", "kneed")
@@ -198,13 +204,14 @@ var/global/list/sparring_attack_cache = list()
/datum/unarmed_attack/kick/show_attack(var/mob/living/carbon/human/user, var/mob/living/carbon/human/target, var/zone, var/attack_damage)
var/obj/item/organ/external/affecting = target.get_organ(zone)
+ var/datum/gender/TT = gender_datums[target.get_visible_gender()]
var/organ = affecting.name
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
if(1 to 2) user.visible_message("[user] threw [target] a glancing [pick(attack_noun)] to the [organ]!") //it's not that they're kicking lightly, it's that the kick didn't quite connect
- if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in \his [organ]!")
+ if(3 to 4) user.visible_message("[user] [pick(attack_verb)] [target] in [TT.his] [organ]!")
if(5) user.visible_message("[user] landed a strong [pick(attack_noun)] against [target]'s [organ]!")
/datum/unarmed_attack/stomp
@@ -242,12 +249,13 @@ var/global/list/sparring_attack_cache = list()
var/obj/item/organ/external/affecting = target.get_organ(zone)
var/organ = affecting.name
var/obj/item/clothing/shoes = user.shoes
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
attack_damage = Clamp(attack_damage, 1, 5)
switch(attack_damage)
- if(1 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
- if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed \his [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/
+ if(1 to 4) user.visible_message("[pick("[user] stomped on", "[user] slammed [TU.his] [shoes ? copytext(shoes.name, 1, -1) : "foot"] down onto")] [target]'s [organ]!")
+ if(5) user.visible_message("[pick("[user] landed a powerful stomp on", "[user] stomped down hard on", "[user] slammed [TU.his] [shoes ? copytext(shoes.name, 1, -1) : "foot"] down hard onto")] [target]'s [organ]!") //Devastated lol. No. We want to say that the stomp was powerful or forceful, not that it /wrought devastation/
/datum/unarmed_attack/light_strike
deal_halloss = 3
diff --git a/code/modules/mob/living/silicon/pai/software_modules.dm b/code/modules/mob/living/silicon/pai/software_modules.dm
index 83f68056b7..6d34c4a969 100644
--- a/code/modules/mob/living/silicon/pai/software_modules.dm
+++ b/code/modules/mob/living/silicon/pai/software_modules.dm
@@ -62,11 +62,12 @@
count++
// Check the carrier
+ var/datum/gender/TM = gender_datums[M.get_visible_gender()]
var/answer = input(M, "[P] is requesting a DNA sample from you. Will you allow it to confirm your identity?", "[P] Check DNA", "No") in list("Yes", "No")
if(answer == "Yes")
var/turf/T = get_turf_or_move(P.loc)
for (var/mob/v in viewers(T))
- v.show_message("[M] presses \his thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2)
+ v.show_message("[M] presses [TM.his] thumb against [P].", 3, "[P] makes a sharp clicking sound as it extracts DNA material from [M].", 2)
var/datum/dna/dna = M.dna
P << "[M]'s UE string : [dna.unique_enzymes]
"
if(dna.unique_enzymes == P.master_dna)
@@ -74,7 +75,7 @@
else
P << "DNA does not match stored Master DNA."
else
- P << "[M] does not seem like \he is going to provide a DNA sample willingly."
+ P << "[M] does not seem like [TM.he] is going to provide a DNA sample willingly."
return 1
/datum/pai_software/radio_config
diff --git a/code/modules/mob/living/silicon/robot/drone/drone.dm b/code/modules/mob/living/silicon/robot/drone/drone.dm
index 4cd6f0f26d..b2246e14e9 100644
--- a/code/modules/mob/living/silicon/robot/drone/drone.dm
+++ b/code/modules/mob/living/silicon/robot/drone/drone.dm
@@ -173,7 +173,7 @@ var/list/mob_hat_cache = list()
return
else if (istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
-
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if(stat == 2)
if(!config.allow_drone_spawn || emagged || health < -35) //It's dead, Dave.
@@ -184,7 +184,7 @@ var/list/mob_hat_cache = list()
to_chat(user, "Access denied.")
return
- user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to reboot it.", ">You swipe your ID card through \the [src], attempting to reboot it.")
+ user.visible_message("\The [user] swipes [TU.his] ID card through \the [src], attempting to reboot it.", ">You swipe your ID card through \the [src], attempting to reboot it.")
var/drones = 0
for(var/mob/living/silicon/robot/drone/D in world)
if(D.key && D.client)
@@ -194,7 +194,7 @@ var/list/mob_hat_cache = list()
return
else
- user.visible_message("\The [user] swipes \his ID card through \the [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.")
+ user.visible_message("\The [user] swipes [TU.his] ID card through \the [src], attempting to shut it down.", "You swipe your ID card through \the [src], attempting to shut it down.")
if(emagged)
return
@@ -232,11 +232,12 @@ var/list/mob_hat_cache = list()
clear_supplied_laws()
clear_inherent_laws()
laws = new /datum/ai_laws/syndicate_override
- set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.")
src << "Obey these laws:"
laws.show_laws(src)
- src << "ALERT: [user.real_name] is your new master. Obey your new laws and \his commands."
+ src << "ALERT: [user.real_name] [TU.is] your new master. Obey your new laws and [TU.his] commands."
return 1
//DRONE LIFE/DEATH
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 5153dfd2d9..5d96f6feb2 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1071,7 +1071,8 @@
laws = new /datum/ai_laws/syndicate_override
var/time = time2text(world.realtime,"hh:mm:ss")
lawchanges.Add("[time] : [user.name]([user.key]) emagged [name]([key])")
- set_zeroth_law("Only [user.real_name] and people \he designates as being such are operatives.")
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ set_zeroth_law("Only [user.real_name] and people [TU.he] designate[TU.s] as being such are operatives.")
. = 1
spawn()
src << "ALERT: Foreign software detected."
@@ -1089,7 +1090,7 @@
src << "ERRORERRORERROR"
src << "Obey these laws:"
laws.show_laws(src)
- src << "ALERT: [user.real_name] is your new master. Obey your new laws and his commands."
+ src << "ALERT: [user.real_name] is your new master. Obey your new laws and [TU.his] commands."
updateicon()
else
user << "You fail to hack [src]'s interface."
diff --git a/code/modules/mob/living/simple_animal/aliens/alien.dm b/code/modules/mob/living/simple_animal/aliens/alien.dm
index d31efe6df8..3836a6abd2 100644
--- a/code/modules/mob/living/simple_animal/aliens/alien.dm
+++ b/code/modules/mob/living/simple_animal/aliens/alien.dm
@@ -219,7 +219,7 @@
speak_chance = 5
speak = list("Shuhn","Shrunnph?","Shunpf")
- emote_see = list("scratches the ground","shakes out it's mane","tinkles gently")
+ emote_see = list("scratches the ground","shakes out its mane","clinks gently as it moves")
/mob/living/simple_animal/yithian
name = "yithian"
diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm
index d37b2e33fa..17c796f0f9 100644
--- a/code/modules/mob/living/simple_animal/simple_animal.dm
+++ b/code/modules/mob/living/simple_animal/simple_animal.dm
@@ -584,7 +584,8 @@
if ((M.client && !( M.blinded )))
M.show_message("[user] applies the [MED] on [src].")
else
- user << "\The [src] is dead, medical items won't bring \him back to life."
+ var/datum/gender/T = gender_datums[src.get_visible_gender()]
+ user << "\The [src] is dead, medical items won't bring [T.him] back to life." // the gender lookup is somewhat overkill, but it functions identically to the obsolete gender macros and future-proofs this code
if(meat_type && (stat == DEAD)) //if the animal has a meat, and if it is dead.
if(istype(O, /obj/item/weapon/material/knife) || istype(O, /obj/item/weapon/material/knife/butch))
harvest(user)
@@ -752,13 +753,13 @@
if(stat || M == target_mob) return //Not if we're dead or already hitting them
if(M in friends || M.faction == faction) return //I'll overlook it THIS time...
ai_log("react_to_attack([M])",1)
- if(retaliate && set_target(M))
+ if(retaliate && set_target(M, 1))
handle_stance(STANCE_ATTACK)
return M
return 0
-/mob/living/simple_animal/proc/set_target(var/mob/M)
+/mob/living/simple_animal/proc/set_target(var/mob/M, forced = 0)
ai_log("SetTarget([M])",2)
if(!M || (world.time - last_target_time < 5 SECONDS) && target_mob)
ai_log("SetTarget() can't set it again so soon",3)
@@ -772,7 +773,7 @@
annoyed += 14
sleep(1 SECOND) //For realism
- if(M in ListTargets(view_range))
+ if(forced || (M in ListTargets(view_range)))
try_say_list(say_got_target)
target_mob = M
last_target_time = world.time
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index ceebc620fd..54769eea5b 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -648,6 +648,9 @@
/mob/proc/get_gender()
return gender
+/mob/proc/get_visible_gender()
+ return gender
+
/mob/proc/see(message)
if(!is_active())
return 0
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 0110c263d2..9459ad85d2 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -218,7 +218,4 @@
var/seedarkness = 1 //Determines mob's ability to see shadows. 1 = Normal vision, 0 = darkvision
- // Falling things
- var/hovering = FALSE // Is the mob floating or flying in some way? If so, don't fall normally. //Not implemented yet, idea is to let them ignore terrain slowdown and falling down floors
- var/softfall = FALSE // Is the mob able to lessen their impact upon falling?
- var/parachuting = FALSE // Is the mob able to jump out of planes and survive? Don't check this directly outside of CanParachute().
\ No newline at end of file
+ var/get_rig_stats = 0 //Moved from computer.dm
diff --git a/code/modules/mob/mob_grab.dm b/code/modules/mob/mob_grab.dm
index 492ec9cb05..cf14862981 100644
--- a/code/modules/mob/mob_grab.dm
+++ b/code/modules/mob/mob_grab.dm
@@ -236,6 +236,8 @@
if(!assailant.canmove || assailant.lying)
qdel(src)
return
+
+ var/datum/gender/TU = gender_datums[assailant.get_visible_gender()]
last_action = world.time
@@ -256,7 +258,7 @@
assailant << "You squeeze [affecting], but nothing interesting happens."
return
- assailant.visible_message("[assailant] has reinforced \his grip on [affecting] (now neck)!")
+ assailant.visible_message("[assailant] has reinforced [TU.his] grip on [affecting] (now neck)!")
state = GRAB_NECK
icon_state = "grabbed+1"
assailant.set_dir(get_dir(assailant, affecting))
@@ -267,11 +269,11 @@
hud.name = "kill"
affecting.Stun(10) //10 ticks of ensured grab
else if(state < GRAB_UPGRADING)
- assailant.visible_message("[assailant] starts to tighten \his grip on [affecting]'s neck!")
+ assailant.visible_message("[assailant] starts to tighten [TU.his] grip on [affecting]'s neck!")
hud.icon_state = "kill1"
state = GRAB_KILL
- assailant.visible_message("[assailant] has tightened \his grip on [affecting]'s neck!")
+ assailant.visible_message("[assailant] has tightened [TU.his] grip on [affecting]'s neck!")
affecting.attack_log += "\[[time_stamp()]\] Has been strangled (kill intent) by [assailant.name] ([assailant.ckey])"
assailant.attack_log += "\[[time_stamp()]\] Strangled (kill intent) [affecting.name] ([affecting.ckey])"
msg_admin_attack("[key_name(assailant)] strangled (kill intent) [key_name(affecting)]")
@@ -347,7 +349,8 @@
/obj/item/weapon/grab/proc/reset_kill_state()
if(state == GRAB_KILL)
- assailant.visible_message("[assailant] lost \his tight grip on [affecting]'s neck!")
+ var/datum/gender/T = gender_datums[assailant.get_visible_gender()]
+ assailant.visible_message("[assailant] lost [T.his] tight grip on [affecting]'s neck!")
hud.icon_state = "kill"
state = GRAB_NECK
diff --git a/code/modules/mob/mob_grab_specials.dm b/code/modules/mob/mob_grab_specials.dm
index 82dae6e135..a7b82566f2 100644
--- a/code/modules/mob/mob_grab_specials.dm
+++ b/code/modules/mob/mob_grab_specials.dm
@@ -93,7 +93,8 @@
return
if(target.lying)
return
- attacker.visible_message("[attacker] thrusts \his head into [target]'s skull!")
+ var/datum/gender/T = gender_datums[attacker.get_visible_gender()]
+ attacker.visible_message("[attacker] thrusts [T.his] head into [target]'s skull!")
var/damage = 20
var/obj/item/clothing/hat = attacker.head
diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm
index ae8b40218d..b92ec2144a 100644
--- a/code/modules/multiz/movement.dm
+++ b/code/modules/multiz/movement.dm
@@ -403,8 +403,12 @@
/atom/movable/proc/fall_impact(var/atom/hit_atom, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE)
if(!silent)
visible_message("\The [src] falls from above and slams into \the [hit_atom]!", "You hear something slam into \the [hit_atom].")
+ for(var/atom/movable/A in src.contents)
+ A.fall_impact(hit_atom, damage_min, damage_max, silent = TRUE)
-/mob/living/fall_impact(var/turf/landing, var/damage_min = 0, var/damage_max = 30, var/silent = FALSE, var/planetary = FALSE)
+// Take damage from falling and hitting the ground
+/mob/living/fall_impact(var/atom/hit_atom, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE)
+ var/turf/landing = get_turf(hit_atom)
if(planetary && src.CanParachute())
if(!silent)
visible_message("\The [src] glides in from above and lands on \the [landing]!", \
@@ -431,67 +435,32 @@
"You hear something slam into \the [landing].")
playsound(loc, "punch", 25, 1, -1)
- if(planetary) //Since the planetary fall damage is calibrated for humans, we need to up this a bit
- damage_min *= 2
- damage_max *= 2
-
- adjustBruteLoss(rand(damage_min, damage_max))
- return
- return
-
-/mob/living/carbon/human/fall_impact(var/turf/landing, var/damage_min = 0, var/damage_max = 10, var/silent = FALSE, var/planetary = FALSE)
- if(planetary && src.CanParachute())
- if(!silent)
- visible_message("\The [src] glides in from above and lands on \the [landing]!", \
- "You land on \the [landing]!", \
- "You hear something land \the [landing].")
- return
- else if(!planetary && src.softfall) // Falling one floor and falling one atmosphere are very different things
- if(!silent)
- visible_message("\The [src] falls from above and lands on \the [landing]!", \
- "You land on \the [landing]!", \
- "You hear something land \the [landing].")
- return
- else
- if(!silent)
- if(planetary)
- visible_message("\A [src] falls out of the sky and crashes into \the [landing]!", \
- " You fall out of the skiy and crash into \the [landing]!", \
- "You hear something slam into \the [landing].")
- var/turf/T = get_turf(landing)
- explosion(T, 0, 1, 2)
- else
- visible_message("\The [src] falls from above and slams into \the [landing]!", \
- "You fall off and hit \the [landing]!", \
- "You hear something slam into \the [landing].")
- playsound(loc, "punch", 25, 1, -1)
- var/mob/living/carbon/human/pred = src //VOREStation Edit Start
- if(istype(landing, /mob)) //If you land on someone, don't get hurt a second time
- Weaken(10) //In exchange, you're going to be aching! This prevents you from taking damage twice from hitting the floor and the person.
- return
- var/belly = src.vore_selected
- var/datum/belly/belly_target = pred.vore_organs[belly]
- if(belly_target && belly_target.internal_contents.len != 0) //Having stuff in your gut will pad the landing a bit.
- damage_max = 5 //VOREStation Edit End
- // Because wounds heal rather quickly, 10 should be enough to discourage jumping off but not be enough to ruin you, at least for the first time.
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_HEAD)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_TORSO)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_GROIN)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_LEG)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_LEG)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_FOOT)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_FOOT)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_ARM)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_ARM)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_L_HAND)
- apply_damage(rand(damage_min, damage_max), BRUTE, BP_R_HAND)
+ // Because wounds heal rather quickly, 10 (the default for this proc) should be enough to discourage jumping off but not be enough to ruin you, at least for the first time.
+ // Hits 10 times, because apparently targeting individual limbs lets certain species survive the fall from atmosphere
+ for(var/i = 1 to 10)
+ adjustBruteLoss(rand(damage_min, damage_max))
Weaken(4)
updatehealth()
return
return
-//Checks if the mob is allowed to survive a fall from space
-/mob/living/proc/CanParachute()
+//Using /atom/movable instead of /obj/item because I'm not sure what all humans can pick up or wear
+/atom/movable
+ var/parachute = FALSE // Is this thing a parachute itself?
+ var/hovering = FALSE // Is the thing floating or flying in some way? If so, don't fall normally. //Not implemented yet, idea is to let mobs/mechs ignore terrain slowdown and falling down floors
+ var/softfall = FALSE // Is the thing able to lessen their impact upon falling?
+ var/parachuting = FALSE // Is the thing able to jump out of planes and survive? Don't check this directly outside of CanParachute().
+
+/atom/movable/proc/isParachute()
+ return parachute
+
+//This is what makes the parachute items know they've been used.
+//I made it /atom/movable so it can be retooled for other things (mobs, mechs, etc), though it's only currently called in human/CanParachute().
+/atom/movable/proc/handleParachute()
+ return
+
+//Checks if the thing is allowed to survive a fall from space
+/atom/movable/proc/CanParachute()
return parachuting
//For humans, this needs to be a wee bit more complicated
@@ -516,19 +485,6 @@
else
return parachuting
-//For human falling code
-//Using /obj instead of /obj/item because I'm not sure what all humans can pick up or wear
-/obj
- var/parachute = FALSE
-
-/obj/proc/isParachute()
- return parachute
-
-//This is what makes the parachute items know they've been used.
-//I made it /atom/movable so it can be retooled for other things (mobs, mechs, etc), though it's only currently called in human/CanParachute().
-/atom/movable/proc/handleParachute()
- return
-
//Mech Code
/obj/mecha/handle_fall(var/turf/landing)
// First things first, break any lattice
@@ -542,18 +498,49 @@
return ..()
/obj/mecha/fall_impact(var/atom/hit_atom, var/damage_min = 15, var/damage_max = 30, var/silent = FALSE, var/planetary = FALSE)
- // Tell the pilot that they just dropped down with a superheavy mecha.
- if(occupant)
- to_chat(occupant, "\The [src] crashed down onto \the [hit_atom]!")
-
// Anything on the same tile as the landing tile is gonna have a bad day.
for(var/mob/living/L in hit_atom.contents)
L.visible_message("\The [src] crushes \the [L] as it lands on them!")
L.adjustBruteLoss(rand(70, 100))
L.Weaken(8)
- // Now to hurt the mech.
- take_damage(rand(damage_min, damage_max))
+ var/turf/landing = get_turf(hit_atom)
+
+ if(planetary && src.CanParachute())
+ if(!silent)
+ visible_message("\The [src] glides in from above and lands on \the [landing]!", \
+ "You land on \the [landing]!", \
+ "You hear something land \the [landing].")
+ return
+ else if(!planetary && src.softfall) // Falling one floor and falling one atmosphere are very different things
+ if(!silent)
+ visible_message("\The [src] falls from above and lands on \the [landing]!", \
+ "You land on \the [landing]!", \
+ "You hear something land \the [landing].")
+ return
+ else
+ if(!silent)
+ if(planetary)
+ visible_message("\A [src] falls out of the sky and crashes into \the [landing]!", \
+ " You fall out of the skiy and crash into \the [landing]!", \
+ "You hear something slam into \the [landing].")
+ var/turf/T = get_turf(landing)
+ explosion(T, 0, 1, 2)
+ else
+ visible_message("\The [src] falls from above and slams into \the [landing]!", \
+ "You fall off and hit \the [landing]!", \
+ "You hear something slam into \the [landing].")
+ playsound(loc, "punch", 25, 1, -1)
+
+ // Now to hurt everything in the mech (if the fall is planetary, the mech blows up, so we do this first)
+ for(var/atom/movable/A in src.contents)
+ A.fall_impact(hit_atom, damage_min, damage_max, silent = TRUE)
+ // And now the Mech
+
+ if(!planetary)
+ take_damage(rand(damage_min, damage_max))
+ else
+ qdel(src)
// And hurt the floor.
if(istype(hit_atom, /turf/simulated/floor))
diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm
index 49a18e4853..6c8d9c631a 100644
--- a/code/modules/organs/organ_external.dm
+++ b/code/modules/organs/organ_external.dm
@@ -195,9 +195,9 @@
dislocated = 1
if(owner)
- owner.verbs |= /mob/living/carbon/human/proc/undislocate
+ owner.verbs |= /mob/living/carbon/human/proc/relocate
-/obj/item/organ/external/proc/undislocate()
+/obj/item/organ/external/proc/relocate()
if(dislocated == -1)
return
@@ -209,7 +209,7 @@
for(var/obj/item/organ/external/limb in owner.organs)
if(limb.dislocated == 1)
return
- owner.verbs -= /mob/living/carbon/human/proc/undislocate
+ owner.verbs -= /mob/living/carbon/human/proc/relocate
/obj/item/organ/external/update_health()
damage = min(max_damage, (brute_dam + burn_dam))
@@ -325,7 +325,8 @@
// sync the organ's damage with its wounds
src.update_damages()
- owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called
+ if(owner)
+ owner.updatehealth() //droplimb will call updatehealth() again if it does end up being called
//If limb took enough damage, try to cut or tear it off
if(owner && loc == owner && !is_stump())
@@ -426,7 +427,8 @@
if(damage_desc)
if(user == src.owner)
- user.visible_message("\The [user] patches [damage_desc] on \his [src.name] with [tool].")
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ user.visible_message("\The [user] patches [damage_desc] on [T.his] [src.name] with [tool].")
else
user.visible_message("\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].")
diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm
index e5c0134186..b708e58253 100644
--- a/code/modules/paperwork/paper.dm
+++ b/code/modules/paperwork/paper.dm
@@ -314,12 +314,13 @@
/obj/item/weapon/paper/proc/burnpaper(obj/item/weapon/flame/P, mob/user)
var/class = "warning"
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if(P.lit && !user.restrained())
if(istype(P, /obj/item/weapon/flame/lighter/zippo))
class = "rose"
-
- user.visible_message("[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \
+
+ user.visible_message("[user] holds \the [P] up to \the [src], it looks like [TU.hes] trying to burn it!", \
"You hold \the [P] up to \the [src], burning it slowly.")
spawn(20)
diff --git a/code/modules/paperwork/paper_bundle.dm b/code/modules/paperwork/paper_bundle.dm
index d6350b4d90..6ab1be0a9f 100644
--- a/code/modules/paperwork/paper_bundle.dm
+++ b/code/modules/paperwork/paper_bundle.dm
@@ -75,8 +75,8 @@
if(P.lit && !user.restrained())
if(istype(P, /obj/item/weapon/flame/lighter/zippo))
class = "rose>"
-
- user.visible_message("[user] holds \the [P] up to \the [src], it looks like \he's trying to burn it!", \
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ user.visible_message("[user] holds \the [P] up to \the [src], it looks like [TU.he] [TU.is] trying to burn it!", \
"You hold \the [P] up to \the [src], burning it slowly.")
spawn(20)
diff --git a/code/modules/paperwork/papershredder.dm b/code/modules/paperwork/papershredder.dm
index b80a331180..bbf630ced6 100644
--- a/code/modules/paperwork/papershredder.dm
+++ b/code/modules/paperwork/papershredder.dm
@@ -167,12 +167,13 @@
..()
/obj/item/weapon/shreddedp/proc/burnpaper(var/obj/item/weapon/flame/lighter/P, var/mob/user)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if(user.restrained())
return
if(!P.lit)
user << "\The [P] is not lit."
return
- user.visible_message("\The [user] holds \the [P] up to \the [src]. It looks like \he's trying to burn it!", \
+ user.visible_message("\The [user] holds \the [P] up to \the [src]. It looks like [TU.he] [TU.is] trying to burn it!", \
"You hold \the [P] up to \the [src], burning it slowly.")
if(!do_after(user,20))
user << "You must hold \the [P] steady to burn \the [src]."
diff --git a/code/modules/paperwork/pen.dm b/code/modules/paperwork/pen.dm
index 1de92fe743..7b310ccaa7 100644
--- a/code/modules/paperwork/pen.dm
+++ b/code/modules/paperwork/pen.dm
@@ -196,7 +196,8 @@
var/colourName = "red" //for updateIcon purposes
suicide_act(mob/user)
- viewers(user) << "[user] is jamming the [src.name] up \his nose and into \his brain. It looks like \he's trying to commit suicide."
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << "[user] is jamming the [src.name] up [TU.his] nose and into [TU.his] brain. It looks like [TU.he] [TU.is] trying to commit suicide."
return (BRUTELOSS|OXYLOSS)
New()
diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm
index 678e59ccf3..fadd699c84 100644
--- a/code/modules/power/cable.dm
+++ b/code/modules/power/cable.dm
@@ -497,10 +497,11 @@ obj/structure/cable/proc/cableColor(var/colorC)
charge_costs = list(1)
/obj/item/stack/cable_coil/suicide_act(mob/user)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
if(locate(/obj/item/weapon/stool) in user.loc)
- user.visible_message("[user] is making a noose with the [src.name]! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is making a noose with the [src.name]! It looks like [TU.he] [TU.is] trying to commit suicide.")
else
- user.visible_message("[user] is strangling \himself with the [src.name]! It looks like \he's trying to commit suicide.")
+ user.visible_message("[user] is strangling [TU.himself] with the [src.name]! It looks like [TU.he] [TU.is] trying to commit suicide.")
return(OXYLOSS)
/obj/item/stack/cable_coil/New(loc, length = MAXCOIL, var/param_color = null)
diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm
index 7a8c7c541f..1c08294b6a 100644
--- a/code/modules/power/cell.dm
+++ b/code/modules/power/cell.dm
@@ -234,5 +234,6 @@
return 0
/obj/item/weapon/cell/suicide_act(mob/user)
- viewers(user) << "\The [user] is licking the electrodes of \the [src]! It looks like \he's trying to commit suicide."
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ viewers(user) << "\The [user] is licking the electrodes of \the [src]! It looks like [TU.he] [TU.is] trying to commit suicide."
return (FIRELOSS)
\ No newline at end of file
diff --git a/code/modules/power/fusion/core/_core.dm b/code/modules/power/fusion/core/_core.dm
index 760c46ea93..7f81b70ffd 100644
--- a/code/modules/power/fusion/core/_core.dm
+++ b/code/modules/power/fusion/core/_core.dm
@@ -77,7 +77,7 @@ var/list/fusion_cores = list()
if(owned_field)
icon_state = "core0"
if(force_rupture || owned_field.plasma_temperature > 1000)
- owned_field.Rupture()
+ owned_field.MRC()
else
owned_field.RadiateAll()
qdel(owned_field)
diff --git a/code/modules/power/fusion/core/core_field.dm b/code/modules/power/fusion/core/core_field.dm
index 37351c53af..ef1c3716fa 100644
--- a/code/modules/power/fusion/core/core_field.dm
+++ b/code/modules/power/fusion/core/core_field.dm
@@ -1,6 +1,7 @@
#define FUSION_ENERGY_PER_K 20
#define FUSION_MAX_ENVIRO_HEAT 5000 //raise this if you want the reactor to dump more energy into the atmosphere
-#define PLASMA_TEMP_RADIATION_DIVISIOR 15 //radiation divisior. plasma temp / divisor = radiation.
+#define PLASMA_TEMP_RADIATION_DIVISIOR 20 //radiation divisior. plasma temp / divisor = radiation.
+
/obj/effect/fusion_em_field
name = "electromagnetic field"
@@ -19,6 +20,8 @@
var/tick_instability = 0
var/percent_unstable = 0
var/stable = 1
+ var/id_tag
+ var/critical = 0
var/obj/machinery/power/fusion_core/owned_core
var/list/dormant_reactant_quantities = list()
@@ -31,7 +34,8 @@
/obj/structure/cable,
/obj/machinery/atmospherics,
/obj/machinery/air_sensor,
- /mob/observer/dead
+ /mob/observer/dead,
+ /obj/machinery/power/hydromagnetic_trap
)
var/light_min_range = 2
@@ -52,7 +56,7 @@
owned_core = new_owned_core
if(!owned_core)
qdel(src)
-
+ id_tag = owned_core.id_tag
//create the gimmicky things to handle field collisions
var/obj/effect/fusion_particle_catcher/catcher
@@ -194,37 +198,46 @@
if(percent_unstable >= 1)
owned_core.Shutdown(force_rupture=1)
else
- if(percent_unstable > 0.5 && prob(percent_unstable*100))
+ if(percent_unstable > 0.1 && prob(percent_unstable*100))
if(plasma_temperature < 2000)
visible_message("\The [src] ripples uneasily, like a disturbed pond.")
else
var/flare
var/fuel_loss
var/rupture
- if(percent_unstable < 0.2)
+ if(percent_unstable > 0.2)
visible_message("\The [src] ripples uneasily, like a disturbed pond.")
- fuel_loss = prob(5)
- flare = prob(50)
- else if(percent_unstable < 0.9)
+ flare = prob(25)
+ else if(percent_unstable > 0.5)
visible_message("\The [src] undulates violently, shedding plumes of plasma!")
flare = prob(50)
fuel_loss = prob(20)
rupture = prob(5)
- else
+ else if(percent_unstable > 0.8)
visible_message("\The [src] is wracked by a series of horrendous distortions, buckling and twisting like a living thing!")
flare = 1
fuel_loss = prob(50)
rupture = prob(25)
if(rupture)
- owned_core.Shutdown(force_rupture=1)
+ if(prob(80))
+ MagneticQuench()
+ return
+ else if(prob(15))
+ MRC()
+ return
+ else if(prob(5))
+ QuantumFluxCascade()
+ return
+ else if(prob(5))
+ BluespaceQuenchEvent()
+ return
else
var/lost_plasma = (plasma_temperature*percent_unstable)
radiation += lost_plasma
if(flare)
- radiation += plasma_temperature/2
- plasma_temperature -= lost_plasma
-
+ spawn(1)
+ emflare()
if(fuel_loss)
for(var/particle in dormant_reactant_quantities)
var/lost_fuel = dormant_reactant_quantities[particle]*percent_unstable
@@ -234,17 +247,19 @@
dormant_reactant_quantities.Remove(particle)
Radiate()
return
-
-/obj/effect/fusion_em_field/proc/Rupture()
- visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!")
- set_light(15, 15, "#CCCCFF")
- empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
- sleep(5)
- global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
- RadiateAll()
- explosion(get_turf(owned_core),-1,-1,8,10) // Blow out all the windows.
- return
-
+/*/obj/effect/fusion_em_field/proc/CheckCriticality()
+ if (plasma_temperature > 70000)
+ critical += 0.2
+ else if (instability > 0.45)
+ critical += 0.6
+ if(critical >= 25 && prob(percent_unstable*100))
+ if (critical >= 90)
+ visible_message("\The [src] rumbles and quivers violently, threatening to break free!")
+ else if(critical >= 50)
+ visible_message("\The [src] rumbles and quivers energetically, the walls distorting slightly.")
+ else if(critical >= 25)
+ visible_message("\The [src] rumbles and quivers slightly, vibrating the deck.")
+*/
/obj/effect/fusion_em_field/proc/ChangeFieldStrength(var/new_strength)
var/calc_size = 1
if(new_strength <= 50)
@@ -490,19 +505,19 @@
//All procs below this point are called in _core.dm, starting at line 41.
//Stability monitoring. Gives radio annoucements if field stability is below 80%
/obj/effect/fusion_em_field/proc/stability_monitor()
- var/warnpoint = 0.10
+ var/warnpoint = 0.10 //start warning at 10% instability
var/warnmessage = "Warning! Field unstable! Instability at [percent_unstable * 100]%, plasma temperature at [plasma_temperature + 295]k."
var/stablemessage = "Containment field returning to stable conditions."
- if(percent_unstable >= warnpoint)
+ if(percent_unstable >= warnpoint) //we're unstable, start warning engineering
global_announcer.autosay(warnmessage, "Field Stability Monitor", "Engineering")
- stable = 0
- sleep(20 SECONDS)
- return
- if(percent_unstable < warnpoint && stable == 0)
+ stable = 0 //we know we're not stable, so let's not state the safe message.
+ sleep(20)
+ return
+ if(percent_unstable < warnpoint && stable == 0) //The field is stable again. Let's set our safe variable and state the safe message.
global_announcer.autosay(stablemessage, "Field Stability Monitor", "Engineering")
stable = 1
- return
+ return
//Reaction radiation is fairly buggy and there's at least three procs dealing with radiation here, this is to ensure constant radiation output.
/obj/effect/fusion_em_field/proc/radiation_scale()
@@ -513,7 +528,8 @@
if(owned_core && owned_core.loc)
var/datum/gas_mixture/environment = owned_core.loc.return_air()
if(environment && environment.temperature < (T0C+FUSION_MAX_ENVIRO_HEAT))
- environment.add_thermal_energy(plasma_temperature*20000)
+ environment.add_thermal_energy(plasma_temperature*5000)
+ check_instability()
//Temperature changes depending on color.
/obj/effect/fusion_em_field/proc/temp_color()
@@ -538,8 +554,121 @@
light_max_range = 5
light_max_power = 5
return
+//moved the flare to a proc for various reasons. Called on line 225.
+/obj/effect/fusion_em_field/proc/emflare()
+ radiation += plasma_temperature/2
+ light_color = "#ff0000"
+ light_max_power = 30
+ light_min_power = 30
+ light_min_range = 30
+ light_max_range = 30
+ visible_message("\The [src] flares to eye-searing brightness!")
+ sleep(60)
+ temp_color()
+ //plasma_temperature -= lost_plasma
+ return
+//Rupture() is no longer the end all be all. Fear the magnetic resonance cascade and quantum flux cascade
+/obj/effect/fusion_em_field/proc/Rupture()
+ visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!")
+ set_light(15, 15, "#CCCCFF")
+ empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
+ global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
+ RadiateAll()
+ var/list/things_in_range = range(10, owned_core)
+ var/list/turfs_in_range = list()
+ var/turf/T
+ for (T in things_in_range)
+ turfs_in_range.Add(T)
+
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
+ spawn(25)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ spawn(25)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ spawn(25)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ spawn(10)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ spawn(10)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ spawn(10)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ return
+
+/obj/effect/fusion_em_field/proc/MRC() //spews electromagnetic pulses in an area around the core.
+ visible_message("\The [src] glows an extremely bright pink and flares out of existance!")
+ global_announcer.autosay("Warning! Magnetic Resonance Cascade detected! Brace for electronic system distruption.", "Field Stability Monitor")
+ set_light(15, 15, "#ff00d8")
+ var/list/things_in_range = range(15, owned_core)
+ var/list/turfs_in_range = list()
+ var/turf/T
+ for (T in things_in_range)
+ turfs_in_range.Add(T)
+ for(var/loopcount = 1 to 10)
+ spawn(200)
+ empulse(pick(things_in_range), 10, 15)
+ Destroy()
+ return
+
+/obj/effect/fusion_em_field/proc/QuantumFluxCascade() //spews hot phoron and oxygen in a radius around the RUST. Will probably set fire to things
+ global_announcer.autosay("Warning! Quantum fluxuation detected! Flammable gas release expected.", "Field Stability Monitor")
+ var/list/things_in_range = range(15, owned_core)
+ var/list/turfs_in_range = list()
+ var/turf/T
+ for (T in things_in_range)
+ turfs_in_range.Add(T)
+ for(var/loopcount = 1 to 10)
+ var/turf/TT = get_turf(pick(turfs_in_range))
+ if(istype(TT))
+ var/datum/gas_mixture/plasma = new
+ plasma.adjust_gas("oxygen", (size*100), 0)
+ plasma.adjust_gas("phoron", (size*100), 0)
+ plasma.temperature = (plasma_temperature/2)
+ plasma.update_values()
+ TT.assume_air(plasma)
+ TT.hotspot_expose(plasma_temperature)
+ plasma = null
+ Destroy()
+ return
+
+/obj/effect/fusion_em_field/proc/MagneticQuench() //standard hard shutdown. dumps hot oxygen/phoron into the core's area and releases an EMP in the area around the core.
+ global_announcer.autosay("Warning! Magnetic Quench event detected, engaging hard shutdown.", "Field Stability Monitor")
+ empulse(owned_core, 10, 15)
+ var/turf/TT = get_turf(owned_core)
+ if(istype(TT))
+ var/datum/gas_mixture/plasma = new
+ plasma.adjust_gas("oxygen", (size*100), 0)
+ plasma.adjust_gas("phoron", (size*100), 0)
+ plasma.temperature = (plasma_temperature/2)
+ plasma.update_values()
+ TT.assume_air(plasma)
+ TT.hotspot_expose(plasma_temperature)
+ plasma = null
+ Destroy()
+ owned_core.Shutdown()
+ return
+
+/obj/effect/fusion_em_field/proc/BluespaceQuenchEvent() //!!FUN!! causes a number of explosions in an area around the core. Will likely destory or heavily damage the reactor.
+ visible_message("\The [src] shudders like a dying animal before flaring to eye-searing brightness and rupturing!")
+ set_light(15, 15, "#CCCCFF")
+ empulse(get_turf(src), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
+ global_announcer.autosay("WARNING: FIELD RUPTURE IMMINENT!", "Containment Monitor")
+ RadiateAll()
+ var/list/things_in_range = range(10, owned_core)
+ var/list/turfs_in_range = list()
+ var/turf/T
+ for (T in things_in_range)
+ turfs_in_range.Add(T)
+ for(var/loopcount = 1 to 10)
+ explosion(pick(things_in_range), -1, 5, 5, 5)
+ empulse(pick(things_in_range), ceil(plasma_temperature/1000), ceil(plasma_temperature/300))
+ Destroy()
+ owned_core.Shutdown()
+ return
+
#undef FUSION_HEAT_CAP
#undef FUSION_MAX_ENVIRO_HEAT
#undef PLASMA_TEMP_RADIATION_DIVISIOR
\ No newline at end of file
diff --git a/code/modules/power/fusion/fusion_reactions.dm b/code/modules/power/fusion/fusion_reactions.dm
index 38f73812f9..623f70bd6b 100644
--- a/code/modules/power/fusion/fusion_reactions.dm
+++ b/code/modules/power/fusion/fusion_reactions.dm
@@ -117,7 +117,7 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
var/turf/origin = get_turf(holder)
holder.Rupture()
qdel(holder)
- var/radiation_level = rand(100, 200)
+ var/radiation_level = 200
// Copied from the SM for proof of concept. //Not any more --Cirra //Use the whole z proc --Leshana
radiation_repository.z_radiate(locate(1, 1, holder.z), radiation_level, 1)
@@ -141,7 +141,6 @@ proc/get_fusion_reaction(var/p_react, var/s_react, var/m_energy)
return 1
-
// High end reactions.
/decl/fusion_reaction/boron_hydrogen
p_react = "boron"
diff --git a/code/modules/power/fusion/fusion_reagents.dm b/code/modules/power/fusion/fusion_reagents.dm
index 875bf63fee..80b1cbb336 100644
--- a/code/modules/power/fusion/fusion_reagents.dm
+++ b/code/modules/power/fusion/fusion_reagents.dm
@@ -5,4 +5,14 @@
description = "A colorless, odorless, tasteless and generally inert gas used in fusion reactors. Non-radioactive."
id = "helium-3"
reagent_state = GAS
- color = "#808080"
\ No newline at end of file
+ color = "#808080"
+
+/obj/structure/reagent_dispensers/he3
+ name = "fueltank"
+ desc = "A fueltank."
+ icon = 'icons/obj/objects.dmi'
+ icon_state = "weldtank"
+ amount_per_transfer_from_this = 10
+ New()
+ ..()
+ reagents.add_reagent("helium-3",1000)
\ No newline at end of file
diff --git a/code/modules/power/fusion/magpower.dm b/code/modules/power/fusion/magpower.dm
new file mode 100644
index 0000000000..c6882c6eb3
--- /dev/null
+++ b/code/modules/power/fusion/magpower.dm
@@ -0,0 +1,54 @@
+#define ENERGY_PER_K 20
+#define MINIMUM_PLASMA_TEMPERATURE 10000
+
+/obj/machinery/power/hydromagnetic_trap
+ name = "\improper hydromagnetic trap"
+ desc = "A device for extracting power from high-energy plasma in toroidal fields."
+ icon = 'icons/obj/machines/power/fusion.dmi'
+ icon_state = "mag_trap0"
+ anchored = 1
+ var/list/things_in_range = list()//what is in a radius of us?
+ var/list/fields_in_range = list()//What EM fields are in that radius?
+ var/list/active_field = list()//Our active field.
+ var/active = 0 //are we even on?
+ var/id_tag //needed for !!rasins!!
+
+/obj/machinery/power/hydromagnetic_trap/process()
+ if(!powernet && anchored == 1)
+ return
+ spawn(1)
+ Active()
+ Search()
+
+/obj/machinery/power/hydromagnetic_trap/proc/Search()//let's not have +100 instances of the same field in active_field.
+ things_in_range = range(7, src)
+ var/obj/effect/fusion_em_field/FFF
+ for (FFF in things_in_range)
+ fields_in_range.Add(FFF)
+ for (FFF in fields_in_range)
+ if (active_field.len > 0)
+ return
+ else if (active_field.len == 0)
+ Link()
+ return
+
+/obj/machinery/power/hydromagnetic_trap/proc/Link() //discover our EM field
+ var/obj/effect/fusion_em_field/FFF
+ for(FFF in fields_in_range)
+ if (FFF.id_tag != id_tag)
+ return
+ active_field += FFF
+ active = 1
+ return
+
+/obj/machinery/power/hydromagnetic_trap/proc/Active()//POWERRRRR
+ var/obj/effect/fusion_em_field/FF
+ if (active == 0)
+ return
+ for (FF in active_field)
+ if (FF.plasma_temperature >= MINIMUM_PLASMA_TEMPERATURE)
+ icon_state = "mag_trap1"
+ add_avail(ENERGY_PER_K * FF.plasma_temperature)
+ if (FF.plasma_temperature <= MINIMUM_PLASMA_TEMPERATURE)
+ icon_state = "mag_trap0"
+ return
diff --git a/code/modules/power/singularity/containment_field.dm b/code/modules/power/singularity/containment_field.dm
index d57c133cd1..d8712a0e4c 100644
--- a/code/modules/power/singularity/containment_field.dm
+++ b/code/modules/power/singularity/containment_field.dm
@@ -53,7 +53,7 @@
if(isliving(user))
hasShocked = 1
var/shock_damage = min(rand(30,40),rand(30,40))
- user.electrocute_act(shock_damage, src)
+ user.electrocute_act(shock_damage, src, 1, BP_TORSO)
var/atom/target = get_edge_target_turf(user, get_dir(src, get_step_away(user, src)))
user.throw_at(target, 200, 4)
@@ -61,7 +61,6 @@
sleep(20)
hasShocked = 0
- return
/obj/machinery/containment_field/proc/set_master(var/master1,var/master2)
if(!master1 || !master2)
diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm
index c2e6ec349c..df27be9d78 100644
--- a/code/modules/power/supermatter/supermatter.dm
+++ b/code/modules/power/supermatter/supermatter.dm
@@ -291,7 +291,8 @@
ui_interact(user)
/obj/machinery/power/supermatter/attack_hand(mob/user as mob)
- user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... \his body starts to glow and bursts into flames before flashing into ash.",\
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
+ user.visible_message("\The [user] reaches out and touches \the [src], inducing a resonance... [TU.his] body starts to glow and bursts into flames before flashing into ash.",\
"You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\
"You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")
@@ -337,7 +338,9 @@
if(istype(AM, /obj/effect))
return
if(istype(AM, /mob/living))
- AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... \his body starts to glow and catch flame before flashing into ash.",\
+ var/mob/living/M = AM
+ var/datum/gender/T = gender_datums[M.get_visible_gender()]
+ AM.visible_message("\The [AM] slams into \the [src] inducing a resonance... [T.his] body starts to glow and catch flame before flashing into ash.",\
"You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"",\
"You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.")
else if(!grav_pulling) //To prevent spam, detonating supermatter does not indicate non-mobs being destroyed
diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm
index c5baba2f34..4152b5e362 100644
--- a/code/modules/power/tesla/energy_ball.dm
+++ b/code/modules/power/tesla/energy_ball.dm
@@ -288,7 +288,7 @@
else if(closest_mob)
var/shock_damage = Clamp(round(power/400), 10, 90) + rand(-5, 5)
- closest_mob.electrocute_act(shock_damage, source, 1/*, tesla_shock = 1, stun = stun_mobs*/)
+ closest_mob.electrocute_act(shock_damage, source, 1, ran_zone())
if(issilicon(closest_mob))
var/mob/living/silicon/S = closest_mob
if(stun_mobs)
diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm
index b279908b79..460fac8239 100644
--- a/code/modules/projectiles/gun.dm
+++ b/code/modules/projectiles/gun.dm
@@ -51,6 +51,7 @@
attack_verb = list("struck", "hit", "bashed")
zoomdevicename = "scope"
+ var/automatic = 0
var/burst = 1
var/fire_delay = 6 //delay after shooting before the gun can be used again
var/burst_delay = 2 //delay between shots, if firing in bursts
@@ -68,7 +69,8 @@
var/requires_two_hands
var/wielded_icon = "gun_wielded"
var/one_handed_penalty = 0 // Penalty applied if someone fires a two-handed gun with one hand.
-
+ var/obj/screen/auto_target/auto_target
+ var/shooting = 0
var/next_fire_time = 0
var/sel_mode = 1 //index of the currently selected mode
@@ -180,8 +182,9 @@
if(P)
if(process_projectile(P, user, user, pick("l_foot", "r_foot")))
handle_post_fire(user, user)
+ var/datum/gender/TU = gender_datums[user.get_visible_gender()]
user.visible_message(
- "\The [user] shoots \himself in the foot with \the [src]!",
+ "\The [user] shoots [TU.himself] in the foot with \the [src]!",
"You shoot yourself in the foot with \the [src]!"
)
M.drop_item()
@@ -206,8 +209,29 @@
if(user && user.a_intent == I_HELP && user.is_preference_enabled(/datum/client_preference/safefiring)) //regardless of what happens, refuse to shoot if help intent is on
user << "You refrain from firing your [src] as your intent is set to help."
+ return
+
else
- Fire(A,user,params) //Otherwise, fire normally.
+ Fire(A, user, params) //Otherwise, fire normally.
+ return
+
+/* //Commented out for quality control and testing
+ if(automatic == 1)//Are we are going to be using automatic shooting
+ //We check to make sure they can fire
+ if(!special_check(user))
+ return
+ if(auto_target)//If they already have one then update it
+ auto_target.loc = get_turf(A)
+ auto_target.delay_del = 1//And reset the del so its like they got a new one and doesnt instantly vanish
+ to_chat(user, "You ready \the [src]! Click and drag the target around to shoot.")
+ else//Otherwise just make a new one
+ auto_target = new/obj/screen/auto_target(get_turf(A), src)
+ visible_message("\[user] readies the [src]!")
+ playsound(src, 'sound/weapons/TargetOn.ogg', 50, 1)
+ to_chat(user, "You ready \the [src]! Click and drag the target around to shoot.")
+ return
+ Fire(A,user,params) //Otherwise, fire normally.
+*/
/obj/item/weapon/gun/attack(atom/A, mob/living/user, def_zone)
if (A == user && user.zone_sel.selecting == O_MOUTH && !mouthshoot)
@@ -307,8 +331,11 @@
return
var/shoot_time = (burst - 1)* burst_delay
+
+ //These should apparently be disabled to allow for the automatic system to function without causing near-permanant paralysis. Re-enabling them while we sort that out.
user.setClickCooldown(shoot_time) //no clicking on things while shooting
user.setMoveCooldown(shoot_time) //no moving while shooting either
+
next_fire_time = world.time + shoot_time
var/held_acc_mod = 0
@@ -320,7 +347,27 @@
//actually attempt to shoot
var/turf/targloc = get_turf(target) //cache this in case target gets deleted during shooting, e.g. if it was a securitron that got destroyed.
+
+/* // Commented out for quality control and testing.
+ shooting = 1
+ if(automatic == 1 && auto_target && auto_target.active)//When we are going to shoot and have an auto_target AND its active meaning we clicked on it we tell it to burstfire 1000 rounds
+ burst = 1000//Yes its not EXACTLY full auto but when are we shooting more than 1000 normally and it can easily be made higher
+*/
for(var/i in 1 to burst)
+ /* // Commented out for quality control and testing.
+ if(!reflex && automatic)//If we are shooting automatic then check our target, however if we are shooting reflex we dont use automatic
+ //extra sanity checking.
+ if(user.incapacitated())
+ return
+ if(user.get_active_hand() != src)
+ break
+ if(!auto_target) break//Stopped shooting
+ else if(auto_target.loc)
+ target = auto_target.loc
+ //Lastly just update our dir if needed
+ if(user.dir != get_dir(user, auto_target))
+ user.face_atom(auto_target)
+ */
var/obj/projectile = consume_next_projectile(user)
if(!projectile)
handle_click_empty(user)
@@ -346,6 +393,9 @@
last_shot = world.time
+/* // Commented out for quality control and testing.
+ shooting = 0
+*/
// We do this down here, so we don't get the message if we fire an empty gun.
if(requires_two_hands)
if(user.item_is_in_hands(src) && user.hands_are_full())
diff --git a/code/modules/projectiles/guns/automatic_fire.dm b/code/modules/projectiles/guns/automatic_fire.dm
new file mode 100644
index 0000000000..25e1e3a461
--- /dev/null
+++ b/code/modules/projectiles/guns/automatic_fire.dm
@@ -0,0 +1,73 @@
+//This entire file is unticked for quality control and testing
+
+
+//True automagic gun modes. Dakka dakka.
+//A significant portion of this code was donated by Mport from SS:CM
+
+//This is used by guns shooting in automatic mode
+/obj/screen/auto_target
+ name = "targeter"
+ icon = null//We dont want people to see this guy
+ density = 0
+ anchored = 1
+ var/obj/item/weapon/gun/gun
+ var/active = 0//Just tells us that it was clicked on so we should start shooting
+ var/delay_del = 0//Delays the del if we retarget without shooting
+
+/obj/screen/auto_target/New(loc, var/obj/item/weapon/gun/G)
+ ..()
+ gun = G
+ var/image/I = image('icons/effects/Targeted.dmi', src, "locked")
+ I.override = 1
+ usr << I
+ //autodel() //Currently doesn't really work right.
+ return
+
+/obj/screen/auto_target/CanPass()//Everything should ignore this guy and just pass by
+ return 1
+
+ //Used to get rid of this if they target but dont actually shoot or stop shooting (no ammo) yet are still dragging us around
+/obj/screen/auto_target/proc/autodel()
+ set waitfor=0
+ if(active == 1)
+ return
+ sleep(20)
+ if(!src) return//Might not really be needed
+ if(delay_del)//This says we want to wait another X seconds before trying to del
+ delay_del = 0
+ autodel()
+ return
+ if(gun.shooting == 0)
+ qdel(src)
+ else
+ autodel()//Yes in theory this could hit the inf loop
+ return
+
+ //When the player clicks on the target it will disable the autodel and tell the gun to shoot
+/obj/screen/auto_target/MouseDown(location,control,params)
+ active += 1//Tell the autodel that we are actually using this now
+ if(gun.shooting == 0)//If we are not shooting start shooting, we need this here or they have to drag to a new turf before it starts shooting, felt weird
+ gun.Fire(loc, usr, params)
+ return
+
+ //Called when they drag the object somewhere else
+ //If its not already shooting (should be though due to the above, but this does let it click at you when it runs dry) then start shooting,
+/obj/screen/auto_target/MouseDrag(over_object,src_location,over_location,src_control,over_control,params)
+ if(gun.shooting == 0)//If we are not shooting start shooting
+ gun.Fire(loc, usr, params)
+ if(over_location != loc)//This updates the loc to our new location when we drag it to a new turf
+ loc = over_location
+ if((usr.get_active_hand() != gun))
+ qdel(src)
+
+ //This gets rid of us when they let go of the click, but only after they actually drag the target to a new turf which is why the below also has to exist
+/obj/screen/auto_target/MouseDrop(over_object,src_location,over_location,src_control,over_control,params)
+ qdel(src)
+ return
+ //This is needed so if they just MouseDown and then let go it will stop shooting, otherwise we stick around till they run out of bullets
+/obj/screen/auto_target/MouseUp(object,location,control,params)
+ qdel(src)
+ return
+
+//This pseudo code is being left in place to serve as references to the modifications to gun.dm, the Fire() proc, and the afterattack() proc. -k22
+//Code donated by Mport.
diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm
index 84697e668d..beb44e1a3e 100644
--- a/code/modules/projectiles/guns/energy/special.dm
+++ b/code/modules/projectiles/guns/energy/special.dm
@@ -25,6 +25,16 @@
charge_cost = 480
projectile_type = /obj/item/projectile/ion
+/obj/item/weapon/gun/energy/phasegun
+ name = "phase pistol"
+ desc = "The NT Mk26 EW Apollo is an energy handgun, specifically designed for use against wildlife."
+ icon_state = "phase"
+ item_state = "taser" //I don't have an in-hand sprite, taser will be fine
+ slot_flags = SLOT_BELT|SLOT_HOLSTER
+ charge_cost = 300
+ projectile_type = /obj/item/projectile/energy/phase
+
+
/obj/item/weapon/gun/energy/decloner
name = "biological demolecularisor"
desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements."
@@ -199,5 +209,5 @@ obj/item/weapon/gun/energy/staff/focus
firemodes = list(
list(mode_name="single shot", burst = 1, burst_accuracy = list(5), dispersion = list(0), charge_cost = 24),
list(mode_name="five shot burst", burst = 5, burst_accuracy = list(5,5,5,5,5), dispersion = list(1,1,1,1,1)),
- list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2)),
- )
+ list(mode_name="ten shot burst", burst = 10, burst_accuracy = list(5,5,5,5,5,5,5,5,5,5), dispersion = list(2,2,2,2,2,2,2,2,2,2))
+ )
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/modular_guns.dm b/code/modules/projectiles/guns/modular_guns.dm
new file mode 100644
index 0000000000..8f81e971c4
--- /dev/null
+++ b/code/modules/projectiles/guns/modular_guns.dm
@@ -0,0 +1,174 @@
+//This will likely drive me insane, but fuck it. Let's give it a shot. -k22
+//This was heavily assisted by MoondancerPony
+/obj/item/weapon/gun/energy/modular
+ name = "modular weapon"
+ desc = "You shouldn't be seeing this. Contact your local time-police station."
+ icon_state = "mod_pistol"
+ cell_type = /obj/item/weapon/cell/device/weapon
+ charge_cost = 120
+
+ var/max_components = 3 //How many components we can hold.
+ var/capacitor_rating = 0 //How good are the capacitors inside us?
+ var/laser_rating = 0 //How good are the lasers inside of us?
+ var/manipulator_rating = 0 //How good are the manipulators inside us?
+ var/assembled = 1 //Are we closed up?
+ var/max_burst_size = 5 //Don't let our maximum burst size get too high.
+ var/list/guncomponents = list() //Generate our list of components.
+ var/accepted_components = list(
+ /obj/item/weapon/stock_parts/capacitor/,
+ /obj/item/weapon/stock_parts/capacitor/adv,
+ /obj/item/weapon/stock_parts/capacitor/super,
+ /obj/item/weapon/stock_parts/micro_laser/,
+ /obj/item/weapon/stock_parts/micro_laser/high,
+ /obj/item/weapon/stock_parts/micro_laser/ultra,
+ /obj/item/weapon/stock_parts/manipulator/,
+ /obj/item/weapon/stock_parts/manipulator/nano,
+ /obj/item/weapon/stock_parts/manipulator/pico,
+ )
+ //Excessively long because it won't accept subtypes for some reason!
+
+
+/obj/item/weapon/gun/energy/modular/New() //Initialize our components.
+ ..()
+ guncomponents = list()
+ guncomponents += new /obj/item/weapon/stock_parts/capacitor
+ guncomponents += new /obj/item/weapon/stock_parts/micro_laser
+ guncomponents += new /obj/item/weapon/stock_parts/manipulator
+ CheckParts()
+ FireModeModify()
+
+/obj/item/weapon/gun/energy/modular/proc/CheckParts() //What parts do we have inside us, and how good are they?
+ capacitor_rating = 0
+ laser_rating = 0
+ manipulator_rating = 0
+ for(var/obj/item/weapon/stock_parts/capacitor/CA in guncomponents)
+ capacitor_rating += CA.rating
+ for(var/obj/item/weapon/stock_parts/micro_laser/ML in guncomponents)
+ laser_rating += ML.rating
+ for(var/obj/item/weapon/stock_parts/manipulator/MA in guncomponents)
+ manipulator_rating += MA.rating
+ FireModeModify()
+
+/obj/item/weapon/gun/energy/modular/attackby(obj/item/O, mob/user)
+ if(istype(O, /obj/item/weapon/screwdriver))
+ to_chat(user, "You [assembled ? "disassemble" : "assemble"] the gun.")
+ assembled = !assembled
+ playsound(src, O.usesound, 50, 1)
+ return
+ if(istype(O, /obj/item/weapon/crowbar))
+ if(assembled == 1)
+ to_chat(user, "Disassemble the [src] first!")
+ return
+ for(var/obj/item/I in guncomponents)
+ to_chat(user, "You remove the gun's components.")
+ playsound(src, O.usesound, 50, 1)
+ I.forceMove(get_turf(src))
+ guncomponents.Remove(I)
+ CheckParts()
+ return
+ //Someone's attacking us, and it's not anything we have a special case for (i.e. a tool)
+ ..()
+ if(assembled) // can't put anything in
+ return
+ if(!(O.type in accepted_components))//check if we can accept it
+ to_chat(user, "You can't add this to [src]!")
+ return
+ if(guncomponents.len >= max_components) //We have too many componenets and can't fit more.
+ to_chat(user, "You can't add any more components!")
+ return
+ if(istype(O, /obj/item/weapon/stock_parts/capacitor) && capacitor_rating == 5)
+ to_chat(user, "You can't add any more capacitors!")
+ return
+ user.drop_item()
+ guncomponents += O
+ O.forceMove(src)
+ to_chat(user, "You add a component to the [src]")
+ CheckParts()
+
+
+/obj/item/weapon/gun/energy/modular/proc/FireModeModify() //Check our laser, manipulator, and capacitor ratings, adjust stun and lethal firemodes depending on laser / manipulator rating and burst size depending on capacitors.
+ //check our lethal and stun ratings depending on laser and manipulator rating.
+ var/burstmode = capacitor_rating
+ var/beammode
+ var/beammode_lethal
+ var/chargecost
+ var/chargecost_lethal
+
+ if(laser_rating >= 15)
+ beammode_lethal = /obj/item/projectile/beam/sniper
+ beammode = /obj/item/projectile/beam/stun
+ chargecost = 300
+ chargecost_lethal = 600
+ else if(laser_rating >= 10)
+ beammode_lethal = /obj/item/projectile/beam/xray
+ beammode = /obj/item/projectile/beam/stun
+ chargecost = 300
+ chargecost_lethal = 200
+ else if(laser_rating == 8 && manipulator_rating == 5) //very specific set of combinations. No, you can't make a pulse rifle. Sorry research.
+ beammode_lethal = /obj/item/projectile/beam/heavylaser
+ beammode = /obj/item/projectile/beam/stun
+ chargecost = 300
+ chargecost_lethal = 600
+ else if(laser_rating >= 5)
+ beammode_lethal = /obj/item/projectile/beam/midlaser
+ beammode = /obj/item/projectile/beam/stun/med
+ chargecost = 180
+ chargecost_lethal = 240
+ else if(laser_rating < 5)
+ beammode_lethal = /obj/item/projectile/beam/weaklaser
+ beammode = /obj/item/projectile/beam/stun/weak
+ chargecost = 100
+ chargecost_lethal = 200
+
+ firemodes = list(
+ new /datum/firemode(src, list(mode_name="stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost)),
+ new /datum/firemode(src, list(mode_name="lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal)),
+ new /datum/firemode(src, list(mode_name="[burstmode] shot stun", projectile_type=beammode, fire_sound='sound/weapons/Taser.ogg', charge_cost = chargecost, burst = burstmode)),
+ new /datum/firemode(src, list(mode_name="[burstmode] shot lethal", projectile_type=beammode_lethal, fire_sound='sound/weapons/Laser.ogg', charge_cost = chargecost_lethal, burst = burstmode)),
+ )
+
+/obj/item/weapon/gun/energy/modular/load_ammo(var/obj/item/C, mob/user)
+ if(istype(C, cell_type))
+ if(self_recharge || battery_lock)
+ user << "[src] does not have a battery port."
+ return
+ var/obj/item/weapon/cell/P = C
+ if(power_supply)
+ user << "[src] already has a power cell."
+ else
+ user.visible_message("[user] is reloading [src].", "You start to insert [P] into [src].")
+ if(do_after(user, 10))
+ user.remove_from_mob(P)
+ power_supply = P
+ P.loc = src
+ user.visible_message("[user] inserts [P] into [src].", "You insert [P] into [src].")
+ playsound(src.loc, 'sound/weapons/flipblade.ogg', 50, 1)
+ update_icon()
+ update_held_icon()
+ return
+
+/obj/item/weapon/gun/energy/modular/pistol
+ name = "modular pistol"
+ icon_state = "mod_pistol"
+ max_components = 6
+ desc = "A bulky modular pistol frame. This only only accepts six parts."
+ origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 3)
+ burst_delay = 2
+
+/obj/item/weapon/gun/energy/modular/carbine
+ name = "modular carbine"
+ icon_state = "mod_carbine"
+ max_components = 8
+ desc = "A modular version of the standard laser carbine. This one can hold 8 components."
+ origin_tech = list(TECH_COMBAT = 4, TECH_MAGNET = 3, TECH_MATERIAL = 3)
+ burst_delay = 2
+
+/obj/item/weapon/gun/energy/modular/cannon
+ name = "modular cannon"
+ icon_state = "mod_cannon"
+ max_components = 14
+ desc = "Say hello, to my little friend!"
+ one_handed_penalty = 4 //dual wielding = no.
+ cell_type = /obj/item/weapon/cell //We're bigger. We can use much larger power cells.
+ origin_tech = list(TECH_COMBAT = 6, TECH_MAGNET = 6, TECH_MATERIAL = 5, TECH_BLUESPACE = 4) //its a damn cannon capable of holding a huge amount of parts.
+ burst_delay = 4 //preventing extreme silliness.
\ No newline at end of file
diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm
index 19b92db3b7..39bc6d7ae0 100644
--- a/code/modules/projectiles/guns/projectile/automatic.dm
+++ b/code/modules/projectiles/guns/projectile/automatic.dm
@@ -190,14 +190,23 @@
one_handed_penalty = 6
+ var/cover_open = 0
+
+/* Commented out for quality control and testing.
+ firemodes = list(
+ list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 0),
+ list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0), automatic = 0),
+ list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2), automatic = 0),
+ list(mode_name="automatic", burst=1, fire_delay=-1, move_delay=null, burst_accuracy=null, dispersion=null, automatic = 1),
+ )
+*/
+
firemodes = list(
list(mode_name="semiauto", burst=1, fire_delay=0, move_delay=null, burst_accuracy=null, dispersion=null),
list(mode_name="3-round bursts", burst=3, fire_delay=null, move_delay=4, burst_accuracy=list(0,-1,-1), dispersion=list(0.0, 0.6, 1.0)),
- list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2))
+ list(mode_name="short bursts", burst=5, move_delay=6, burst_accuracy = list(0,-1,-1,-2,-2), dispersion = list(0.6, 1.0, 1.0, 1.0, 1.2)),
)
- var/cover_open = 0
-
/obj/item/weapon/gun/projectile/automatic/l6_saw/special_check(mob/user)
if(cover_open)
user << "[src]'s cover is open! Close it before firing!"
@@ -370,4 +379,4 @@
icon_state = "bullpup"
else
item_state = "bullpup-empty"
- if(!ignore_inhands) update_held_icon()
\ No newline at end of file
+ if(!ignore_inhands) update_held_icon()
diff --git a/code/modules/projectiles/projectile/energy.dm b/code/modules/projectiles/projectile/energy.dm
index d3bc093cac..8138146163 100644
--- a/code/modules/projectiles/projectile/energy.dm
+++ b/code/modules/projectiles/projectile/energy.dm
@@ -195,4 +195,10 @@
light_color = "#0000FF"
embed_chance = 0
- muzzle_type = /obj/effect/projectile/pulse/muzzle
\ No newline at end of file
+ muzzle_type = /obj/effect/projectile/pulse/muzzle
+
+/obj/item/projectile/energy/phase
+ kill_count = 4
+ damage = 5
+ SA_bonus_damage = 55 // 60 total on animals.
+ SA_vulnerability = SA_ANIMAL
\ No newline at end of file
diff --git a/code/modules/projectiles/projectile/special.dm b/code/modules/projectiles/projectile/special.dm
index 8c5d2cd11a..7a6ecd6c1c 100644
--- a/code/modules/projectiles/projectile/special.dm
+++ b/code/modules/projectiles/projectile/special.dm
@@ -121,8 +121,9 @@
if(prob(15))
M.apply_effect((rand(30,80)),IRRADIATE)
M.Weaken(5)
+ var/datum/gender/TM = gender_datums[M.get_visible_gender()]
for (var/mob/V in viewers(src))
- V.show_message("[M] writhes in pain as \his vacuoles boil.", 3, "You hear the crunching of leaves.", 2)
+ V.show_message("[M] writhes in pain as [TM.his] vacuoles boil.", 3, "You hear the crunching of leaves.", 2)
if(prob(35))
// for (var/mob/V in viewers(src)) //Public messages commented out to prevent possible metaish genetics experimentation and stuff. - Cheridan
// V.show_message("[M] is mutated by the radiation beam.", 3, " You hear the snapping of twigs.", 2)
diff --git a/code/modules/reagents/reagent_containers/hypospray.dm b/code/modules/reagents/reagent_containers/hypospray.dm
index 604eaa6a3a..5288843f57 100644
--- a/code/modules/reagents/reagent_containers/hypospray.dm
+++ b/code/modules/reagents/reagent_containers/hypospray.dm
@@ -31,7 +31,7 @@
/obj/item/weapon/reagent_containers/hypospray/attack(mob/living/M as mob, mob/user as mob)
if(!reagents.total_volume)
- user << "[src] is empty."
+ to_chat(user, "[src] is empty.")
return
if (!istype(M))
return
@@ -40,21 +40,29 @@
if(istype(H))
var/obj/item/organ/external/affected = H.get_organ(user.zone_sel.selecting)
if(!affected)
- user << "\The [H] is missing that limb!"
+ to_chat(user, "\The [H] is missing that limb!")
return
else if(affected.robotic >= ORGAN_ROBOT)
- user << "You cannot inject a robotic limb."
+ to_chat(user, "You cannot inject a robotic limb.")
return
+ if(!H.stat)
+ if(H != user)
+ if(H.a_intent != I_HELP)
+ to_chat(user, "[H] is resisting your attempt to inject them with \the [src].")
+ to_chat(H, " [user] is trying to inject you with \the [src]!")
+ if(!do_after(user, 30))
+ return
+
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
- user << "You inject [M] with [src]."
- M << "You feel a tiny prick!"
+ to_chat(user, "You inject [M] with \the [src].")
+ to_chat(M, "You feel a tiny prick!")
if(M.reagents)
var/contained = reagentlist()
var/trans = reagents.trans_to_mob(M, amount_per_transfer_from_this, CHEM_BLOOD)
admin_inject_log(user, M, src, contained, trans)
- user << "[trans] units injected. [reagents.total_volume] units remaining in \the [src]."
+ to_chat(user, "[trans] units injected. [reagents.total_volume] units remaining in \the [src].")
if(!reusable && !used)
used = !used
@@ -110,7 +118,7 @@
user << "\The [src] already has a vial."
else
..()
-
+
/obj/item/weapon/reagent_containers/hypospray/autoinjector
name = "autoinjector"
desc = "A rapid and safe way to administer small amounts of drugs by untrained or trained personnel."
diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm
index dc4401f0bc..a6e158befa 100644
--- a/code/modules/research/designs.dm
+++ b/code/modules/research/designs.dm
@@ -491,6 +491,15 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/roller/adv
sort_string = "MBBAF"
+/datum/design/item/medical/enhanced_analyzer
+ name = "enhanced health analyzer"
+ desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels."
+ id = "advanced_analyzer"
+ req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
+ materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500)
+ build_path = /obj/item/device/healthanalyzer/advanced
+ sort_string = "MBBAG"
+
/datum/design/item/implant
materials = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50)
diff --git a/code/modules/surgery/slimes.dm b/code/modules/surgery/slimes.dm
index 05ceed18b1..ad4c413c8e 100644
--- a/code/modules/surgery/slimes.dm
+++ b/code/modules/surgery/slimes.dm
@@ -95,5 +95,6 @@
/datum/surgery_step/slime/saw_core/fail_step(mob/living/user, mob/living/simple_animal/slime/target, target_zone, obj/item/tool)
- user.visible_message("[user]'s hand slips, causing \him to miss the core!", \
+ var/datum/gender/T = gender_datums[user.get_visible_gender()]
+ user.visible_message("[user]'s hand slips, causing [T.him] to miss the core!", \
"Your hand slips, causing you to miss the core!")
\ No newline at end of file
diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm
index d24069ca5f..523b8e1eaf 100644
--- a/code/modules/virus2/effect.dm
+++ b/code/modules/virus2/effect.dm
@@ -121,9 +121,10 @@
stage = 4
badness = 3
activate(var/mob/living/carbon/mob,var/multiplier)
+ var/datum/gender/TM = gender_datums[mob.get_visible_gender()]
mob.suiciding = 30
//instead of killing them instantly, just put them at -175 health and let 'em gasp for a while
- viewers(mob) << "[mob.name] is holding \his breath. It looks like \he's trying to commit suicide."
+ viewers(mob) << "[mob.name] is holding [TM.his] breath. It looks like [TM.he] [TM.is] trying to commit suicide."
mob.adjustOxyLoss(175 - mob.getToxLoss() - mob.getFireLoss() - mob.getBruteLoss() - mob.getOxyLoss())
mob.updatehealth()
diff --git a/code/modules/xenoarcheaology/sampling.dm b/code/modules/xenoarcheaology/sampling.dm
index e79957ba28..ae7c203fa3 100644
--- a/code/modules/xenoarcheaology/sampling.dm
+++ b/code/modules/xenoarcheaology/sampling.dm
@@ -70,15 +70,15 @@
artifact_distance = rand()
artifact_id = container.artifact_find.artifact_id
else
- if(master_controller) //Sanity check due to runtimes ~Z
- for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
+ if(SSxenoarch) //Sanity check due to runtimes ~Z
+ for(var/turf/simulated/mineral/T in SSxenoarch.artifact_spawning_turfs)
if(T.artifact_find)
var/cur_dist = get_dist(container, T) * 2
if( (artifact_distance < 0 || cur_dist < artifact_distance))
artifact_distance = cur_dist + rand() * 2 - 1
artifact_id = T.artifact_find.artifact_id
else
- master_controller.artifact_spawning_turfs.Remove(T)
+ SSxenoarch.artifact_spawning_turfs.Remove(T)
/obj/item/device/core_sampler
name = "core sampler"
diff --git a/code/modules/xenoarcheaology/tools/tools.dm b/code/modules/xenoarcheaology/tools/tools.dm
index 1d79a89449..17412b4a8b 100644
--- a/code/modules/xenoarcheaology/tools/tools.dm
+++ b/code/modules/xenoarcheaology/tools/tools.dm
@@ -57,8 +57,8 @@
var/nearestSimpleTargetDist = -1
var/turf/cur_turf = get_turf(src)
- if(master_controller) //Sanity check due to runtimes ~Z
- for(var/A in master_controller.artifact_spawning_turfs)
+ if(SSxenoarch) //Sanity check due to runtimes ~Z
+ for(var/A in SSxenoarch.artifact_spawning_turfs)
var/turf/simulated/mineral/T = A
if(T.density && T.artifact_find)
if(T.z == cur_turf.z)
@@ -67,9 +67,9 @@
nearestTargetDist = cur_dist + rand() * 2 - 1
nearestTargetId = T.artifact_find.artifact_id
else
- master_controller.artifact_spawning_turfs.Remove(T)
+ SSxenoarch.artifact_spawning_turfs.Remove(T)
- for(var/A in master_controller.digsite_spawning_turfs)
+ for(var/A in SSxenoarch.digsite_spawning_turfs)
var/turf/simulated/mineral/T = A
if(T.density && T.finds && T.finds.len)
if(T.z == cur_turf.z)
@@ -77,7 +77,7 @@
if(nearestSimpleTargetDist < 0 || cur_dist < nearestSimpleTargetDist)
nearestSimpleTargetDist = cur_dist + rand() * 2 - 1
else
- master_controller.digsite_spawning_turfs.Remove(T)
+ SSxenoarch.digsite_spawning_turfs.Remove(T)
if(nearestTargetDist >= 0)
user << "Exotic energy detected on wavelength '[nearestTargetId]' in a radius of [nearestTargetDist]m[nearestSimpleTargetDist > 0 ? "; small anomaly detected in a radius of [nearestSimpleTargetDist]m" : ""]"
diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm
index 675149f8d1..f6fb5c885c 100644
--- a/code/modules/xenobio/items/extracts.dm
+++ b/code/modules/xenobio/items/extracts.dm
@@ -970,6 +970,7 @@
if(S)
new S(get_turf(holder.my_atom))
+ ..()
/datum/chemical_reaction/slime/rainbow_unity
name = "Slime Unity"
diff --git a/html/changelogs/Anewbe - ExplorerGear.yml b/html/changelogs/Anewbe - ExplorerGear.yml
new file mode 100644
index 0000000000..19eba8cbfb
--- /dev/null
+++ b/html/changelogs/Anewbe - ExplorerGear.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Lessens the bomb, bio, and rad protection on the Explorer Suit."
+ - tweak: "Replaces the Hunting Rifle cabinets with a Phase Pistol cabinet. Same general purpose, shoot animals, kill animals. Shoot people, get laughed at."
diff --git a/html/changelogs/Anewbe - Gloves.yml b/html/changelogs/Anewbe - Gloves.yml
new file mode 100644
index 0000000000..ddb365ea94
--- /dev/null
+++ b/html/changelogs/Anewbe - Gloves.yml
@@ -0,0 +1,37 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Gloves are generally less protective from shocks."
+ - tweak: "Budget Insulated Gloves will almost always be better than any other non-insulated glove."
diff --git a/html/changelogs/Anewbe - Hyposprays.yml b/html/changelogs/Anewbe - Hyposprays.yml
new file mode 100644
index 0000000000..53749bc731
--- /dev/null
+++ b/html/changelogs/Anewbe - Hyposprays.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - tweak: "Hyposprays and autoinjectors now have a delay on use when the target is conscious and not in Help Intent."
diff --git a/html/changelogs/Anewbe - MechsFall.yml b/html/changelogs/Anewbe - MechsFall.yml
new file mode 100644
index 0000000000..af4d4acedb
--- /dev/null
+++ b/html/changelogs/Anewbe - MechsFall.yml
@@ -0,0 +1,36 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+#################################
+
+# Your name.
+author: Anewbe
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - bugfix: "You need a parachute to survive atmospheric reentry, closets, mechs, and other impromptu parachutes will not longer prevent splatting."
diff --git a/icons/effects/blood.dmi b/icons/effects/blood.dmi
index f0146ec2cc..95e060cbd5 100644
Binary files a/icons/effects/blood.dmi and b/icons/effects/blood.dmi differ
diff --git a/icons/mecha/mech_construct.dmi b/icons/mecha/mech_construct.dmi
index 9213e418ff..22b85b0a78 100644
Binary files a/icons/mecha/mech_construct.dmi and b/icons/mecha/mech_construct.dmi differ
diff --git a/icons/mecha/mech_construction.dmi b/icons/mecha/mech_construction.dmi
index 5cf5b9cae7..225958a7db 100644
Binary files a/icons/mecha/mech_construction.dmi and b/icons/mecha/mech_construction.dmi differ
diff --git a/icons/mecha/mecha.dmi b/icons/mecha/mecha.dmi
index 743ed24466..5c3bb92b76 100644
Binary files a/icons/mecha/mecha.dmi and b/icons/mecha/mecha.dmi differ
diff --git a/icons/mob/back.dmi b/icons/mob/back.dmi
index e0fa980fb9..cd30b3a8cc 100644
Binary files a/icons/mob/back.dmi and b/icons/mob/back.dmi differ
diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi
index 6b0397c9e1..54b20e0165 100644
Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ
diff --git a/icons/mob/corgi_head.dmi b/icons/mob/corgi_head.dmi
index 105bdf4750..ca62243e79 100644
Binary files a/icons/mob/corgi_head.dmi and b/icons/mob/corgi_head.dmi differ
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 8992f9d2c6..7d15a48d24 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/icons/mob/items/lefthand.dmi b/icons/mob/items/lefthand.dmi
index e7de0f84f5..59ffc871b7 100644
Binary files a/icons/mob/items/lefthand.dmi and b/icons/mob/items/lefthand.dmi differ
diff --git a/icons/mob/items/lefthand_hats.dmi b/icons/mob/items/lefthand_hats.dmi
index 58572857fc..6be64d7a7d 100644
Binary files a/icons/mob/items/lefthand_hats.dmi and b/icons/mob/items/lefthand_hats.dmi differ
diff --git a/icons/mob/items/lefthand_storage.dmi b/icons/mob/items/lefthand_storage.dmi
index 9cd0cb1d52..c4518a59ec 100644
Binary files a/icons/mob/items/lefthand_storage.dmi and b/icons/mob/items/lefthand_storage.dmi differ
diff --git a/icons/mob/items/lefthand_suits.dmi b/icons/mob/items/lefthand_suits.dmi
index 8e4053f8a4..d58dd02379 100644
Binary files a/icons/mob/items/lefthand_suits.dmi and b/icons/mob/items/lefthand_suits.dmi differ
diff --git a/icons/mob/items/righthand.dmi b/icons/mob/items/righthand.dmi
index 242e2b599e..f2e96a0c69 100644
Binary files a/icons/mob/items/righthand.dmi and b/icons/mob/items/righthand.dmi differ
diff --git a/icons/mob/items/righthand_hats.dmi b/icons/mob/items/righthand_hats.dmi
index 7d089a8a0f..8bf6d4155d 100644
Binary files a/icons/mob/items/righthand_hats.dmi and b/icons/mob/items/righthand_hats.dmi differ
diff --git a/icons/mob/items/righthand_storage.dmi b/icons/mob/items/righthand_storage.dmi
index e3ecbc1f09..9a34f3b89c 100644
Binary files a/icons/mob/items/righthand_storage.dmi and b/icons/mob/items/righthand_storage.dmi differ
diff --git a/icons/mob/items/righthand_suits.dmi b/icons/mob/items/righthand_suits.dmi
index 5fe5403304..d0ced6b9c2 100644
Binary files a/icons/mob/items/righthand_suits.dmi and b/icons/mob/items/righthand_suits.dmi differ
diff --git a/icons/mob/light_overlays.dmi b/icons/mob/light_overlays.dmi
index fb942bbce5..9a93faef34 100644
Binary files a/icons/mob/light_overlays.dmi and b/icons/mob/light_overlays.dmi differ
diff --git a/icons/mob/robots.dmi b/icons/mob/robots.dmi
index a331158939..48df908aef 100644
Binary files a/icons/mob/robots.dmi and b/icons/mob/robots.dmi differ
diff --git a/icons/mob/species/seromi/back.dmi b/icons/mob/species/seromi/back.dmi
index 597c43e234..d0af48607c 100644
Binary files a/icons/mob/species/seromi/back.dmi and b/icons/mob/species/seromi/back.dmi differ
diff --git a/icons/mob/species/seromi/head.dmi b/icons/mob/species/seromi/head.dmi
index 0316955602..849144c6f3 100644
Binary files a/icons/mob/species/seromi/head.dmi and b/icons/mob/species/seromi/head.dmi differ
diff --git a/icons/mob/species/seromi/suit.dmi b/icons/mob/species/seromi/suit.dmi
index 31bc6a2890..14f5755ef5 100644
Binary files a/icons/mob/species/seromi/suit.dmi and b/icons/mob/species/seromi/suit.dmi differ
diff --git a/icons/mob/species/seromi/ties.dmi b/icons/mob/species/seromi/ties.dmi
index 7e076caf44..bd88c2dedd 100644
Binary files a/icons/mob/species/seromi/ties.dmi and b/icons/mob/species/seromi/ties.dmi differ
diff --git a/icons/mob/species/seromi/uniform.dmi b/icons/mob/species/seromi/uniform.dmi
index 53a15f94f4..c11e63db0c 100644
Binary files a/icons/mob/species/seromi/uniform.dmi and b/icons/mob/species/seromi/uniform.dmi differ
diff --git a/icons/mob/species/skrell/suit.dmi b/icons/mob/species/skrell/suit.dmi
index ab7f712844..0283191265 100644
Binary files a/icons/mob/species/skrell/suit.dmi and b/icons/mob/species/skrell/suit.dmi differ
diff --git a/icons/mob/species/tajaran/suit.dmi b/icons/mob/species/tajaran/suit.dmi
index 60bb13c6e1..39cc76b50f 100644
Binary files a/icons/mob/species/tajaran/suit.dmi and b/icons/mob/species/tajaran/suit.dmi differ
diff --git a/icons/mob/species/unathi/suit.dmi b/icons/mob/species/unathi/suit.dmi
index d3a54865fd..7c9e5022cf 100644
Binary files a/icons/mob/species/unathi/suit.dmi and b/icons/mob/species/unathi/suit.dmi differ
diff --git a/icons/mob/species/vox/uniform.dmi b/icons/mob/species/vox/uniform.dmi
index 46fe74d39c..6e33c45b5e 100644
Binary files a/icons/mob/species/vox/uniform.dmi and b/icons/mob/species/vox/uniform.dmi differ
diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi
index 8bb300d163..1e4770ea1e 100644
Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ
diff --git a/icons/mob/ties.dmi b/icons/mob/ties.dmi
index d23e81d7bd..fa22bde1c4 100644
Binary files a/icons/mob/ties.dmi and b/icons/mob/ties.dmi differ
diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi
index 5261e549f8..a41e567a82 100644
Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ
diff --git a/icons/mob/uniform_rolled_down.dmi b/icons/mob/uniform_rolled_down.dmi
index e379946851..cad1f2ba97 100644
Binary files a/icons/mob/uniform_rolled_down.dmi and b/icons/mob/uniform_rolled_down.dmi differ
diff --git a/icons/mob/uniform_sleeves_rolled.dmi b/icons/mob/uniform_sleeves_rolled.dmi
index 6f7d959fd6..84496075cc 100644
Binary files a/icons/mob/uniform_sleeves_rolled.dmi and b/icons/mob/uniform_sleeves_rolled.dmi differ
diff --git a/icons/obj/aibots.dmi b/icons/obj/aibots.dmi
index abcf7c1cf9..9627b2bb6a 100644
Binary files a/icons/obj/aibots.dmi and b/icons/obj/aibots.dmi differ
diff --git a/icons/obj/bureaucracy.dmi b/icons/obj/bureaucracy.dmi
index b621d05474..e8d3946b34 100644
Binary files a/icons/obj/bureaucracy.dmi and b/icons/obj/bureaucracy.dmi differ
diff --git a/icons/obj/closet.dmi b/icons/obj/closet.dmi
index cf99daa067..5fd95e85d7 100644
Binary files a/icons/obj/closet.dmi and b/icons/obj/closet.dmi differ
diff --git a/icons/obj/clothing/backpack.dmi b/icons/obj/clothing/backpack.dmi
index a5b109af2b..e64ac2d3b0 100644
Binary files a/icons/obj/clothing/backpack.dmi and b/icons/obj/clothing/backpack.dmi differ
diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi
index ff20e5913e..2fcbe66574 100644
Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ
diff --git a/icons/obj/clothing/species/seromi/suits.dmi b/icons/obj/clothing/species/seromi/suits.dmi
index 8324d9274d..cd8ee95287 100644
Binary files a/icons/obj/clothing/species/seromi/suits.dmi and b/icons/obj/clothing/species/seromi/suits.dmi differ
diff --git a/icons/obj/clothing/species/seromi/uniform.dmi b/icons/obj/clothing/species/seromi/uniform.dmi
index dbb76626e0..053d839a88 100644
Binary files a/icons/obj/clothing/species/seromi/uniform.dmi and b/icons/obj/clothing/species/seromi/uniform.dmi differ
diff --git a/icons/obj/clothing/species/skrell/suits.dmi b/icons/obj/clothing/species/skrell/suits.dmi
index 00a304a197..30d404ac82 100644
Binary files a/icons/obj/clothing/species/skrell/suits.dmi and b/icons/obj/clothing/species/skrell/suits.dmi differ
diff --git a/icons/obj/clothing/species/tajaran/suits.dmi b/icons/obj/clothing/species/tajaran/suits.dmi
index a18223677f..d9b3a8ff35 100644
Binary files a/icons/obj/clothing/species/tajaran/suits.dmi and b/icons/obj/clothing/species/tajaran/suits.dmi differ
diff --git a/icons/obj/clothing/species/unathi/suits.dmi b/icons/obj/clothing/species/unathi/suits.dmi
index 21e0f8bcd7..5c0f9c3e20 100644
Binary files a/icons/obj/clothing/species/unathi/suits.dmi and b/icons/obj/clothing/species/unathi/suits.dmi differ
diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi
index 174f820ea0..b8ef0246dc 100644
Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ
diff --git a/icons/obj/clothing/ties.dmi b/icons/obj/clothing/ties.dmi
index 944a4938b4..51fa43389d 100644
Binary files a/icons/obj/clothing/ties.dmi and b/icons/obj/clothing/ties.dmi differ
diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi
index eeb8183879..e494bc966c 100644
Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ
diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi
index 908d3ade7c..e0e3305d44 100644
Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ
diff --git a/icons/obj/doors/doormedglass.dmi b/icons/obj/doors/doormedglass.dmi
index 2d86a8ed81..da84aae6a2 100644
Binary files a/icons/obj/doors/doormedglass.dmi and b/icons/obj/doors/doormedglass.dmi differ
diff --git a/icons/obj/flora/snowflora.dmi b/icons/obj/flora/snowflora.dmi
index 11cbf5a505..873763ddd9 100644
Binary files a/icons/obj/flora/snowflora.dmi and b/icons/obj/flora/snowflora.dmi differ
diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi
index d7a107da94..4bb7b955a0 100644
Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ
diff --git a/icons/obj/items.dmi b/icons/obj/items.dmi
index 684cb25b59..bebe9efbee 100644
Binary files a/icons/obj/items.dmi and b/icons/obj/items.dmi differ
diff --git a/icons/obj/light_overlays.dmi b/icons/obj/light_overlays.dmi
index c7bb310ce9..d5d6499305 100644
Binary files a/icons/obj/light_overlays.dmi and b/icons/obj/light_overlays.dmi differ
diff --git a/icons/obj/lighting.dmi b/icons/obj/lighting.dmi
index c761dacf1e..f79493ec03 100644
Binary files a/icons/obj/lighting.dmi and b/icons/obj/lighting.dmi differ
diff --git a/icons/obj/machines/power/fusion.dmi b/icons/obj/machines/power/fusion.dmi
index be236a145e..4d20f04fcd 100644
Binary files a/icons/obj/machines/power/fusion.dmi and b/icons/obj/machines/power/fusion.dmi differ
diff --git a/icons/obj/pda.dmi b/icons/obj/pda.dmi
index b764be7e73..9928e2fee2 100644
Binary files a/icons/obj/pda.dmi and b/icons/obj/pda.dmi differ
diff --git a/icons/obj/pda_old.dmi b/icons/obj/pda_old.dmi
index 1799aeab52..fcded39c1e 100644
Binary files a/icons/obj/pda_old.dmi and b/icons/obj/pda_old.dmi differ
diff --git a/icons/obj/pda_slim.dmi b/icons/obj/pda_slim.dmi
index 1e26655175..0e5e8b7ee3 100644
Binary files a/icons/obj/pda_slim.dmi and b/icons/obj/pda_slim.dmi differ
diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi
index c9e19dd40b..fba164799e 100644
Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ
diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi
index 3e39c77171..3b88c088e9 100644
Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ
diff --git a/icons/obj/syringe.dmi b/icons/obj/syringe.dmi
index e604b23f3f..20faa74a13 100644
Binary files a/icons/obj/syringe.dmi and b/icons/obj/syringe.dmi differ
diff --git a/maps/southern_cross/items/headset_sc.dm b/maps/southern_cross/items/headset_sc.dm
index d7212210f3..75936ecb01 100644
--- a/maps/southern_cross/items/headset_sc.dm
+++ b/maps/southern_cross/items/headset_sc.dm
@@ -11,6 +11,11 @@
desc = "A bowman headset used by pilots, has access to supply and explorer channels."
icon_state = "pilot_headset_alt"
+/obj/item/device/radio/headset/pilot/alt
+ name = "pilot's bowman headset"
+ desc = "A bowman headset used by pilots, has access to supply and explorer channels."
+ icon_state = "pilot_headset_alt"
+
/obj/item/device/radio/headset/explorer
name = "explorer's headset"
desc = "Headset used by explorers for exploring. Access to the explorer channel."
diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm
index cda86ac00e..5b1e2a0caf 100644
--- a/maps/southern_cross/southern_cross-3.dmm
+++ b/maps/southern_cross/southern_cross-3.dmm
@@ -80,10 +80,10 @@
"bB" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"bC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"bD" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining_airlock_control2"; name = "Mining Access Console"; pixel_x = 26; pixel_y = 26; tag_exterior_door = "mining_airlock_exterior2"; tag_interior_door = "mining_airlock_interior2"},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
-"bE" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_airlock_control2"; name = "Mining Access Button"; pixel_x = 6; pixel_y = 26; req_access = null; req_one_access = list(12,47)},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_interior2"; locked = 1; name = "Mining Interior Outpost"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"bE" = (/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining_airlock_control2"; name = "Mining Access Button"; pixel_x = 6; pixel_y = 26; req_access = null; req_one_access = list(12,47,48)},/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_interior2"; locked = 1; name = "Mining Interior Outpost"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
"bF" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
"bG" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
-"bH" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_exterior2"; locked = 1; name = "Mining Exterior Outpost"},/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button/airlock_exterior{master_tag = "mining_airlock_control2"; pixel_y = 24; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"bH" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining_airlock_exterior2"; locked = 1; name = "Mining Exterior Outpost"},/obj/effect/decal/cleanable/dirt,/obj/machinery/access_button/airlock_exterior{master_tag = "mining_airlock_control2"; pixel_y = 24; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
"bI" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/security)
"bJ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
"bK" = (/obj/machinery/door/firedoor/glass,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/security)
@@ -110,8 +110,8 @@
"cf" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
"cg" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
"ch" = (/obj/machinery/deployable/barrier,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
-"ci" = (/obj/machinery/light{dir = 1},/obj/structure/closet/secure_closet/guncabinet/rifle,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
-"cj" = (/obj/structure/closet/secure_closet/guncabinet/rifle,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"ci" = (/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"cj" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/obj/structure/closet/secure_closet/guncabinet/phase,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"ck" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/structure/table/standard,/obj/item/weapon/book/codex/corp_regs,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/red/border{dir = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"cl" = (/obj/machinery/status_display,/turf/simulated/wall,/area/surface/outpost/main/gateway)
"cm" = (/obj/machinery/gateway{dir = 9},/turf/simulated/floor/tiled/techfloor,/area/surface/outpost/main/gateway)
@@ -264,10 +264,10 @@
"fd" = (/obj/structure/table/glass,/obj/item/weapon/storage/firstaid/toxin{pixel_x = 5; pixel_y = 5},/obj/item/weapon/storage/firstaid/fire{pixel_x = 0; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/first_aid)
"fe" = (/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"ff" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outside/plains/outpost)
-"fg" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_exterior"; locked = 1; name = "Mining Exterior Outpost"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = 0; pixel_y = -24; req_access = null; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"fg" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_exterior"; locked = 1; name = "Mining Exterior Outpost"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = 0; pixel_y = -24; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
"fh" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
"fi" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/mining_main)
-"fj" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_interior"; locked = 1; name = "Mining Interior Outpost"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = -6; pixel_y = -26; req_access = null; req_one_access = list(12,47)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
+"fj" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "mining1_airlock_interior"; locked = 1; name = "Mining Interior Outpost"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "mining1_airlock_control"; name = "Mining Access Button"; pixel_x = -6; pixel_y = -26; req_access = null; req_one_access = list(12,47,48)},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/mining_main)
"fk" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/obj/machinery/embedded_controller/radio/airlock/access_controller{id_tag = "mining1_airlock_control"; name = "Mining Access Console"; pixel_x = -26; pixel_y = -26; tag_exterior_door = "mining1_airlock_exterior"; tag_interior_door = "mining1_airlock_interior"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"fl" = (/obj/structure/cable/blue{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
"fm" = (/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/surface/outpost/mining_main)
@@ -282,9 +282,9 @@
"fv" = (/obj/machinery/mineral/processing_unit_console,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/refinery)
"fw" = (/obj/machinery/mineral/processing_unit,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/refinery)
"fx" = (/turf/simulated/wall,/area/surface/outpost/main/security)
-"fy" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 10},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fy" = (/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 10},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/obj/item/weapon/storage/belt/utility/full,/obj/item/weapon/storage/belt/utility/full,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"fz" = (/obj/machinery/door/window/northright,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
-"fA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 1},/obj/structure/cable/blue,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 5},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"fA" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 1},/obj/structure/cable/blue,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/effect/floor_decal/borderfloor/corner2{dir = 5},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 5},/obj/structure/closet/crate/secure/gear{name = "explorer crate"; req_access = list(43)},/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/obj/item/bodybag/cryobag,/obj/item/bodybag/cryobag,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"fB" = (/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/door/airlock/glass{name = "Gateway Access"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/gateway)
"fC" = (/turf/simulated/wall,/area/surface/outpost/main/first_aid)
"fD" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/structure/cable/blue,/obj/structure/window/reinforced{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/white/border{dir = 8},/obj/effect/floor_decal/borderfloor/corner2{dir = 10},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
@@ -364,16 +364,16 @@
"gZ" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/machinery/light,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/item/device/paicard,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"ha" = (/obj/structure/closet/secure_closet/explorer,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"hb" = (/obj/structure/closet/secure_closet/explorer,/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
-"hc" = (/obj/structure/closet/secure_closet/explorer,/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
+"hc" = (/obj/structure/closet/secure_closet/explorer,/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/weapon/pickaxe,/turf/simulated/floor/tiled,/area/surface/outpost/main/security)
"hd" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/green/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"he" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"hf" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/main)
"hg" = (/obj/machinery/mech_recharger,/obj/structure/extinguisher_cabinet{pixel_x = -25},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
"hh" = (/obj/structure/table/steel,/obj/item/weapon/crowbar,/obj/item/weapon/crowbar,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/multitool,/obj/machinery/ai_status_display{pixel_y = -32},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
"hi" = (/obj/machinery/mech_recharger,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/first_aid)
-"hj" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - SAR Prep"; dir = 2},/obj/effect/landmark/start{name = "Search and Rescue"},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hj" = (/obj/structure/closet/secure_closet/medical_wall/pills{pixel_y = 32},/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"hk" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/white/bordercorner2,/obj/structure/closet/secure_closet/medical_wall{name = "O- Blood Locker"; pixel_x = 0; pixel_y = -32},/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/OMinus,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/iv_drip,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
-"hl" = (/obj/structure/closet/secure_closet/sar,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/item/roller/adv{pixel_y = 5},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hl" = (/obj/machinery/camera/network/main_outpost{c_tag = "MO - SAR Prep"; dir = 2},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"hm" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"hn" = (/obj/structure/table/steel,/obj/item/device/gps,/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"ho" = (/obj/structure/cable/yellow{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
@@ -386,7 +386,7 @@
"hv" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"hw" = (/obj/machinery/status_display,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
"hx" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/telecomms)
-"hy" = (/obj/structure/closet/secure_closet/sar,/obj/machinery/light,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/obj/item/roller/adv,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
+"hy" = (/obj/structure/closet/secure_closet/sar,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/item/roller/adv{pixel_y = 5},/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"hz" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/teleporter)
"hA" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"hB" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main)
@@ -455,7 +455,7 @@
"iM" = (/obj/machinery/power/terminal,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"iN" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/obj/structure/cable/blue,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"iO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
-"iP" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"iP" = (/obj/structure/closet/secure_closet/sar,/obj/machinery/light,/obj/item/weapon/storage/box/bodybags,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/white/border,/obj/item/roller/adv,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled,/area/surface/outpost/main/first_aid)
"iQ" = (/obj/machinery/atmospherics/binary/pump/on{dir = 4},/obj/machinery/portable_atmospherics/powered/pump/filled{pixel_x = 0},/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"iR" = (/obj/machinery/atmospherics/pipe/manifold/visible/yellow,/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/machinery/meter,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"iS" = (/obj/machinery/atmospherics/omni/atmos_filter{tag_east = 2; tag_north = 7; tag_west = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
@@ -475,7 +475,7 @@
"jg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/closet/toolcloset,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"jh" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"ji" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/wall/r_wall,/area/surface/outpost/mining_main/gen_room)
-"jj" = (/obj/machinery/portable_atmospherics/canister/air,/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Outpost Mining Atmospherics"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"jj" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power South"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"jk" = (/obj/machinery/atmospherics/pipe/tank/phoron{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"jl" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 740},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
"jm" = (/turf/simulated/wall/r_wall,/area/surface/outpost/main/gen_room)
@@ -600,14 +600,14 @@
"lB" = (/obj/structure/cable/heavyduty,/obj/machinery/power/terminal{dir = 4},/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/random/powercell,/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
"lC" = (/obj/machinery/power/smes/buildable/outpost_substation{charge = 500000; input_attempt = 1; input_level = 150000; output_level = 150000; RCon_tag = "Outpost - Dorms"},/obj/structure/cable/blue{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
"lD" = (/turf/simulated/wall,/area/surface/outpost/main/bar)
-"lE" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_alc/full,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lF" = (/obj/machinery/button/remote/blast_door{id = "barout"; name = "Bar Shutters"; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lG" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 4; id = "barout"; layer = 3.1; name = "Bar Shutters"},/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lH" = (/obj/item/weapon/stool,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lI" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lJ" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lK" = (/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"lL" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
+"lE" = (/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room)
+"lF" = (/obj/structure/table/marble,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lG" = (/obj/structure/table/marble,/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lH" = (/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lI" = (/obj/structure/cable/blue{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lJ" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 1; name = "north bump"; operating = 0; pixel_x = 0; pixel_y = 24},/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lK" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/frame/extinguisher_cabinet,/obj/item/weapon/extinguisher,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"lL" = (/obj/structure/table/marble,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar West"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
"lM" = (/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor)
"lN" = (/obj/effect/overlay/snow/floor,/obj/machinery/light/small,/turf/simulated/floor/tiled/steel/sif/planetuse,/area/surface/outpost/main/corridor)
"lO" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/holofloor/wood,/area/surface/outpost/main/gym)
@@ -635,14 +635,14 @@
"mk" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
"ml" = (/obj/machinery/light/small{dir = 8; pixel_x = 0},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
"mm" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
-"mn" = (/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar West"; dir = 4},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mp" = (/obj/structure/table/marble,/obj/machinery/cash_register/civilian{dir = 8; icon_state = "register_idle"; tag = "icon-register_idle (WEST)"},/obj/machinery/door/blast/shutters{dir = 4; id = "barout"; layer = 3.1; name = "Bar Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mq" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mr" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"ms" = (/obj/structure/bed/chair/wood,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mt" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mu" = (/obj/structure/table/woodentable,/obj/machinery/microwave,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
+"mn" = (/obj/structure/table/marble,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mo" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mp" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mq" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mr" = (/obj/structure/table,/obj/item/stack/material/wood,/obj/item/stack/material/wood,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"ms" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/item/weapon/stock_parts/motor,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mt" = (/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mu" = (/obj/structure/table/marble,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
"mv" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/wall/r_wall,/area/surface/outpost/main/corridor)
"mw" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/corridor)
"mx" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main4_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main4_airlock_control"; name = "Main Access Button"; pixel_x = 32; pixel_y = 0; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
@@ -666,13 +666,13 @@
"mP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
"mQ" = (/obj/structure/cable/blue{d2 = 4; icon_state = "0-4"},/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
"mR" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/blue{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
-"mS" = (/obj/machinery/light{dir = 8},/obj/machinery/vending/boozeomat{req_access = null},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mT" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 4; id = "barout"; layer = 3.1; name = "Bar Shutters"},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mU" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mV" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mW" = (/obj/structure/table/woodentable,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mX" = (/obj/structure/table/woodentable,/obj/item/device/paicard,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"mY" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar East"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
+"mS" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mT" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/box/donkpockets,/obj/machinery/camera/network/main_outpost{c_tag = "MO - Bar East"; dir = 8},/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/table,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mV" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mW" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"mY" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
"mZ" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/cable/heavyduty{icon_state = "1-2"},/turf/simulated/floor/plating,/area/surface/outpost/main/corridor)
"na" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Corridor Access North"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
"nb" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
@@ -693,14 +693,14 @@
"nq" = (/obj/structure/cable/blue{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 36; pixel_y = 1},/turf/simulated/floor/plating,/area/surface/outpost/main/construction_area)
"nr" = (/obj/structure/sign/electricshock,/turf/simulated/wall,/area/surface/outpost/main/gen_room/smes)
"ns" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/engineering{name = "SMES Room"; req_one_access = list(12,47)},/turf/simulated/floor/plating,/area/surface/outpost/main/gen_room/smes)
-"nt" = (/obj/machinery/smartfridge/drinks,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nu" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nv" = (/obj/structure/table/marble,/obj/machinery/door/blast/shutters{dir = 4; id = "barout"; layer = 3.1; name = "Bar Shutters"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nw" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nx" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"ny" = (/obj/structure/bed/chair/wood{dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nz" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nA" = (/obj/structure/table/woodentable,/obj/machinery/recharger,/obj/machinery/newscaster{pixel_x = 30; pixel_y = 0},/obj/item/clothing/head/hardhat/orange,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
+"nt" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nu" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nv" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nw" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nx" = (/obj/structure/table/standard,/obj/item/device/paicard,/obj/item/weapon/book/codex/lore/vir,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"ny" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Bar"},/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
+"nz" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
+"nA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
"nB" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
"nC" = (/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
"nD" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
@@ -709,7 +709,7 @@
"nG" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
"nH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
"nI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
-"nJ" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/cups,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
+"nJ" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
"nK" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"nL" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"nM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
@@ -723,10 +723,8 @@
"nU" = (/turf/simulated/wall,/area/surface/outpost/main/construction_area)
"nV" = (/obj/structure/closet/emcloset,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
"nW" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
-"nX" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nY" = (/obj/machinery/door/window/eastright{name = "Bar"; req_access = null; req_one_access = list(25,43,67)},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
-"nZ" = (/obj/structure/cable/blue{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/wood,/area/surface/outpost/main/bar)
-"oa" = (/obj/machinery/alarm{dir = 1; pixel_y = -25},/turf/simulated/floor/wood,/area/surface/outpost/main/bar)
+"nX" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty{outdoors = 1},/area/surface/outpost/main/dorms)
+"nY" = (/turf/simulated/floor/wood{outdoors = 1},/area/surface/outside/path/plains)
"ob" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main4_airlock_interior"; locked = 1; name = "Main Outpost Interior"},/obj/machinery/access_button{command = "cycle_interior"; frequency = 1379; master_tag = "main4_airlock_control"; name = "Main Access Button"; pixel_x = 32; pixel_y = 6; req_access = null},/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/corridor)
"oc" = (/obj/structure/closet/athletic_mixed,/obj/machinery/newscaster{layer = 3.3; pixel_x = 0; pixel_y = -27},/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
"od" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/tiled,/area/surface/outpost/main/gym)
@@ -746,7 +744,6 @@
"or" = (/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
"os" = (/obj/structure/cable/blue{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
"ot" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/surface/outpost/main/bar)
-"ou" = (/obj/machinery/door/firedoor/glass,/obj/machinery/door/airlock/glass{name = "Bar"},/obj/structure/cable/blue{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/tiled/steel_grid,/area/surface/outpost/main/bar)
"ov" = (/obj/structure/cable/heavyduty{icon_state = "1-2"},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
"ow" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
"ox" = (/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor)
@@ -758,7 +755,6 @@
"oD" = (/obj/structure/table/bench/marble,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"oE" = (/obj/machinery/door/airlock{name = "Unit 2"},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"oF" = (/obj/machinery/recharge_station,/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
-"oG" = (/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"oH" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/surface/outpost/main/dorms)
"oI" = (/obj/effect/floor_decal/industrial/warning{dir = 9},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"oJ" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 5},/obj/machinery/camera/network/main_outpost{c_tag = "MO - Dorms Access"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
@@ -800,7 +796,6 @@
"pt" = (/obj/structure/disposalpipe/junction/yjunction{dir = 8},/turf/simulated/floor/tiled,/area/surface/outpost/main)
"pu" = (/obj/structure/closet/secure_closet/personal,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"pv" = (/obj/structure/mirror{pixel_x = 28},/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
-"pw" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"px" = (/obj/machinery/door/airlock/mining{autoclose = 0; frequency = 1379; icon_state = "door_locked"; id_tag = "main1_airlock_exterior"; locked = 1; name = "Main Outpost Exterior"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1379; master_tag = "main1_airlock_control"; name = "Main Access Button"; pixel_x = 0; pixel_y = -24; req_access = null},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"py" = (/obj/effect/floor_decal/industrial/warning{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"pz" = (/obj/effect/floor_decal/industrial/warning{dir = 4},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
@@ -836,7 +831,6 @@
"qd" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"qe" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
"qf" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/restroom)
-"qg" = (/obj/effect/decal/cleanable/dirt,/obj/machinery/light/small{dir = 4},/obj/effect/overlay/snow/floor,/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/dorms)
"qh" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/surface/outpost/main/dorms)
"qi" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
"qj" = (/obj/structure/closet/wardrobe/mixed,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/machinery/light,/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/dorms)
@@ -1470,7 +1464,6 @@
"Cn" = (/turf/simulated/floor/tiled,/area/surface/outpost/research/xenoresearch/xenoflora)
"Co" = (/turf/simulated/floor/water/deep,/area/surface/outside/river/indalsalven)
"Cp" = (/turf/simulated/wall,/area/surface/outside/path/plains)
-"Cq" = (/turf/simulated/floor/wood,/area/surface/outside/path/plains)
"Cr" = (/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/obj/structure/reagent_dispensers/watertank,/obj/item/weapon/extinguisher,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/white,/area/surface/outpost/research/xenoresearch/xenobiology)
"Cs" = (/obj/structure/disposalpipe/segment,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/structure/window/reinforced/full,/turf/simulated/floor/plating,/area/surface/outpost/research/xenoresearch/xenobiology)
"Ct" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "xenobio1"; name = "Containment Blast Doors"; opacity = 0},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/window/brigdoor/southright{name = "Containment Pen"; req_access = list(47)},/turf/simulated/floor/reinforced,/area/surface/outpost/research/xenoresearch/xenobiology)
@@ -1595,29 +1588,29 @@ aaaeaeaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcuajaj
aaaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucuajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbmbnbnbnbnbnbnbnbmbobpblbqbqbqbqbqbqbqbqbqboajajajaCaCaCaCdYdZcYcYeaebeccEedeeeecEeedbcEcEefegcFehaiaiaiajajajajajajajajajajbJeiejekelemeneoepeqereqeseteuevewexeyezbRajajajajajajajajajajajajagagagagagagagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucuajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbmbnbnbnbnbnbnbnbmbobpblbqbqbqbqbqbqbqbqbqbobhbhbhaFeAeBaFeCeDeEeFbceGbdeHeIeIeJeKeeeLcEeMeMeMeMeNaiaiaiajajajajajajajajajajbIeOePeQeReSeTbJeUeVeWeXeYbReZfafbfcfdfebQajajajajajajajajajajajajagagagagagagagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmbobhbhfffgfhfifjfkflfmfnfmfofpfqfrfsftfufvfwcEeMeMeMeMeNaiaiaiaiajajajajajajajbIbIbIfxfxfxfyfzfAfxcLbjfBbjcLfCfDfEfFfCfCfCbQbQajajajajajajajajajajajagagagagagagagaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmbobhbhfGaEfHfIaEfJfKfLbZbdeGbdeHeIfMfNfOeefPcEeMeMeMeMeNaiaiaiaiaiaiaiaiaiaifQbJfRfSbJfTfUfVcJfWgdbJfXfYfZbRgagbgbgchjjrgbgebRajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmboaiaiaiaEaEgfaEggggaEghgigjgkcEgleeeegmeedbcEeMeMeMeMgnaiaiaiaiaiaiaiaiaiaifQgogpgqgrgscJgtelelgugvgwgxgygzgAgBgBgCgbgbgDgEbRajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmboaiaiaiaGgFgGgHgGgIaGgJgKgLgKcEgMgNgOgPgQgRcEgSgSgSgSgTaiaiaiaiaiaiaiaiaiaigUbIgVgWbIgXgZgYhahbhcfxhdhehffChghhhihkhyhlhmhnbQajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmbobhbhfGaEfHfIaEfJfKfLbZbdeGbdeHeIfMfNfOeefPcEeMeMeMeMeNaiaiaiaiaiaiaiaiaiaifQbJfRfSbJfTfUfVcJfWgdbJfXfYfZbRgagbgbgchlhjgbgebRajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmboaiaiaiaEaEgfaEggggaEghgigjgkcEgleeeegmeedbcEeMeMeMeMgnaiaiaiaiaiaiaiaiaiaifQgogpgqgrgscJgtelelgugvgwgxgygzgAgBgBgCjrjrgDgEbRajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucucucuajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmboaiaiaiaGgFgGgHgGgIaGgJgKgLgKcEgMgNgOgPgQgRcEgSgSgSgSgTaiaiaiaiaiaiaiaiaiaigUbIgVgWbIgXgZgYhahbhcfxhdhehffChghhhihkiPhyhmhnbQajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucucucuajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbnbnbnbnbnbnbobpblbmbqbqbqbqbqbqbqbmboajaiaiaGaGhohphqhrhshthuhvhuhwaGaGaGaGaGaGaGajajajajakaiaiaiaiaiajajajajajajbIhxhxhxhxhxhzhzhzhzhzhAhehBhChChChChChDhDhDhChCajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucucucuajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbnbmbmbmbnbnbnbobpblbmbqbqbqbqbqbqbqbmboajaiaiaiaGhEhFhuhGhHhIhJhKhLhMhNhOhPhPhQaGajajajajajakaiaiaiaiajajajajajajajajhxhRhShThxhUhVhWhXhYhAhehBhChZiaibicidieifighCajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajcucucucucuajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajblbnbnbmbmbmbmbmbnbnbobpblbmbmbqbqbqbqbqbmbmboajaiaiaiaGihhFhuiiijikiliminioipipiqirisaGajajajajajakaiaiaiajajajajajajajajajhxitiuivhxiwixixiyhziziAiBhCiCiDiDiDiEiEiDiFhCajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajiGiHiIiIiIiIiIiIiIiIiIiJiGiHiIiIiIiIiIiIiIiIiIiJiGajaiaiaGiKiLiMhGhuiNiOiPiQiRiSiTiUiViWaGajajajajajakaiaiaiajajajajajajajajajhxhxiXhxhxiYiZjajbhzhAhejchCiEiEjdififiEiEiDhDajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajaGaHajajajaiaiaiajajajaHaGaHajajajaiaiaiajajajaHaGajaiaiaGaGjejfjgjhaGaGjiaGaGjjjkjljlaGaGajajajajajakaiaiaiajajajajajajajajajjmjnjojpjqhzhzEbhzhzjshejthDjuiEjvjwjxiDiEiEhDajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajiGiHiIiIiIiIiIiIiIiIiIiJiGiHiIiIiIiIiIiIiIiIiIiJiGajaiaiaGiKiLiMhGhuiNiOjjiQiRiSiTiUiViWaGajajajajajakaiaiaiajajajajajajajajajhxhxiXhxhxiYiZjajbhzhAhejchCiEiEjdififiEiEiDhDajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajaGaHajajajaiaiaiajajajaHaGaHajajajaiaiaiajajajaHaGajaiaiaGaGjejfjgjhaGaGjiaGaGlEjkjljlaGaGajajajajajakaiaiaiajajajajajajajajajjmjnjojpjqhzhzEbhzhzjshejthDjuiEjvjwjxiDiEiEhDajajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajaiaiaiaiajajajajajajajajaiaiaiajajajajajaiaiaiaGaGaGaGjyaGjzjAjzaGaGaGaGaGaGajajajajajajakaiaiaiajajajajajajajajajjmjBjCjDjEjFjGjHjIjJfXhejKhDjLiEjMiEiDiDiEiEhDajjNjNajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajaiaiaiaiaiajajajajajajajajaiaiaiajajajajaiaiaijOjPjPjPjQjPjPjRjSjSjSjSjSjSjSjSjSjSjSjSjSjTjSjSjSjUjUjUjUjUjUjUjUjUjVjWjXjYjZkakbkckbkdkbkekfkgkhkikjkikikkiEiEhDajajjNajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiakaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiakaiaiaiajajajajajajajajajjmkljCkmjqknkokpkqkrksktkuhDkviDjviEiEiEiEiEhCajajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiakaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiakaiaiaiajajajajajajajajajjmkwkxkyjqkzkAkBkCkCjJkDkEhChCkFkGkHkIkJkKkLhCajazajajjNajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiaiajajajajajajajajajkMajajajajajajajajajajajajajajajajajajajajakaiaiaiajajajajajajajajajkNkOkOkOkOkOkOkOkNkPkQkRkSkThChDkUhDhDhChChChCajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiajajkVkVkVkVkWkWkXkYkXkZkZkZkZlalakZkZkZkZajajajajajajajajajakaiaiaiajajajajajajajajajkNlblcldlclelflglhliljlkllfXjJlmlnlolplqlrlsltlujNajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVkVlvlwlxlylzlAlBlClDlElFlGlHlIlJlKlLkZkZajajajajajajajajaklMlMlNajajajajajajajajajkNlOlPlPlPlPlQlRlSlTlUlVlWlXlYlZmambmcmdmemfmgmhjNjNjNajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVmilylylymjmklAmlmmlDmnmompmqmrmsmsmtmukZajajajajajajajajmvmwmxmymyajajajajajajajajmzmAmBmBmBmBmCmDmzhdmEmFmGfXjJmHmImJmKkCmLmMkCmNajjNjNajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVlvlymOlymPlylAmQmRlDmSlKmTmUmVmWmXlKmYkZajajajajajajajajmZnanbncmwajajajajajajajajmzndnendnendndnfkNngfXnhkSninjnknlnknkkCkCkCkCajajajjNjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVnmlynnnonpnqlAnrnslDntnunvnwnxnynynznAkZajajajajajajajajmZnBnCnDmwajajajajajajajajkNnEnFnGnHnIndnJkNkCjJnKkEnjnjnLnMnNnOnPnjajajajazajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiazajkVnQnRlylynSnTnUnVnWlDnXlKnYlKnZoalKlKnXkZajajajajajajajmymvmwobmymymyajajajajajajajkNocodoeofogndohkOoifXiAojokolnNomonnknknjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajookVkVkVkWkWopoqnUoroslDotlalalDoulDlalaotkZmymymwmwmymwmwmyovowoxoyozmymwmwmymwmwmymykNkOmzoAmzkOmzmzkOoBfXnhkSnkoCnNoDnNoEoFnjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaioGoHoIoJoKoLoMoNoOoPoQoRoSoToUoUoVoWoXoUoYoToUoZpapbpbpcpbpdpbpepfpgphpipjpbpbpkpdpbpboZplpmlipnpopmpppmpqprprpsptnkpunNoDpvnknknjnjnjajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaipwpxpypzpApBorpCpDpEpFpGpHpEpEpIpEpJpEpEpKpEpLpMpNpOpPpPpPpQpPpRpSpTpUpPpPpPpOpPpQpPpVpWgwlXlXpXpYpYpZpYpYpYkbqaqbnkqcnNoDpvnkqdqeqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
-aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiqgooqhqiooqjqkqlorqmqnqoqpqqqrqsorqlqtquqvqwqxqyqzqAqzqBqzqzqCqDqEqFqGqHqzqzqAqIqzqzqzqyqJqKqKqLqKqKqKqKqMfXqNqOqPnkqQqRqSqTqUqVqWqXnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVkVlvlwlxlylzlAlBlClDlFlHlGlHlIlJlHlKkZkZajajajajajajajajaklMlMlNajajajajajajajajajkNlOlPlPlPlPlQlRlSlTlUlVlWlXlYlZmambmcmdmemfmgmhjNjNjNajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVmilylylymjmklAmlmmlDlLmomnmqmpmqmqmsmrkZajajajajajajajajmvmwmxmymyajajajajajajajajmzmAmBmBmBmBmCmDmzhdmEmFmGfXjJmHmImJmKkCmLmMkCmNajjNjNajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVlvlymOlymPlylAmQmRlDmtlHmulHmSlHlHlHmTkZajajajajajajajajmZnanbncmwajajajajajajajajmzndnendnendndnfkNngfXnhkSninjnknlnknkkCkCkCkCajajajjNjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajkVnmlynnnonpnqlAnrnslDlHmVmUmXmWmXmXntmYkZajajajajajajajajmZnBnCnDmwajajajajajajajajkNnEnFnGnHnIndnukNkCjJnKkEnjnjnLnMnNnOnPnjajajajazajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiazajkVnQnRlylynSnTnUnVnWlDlHlHlHlHnvlHlHlHnwkZajajajajajajajmymvmwobmymymyajajajajajajajkNocodoeofogndohkOoifXiAojokolnNomonnknknjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajookVkVkVkWkWopoqnUnxoslDlalalalDnylDlalaotkZmymymwmwmymwmwmyovowoxoyozmymwmwmymwmwmymykNkOmzoAmzkOmzmzkOoBfXnhkSnkoCnNoDnNoEoFnjajajajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainAoHoIoJoKoLoMoNoOoPoQoRoSnzoUoUoVoWoXoUoYoToUoZpapbpbpcpbpdpbpepfpgphpipjpbpbpkpdpbpboZplpmlipnpopmpppmpqprprpsptnkpunNoDpvnknknjnjnjajajajajjNajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainJpxpypzpApBorpCpDpEpFpGpHpEpEpIpEpJpEpEpKpEpLpMpNpOpPpPpPpQpPpRpSpTpUpPpPpPpOpPpQpPpVpWgwlXlXpXpYpYpZpYpYpYkbqaqbnkqcnNoDpvnkqdqeqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
+aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiainXooqhqiooqjqkqlorqmqnqoqpqqqrqsorqlqtquqvqwqxqyqzqAqzqBqzqzqCqDqEqFqGqHqzqzqAqIqzqzqzqyqJqKqKqLqKqKqKqKqMfXqNqOqPnkqQqRqSqTqUqVqWqXnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajooooooooqYqYqlorqYqYqYqYqYqYqYorqlqYqYoooooomymymwmwmymwmwmyqZranCrbrcmymwmwmymwmwmymykCrdrerfrgrhrirjrkfXrlrmrnrorpnNrqrrnkqdrsqfnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiazajoortrurvrwrxryrzrArBqYrCrDrEryrxrFrGrHrIooajajajajajajajmyrJmyrKmwmymyajajajajajajajkCrLrMrMrMrMrMrMrMrMrNrOrPnknknkrQnknknkrRnjnjajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
aaaeajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajayajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiajajoHrSrTrUqYqlrVqYrWrXqYrYrZqYsaqlqYsbscsdoHajajajajajajajajsesfnbncmwajajajajajajajajajrLsgshsisisjskslsmsnsospsqsrssstsusvswsxrLajajajajajajajajajaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeafaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaeaa
@@ -1662,15 +1655,15 @@ AOAPaetRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtR
AOAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiaiajajajajajajajajajajajajajwYBoBpyXBqBryjzaykykykykykzazUBsBtyXBpBuxiBvBwyCAqyCBxByBzAJyCxGBABBBCyCxCxGBDBExCususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
AOAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiaiajajajajajajajajajajajajajajajwYwYwYwYwYEaykyjykyjyjyjykyjAYEcwYwYwYwYxixixiBHBIyCBJAsBKBLBMyPBNyNBOBPytBQxixixiususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
AOAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajaiaiaiajajajajajajajajajajajajajajajajajajwYBRyjykBSBTBUBVEdBXBUBYBZCaCbCcCdCeCfCfxiCgChCiCjyCyyAJCkxGyzyCyCClCmCnxiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlBmBnutututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-AOCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCpCqCqCpajajajajajajajajajajajajajajajajajajwYwYCryjwYCsCtCuAeCvCwCxwYyjCywYwYCfCfbpxixiCzCAytxCxCCBytCCxCxCytCmCDxixiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-AOAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCECqCqCFAPAPAPajajajajajajajajajajajajajajajajwYwYCGwYCHzrzrAezrzrCHwYCIwYwYCJbhbhbpCKxixiCLytCMxGCNCOCPCQxGBQCnxixiusususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-AOAPAPAPAPCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPCECqCqCRCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajwYwYwYCSzrzrAezrAQCTwYwYwYajCKCKCKCKCKajxixixiCUxGCVAzCWxGCXxixixiususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlBmBnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeAPAPAPCoCoCoAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCYCqCqCRCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajajwYCZzrzrAezrzrDawYajajajajajajajajajajajxixGzQzQDbzQzQDcxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeAPAPAPAPCoCoAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCYCqCqCRAPAPCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoAPAPAPwYDdDdDdwYwYwYwYwYajajajajajajajajajajusxixCxDxCxixCxDxCxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaetRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoCoCoCECqCqCFAPAPAPAPAPAPAPAPAPCoCoCoAPCoCoCoCoCoCoCoAPAPAPajajajajajajajajajajajajajusususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaetRtRtRtRAPAPAPAPAPAPAPAPAPCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCoAPAPAPCECqCqCFAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPajajajajajajajususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaetRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPCECqCqCFAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaetRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPtRCpCqCqCptRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+AOCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCpnYnYCpajajajajajajajajajajajajajajajajajajwYwYCryjwYCsCtCuAeCvCwCxwYyjCywYwYCfCfbpxixiCzCAytxCxCCBytCCxCxCytCmCDxixiususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+AOAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajCEnYnYCFAPAPAPajajajajajajajajajajajajajajajajwYwYCGwYCHzrzrAezrzrCHwYCIwYwYCJbhbhbpCKxixiCLytCMxGCNCOCPCQxGBQCnxixiusususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+AOAPAPAPAPCoAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPCEnYnYCRCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajwYwYwYCSzrzrAezrAQCTwYwYwYajCKCKCKCKCKajxixixiCUxGCVAzCWxGCXxixixiususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlBmBnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeAPAPAPCoCoCoAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCYnYnYCRCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPajajwYCZzrzrAezrzrDawYajajajajajajajajajajajxixGzQzQDbzQzQDcxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeAPAPAPAPCoCoAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCYnYnYCRAPAPCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoCoAPAPAPwYDdDdDdwYwYwYwYwYajajajajajajajajajajusxixCxDxCxixCxDxCxiususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaetRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoCoCoCEnYnYCFAPAPAPAPAPAPAPAPAPCoCoCoAPCoCoCoCoCoCoCoAPAPAPajajajajajajajajajajajajajusususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaetRtRtRtRAPAPAPAPAPAPAPAPAPCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPCoCoAPAPAPCEnYnYCFAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPajajajajajajajususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaetRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPCEnYnYCFAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaetRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPAPtRCpnYnYCptRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPAPAPAPAPAPususususususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPAPAPAPAPAPAPAPtRtRtRtRtRaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoCoCoCoAPAPAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvJutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoCoAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPCoCoAPAPAPAPAPtRtRtRtRtRtRtRaiaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkAPAPAPAPAPAPAPCoCoCoCoCoCoCoAPAPAPAPAPAPusususususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaetRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRAPAPAPAPAPAPCoCoAPAPAPAPAPAPtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRayajajajajajajajajajajajajajajajajajajajajajajajajajAPAPAPAPCoCoAPAPAPAPtRtRtRtRtRtRtRtRtRtRaiaitRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkAPAPAPAPAPAPAPAPCoCoCoCoAPAPAPAPAPAPususususususususususususususususususususususususususususususususususvjvkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
@@ -1696,8 +1689,8 @@ aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtR
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRDgtRtRtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkAPAPAPCoCoAPAPAPvkvkvkvkvkvkaiaiaiaiaiaiaiaiaitCaiaiaivkvkvkvkvkvkvkvkvkvkaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRtRtRtRtRtRtRtRtRtRtRDgtRtRtRtRtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaiaivkvkvkvkaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkAPAPCoCoCoAPAPvkvkvkvkaiaiaiaiaiaivkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhvkaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvktRtRtRDgtRtRtRtRtRtRtRtRtRvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkCpDiDiDjDjDjDiDiDkCpaiaiaiaivkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhaiaivIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkaiaiaiCqCqCqCqCqCqCqCqCqCqaiaivkvkvkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUwUwUututututututututwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaiCqCqCqCqCqCqCqCqCqCqaivkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUututututututututututwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkaiaiainYnYnYnYnYnYnYnYnYnYaiaivkvkvkvkvkvkvkvkvkvkDevIDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUwUwUututututututututwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaiaiainYnYnYnYnYnYnYnYnYnYaivkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUututututututututututwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkCpDlDmDmDnDnDnDmDmCpvkvkvkvkvkvkvkvkvkvkvkvkDevkDhDhDhDhDhDhDhDhDhDhDhvIvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUwUutututDoDpDpDpvnututututwUwUwUwUwUwUwUwUuu
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaiaivkvkvkvkvkvkvkAPAPAPCoCoAPAPvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvIvIvIvIvIvkvkvkvIvIvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnututututwUwUwUwUututDoDqvlvlvlvmDpvnututututwUwUwUwUwUwUuu
aaaeaeaevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaiaivkvkvkvkvkvkvkvkvkvkAPAPAPCoAPAPvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvJututututwUwUwUwUututDrvlvIvIvlvlvlvmDpvnututututwUwUwUwUuu
@@ -1725,12 +1718,12 @@ aaaeaevIvIvIvIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDx
aaaeaevIvIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIAPAPAPAPAPAPDsDuvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaevIvIvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIAPAPAPAPutDtDuvlvlvlvlBmBnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeDyDyvIvIvIvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlAPAPAPututDtDsDsDuvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDzvkDzvkCpCqCqCpvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlAPAPutututututDtDsBnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyDyDyvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvmDpDpvnutututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyDyDyDyDyvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvmvnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvmDpvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDACqCqDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
-aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDzvkDzvkCpCqCqCpvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyvIvIvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDzvkDzvkCpnYnYCpvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlAPAPutututututDtDsBnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyDyDyvIvIvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvlvlvlvlvmDpDpvnutututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyDyDyDyDyvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvmvnututututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvmDpvnututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDAnYnYDBDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvJututututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
+aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvDvDvDzvkDzvkCpnYnYCpvkvkvkDvDvDvDvDvDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvmvnutututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvmvnututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvIvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
aaaeaeaeDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyDyvIvIDxDxDxDxvIvIvIDxDxDxDxDxDxDxDxDxDxDxDxDxDxDxvIvIvIvIvIvIvIvIvIvIvIvIDyvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDvDvDvDvDvDvDvDvvkvkvkvkvkvkvkvkvkvkaiaiaivkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkvkDevkvkvkvkvkvkvkvkvkvkvkvkvIvIvIvIvIvIvIvlvlvlvlvlvlvlvlvlvlvlvlvJututututututwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUwUuu
diff --git a/maps/southern_cross/southern_cross_jobs.dm b/maps/southern_cross/southern_cross_jobs.dm
index 0daeaa97f6..09b380aa9a 100644
--- a/maps/southern_cross/southern_cross_jobs.dm
+++ b/maps/southern_cross/southern_cross_jobs.dm
@@ -100,9 +100,11 @@ var/const/access_explorer = 43
access = list(access_pilot, access_explorer, access_research) //VOREStation Edit
minimal_access = list(access_pilot, access_explorer, access_research) //VOREStation Edit
outfit_type = /decl/hierarchy/outfit/job/explorer2
+/*
alt_titles = list(
"Explorer Technician" = /decl/hierarchy/outfit/job/explorer2/technician,
"Explorer Medic" = /decl/hierarchy/outfit/job/explorer2/medic)
+*/
/datum/job/sar
title = "Search and Rescue"
diff --git a/maps/southern_cross/structures/closets/misc.dm b/maps/southern_cross/structures/closets/misc.dm
index 934b0d8b3d..2c9e8afd15 100644
--- a/maps/southern_cross/structures/closets/misc.dm
+++ b/maps/southern_cross/structures/closets/misc.dm
@@ -26,6 +26,18 @@
new /obj/item/weapon/gun/projectile/shotgun/pump/rifle(src)
return
+/obj/structure/closet/secure_closet/guncabinet/phase
+ name = "phase pistol cabinet"
+ req_one_access = list(access_explorer,access_brig)
+
+/obj/structure/closet/secure_closet/guncabinet/phase/New()
+ ..()
+ new /obj/item/weapon/gun/energy/phasegun(src)
+ new /obj/item/weapon/gun/energy/phasegun(src)
+ // One spare cell per gun
+ new /obj/item/weapon/cell/device/weapon(src)
+ new /obj/item/weapon/cell/device/weapon(src)
+
//Explorer Lockers
/obj/structure/closet/secure_closet/explorer
@@ -108,6 +120,7 @@
new /obj/item/taperoll/medical(src)
new /obj/item/device/gps(src)
new /obj/item/device/geiger(src)
+ new /obj/item/bodybag/cryobag(src)
return
//Pilot Locker
diff --git a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
index a12f799868..9fac74ac0e 100644
--- a/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
+++ b/maps/submaps/surface_submaps/mountains/CaveTrench.dmm
@@ -3,37 +3,38 @@
"c" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/CaveTrench)
"d" = (/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
"e" = (/turf/simulated/floor/outdoors/rocks,/area/submap/CaveTrench)
-"f" = (/turf/simulated/floor/water,/area/submap/CaveTrench)
-"g" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"h" = (/mob/living/simple_animal/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water,/area/submap/CaveTrench)
+"f" = (/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
+"g" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"h" = (/mob/living/simple_animal/fish/trout{faction = "malf_drone"},/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
"i" = (/obj/effect/decal/remains/human,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
"j" = (/turf/simulated/wall,/area/submap/CaveTrench)
"k" = (/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"l" = (/mob/living/simple_animal/fish/trout,/turf/simulated/floor/water,/area/submap/CaveTrench)
+"l" = (/mob/living/simple_animal/fish/trout,/turf/simulated/floor/water{outdoors = 0},/area/submap/CaveTrench)
"m" = (/turf/simulated/wall/wood,/area/submap/CaveTrench)
-"n" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"o" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"p" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"q" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"r" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"s" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"t" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"u" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"v" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"w" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"x" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"y" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"z" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"A" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"B" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
-"C" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"D" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"E" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"F" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
-"G" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"H" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
-"I" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
-"J" = (/obj/machinery/drone_fabricator,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"n" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"o" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lantern,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"p" = (/obj/structure/table/woodentable,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"q" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"r" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"s" = (/obj/structure/table/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"t" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "Rellek's telling me that we're in deep shit if the townies found out I'm cooking up drones out here. Like I give a fuck, We're minning our asses off only to dig into some bug nest to get our legs chewed. Well I'm not looking a gift horse in the mouth. Those drone dudes out in the wild hooked us up with these machines so long as they get some of the metal we dig up. Win win for us, Guess we're retiring early after all."; name = "Note"},/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"u" = (/obj/structure/table/steel,/obj/item/robot_parts/robot_component/actuator,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"v" = (/obj/effect/decal/cleanable/blood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"w" = (/obj/structure/simple_door/wood,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"x" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"y" = (/obj/structure/table/steel,/obj/item/device/robotanalyzer,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"z" = (/obj/structure/table/steel,/obj/item/weapon/storage/toolbox,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"A" = (/obj/structure/table/bench/steel,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"B" = (/obj/effect/decal/remains,/obj/item/clothing/under/rank/miner,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"C" = (/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"D" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/obj/item/clothing/suit/storage/hooded/wintercoat/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"E" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"F" = (/obj/structure/closet/secure_closet/miner,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"G" = (/obj/item/weapon/storage/box/shotgunammo,/turf/simulated/floor/holofloor/wood,/area/submap/CaveTrench)
+"H" = (/obj/structure/table/steel,/obj/item/robot_parts/l_leg,/obj/item/robot_parts/head,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"I" = (/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/CaveTrench)
+"J" = (/obj/machinery/power/port_gen/pacman,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
+"K" = (/obj/machinery/drone_fabricator,/turf/simulated/shuttle/plating,/area/submap/CaveTrench)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -51,9 +52,9 @@ abeeeeeeeeffkkfffeeeeeeeeeeeddddddeeeedddddda
abbbdddddeeekkeeeddddddddddddddddddddddddddca
abbcdddddddjkkjddddddddddddddddddddddddddddca
abcccdddddddddddddddmmmmmmmmddddddddddddidbca
-abbbcidddddddgdddddnmopkkqkmmdddddddddddbbbca
-abbbcccccrstudddddddvkkkqwqmmdddddddddddbbbba
-abbbbbbccccxyzdABBddmCDEkqFmmdddddddccccbbbba
-abbbbbbbccccGHuIJBBdmmmmmmmmdddddccccccbcbbba
+abbbcidddddddndddddompqkkrkmmdddddddddddbbbca
+abbbcccccstuvdddddddwkkkrxrmmdddddddddddbbbba
+abbbbbbccccyzAdBCCddmDEFkrGmmdddddddccccbbbba
+abbbbbbbccccHIvJKCCdmmmmmmmmdddddccccccbcbbba
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
diff --git a/maps/submaps/surface_submaps/mountains/Rockb1.dmm b/maps/submaps/surface_submaps/mountains/Rockb1.dmm
index a94614f3a8..fb80ee173f 100644
--- a/maps/submaps/surface_submaps/mountains/Rockb1.dmm
+++ b/maps/submaps/surface_submaps/mountains/Rockb1.dmm
@@ -24,7 +24,7 @@
"x" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/turf/simulated/floor/tiled,/area/submap/Rockb1)
"y" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/Rockb1)
"z" = (/obj/machinery/light/small{brightness_color = "#DA0205"; brightness_power = 1; brightness_range = 5},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockb1)
-"A" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/submap/Rockb1)
+"A" = (/obj/machinery/power/terminal,/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled,/area/submap/Rockb1)
"B" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockb1)
"C" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockb1)
"D" = (/obj/machinery/power/apc{operating = 0; pixel_x = 31},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/submap/Rockb1)
diff --git a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
index aa331159b7..37b3484d14 100644
--- a/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Blackshuttledown.dmm
@@ -9,106 +9,143 @@
"ai" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown)
"aj" = (/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown)
"ak" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown)
-"al" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"am" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown)
-"an" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/template_noop,/area/submap/Blackshuttledown)
-"ao" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"ap" = (/obj/structure/dispenser/oxygen,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aq" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"ar" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"as" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"at" = (/obj/machinery/organ_printer/flesh,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"au" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown)
-"av" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/p90,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aw" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"ax" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"ay" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"az" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown)
-"aA" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown)
-"aB" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aC" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aD" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual."; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aE" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aF" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aG" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aH" = (/obj/structure/table/standard,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aI" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile,/obj/item/clothing/gloves/sterile,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aJ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aK" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aL" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aM" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aN" = (/obj/machinery/door/airlock/security{locked = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aO" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aP" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown)
-"aQ" = (/obj/machinery/computer/communications,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aR" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aS" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aT" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aU" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aV" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aW" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
-"aX" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"aY" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
-"aZ" = (/obj/structure/table/steel,/obj/item/pizzabox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"ba" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bb" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
-"bc" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/hyper; dir = 4; name = "Unknown APC"; pixel_x = 24},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown)
-"bd" = (/obj/machinery/computer/area_atmos,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"be" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bf" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bg" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bh" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bi" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bj" = (/obj/machinery/atmospherics/pipe/tank/oxygen,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bk" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bl" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bm" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bn" = (/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bo" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bp" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bq" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"br" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bs" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bt" = (/obj/machinery/light,/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bu" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bv" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
-"bw" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown)
-"bx" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown)
+"al" = (/obj/structure/shuttle/engine/heater{icon_state = "heater"; dir = 4},/turf/simulated/shuttle/wall/dark{icon_state = "dark0"; name = "Unknown Shuttle"; tag = "icon-dark0"},/area/submap/Blackshuttledown)
+"am" = (/obj/structure/shuttle/engine/propulsion{dir = 4; icon_state = "propulsion_l"},/turf/template_noop,/area/submap/Blackshuttledown)
+"an" = (/obj/machinery/light{dir = 1},/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ao" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ap" = (/obj/machinery/door/airlock/external{density = 1; frequency = 1331; id_tag = "merc_shuttle_outer"; name = "Ship External Access"; req_access = list(150)},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aq" = (/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"ar" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"as" = (/obj/machinery/organ_printer/flesh,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"at" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown)
+"au" = (/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"av" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/wt550,/obj/item/weapon/gun/projectile/automatic/p90,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aw" = (/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ax" = (/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ay" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"az" = (/obj/machinery/optable,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aA" = (/obj/machinery/bodyscanner{dir = 8},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aB" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown)
+"aC" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark6"; name = "Unknown Shuttle"; tag = "icon-dark6"},/area/submap/Blackshuttledown)
+"aD" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aE" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aF" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aG" = (/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aH" = (/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aI" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aJ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aK" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor/full,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aL" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"aM" = (/obj/effect/floor_decal/borderfloor/corner,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aN" = (/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aO" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aP" = (/obj/structure/table/standard,/obj/item/weapon/storage/firstaid/surgery,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aQ" = (/obj/structure/table/standard,/obj/item/weapon/tank/anesthetic,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aR" = (/obj/structure/table/standard,/obj/item/clothing/gloves/sterile,/obj/item/clothing/gloves/sterile,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aS" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/spray/sterilizine,/obj/item/weapon/reagent_containers/spray/sterilizine,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/masks,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aV" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aW" = (/obj/machinery/door/airlock/security{locked = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"aX" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/white,/area/submap/Blackshuttledown)
+"aY" = (/turf/simulated/floor/tiled/steel,/turf/simulated/shuttle/wall/dark{icon_state = "dark10"; name = "Unknown Shuttle"; tag = "icon-dark10"},/area/submap/Blackshuttledown)
+"aZ" = (/obj/machinery/computer/communications,/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ba" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bb" = (/obj/effect/floor_decal/borderfloor{dir = 9},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bc" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bd" = (/obj/structure/table/steel,/obj/item/weapon/material/knife,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"be" = (/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bf" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bg" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bh" = (/obj/structure/table/steel,/obj/random/toolbox,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bi" = (/obj/structure/table/steel,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"bk" = (/obj/structure/table/steel,/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bl" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bm" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bn" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bo" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bp" = (/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"br" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor{dir = 1},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bs" = (/obj/effect/floor_decal/corner/grey,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bt" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bu" = (/obj/structure/table/steel,/obj/item/pizzabox,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bv" = (/obj/structure/table/steel,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bw" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bx" = (/obj/machinery/door/airlock/glass,/obj/effect/floor_decal/borderfloor,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"by" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bz" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/Blackshuttledown)
+"bA" = (/obj/machinery/power/apc{dir = 8; name = "BSD APC"; pixel_x = -24},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bB" = (/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bC" = (/obj/machinery/computer/area_atmos,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bD" = (/obj/effect/floor_decal/borderfloor{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Dosen't look friendly in the slightest."; name = "Unknown Individual"; say_got_target = list("Looks like trouble!","Contact!","We've got company!","Perimeter Breached!!"); speak = list("One day the'll fix that damn engine..","Next time, We're hidding on the tropical beach planet.","Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Hate this blocky ass ship.")},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bE" = (/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bF" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bG" = (/obj/structure/table/steel,/obj/item/weapon/paper{info = "We need to take a short stop. The engine's are in need of minor repairs due to turbulence, should be a week's time. We've got reserve food supplies but pleanty of locale fauna to subsist on too if need be. PCRC is keeping most of there assets near New Reykjavik and locale authorities are more mindful then most to travel in this kind of weather. Our outfit should be at the rendezvous point in less then ten days assuming the upper ecehelon hasn't dropped ties with us yet."; name = "Operation Progress/M-53"},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bH" = (/obj/structure/table/steel,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bI" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bJ" = (/obj/structure/closet/toolcloset,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bK" = (/obj/machinery/portable_atmospherics/canister/empty/oxygen,/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bL" = (/obj/machinery/atmospherics/pipe/tank/oxygen,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/yellow,/area/submap/Blackshuttledown)
+"bM" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bN" = (/obj/structure/bed/chair/office/dark,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bO" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"bP" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/borderfloor/corner{dir = 4},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bQ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/effect/floor_decal/borderfloor{dir = 5},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bR" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bS" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"bT" = (/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"bU" = (/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"bV" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"bW" = (/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bX" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/structure/bed,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"bY" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"bZ" = (/mob/living/simple_animal/hostile/viscerator,/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"ca" = (/obj/structure/table/steel,/obj/item/weapon/gun/projectile/pistol,/obj/item/weapon/gun/projectile/shotgun/pump,/turf/simulated/floor/tiled/steel_grid,/area/submap/Blackshuttledown)
+"cb" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Blackshuttledown)
+"cc" = (/obj/machinery/light,/obj/structure/table/rack,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/head/helmet/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/item/clothing/suit/space,/obj/effect/floor_decal/borderfloor{dir = 10},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cd" = (/obj/structure/dispenser/oxygen,/obj/effect/floor_decal/borderfloor{dir = 6},/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ce" = (/obj/structure/table/woodentable,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cf" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"cg" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled/steel,/area/submap/Blackshuttledown)
+"ch" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark5"; name = "Unknown Shuttle"; tag = "icon-dark5"},/area/submap/Blackshuttledown)
+"ci" = (/turf/template_noop,/turf/simulated/shuttle/wall/dark{icon_state = "dark9"; name = "Unknown Shuttle"; tag = "icon-dark9"},/area/submap/Blackshuttledown)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaabababababacababababababababadadabacabababababacabababababababababaa
aaababababababaeabababababababadadababababababababababababadafababacaa
-aaabababababababababababababadadababababababababababaeababadadabababaa
+aaabababababababababababababadadabababafabababafababaeababadadabababaa
aaababafabadadadababababafababababababababababababababababadadabababaa
aaabababababadadadabacababababagagagagagagabababababacabafabadabababaa
-aaababababababadadababababababagahabababagabababababababababababababaa
+aaababababababadadabafababababagahabababagabababababababababababababaa
aaabababababababaiajajajakababagabababahagabababafaiajajajajakabababaa
-aaabababababababajajajajajajajajajalalajajajajajajajajajajajamanababaa
-aaababababafababajajajajajajaoapajaqarajaqaqasaqatajajajajajamanababaa
-aaabababababababauajajaqavajaqaqajawawajaqaxaqaqaqaqayajajazababababaa
-aaabababababababaAajajaBaCajaqaqaqaqaqajaqaqaqaqaDaqaEajazabababababaa
-aaabafababababaAajaFajaqaFajaqaqaqaqaEajaGaHaqaqaIaJaKajababababafabaa
-aaabababababaAajaLaMajaNajajaqaqajajajajajajaOajajajajajaPabababababaa
-aaabababababajaQaqaqajaqaqaqaqaqajaRaSaqasaqaTaqajaUaUaVajaPababababaa
-aaabababababaWaFaqaqajaLaqaqaqaEajaqaqaXaXaXaqaqajaFaqaqaqamanabababaa
-aaabababababaYaFaqaqaOaqaqaqaqaqaOaqaqaZaFaFaqaqbaaqaqaqaqamanabababaa
-aaabababababaYaFaqaqaOaqaqaqaqaqaOaqaqaFaFaFaqaqbaaqaqaqaqamanabababaa
-aaabababababbbaFaqaqajaLaqaqaqaEajaqaqaXaXaXaqaqbcaqaqaqaTamanabababaa
-aaabababababajbdaqaTajaqaqaqaqaqajbebfaqbgaTaqaqajbhbibjajazababababaa
-aaabababababauajaLbkajaNajajaqaqajajajajajajaOajajajajajazabababababaa
-aaababababababauajaFajaqblajaqaqaqaqaEajbmaqaqaqaqbaaqajababababababaa
-aaabafabababababauajajbnboajaqaqaqaqaqajbpaqbmaqbmajarajaPabafabababaa
-aaabababababababaAajajbqbrajaqaTajawawajbmaqbmaqbmajbsajajaPababababaa
-aaabababababababajajajajajajbtapajaqarajbmaqbuaqbvajajajajamanabababaa
-aaabababababababajajajajajajajajajalalajajajajajajajajajajamanabababaa
-aaababafababababbwajajajbxababagahabababagabababbwajajajajbxababababaa
-aaabababadabababababafababababagabababahagababababafabababadadadababaa
-aaababadadabacababababababababagagagagagagababababacababadadadadababaa
+aaabababababababajajajajajajajajajababajajajajajajajajajajajalamababaa
+aaababababafababajajajajajajanaoajapapajaqaqaraqasajajajajajalamababaa
+aaabababababababatajajauavajawaxajayayajaqazaqaqaqaqaAajajaBababababaa
+aaabababababababaCajajaDaEajawaFaGaGaHajaqaqaqaqaIaqaJajaBabababababaa
+aaabafababababaCajaKajauaLajawaMaNaNaOajaPaQaqaqaRaSaTajababababafabaa
+aaabababababaCajaUaVajaWajajawaxajajajajajajaXajajajajajaYabababababaa
+aaabababababajaZbaaxajbbaGaGbaaxajbcbdbebfbebgbeajbhbhbiajaYababababaa
+aaabababababbjbkbeaxajblbebebebmajbebebnbnbnbebeajbobebebpalamabababaa
+aaabababababbqbkbeaFbrbabebsbebebtbebebubvbvbebebwbebebebpalamabababaa
+aaabababababbqbkbeaMbxbybebebebebtbebebvbvbvbebebwbebebebpalamabababaa
+aaabababababbzbkbeaxajblbebebebmajbebebnbnbnbebeajbAbebebBalamabababaa
+aaabababababajbCbybDajbEaNaNbybFajbGbHbebIbgbebeajbJbKbLajaBababababaa
+aaabababababatajbMbNajaWajajawaxajajajajajajbtajajajajajaBabababababaa
+aaababababababatajaKajaubOajawbPaGaGbQajbRbebebebebSbTajababababababaa
+aaabafabababababatajajbUbVajawaMaNaNbWajbXbebRbebRajbYajaYabafabababaa
+aaabababababababaCajajbZcaajawbDajayayajbRbebRbebRajcbajajaYababababaa
+aaabababababababajajajajajajcccdajapapajbRcecfcecgajajajajalamabababaa
+aaabababababababajajajajajajajajajababajajajajajajajajajajalamabababaa
+aaababafababababchajajajciababagahabababagabababchajajajajciababababaa
+aaabababadabababababafababababagabababahagababafabafabababadadadababaa
+aaababadadabacababababafabababagagagagagagababababacababadadadadababaa
aaabadadadabababababababaeababababababababababadadabababadadadadababaa
aaababadadababacabadababababababababababababadadadababababadadabababaa
-aaabababababababadadafababababababababacabadadadafabababababababababaa
-aaabababafababadadadababababababababababadadadadabababababababafababaa
+aaabababababababadadafabababafababababacabadadadafabababababababababaa
+aaabababafababadadadababababababababafabadadadadabababababababafababaa
aaabababababababadadabacabababababababababababadaeabacafababababababaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
diff --git a/maps/submaps/surface_submaps/wilderness/CaveS.dmm b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
index 022e6baaba..36d0d00ca5 100644
--- a/maps/submaps/surface_submaps/wilderness/CaveS.dmm
+++ b/maps/submaps/surface_submaps/wilderness/CaveS.dmm
@@ -20,7 +20,7 @@
"t" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/CaveS)
"u" = (/turf/simulated/floor,/area/submap/CaveS)
"v" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil,/obj/item/stack/cable_coil,/obj/item/weapon/storage/toolbox,/obj/random/toolbox,/turf/simulated/floor,/area/submap/CaveS)
-"w" = (/obj/structure/loot_pile/surface,/turf/simulated/floor,/area/submap/CaveS)
+"w" = (/obj/structure/loot_pile/maint/technical,/turf/simulated/floor,/area/submap/CaveS)
"x" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/submap/CaveS)
"y" = (/obj/machinery/power/port_gen/pacman,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor,/area/submap/CaveS)
"z" = (/turf/simulated/wall,/area/submap/CaveS)
@@ -31,6 +31,7 @@
"E" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/submap/CaveS)
"F" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/submap/CaveS)
"G" = (/obj/machinery/computer/communications,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor,/area/submap/CaveS)
+"H" = (/obj/structure/loot_pile/maint/boxfort,/turf/simulated/floor,/area/submap/CaveS)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -67,7 +68,7 @@ abdddrrrrrffmddddddfffgdffuyzzAfffdddbba
abdddddtrffddddddgffffddffuBzzCffddddbba
abdddddddrgddddddDffffddffuEFGuuddddbbba
abbddddddddddddddfffffdddffuuuudddddbbba
-abbdddddddddddddddfgdddddfffwudddddbbbba
+abbdddddddddddddddfgdddddfffuHdddddbbbba
abbdddddddddddddddddddddddmffddddbbbbbba
abbbdddddddddddddddddddddddddddbbbbbbbba
abbbddddbbbbdddddddbbdddddddddbbbbbbbbba
diff --git a/maps/submaps/surface_submaps/wilderness/DoomP.dmm b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
index 805450e539..d18916efc0 100644
--- a/maps/submaps/surface_submaps/wilderness/DoomP.dmm
+++ b/maps/submaps/surface_submaps/wilderness/DoomP.dmm
@@ -3,127 +3,124 @@
"ac" = (/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
"ad" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
"ae" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/DoomP)
-"af" = (/turf/template_noop,/area/space)
-"ag" = (/turf/simulated/floor/water,/area/submap/DoomP)
-"ah" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP)
-"ai" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"aj" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"ak" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"al" = (/turf/simulated/floor/water/deep,/area/submap/DoomP)
-"am" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"an" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"ao" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
-"ap" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating,/area/submap/DoomP)
-"aq" = (/turf/simulated/wall/r_wall,/area/submap/DoomP)
-"ar" = (/turf/simulated/floor/plating,/area/submap/DoomP)
-"as" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP)
-"at" = (/turf/simulated/floor/tiled,/area/submap/DoomP)
-"au" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"av" = (/obj/structure/bed/chair,/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aw" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"ax" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"ay" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"az" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aA" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aB" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aC" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aD" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aE" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aF" = (/obj/structure/lattice,/obj/machinery/porta_turret/stationary,/turf/simulated/floor/plating,/area/submap/DoomP)
-"aG" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
-"aH" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aI" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aJ" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aK" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aL" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aM" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aN" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aO" = (/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aP" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP)
-"aQ" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aR" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aS" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aT" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aU" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aV" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aW" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aX" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aY" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"aZ" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"ba" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bb" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bc" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bd" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"be" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bf" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bg" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bh" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bi" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bj" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
-"bk" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP)
-"bl" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
-"bm" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
-"bn" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"af" = (/turf/simulated/floor/water,/area/submap/DoomP)
+"ag" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/DoomP)
+"ah" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ai" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ak" = (/turf/simulated/floor/water/deep,/area/submap/DoomP)
+"al" = (/obj/effect/decal/remains/mouse,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"am" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"an" = (/obj/machinery/light/small,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
+"ao" = (/obj/machinery/porta_turret,/turf/simulated/floor/plating,/area/submap/DoomP)
+"ap" = (/turf/simulated/wall/r_wall,/area/submap/DoomP)
+"aq" = (/turf/simulated/floor/plating,/area/submap/DoomP)
+"ar" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/submap/DoomP)
+"as" = (/turf/simulated/floor/tiled,/area/submap/DoomP)
+"at" = (/obj/structure/bed/chair,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"au" = (/obj/structure/bed/chair,/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"av" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aw" = (/obj/machinery/vending/cigarette,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ax" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ay" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"az" = (/obj/machinery/power/apc{dir = 1; name = "PAPC"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aA" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aB" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aC" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aD" = (/obj/structure/closet/secure_closet/engineering_electrical,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aE" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/rocks,/area/submap/DoomP)
+"aF" = (/obj/structure/bed/chair{dir = 4},/mob/living/simple_animal/hostile/syndicate/ranged{desc = "Even less friendly than he looks."; speak = list("Wish I had better equipment...","I knew I should have been a line chef...","Fuckin' helmet keeps fogging up.","Anyone else smell that?")},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aG" = (/obj/structure/table/standard,/obj/item/pizzabox,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aH" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aI" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aJ" = (/obj/machinery/power/terminal{icon_state = "term"; dir = 1},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/cable{d1 = 32; d2 = 8; icon_state = "32-8"},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aK" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aL" = (/obj/machinery/light/small,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aM" = (/obj/structure/lattice,/turf/simulated/floor/water,/area/submap/DoomP)
+"aN" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aO" = (/obj/machinery/door/airlock/external,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aP" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aQ" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aR" = (/obj/machinery/door/airlock/highsecurity,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aS" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aT" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/spy,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aU" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/smokes,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/handcuffs,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aW" = (/obj/structure/table/rack,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aX" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/laser/mounted,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aY" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/contender,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/obj/item/ammo_magazine/s357,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"aZ" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"ba" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bb" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bc" = (/obj/structure/table/standard,/obj/structure/bedsheetbin,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bd" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"be" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bf" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bg" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled,/area/submap/DoomP)
+"bh" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/submap/DoomP)
+"bi" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
+"bj" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/submap/DoomP)
+"bk" = (/obj/structure/lattice,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/DoomP)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaf
-aaaeabababababababababababababababababababababababababababababababababacacagagagagagagacacacacababacadadadadadacacacabaf
-aaababacacacacacacacabababababababahababababacacacacacacacacababacacacacagagagagagagagagagagacacacacadadaiadacagagacabaf
-aaabacacagagagagagacacacacacacababaeabacacacacagagagagacacacacacagagagagagagagagagagagagagacacadadadadadacacacagagacabaf
-aaabacagagagagagagagagagagagacacacacacacagagagagagagagagagagagagagagagagagagagagagagagagacacadajadadakacacagagagagacacaf
-aaabacagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagacacacadadadadadadacagagagagagagacaf
-aaabacagagagagalalalalalalagagagagagagagagagagagagagalalalalalalalagagagagagagagagacacadakadadaiadadadacagagagagagagacaf
-aaabacagagagagagalalalalalagagagagagagagagagalalalalalalalalalalalalalalagagagagagacadaiadadadadadadacacagagagagagagacaf
-aaabacacagagagagagalalalalagagagagagagagagagalalalalalalalalalalalalalagagagagagacacamadadadadadaiacacagagagagagagagacaf
-aaababacagagagagagagalalalalalagagagalalalalalalalalalalalalalalalalalalalalalagagacacadadadadadacacagagagagagagagagacaf
-aaababacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagagacadadadajadacacagagagagagagagacacaf
-aaababacacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacacadaiadadacacagagagagagagagagacabaf
-aaabababacagagagagagagagalalalalalalalalalalalalagagalalalalalalalalalagagagagagagacacadadadadacagagagagagagagagagacabaf
-aaabababacacagagagagagagagalalalalalalalalalalagagagagalalalalalalalalalagagagagagacacadadamacacagagagagagagagacacacabaf
-aaababababacagagagagagagalalalalalalalalalagagagagagagagagagagagagagagagagagagacacacadadadadacagagagagalagagagacacababaf
-aaababababacacagagagagagagalalalalalalagagagagagagagagagagagagagagagagagagagacacadadadadadacacagagagalalagagagagacababaf
-aaababababacacagagagagagalalalalalagagagagagagagagagagagagagagagagagagagagacacadadadadacacacagagagagalalalagagagacacabaf
-aaababababaeacagagagagalalalalalagagagagagagagagagagagagagagagagagagagagacacadadadacacacagagagagagagalalalagagagagacabaf
-aaababababacacagagalalalalalalalalagagagagagagagagagacacacacacacacagagacacadadacacacagagagagagagagagalalalagagagagacabaf
-aaababababacagagagalalalalalalalalalalagagagagagacacacadadadadadacacacacadadacacagagagagagagagalagalalalagagagagagacabaf
-aaabababacacagagagagalalalalalalalagagagagagagacacadadanadadadadadadadadadadacagagagagagagagagalalalalalagagagagagacabaf
-aaabababacagagagagagagalalalalalagagagagagagacacadadadadadadanadadadadadadadacagagagagagagagalalalalalalagagagagacacabaf
-aaabababacagagagagagagalalalalalagagagagagacacadadadadadadadadadadadadadadacacagagagagagagagalalalalalalalalagagacacabaf
-aaabababacagagagagagagagalalalalagagagagacacadadadadadadadadadadadadadadadadacacagagagagagagalalalalalalalalagagagacabaf
-aaabababacagagagagagagagalalalagagagagagacadadadadadadadadadadadadadadadadadadacacagagagagagagalalalalalalagagagagacabaf
-aaabababacagagagagagagagalalalalalagagagacadadadadadadadaoadadadadadaoadadadadadacacagagagagagagalalalalagagagagagacabaf
-aaabababacagagagagagagagalalalalalagagagacadadapadadapadaqaqarararaqaqadapadadapadacagagagagagagalalalalagagagagagacabaf
-aaabababacagagagagagagagalalalalalalagagacaqaqaqaqaqaqaqaqaqaqasaqaqaqaqaqaqaqaqaqaqaqagagagagagalalalalagagagagacacabaf
-aaabababacacagagagagagagalalalalalalagagacaqatauatavawavataxaqayaqazazazazaAaBaCaDaEaqagagagagagalalalalagagagagacacabaf
-aaabababacacacagagagagalalalalalalalagaFaGaqaHaDaIaDaDaDataJaqataqaKaLaMaMaNatataOataqaPaFagagagalalalagagagagagagacabaf
-aaabababababacacagagagalalalalalalalagagagaqayaDaDaDaDaDataQaqaRaqaqaqaqaqaqaSaqaqaqaqagagagagagalalalagagagagagagacabaf
-aaababababababacagagagalalalalalalalalagagaqatatataOatatatataTatatawatatatatatawatataqagagagagagalalalagagagagagagagacaf
-aaabababahabababacagagalalalalalalalalaFaPaqaUaqaqaqaqaqaqaqaqaqaqaqaqaqaqaVaqaqaqaqaqaPaFagagagalalalagagagagagagagacaf
-aaababababababacacagagagalalalalalalalalagaqataDaWaXaYaZbabbaqbcaDbdbebdbfataVawaVbgaqagagagagagalalalagagagagagagagacaf
-aaababababababacagagagagalalalalalalalalagaqatataOatataOatataqayatatatatatbhaqbiaqbjaqagagagagalalalalalagagagagagagacaf
-aaababababababacagagagagalalalalalalalalalaqaqaqaqaqaqaqaqaqaqaqaqbkblblblbmaqaqaqaqaqagagagagalalalalagagagagagagagacaf
-aaabababababacacagagagalalalalalalalalalalagagagagaGacacadadadadbnadadadadadbnacacagagagagagagalalalalagagagagagagagacaf
-aaabababababacagagagagalalalalalalalalalalalalagagaFagacacacacacaFadadadadadaFacagagagagagagalalalalalagagagagagagacacaf
-aaababababacacagagagagalalalalalalalalalalalalalagagagagagagagacacadadadadadacacagagagagagalalalalalalagagagagagagacabaf
-aaababababacagagagagagagalalalalalalalalalalalalagagagagagagagagacacacacacacacagagagagagagagalalalalalagagagagagacacabaf
-aaabababacacagagagagagagalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagagagagagalalalagagagagagagacababaf
-aaabababacacagagagagagalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagagagagagalalalagagagagagagacababaf
-aaabababacacagagagagagalalalalalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagagagalalalagagagagagacacababaf
-aaababacacagagagagagagagalalalalalalalalalalalalalalalalalalagagagagagagagagagagagagagagagagalalalalagagagagagacabababaf
-aaababacagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagalalalalalalagagagagagacacababaf
-aaababacagagagagagalalalalalalalalagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf
-aaabacacagagagagagalagalalalalalagagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf
-aaabacagagagagagagagagalalalalalalalagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf
-aaabacagagagagagagagagagagagagalalalagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagagacababaf
-aaabacagagagagagagagagagagagagagagagagagagagagagagalalalalalalalalalalalalalalalalalalalalalalalalalalagagagagacacababaf
-aaabacagagagagagagagagacacacacacacacacagagagagagagalalalalalalalalalalalalalalalagalalalalalalalalalalagagagagacabababaf
-aaabacagagagagagagacacacababababababacacacagagagagagagalalagagagagagagagagagalagagagagagalalalalalalagagagagagacabababaf
-aaabacacagagagagacacababababababababababacagagagagagagagagagagagagagagagagagagagagagagagagagagalalalalagagagacacababaeaf
-aaababacagagagacacababababababababababacacagagagagagagagagagagagagagagagagagagagagagagagagagagagagalalagagagacababahabaf
-aaababacagagacacabababababababababahabacagagagagagagagagagagagagagagacacacacacacagagagagagagagagagagagagagacacababababaf
-aaabacacagacacababababababababababababacagagagagagagagagagagacacacacacabacacacacacacagagagagagagagagagagacacabababababaf
-aaabacagacacababababaeabababababababacacagagagagagacacacacacacababababababababababacacacacacacacagagagacacacabababababaf
-aaabacacacababababababababababababacacacacacacacacacabababababababababababababababababababababacacacacacabababababababaf
+aaabababababababababababababababababababababababababababababababababababacacacacacacacacabababababababadadadabababaeabaa
+aaaeabababababababababababababababababababababababababababababababababacacafafafafafafacacacacababacadadadadadacacacabaa
+aaababacacacacacacacabababababababagababababacacacacacacacacababacacacacafafafafafafafafafafacacacacadadahadacafafacabaa
+aaabacacafafafafafacacacacacacababaeabacacacacafafafafacacacacacafafafafafafafafafafafafafacacadadadadadacacacafafacabaa
+aaabacafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafafafafafafafafafafafafacacadaiadadajacacafafafafacacaa
+aaabacafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafacacacadadadadadadacafafafafafafacaa
+aaabacafafafafakakakakakakafafafafafafafafafafafafafakakakakakakakafafafafafafafafacacadajadadahadadadacafafafafafafacaa
+aaabacafafafafafakakakakakafafafafafafafafafakakakakakakakakakakakakakakafafafafafacadahadadadadadadacacafafafafafafacaa
+aaabacacafafafafafakakakakafafafafafafafafafakakakakakakakakakakakakakafafafafafacacaladadadadadahacacafafafafafafafacaa
+aaababacafafafafafafakakakakakafafafakakakakakakakakakakakakakakakakakakakakakafafacacadadadadadacacafafafafafafafafacaa
+aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafafacadadadaiadacacafafafafafafafacacaa
+aaababacacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacacadahadadacacafafafafafafafafacabaa
+aaabababacafafafafafafafakakakakakakakakakakakakafafakakakakakakakakakafafafafafafacacadadadadacafafafafafafafafafacabaa
+aaabababacacafafafafafafafakakakakakakakakakakafafafafakakakakakakakakakafafafafafacacadadalacacafafafafafafafacacacabaa
+aaababababacafafafafafafakakakakakakakakakafafafafafafafafafafafafafafafafafafacacacadadadadacafafafafakafafafacacababaa
+aaababababacacafafafafafafakakakakakakafafafafafafafafafafafafafafafafafafafacacadadadadadacacafafafakakafafafafacababaa
+aaababababacacafafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadadacacacafafafafakakakafafafacacabaa
+aaababababaeacafafafafakakakakakafafafafafafafafafafafafafafafafafafafafacacadadadacacacafafafafafafakakakafafafafacabaa
+aaababababacacafafakakakakakakakakafafafafafafafafafacacacacacacacafafacacadadacacacafafafafafafafafakakakafafafafacabaa
+aaababababacafafafakakakakakakakakakakafafafafafacacacadadadadadacacacacadadacacafafafafafafafakafakakakafafafafafacabaa
+aaabababacacafafafafakakakakakakakafafafafafafacacadadamadadadadadadadadadadacafafafafafafafafakakakakakafafafafafacabaa
+aaabababacafafafafafafakakakakakafafafafafafacacadadadadadadamadadadadadadadacafafafafafafafakakakakakakafafafafacacabaa
+aaabababacafafafafafafakakakakakafafafafafacacadadadadadadadadadadadadadadacacafafafafafafafakakakakakakakakafafacacabaa
+aaabababacafafafafafafafakakakakafafafafacacadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakakakafafafacabaa
+aaabababacafafafafafafafakakakafafafafafacadadadadadadadadadadadadadadadadadadacacafafafafafafakakakakakakafafafafacabaa
+aaabababacafafafafafafafakakakakakafafafacadadadadadadadanadadadadadanadadadadadacacafafafafafafakakakakafafafafafacabaa
+aaabababacafafafafafafafakakakakakafafafacadadaoadadaoadapapaqaqaqapapadaoadadaoadacafafafafafafakakakakafafafafafacabaa
+aaabababacafafafafafafafakakakakakakafafacapapapapapapapapapaparapapapapapapapapapapapafafafafafakakakakafafafafacacabaa
+aaabababacacafafafafafafakakakakakakafafacapasatasauavauasawapaxapayayayayazaAaBaCaDapafafafafafakakakakafafafafacacabaa
+aaabababacacacafafafafakakakakakakakafaoaEapaFaCaGaCaCaCasaHapasapaIaJaJaJaKasasaLasapaMaoafafafakakakafafafafafafacabaa
+aaabababababacacafafafakakakakakakakafafafapaxaCaCaCaCaCasaNapaOapapapapapapaPapapapapafafafafafakakakafafafafafafacabaa
+aaababababababacafafafakakakakakakakakafafapasasasaLasasasasaQasasavasasasasasavasasapafafafafafakakakafafafafafafafacaa
+aaabababagabababacafafakakakakakakakakaoaMapaRapapapapapapapapapapapapapapaSapapapapapaMaoafafafakakakafafafafafafafacaa
+aaababababababacacafafafakakakakakakakakafapasaCaTaUaVaWaXaYapaZaCbabbbabcasaSavaSbdapafafafafafakakakafafafafafafafacaa
+aaababababababacafafafafakakakakakakakakafapasasaLasasaLasasapaxasasasasasbeapbfapbgapafafafafakakakakakafafafafafafacaa
+aaababababababacafafafafakakakakakakakakakapapapapapapapapapapapapbhbibibibjapapapapapafafafafakakakakafafafafafafafacaa
+aaabababababacacafafafakakakakakakakakakakafafafafaEacacadadadadbkadadadadadbkacacafafafafafafakakakakafafafafafafafacaa
+aaabababababacafafafafakakakakakakakakakakakakafafaoafacacacacacaoadadadadadaoacafafafafafafakakakakakafafafafafafacacaa
+aaababababacacafafafafakakakakakakakakakakakakakafafafafafafafacacadadadadadacacafafafafafakakakakakakafafafafafafacabaa
+aaababababacafafafafafafakakakakakakakakakakakakafafafafafafafafacacacacacacacafafafafafafafakakakakakafafafafafacacabaa
+aaabababacacafafafafafafakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa
+aaabababacacafafafafafakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafacababaa
+aaabababacacafafafafafakakakakakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafafafakakakafafafafafacacababaa
+aaababacacafafafafafafafakakakakakakakakakakakakakakakakakakafafafafafafafafafafafafafafafafakakakakafafafafafacabababaa
+aaababacafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafakakakakakakafafafafafacacababaa
+aaababacafafafafafakakakakakakakakafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa
+aaabacacafafafafafakafakakakakakafafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa
+aaabacafafafafafafafafakakakakakakakafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa
+aaabacafafafafafafafafafafafafakakakafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafafacababaa
+aaabacafafafafafafafafafafafafafafafafafafafafafafakakakakakakakakakakakakakakakakakakakakakakakakakakafafafafacacababaa
+aaabacafafafafafafafafacacacacacacacacafafafafafafakakakakakakakakakakakakakakakafakakakakakakakakakakafafafafacabababaa
+aaabacafafafafafafacacacababababababacacacafafafafafafakakafafafafafafafafafakafafafafafakakakakakakafafafafafacabababaa
+aaabacacafafafafacacababababababababababacafafafafafafafafafafafafafafafafafafafafafafafafafafakakakakafafafacacababaeaa
+aaababacafafafacacababababababababababacacafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakafafafacababagabaa
+aaababacafafacacabababababababababagabacafafafafafafafafafafafafafafacacacacacacafafafafafafafafafafafafafacacababababaa
+aaabacacafacacababababababababababababacafafafafafafafafafafacacacacacabacacacacacacafafafafafafafafafafacacabababababaa
+aaabacafacacababababaeabababababababacacafafafafafacacacacacacababababababababababacacacacacacacafafafacacacabababababaa
+aaabacacacababababababababababababacacacacacacacacacabababababababababababababababababababababacacacacacabababababababaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
"}
diff --git a/maps/submaps/surface_submaps/wilderness/Lab1.dmm b/maps/submaps/surface_submaps/wilderness/Lab1.dmm
index 12745913d6..724043a9ff 100644
--- a/maps/submaps/surface_submaps/wilderness/Lab1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Lab1.dmm
@@ -19,32 +19,33 @@
"s" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
"t" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
"u" = (/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/hyper; dir = 8; name = "Unknown APC"; operating = 0; pixel_x = -24},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"v" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"w" = (/obj/machinery/power/smes/buildable/point_of_interest,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"v" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"w" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
"x" = (/obj/structure/table/standard,/obj/item/weapon/paper{desc = "Gladstone for the last fucking time, We have crowbars for a REASON. Stop breaking in through the goddamn windows! We big red shiny doors for god's sakes!"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
"y" = (/obj/structure/table/standard,/obj/item/device/flashlight/lamp,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"z" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"A" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"B" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"C" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"D" = (/obj/structure/table/standard,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"E" = (/obj/structure/table/standard,/obj/item/device/multitool,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"F" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"G" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"H" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"I" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"J" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"K" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"L" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"M" = (/obj/item/weapon/storage/bag/circuits,/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"N" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"O" = (/obj/item/robot_parts/chest,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"P" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"Q" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"R" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"S" = (/obj/machinery/vending/robotics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"T" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
-"U" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"z" = (/turf/simulated/floor,/area/submap/Lab1)
+"A" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"B" = (/obj/machinery/vending/hydroseeds,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"C" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"D" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"E" = (/obj/structure/table/standard,/obj/fiftyspawner/steel,/obj/fiftyspawner/glass,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"F" = (/obj/structure/table/standard,/obj/item/device/multitool,/obj/item/clothing/glasses/welding,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"G" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"H" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"I" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"J" = (/obj/item/weapon/cell/super,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"K" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"L" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"M" = (/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"N" = (/obj/item/weapon/storage/bag/circuits,/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"O" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"P" = (/obj/item/robot_parts/chest,/obj/item/robot_parts/l_arm,/obj/item/robot_parts/r_arm,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"Q" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"R" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"S" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"T" = (/obj/machinery/vending/robotics,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"U" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
+"V" = (/obj/machinery/optable,/turf/simulated/floor/tiled/steel_dirty,/area/submap/Lab1)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaa
@@ -56,14 +57,14 @@ acmhncbbchhcbbcohpca
acqhrcbbcshcbbcthtca
acuvwcbbchhcbbcxhyca
acdefcbbcllcbbcdefca
-abbbbbbbbbbbbbbbbbba
-abbbbbbbbbbbbbbbbbba
+abbbbbbbbzzbbbbbbbba
+abbbbbbbbzzbbbbbbbba
acdefcbbcllcbbcdefca
-achzAcbbchBcbbcCDEca
-acFhGcbbchhcbbcHIJca
-acKhLcdfcllcdfchhMca
-acFhhihhNhhNhhihhOca
-acPQRcdeeeeeefcSTUca
+achABcbbchCcbbcDEFca
+acGhHcbbchhcbbcIJKca
+acLhMcdfcllcdfchhNca
+acGhhihhOhhOhhihhPca
+acQRScdeeeeeefcTUVca
acdefcbbbbbbbbcdefca
abbbbbbbbbbbbbbbbbba
aaaaaaaaaaaaaaaaaaaa
diff --git a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
index df9dd6ecaa..3033ffdf62 100644
--- a/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
+++ b/maps/submaps/surface_submaps/wilderness/MCamp1.dmm
@@ -1,59 +1,53 @@
"a" = (/turf/template_noop,/area/template_noop)
"b" = (/turf/template_noop,/area/submap/MilitaryCamp1)
"c" = (/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"d" = (/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"e" = (/obj/effect/mine,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"f" = (/obj/structure/flora/bush,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"g" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"h" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"i" = (/obj/structure/flora/tree/sif,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"j" = (/obj/item/stack/rods,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"k" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
-"l" = (/turf/simulated/wall,/area/submap/MilitaryCamp1)
-"m" = (/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"n" = (/obj/item/weapon/material/shard,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"o" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"p" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"q" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"r" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"s" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"t" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/syndie_kit/space,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"u" = (/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"v" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"w" = (/mob/living/simple_animal/hostile/viscerator,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"y" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"z" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"A" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"B" = (/obj/machinery/computer/security,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"C" = (/obj/machinery/computer/message_monitor,/turf/simulated/floor/holofloor/tiled,/area/submap/MilitaryCamp1)
-"D" = (/obj/machinery/light,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"E" = (/obj/structure/flora/tree/dead,/turf/simulated/floor/outdoors/grass/sif/forest,/area/submap/MilitaryCamp1)
-"F" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"G" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"H" = (/obj/machinery/light,/obj/structure/table/standard,/turf/simulated/floor/tiled/steel,/area/submap/MilitaryCamp1)
-"I" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1)
-"J" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"d" = (/obj/effect/mine,/turf/template_noop,/area/submap/MilitaryCamp1)
+"e" = (/obj/structure/flora/bush,/turf/template_noop,/area/submap/MilitaryCamp1)
+"f" = (/obj/effect/decal/cleanable/blood,/turf/template_noop,/area/submap/MilitaryCamp1)
+"g" = (/obj/effect/decal/remains,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"h" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/MilitaryCamp1)
+"i" = (/obj/item/stack/rods,/turf/template_noop,/area/submap/MilitaryCamp1)
+"j" = (/obj/effect/mine,/turf/simulated/floor/outdoors/dirt,/area/submap/MilitaryCamp1)
+"k" = (/turf/simulated/wall,/area/submap/MilitaryCamp1)
+"l" = (/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"m" = (/obj/item/weapon/material/shard,/turf/template_noop,/area/submap/MilitaryCamp1)
+"n" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"o" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"p" = (/obj/machinery/computer/communications,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"q" = (/obj/structure/table/standard,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"r" = (/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"s" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"t" = (/obj/machinery/computer/security,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"u" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"v" = (/obj/machinery/door/airlock,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"w" = (/obj/effect/decal/cleanable/dirt,/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"x" = (/mob/living/simple_animal/hostile/viscerator{returns_home = 1},/turf/template_noop,/area/submap/MilitaryCamp1)
+"y" = (/obj/structure/table,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"z" = (/obj/structure/table/standard,/obj/random/firstaid,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"A" = (/obj/machinery/door/airlock,/obj/effect/mine,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"B" = (/obj/structure/flora/tree/dead,/turf/template_noop,/area/submap/MilitaryCamp1)
+"C" = (/obj/structure/table/standard,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor,/area/submap/MilitaryCamp1)
+"D" = (/obj/structure/table/standard,/obj/item/weapon/gun/energy/gun,/turf/simulated/floor,/area/submap/MilitaryCamp1)
(1,1,1) = {"
aaaaaaaaaaaaaaaaaaaa
-abbcdedfgedddbbbbbba
-achcdddddddgedchbbba
-adccddeddijdddcckiba
-adiddjllmlllmlncddda
-abdddlllmmllllldedea
-abbellopqmplrslldfda
-abbdlltmmmuvwxllddda
-abdnlllllyullllzAeda
-adddmlplBuuClullddda
-agedmluvDppDvplldeda
-adddzlullllllulzdEda
-addAllyuuuFuuullddda
-aEddllGouuuuHollndga
-addfdllllImlllldedda
-abedddlllmmllldcceda
-abcddddlldnlldkcddba
-achceddddedjddchibba
-abccfbJdigddeccdbbba
+abbcbdbefdbbbbbbbbba
+acgcbbbbbbbfdbcgbbba
+abccbbdbbhibbbccjhba
+abhbbikkllkklkmcbbba
+abbbbkkkllkkkkkbdbda
+abbdkknllokpqnkkbeba
+abbbkknorsktuukkbbba
+abbmkkvkkwkkkvkoxdba
+abbblknllslnwskkbbba
+afdblknllyznsskkbdba
+abbbokvAkkkkvvkobBba
+abbxkknlosssnnkkbbba
+aBbbkkCDkllnnnkkmbfa
+abbebkkkkvlkkkkbdbba
+abdbbbkkkslkkkbccdba
+abcbbbbkkbmkkbjcbbba
+acgcdbbbddbibbcghbba
+abccebdbhfbbdccbbbba
aaaaaaaaaaaaaaaaaaaa
"}
diff --git a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
index 562ca0efa3..aac376d999 100644
--- a/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
+++ b/maps/submaps/surface_submaps/wilderness/Rockybase.dmm
@@ -3,8 +3,8 @@
"ac" = (/obj/effect/decal/remains,/turf/template_noop,/area/submap/Rockybase)
"ad" = (/turf/template_noop,/area/submap/Rockybase)
"ae" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Rockybase)
-"af" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/template_noop,/area/submap/Rockybase)
-"ag" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockybase)
+"af" = (/turf/simulated/mineral/ignore_mapgen,/area/submap/Rockybase)
+"ag" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/template_noop,/area/submap/Rockybase)
"ah" = (/turf/simulated/floor,/area/submap/Rockybase)
"ai" = (/obj/machinery/porta_turret/stationary,/turf/simulated/floor,/area/submap/Rockybase)
"aj" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase)
@@ -16,104 +16,104 @@
"ap" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
"aq" = (/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
"ar" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/item/weapon/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"as" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"at" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"au" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"av" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"aw" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"ax" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"ay" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"az" = (/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aA" = (/mob/living/bot/cleanbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aB" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aC" = (/obj/item/weapon/storage/belt/janitor,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aD" = (/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aE" = (/obj/structure/table/standard,/obj/item/device/laptop,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aF" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aG" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aH" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/taser,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aI" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aJ" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aK" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aL" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aM" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aN" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"aO" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"aP" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aQ" = (/obj/structure/table/standard,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aR" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aS" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Carl's absolutly fucked in the head. He's trying to squeeze as much drone production out as he can since he's worried we're gonna get found out but he's getting sloppier with each batch. Now's he's telling us he can speed the time on the IFF encoding. I already have a hard enough time getting these damn things not to stare at walls and now he's gonna shortchange the only part of these tincans that tells em not to turn us into paste on a wall. I told Richter to get out while he can, We're counting days before either some Sif task force shows up at our door or these things decide we aren't there friends anymore."; name = "Note"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aT" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aU" = (/obj/machinery/vending/security,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aV" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aW" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"aX" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"aY" = (/obj/item/mecha_parts/part/gygax_left_leg,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"aZ" = (/obj/machinery/light,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"ba" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
-"bb" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bc" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bd" = (/obj/structure/table/standard,/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"be" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bf" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bg" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bh" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bi" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bj" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bk" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bl" = (/mob/living/bot/farmbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bm" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bn" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bo" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bp" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bq" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"br" = (/obj/effect/decal/remains,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bs" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"bt" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bu" = (/obj/item/stack/rods,/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bv" = (/obj/structure/sign/securearea{desc = "A warning sign which reads 'HIGH VOLTAGE'"; icon_state = "shock"; name = "HIGH VOLTAGE"; pixel_y = -32},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bw" = (/obj/item/mecha_parts/part/gygax_right_arm,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bx" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"by" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bz" = (/turf/simulated/wall,/area/submap/Rockybase)
-"bA" = (/obj/structure/table/standard,/obj/item/device/kit/paint/gygax/darkgygax,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bB" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I've decided to go forward and start some small scale tests of the Vicerator delivery grenades, Might as wall make sure they work like the real ones. There are a few Fauna areas nearbye and we're working to make sure the kinks in the code are worked out. Once we've made sure they stay flying we'll work on the IFF signals."; name = "V-Grenade Notice 2"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bC" = (/obj/structure/table/standard,/obj/random/toolbox,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bD" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bE" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "We've finally been able to get the Vicerator delivery grenades working, Took awhile to make sure the latching mechanism didn't fail but we're sure we've got it this time. Vel'Shem's worried about the miners having there own drone fab now but I say it's a small price to pay to keep the metal flowing, Especially since there telling us NT's starting to monopolize the metal rich parts."; name = "V-Grenade Notice 1"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bF" = (/obj/structure/table/standard,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bG" = (/obj/structure/table/standard,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bH" = (/obj/structure/table/standard,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bI" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/item/weapon/circuitboard/mecha/gygax/main,/obj/item/weapon/circuitboard/mecha/gygax/peripherals,/obj/item/weapon/circuitboard/mecha/gygax/targeting,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bJ" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase)
-"bK" = (/obj/structure/table/standard,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bL" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bM" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bN" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bO" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bP" = (/obj/item/mecha_parts/part/gygax_torso,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bQ" = (/obj/machinery/light{dir = 1},/obj/structure/closet/crate/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bR" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bS" = (/obj/structure/table/standard,/obj/item/clothing/mask/breath/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bT" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bU" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bV" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"bW" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"bX" = (/obj/structure/table/standard,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bY" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"bZ" = (/obj/effect/decal/cleanable/dirt,/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
-"ca" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
-"cb" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/turf/simulated/floor,/area/submap/Rockybase)
-"cc" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
-"cd" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"ce" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
-"cf" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cg" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"ch" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"ci" = (/obj/structure/table/standard,/obj/item/mecha_parts/mecha_equipment/repair_droid,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cj" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"ck" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cl" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase)
+"as" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"at" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"au" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"av" = (/obj/structure/closet{icon_closed = "cabinet_closed"; icon_opened = "cabinet_open"; icon_state = "cabinet_closed"},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aw" = (/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"ax" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"ay" = (/obj/structure/table/woodentable,/obj/machinery/light{dir = 1},/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"az" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/toy/plushie/spider,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"aA" = (/obj/structure/closet/l3closet/janitor,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aB" = (/mob/living/bot/cleanbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aC" = (/obj/item/weapon/stool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aD" = (/obj/item/weapon/storage/belt/janitor,/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aE" = (/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aF" = (/obj/structure/table/standard,/obj/item/device/laptop,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aG" = (/obj/structure/table/standard,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aH" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aI" = (/obj/structure/table/rack,/obj/item/weapon/gun/energy/gun/taser,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aJ" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aK" = (/obj/machinery/vending/coffee,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aL" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/obj/item/weapon/gun/projectile/shotgun/pump/combat,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aM" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aN" = (/obj/structure/closet/crate/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aO" = (/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"aP" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"aQ" = (/obj/structure/janitorialcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aR" = (/obj/structure/table/standard,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/item/weapon/grenade/chem_grenade/cleaner,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aS" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aT" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "Carl's absolutly fucked in the head. He's trying to squeeze as much drone production out as he can since he's worried we're gonna get found out but he's getting sloppier with each batch. Now's he's telling us he can speed the time on the IFF encoding. I already have a hard enough time getting these damn things not to stare at walls and now he's gonna shortchange the only part of these tincans that tells em not to turn us into paste on a wall. I told Richter to get out while he can, We're counting days before either some Sif task force shows up at our door or these things decide we aren't there friends anymore."; name = "Note"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aU" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aV" = (/obj/machinery/vending/security,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aW" = (/obj/structure/table/rack,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/weapon/storage/box/shotgunshells,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/obj/item/ammo_magazine/m10mm,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"aY" = (/obj/machinery/shower{dir = 8; icon_state = "shower"; pixel_x = -5; pixel_y = 0},/obj/structure/curtain/open/shower,/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"aZ" = (/obj/item/mecha_parts/part/gygax_left_leg,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"ba" = (/obj/machinery/light,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"bb" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/item/weapon/gun/projectile/pistol,/turf/simulated/floor/holofloor/lino,/area/submap/Rockybase)
+"bc" = (/obj/structure/closet/crate/trashcart,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bd" = (/obj/structure/loot_pile/maint/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"be" = (/obj/structure/table/standard,/obj/item/weapon/storage/bag/trash,/obj/item/weapon/storage/bag/trash,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bf" = (/obj/structure/table/standard,/obj/item/weapon/paper_bin,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bg" = (/obj/machinery/light,/obj/structure/table/standard,/obj/item/weapon/pen,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bh" = (/obj/machinery/door/airlock/security{icon_state = "door_locked"; locked = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bi" = (/obj/machinery/light,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bj" = (/obj/structure/table/rack,/obj/item/weapon/gun/projectile/automatic/c20r,/obj/item/weapon/gun/projectile/automatic/c20r,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bk" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bl" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bm" = (/mob/living/bot/farmbot{faction = "malf_drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bn" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bo" = (/obj/machinery/vending/cola,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bp" = (/obj/structure/door_assembly,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bq" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"br" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bs" = (/mob/living/simple_animal/hostile/malf_drone{desc = "An automated combat drone with an aged apperance."; returns_home = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bt" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bu" = (/obj/effect/decal/remains,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bv" = (/obj/machinery/door/airlock,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bw" = (/obj/machinery/vending/snack,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bx" = (/obj/item/stack/rods,/obj/structure/girder,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"by" = (/obj/item/mecha_parts/part/gygax_right_arm,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bz" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bA" = (/obj/machinery/door/airlock/engineering,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bB" = (/turf/simulated/wall,/area/submap/Rockybase)
+"bC" = (/obj/structure/table/standard,/obj/item/device/kit/paint/gygax/darkgygax,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bD" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "I've decided to go forward and start some small scale tests of the Vicerator delivery grenades, Might as wall make sure they work like the real ones. There are a few Fauna areas nearbye and we're working to make sure the kinks in the code are worked out. Once we've made sure they stay flying we'll work on the IFF signals."; name = "V-Grenade Notice 2"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bE" = (/obj/structure/table/standard,/obj/random/toolbox,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bF" = (/obj/structure/table/standard,/obj/random/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bG" = (/obj/structure/table/standard,/obj/item/weapon/paper{info = "We've finally been able to get the Vicerator delivery grenades working, Took awhile to make sure the latching mechanism didn't fail but we're sure we've got it this time. Vel'Shem's worried about the miners having there own drone fab now but I say it's a small price to pay to keep the metal flowing, Especially since there telling us NT's starting to monopolize the metal rich parts."; name = "V-Grenade Notice 1"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bH" = (/obj/structure/table/standard,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/obj/item/stack/material/diamond,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bI" = (/obj/structure/table/standard,/obj/item/weapon/grenade/spawnergrenade/manhacks,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bJ" = (/obj/structure/table/standard,/obj/item/stack/material/steel,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bK" = (/obj/structure/table/standard,/obj/machinery/light{dir = 1},/obj/item/weapon/circuitboard/mecha/gygax/main,/obj/item/weapon/circuitboard/mecha/gygax/peripherals,/obj/item/weapon/circuitboard/mecha/gygax/targeting,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bL" = (/obj/item/weapon/material/shard,/turf/simulated/floor,/area/submap/Rockybase)
+"bM" = (/obj/structure/table/standard,/obj/fiftyspawner/rods,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bN" = (/obj/machinery/vending/engivend,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bO" = (/obj/machinery/vending/tool,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bP" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bQ" = (/obj/structure/table/standard,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bR" = (/obj/item/mecha_parts/part/gygax_torso,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bS" = (/obj/machinery/light{dir = 1},/obj/structure/closet/crate/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bT" = (/obj/structure/table/standard,/obj/structure/table/standard,/obj/effect/decal/cleanable/dirt,/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/burn,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bU" = (/obj/structure/table/standard,/obj/item/clothing/mask/breath/medical,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bV" = (/obj/structure/closet/secure_closet/medical2,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bW" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bX" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"bY" = (/obj/structure/table/standard,/obj/item/device/mmi/digital/robot,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"bZ" = (/obj/item/stack/rods,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ca" = (/obj/effect/decal/cleanable/dirt,/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
+"cb" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
+"cc" = (/obj/effect/decal/cleanable/dirt,/obj/structure/table,/turf/simulated/floor,/area/submap/Rockybase)
+"cd" = (/obj/structure/girder,/turf/simulated/floor,/area/submap/Rockybase)
+"ce" = (/obj/structure/closet/secure_closet/medical1,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cf" = (/obj/machinery/light/small{dir = 4; pixel_y = 0},/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
+"cg" = (/obj/machinery/drone_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ch" = (/obj/machinery/mecha_part_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ci" = (/obj/machinery/pros_fabricator,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cj" = (/obj/structure/table/standard,/obj/item/mecha_parts/mecha_equipment/repair_droid,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"ck" = (/obj/machinery/power/terminal{dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cl" = (/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase)
"cm" = (/obj/machinery/vending/medical,/turf/simulated/floor/tiled,/area/submap/Rockybase)
"cn" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/tiled,/area/submap/Rockybase)
"co" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor,/area/submap/Rockybase)
@@ -122,11 +122,11 @@
"cr" = (/obj/item/mecha_parts/part/gygax_armour,/turf/simulated/floor,/area/submap/Rockybase)
"cs" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/submap/Rockybase)
"ct" = (/obj/item/mecha_parts/chassis/gygax,/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cu" = (/mob/living/simple_animal/hostile/mecha/malf_drone,/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cu" = (/mob/living/simple_animal/hostile/mecha/malf_drone{name = "Autonomous Mechanized Drone"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
"cv" = (/obj/machinery/vending/robotics,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/submap/Rockybase)
"cw" = (/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/machinery/light{dir = 8},/obj/machinery/power/apc{cell_type = /obj/item/weapon/cell/super; dir = 8; name = "Unknown APC"; pixel_x = -24},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/submap/Rockybase)
-"cy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase)
+"cx" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/tiled,/area/submap/Rockybase)
+"cy" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/obj/machinery/power/smes/buildable/point_of_interest,/turf/simulated/floor,/area/submap/Rockybase)
"cz" = (/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/dirt,/obj/effect/decal/cleanable/blood,/turf/simulated/floor,/area/submap/Rockybase)
"cA" = (/obj/item/mecha_parts/part/gygax_right_leg,/turf/simulated/floor/tiled,/area/submap/Rockybase)
"cB" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/obj/item/mecha_parts/part/gygax_left_arm,/turf/simulated/floor/tiled/hydro,/area/submap/Rockybase)
@@ -153,31 +153,31 @@
aaabababababababababababababababababababaaababababababababababababababababababababababababababababaa
abacadadadaeadadadadaeadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadadadacadadadadadab
abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab
-abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadafadadadadab
-abadadadadadadadadadadafadadadadaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadab
-abadadagagagagagadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadab
-abadadagagagagagagadadadadagagagagagadadadadadadadadahahahahahahadadadadadadadadadagagagadadadadadab
-abadagagagagagagagagagagagagagagagagagadadadadadaiahahajahahahahahaiadadadadadagagagagagagagagagadab
-akadagagagagagagagagagagagagagagagagagagagagagahahalahahahahahajalahahagagagagagagagagagagagagagadab
-abadagagamamamamamamamamamamamamamamamamamamamamamamamanaoaoanamamamamamamamamamamamamamagagagagadab
-abadagamamapaqaramasasatauavavasawaxawasayamamazaAaBaCamaDaDamaEaFaGaHaIaJamaDaKamaLaMamamagagagadab
-abagagamamaNaqaOamavavavavavavavavavavavavamamaPaDaDaQamaRaDamaSaTaDaDaDaUamaDaVamaDaWamamagagagadab
-abagagamamaNaqaXamavaYavavaZavasbaasawasawamambbaDbcbdamaDaDambebfaDaDaDaDbgbhbiamaDbjamamagagagadab
-abagagamamaqaqaqamamambkamamamamamamamamamamamambkamamamaoaoamamamamambkamamamamamblbmamamagagagadab
-abagagamamambkamambnaDaDaDaDaIaDaDaDaDboaDaIaDaDaDaDaDaDaDaDaDaDaIaDaDaDaDaDaIaDamaDbjamamagagagadab
-abagagamamaRaDaDaDaDaDaDbpaDaDaDbqbraDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDaDbpaDaDbkaDbjamamagagagadab
-abadagamamambsamambtaDaDbhaDaDaDaDaDbuaDahbrbhaDbqaDbvaDaDaDaDaDaDaDbhaDaDaDaDbwamaDbmamamagagagadab
-abadagamambxaqaqamamamamamamamamamamamahahamamamambyamamamamaDamamamamamamamamamamaDbjamamagagagadab
-abadagamambzbzaqambAbBbCbDbEbFbGbHbIboahbJbKambLbMaDbNbOambPaDaDbQbRbSbTaDaDaDbUamaDbjamamagagagadab
-abadagamambVbsbWamaDaDaDaDaDaDaDaDaDaDaDahbXamaDaDaDaDaDamboaDbTbTbYbZcacbccaDcdamaDbmamamagagagaeab
-abadagamambzbzceamaDcfaDaDcfaDaDcgaDchaDahciamaDaDcjckclamcmaDbTcncocpcqcocrahaDamaDbjamamagagadadab
-abadagamambVbsaqamcsaDaDctaDcuaDaDaDaDaDaDcvamcwckcxckcyamaDaDbTczcqcqcocbahbJaDamaDcAamamagagadadab
-abadagamambzbzcBamaDcfaDaDahahaDaDaDaDaDaDcCamaDaDcDckclamcEaDaDcFcocacacacaahbTamaDcGamamagadadadab
-abadagamambVbsaqamaDaDaDaDaDaDbhcHaDcHaDaDbMamcIcJcKcLaDamcMaDcNaDaDcOcccOcPbTcQamcRcSamamagagadadab
-abadagagamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamagagadadafab
-abadagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagagadadadab
-abadagagagagagagagagagagagagagagagagagagagagagagagagagagagagagadagagagadadadagagagagagagagadadadadab
-abadadagagagagagagagagagagagagafadadadagagagagagagadadadadadadadadadadadadadadadadadadadadadadadadab
-abadaeadadadadadadagagagagagadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab
+abadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab
+abadadadadadadadadadadadadadadadaeadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadab
+abadadafafafafafadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadaeadadadadadadadadadadab
+abadadafafafafafafagadadadafafafafafadadadadadadadadahahahahahahadadadadadadadadadafafafagadadadadab
+abadafafafafafafafafafafafafafafafafafadadadadadaiahahajahahahahahaiadadadadadafafafafafafafafafadab
+akadafafafafafafafafafafafafafafafafafafafafafahahalahahahahahajalahahafafafafafafafafafafafafafadab
+abadafafamamamamamamamamamamamamamamamamamamamamamamamanaoaoanamamamamamamamamamamamamamafafafafadab
+abadafamamapaqaramasatauavawawataxayaxatazamamaAaBaCaDamaEaEamaFaGaHaIaJaKamaEaLamaMaNamamafafafadab
+abafafamamaOaqaPamawawawawawawawawawawawawamamaQaEaEaRamaSaEamaTaUaEaEaEaVamaEaWamaEaXamamafafafadab
+abafafamamaOaqaYamawaZawawbaawatbbataxataxamambcaEbdbeamaEaEambfbgaEaEaEaEbhbibjamaEbkamamafafafadab
+abafafamamaqaqaqamamamblamamamamamamamamamamamamblamamamaoaoamamamamamblamamamamambmbnamamafafafadab
+abafafamamamblamamboaEaEaEaEaJaEaEaEaEbpaEaJaEaEaEaEaEaEaEaEaEaEaJaEaEaEaEbqbqbramaEbkamamafafafadab
+abafafamamaSaEaEaEaEaEaEbsbqbqaEbtbuaEaEaEaEaEaEaEaEaEaEbqaEaEaEaEaEaEaEaEbsbqbqblaEbkamamafafafadab
+abadafamamambvamambwaEaEbqbqbqaEaEaEbxaEahbubiaEbtaEbqbqbqaEaEaEaEaEbiaEaEaEaEbyamaEbnamamafafafadab
+abadafamambzaqaqamamamamamamamamamamamahahamamamambAamamamamaEamamamamamamamamamamaEbkamamafafafadab
+abadafamambBbBaqambCbDbEbFbGbHbIbJbKbpahbLbMambNbOaEbPbQambRaEaEbSbTbUbqaEaEaEbVamaEbkamamafafafadab
+abadafamambWbvbXamaEaEaEaEaEaEaEaEaEaEaEahbYamaEaEaEaEaEambpaEbqbqbZcacbcccdaEceamaEbnamamafafafaeab
+abadafamambBbBcfamaEcgaEaEcgaEaEchaEciaEahcjamaEbqbqckclamcmaEbqcncocpcqcocrahaEamaEbkamamafafadadab
+abadafamambWbvaqamcsaEaEctaEcuaEbqbqaEaEaEcvamcwcxbqckcyamaEaEbqczcqcqcoccahbLaEamaEcAamamafafadadab
+abadafamambBbBcBamaEcgaEaEahahbqbqbqbqaEaEcCamaEaEcDckclamcEaEaEcFcocbcbcbcbahbqamaEcGamamafagadadab
+abadafamambWbvaqamaEaEaEaEaEaEbicHaEcHaEaEbOamcIcJcKcLaEamcMaEcNaEaEcOcdcOcPbqcQamcRcSamamafafadadab
+abadafafamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamamafafadadadab
+abadafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafadadadab
+abadafafafafafafafafafafafafafafafafafafafafafafafafafafafafafadafafafadadadafafafafafafafadadadadab
+abadadafafafafafafafafafafafafagadadadafafafafafafadadadadadadadadadadadadadadadadadadadadadadadadab
+abadaeadadadadadadafafafafafadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadadab
aaabcTababababababababababababababababababaaababababababababababababababababakababababababcTabakabab
"}
diff --git a/vorestation.dme b/vorestation.dme
index a5f8047f95..809f55ff82 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -204,6 +204,7 @@
#include "code\controllers\subsystems\persist_vr.dm"
#include "code\controllers\subsystems\shuttles.dm"
#include "code\controllers\subsystems\transcore_vr.dm"
+#include "code\controllers\subsystems\xenoarch.dm"
#include "code\datums\ai_law_sets.dm"
#include "code\datums\ai_laws.dm"
#include "code\datums\beam.dm"
@@ -929,6 +930,7 @@
#include "code\game\objects\items\devices\suit_cooling.dm"
#include "code\game\objects\items\devices\t_scanner.dm"
#include "code\game\objects\items\devices\taperecorder.dm"
+#include "code\game\objects\items\devices\text_to_speech.dm"
#include "code\game\objects\items\devices\traitordevices.dm"
#include "code\game\objects\items\devices\transfer_valve.dm"
#include "code\game\objects\items\devices\translator.dm"
@@ -2293,6 +2295,7 @@
#include "code\modules\power\fusion\fusion_particle_catcher.dm"
#include "code\modules\power\fusion\fusion_reactions.dm"
#include "code\modules\power\fusion\fusion_reagents.dm"
+#include "code\modules\power\fusion\magpower.dm"
#include "code\modules\power\fusion\core\_core.dm"
#include "code\modules\power\fusion\core\core_control.dm"
#include "code\modules\power\fusion\core\core_field.dm"
@@ -2335,6 +2338,7 @@
#include "code\modules\projectiles\ammunition\rounds.dm"
#include "code\modules\projectiles\guns\energy.dm"
#include "code\modules\projectiles\guns\launcher.dm"
+#include "code\modules\projectiles\guns\modular_guns.dm"
#include "code\modules\projectiles\guns\projectile.dm"
#include "code\modules\projectiles\guns\vox.dm"
#include "code\modules\projectiles\guns\energy\laser.dm"
@@ -2672,7 +2676,6 @@
#include "code\modules\xenoarcheaology\boulder.dm"
#include "code\modules\xenoarcheaology\effect.dm"
#include "code\modules\xenoarcheaology\manuals.dm"
-#include "code\modules\xenoarcheaology\master_controller.dm"
#include "code\modules\xenoarcheaology\misc.dm"
#include "code\modules\xenoarcheaology\misc_vr.dm"
#include "code\modules\xenoarcheaology\sampling.dm"