diff --git a/baystation12.dme b/baystation12.dme
index f1d94bde1d..010f4af833 100644
--- a/baystation12.dme
+++ b/baystation12.dme
@@ -16,7 +16,6 @@
#include "code\setup.dm"
#include "code\stylesheet.dm"
#include "code\world.dm"
-#include "code\__HELPERS\bygex.dm"
#include "code\__HELPERS\files.dm"
#include "code\__HELPERS\game.dm"
#include "code\__HELPERS\global_lists.dm"
diff --git a/bygex.dll b/bygex.dll
deleted file mode 100644
index e7bdd9f9a7..0000000000
Binary files a/bygex.dll and /dev/null differ
diff --git a/code/WorkInProgress/carn/master_controller_semi-seq.dm b/code/WorkInProgress/carn/master_controller_semi-seq.dm
index 96e7eacda6..0f9b4f666d 100644
--- a/code/WorkInProgress/carn/master_controller_semi-seq.dm
+++ b/code/WorkInProgress/carn/master_controller_semi-seq.dm
@@ -50,7 +50,7 @@ datum/controller/game_controller/New()
if(!syndicate_code_response) syndicate_code_response = generate_code_phrase()
if(!ticker) ticker = new /datum/controller/gameticker()
if(!emergency_shuttle) emergency_shuttle = new /datum/shuttle_controller/emergency_shuttle()
-
+ if(artifact_spawn) artifact_spawning_turfs = artifact_spawn
datum/controller/game_controller/proc/setup()
world.tick_lag = config.Ticklag
diff --git a/code/__HELPERS/bygex.dm b/code/__HELPERS/bygex.dm
deleted file mode 100644
index 0955b10750..0000000000
--- a/code/__HELPERS/bygex.dm
+++ /dev/null
@@ -1,107 +0,0 @@
-#ifndef LIBREGEX_LIBRARY
- #define LIBREGEX_LIBRARY "bygex"
-#endif
-
-proc
- regEx_compare(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_compare")(str, exp))
-
- regex_compare(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_compare")(str, exp))
-
- regEx_find(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_find")(str, exp))
-
- regex_find(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_find")(str, exp))
-
- regEx_replaceall(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replaceall")(str, exp, fmt)
-
- regex_replaceall(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replaceall")(str, exp, fmt)
-
- replacetextEx(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replaceallliteral")(str, exp, fmt)
-
- replacetext(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replaceallliteral")(str, exp, fmt)
-
- regEx_replace(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regEx_replace")(str, exp, fmt)
-
- regex_replace(str, exp, fmt)
- return call(LIBREGEX_LIBRARY, "regex_replace")(str, exp, fmt)
-
- regEx_findall(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regEx_findall")(str, exp))
-
- regex_findall(str, exp)
- return new /datum/regex(str, exp, call(LIBREGEX_LIBRARY, "regex_findall")(str, exp))
-
-
-//upon calling a regex match or search, a /datum/regex object is created with str(haystack) and exp(needle) variables set
-//it also contains a list(matches) of /datum/match objects, each of which holds the position and length of the match
-//matched strings are not returned from the dll, in order to save on memory allocation for large numbers of strings
-//instead, you can use regex.str(matchnum) to fetch this string as needed.
-//likewise you can also use regex.pos(matchnum) and regex.len(matchnum) as shorthands
-/datum/regex
- var/str
- var/exp
- var/error
- var/anchors = 0
- var/list/matches = list()
-
- New(str, exp, results)
- src.str = str
- src.exp = exp
-
- if(findtext(results, "Err", 1, 4)) //error message
- src.error = results
- else
- var/list/L = params2list(results)
- var/list/M
- var{i;j}
- for(i in L)
- M = L[i]
- for(j=2, j<=M.len, j+=2)
- matches += new /datum/match(text2num(M[j-1]),text2num(M[j]))
- anchors = (j-2)/2
- return matches
-
- proc
- str(i)
- if(!i) return str
- var/datum/match/M = matches[i]
- return copytext(str, M.pos, M.pos+M.len)
-
- pos(i)
- if(!i) return 1
- var/datum/match/M = matches[i]
- return M.pos
-
- len(i)
- if(!i) return length(str)
- var/datum/match/M = matches[i]
- return M.len
-
- end(i)
- if(!i) return length(str)
- var/datum/match/M = matches[i]
- return M.pos + M.len
-
- report() //debug tool
- . = ":: RESULTS ::\n:: str :: [html_encode(str)]\n:: exp :: [html_encode(exp)]\n:: anchors :: [anchors]"
- if(error)
- . += "\n[error]"
- return
- for(var/i=1, i<=matches.len, ++i)
- . += "\nMatch[i]\n\t[html_encode(str(i))]\n\tpos=[pos(i)] len=[len(i)]"
-
-/datum/match
- var/pos
- var/len
-
- New(pos, len)
- src.pos = pos
- src.len = len
diff --git a/code/__HELPERS/text.dm b/code/__HELPERS/text.dm
index d33f976fe7..a493aa9d08 100644
--- a/code/__HELPERS/text.dm
+++ b/code/__HELPERS/text.dm
@@ -194,7 +194,35 @@ proc/checkhtml(var/t)
/*
* Text modification
*/
- //Adds 'u' number of zeros ahead of the text 't'
+/proc/replacetext(text, find, replacement)
+ var/find_len = length(find)
+ if(find_len < 1) return text
+ . = ""
+ var/last_found = 1
+ while(1)
+ var/found = findtext(text, find, last_found, 0)
+ . += copytext(text, last_found, found)
+ if(found)
+ . += replacement
+ last_found = found + find_len
+ continue
+ return .
+
+/proc/replacetextEx(text, find, replacement)
+ var/find_len = length(find)
+ if(find_len < 1) return text
+ . = ""
+ var/last_found = 1
+ while(1)
+ var/found = findtextEx(text, find, last_found, 0)
+ . += copytext(text, last_found, found)
+ if(found)
+ . += replacement
+ last_found = found + find_len
+ continue
+ return .
+
+//Adds 'u' number of zeros ahead of the text 't'
/proc/add_zero(t, u)
while (length(t) < u)
t = "0[t]"
diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm
index 5ce15be96e..fd0b658aa0 100644
--- a/code/_onclick/click.dm
+++ b/code/_onclick/click.dm
@@ -291,7 +291,7 @@
// Simple helper to face what you clicked on, in case it should be needed in more than one place
/mob/proc/face_atom(var/atom/A)
- if( buckled || !A || !x || !y || !A.x || !A.y ) return
+ if( stat || buckled || !A || !x || !y || !A.x || !A.y ) return
var/dx = A.x - x
var/dy = A.y - y
if(!dx && !dy) return
diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm
index f2b5f01ce3..b5b6cf7423 100644
--- a/code/controllers/configuration.dm
+++ b/code/controllers/configuration.dm
@@ -62,6 +62,9 @@
var/automute_on = 0 //enables automuting/spam prevention
var/jobs_have_minimal_access = 0 //determines whether jobs use minimal access or expanded access.
+ var/disable_player_mice = 0
+ var/uneducated_mice = 0 //Set to 1 to prevent newly-spawned mice from understanding human speech
+
var/usealienwhitelist = 0
var/limitalienplayers = 0
var/alien_to_human_ratio = 0.5
@@ -425,6 +428,12 @@
if("ghost_interaction")
config.ghost_interaction = 1
+ if("disable_player_mice")
+ config.disable_player_mice = 1
+
+ if("uneducated_mice")
+ config.uneducated_mice = 1
+
if("comms_password")
config.comms_password = value
diff --git a/code/game/gamemodes/nuclear/nuclear.dm b/code/game/gamemodes/nuclear/nuclear.dm
index 400e9fcb8b..f9a237b083 100644
--- a/code/game/gamemodes/nuclear/nuclear.dm
+++ b/code/game/gamemodes/nuclear/nuclear.dm
@@ -209,9 +209,7 @@
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/under/syndicate(synd_mob), slot_w_uniform)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(synd_mob), slot_shoes)
- synd_mob.equip_to_slot_or_del(new /obj/item/clothing/suit/armor/vest(synd_mob), slot_wear_suit)
synd_mob.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat(synd_mob), slot_gloves)
- synd_mob.equip_to_slot_or_del(new /obj/item/clothing/head/helmet/swat(synd_mob), slot_head)
synd_mob.equip_to_slot_or_del(new /obj/item/weapon/card/id/syndicate(synd_mob), slot_wear_id)
if(synd_mob.backbag == 2) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(synd_mob), slot_back)
if(synd_mob.backbag == 3) synd_mob.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_norm(synd_mob), slot_back)
diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm
index 1303976b13..4f2f659663 100644
--- a/code/game/jobs/job/medical.dm
+++ b/code/game/jobs/job/medical.dm
@@ -15,7 +15,7 @@
minimal_access = list(access_medical, access_morgue, access_genetics, access_heads,
access_chemistry, access_virology, access_cmo, access_surgery, access_RC_announce,
access_keycard_auth, access_sec_doors, access_psychiatrist)
- minimal_player_age = 7
+ minimal_player_age = 10
equip(var/mob/living/carbon/human/H)
if(!H) return 0
diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm
index 4d0488f122..69e9babb0a 100644
--- a/code/game/jobs/job/security.dm
+++ b/code/game/jobs/job/security.dm
@@ -60,7 +60,7 @@
selection_color = "#ffeeee"
access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels, access_morgue)
minimal_access = list(access_security, access_sec_doors, access_brig, access_armory, access_court, access_maint_tunnels)
- minimal_player_age = 7
+ minimal_player_age = 5
equip(var/mob/living/carbon/human/H)
if(!H) return 0
@@ -100,7 +100,7 @@
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_court)
alt_titles = list("Forensic Technician")
- minimal_player_age = 7
+ minimal_player_age = 3
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
@@ -146,7 +146,7 @@
selection_color = "#ffeeee"
access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels, access_morgue)
minimal_access = list(access_security, access_sec_doors, access_brig, access_court, access_maint_tunnels)
- minimal_player_age = 7
+ minimal_player_age = 3
equip(var/mob/living/carbon/human/H)
if(!H) return 0
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_sec(H), slot_l_ear)
diff --git a/code/game/jobs/job/silicon.dm b/code/game/jobs/job/silicon.dm
index f1a0fd2e26..5e067d8556 100644
--- a/code/game/jobs/job/silicon.dm
+++ b/code/game/jobs/job/silicon.dm
@@ -8,7 +8,7 @@
selection_color = "#ccffcc"
supervisors = "your laws"
req_admin_notify = 1
- minimal_player_age = 30
+ minimal_player_age = 7
equip(var/mob/living/carbon/human/H)
if(!H) return 0
@@ -25,7 +25,7 @@
spawn_positions = 2
supervisors = "your laws and the AI" //Nodrak
selection_color = "#ddffdd"
- minimal_player_age = 21
+ minimal_player_age = 1
alt_titles = list("Android", "Robot")
equip(var/mob/living/carbon/human/H)
diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm
index 2598a63244..241c84d3f9 100644
--- a/code/game/turfs/simulated.dm
+++ b/code/game/turfs/simulated.dm
@@ -20,12 +20,16 @@
if (istype(A,/mob/living/carbon))
var/mob/living/carbon/M = A
- if(M.lying) return
+ if(M.lying) return
dirt++
- if (dirt > 40)
- dirt = 0
- if (!locate(/obj/effect/decal/cleanable/dirt, src))
- new/obj/effect/decal/cleanable/dirt(src)
+ var/obj/effect/decal/cleanable/dirt/dirtoverlay = locate(/obj/effect/decal/cleanable/dirt, src)
+ if (dirt >= 30)
+ if (!dirtoverlay)
+ dirtoverlay = new/obj/effect/decal/cleanable/dirt(src)
+ dirtoverlay.alpha = 15
+ else if (dirt > 30)
+ dirtoverlay.alpha = min(dirtoverlay.alpha+20, 255)
+
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/H = M
diff --git a/code/modules/assembly/mousetrap.dm b/code/modules/assembly/mousetrap.dm
index 4d2c8fa53b..5cea63edae 100644
--- a/code/modules/assembly/mousetrap.dm
+++ b/code/modules/assembly/mousetrap.dm
@@ -45,6 +45,7 @@
visible_message("\red SPLAT!")
M.splat()
playsound(target.loc, 'sound/effects/snap.ogg', 50, 1)
+ layer = MOB_LAYER - 0.2
armed = 0
update_icon()
pulse(0)
@@ -112,4 +113,16 @@
/obj/item/device/assembly/mousetrap/armed
icon_state = "mousetraparmed"
- armed = 1
\ No newline at end of file
+ armed = 1
+
+
+/obj/item/device/assembly/mousetrap/verb/hide_under()
+ set src in oview(1)
+ set name = "Hide"
+ set category = "Object"
+
+ if(usr.stat)
+ return
+
+ layer = TURF_LAYER+0.2
+ usr << "You hide [src]."
\ No newline at end of file
diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm
index c410a51c00..90b2cbf0e3 100644
--- a/code/modules/mining/mine_turfs.dm
+++ b/code/modules/mining/mine_turfs.dm
@@ -5,6 +5,7 @@
#define ARTIFACT_SPAWN_CHANCE 20
/datum/controller/game_controller/var/list/artifact_spawning_turfs = list()
+/var/global/list/artifact_spawn = list() // Runtime fix for geometry loading before controller is instantiated.
/turf/simulated/mineral //wall piece
name = "Rock"
@@ -129,7 +130,7 @@
//dont create artifact machinery in animal or plant digsites, or if we already have one
if(!artifact_find && digsite != 1 && digsite != 2 && prob(ARTIFACT_SPAWN_CHANCE))
artifact_find = new()
- master_controller.artifact_spawning_turfs.Add(src)
+ artifact_spawn.Add(src)
if(!src.geological_data)
src.geological_data = new/datum/geosample(src)
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index f8368fdff4..b61c122479 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -453,6 +453,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
set name = "Become mouse"
set category = "Ghost"
+ if(config.disable_player_mice)
+ src << "Spawning as a mouse is currently disabled."
+ return
+
var/timedifference = world.time - client.time_died_as_mouse
if(client.time_died_as_mouse && timedifference <= mouse_respawn_time * 600)
var/timedifference_text
@@ -478,6 +482,8 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
src << "Unable to find any unwelded vents to spawn mice at."
if(host)
+ if(config.uneducated_mice)
+ host.universal_understand = 0
host.ckey = src.ckey
host << "You are now a mouse. Try to avoid interaction with players, and do not give hints away that you are more than a simple rodent."
diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm
index 6c28acc72b..04c36b230a 100644
--- a/code/modules/mob/living/carbon/monkey/life.dm
+++ b/code/modules/mob/living/carbon/monkey/life.dm
@@ -67,8 +67,11 @@
G.process()
if(!client && stat == CONSCIOUS)
- if(prob(33) && canmove && isturf(loc))
+
+ if(prob(33) && canmove && isturf(loc) && !pulledby) //won't move if being pulled
+
step(src, pick(cardinal))
+
if(prob(1))
emote(pick("scratch","jump","roll","tail"))
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 611243f654..176a5a8527 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1161,6 +1161,9 @@
var/turf/tile = loc
if(isturf(tile))
tile.clean_blood()
+ if (istype(tile, /turf/simulated))
+ var/turf/simulated/S = tile
+ S.dirt = 0
for(var/A in tile)
if(istype(A, /obj/effect))
if(istype(A, /obj/effect/rune) || istype(A, /obj/effect/decal/cleanable) || istype(A, /obj/effect/overlay))
diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm
index af36a59162..491841ebad 100644
--- a/code/modules/mob/living/simple_animal/friendly/mouse.dm
+++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm
@@ -27,6 +27,7 @@
minbodytemp = 223 //Below -50 Degrees Celcius
maxbodytemp = 323 //Above 50 Degrees Celcius
universal_speak = 0
+ universal_understand = 1
/mob/living/simple_animal/mouse/Life()
..()
@@ -50,6 +51,7 @@
/mob/living/simple_animal/mouse/New()
..()
+ name = "[name] ([rand(1, 1000)])"
if(!body_color)
body_color = pick( list("brown","gray","white") )
icon_state = "mouse_[body_color]"
@@ -63,6 +65,7 @@
src.stat = DEAD
src.icon_dead = "mouse_[body_color]_splat"
src.icon_state = "mouse_[body_color]_splat"
+ layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
@@ -179,6 +182,7 @@
..()
/mob/living/simple_animal/mouse/Die()
+ layer = MOB_LAYER
if(client)
client.time_died_as_mouse = world.time
..()
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index 85992e55fa..2452db5abc 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -207,6 +207,7 @@
//Whether or not mobs can understand other mobtypes. These stay in /mob so that ghosts can hear everything.
var/universal_speak = 0 // Set to 1 to enable the mob to speak to everyone -- TLE
+ var/universal_understand = 0 // Set to 1 to enable the mob to understand everyone, not necessarily speak
var/robot_talk_understand = 0
var/alien_talk_understand = 0
diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm
index f4a99e097f..040c1615c5 100644
--- a/code/modules/mob/say.dm
+++ b/code/modules/mob/say.dm
@@ -66,7 +66,7 @@
if(!other)
return 1
//Universal speak makes everything understandable, for obvious reasons.
- else if(other.universal_speak || src.universal_speak)
+ else if(other.universal_speak || src.universal_speak || src.universal_understand)
return 1
else if (src.stat == 2)
return 1
@@ -83,11 +83,11 @@
else
return 0
- else if(other.universal_speak || src.universal_speak)
+ else if(other.universal_speak || src.universal_speak || src.universal_understand)
return 1
else if(isAI(src) && ispAI(other))
return 1
- else if (istype(other, src.type) || istype(src, other.type))
+ else if (istype(other, src.type) || istype(src, other.type))
return 1
return 0
diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm
index b6a305cbf7..0b3145cb9a 100644
--- a/code/modules/projectiles/guns/projectile/revolver.dm
+++ b/code/modules/projectiles/guns/projectile/revolver.dm
@@ -54,7 +54,7 @@
caliber = "357"
desc = "The barrel and chamber assembly seems to have been modified."
user << "You reinforce the barrel of [src]! Now it will fire .357 rounds."
- else
+ else if (caliber == "357")
user << "You begin to revert the modifications to [src]."
if(loaded.len)
afterattack(user, user) //and again
diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm
index ab7915dec0..80672b358e 100644
--- a/code/modules/reagents/Chemistry-Reagents.dm
+++ b/code/modules/reagents/Chemistry-Reagents.dm
@@ -906,6 +906,9 @@ datum
for(var/mob/living/carbon/slime/M in T)
M.adjustToxLoss(rand(5,10))
+ reaction_turf(var/turf/simulated/S, var/volume)
+ if(volume >= 1)
+ S.dirt = 0
reaction_mob(var/mob/M, var/method=TOUCH, var/volume)
if(iscarbon(M))
diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm
index bb168446d5..d9b6b7e230 100644
--- a/code/modules/reagents/Chemistry-Recipes.dm
+++ b/code/modules/reagents/Chemistry-Recipes.dm
@@ -477,14 +477,14 @@ datum
potassium_chloride
name = "Potassium Chloride"
id = "potassium_chloride"
- id = "potassium_chloride"
+ result = "potassium_chloride"
required_reagents = list("sodiumchloride" = 1, "potassium" = 1)
result_amount = 2
potassium_chlorophoride
name = "Potassium Chlorophoride"
id = "potassium_chlorophoride"
- id = "potassium_chlorophoride"
+ result = "potassium_chlorophoride"
required_reagents = list("potassium_chloride" = 1, "plasma" = 1, "chloral_hydrate" = 1)
result_amount = 4
diff --git a/code/modules/research/xenoarchaeology/geosample.dm b/code/modules/research/xenoarchaeology/geosample.dm
index 47a5bd3da1..59434a40a4 100644
--- a/code/modules/research/xenoarchaeology/geosample.dm
+++ b/code/modules/research/xenoarchaeology/geosample.dm
@@ -126,14 +126,15 @@
artifact_distance = rand()
artifact_id = container.artifact_find.artifact_id
else
- for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
- if(T.artifact_find)
- var/cur_dist = get_dist(container, T) * 2
- if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
- artifact_distance = cur_dist + rand() * 2 - 1
- artifact_id = T.artifact_find.artifact_id
- else
- master_controller.artifact_spawning_turfs.Remove(T)
+ if(master_controller) //Sanity check due to runtimes ~Z
+ for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
+ if(T.artifact_find)
+ var/cur_dist = get_dist(container, T) * 2
+ if( (artifact_distance < 0 || cur_dist < artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
+ artifact_distance = cur_dist + rand() * 2 - 1
+ artifact_id = T.artifact_find.artifact_id
+ else
+ master_controller.artifact_spawning_turfs.Remove(T)
/*
#undef FIND_PLANT
diff --git a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
index d20a858257..f3b1f9583e 100644
--- a/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
+++ b/code/modules/research/xenoarchaeology/tools/tools_anoscanner.dm
@@ -36,13 +36,14 @@
last_scan_time = world.time
nearest_artifact_distance = -1
var/turf/cur_turf = get_turf(src)
- for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
- if(T.artifact_find)
- if(T.z == cur_turf.z)
- var/cur_dist = get_dist(cur_turf, T) * 2
- if( (nearest_artifact_distance < 0 || cur_dist < nearest_artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
- nearest_artifact_distance = cur_dist + rand() * 2 - 1
- nearest_artifact_id = T.artifact_find.artifact_id
- else
- master_controller.artifact_spawning_turfs.Remove(T)
+ if(master_controller) //Sanity check due to runtimes ~Z
+ for(var/turf/simulated/mineral/T in master_controller.artifact_spawning_turfs)
+ if(T.artifact_find)
+ if(T.z == cur_turf.z)
+ var/cur_dist = get_dist(cur_turf, T) * 2
+ if( (nearest_artifact_distance < 0 || cur_dist < nearest_artifact_distance) && cur_dist <= T.artifact_find.artifact_detect_range )
+ nearest_artifact_distance = cur_dist + rand() * 2 - 1
+ nearest_artifact_id = T.artifact_find.artifact_id
+ else
+ master_controller.artifact_spawning_turfs.Remove(T)
cur_turf.visible_message("[src] clicks.")
diff --git a/code/modules/surgery/headreattach.dm b/code/modules/surgery/headreattach.dm
index a3031e5d0d..617351178e 100644
--- a/code/modules/surgery/headreattach.dm
+++ b/code/modules/surgery/headreattach.dm
@@ -177,7 +177,8 @@
target.updatehealth()
target.UpdateDamageIcon()
var/obj/item/weapon/organ/head/B = tool
- B.brainmob.mind.transfer_to(target)
+ if (B.brainmob.mind)
+ B.brainmob.mind.transfer_to(target)
del(B)
diff --git a/html/changelog.html b/html/changelog.html
index dc1cb5fe67..098a6cb547 100644
--- a/html/changelog.html
+++ b/html/changelog.html
@@ -57,6 +57,15 @@ should be listed in the changelog upon commit though. Thanks. -->
+
+
18 December 2013
+
RavingManiac updated:
+
+ - Mousetraps can now be "hidden" through the right-click menu. This makes them go under tables, clutter and the like. The filthy rodents will never see it coming!
+ - Monkeys will no longer move randomly while being pulled.
+
+
+
24 November 2013
Yinadele updated:
diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi
index 6fc9dfb03a..3559623fd2 100644
Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ
diff --git a/maps/tgstation2.dmm b/maps/tgstation2.dmm
index df435c7767..70027f8bcb 100644
--- a/maps/tgstation2.dmm
+++ b/maps/tgstation2.dmm
@@ -927,7 +927,7 @@
"arQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 8; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"arR" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"arS" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
-"arT" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 1; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
+"arT" = (/turf/simulated/wall/r_wall,/area/crew_quarters/fitness)
"arU" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"arV" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"arW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; icon_state = "manifold-r-f"; level = 1; name = "pipe manifold"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/maintenance/fsmaint)
@@ -964,12 +964,12 @@
"asB" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Dorm Two"})
"asC" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/floor/plating,/area/crew_quarters/sleep)
"asD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep)
-"asE" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin One"})
-"asF" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin One"})
-"asG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin One"})
-"asH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin Two"})
-"asI" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin Two"})
-"asJ" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/fitness)
+"asE" = (/turf/simulated/wall/r_wall,/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"asF" = (/obj/machinery/door/airlock/glass{name = "Cryogenic Storage"},/turf/simulated/floor{dir = 2; icon_state = "warnwhite"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"asG" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/fitness)
+"asH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"asI" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; dir = 1; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall/r_wall,/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"asJ" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/cryopod,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
"asK" = (/obj/machinery/door/airlock/maintenance{req_access_txt = "12"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"asL" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "blue"; icon_state = "manifold-b-f"; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/fitness)
"asM" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/fitness)
@@ -1002,15 +1002,15 @@
"atn" = (/turf/simulated/wall,/area/crew_quarters/sleep{name = "Dorm Two"})
"ato" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/turf/simulated/floor{icon_state = "neutral"; dir = 9},/area/crew_quarters/sleep)
"atp" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 23},/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/sleep)
-"atq" = (/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin One"})
-"atr" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/structure/stool/bed,/obj/effect/decal/cleanable/cobweb,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin One"})
-"ats" = (/obj/machinery/light/small{dir = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin One"})
-"att" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/machinery/alarm{pixel_y = 23},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin One"})
-"atu" = (/turf/simulated/wall,/area/crew_quarters/sleep{name = "Cabin Two"})
-"atv" = (/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin Two"})
-"atw" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/machinery/light/small{dir = 1},/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin Two"})
-"atx" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/effect/decal/cleanable/cobweb2,/obj/structure/stool/bed,/obj/item/weapon/bedsheet/brown,/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin Two"})
-"aty" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall,/area/crew_quarters/fitness)
+"atq" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/obj/structure/cryofeed,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"atr" = (/obj/machinery/computer/cryopod{density = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"ats" = (/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"att" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/wall/r_wall,/area/crew_quarters/fitness)
+"atu" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 1; on = 1},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/obj/structure/cryofeed/right,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"atv" = (/obj/machinery/requests_console{department = "Crew Quarters"; pixel_y = 30},/obj/machinery/camera/xray{c_tag = "Dormitories"},/obj/machinery/cryopod/right,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"atw" = (/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"atx" = (/obj/machinery/cryopod,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"aty" = (/obj/structure/cryofeed,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
"atz" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/disposalpipe/junction{icon_state = "pipe-j2"; dir = 2},/turf/simulated/floor{icon_state = "neutral"; dir = 9},/area/crew_quarters/fitness)
"atA" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/trunk{dir = 8},/obj/machinery/disposal,/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
"atB" = (/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "Station Intercom (General)"; pixel_y = 20},/obj/structure/closet/athletic_mixed,/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/fitness)
@@ -1047,12 +1047,8 @@
"aug" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/carpet{icon_state = "carpetnoconnect"},/area/crew_quarters/sleep{name = "Dorm Two"})
"auh" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
"aui" = (/turf/simulated/floor{icon_state = "neutral"; dir = 4},/area/crew_quarters/sleep)
-"auj" = (/turf/simulated/floor/wood{icon_state = "wood-broken4"},/area/crew_quarters/sleep{name = "Cabin One"})
-"auk" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin One"})
-"aul" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/wood{icon_state = "wood-broken3"},/area/crew_quarters/sleep{name = "Cabin One"})
-"aum" = (/turf/simulated/floor/wood{icon_state = "wood-broken6"},/area/crew_quarters/sleep{name = "Cabin Two"})
-"aun" = (/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin Two"})
-"auo" = (/obj/machinery/light_switch{pixel_y = -25},/turf/simulated/floor/wood{icon_state = "wood-broken"},/area/crew_quarters/sleep{name = "Cabin Two"})
+"auj" = (/obj/machinery/cryopod/right,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
+"auk" = (/obj/structure/cryofeed/right,/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/sleep{name = "\improper Cryogenic Storage"})
"aup" = (/obj/machinery/power/apc{dir = 8; name = "Fitness Room APC"; pixel_x = -24; pixel_y = 0},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness)
"auq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{dir = 2; icon_state = "whitecorner"},/area/crew_quarters/fitness)
"aur" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; icon_state = "off"; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/crew_quarters/fitness)
@@ -1094,8 +1090,6 @@
"avb" = (/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint)
"avc" = (/obj/machinery/atmospherics/pipe/manifold{pipe_color = "red"; dir = 4; icon_state = "manifold-r-f"; initialize_directions = 11; level = 1; name = "pipe manifold"},/turf/simulated/wall,/area/crew_quarters/sleep{name = "Dorm Two"})
"avd" = (/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/sleep)
-"ave" = (/obj/machinery/door/airlock{id_tag = "Dorm5"; name = "Cabin 1"},/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin One"})
-"avf" = (/obj/machinery/door/airlock{id_tag = "Dorm6"; name = "Cabin 2"},/turf/simulated/floor/wood,/area/crew_quarters/sleep{name = "Cabin Two"})
"avg" = (/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness)
"avh" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/crew_quarters/fitness)
"avi" = (/turf/simulated/floor{icon_state = "freezerfloor"},/area/crew_quarters/fitness)
@@ -1132,11 +1126,7 @@
"avN" = (/obj/machinery/door/airlock{id_tag = "Dorm3"; name = "Dorm 3"},/turf/simulated/floor/carpet{icon_state = "carpet8-0"},/area/crew_quarters/sleep{name = "Dorm Two"})
"avO" = (/turf/simulated/floor{icon_state = "neutralcorner"; dir = 4},/area/crew_quarters/sleep)
"avP" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
-"avQ" = (/obj/machinery/requests_console{department = "Crew Quarters"; pixel_y = 30},/obj/machinery/camera/xray{c_tag = "Dormitories"},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
"avR" = (/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
-"avS" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
-"avT" = (/obj/structure/extinguisher_cabinet{pixel_x = -5; pixel_y = 30},/turf/simulated/floor{icon_state = "neutral"; dir = 1},/area/crew_quarters/sleep)
-"avU" = (/turf/simulated/floor{icon_state = "neutral"; dir = 5},/area/crew_quarters/sleep)
"avV" = (/obj/structure/grille,/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/crew_quarters/fitness)
"avW" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor{icon_state = "neutral"; dir = 8},/area/crew_quarters/fitness)
"avX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/crew_quarters/fitness)
@@ -1846,7 +1836,7 @@
"aJz" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp{pixel_y = 10},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple{pipe_color = "blue"; dir = 4; icon_state = "intact-b-f"; level = 1; name = "pipe"},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aJA" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/obj/item/weapon/reagent_containers/food/drinks/bottle/holywater,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
"aJB" = (/obj/structure/table/woodentable,/obj/item/weapon/nullrod,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9; pixel_y = 0},/obj/item/device/eftpos{eftpos_name = "Chapel EFTPOS scanner"},/turf/simulated/floor{icon_state = "grimy"},/area/chapel/office)
-"aJC" = (/obj/structure/closet/coffin,/obj/machinery/door/window/eastleft{dir = 8; name = "Coffin Storage"; req_access_txt = "22"},/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "chapel"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
+"aJC" = (/obj/structure/closet/coffin,/obj/machinery/door/poddoor/shutters{density = 0; icon_state = "shutter0"; id = "chapel"; name = "Privacy Shutters"; opacity = 0},/obj/machinery/door/window/eastleft{dir = 8; name = "Coffin Storage"; req_access_txt = "22"},/turf/simulated/floor{icon_state = "dark"},/area/chapel/office)
"aJD" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/chapel/main)
"aJE" = (/obj/structure/table,/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/chapel/main)
"aJF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/machinery/door/firedoor/border_only{dir = 2},/turf/simulated/floor/plating,/area/chapel/main)
@@ -10597,14 +10587,14 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaafaoWaaaaaaaaaaafaaaaaaaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxaqcaqdapxapxaqeapEaqfapEapEapEapEapEapEapEapEapEapEapEaqgapEaqhapEaqiapEapEapEaleaqjaqkaqlaqmapOaqnapSaqoaqpaqqaqraqsaqtaquaqvaqwalNalNalNajhalOalOalOalOalOaaaaaaaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxaqxaqyaqzaqAaqBaqCaqDaqEaqEaqEaqEaqEaqEaqEaqFaqGaqHaqGaqIaqJaqKaqLaqMaqNaqLaqOaleapiapiapiapiapiapiaqPaqQaqRaqSaqTaqUaqVajhalNaqWaqXalNaaaaaaaaaalOalOalOaaaaaaaaaaaaaaaaaaaaaalPaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaqYaqZaqYaaaaaaaaaaaaaaaaaaaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaapxapaaraapxarbarbarcardarbarbarbarearearearfargarearearhariarjarkalNarlalNarmalNalNarnajhajhajhajhajharoaqQarparqarqarqarrarsartaruarvalNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalPaafapvapvapvapvapvaafaoPaafapvapvapvapvapvaafalPaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryapbapxarEatVatXatWatZatYarbarFarGarHarIarJarKarLarMapEarNarOarParQarRarRarRarRarRarSarRarRarRarTarUarVarWarXarYarZasaasbascasdasealNaafasfasgasgashasgasgasiaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaskaslaaaasmasnasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxapbapxarEarAatXatWassasrarbastarIarIarIarJasuasvaswasxasyalNaszasAasBasBasBasBasCasDasEasFasEasGasHasHasIasHasJasKasLasMasNasOasPasPasPasQasRasRasRasRasRasQasPaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspasXasYaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxapbapxauParAatXatWauOauNarbatearIatfatfarJatgasvapAapEathalNatiatjatkatlatmatnatoatpatqatratsattatuatvatwatxatyatzatAatBatCatDatEatFasPatGasRasRasRasRasRasQasPaafaaaaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMatNatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxatQatRatSatTatUbBqavDavCavBauQarzarbauaaubaucaucaudaueasvapAapEarNalNatiatjaufaugatmatnauhauiatqaujaukaulatuaumaunauoasPaupauqaurausautauuauvauwauxasRasRasRasRasRauyasPasPasPaaaaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJauKatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxauMapxarBarAarDarCasqarEarbauRauSauTauTauUauVauWauXauYauZavaavbavcaufatlatmatnavdauiatqatqaveatqatuatuavfatuasPavgavhaviaviavjavkavlavmavnasRasRasRasRasRavoavpavqavraaaaaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHavvavwavxavxavxavxavyavzarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxauMapxatcatbatbatbatbatdatbavEavFavFavFavFavGavHavIapEavJalNavKasAavLatlavMavNavdavOavPavQavRavRavSavTavRavUavVavWavXavYavYavYavYavZawaawbasRasRasRasRasRawbawcawdaweaaaaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKawhatKatKatKatKatKawiaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsawtawuawvawwawwawwawwawwawxawwawyawzawAawAawBawBawCawDawEawFaqvawGawHawIawJawKatnavdawLawLawLawMawMawNawOawLawLawPawQawRavYavYavYavYawSawTawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
-aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYawYawYawZaxaawYawYaxbaxcaxdaxbaxbaxbaxeatKaxfaspaaaaafaafaaaaaaaaaaaaaafaaaaxgaxhaxiaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaxpaxqaxraxraxraxraxsaxtaxraxuaxvaxsaxraxraxraxraxwaxxaxyaxzaxAavcatnatnatnatnauhaxBawLawOawMaxCawMaxDaxEaxFaxGaxHaxIavYavYavYavYawSaxJaxKasRasRasRasRasRaxLaxMaxNaxOaaaaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafarwarxarwaaaaaaaaaaaaaaaaaaaaaalPaafapwapwapwapwapwaafaoWaafapwapwapwapwapwaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagapxaryapbapxarEatVatXatWatZatYarbarFarGarHarIarJarKarLarMapEarNarOarParQarRarRarRarRarRarSarRarRarRarRarUarVarWarXarYarZasaasbascasdasealNaafasfasgasgashasgasgasiaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoPaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasjaskaslaaaasmasnasoaaaaafaspaqYaspaaaaaaaaaaaaaaaaaaaaaalQaaaaaaaaaaafaaaaaaaaaaoWaaaaaaaaaaafaaaaaaaaaalQaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafapxapxapxapxapbapxarEarAatXatWassasrarbastarIarIarIarJasuasvaswasxasyalNaszasAasBasBasBasBasCasDasHasIasHasHasHasHasIasHasGasKasLasMasNasOasPasPasPasQasRasRasRasRasRasQasPaaaaaaaaaaaaalPaafaojaojaojaojaojaafaoPaafaojaojaojaojaojaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaajiajiajiajiajiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaasSasTasUasTasSasVasWasVasSaafaspasXasYaaaaaaaaaaaaaaaaaaaaaalPaafaolaolaolaolaolaafaoWaafaolaolaolaolaolaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafapxasZataapxapbapxauParAatXatWauOauNarbatearIatfatfarJatgasvapAapEathalNatiatjatkatlatmatnatoatpasEatuatvatwatratsasJatqattatzatAatBatCatDatEatFasPatGasRasRasRasRasRasQasPaafaaaaaaaaaalQaafaoMaoNaoNaoNaoNaoOaoPaoQaoRaoRaoRaoRaoSaafalPaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHasTatIasTatHasVatJasVatHatKatLatMatNatOatOatPatKatKaafaaaalPaafaoTaoUaoUaoUaoUaoVaoWaoXaoYaoYaoYaoYaoZaafalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafapxatQatRatSatTatUbBqavDavCavBauQarzarbauaaubaucaucaudaueasvapAapEarNalNatiatjaufaugatmatnauhauiasEaukaujatsatsatsatxatyarTaupauqaurausautauuauvauwauxasRasRasRasRasRauyasPasPasPaaaaaaalQaaaapvapvapvapvapvaafaoPaafapvapvapvapvapvaaaampaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHauzauAauBatHauCauDauEatHaqYaqYauFauGauHauIauJauKatKaaaaaaampaaaapwapwapwapwapwaafaoWaafapwapwapwapwapwaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaagapxauLapaapxauMapxarBarAarDarCasqarEarbauRauSauTauTauUauVauWauXauYauZavaavbavcaufatlatmatnavdauiasEasEasEasFasFasFasEasEarTavgavhaviaviavjavkavlavmavnasRasRasRasRasRavoavpavqavraaaaaaalQaaaaafaaaaafaafaaaaaaaoPaaaaaaaafaaaaaaaafaaaalPaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaatHavsavtavuatHavsavtavuatHavvavwavxavxavxavxavyavzarwaaaaaaalPaaaaafaaaaafaafaaaaaaavAaaaaaaaafaaaaaaaafaaaalPaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaagapxapxapxapxauMapxatcatbatbatbatbatdatbavEavFavFavFavFavGavHavIapEavJalNavKasAavLatlavMavNavdavOavRavPavRavRavRavRavRauiavVavWavXavYavYavYavYavZawaawbasRasRasRasRasRawbawcawdaweaaaaaaalQalQalPaaaaaaaafaaaaaaaoPaaaaafaafaafaafalPalPalPaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaasSatHawfawgasSatHawfawgasSatKawhatKatKatKatKatKawiaspaaaaaaalPalPalPaaaaaaaafaaaawjawkawjaafaafaafaafalPalPalPaafapxapxapxapxawlawmawmawmawmawmawmawmawnapxapxawoawpawqapxawrawsawtawuawvawwawwawwawwawwawxawwawyawzawAawAawBawBawCawDawEawFaqvawGawHawIawJawKatnavdawLawLawLawMawMawNawOawLauiawPawQawRavYavYavYavYawSawTawUasRasRasRasRasRawUawVawdaweaaaaaaaaaaaaaafaafaaaaafaaaaaaawWaaaaaaaafaaaaaaaafaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawXawYawYawYawZaxaawYawYaxbaxcaxdaxbaxbaxbaxeatKaxfaspaaaaafaafaaaaaaaaaaaaaafaaaaxgaxhaxiaafaaaaafaaaaaaaaaaaaaaaapxapaapaaxjapaapaapaapaapaapaapaapaaxkaxlaxmaxnaxnaxnaxnaxnaxnaxoaxpaxqaxraxraxraxraxsaxtaxraxuaxvaxsaxraxraxraxraxwaxxaxyaxzaxAavcatnatnatnatnauhaxBawLawOawMaxCawMaxDaxEauiaxGaxHaxIavYavYavYavYawSaxJaxKasRasRasRasRasRaxLaxMaxNaxOaaaaaaaaaaaaaaaaafaaaaafaaaaxPaxQaxPaaaaafaaaaaaaafaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxRaxSaxTaxUaxVaxTaxTaxWaxUaxTaxXaxYaxZaxZayaatKaxfatLaafaafaaaaaaaaaaaaaaaaafaybaycaydayeayfaaaaafaaaaaaaaaaaaaaaapxapaapxaygayhayiayiayiayiayiayiayiayjaygaykaylaylaylaylaylaylaylaymaynaxrayoaypayqayraysaytayuayvaywayxaypayyaxrayzapEayAalNayBatjatkatlatmatnavdayCayDaxFaxFayEayFayGayHayIavVayJayKayLayMayMayNayOayPayQasRasRasRasRasRayRasPasPasPaaaaaaaaaaaaaafaafaafaafaaaaySayTaySaaaaafaaaaaaaafaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafatHayUayVayUayWaxTaxTayXayUayVayUayYaxSaxVayZatKaxfatKatKazaatOatOatOatOatPatKazbazcazdazeazbapxapxawoawpawqapxapxapxapaaryaygaaaaafaaaaafaaaaafaaaaafaaaaygaykaylazfazgazhaziazjaylaymapaaxrazkazkazlazmaznazoazpazqazrazsaztaztaxrayzapEazualNayBatjaufatlatmatnauhazvazwazxazyazzazAazBazBazCazBasPazDazEazFazGazHazIasPazJasRasRasRasRasRazKasPaafaaaaaaaaaaaaaaaaafaafaaaaafazLazMazNazOazPaafaaaaaaaafaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafazQasSazRavtazSazTazUazVazWazSavtazXazYasSazZaAaatKaAbaAcaAcaAcaAcaAcaAcavzaAdaAeazbaAfaAgaAhazbaAiapaapaapaapaapaapaapaapaaAjaygaafaAkaAkaAkaAkaAkaAkaAkaafaygaykaylaAlaAmaAnaAoaAlaylaymaApaxraxraxraxraAqaAraypaAsaAraAtaxraxraxraxrayzapEaAualNayBatjaufatlatmatnavdaAvazBazBazBazBazBazBaAwaAxaAyazBasPasPasPasPaAzasPasPazKasRasRasRasRasRazKasPaaaaaaaaaaaaaaeaaaaaaaaaaaaaafaAAaABaACaADaAAaafaaaaaaaafaaaaaaaaaaaaaaaaaaaafaafaaaaaaaaaaaaaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa