diff --git a/__DEFINES/role_datums_defines.dm b/__DEFINES/role_datums_defines.dm
index 99029430f05..f1c669a9de3 100644
--- a/__DEFINES/role_datums_defines.dm
+++ b/__DEFINES/role_datums_defines.dm
@@ -63,6 +63,7 @@
#define GREET_CONVERTED "converted"
#define GREET_PAMPHLET "pamphlet"
#define GREET_SOULSTONE "soulstone"
+#define GREET_SOULBLADE "soulblade"
#define GREET_RESURRECT "resurrect"
@@ -131,6 +132,8 @@
#define MAX_TALISMAN_PER_TOME 5
+#define SACRIFICE_CHANGE_COOLDOWN 30 MINUTES
+
////////////////////////////////////////////////////////////////////////////////
// -- Objectives flags
diff --git a/__DEFINES/setup.dm b/__DEFINES/setup.dm
index d5687af521f..81c744927b6 100644
--- a/__DEFINES/setup.dm
+++ b/__DEFINES/setup.dm
@@ -1491,6 +1491,7 @@ var/proccalls = 1
#define HOLOMAP_FILTER_VOX 16
#define HOLOMAP_FILTER_STATIONMAP 32
#define HOLOMAP_FILTER_STATIONMAP_STRATEGIC 64//features markers over the captain's office, the armory, the SMES
+#define HOLOMAP_FILTER_CULT 128//bloodstone locators
#define HOLOMAP_AREACOLOR_COMMAND "#447FC299"
#define HOLOMAP_AREACOLOR_SECURITY "#AE121299"
@@ -1509,11 +1510,16 @@ var/proccalls = 1
#define HOLOMAP_EXTRA_STATIONMAPSMALL_SOUTH "stationmapsmallsouth"
#define HOLOMAP_EXTRA_STATIONMAPSMALL_EAST "stationmapsmalleast"
#define HOLOMAP_EXTRA_STATIONMAPSMALL_WEST "stationmapsmallwest"
+#define HOLOMAP_EXTRA_CULTMAP "cultmap"
#define HOLOMAP_MARKER_SMES "smes"
#define HOLOMAP_MARKER_DISK "diskspawn"
#define HOLOMAP_MARKER_SKIPJACK "skipjack"
#define HOLOMAP_MARKER_SYNDISHUTTLE "syndishuttle"
+#define HOLOMAP_MARKER_BLOODSTONE "bloodstone"
+#define HOLOMAP_MARKER_BLOODSTONE_BROKEN "bloodstone-broken"
+#define HOLOMAP_MARKER_BLOODSTONE_ANCHOR "bloodstone-narsie"
+
#define DEFAULT_BLOOD "#A10808"
diff --git a/code/datums/alt_control.dm b/code/datums/alt_control.dm
index 92953b1dec7..2246646ce6b 100644
--- a/code/datums/alt_control.dm
+++ b/code/datums/alt_control.dm
@@ -96,6 +96,9 @@
blade.forceMove(A.loc)
A.blade = null
playsound(A.loc, 'sound/weapons/blade1.ogg', 50, 1)
+ if (A.is_locking(A.lock_type))
+ var/mob/M = A.get_locked(A.lock_type)[1]
+ A.unlock_atom(M)
A.update_icon()
else
return 0
diff --git a/code/datums/gamemode/dynamic/dynamic_rulesets_roundstart.dm b/code/datums/gamemode/dynamic/dynamic_rulesets_roundstart.dm
index 6aa4a7f989a..7c0e7d9f48f 100644
--- a/code/datums/gamemode/dynamic/dynamic_rulesets_roundstart.dm
+++ b/code/datums/gamemode/dynamic/dynamic_rulesets_roundstart.dm
@@ -142,10 +142,51 @@
//////////////////////////////////////////////
// //
-// CULT (LEGACY) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// BLOOD CULT ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //
//////////////////////////////////////////////
+/datum/dynamic_ruleset/roundstart/bloodcult
+ name = "Blood Cult"
+ role_category = ROLE_CULTIST
+ protected_from_jobs = list("Merchant")
+ restricted_from_jobs = list("AI", "Cyborg", "Mobile MMI", "Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Chaplain", "Head of Personnel", "Internal Affairs Agent", "Chaplain")
+ enemy_jobs = list("AI", "Cyborg", "Security Officer","Detective","Head of Security", "Captain", "Chaplain")
+ required_enemies = list(2,2,1,1,1,1,1,0,0,0)
+ required_candidates = 4
+ weight = 4
+ cost = 25
+ requirements = list(90,80,60,30,20,10,10,10,10,10)
+ var/cultist_cap = list(2,2,3,4,4,4,4,4,4,4)
+
+/datum/dynamic_ruleset/roundstart/bloodcult/execute()
+ //if ready() did its job, candidates should have 4 or more members in it
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (!cult)
+ cult = ticker.mode.CreateFaction(/datum/faction/bloodcult, null, 1)
+
+ var/indice_pop = min(10,round(mode.roundstart_pop_ready/5)+1)
+ var/cultists = cultist_cap[indice_pop]
+
+ for(var/cultists_number = 1 to cultists)
+ if(candidates.len <= 0)
+ break
+ var/mob/M = pick(candidates)
+ assigned += M
+ candidates -= M
+ var/datum/role/cultist/newCultist = new
+ newCultist.AssignToRole(M.mind,1)
+ cult.HandleRecruitedRole(newCultist)
+ newCultist.Greet(GREET_ROUNDSTART)
+ return 1
+
+
+//////////////////////////////////////////////
+// //
+// CULT (LEGACY) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
+// //
+//////////////////////////////////////////////
+/*
/datum/dynamic_ruleset/roundstart/cult_legacy
name = "Cult (Legacy)"
role_category = ROLE_LEGACY_CULTIST
@@ -176,7 +217,7 @@
legacy.HandleRecruitedRole(newCultist)
newCultist.Greet(GREET_ROUNDSTART)
return 1
-
+*/
//////////////////////////////////////////////
// //
@@ -197,7 +238,7 @@
var/operative_cap = list(2,2,3,3,4,5,5,5,5,5)
/datum/dynamic_ruleset/roundstart/nuclear/execute()
- //if ready() did its job, candidates should have 4 or more members in it
+ //if ready() did its job, candidates should have 5 or more members in it
var/datum/faction/syndicate/nuke_op/nuclear = find_active_faction_by_type(/datum/faction/syndicate/nuke_op)
if (!nuclear)
nuclear = ticker.mode.CreateFaction(/datum/faction/syndicate/nuke_op, null, 1)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult.dm b/code/datums/gamemode/factions/bloodcult/bloodcult.dm
index 47dfbea407f..fcf14c3ec89 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult.dm
@@ -1,7 +1,7 @@
//CULT 3.0 BY DEITY LINK (2018)
//BASED ON THE ORIGINAL GAME MODE BY URIST MCDORF
-var/veil_thickness = CULT_EPILOGUE//REMEMBER TO SET IT BACK TO CULT_PROLOGUE WHEN DONE TESTING
+var/veil_thickness = CULT_PROLOGUE
/client/proc/set_veil_thickness()
set category = "Special Verbs"
@@ -13,6 +13,9 @@ var/veil_thickness = CULT_EPILOGUE//REMEMBER TO SET IT BACK TO CULT_PROLOGUE WHE
veil_thickness = input(usr, "Enter a value (default = [CULT_PROLOGUE])", "Debug Veil Thickness", veil_thickness) as num
+ if (veil_thickness == CULT_ACT_III)
+ spawn_bloodstones()
+
var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
if (cult)
for (var/datum/role/cultist/C in cult.members)
@@ -21,6 +24,54 @@ var/veil_thickness = CULT_EPILOGUE//REMEMBER TO SET IT BACK TO CULT_PROLOGUE WHE
for (var/obj/structure/cult/spire/S in cult_spires)
S.upgrade()
+/proc/spawn_bloodstones(var/turf/source = null)
+ //Called at the beginning of ACT III, this is basically the cult's declaration of war on the crew
+ //Spawns 4 structures, one in each quarters of the station
+ //When spawning, those structures break and convert stuff around them, and add a wall layer in case of space exposure.
+ var/list/places_to_spawn = list()
+ for (var/i = 1 to 4)
+ for (var/j = 10; j > 0; j--)
+ var/turf/T = get_turf(pick(range(j*3,locate(map.center_x+j*4*(((round(i/2) % 2) == 0) ? -1 : 1 ),map.center_y+j*4*(((i % 2) == 0) ? -1 : 1 ),map.zMainStation))))
+ if(!is_type_in_list(T,list(/turf/space,/turf/unsimulated,/turf/simulated/shuttle)))
+ places_to_spawn += T
+ break
+ //A 5th bloodstone will spawn if a proper turf was given as arg (up to 100 tiles from the station center, and not in space
+ if (source && !isspace(source.loc) && get_dist(locate(map.center_x,map.center_y,map.zMainStation),source)<100)
+ places_to_spawn.Add(source)
+ for (var/T in places_to_spawn)
+ new /obj/structure/cult/bloodstone(T)
+
+ //Cultists can use those bloodstones to locate the rest of them, they work just like station holomaps
+ var/i = 1
+ for(var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ var/datum/holomap_marker/newMarker = new()
+ newMarker.id = HOLOMAP_MARKER_BLOODSTONE
+ newMarker.filter = HOLOMAP_FILTER_CULT
+ newMarker.x = B.x
+ newMarker.y = B.y
+ newMarker.z = B.z
+ holomap_markers[HOLOMAP_MARKER_BLOODSTONE+"_[i]"] = newMarker
+ i++
+
+ var/icon/canvas = icon('icons/480x480.dmi', "cultmap")
+ var/icon/map_base = icon(holoMiniMaps[map.zMainStation])
+ map_base.Blend("#E30000",ICON_MULTIPLY)
+ canvas.Blend(map_base,ICON_OVERLAY)
+ for(var/marker in holomap_markers)
+ var/datum/holomap_marker/holomarker = holomap_markers[marker]
+ if(holomarker.z == map.zMainStation && holomarker.filter & HOLOMAP_FILTER_CULT)
+ if(map.holomap_offset_x.len >= map.zMainStation)
+ canvas.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8+map.holomap_offset_x[map.zMainStation] , holomarker.y-8+map.holomap_offset_y[map.zMainStation])
+ else
+ canvas.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8, holomarker.y-8)
+
+ extraMiniMaps |= HOLOMAP_EXTRA_CULTMAP
+ extraMiniMaps[HOLOMAP_EXTRA_CULTMAP] = canvas
+
+ for(var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.holomap_datum = new /datum/station_holomap/cult()
+ B.holomap_datum.initialize_holomap(B.loc)
+
//CULT_PROLOGUE Default thickness, only communication and raise structure runes enabled
//CULT_ACT_I Altar raised. cultists can now convert.
//CULT_ACT_II Cultist amount reached. cultists are now looking for the sacrifice
@@ -39,8 +90,19 @@ var/veil_thickness = CULT_EPILOGUE//REMEMBER TO SET IT BACK TO CULT_PROLOGUE WHE
Nar-Sie's goal is to tear open a breach through reality so he can pull the station into his realm and feast on the crew's blood and souls."
roletype = /datum/role/cultist
logo_state = "cult-logo"
- var/list/bloody_floors = list()//to replace later on
hud_icons = list("cult-logo")
+ var/list/bloody_floors = list()
+ var/target_change = FALSE
+ var/change_cooldown = 0
+ var/cult_win = FALSE
+
+/datum/faction/bloodcult/check_win()
+ return cult_win
+
+/datum/faction/bloodcult/proc/fail()
+ if (cult_win || veil_thickness == CULT_MENDED)
+ return
+ progress(CULT_MENDED)
/datum/faction/bloodcult/AdminPanelEntry(var/datum/admins/A)
var/list/dat = ..()
@@ -53,15 +115,132 @@ var/veil_thickness = CULT_EPILOGUE//REMEMBER TO SET IT BACK TO CULT_PROLOGUE WHE
/datum/faction/bloodcult/OnPostSetup()
initialize_cultwords()
+ AppendObjective(/datum/objective/bloodcult_reunion)
-//to recode later on
-/datum/faction/bloodcult/proc/is_sacrifice_target(var/datum/mind/M)
-/*
- for(var/datum/objective/target/sacrifice/S in GetObjectives())
- if(S.target == M)
- return TRUE
- */
- return FALSE
+/datum/faction/bloodcult/process()
+ ..()
+ if (change_cooldown)
+ change_cooldown--
+ if (change_cooldown <= 0)
+ var/datum/objective/bloodcult_sacrifice/O = locate() in objective_holder.objectives
+ if (!O.IsFulfilled())
+ O.failed_targets += O.sacrifice_target
+ spawn()
+ if (O.replace_target())
+ for(var/datum/role/cultist/C in members)
+ var/mob/M = C.antag.current
+ if (M)
+ to_chat(M,"The sacrifice wasn't performed in time. A new target has been assigned. [O.explanation_text]")
+ if (M == O.sacrifice_target)
+ to_chat(M,"There is no greater honor than purposefuly relinquishing your body for the coming of Nar-Sie, but you may wait for another target to be selected should you be afraid of death.")
+ else if (iscultist(O.sacrifice_target))
+ to_chat(M,"Chance has rolled its dice, and one of ours was selected. If for whatever reasons you do not want to take their life, you will have to wait for a new selection.")
+ if (target_change)
+ change_cooldown = SACRIFICE_CHANGE_COOLDOWN
+
+/datum/faction/bloodcult/proc/progress(var/new_act,var/A)
+ //This proc is called to update the faction's current objectives, and veil thickness
+ if (veil_thickness == CULT_MENDED)
+ return//it's over, you lost
+
+ if (new_act == CULT_MENDED)
+ veil_thickness = CULT_MENDED
+ emergency_shuttle.shutdown = 0//The shuttle can be called once again.
+ ticker.StopThematic()
+ for (var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.takeDamage(1500)
+ for (var/datum/role/cultist/C in members)
+ //TODO: blood curse
+ C.update_cult_hud()
+ return
+
+ if (new_act <= veil_thickness)
+ return
+
+ var/datum/objective/new_obj = null
+
+ switch(new_act)
+ if (CULT_ACT_I)
+ var/datum/objective/bloodcult_reunion/O = locate() in objective_holder.objectives
+ if (O)
+ O.altar_built = TRUE
+ veil_thickness = CULT_ACT_I
+ new_obj = new /datum/objective/bloodcult_followers
+ if (CULT_ACT_II)
+ var/datum/objective/bloodcult_followers/O = locate() in objective_holder.objectives
+ if (O)
+ O.conversions++
+ if (O.conversions >= O.convert_target)
+ veil_thickness = CULT_ACT_II
+ new_obj = new /datum/objective/bloodcult_sacrifice
+ if (CULT_ACT_III)
+ var/datum/objective/bloodcult_sacrifice/O = locate() in objective_holder.objectives
+ if (O)
+ O.target_sacrificed = TRUE
+ veil_thickness = CULT_ACT_III
+ emergency_shuttle.force_shutdown()//No shuttle calls until the cult either wins or fails.
+ ticker.StartThematic("endgame")
+ spawn_bloodstones(A)
+ new_obj = new /datum/objective/bloodcult_bloodbath
+ if (CULT_ACT_IV)
+ var/datum/objective/bloodcult_bloodbath/O = locate() in objective_holder.objectives
+ if (O)
+ veil_thickness = CULT_ACT_IV
+ new_obj = new /datum/objective/bloodcult_tearinreality
+ if (CULT_EPILOGUE)
+ var/datum/objective/bloodcult_tearinreality/O = locate() in objective_holder.objectives
+ if (O)
+ O.NARSIE_HAS_RISEN = TRUE
+ veil_thickness = CULT_EPILOGUE
+ new_obj = new /datum/objective/bloodcult_feast
+
+ if (new_obj)
+ AppendObjective(new_obj)
+ for(var/datum/role/cultist/C in members)
+ var/mob/M = C.antag.current
+ if (M)
+ to_chat(M,"[new_obj.name]: [new_obj.explanation_text]")
+ if (istype(new_obj,/datum/objective/bloodcult_sacrifice))
+ var/datum/objective/bloodcult_sacrifice/O = new_obj
+ if (M == O.sacrifice_target)
+ to_chat(M,"There is no greater honor than purposefuly relinquishing your body for the coming of Nar-Sie, but you may wait for another target to be selected should you be afraid of death.")
+ else if (iscultist(O.sacrifice_target))
+ to_chat(M,"Chance has rolled its dice, and one of ours was selected. If for whatever reasons you do not want to take their life, you will have to wait for a new selection.")
+
+ for (var/datum/role/cultist/C in members)
+ C.update_cult_hud()
+
+ for (var/obj/structure/cult/spire/S in cult_spires)
+ S.upgrade()
+
+ if (istype(new_obj,/datum/objective/bloodcult_bloodbath))
+ var/datum/objective/bloodcult_bloodbath/O = new_obj
+ O.max_bloodspill = max(O.max_bloodspill,bloody_floors.len)
+ if (O.IsFulfilled())
+ progress(CULT_ACT_IV)
+
+/datum/faction/bloodcult/proc/add_bloody_floor(var/turf/T)
+ if (!istype(T))
+ return
+ if(T && (T.z == map.zMainStation))//F I V E T I L E S
+ if(!(locate("\ref[T]") in bloody_floors))
+ bloody_floors += T
+ bloody_floors[T] = T
+ for (var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.update_icon()
+ var/datum/objective/bloodcult_bloodbath/O = locate() in objective_holder.objectives
+ if (O && !O.IsFulfilled())
+ O.max_bloodspill = max(O.max_bloodspill,bloody_floors.len)
+ if (O.IsFulfilled())
+ progress(CULT_ACT_IV)
+
+
+/datum/faction/bloodcult/proc/remove_bloody_floor(var/turf/T)
+ if (!istype(T))
+ return
+ for (var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.update_icon()
+ bloody_floors -= T
/proc/is_convertable_to_cult(datum/mind/mind)
if(!istype(mind))
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_buildings.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_buildings.dm
index f44b1c5eb45..67346385b6c 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_buildings.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_buildings.dm
@@ -1,6 +1,4 @@
-/datum/cult_ritual//placeholder, this will serve with cult building rituals, and stuff like the new Nar-Sie summoning
-
/obj/structure/cult
density = 1
anchored = 1
@@ -10,6 +8,11 @@
var/sound_damaged = null
var/sound_destroyed = null
var/conceal_cooldown = 0
+ var/timeleft = 0
+ var/timetotal = 0
+ var/list/contributors = list()//list of cultists currently participating in the ritual
+ var/image/progbar = null//progress bar
+ var/cancelling = 3//check to abort the ritual if interrupted
/obj/structure/cult/proc/conceal()
var/obj/structure/cult/concealed/C = new(loc)
@@ -141,7 +144,9 @@
// CULT ALTAR //Allows communication with Nar-Sie for advice and info on the Cult's current objective.
// //ACT II : Allows Soulstone crafting, Used to sacrifice the target on the Station
///////////////////////////ACT III : Can plant an empty Soul Blade in it to prompt observers to become the blade's shade
-
+#define ALTARTASK_NONE 0
+#define ALTARTASK_GEM 1
+#define ALTARTASK_SACRIFICE 2
/obj/structure/cult/altar
name = "altar"
@@ -153,6 +158,9 @@
sound_destroyed = 'sound/effects/stone_crumble.ogg'
layer = TABLE_LAYER
var/obj/item/weapon/melee/soulblade/blade = null
+ var/lock_type = /datum/locking_category/buckle/bed
+ var/altar_task = ALTARTASK_NONE
+ var/gem_delay = 300
/obj/structure/cult/altar/New()
@@ -176,7 +184,9 @@
..()
/obj/structure/cult/altar/attackby(var/obj/item/I, var/mob/user)
- if(istype(I,/obj/item/weapon/melee/soulblade))
+ if (altar_task)
+ return ..()
+ if(istype(I,/obj/item/weapon/melee/soulblade) || (istype(I,/obj/item/weapon/melee/cultblade) && !istype(I,/obj/item/weapon/melee/cultblade/nocult)))
if (blade)
to_chat(user,"You must remove the blade planted on \the [src] first.")
return 1
@@ -186,19 +196,58 @@
I.forceMove(src)
blade = I
update_icon()
- to_chat(user, "You plant \the [blade] on top of \the [src]")
+ var/mob/living/carbon/human/C = locate() in loc
+ if (C && C.resting)
+ C.unlock_from()
+ C.update_canmove()
+ lock_atom(C, lock_type)
+ C.apply_damage(blade.force, BRUTE, LIMB_CHEST)
+ if (C == user)
+ user.visible_message("\The [user] holds \the [I] above their stomach and impale themselves on \the [src]! That's fucking brutal!","You hold \the [I] above your stomach and impale yourself on \the [src]! That's fucking brutal!")
+ else
+ user.visible_message("\The [user] holds \the [I] above \the [C]'s stomach and impale them on \the [src]!","You hold \the [I] above \the [C]'s stomach and impale them on \the [src]!")
+ else
+ to_chat(user, "You plant \the [blade] on top of \the [src]")
+ if (istype(blade))
+ var/icon/logo_icon = icon('icons/logos.dmi', "shade-blade")
+ for(var/mob/M in observers)
+ if(!M.client || jobban_isbanned(M, ROLE_CULTIST) || M.client.is_afk())
+ continue
+ to_chat(M, "[bicon(logo_icon)]\The [user] has planted a Soul Blade on an altar, opening a small crack in the veil that allows you to become the blade's resident shade. (Possess now!)[bicon(logo_icon)]")
return 1
+ if (istype(I, /obj/item/weapon/grab))
+ if (blade)
+ to_chat(user,"You must remove the blade planted on \the [src] first.")
+ return 1
+ var/obj/item/weapon/grab/G = I
+ if(iscarbon(G.affecting))
+ var/mob/living/carbon/C = G.affecting
+ C.unlock_from()
+ if (!do_after(user,C,15))
+ return
+ if (ishuman(C))
+ C.resting = 1
+ C.update_canmove()
+ C.forceMove(loc)
+ returnToPool(G)
+ to_chat(user, "You move \the [C] on top of \the [src]")
+ return 1
..()
/obj/structure/cult/altar/update_icon()
- if (blade)
- if (blade.shade)
- icon_state = "altar-soulblade-full"
- else
- icon_state = "altar-soulblade"
- else
- icon_state = "altar"
+ icon_state = "altar"
overlays.len = 0
+ if (blade)
+ var/image/I
+ if (!istype(blade))
+ I = image(icon, "altar-cultblade")
+ else if (blade.shade)
+ I = image(icon, "altar-soulblade-full")
+ else
+ I = image(icon, "altar-soulblade")
+ I.plane = ABOVE_HUMAN_PLANE
+ I.pixel_y = 3
+ overlays.Add(I)
var/image/I = image(icon, "altar_overlay")
I.plane = ABOVE_HUMAN_PLANE
overlays.Add(I)
@@ -232,6 +281,8 @@
return 0
/obj/structure/cult/altar/MouseDropTo(var/atom/movable/O, var/mob/user)
+ if (altar_task)
+ return
if (!O.anchored && (istype(O, /obj/item) || user.get_active_hand() == O))
if(!user.drop_item(O))
return
@@ -251,8 +302,13 @@
var/mob/living/L = O
if(!istype(L) || L.locked_to || L == user)
return
-
+ if (blade)
+ to_chat(user,"You must remove the blade planted on \the [src] first.")
+ return 1
var/mob/living/carbon/C = O
+
+ if (!do_after(user,C,15))
+ return
C.unlock_from()
if (ishuman(C))
@@ -265,6 +321,8 @@
to_chat(user, "You move \the [O] on top of \the [src]")
/obj/structure/cult/altar/conceal()
+ if (blade || altar_task)
+ return
anim(location = loc,target = loc,a_icon = icon, flick_anim = "[icon_state]-conceal")
for (var/mob/living/carbon/C in loc)
Uncrossed(C)
@@ -280,7 +338,81 @@
.=..()
if (!.)
return
- if (blade)
+ if (altar_task)
+ if (altar_task == ALTARTASK_SACRIFICE)
+ if (user in contributors)
+ return
+ if (!user.checkTattoo(TATTOO_SILENT))
+ if (prob(5))
+ user.say("Let me show you the dance of my people!","C")
+ else
+ user.say("Barhah hra zar'garis!","C")
+ contributors.Add(user)
+ if (user.client)
+ user.client.images |= progbar
+ return
+ if(is_locking(lock_type))
+ var/choices = list(
+ list("Remove Blade", "radial_altar_remove", "Transfer some of your blood to the blade to repair it and refuel its blood level, or you could just slash someone."),
+ list("Sacrifice", "radial_altar_sacrifice", "Initiate the sacrifice ritual. The ritual can only proceed if the proper victim has been nailed to the altar."),
+ )
+ var/task = show_radial_menu(user,loc,choices,'icons/obj/cult_radial3.dmi',"radial-cult2")
+ if (!is_locking(lock_type) || !Adjacent(user) || !task)
+ return
+ switch (task)
+ if ("Remove Blade")
+ var/mob/M = get_locked(lock_type)[1]
+ if(M != user)
+ if (do_after(user,src,20))
+ M.visible_message("\The [M] was freed from \the [src] by \the [user]!","You were freed from \the [src] by \the [user].")
+ unlock_atom(M)
+ if (blade)
+ blade.forceMove(loc)
+ blade.attack_hand(user)
+ to_chat(user, "You remove \the [blade] from \the [src]")
+ blade = null
+ playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
+ update_icon()
+ if ("Sacrifice")
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ var/datum/objective/bloodcult_sacrifice/O = locate() in cult.objective_holder.objectives
+ if (O && is_locking(lock_type))
+ var/mob/victim = get_locked(lock_type)[1]
+ if (victim == O.sacrifice_target)
+ altar_task = ALTARTASK_SACRIFICE
+ timeleft = 30
+ timetotal = timeleft
+ update_icon()
+ contributors.Add(user)
+ update_progbar()
+ if (user.client)
+ user.client.images |= progbar
+ var/image/I = image('icons/obj/cult.dmi',"build")
+ I.pixel_y = 8
+ src.overlays += I
+ if (!user.checkTattoo(TATTOO_SILENT))
+ if (prob(5))
+ user.say("Let me show you the dance of my people!","C")
+ else
+ user.say("Barhah hra zar'garis!","C")
+ if (user.client)
+ user.client.images |= progbar
+ safe_space()
+ for(var/mob/M in range(src,40))
+ if (M.z == z && M.client)
+ if (get_dist(M,src)<=20)
+ M.playsound_local(src, get_sfx("explosion"), 50, 1)
+ shake_camera(M, 2, 1)
+ else
+ M.playsound_local(src, 'sound/effects/explosionfar.ogg', 50, 1)
+ shake_camera(M, 1, 1)
+ spawn()
+ dance_start()
+ else
+ to_chat(user, "This isn't the One.")
+
+ else if (blade)
blade.forceMove(loc)
blade.attack_hand(user)
to_chat(user, "You remove \the [blade] from \the [src]")
@@ -288,53 +420,195 @@
playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
update_icon()
return
- var/dat = ""
- switch (menu)
- if ("default")
- dat = {"
- - Commune with Nar-Sie
- - Should you need guidance, Nar-Sie can offer you some tips.
- The tips can vary depending on the veil's thickness.
"}
- if (veil_thickness >= CULT_ACT_II)
- dat += {"- Conjure Soulstone
- - For a tribute of 60u of blood, this altar will conjure a soulstone over 30s.
- Use them to capture the soul of a dead or critically injured enemy.
"}
- else
- dat += {"- Conjure Soulstone - LOCKED (ACT II)
- "}
- if (veil_thickness == CULT_ACT_II)
- dat += {"- Offer in Sacrifice
- - The body of the individual designated by Nar-Sie is the key to tear down the veil.
- Place them on \the [name] first, but be prepared to oppose the crew openly.
"}
- else
- dat += {"- Offer in Sacrifice - LOCKED (ACT II only)
- "}
- if (veil_thickness >= CULT_ACT_III)
- dat += {"- Conjure Soul into Blade
- - Leave a soul blade on \the [name] to imbue it with the souls of the dead from hell.
- It takes a while, but can be an alternative to capturing a soul by yourself.
"}
- else
- dat += {"- Conjure Soul into Blade - LOCKED (ACT III)
- "}
- dat += {"
"}
- if ("commune")
- dat = {"- TODO ADD NARSIE TIPS FOR EACH ACTS
"}
+ else
+ var/choices = list(
+ list("Consult Roster", "radial_altar_roster", "Check the names and status of all of the cult's members."),
+ list("Commune with Nar-Sie", "radial_altar_commune", "Obtain guidance from Nar-Sie to help you complete your objectives."),
+ list("Conjure Soul Gem", "radial_altar_gem", "Order the altar to sculpt you a Soul Gem, to capture the soul of your enemies."),
+ )
+ var/task = show_radial_menu(user,loc,choices,'icons/obj/cult_radial3.dmi',"radial-cult2")
+ if (is_locking(lock_type) || !Adjacent(user) || !task)
+ return
+ switch (task)
+ if ("Consult Roster")
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (!cult)
+ return
+ var/dat = {""}
+ for (var/datum/role/cultist/C in cult.members)
+ var/datum/mind/M = C.antag
+ var/conversion = ""
+ if (C.conversion.len > 0)
+ conversion = pick(C.conversion)
+ var/origin_text = ""
+ switch (conversion)
+ if ("converted")
+ origin_text = "Converted by [C.conversion[conversion]]"
+ if ("resurrected")
+ origin_text = "Resurrected by [C.conversion[conversion]]"
+ if ("soulstone")
+ origin_text = "Soul captured by [C.conversion[conversion]]"
+ if ("altar")
+ origin_text = "Volunteer shade"
+ else
+ origin_text = "Founder"
+ var/mob/living/carbon/H = C.antag.current
+ var/extra = ""
+ if (H && istype(H))
+ if (H.isInCrit())
+ extra = " - CRITICAL"
+ else if (H.isDead())
+ extra = " - DEAD"
+ dat += "- [M.name]
- [origin_text][extra]"
+ dat += {"
"}
+ user << browse("Cult Roster[dat]", "window=cultroster;size=500x300")
+ onclose(user, "cultroster")
+ if ("Commune with Nar-Sie")
+ switch(veil_thickness)
+ if (CULT_MENDED)
+ to_chat(user, "...nothing but silence...")
+ if (CULT_PROLOGUE)
+ to_chat(user, "Nar-Sie murmurs, How interesting...")
+ if (CULT_ACT_I)
+ to_chat(user, "Nar-Sie murmurs, The conversion rune is Join Blood Self, but you now have many new runes at your disposal to help you in your task, therefore I recommend you first summon an Arcane Tome to easily scribe them. The rune that conjures a tome is See Blood Hell.")
+ if (CULT_ACT_II)
+ to_chat(user, "Nar-Sie murmurs, To perform the sacrifice, you'll have to forge a cult blade first. It doesn't matter if the target is alive of not, lay their body down on the altar and plant the blade on their stomach. Next, touch the altar to perform the next step of the ritual. The more of you, the quicker it will be done.")
+ if (CULT_ACT_III)
+ to_chat(user, "Nar-Sie murmurs, The crew is now aware of our presence, prepare to draw blood. Your priority is to spill as much blood as you can all over the station, bloody trails left by foot steps count toward this goal. How you obtain the blood, I leave to your ambition, but remember that if the crew destroys every blood stones, you will be doomed.")
+ if (CULT_ACT_IV)
+ to_chat(user, "Nar-Sie murmurs, One of the blood stones has become my anchor in this plane, you can touch any other stone to locate it. Touch the anchor to perform the Tear Reality ritual before the crew breaks it.")
+ if (CULT_EPILOGUE)
+ to_chat(user, "Nar-Sie murmurs, Remarkable work, [user.real_name], I greatly enjoyed observing this game. Your work is over now, but I may have more in store for you in the future. In the meanwhile, bask in your victory.")
+ /* TODO: I'll finish that up someday
+ var/dat = {""}
+ user << browse("Nar-Sie's Tips[dat]", "window=narsietips;size=500x300")
+ onclose(user, "narsietips")
+ */
+ if ("Conjure Soul Gem")
+ altar_task = ALTARTASK_GEM
+ update_icon()
+ overlays += "altar-soulstone1"
+ spawn (gem_delay/3)
+ update_icon()
+ overlays += "altar-soulstone2"
+ sleep (gem_delay/3)
+ update_icon()
+ overlays += "altar-soulstone3"
+ sleep (gem_delay/3)
+ altar_task = ALTARTASK_NONE
+ update_icon()
+ var/obj/item/device/soulstone/gem/gem = new (loc)
+ gem.pixel_y = 4
+
+/obj/structure/cult/altar/noncultist_act(var/mob/user)//Non-cultists can still remove blades planted on altars.
+ if(iscultist(user))
+ return 0
+ if(is_locking(lock_type))
+ var/mob/M = get_locked(lock_type)[1]
+ if(M != user)
+ if (do_after(user,src,20))
+ M.visible_message("\The [M] was freed from \the [src] by \the [user]!","You were freed from \the [src] by \the [user].")
+ unlock_atom(M)
+ if (blade)
+ blade.forceMove(loc)
+ blade.attack_hand(user)
+ to_chat(user, "You remove \the [blade] from \the [src]")
+ blade = null
+ playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
+ update_icon()
+ else if (blade)
+ blade.forceMove(loc)
+ blade.attack_hand(user)
+ to_chat(user, "You remove \the [blade] from \the [src]")
+ blade = null
+ playsound(loc, 'sound/weapons/blade1.ogg', 50, 1)
+ update_icon()
+ return
+ else
+ to_chat(user,"You feel madness taking its toll, trying to figure out \the [name]'s purpose")
+ return 1
+
- user << browse("Cult Altar[dat]", "window=cultaltar;size=565x280")
- onclose(user, "cultaltar")
/obj/structure/cult/altar/Topic(href, href_list)
- switch (href_list["altar"])
- if ("commune")
- cultist_act(usr,"commune")
- if ("soulstone")
- to_chat(usr,"TODO: SPAWN A SOULSTONE")
- if ("sacrifice")
- to_chat(usr,"TODO: SACRIFICE")
- if ("soulblade")
- to_chat(usr,"TODO: IMBUE SOULBLADE")
+ if(href_list["signup"])
+ var/mob/M = usr
+ if(!M || !isobserver(M))
+ return
+ var/obj/item/weapon/melee/soulblade/blade = locate() in src
+ if (!blade || !istype(blade))
+ to_chat(usr, "The Soul Blade was pulled off from \the [src]")
+ return
+ if (blade.shade)
+ to_chat(usr, "Another shade was faster, and is currently possessing the blade.")
+ return
+ var/mob/living/simple_animal/shade/shadeMob = new(blade)
+ shadeMob.status_flags |= GODMODE
+ shadeMob.canmove = 0
+ shadeMob.ckey = usr.ckey
+ spawn()
+ var/list/shade_names = list("Orenmir","Felthorn","Sparda","Vengeance","Klinge")
+ shadeMob.real_name = pick(shade_names)
+ shadeMob.real_name = copytext(sanitize(input(shadeMob, "You have no memories of your previous life, if you even had one. What name will you give yourself?", "Give yourself a new name", "[shadeMob.real_name]") as null|text),1,MAX_NAME_LEN)
+ shadeMob.name = "[shadeMob.real_name] the Shade"
+ if (shadeMob.mind)
+ shadeMob.mind.name = shadeMob.real_name
+ shadeMob.cancel_camera()
+ shadeMob.give_blade_powers()
+ blade.dir = NORTH
+ blade.update_icon()
+ update_icon()
+ //Automatically makes them cultists
+ var/datum/role/cultist/newCultist = new
+ newCultist.AssignToRole(shadeMob.mind,1)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (!cult)
+ cult = ticker.mode.CreateFaction(/datum/faction/bloodcult, null, 1)
+ cult.HandleRecruitedRole(newCultist)
+ newCultist.OnPostSetup()
+ newCultist.Greet(GREET_SOULBLADE)
+ newCultist.conversion.Add("altar")
+/obj/structure/cult/altar/dance_start()//This is executed at the end of the sacrifice ritual
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.change_cooldown = max(cult.change_cooldown,60 SECONDS)
+ . = ..()//true if the ritual was successful
+ altar_task = ALTARTASK_NONE
+ update_icon()
+ if (. && is_locking(lock_type))
+ var/mob/M = get_locked(lock_type)[1]
+
+ if (istype(blade) && !blade.shade)//If an empty soul blade was the tool used for the ritual, let's make them its shade.
+ var/mob/living/simple_animal/shade/new_shade = M.change_mob_type( /mob/living/simple_animal/shade , null, null, 1 )
+ blade.forceMove(loc)
+ blade.blood = blade.maxblood
+ new_shade.forceMove(blade)
+ blade.update_icon()
+ blade = null
+ new_shade.status_flags |= GODMODE
+ new_shade.canmove = 0
+ new_shade.name = "[M.real_name] the Shade"
+ new_shade.real_name = "[M.real_name]"
+ new_shade.give_blade_powers()
+ playsound(get_turf(src), get_sfx("soulstone"), 50,1)
+ else
+ M.gib()
+ var/turf/T = loc
+
+ cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.progress(CULT_ACT_III,T)
+ else
+ message_admins("Blood Cult: A sacrifice was completed...but we cannot find the cult faction...")//failsafe in case of admin varedit fuckery
+ qdel(src)
+
+#undef ALTARTASK_NONE
+#undef ALTARTASK_GEM
+#undef ALTARTASK_SACRIFICE
+
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// //Spawned from the Raise Structure rune. Available from Act II, upgrades at each subsequent Act
// CULT SPIRE //Can be used by cultists to acquire arcane tattoos. One of each tier.
@@ -529,10 +803,7 @@ var/list/cult_spires = list()
var/set_temperature = 50
var/mob/forger = null
var/template = null
- var/timeleft = 0
- var/timetotal = 0
var/obj/effect/cult_ritual/forge/forging = null
- var/image/progbar = null//progress bar
/obj/structure/cult/forge/New()
@@ -687,7 +958,7 @@ var/list/cult_spires = list()
return 1
..()
-/obj/structure/cult/forge/proc/update_progbar()
+/obj/structure/cult/proc/update_progbar()
if (!progbar)
progbar = image("icon" = 'icons/effects/doafter_icon.dmi', "loc" = src, "icon_state" = "prog_bar_0")
progbar.pixel_z = WORLD_ICON_SIZE
@@ -698,6 +969,14 @@ var/list/cult_spires = list()
progbar.layer = HUD_ABOVE_ITEM_LAYER
progbar.icon_state = "prog_bar_[round((100 - min(1, timeleft / timetotal) * 100), 10)]"
+/obj/structure/cult/altar/update_progbar()
+ if (!progbar)
+ progbar = image("icon" = 'icons/effects/doafter_icon.dmi', "loc" = src, "icon_state" = "prog_bar_0")
+ progbar.pixel_z = WORLD_ICON_SIZE
+ progbar.plane = HUD_PLANE
+ progbar.layer = HUD_ABOVE_ITEM_LAYER
+ progbar.icon_state = "prog_bar_[round((100 - min(1, timeleft / timetotal) * 100), 10)]"
+
/obj/structure/cult/forge/cultist_act(var/mob/user,var/menu="default")
.=..()
if (!.)
@@ -768,3 +1047,420 @@ var/list/cult_spires = list()
I.layer = NARSIE_GLOW
I.blend_mode = BLEND_ADD
overlays += I
+
+
+/obj/structure/cult/pillar
+ name = "obsidian pillar"
+ icon_state = "pillar-enter"
+ icon = 'icons/obj/cult_64x64.dmi'
+ pixel_x = -16 * PIXEL_MULTIPLIER
+ health = 300
+ maxHealth = 300
+ sound_damaged = 'sound/effects/stone_hit.ogg'
+ sound_destroyed = 'sound/effects/stone_crumble.ogg'
+ plane = EFFECTS_PLANE
+ layer = BELOW_PROJECTILE_LAYER
+ var/alt = 0
+
+/obj/structure/cult/pillar/New()
+ ..()
+ var/turf/T = loc
+ for (var/obj/O in loc)
+ if (O != src)
+ O.ex_act(2)
+ T.ChangeTurf(/turf/simulated/floor/engine/cult)
+ T.turf_animation('icons/effects/effects.dmi',"cultfloor", 0, 0, MOB_LAYER-1, anim_plane = TURF_PLANE)
+ for (var/obj/structure/S in T)
+ if (S != src)
+ qdel(S)
+ for (var/obj/machinery/M in T)
+ qdel(M)
+
+/obj/structure/cult/pillar/Destroy()
+ new /obj/effect/decal/cleanable/ash(loc)
+ ..()
+
+
+/obj/structure/cult/pillar/alt
+ icon_state = "pillaralt-enter"
+ alt = 1
+
+/obj/structure/cult/pillar/update_icon()
+ icon_state = "pillar[alt ? "alt": ""]2"
+ overlays.len = 0
+ if (health < maxHealth/3)
+ icon_state = "pillar[alt ? "alt": ""]0"
+ else if (health < 2*maxHealth/3)
+ icon_state = "pillar[alt ? "alt": ""]1"
+
+/obj/structure/cult/pillar/conceal()
+ return
+
+/obj/structure/cult/pillar/ex_act(var/severity)
+ switch(severity)
+ if (1)
+ takeDamage(300)
+ if (2)
+ takeDamage(100)
+ if (3)
+ takeDamage(20)
+
+var/list/bloodstone_list = list()
+
+/obj/structure/cult/bloodstone
+ name = "blood stone"
+ icon_state = "bloodstone-enter1"
+ icon = 'icons/obj/cult_64x64.dmi'
+ pixel_x = -16 * PIXEL_MULTIPLIER
+ health = 900
+ maxHealth = 900
+ sound_damaged = 'sound/effects/stone_hit.ogg'
+ sound_destroyed = 'sound/effects/stone_crumble.ogg'
+ plane = EFFECTS_PLANE
+ layer = BELOW_PROJECTILE_LAYER
+ light_color = "#FF0000"
+
+ var/list/watching_mobs = list()
+ var/list/watcher_maps = list()
+ var/datum/station_holomap/holomap_datum
+ var/anchor = FALSE
+
+/obj/structure/cult/bloodstone/New()
+ ..()
+ bloodstone_list.Add(src)
+ for (var/obj/O in loc)
+ if (O != src)
+ O.ex_act(2)
+ safe_space()
+ set_light(3)
+ for(var/mob/M in player_list)
+ if (M.z == z && M.client)
+ if (get_dist(M,src)<=20)
+ M.playsound_local(src, get_sfx("explosion"), 50, 1)
+ shake_camera(M, 4, 1)
+ else
+ M.playsound_local(src, 'sound/effects/explosionfar.ogg', 50, 1)
+ shake_camera(M, 1, 1)
+
+ spawn(10)
+ var/list/pillars = list()
+ icon_state = "bloodstone-enter2"
+ for(var/mob/M in player_list)
+ if (M.z == z && M.client)
+ if (get_dist(M,src)<=20)
+ M.playsound_local(src, get_sfx("explosion"), 50, 1)
+ shake_camera(M, 4, 1)
+ else
+ M.playsound_local(src, 'sound/effects/explosionfar.ogg', 50, 1)
+ shake_camera(M, 1, 1)
+ var/turf/T1 = locate(x-2,y-2,z)
+ pillars += new /obj/structure/cult/pillar(T1)
+ var/turf/T2 = locate(x+2,y-2,z)
+ pillars += new /obj/structure/cult/pillar/alt(T2)
+ var/turf/T3 = locate(x-2,y+2,z)
+ pillars += new /obj/structure/cult/pillar(T3)
+ var/turf/T4 = locate(x+2,y+2,z)
+ pillars += new /obj/structure/cult/pillar/alt(T4)
+ sleep(10)
+ icon_state = "bloodstone-enter3"
+ for(var/mob/M in player_list)
+ if (M.z == z && M.client)
+ if (get_dist(M,src)<=20)
+ M.playsound_local(src, get_sfx("explosion"), 50, 1)
+ shake_camera(M, 4, 1)
+ else
+ M.playsound_local(src, 'sound/effects/explosionfar.ogg', 50, 1)
+ shake_camera(M, 1, 1)
+ for (var/obj/structure/cult/pillar/P in pillars)
+ P.update_icon()
+
+/obj/structure/cult/bloodstone/Destroy()
+ bloodstone_list.Remove(src)
+ new /obj/effect/decal/cleanable/ash(loc)
+ new /obj/item/weapon/ectoplasm(loc)
+ var/icon/updated_map = icon(extraMiniMaps[HOLOMAP_EXTRA_CULTMAP])
+ var/datum/holomap_marker/holomarker = new()
+ holomarker.id = HOLOMAP_MARKER_BLOODSTONE_BROKEN
+ holomarker.filter = HOLOMAP_FILTER_CULT
+ holomarker.x = src.x
+ holomarker.y = src.y
+ holomarker.z = src.z
+ holomap_markers[HOLOMAP_MARKER_BLOODSTONE+"_\ref[src]"] = holomarker
+ if(holomarker.z == map.zMainStation && holomarker.filter & HOLOMAP_FILTER_CULT)
+ if(map.holomap_offset_x.len >= map.zMainStation)
+ updated_map.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8+map.holomap_offset_x[map.zMainStation] , holomarker.y-8+map.holomap_offset_y[map.zMainStation])
+ else
+ updated_map.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8, holomarker.y-8)
+ extraMiniMaps[HOLOMAP_EXTRA_CULTMAP] = updated_map
+ for(var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.holomap_datum.initialize_holomap(B.loc)
+ if (bloodstone_list.len <= 0 || anchor)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.fail()
+ ..()
+
+/obj/structure/cult/bloodstone/cultist_act(var/mob/user)
+ .=..()
+ if (!.)
+ return
+ if(isliving(user))
+ if(user in watching_mobs)
+ stopWatching(user)
+ else
+ if (anchor)
+ if (user in contributors)
+ return
+ if (!user.checkTattoo(TATTOO_SILENT))
+ if (prob(5))
+ user.say("Let me show you the dance of my people!","C")
+ else
+ user.say("Tok-lyr rqa'nap g'lt-ulotf!","C")
+ contributors.Add(user)
+ if (user.client)
+ user.client.images |= progbar
+ else if(user.hud_used && user.hud_used.holomap_obj)
+ if(!("\ref[user]" in watcher_maps))
+ watcher_maps["\ref[user]"] = image(holomap_datum.station_map)
+ var/image/I = watcher_maps["\ref[user]"]
+ I.loc = user.hud_used.holomap_obj
+ I.alpha = 0
+ animate(watcher_maps["\ref[user]"], alpha = 255, time = 5, easing = LINEAR_EASING)
+ watching_mobs |= user
+ user.client.images |= watcher_maps["\ref[user]"]
+ user.callOnFace["\ref[src]"] = "checkPosition"
+
+/obj/structure/cult/bloodstone/proc/checkPosition()
+ for(var/mob/M in watching_mobs)
+ if(get_dist(src,M) > 1)
+ stopWatching(M)
+
+/obj/structure/cult/bloodstone/proc/stopWatching(var/mob/user)
+ if(!user)
+ for(var/mob/M in watching_mobs)
+ if(M.client)
+ spawn(5)//we give it time to fade out
+ M.client.images -= watcher_maps["\ref[M]"]
+ M.callOnFace -= "\ref[src]"
+ animate(watcher_maps["\ref[M]"], alpha = 0, time = 5, easing = LINEAR_EASING)
+
+ watching_mobs = list()
+ else
+ if(user.client)
+ spawn(5)//we give it time to fade out
+ if(!(user in watching_mobs))
+ user.client.images -= watcher_maps["\ref[user]"]
+ watcher_maps -= "\ref[user]"
+ user.callOnFace -= "\ref[src]"
+ animate(watcher_maps["\ref[user]"], alpha = 0, time = 5, easing = LINEAR_EASING)
+
+ watching_mobs -= user
+
+/datum/station_holomap/cult/initialize_holomap(var/turf/T, var/isAI=null, var/mob/user=null)
+ station_map = image(extraMiniMaps[HOLOMAP_EXTRA_CULTMAP])
+ cursor = image('icons/holomap_markers.dmi', "bloodstone-here")
+ if(map.holomap_offset_x.len >= T.z)
+ cursor.pixel_x = (T.x-9+map.holomap_offset_x[T.z])*PIXEL_MULTIPLIER
+ cursor.pixel_y = (T.y-9+map.holomap_offset_y[T.z])*PIXEL_MULTIPLIER
+ else
+ cursor.pixel_x = (T.x-9)*PIXEL_MULTIPLIER
+ cursor.pixel_y = (T.y-9)*PIXEL_MULTIPLIER
+ station_map.overlays |= cursor
+
+/obj/structure/cult/bloodstone/update_icon()
+ icon_state = "bloodstone-0"
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ var/datum/objective/bloodcult_bloodbath/O = locate() in cult.objective_holder.objectives
+ if (O)
+ icon_state = "bloodstone-[max(0,min(9,round(cult.bloody_floors.len*100/O.target_bloodspill/10)))]"
+ overlays.len = 0
+ var/image/I_base = image('icons/obj/cult_64x64.dmi',"bloodstone-base")
+ I_base.appearance_flags |= RESET_COLOR//we don't want the stone to pulse
+ overlays += I_base
+ if (health < maxHealth/3)
+ overlays.Add("bloodstone_damage2")
+ else if (health < 2*maxHealth/3)
+ overlays.Add("bloodstone_damage1")
+
+/obj/structure/cult/bloodstone/proc/set_animate()
+ animate(src, color = list(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1,0,0,0,0), time = 10, loop = -1)
+ animate(color = list(1.125,0.06,0,0,0,1.125,0.06,0,0.06,0,1.125,0,0,0,0,1,0,0,0,0), time = 2)
+ animate(color = list(1.25,0.12,0,0,0,1.25,0.12,0,0.12,0,1.25,0,0,0,0,1,0,0,0,0), time = 2)
+ animate(color = list(1.375,0.19,0,0,0,1.375,0.19,0,0.19,0,1.375,0,0,0,0,1,0,0,0,0), time = 1.5)
+ animate(color = list(1.5,0.27,0,0,0,1.5,0.27,0,0.27,0,1.5,0,0,0,0,1,0,0,0,0), time = 1.5)
+ animate(color = list(1.625,0.35,0.06,0,0.06,1.625,0.35,0,0.35,0.06,1.625,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.75,0.45,0.12,0,0.12,1.75,0.45,0,0.45,0.12,1.75,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.875,0.56,0.19,0,0.19,1.875,0.56,0,0.56,0.19,1.875,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(2,0.67,0.27,0,0.27,2,0.67,0,0.67,0.27,2,0,0,0,0,1,0,0,0,0), time = 5)
+ animate(color = list(1.875,0.56,0.19,0,0.19,1.875,0.56,0,0.56,0.19,1.875,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.75,0.45,0.12,0,0.12,1.75,0.45,0,0.45,0.12,1.75,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.625,0.35,0.06,0,0.06,1.625,0.35,0,0.35,0.06,1.625,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.5,0.27,0,0,0,1.5,0.27,0,0.27,0,1.5,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.375,0.19,0,0,0,1.375,0.19,0,0.19,0,1.375,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.25,0.12,0,0,0,1.25,0.12,0,0.12,0,1.25,0,0,0,0,1,0,0,0,0), time = 1)
+ animate(color = list(1.125,0.06,0,0,0,1.125,0.06,0,0.06,0,1.125,0,0,0,0,1,0,0,0,0), time = 1)
+ update_icon()
+
+/obj/structure/cult/bloodstone/conceal()
+ return
+
+/obj/structure/cult/bloodstone/takeDamage(var/damage)
+ var/backup = (health > 666) + (health > 333)
+ health -= damage
+ if (health <= 0)
+ if (sound_destroyed)
+ playsound(get_turf(src), sound_destroyed, 100, 1)
+ qdel(src)
+ else
+ if (backup > (health > 666) + (health > 333))
+ summon_backup()
+ update_icon()
+
+/obj/structure/cult/bloodstone/proc/summon_backup()
+ var/list/possible_floors = list()
+ for (var/turf/simulated/floor/F in orange(1,src))
+ possible_floors.Add(F)
+ for (var/i = 1 to 2)
+ var/turf/T = pick(possible_floors)
+ if (T)
+ possible_floors.Remove(T)
+ new /obj/effect/cult_ritual/backup_spawn(T)
+
+/obj/structure/cult/bloodstone/dance_start()
+ while(src && loc && anchor)
+ for (var/mob/M in contributors)
+ if (!iscultist(M) || get_dist(src,M) > 1 || (M.stat != CONSCIOUS))
+ if (M.client)
+ M.client.images -= progbar
+ contributors.Remove(M)
+ continue
+ if (contributors.len > 0)
+ timeleft -= 1 + round(contributors.len/3)//Additional dancers will complete the ritual faster
+ if (timeleft <= 0)
+ break
+ update_progbar()
+ dance_step()
+ sleep(3)
+ dance_step()
+ sleep(3)
+ dance_step()
+ sleep(6)
+ else
+ timeleft = min(timeleft+1,60)
+ sleep(10)
+ for (var/mob/M in contributors)
+ if (M.client)
+ M.client.images -= progbar
+ contributors.Remove(M)
+ anchor = FALSE
+ for (var/obj/structure/teleportwarp/TW in src.loc)
+ qdel(TW)
+ new /obj/machinery/singularity/narsie/large(src.loc)
+ stat_collection.cult_narsie_summoned = TRUE
+ return 1
+
+/obj/structure/cult/bloodstone/ex_act(var/severity)
+ switch(severity)
+ if (1)
+ takeDamage(250)
+ if (2)
+ takeDamage(50)
+ if (3)
+ takeDamage(10)
+
+/obj/structure/cult/proc/safe_space()
+ for(var/turf/T in range(5,src))
+ var/dist = cheap_pythag(T.x - src.x, T.y - src.y)
+ if (dist <= 2.5)
+ T.ChangeTurf(/turf/simulated/floor/engine/cult)
+ T.turf_animation('icons/effects/effects.dmi',"cultfloor", 0, 0, MOB_LAYER-1, anim_plane = TURF_PLANE)
+ for (var/obj/structure/S in T)
+ if (!istype(S,/obj/structure/cult))
+ qdel(S)
+ for (var/obj/machinery/M in T)
+ qdel(M)
+ else if (dist <= 4.5)
+ if (istype(T,/turf/space))
+ T.ChangeTurf(/turf/simulated/floor/engine/cult)
+ T.turf_animation('icons/effects/effects.dmi',"cultfloor", 0, 0, MOB_LAYER-1, anim_plane = TURF_PLANE)
+ else
+ T.cultify()
+ else if (dist <= 5.5)
+ if (istype(T,/turf/space))
+ T.ChangeTurf(/turf/simulated/wall/cult)
+ T.turf_animation('icons/effects/effects.dmi',"cultwall", 0, 0, MOB_LAYER-1, anim_plane = TURF_PLANE)
+ else
+ T.cultify()
+
+//inspired from LoZ:Oracle of Seasons
+/obj/structure/cult/proc/dance_start()
+ while(timeleft > 0)
+ for (var/mob/M in contributors)
+ if (!iscultist(M) || get_dist(src,M) > 1 || (M.stat != CONSCIOUS))
+ if (M.client)
+ M.client.images -= progbar
+ contributors.Remove(M)
+ continue
+ if (contributors.len <= 0)
+ return 0
+ timeleft -= 1 + round(contributors.len/2)//Additional dancers will complete the ritual faster
+ update_progbar()
+ dance_step()
+ sleep(3)
+ dance_step()
+ sleep(3)
+ dance_step()
+ sleep(6)
+ for (var/mob/M in contributors)
+ if (M.client)
+ M.client.images -= progbar
+ contributors.Remove(M)
+ return 1
+
+/obj/structure/cult/proc/dance_step()
+ var/dance_move = pick("clock","counter","spin")
+
+ switch(dance_move)
+ if ("clock")
+ for (var/mob/M in contributors)
+ switch (get_dir(src,M))
+ if (NORTHWEST,NORTH)
+ M.forceMove(get_step(M,EAST))
+ M.dir = EAST
+ if (NORTHEAST,EAST)
+ M.forceMove(get_step(M,SOUTH))
+ M.dir = SOUTH
+ if (SOUTHEAST,SOUTH)
+ M.forceMove(get_step(M,WEST))
+ M.dir = WEST
+ if (SOUTHWEST,WEST)
+ M.forceMove(get_step(M,NORTH))
+ M.dir = NORTH
+ if ("counter")
+ for (var/mob/M in contributors)
+ switch (get_dir(src,M))
+ if (NORTHEAST,NORTH)
+ M.forceMove(get_step(M,WEST))
+ M.dir = WEST
+ if (SOUTHEAST,EAST)
+ M.forceMove(get_step(M,NORTH))
+ M.dir = NORTH
+ if (SOUTHWEST,SOUTH)
+ M.forceMove(get_step(M,EAST))
+ M.dir = EAST
+ if (NORTHWEST,WEST)
+ M.forceMove(get_step(M,SOUTH))
+ M.dir = SOUTH
+ if ("spin")
+ for (var/mob/M in contributors)
+ spawn()
+ M.dir = SOUTH
+ sleep(0.75)
+ M.dir = EAST
+ sleep(0.75)
+ M.dir = NORTH
+ sleep(0.75)
+ M.dir = WEST
+ sleep(0.75)
+ M.dir = SOUTH
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
index 201d148a797..0b38a20df83 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_effects.dm
@@ -377,3 +377,24 @@
if (landing_animation)
flick("cult_jaunt_land",landing_animation)
qdel(src)
+
+///////////////////////////////////////BLOODSTONE DEFENSES////////////////////////////////////////////////
+
+/obj/effect/cult_ritual/backup_spawn
+ name = "gateway"
+ desc = "Something is coming through!"
+ icon = 'icons/obj/cult.dmi'
+ icon_state = "runetrigger-build"
+ anchored = 1
+ mouse_opacity = 1
+
+/obj/effect/cult_ritual/backup_spawn/New()
+ ..()
+ spawn (30)
+ var/mobtype = pick(
+ 1;/mob/living/simple_animal/hostile/creature/cult,
+ 2;/mob/living/simple_animal/hostile/faithless/cult,
+ 3;/mob/living/simple_animal/hostile/scarybat/cult,
+ )
+ new mobtype(get_turf(src))
+ qdel(src)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm
index d0803a6986a..fd464d9c222 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_items.dm
@@ -464,8 +464,18 @@ var/list/arcane_tomes = list()
return
/obj/item/weapon/melee/cultblade/attack(var/mob/living/target, var/mob/living/carbon/human/user)
- if(!checkcult || iscultist(user))
+ if(!checkcult)
return ..()
+ if (iscultist(user))
+ if (ishuman(target) && target.resting)
+ var/obj/structure/cult/altar/altar = locate() in target.loc
+ if (altar)
+ altar.attackby(src,user)
+ return
+ else
+ return ..()
+ else
+ return ..()
else
user.Paralyse(5)
to_chat(user, "An unexplicable force powerfully repels the sword from [target]!")
@@ -588,15 +598,16 @@ var/list/arcane_tomes = list()
/obj/item/weapon/melee/soulblade/attack_self(var/mob/user)
- if (!iscultist(user))
- to_chat(user,"There is a crimson gem encrusted into the blade, but you're not exactly sure how you could remove it.")
- return
-
var/choices = list(
- list("Give Blood", "radial_giveblood", "Deity please add details"),
- list("Remove Gem", "radial_removegem", "Deity please add details"),
+ list("Give Blood", "radial_giveblood", "Transfer some of your blood to the blade to repair it and refuel its blood level, or you could just slash someone."),
+ list("Remove Gem", "radial_removegem", "Remove the soul gem from the blade."),
)
+ if (!iscultist(user))
+ choices = list(
+ list("Remove Gem", "radial_removegem", "Remove the soul gem from the blade."),
+ )
+
var/task = show_radial_menu(user,user,choices,'icons/obj/cult_radial.dmi',"radial-cult")//spawning on loc so we aren't offset by pixel_x/pixel_y, or affected by animate()
if (user.get_active_hand() != src)
to_chat(user,"You must hold the blade in your active hand.")
@@ -636,6 +647,11 @@ var/list/arcane_tomes = list()
if(affecting && affecting.take_damage(rand(force/2, force))) //random amount of damage between half of the blade's force and the full force of the blade.
user.UpdateDamageIcon()
return
+ if (ishuman(target) && target.resting)
+ var/obj/structure/cult/altar/altar = locate() in target.loc
+ if (altar)
+ altar.attackby(src,user)
+ return
..()
if (!shade && istype(target, /mob/living/carbon))
transfer_soul("VICTIM", target, user,1)
@@ -1123,6 +1139,7 @@ var/list/arcane_tomes = list()
var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
if (!cult)
cult = ticker.mode.CreateFaction(/datum/faction/bloodcult, null, 1)
+ cult.OnPostSetup()
cult.HandleRecruitedRole(newCultist)
newCultist.OnPostSetup()
newCultist.Greet(GREET_PAMPHLET)
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_mobs_and_constructs.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_mobs_and_constructs.dm
index 5b09691e081..099ece9c110 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_mobs_and_constructs.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_mobs_and_constructs.dm
@@ -239,7 +239,10 @@
/spell/aoe_turf/conjure/struct,
/spell/aoe_turf/conjure/wall,
/spell/aoe_turf/conjure/floor,
+ /spell/aoe_turf/conjure/door,
/spell/aoe_turf/conjure/pylon,
+ /spell/aoe_turf/conjure/construct/lesser/alt,
+ /spell/aoe_turf/conjure/soulstone,
/spell/aoe_turf/conjure/hex,
)
var/mob/living/simple_animal/construct/heal_target = null
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
index 2dfc7fd751c..fa6d3406c7e 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_runes.dm
@@ -88,11 +88,11 @@ var/list/uristrune_cache = list()//icon cache, so the whole blending process is
//cultists can read the words, and be informed if it calls a spell
if (iscultist(user))
to_chat(user, "It reads: [word1 ? "[word1.rune]" : ""] [word2 ? "[word2.rune]" : ""] [word3 ? "[word3.rune]" : ""].[rune_name ? " That's a [initial(rune_name.name)] rune." : "It doesn't match any rune spells."]")
- if (rune_name)
- if (initial(rune_name.Act_restriction) <= veil_thickness)
- to_chat(user, initial(rune_name.desc))
- else
- to_chat(user, "The veil is still too thick for you to draw power from this rune.")
+ if (rune_name)
+ if (initial(rune_name.Act_restriction) <= veil_thickness)
+ to_chat(user, initial(rune_name.desc))
+ else
+ to_chat(user, "The veil is still too thick for you to draw power from this rune.")
//so do observers
else if (isobserver(user))
diff --git a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
index e119e3b69aa..79cf849811b 100644
--- a/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
+++ b/code/datums/gamemode/factions/bloodcult/bloodcult_runespells.dm
@@ -280,7 +280,7 @@
/datum/rune_spell/raisestructure/midcast(var/mob/add_cultist)
if (add_cultist in contributors)
return
- add_cultist.say(invocation,"C")
+ invoke(add_cultist, invocation)
contributors.Add(add_cultist)
if (add_cultist.client)
add_cultist.client.images |= progbar
@@ -351,6 +351,12 @@
/datum/rune_spell/raisestructure/proc/success()
new spawntype(spell_holder.loc)
+ if (spawntype == /obj/structure/cult/altar)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.progress(CULT_ACT_I)
+ else
+ message_admins("Blood Cult: An altar was raised...but we cannot find the cult faction...")//failsafe in case of admin varedit fuckery
qdel(spell_holder)//this will cause this datum to del as well
//RUNE II
@@ -710,7 +716,6 @@
//first lets check for a victim above
for (var/mob/living/carbon/C in T)//all carbons can be converted...but only carbons. no cult silicons.
if (!iscultist(C))
- //TODO: MOB NEEDS A MIND, leaving as is for now, so I can convert dummies to test stuff
targets.Add(C)
if (targets.len > 0)
victim = pick(targets)
@@ -885,6 +890,14 @@
abort(RITUALABORT_REMOVED)
return
+ //No matter the end result, counts as progress toward the cult's goals, as long as the victim was an actual player
+ if (victim.mind)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.progress(CULT_ACT_II)
+ else
+ message_admins("Blood Cult: A conversion ritual occured...but we cannot find the cult faction...")//failsafe in case of admin varedit fuckery
+
switch (success)
if (1)
conversion.layer = BELOW_OBJ_LAYER
@@ -950,6 +963,7 @@
cult.HandleRecruitedRole(newCultist)
newCultist.OnPostSetup()
newCultist.Greet(GREET_CONVERTED)
+ newCultist.conversion["converted"] = activator
/datum/rune_spell/conversion/Removed(var/mob/M)
if (victim==M)
@@ -1023,7 +1037,7 @@
playsound(spell_holder, 'sound/effects/stun_talisman.ogg', 25, 0, -5)
if (prob(15))//for old times' sake
- invoke(activator,"Dream sign ''Evil sealing talisman'[pick("'","`")]!",1)
+ invoke(activator,"Dream sign ''Evil sealing talisman''!",1)
else
invoke(activator,invocation,1)
@@ -1783,7 +1797,7 @@ var/list/blind_victims = list()
/datum/rune_spell/summoncultist/midcast(var/mob/add_cultist)
if (add_cultist in contributors)
return
- add_cultist.say(invocation,"C")
+ invoke(add_cultist, invocation)
contributors.Add(add_cultist)
if (add_cultist.client)
add_cultist.client.images |= progbar
@@ -1954,7 +1968,7 @@ var/list/blind_victims = list()
var/datum/cultword/W = cultwords[network]
- activator.say("[W.rune]","C")
+ invoke(activator, "[W.rune]")
var/image/I_crystals = image('icons/obj/cult.dmi',"path_pad")
I_crystals.plane = OBJ_PLANE
I_crystals.layer = BELOW_TABLE_LAYER
@@ -2060,7 +2074,7 @@ var/list/bloodcult_exitportals = list()
var/datum/cultword/W = cultwords[network]
- activator.say("[W.rune]","C")
+ invoke(activator, "[W.rune]")
var/image/I_crystals = image('icons/obj/cult.dmi',"path_crystals")
I_crystals.plane = OBJ_PLANE
I_crystals.layer = BELOW_TABLE_LAYER
@@ -2150,7 +2164,8 @@ var/list/bloodcult_exitportals = list()
//RUNE XIX
/datum/rune_spell/astraljourney
name = "Astral Journey"
- desc = "Leave your body so you can converse with the dead and observe your targets."
+ desc = "Leave your body so you can go spy on your enemies."
+ desc_talisman = "Leave your body so you can go spy on your enemies."
Act_restriction = CULT_ACT_II
invocation = "Fwe'sh mah erl nyag r'ya!"
word1 = /datum/cultword/hell
@@ -2243,6 +2258,7 @@ var/list/bloodcult_exitportals = list()
/datum/rune_spell/resurrect
name = "Resurrect"
desc = "Create a strong body for your fallen allies to inhabit."
+ desc_talisman = "Create a strong body for your fallen allies to inhabit."
Act_restriction = CULT_ACT_III
invocation = "Pasnar val'keriam usinar. Savrae ines amutan. Yam'toth remium il'tarat!"
word1 = /datum/cultword/blood
@@ -2306,7 +2322,7 @@ var/list/bloodcult_exitportals = list()
/datum/rune_spell/resurrect/midcast(var/mob/add_cultist)
if (add_cultist in contributors)
return
- add_cultist.say(invocation,"C")
+ invoke(add_cultist, invocation)
contributors.Add(add_cultist)
if (add_cultist.client)
add_cultist.client.images |= progbar
@@ -2393,6 +2409,7 @@ var/list/bloodcult_exitportals = list()
cult.HandleRecruitedRole(newCultist)
newCultist.OnPostSetup()
newCultist.Greet(GREET_RESURRECT)
+ newCultist.conversion["resurrected"] = activator
else
for(var/mob/living/L in contributors)
to_chat(activator, "Something went wrong with the ritual, the soul of the ghost appears to have vanished.")
diff --git a/code/datums/gamemode/factions/faction.dm b/code/datums/gamemode/factions/faction.dm
index d77b3cc5451..29911a6c0e5 100644
--- a/code/datums/gamemode/factions/faction.dm
+++ b/code/datums/gamemode/factions/faction.dm
@@ -137,7 +137,7 @@ var/list/factions_with_hud_icons = list()
if(!successful) //If one objective fails, then you did not win.
win = 0
count++
- if (count < objective_holder.objectives.len)
+ if (count <= objective_holder.objectives.len)
score_results += "
"
if (count>1)
if (win)
diff --git a/code/datums/gamemode/factions/legacy_cult/cult_structures.dm b/code/datums/gamemode/factions/legacy_cult/cult_structures.dm
index 830a49cac39..a1294897058 100644
--- a/code/datums/gamemode/factions/legacy_cult/cult_structures.dm
+++ b/code/datums/gamemode/factions/legacy_cult/cult_structures.dm
@@ -23,6 +23,7 @@
light_color = LIGHT_COLOR_RED
var/last_check = 0
+/*
/obj/structure/cult_legacy/pylon/New()
..()
processing_objects.Add(src)
@@ -31,7 +32,6 @@
processing_objects.Remove(src)
..()
-
/obj/structure/cult_legacy/pylon/process()
if(!isbroken && world.time > last_check + 3 SECONDS)
last_check = world.time
@@ -41,7 +41,7 @@
src.visible_message("\the [src] mends some of \the [C]'s wounds.")
make_tracker_effects(get_turf(src), C)
C.health = min(C.maxHealth, C.health + 3) //Not quite as good as artificers
-
+*/
/obj/structure/cult_legacy/pylon/attack_hand(mob/M as mob)
attackpylon(M, 5)
diff --git a/code/datums/gamemode/factions/legacy_cult/narsie.dm b/code/datums/gamemode/factions/legacy_cult/narsie.dm
index b888f41c23c..f6d5526786f 100644
--- a/code/datums/gamemode/factions/legacy_cult/narsie.dm
+++ b/code/datums/gamemode/factions/legacy_cult/narsie.dm
@@ -52,14 +52,12 @@ var/global/list/narsie_list = list()
world << sound('sound/effects/wind/wind_5_1.ogg')
if(narnar)
narsie_spawn_animation()
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.progress(CULT_EPILOGUE)
if(!narsie_cometh)//so we don't initiate Hell more than one time.
- /* Checks if the gamemode was cult
- if(istype(ticker.mode, /datum/game_mode/cult))
- var/datum/game_mode/cult/mode_ticker = ticker.mode
- if (mode_ticker.objectives[mode_ticker.current_objective] == "eldergod")
- mode_ticker.third_phase()*/
- if (emergency_shuttle)
+ if (emergency_shuttle && !cult)//in case of Cult 3.0, the round will end after about 5 minutes
emergency_shuttle.incall()
emergency_shuttle.can_recall = 0
if(emergency_shuttle.endtime > world.timeofday + 1800 && emergency_shuttle.location != 1 && !emergency_shuttle.departed)
diff --git a/code/datums/gamemode/factions/legacy_cult/soulstone.dm b/code/datums/gamemode/factions/legacy_cult/soulstone.dm
index fa41bbe185e..13ae52a522a 100644
--- a/code/datums/gamemode/factions/legacy_cult/soulstone.dm
+++ b/code/datums/gamemode/factions/legacy_cult/soulstone.dm
@@ -337,6 +337,7 @@
cult.HandleRecruitedRole(newCultist)
newCultist.OnPostSetup()
newCultist.Greet(GREET_SOULSTONE)
+ newCultist.conversion["soulstone"] = user
//Pretty particles
var/turf/T1 = get_turf(target)
@@ -405,6 +406,7 @@
cult.HandleRecruitedRole(newCultist)
newCultist.OnPostSetup()
newCultist.Greet(GREET_SOULSTONE)
+ newCultist.conversion["soulstone"] = U
if("CONSTRUCT")
var/obj/structure/constructshell/T = target
var/obj/item/device/soulstone/C = src
diff --git a/code/datums/gamemode/objectives/bloodcult.dm b/code/datums/gamemode/objectives/bloodcult.dm
new file mode 100644
index 00000000000..b05062ad621
--- /dev/null
+++ b/code/datums/gamemode/objectives/bloodcult.dm
@@ -0,0 +1,192 @@
+
+/datum/objective/bloodcult_reunion
+ explanation_text = "The Reunion: Meet up with your fellow cultists, and erect an altar."
+ name = "Blood Cult: Prologue"
+ var/altar_built = FALSE
+
+/datum/objective/bloodcult_reunion/PostAppend()
+ message_admins("Blood Cult: A cult dedicated to Nar-Sie has formed aboard the station.")
+ return TRUE
+
+/datum/objective/bloodcult_reunion/IsFulfilled()
+ if (..())
+ return TRUE
+ return altar_built
+
+//////////////////////
+
+/datum/objective/bloodcult_followers
+ explanation_text = "The Followers: Perform the conversion ritual on X crew members."
+ name = "Blood Cult: ACT I"
+ var/convert_target = 4
+ var/conversions = 0
+
+/datum/objective/bloodcult_followers/PostAppend()
+ explanation_text = "The Followers: Perform the conversion ritual on [convert_target] crew members."
+ message_admins("Blood Cult: ACT I has begun.")
+ return TRUE
+
+/datum/objective/bloodcult_followers/IsFulfilled()
+ if (..())
+ return TRUE
+ return (conversions >= convert_target)
+
+//////////////////////
+
+/datum/objective/bloodcult_sacrifice
+ explanation_text = "The Sacrifice: Nar-Sie requires the flesh of X to breach reality. Sacrifice them at an altar using a cult blade."
+ name = "Blood Cult: ACT II"
+ var/mob/living/sacrifice_target = null
+ var/target_sacrificed = FALSE
+ var/list/failed_targets = list()
+
+/datum/objective/bloodcult_sacrifice/PostAppend()
+ sacrifice_target = find_target()
+ if (sacrifice_target)
+ var/target_role = ""
+ if (sacrifice_target.mind)
+ target_role = (sacrifice_target.mind.assigned_role=="MODE") ? "" : ", the ([sacrifice_target.mind.assigned_role]),"
+ if (iscultist(sacrifice_target))
+ target_role = ", the cultist,"
+ explanation_text = "The Sacrifice: Nar-Sie requires the flesh of [sacrifice_target.real_name][target_role] to breach reality. Sacrifice them at an altar using a cult blade."
+ message_admins("Blood Cult: ACT II has begun, the sacrifice target is [sacrifice_target.real_name][target_role].")
+ var/datum/faction/bloodcult/cult = faction
+ cult.target_change = TRUE
+ return TRUE
+ else
+ sleep(60 SECONDS)//kind of a failsafe should the entire server cooperate to cause this to occur, but that shouldn't logically ever happen anyway.
+ return PostAppend()
+
+/datum/objective/bloodcult_sacrifice/proc/replace_target()
+ find_target()
+ if (sacrifice_target)
+ var/target_role = ""
+ if (sacrifice_target.mind)
+ target_role = (sacrifice_target.mind.assigned_role=="MODE") ? "" : ", the ([sacrifice_target.mind.assigned_role]),"
+ if (iscultist(sacrifice_target))
+ target_role = ", the cultist,"
+ explanation_text = "The Sacrifice: Nar-Sie requires the flesh of [sacrifice_target.real_name][target_role] to breach reality. Sacrifice them at an altar using a cult blade."
+ message_admins("Blood Cult: The cult didn't sacrifice their target in time, a new target has been assigned, the new sacrifice target is [sacrifice_target.real_name][target_role].")
+ var/datum/faction/bloodcult/cult = faction
+ cult.target_change = TRUE
+ return TRUE
+ else
+ sleep(60 SECONDS)//kind of a failsafe should the entire server cooperate to cause this to occur, but that shouldn't logically ever happen anyway.
+ return replace_target()
+
+/datum/objective/bloodcult_sacrifice/proc/find_target()
+ var/list/possible_targets = list()
+ for(var/mob/living/carbon/human/player in player_list)
+ if(player.z != map.zMainStation)//We only look for people currently aboard the station
+ continue
+ //They may be dead, but we only need their flesh
+ possible_targets += player
+
+ if(!possible_targets.len)
+ message_admins("Blood Cult: Could not find a suitable sacrifice target. Trying again in a minute.")
+ return null
+
+ return pick(possible_targets - failed_targets)
+
+/datum/objective/bloodcult_sacrifice/IsFulfilled()
+ if (..())
+ return TRUE
+ return target_sacrificed
+
+//////////////////////
+
+/datum/objective/bloodcult_bloodbath
+ explanation_text = "The Blood Bath: The blood stones have risen. Spill blood accross the station's floors to fill them up before the crew destroys them all."
+ name = "Blood Cult: ACT III"
+ var/percent_bloodspill = 4//percent of all the station's simulated floors, you should keep it under 5.
+ var/target_bloodspill = 0//actual amount of bloodied floors to reach
+ var/max_bloodspill = 0//max amount of bloodied floors simultanously reached
+
+/datum/objective/bloodcult_bloodbath/PostAppend()
+ var/floor_count = 0
+ for(var/i = 1 to ((2 * world.view + 1)*WORLD_ICON_SIZE))
+ for(var/r = 1 to ((2 * world.view + 1)*WORLD_ICON_SIZE))
+ var/turf/tile = locate(i, r, map.zMainStation)
+ if(tile && istype(tile, /turf/simulated/floor) && !isspace(tile.loc) && !istype(tile.loc, /area/asteroid) && !istype(tile.loc, /area/mine) && !istype(tile.loc, /area/vault) && !istype(tile.loc, /area/prison) && !istype(tile.loc, /area/vox_trading_post))
+ floor_count++
+ target_bloodspill = round(floor_count * percent_bloodspill / 100)
+ target_bloodspill += rand(-20,20)
+ explanation_text = "The Blood Bath: The blood stones have risen. Spill blood accross [target_bloodspill] of the station's floors to fill them up before the crew destroys them all."
+ message_admins("Blood Cult: ACT III has begun. The cult has to spill blood over [target_bloodspill] floor tiles, out of the station's [floor_count] floor tiles.")
+ return TRUE
+
+/datum/objective/bloodcult_bloodbath/IsFulfilled()
+ if (..())
+ return TRUE
+ return (max_bloodspill >= target_bloodspill)
+
+//////////////////////
+
+/datum/objective/bloodcult_tearinreality
+ explanation_text = "The Tear in Reality: Chant around the anchor blood stone to stretch the breach enough so Nar-Sie may come through."
+ name = "Blood Cult: ACT IV"
+ var/obj/structure/cult/bloodstone/anchor = null
+ var/NARSIE_HAS_RISEN = FALSE
+
+/datum/objective/bloodcult_tearinreality/PostAppend()
+ for (var/obj/structure/cult/bloodstone/B in bloodstone_list)//One of healthiest blood stones will become the anchor.
+ if (!anchor || B.health > anchor.health)
+ anchor = B
+ else if (anchor && B.health == anchor.health)
+ anchor = pick(list(B,anchor))
+ anchor.health = 1200
+ anchor.maxHealth = 1200
+ anchor.set_animate()
+ var/turf/T = get_turf(anchor)
+ var/obj/structure/teleportwarp/TW = new (T)
+ TW.icon_state = "rune_seer"
+ TW.pixel_y = -60
+ anchor.anchor = TRUE
+ anchor.timeleft = 60
+ anchor.timetotal = anchor.timeleft
+
+ //Adding the anchor to the bloodstones holomap, so cultists can quickly go there to perform the final summoning
+ var/icon/updated_map = icon(extraMiniMaps[HOLOMAP_EXTRA_CULTMAP])
+ var/datum/holomap_marker/holomarker = new()
+ holomarker.id = HOLOMAP_MARKER_BLOODSTONE_ANCHOR
+ holomarker.filter = HOLOMAP_FILTER_CULT
+ holomarker.x = anchor.x
+ holomarker.y = anchor.y
+ holomarker.z = anchor.z
+ holomap_markers[HOLOMAP_MARKER_BLOODSTONE+"_\ref[anchor]"] = holomarker
+ if(holomarker.z == map.zMainStation && holomarker.filter & HOLOMAP_FILTER_CULT)
+ if(map.holomap_offset_x.len >= map.zMainStation)
+ updated_map.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8+map.holomap_offset_x[map.zMainStation] , holomarker.y-8+map.holomap_offset_y[map.zMainStation])
+ else
+ updated_map.Blend(icon(holomarker.icon,holomarker.id), ICON_OVERLAY, holomarker.x-8, holomarker.y-8)
+ extraMiniMaps[HOLOMAP_EXTRA_CULTMAP] = updated_map
+ for(var/obj/structure/cult/bloodstone/B in bloodstone_list)
+ B.holomap_datum.initialize_holomap(B.loc)
+
+ spawn()
+ anchor.dance_start()
+
+ message_admins("Blood Cult: ACT IV has begun.")
+ return TRUE
+
+/datum/objective/bloodcult_tearinreality/IsFulfilled()
+ if (..())
+ return TRUE
+ return NARSIE_HAS_RISEN
+
+//////////////////////
+
+/datum/objective/bloodcult_feast
+ explanation_text = "The Feast: This is your victory, you may take part in the celebrations of a work well done."
+ name = "Blood Cult: Epilogue"
+ var/timer = 300 SECONDS
+
+/datum/objective/bloodcult_feast/PostAppend()
+ message_admins("Blood Cult: The cult has won.")
+ spawn (timer)
+ var/datum/faction/bloodcult/cult = faction
+ cult.cult_win = TRUE
+ return TRUE
+
+/datum/objective/bloodcult_feast/IsFulfilled()
+ return TRUE//might expand on that later after release, if I ever get to implement my rework of post-NarSie.
diff --git a/code/datums/gamemode/role/cultist.dm b/code/datums/gamemode/role/cultist.dm
index 9dfd8570ada..8a4925d78e1 100644
--- a/code/datums/gamemode/role/cultist.dm
+++ b/code/datums/gamemode/role/cultist.dm
@@ -6,6 +6,7 @@
greets = list(GREET_DEFAULT,GREET_CUSTOM,GREET_ROUNDSTART,GREET_ADMINTOGGLE)
var/list/tattoos = list()
var/holywarning_cooldown = 0
+ var/list/conversion = list()
/datum/role/cultist/New(var/datum/mind/M, var/datum/faction/fac=null, var/new_id)
..()
@@ -31,6 +32,14 @@
blood_communion.Remove(src)
..()
+/datum/role/cultist/PostMindTransfer(var/mob/living/new_character)
+ . = ..()
+ update_cult_hud()
+ antag.current.add_language(LANGUAGE_CULT)
+ if(ishuman(antag.current) && !(locate(/spell/cult) in antag.current.spell_list))
+ antag.current.add_spell(new /spell/cult/trace_rune, "cult_spell_ready", /obj/abstract/screen/movable/spell_master/bloodcult)
+ antag.current.add_spell(new /spell/cult/erase_rune, "cult_spell_ready", /obj/abstract/screen/movable/spell_master/bloodcult)
+
/datum/role/cultist/process()
if (holywarning_cooldown > 0)
holywarning_cooldown--
@@ -62,6 +71,8 @@
to_chat(antag.current, "Wow, that pamphlet was very convincing, in fact you're like totally a cultist now, hail Nar-Sie!")//remember, debug item
if (GREET_SOULSTONE)
to_chat(antag.current, "Dark energies corrupt your soul, as the blood stone grants you a window to peer through the veil, you have become a cultist!")
+ if (GREET_SOULBLADE)
+ to_chat(antag.current, "Your soul has made its way into the blade's soul gem! The dark energies of the altar forge your mind into an instrument of the cult of Nar-Sie, be of assistance to your fellow cultists.")
if (GREET_RESURRECT)
to_chat(antag.current, "You were resurrected from beyond the veil by the followers of Nar-Sie, and are already familiar with their rituals! You have now joined their ranks as a cultist.")
else
@@ -73,6 +84,13 @@
to_chat(antag.current, "(Wiki Guide)")
to_chat(antag.current, "You find yourself to be well-versed in the runic alphabet of the cult.")
+ spawn(1)
+ if (faction)
+ var/datum/objective_holder/OH = faction.objective_holder
+ var/datum/objective/O = null
+ for (var/datum/objective/OB in OH.objectives)
+ O = OB//Gives us the most recent objective
+ to_chat(antag.current,"[O.name]: [O.explanation_text]")
/datum/role/cultist/update_antag_hud()
update_cult_hud()
diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm
index 1a0ebcea09a..b41a1e90ef7 100644
--- a/code/game/objects/effects/decals/cleanable.dm
+++ b/code/game/objects/effects/decals/cleanable.dm
@@ -35,11 +35,14 @@
D.holder = null
if(counts_as_blood)
- var/datum/faction/cult/narsie/blood_cult = find_active_faction_by_type(/datum/faction/cult/narsie)
- if(blood_cult)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.remove_bloody_floor(get_turf(src))
+ var/datum/faction/cult/narsie/legacy_cult = find_active_faction_by_type(/datum/faction/cult/narsie)
+ if(legacy_cult)
var/turf/T = get_turf(src)
if(T && (T.z == map.zMainStation))
- blood_cult.bloody_floors -= T
+ legacy_cult.bloody_floors -= T
..()
/obj/effect/decal/cleanable/proc/dry()
@@ -92,15 +95,18 @@
update_icon()
if(counts_as_blood)
- var/datum/faction/cult/narsie/blood_cult = find_active_faction_by_type(/datum/faction/cult/narsie)
- if(blood_cult)
+ var/datum/faction/bloodcult/cult = find_active_faction_by_type(/datum/faction/bloodcult)
+ if (cult)
+ cult.add_bloody_floor(get_turf(src))
+ var/datum/faction/cult/narsie/legacy_cult = find_active_faction_by_type(/datum/faction/cult/narsie)
+ if(legacy_cult)
var/turf/T = get_turf(src)
if(T && (T.z == map.zMainStation))//F I V E T I L E S
- if(!(locate("\ref[T]") in blood_cult.bloody_floors))
- blood_cult.bloody_floors += T
- blood_cult.bloody_floors[T] = T
- if (blood_cult.has_enough_bloody_floors())
- blood_cult.getNewObjective()
+ if(!(locate("\ref[T]") in legacy_cult.bloody_floors))
+ legacy_cult.bloody_floors += T
+ legacy_cult.bloody_floors[T] = T
+ if (legacy_cult.has_enough_bloody_floors())
+ legacy_cult.getNewObjective()
if(src.loc && isturf(src.loc))
for(var/obj/effect/decal/cleanable/C in src.loc)
if(C.type in absorbs_types && C != src)
diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm
index 214d7953538..40497e87ac9 100644
--- a/code/modules/admin/topic.dm
+++ b/code/modules/admin/topic.dm
@@ -551,8 +551,8 @@
blade.update_icon()
new_shade.status_flags |= GODMODE
new_shade.canmove = 0
- new_shade.name = "Shade of [M.real_name]"
- new_shade.real_name = "Shade of [M.real_name]"
+ new_shade.name = "[M.real_name] the Shade"
+ new_shade.real_name = "[M.real_name]"
new_shade.give_blade_powers()
if("blob")
var/obj/effect/blob/core/core = new(loc = get_turf(M), new_overmind = M.client)
diff --git a/code/modules/clothing/masks/mystic.dm b/code/modules/clothing/masks/mystic.dm
index 006f8e29b4e..91cab17d720 100644
--- a/code/modules/clothing/masks/mystic.dm
+++ b/code/modules/clothing/masks/mystic.dm
@@ -70,8 +70,8 @@ var/list/has_been_shade = list()
has_been_shade.Add(M.mind)
var/mob/dead/observer/G = M.ghostize(1)
var/mob/living/simple_animal/shade/happiest/S = G.transmogrify(/mob/living/simple_animal/shade/happiest, TRUE)
- S.name = "Shade of [M.real_name]"
- S.real_name = "Shade of [M.real_name]"
+ S.name = "[M.real_name] the Shade"
+ S.real_name = "[M.real_name]"
S.cancel_camera()
flick("happiest_flash", src)
to_chat(H, "Oh joy! [M.real_name]'s decided to join the party!")
diff --git a/code/modules/html_interface/map/station_map.dm b/code/modules/html_interface/map/station_map.dm
index 2517aab133e..f9f0e8ffa17 100644
--- a/code/modules/html_interface/map/station_map.dm
+++ b/code/modules/html_interface/map/station_map.dm
@@ -1,5 +1,5 @@
#define HOLOMAP_OBSTACLE "#FFFFFFDD"
-#define HOLOMAP_PATH "#66666699"
+#define HOLOMAP_PATH "# "
/datum/holomap_marker
var/x
diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm
index ad3296f89a3..29743817875 100644
--- a/code/modules/mob/dead/observer/observer.dm
+++ b/code/modules/mob/dead/observer/observer.dm
@@ -811,6 +811,9 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
if(C && C.members.len > config.cult_ghostwriter_req_cultists)
ghosts_can_write = 1
+ if (veil_thickness >= CULT_ACT_III)
+ ghosts_can_write = 1
+
if(!ghosts_can_write)
to_chat(src, "The veil is not thin enough for you to do that.")
return
diff --git a/code/modules/mob/living/carbon/human/death.dm b/code/modules/mob/living/carbon/human/death.dm
index 633e26b5427..3b768e443bd 100644
--- a/code/modules/mob/living/carbon/human/death.dm
+++ b/code/modules/mob/living/carbon/human/death.dm
@@ -50,6 +50,7 @@
shade.name = "[real_name] the Shade"
shade.real_name = "[real_name]"
mind.transfer_to(shade)
+ update_faction_icons()
to_chat(shade, "Dark energies rip your dying body appart, anchoring your soul inside the form of a Shade. You retain your memories, and devotion to the cult.")
if(species)
diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm
index a2544be0383..5d250a0a5ad 100644
--- a/code/modules/mob/living/carbon/species.dm
+++ b/code/modules/mob/living/carbon/species.dm
@@ -304,6 +304,7 @@ var/global/list/whitelisted_species = list("Human")
deform = 'icons/mob/human_races/r_def_manifested.dmi'
known_languages = list(LANGUAGE_HUMAN)
primitive = /mob/living/carbon/monkey
+ darksight = 3
has_organ = list(
"heart" = /datum/organ/internal/heart,
"lungs" = /datum/organ/internal/lungs,
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index ca7b1789907..848436f231f 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -138,30 +138,30 @@
mind.transfer_to(C)
to_chat(C, "The Geometer of Blood is overjoyed to be reunited with its followers, and accepts your body in sacrifice. As reward, you have been gifted with the shell of an Harvester.
Your tendrils can use and draw runes without need for a tome, your eyes can see beings through walls, and your mind can open any door. Use these assets to serve Nar-Sie and bring him any remaining living human in the world.
You can teleport yourself back to Nar-Sie along with any being under yourself at any time using your \"Harvest\" spell.")
dust()
- else if(client)
- var/datum/faction/cult/narsie/cult_fact = find_active_faction_by_type(/datum/faction/cult/narsie)
- if (cult_fact)
- cult_fact.harvested++
- var/mob/dead/G = (ghostize())
- G.icon = 'icons/mob/mob.dmi'
- G.icon_state = "ghost-narsie"
- G.overlays = 0
- if(istype(G.mind.current, /mob/living/carbon/human/))
- var/mob/living/carbon/human/H = G.mind.current
- G.overlays += H.obj_overlays[ID_LAYER]
- G.overlays += H.obj_overlays[EARS_LAYER]
- G.overlays += H.obj_overlays[SUIT_LAYER]
- G.overlays += H.obj_overlays[GLASSES_LAYER]
- G.overlays += H.obj_overlays[GLASSES_OVER_HAIR_LAYER]
- G.overlays += H.obj_overlays[BELT_LAYER]
- G.overlays += H.obj_overlays[BACK_LAYER]
- G.overlays += H.obj_overlays[HEAD_LAYER]
- G.overlays += H.obj_overlays[HANDCUFF_LAYER]
- G.invisibility = 0
- to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.")
-
- else
- dust()
+ else if(!iscultist(src))
+ if(client)
+ var/datum/faction/cult/narsie/cult_fact = find_active_faction_by_type(/datum/faction/cult/narsie)
+ if (cult_fact)
+ cult_fact.harvested++
+ var/mob/dead/G = (ghostize())
+ G.icon = 'icons/mob/mob.dmi'
+ G.icon_state = "ghost-narsie"
+ G.overlays = 0
+ if(istype(G.mind.current, /mob/living/carbon/human/))
+ var/mob/living/carbon/human/H = G.mind.current
+ G.overlays += H.obj_overlays[ID_LAYER]
+ G.overlays += H.obj_overlays[EARS_LAYER]
+ G.overlays += H.obj_overlays[SUIT_LAYER]
+ G.overlays += H.obj_overlays[GLASSES_LAYER]
+ G.overlays += H.obj_overlays[GLASSES_OVER_HAIR_LAYER]
+ G.overlays += H.obj_overlays[BELT_LAYER]
+ G.overlays += H.obj_overlays[BACK_LAYER]
+ G.overlays += H.obj_overlays[HEAD_LAYER]
+ G.overlays += H.obj_overlays[HANDCUFF_LAYER]
+ G.invisibility = 0
+ to_chat(G, "You feel relieved as what's left of your soul finally escapes its prison of flesh.")
+ spawn(1)
+ dust()
/mob/living/apply_beam_damage(var/obj/effect/beam/B)
var/lastcheck=last_beamchecks["\ref[B]"]
diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm
index 5a24dcd22a3..50df24193f9 100644
--- a/code/modules/mob/living/simple_animal/constructs.dm
+++ b/code/modules/mob/living/simple_animal/constructs.dm
@@ -105,12 +105,10 @@
var/turf/T = get_turf(src)
if (T)
var/mob/living/simple_animal/shade/shade = new (T)
- var/true_name = "a nobody"
- if (real_name && real_name != "unknown")
- true_name = real_name
- shade.name = "Shade of [true_name]"
- shade.real_name = "Shade of [true_name]"
+ shade.name = "[real_name] the Shade"
+ shade.real_name = "[real_name]"
mind.transfer_to(shade)
+ update_faction_icons()
to_chat(shade, "Dark energies rip your dying body appart, anchoring your soul inside the form of a Shade. You retain your memories, and devotion to the cult.")
else
ghostize()
diff --git a/code/modules/mob/living/simple_animal/shade.dm b/code/modules/mob/living/simple_animal/shade.dm
index ecacea32beb..0fb3da80d27 100644
--- a/code/modules/mob/living/simple_animal/shade.dm
+++ b/code/modules/mob/living/simple_animal/shade.dm
@@ -31,6 +31,10 @@
meat_type = /obj/item/weapon/ectoplasm
mob_property_flags = MOB_SUPERNATURAL
+/mob/living/simple_animal/construct/New()
+ ..()
+ add_language(LANGUAGE_CULT)
+
/mob/living/simple_animal/shade/Login()
..()
hud_used.shade_hud()
diff --git a/code/modules/spells/aoe_turf/conjure/construct.dm b/code/modules/spells/aoe_turf/conjure/construct.dm
index 506be40af52..7015333357e 100644
--- a/code/modules/spells/aoe_turf/conjure/construct.dm
+++ b/code/modules/spells/aoe_turf/conjure/construct.dm
@@ -23,13 +23,23 @@
summon_type = list(/obj/structure/constructshell/cult)
hud_state = "const_shell"
override_base = "cult"
+ cast_delay = 40
+
+/spell/aoe_turf/conjure/construct/lesser/alt
+ summon_type = list(/obj/structure/constructshell/cult/alt)
+ hud_state = "const_shell_alt"
+
+/spell/aoe_turf/conjure/construct/lesser/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ delay_animation = new /obj/effect/artificer_underlay(get_turf(user))
+ playsound(user, 'sound/items/welder.ogg', 100, 1)
+ . = ..()
/spell/aoe_turf/conjure/floor
name = "Floor Construction"
desc = "This spell constructs a cult floor"
user_type = USER_TYPE_CULT
- charge_max = 20
+ charge_max = 50
spell_flags = Z2NOCAST | CONSTRUCT_CHECK
invocation = "none"
invocation_type = SpI_NONE
@@ -43,6 +53,18 @@
/spell/aoe_turf/conjure/floor/choose_targets(mob/user = usr)
return list(get_turf(user))
+/spell/aoe_turf/conjure/floor/cast(list/targets, mob/user)//if we convert a floor instead of building one from scratch, the charge time for the next cast is lowered.
+ var/turf/spawn_place = pick(targets)
+ var/convert_floor = 0
+ if (istype(spawn_place,/turf/simulated/floor))
+ convert_floor = 1
+ . = ..()
+ if (!.)
+ if (convert_floor)
+ charge_max = 10
+ else
+ charge_max = 50
+
/spell/aoe_turf/conjure/floor/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
animation.icon_state = "cultfloor"
flick("cultfloor",animation)
@@ -70,6 +92,18 @@
/spell/aoe_turf/conjure/wall/choose_targets(mob/user = usr)
return list(get_turf(user))
+/spell/aoe_turf/conjure/wall/cast(list/targets, mob/user)//if we convert a wall instead of building one from scratch, the charge time for the next cast is lowered.
+ var/turf/spawn_place = pick(targets)
+ var/convert_wall = 0
+ if (istype(spawn_place,/turf/simulated/wall))
+ convert_wall = 1
+ . = ..()
+ if (!.)
+ if (convert_wall)
+ charge_max = 20
+ else
+ charge_max = 100
+
/spell/aoe_turf/conjure/wall/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
animation.icon_state = "cultwall"
flick("cultwall",animation)
@@ -78,6 +112,33 @@
qdel(animation)
animation = null
+/spell/aoe_turf/conjure/door
+ name = "Cult Door"
+ desc = "This spell constructs a cult wall"
+ user_type = USER_TYPE_CULT
+
+ charge_max = 100
+ spell_flags = Z2NOCAST | CONSTRUCT_CHECK
+ invocation = "none"
+ invocation_type = SpI_NONE
+ range = 3
+ summon_type = list(/obj/machinery/door/mineral/cult)
+
+ override_base = "cult"
+ hud_state = "const_door"
+ cast_sound = 'sound/items/welder.ogg'
+
+/spell/aoe_turf/conjure/door/choose_targets(mob/user = usr)
+ return list(get_turf(user))
+
+/spell/aoe_turf/conjure/door/conjure_animation(var/atom/movable/overlay/animation, var/turf/target)
+ animation.icon_state = ""
+ flick("",animation)
+ shadow(target,holder.loc,"artificer_convert")
+ spawn(10)
+ qdel(animation)
+ animation = null
+
/spell/aoe_turf/conjure/wall/reinforced
name = "Greater Construction"
desc = "This spell constructs a reinforced metal wall"
@@ -93,6 +154,9 @@
summon_type = list(/turf/simulated/wall/r_wall)
+/spell/aoe_turf/conjure/wall/reinforced/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ . = ..()
+
/spell/aoe_turf/conjure/soulstone
name = "Summon Soulstone"
desc = "This spell reaches into Nar-Sie's realm, summoning one of the legendary fragments across time and space"
@@ -103,12 +167,18 @@
invocation = "none"
invocation_type = SpI_NONE
range = 0
+ cast_delay = 30
summon_type = list(/obj/item/device/soulstone)
hud_state = "const_stone"
override_base = "cult"
+/spell/aoe_turf/conjure/soulstone/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ delay_animation = new /obj/effect/artificer_underlay(get_turf(user))
+ playsound(user, 'sound/items/welder.ogg', 100, 1)
+ . = ..()
+
/spell/aoe_turf/conjure/pylon
name = "Red Pylon"
desc = "This spell conjures a fragile crystal from Nar-Sie's realm. Makes for a convenient light source."
@@ -119,6 +189,7 @@
invocation = "none"
invocation_type = SpI_NONE
range = 0
+ cast_delay = 20
summon_type = list(/obj/structure/cult_legacy/pylon)
@@ -126,6 +197,11 @@
hud_state = "const_pylon"
override_base = "cult"
+/spell/aoe_turf/conjure/pylon/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ delay_animation = new /obj/effect/artificer_underlay(get_turf(user))
+ playsound(user, 'sound/items/welder.ogg', 100, 1)
+ . = ..()
+
/spell/aoe_turf/conjure/pylon/cast(list/targets)
..()
var/turf/spawn_place = pick(targets)
@@ -296,6 +372,7 @@
invocation = "none"
invocation_type = SpI_NONE
range = 0
+ cast_delay = 60
summon_type = list(/mob/living/simple_animal/hostile/hex)
override_base = "cult"
@@ -305,6 +382,11 @@
/spell/aoe_turf/conjure/hex/choose_targets(mob/user = usr)
return list(get_turf(user))
+/spell/aoe_turf/conjure/hex/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ delay_animation = new /obj/effect/artificer_underlay(get_turf(user))
+ playsound(user, 'sound/items/welder.ogg', 100, 1)
+ . = ..()
+
/spell/aoe_turf/conjure/hex/before_channel(var/mob/user)
var/mob/living/simple_animal/construct/builder/perfect/artificer = user
if (artificer.minions.len >= 3)
@@ -326,6 +408,7 @@
invocation = "none"
invocation_type = SpI_NONE
range = 0
+ cast_delay = 60
summon_type = list(/obj/structure/cult/altar)
override_base = "cult"
@@ -335,6 +418,12 @@
/spell/aoe_turf/conjure/struct/choose_targets(mob/user = usr)
return list(get_turf(user))
+
+/spell/aoe_turf/conjure/struct/spell_do_after(var/mob/user as mob, delay as num, var/numticks = 5)
+ delay_animation = new /obj/effect/artificer_underlay(get_turf(user))
+ playsound(user, 'sound/items/welder.ogg', 100, 1)
+ . = ..()
+
/spell/aoe_turf/conjure/struct/before_channel(var/mob/user)
if (locate(/obj/structure/cult) in range(user,1))
to_chat(user, "You cannot perform this ritual that close from another similar structure.")
@@ -358,3 +447,26 @@
if("Forge")
summon_type = list(/obj/structure/cult/forge)
return 0
+
+/obj/effect/artificer_underlay
+ icon = 'icons/obj/cult.dmi'
+ icon_state = "build"
+ mouse_opacity = 0
+ density = 0
+ anchored = 1
+ mouse_opacity = 0
+
+/obj/effect/artificer_underlay/cultify()
+ return
+
+/obj/effect/artificer_underlay/ex_act()
+ return
+
+/obj/effect/artificer_underlay/emp_act()
+ return
+
+/obj/effect/artificer_underlay/blob_act()
+ return
+
+/obj/effect/artificer_underlay/singularity_act()
+ return
\ No newline at end of file
diff --git a/code/modules/spells/spell_code.dm b/code/modules/spells/spell_code.dm
index d6b46bf327c..1ce4c724ffc 100644
--- a/code/modules/spells/spell_code.dm
+++ b/code/modules/spells/spell_code.dm
@@ -97,6 +97,7 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
var/list/holiday_required = list() // The holiday this spell is restricted to ! Leave empty if none.
var/block = 0//prevents some spells from being spamed
+ var/obj/delay_animation = null
///////////////////////
///SETUP AND PROCESS///
@@ -158,8 +159,14 @@ var/list/spells = typesof(/spell) //needed for the badmin verb for now
return
if(cast_delay && !spell_do_after(user, cast_delay))
block = 0
+ if (delay_animation)
+ qdel(delay_animation)
+ delay_animation = null
return
block = 0
+ if (delay_animation)
+ qdel(delay_animation)
+ delay_animation = null
if(before_target(user))
return
diff --git a/icons/480x480.dmi b/icons/480x480.dmi
index 4370bb39ce0..30f62aa85ca 100644
Binary files a/icons/480x480.dmi and b/icons/480x480.dmi differ
diff --git a/icons/effects/effects.dmi b/icons/effects/effects.dmi
index 56c1d452b75..c66070068a5 100644
Binary files a/icons/effects/effects.dmi and b/icons/effects/effects.dmi differ
diff --git a/icons/holomap_markers.dmi b/icons/holomap_markers.dmi
index fc6530bfa82..0fe768164cc 100644
Binary files a/icons/holomap_markers.dmi and b/icons/holomap_markers.dmi differ
diff --git a/icons/mob/screen_spells.dmi b/icons/mob/screen_spells.dmi
index 1ec3818ef73..04bf25cc814 100644
Binary files a/icons/mob/screen_spells.dmi and b/icons/mob/screen_spells.dmi differ
diff --git a/icons/obj/cult.dmi b/icons/obj/cult.dmi
index 56bb268216b..4162f694ff0 100644
Binary files a/icons/obj/cult.dmi and b/icons/obj/cult.dmi differ
diff --git a/icons/obj/cult_64x64.dmi b/icons/obj/cult_64x64.dmi
index 4eaf4ab95b3..c018d7e8ac8 100644
Binary files a/icons/obj/cult_64x64.dmi and b/icons/obj/cult_64x64.dmi differ
diff --git a/icons/obj/cult_radial3.dmi b/icons/obj/cult_radial3.dmi
index f073bcb382d..5123717c948 100644
Binary files a/icons/obj/cult_radial3.dmi and b/icons/obj/cult_radial3.dmi differ
diff --git a/maps/RandomZLevels/Academy.dmm b/maps/RandomZLevels/Academy.dmm
index af4069c53da..59881ea45f3 100644
--- a/maps/RandomZLevels/Academy.dmm
+++ b/maps/RandomZLevels/Academy.dmm
@@ -38,7 +38,7 @@
"aL" = (/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aM" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
-"aO" = (/obj/structure/cult/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aO" = (/obj/structure/cult_legacy/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aP" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aQ" = (/obj/item/clothing/suit/space/rig/wizard,/obj/item/clothing/head/helmet/space/rig/wizard,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
"aR" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
@@ -256,7 +256,7 @@
"eV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"eW" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy)
"eX" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
-"eY" = (/obj/structure/cult/pylon,/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eY" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"eZ" = (/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fa" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/classrooms)
"fb" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/academy/classrooms)
@@ -264,7 +264,7 @@
"fd" = (/obj/structure/table,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
"fe" = (/obj/machinery/processor,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
"ff" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
-"fg" = (/obj/structure/cult/pylon,/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fg" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fh" = (/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
"fi" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/classrooms)
"fj" = (/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/academy/classrooms)
@@ -505,9 +505,9 @@
"jK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/shard,/obj/item/weapon/shard/plasma,/turf/simulated/floor/plating/airless,/area/awaymission/academy/academyaft)
"jL" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor{icon_state = "red"},/area/awaymission/academy/academyaft)
"jM" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/academy/academyaft)
-"jN" = (/obj/structure/cult/pylon,/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft)
+"jN" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft)
"jO" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/academyaft)
-"jP" = (/obj/structure/cult/pylon,/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"jP" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/academyaft)
"jQ" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
"jR" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
"jS" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/shard/plasma,/turf/space,/area)
diff --git a/maps/RandomZLevels/unused/backup/Academy.dmm b/maps/RandomZLevels/unused/backup/Academy.dmm
new file mode 100644
index 00000000000..af4069c53da
--- /dev/null
+++ b/maps/RandomZLevels/unused/backup/Academy.dmm
@@ -0,0 +1,694 @@
+"aa" = (/turf/space,/area)
+"ab" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/headmaster)
+"ac" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"ad" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"ae" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"af" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ag" = (/obj/structure/computerframe{anchored = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ah" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ai" = (/obj/structure/table/reinforced,/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aj" = (/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ak" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"al" = (/obj/structure/bed/chair/office/light{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"am" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/obj/machinery/power/apc{dir = 1; environ = 0; equipment = 3; locked = 0; req_access = ""},/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"an" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"ao" = (/obj/structure/table/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ap" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aq" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ar" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light/small,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"as" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"at" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"au" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"av" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/coffee,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aw" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"ax" = (/obj/structure/table/reinforced,/obj/item/weapon/paper{info = "We're upgrading to the latest mainframes for our consoles, the shipment should be in before spring break is over!"; name = "Console Maintenance"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ay" = (/turf/simulated/wall,/area/awaymission/academy/headmaster)
+"az" = (/obj/machinery/door/mineral/wood,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aA" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aB" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aC" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aD" = (/obj/item/weapon/stool,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aE" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/item/stack/sheet/animalhide/monkey,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aG" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/light/small{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aH" = (/obj/structure/bed,/obj/item/weapon/bedsheet/purple,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aI" = (/obj/structure/table/reinforced,/obj/item/weapon/reagent_containers/food/drinks/tea,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aJ" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aK" = (/obj/structure/filingcabinet,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aL" = (/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aM" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aO" = (/obj/structure/cult/tome,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aP" = (/obj/structure/bed/chair/wood/wings{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aQ" = (/obj/item/clothing/suit/space/rig/wizard,/obj/item/clothing/head/helmet/space/rig/wizard,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"aR" = (/obj/structure/table/reinforced,/obj/item/weapon/storage/briefcase,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aS" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"aT" = (/obj/structure/table/reinforced,/obj/item/weapon/coin/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aU" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aV" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aW" = (/obj/structure/lattice,/turf/space,/area)
+"aX" = (/obj/machinery/door/airlock/gold{locked = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aY" = (/obj/machinery/door/airlock/gold{locked = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"aZ" = (/turf/unsimulated/mineral/random/high_chance,/area/awaymission/academy)
+"ba" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/headmaster)
+"bb" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bc" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bd" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"be" = (/obj/structure/bed/chair/office/dark,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bf" = (/obj/structure/reagent_dispensers/water_cooler,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bg" = (/obj/machinery/photocopier,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bh" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bi" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bj" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bk" = (/obj/structure/table/woodentable,/obj/item/weapon/staff,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bl" = (/obj/structure/table/woodentable,/obj/item/weapon/hand_labeler,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bm" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/invisible,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bn" = (/obj/structure/bed/chair/office/dark{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bo" = (/obj/structure/table/woodentable,/obj/item/weapon/pen/red,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bp" = (/obj/structure/table/woodentable,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bq" = (/obj/structure/table/woodentable,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/weapon/dice/d20,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"br" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/tea,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bs" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bt" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bu" = (/obj/structure/bed/chair/office/dark{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bv" = (/obj/structure/table/woodentable,/obj/item/weapon/folder/blue,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bw" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"bx" = (/obj/structure/filingcabinet/chestdrawer,/turf/simulated/floor/wood,/area/awaymission/academy/headmaster)
+"by" = (/obj/machinery/door/airlock/gold,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bz" = (/obj/machinery/door/airlock/gold,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"bA" = (/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"bB" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/classrooms)
+"bC" = (/obj/machinery/door/poddoor/shutters{id_tag = "AcademyAuto"},/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"bD" = (/obj/machinery/door/poddoor/shutters{id_tag = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy/classrooms)
+"bE" = (/obj/machinery/door/poddoor/shutters{id_tag = "AcademyAuto"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"bF" = (/obj/machinery/door/poddoor/shutters{id_tag = "AcademyAuto"},/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/academy/classrooms)
+"bG" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/headmaster)
+"bH" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/academy/headmaster)
+"bI" = (/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"bJ" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy/classrooms)
+"bK" = (/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"bL" = (/turf/simulated/floor/plating{tag = "icon-warnplate (EAST)"; icon_state = "warnplate"; dir = 4},/area/awaymission/academy/classrooms)
+"bM" = (/obj/machinery/door_control{id_tag = "AcademyAuto"; pixel_y = 24},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"bN" = (/turf/simulated/wall,/area/awaymission/academy/classrooms)
+"bO" = (/turf/simulated/shuttle/wall{tag = "icon-swallc2"; icon_state = "swallc2"},/area/awaymission/academy/classrooms)
+"bP" = (/turf/simulated/shuttle/wall{tag = "icon-swall12"; icon_state = "swall12"; dir = 2},/area/awaymission/academy/classrooms)
+"bQ" = (/turf/simulated/shuttle/wall{tag = "icon-swallc1"; icon_state = "swallc1"},/area/awaymission/academy/classrooms)
+"bR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"bS" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/headmaster)
+"bT" = (/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/academy/headmaster)
+"bU" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"bV" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"bW" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"bX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"bY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"bZ" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"ca" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cb" = (/obj/abstract/map/spawner/mobs/spider,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cc" = (/obj/machinery/r_n_d/fabricator/mechanic_fab/autolathe,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cd" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
+"ce" = (/turf/simulated/shuttle/wall{tag = "icon-swall3"; icon_state = "swall3"; dir = 2},/area/awaymission/academy/classrooms)
+"cf" = (/obj/effect/decal/cleanable/ash,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
+"cg" = (/obj/structure/target_stake,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
+"ch" = (/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
+"ci" = (/obj/structure/target_stake,/obj/item/target/alien,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
+"cj" = (/obj/machinery/vending/cigarette,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"ck" = (/obj/structure/table,/obj/item/weapon/lighter/random,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"cl" = (/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"cm" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"cn" = (/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"co" = (/obj/machinery/portable_atmospherics/canister/plasma,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cp" = (/obj/item/weapon/stool,/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cq" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
+"cr" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"cs" = (/obj/machinery/door/airlock/plasma,/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"ct" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"cu" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"cv" = (/obj/machinery/computer/area_atmos/area,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"cw" = (/obj/machinery/portable_atmospherics/scrubber/huge/stationary,/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"cx" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cy" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/weapon/pen/red,/obj/machinery/light{dir = 8},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cz" = (/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cA" = (/turf/simulated/shuttle/wall{tag = "icon-swall1"; icon_state = "swall1"},/area/awaymission/academy/classrooms)
+"cB" = (/obj/structure/bed/chair,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"cC" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/headmaster)
+"cD" = (/obj/machinery/door/window{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"cE" = (/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"cF" = (/obj/machinery/door/window{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/headmaster)
+"cG" = (/obj/structure/table,/turf/simulated/floor{icon_state = "showroomfloor"},/area/awaymission/academy/headmaster)
+"cH" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cI" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"cJ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/academy/classrooms)
+"cK" = (/obj/item/target,/turf/simulated/floor/engine,/area/awaymission/academy/classrooms)
+"cL" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/classrooms)
+"cM" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"cN" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/headmaster)
+"cO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"cP" = (/obj/structure/sign/nosmoking_1,/turf/simulated/wall,/area/awaymission/academy/headmaster)
+"cQ" = (/obj/structure/table,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cR" = (/obj/item/stack/sheet/metal,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"cS" = (/turf/simulated/floor{icon_state = "red"; dir = 8},/area/awaymission/academy/classrooms)
+"cT" = (/turf/simulated/floor{dir = 1; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"cU" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/classrooms)
+"cV" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"cW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"cX" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/academy/classrooms)
+"cY" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHEAST)"; icon_state = "warnplate"; dir = 6},/area/awaymission/academy/classrooms)
+"cZ" = (/turf/simulated/floor{icon_state = "red"; dir = 10},/area/awaymission/academy/classrooms)
+"da" = (/turf/simulated/floor{icon_state = "red"},/area/awaymission/academy/classrooms)
+"db" = (/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/academy/classrooms)
+"dc" = (/obj/machinery/light{dir = 8},/obj/machinery/portable_atmospherics/pump,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"dd" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen,/obj/item/weapon/tank/oxygen/red,/turf/simulated/floor{icon_state = "dark"},/area/awaymission/academy/headmaster)
+"de" = (/obj/structure/closet/crate,/obj/item/weapon/crowbar/red,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/headmaster)
+"df" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dg" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
+"di" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dj" = (/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dk" = (/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dl" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dm" = (/obj/structure/table/woodentable,/obj/item/weapon/staff,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dn" = (/obj/machinery/light{dir = 4},/turf/simulated/floor,/area/awaymission/academy/headmaster)
+"do" = (/turf/simulated/floor{dir = 9; icon_state = "green"},/area/awaymission/academy/classrooms)
+"dp" = (/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
+"dq" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
+"dr" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor{dir = 1; icon_state = "green"},/area/awaymission/academy/classrooms)
+"ds" = (/turf/simulated/floor{dir = 5; icon_state = "green"},/area/awaymission/academy/classrooms)
+"dt" = (/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"du" = (/obj/machinery/gibber,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"dv" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"dw" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dx" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/awaymission/academy/classrooms)
+"dy" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dz" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dA" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/classrooms)
+"dB" = (/obj/item/weapon/stool,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dC" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/eggyseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dD" = (/obj/machinery/portable_atmospherics/hydroponics,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dE" = (/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
+"dF" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/effect/landmark{name = "awaystart"},/obj/item/weapon/weldingtool,/obj/machinery/light{dir = 8},/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dG" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dH" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dI" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dJ" = (/turf/simulated/floor/grass,/area/awaymission/academy/headmaster)
+"dK" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dL" = (/obj/structure/closet/crate/hydroponics/prespawned,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dM" = (/obj/machinery/door/airlock/freezer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"dN" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"dO" = (/obj/machinery/mech_bay_recharge_port,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"dP" = (/obj/machinery/computer/mech_bay_power_console,/obj/structure/cable,/turf/simulated/floor/greengrid,/area/awaymission/academy/classrooms)
+"dQ" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/dionanode,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dR" = (/obj/structure/table/woodentable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dS" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dT" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"dU" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dV" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"dW" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/item/seeds/bluespacetomatoseed,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dX" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"dY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "green"; dir = 4},/area/awaymission/academy/classrooms)
+"dZ" = (/obj/machinery/door/airlock/freezer,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"ea" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"eb" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"ec" = (/obj/structure/kitchenspike,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"ed" = (/obj/machinery/door/mineral/iron,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"ee" = (/obj/machinery/door/mineral/iron,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"ef" = (/obj/machinery/door/mineral/wood,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"eg" = (/obj/machinery/seed_extractor,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"eh" = (/obj/structure/cable,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"ei" = (/obj/structure/closet/crate/freezer,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"ej" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"ek" = (/obj/machinery/igniter,/obj/machinery/light{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"el" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"em" = (/turf/simulated/floor{icon_state = "yellowcorner"},/area/awaymission/academy/classrooms)
+"en" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eo" = (/turf/simulated/floor{dir = 8; icon_state = "yellowcorner"},/area/awaymission/academy/classrooms)
+"ep" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eq" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"er" = (/obj/structure/noticeboard{pixel_y = 32},/obj/item/weapon/paper{name = "Automotive Repair 101"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"es" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"et" = (/obj/structure/noticeboard{pixel_y = 32},/obj/item/weapon/paper{name = "Pyromancy 250"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"eu" = (/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"ev" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; environ = 3; equipment = 3; locked = 0; req_access = ""},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"ew" = (/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"ex" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"ey" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"ez" = (/turf/simulated/floor{tag = "icon-green (SOUTHWEST)"; icon_state = "green"; dir = 10},/area/awaymission/academy/classrooms)
+"eA" = (/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/academy/classrooms)
+"eB" = (/obj/machinery/light,/turf/simulated/floor{tag = "icon-green"; icon_state = "green"},/area/awaymission/academy/classrooms)
+"eC" = (/obj/machinery/vending/hydroseeds{slogan_delay = 700},/obj/machinery/light,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"eD" = (/obj/machinery/vending/hydronutrients,/turf/simulated/floor{icon_state = "green"; dir = 6},/area/awaymission/academy/classrooms)
+"eE" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"eF" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"eG" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eH" = (/obj/machinery/singularity/academy,/turf/space,/area)
+"eI" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/classrooms)
+"eJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"eK" = (/obj/machinery/door/mineral/wood,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"eL" = (/obj/machinery/door/airlock/freezer,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"eM" = (/turf/simulated/floor/plating{tag = "icon-warnplate (NORTHWEST)"; icon_state = "warnplate"; dir = 9},/area/awaymission/academy)
+"eN" = (/obj/machinery/door/airlock/glass,/obj/machinery/door/airlock/external,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"eO" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"eP" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"eQ" = (/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"eR" = (/obj/structure/bed/chair,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"eS" = (/obj/machinery/light{dir = 1},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"eT" = (/obj/structure/table/reinforced,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"eU" = (/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"eV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"eW" = (/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/awaymission/academy)
+"eX" = (/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eY" = (/obj/structure/cult/pylon,/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"eZ" = (/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fa" = (/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fb" = (/turf/simulated/floor{dir = 4; icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 1; icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fd" = (/obj/structure/table,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fe" = (/obj/machinery/processor,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"ff" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fg" = (/obj/structure/cult/pylon,/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fh" = (/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fi" = (/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fj" = (/turf/simulated/floor{icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "chapel"},/area/awaymission/academy/classrooms)
+"fl" = (/obj/machinery/door/mineral/wood,/turf/simulated/floor{icon_state = "bar"},/area/awaymission/academy/classrooms)
+"fm" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fn" = (/obj/structure/bed/chair,/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fo" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/snacks/spellburger,/obj/machinery/light{dir = 4},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fp" = (/turf/simulated/floor/plating{tag = "icon-warnplate (SOUTHWEST)"; icon_state = "warnplate"; dir = 10},/area/awaymission/academy)
+"fq" = (/obj/structure/window/reinforced,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"fr" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"fs" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"ft" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"fu" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"fv" = (/obj/machinery/door/mineral/wood,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "bar"},/area/awaymission/academy/classrooms)
+"fw" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fx" = (/obj/structure/table,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fy" = (/obj/structure/table/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fA" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fB" = (/obj/structure/table,/obj/machinery/microwave,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fC" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fD" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor{dir = 9; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fE" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fF" = (/obj/structure/table,/obj/item/trash/semki,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fG" = (/obj/structure/bed/chair{dir = 8},/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fH" = (/obj/structure/table,/obj/machinery/reagentgrinder,/turf/simulated/floor{dir = 8; icon_state = "barber"},/area/awaymission/academy/classrooms)
+"fI" = (/obj/machinery/igniter,/obj/machinery/light,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"fJ" = (/turf/simulated/floor{icon_state = "cautioncorner"; dir = 4},/area/awaymission/academy/classrooms)
+"fK" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{dir = 1; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fL" = (/turf/simulated/floor{dir = 1; icon_state = "yellowcorner"},/area/awaymission/academy/classrooms)
+"fM" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/classrooms)
+"fN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/noticeboard{pixel_y = -32},/obj/item/weapon/paper{name = "Biology Lab"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"fO" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"fP" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"fQ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light,/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/classrooms)
+"fR" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"fS" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "escape"; dir = 6},/area/awaymission/academy/classrooms)
+"fT" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"fU" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"fV" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"fW" = (/turf/simulated/wall,/area/awaymission/academy/academyaft)
+"fX" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"fY" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"fZ" = (/obj/abstract/map/spawner/mobs/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"ga" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gb" = (/obj/machinery/shieldwallgen,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gc" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
+"gd" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
+"ge" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 1},/area/awaymission/academy/classrooms)
+"gf" = (/obj/structure/bed/chair,/turf/simulated/floor{icon_state = "white"},/area/awaymission/academy/classrooms)
+"gg" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"gh" = (/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
+"gi" = (/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/academy/classrooms)
+"gj" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/academy/classrooms)
+"gk" = (/obj/structure/bed/chair,/turf/simulated/floor{tag = "icon-vault"; icon_state = "vault"},/area/awaymission/academy/classrooms)
+"gl" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
+"gm" = (/obj/structure/table/reinforced,/obj/machinery/light{dir = 1},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gn" = (/obj/item/target,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"go" = (/obj/structure/target_stake,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"gp" = (/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gq" = (/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gr" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; health = 1e+007},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gs" = (/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gt" = (/obj/structure/table,/obj/item/weapon/pen/red,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"gu" = (/obj/structure/table,/obj/item/weapon/scalpel,/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
+"gv" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"gw" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/engineering_hacking,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"gx" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"gy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
+"gz" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"gA" = (/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gB" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/recharger,/obj/structure/table/reinforced,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gC" = (/obj/structure/table/reinforced,/obj/item/weapon/pen/red,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gD" = (/obj/structure/filingcabinet/filingcabinet,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gE" = (/obj/machinery/door/window{dir = 4},/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gF" = (/obj/item/weapon/storage/box/monkeycubes,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gG" = (/obj/machinery/door/window{dir = 4},/obj/machinery/door/window{dir = 8},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gH" = (/obj/structure/table,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"gI" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
+"gJ" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gK" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gL" = (/obj/structure/table/reinforced,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gM" = (/obj/structure/target_stake,/obj/machinery/light,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"gN" = (/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gO" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "whitehall"; dir = 4},/area/awaymission/academy/classrooms)
+"gP" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/medical_cloning,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"gQ" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
+"gR" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gS" = (/obj/machinery/door/window{dir = 4},/obj/item/ammo_casing,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"gT" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"gU" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"gV" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"gW" = (/obj/structure/table,/obj/item/weapon/gun/projectile/shotgun/pump/sc_pump,/obj/item/weapon/paper{info = "Grade: A+ Educator's Notes: Excellent form."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gX" = (/obj/structure/table,/obj/item/weapon/gun/projectile/russian,/obj/item/weapon/paper{info = "Grade: B- Educator's Notes: Keep applying yourself, you're showing improvement."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gY" = (/obj/structure/table,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"gZ" = (/obj/structure/window/reinforced,/obj/item/ammo_casing,/turf/simulated/floor{icon_state = "delivery"; name = "floor"},/area/awaymission/academy/classrooms)
+"ha" = (/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"hb" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/hydroponics_pod_people,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"hc" = (/obj/structure/bookcase,/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/book/manual/security_space_law,/obj/item/weapon/book/manual/security_space_law,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"hd" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "grimy"},/area/awaymission/academy/academyaft)
+"he" = (/obj/item/weapon/stool,/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"hf" = (/obj/machinery/light,/turf/simulated/floor{dir = 4; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"hg" = (/obj/machinery/light/small{dir = 8},/mob/living/simple_animal/hostile/bear,/turf/simulated/floor/plating,/area/awaymission/academy/classrooms)
+"hh" = (/obj/machinery/door/mineral/iron,/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"hi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"hj" = (/obj/machinery/door/airlock/gold{locked = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/classrooms)
+"hk" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"hl" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"hm" = (/obj/structure/table,/obj/item/weapon/gun/energy/floragun,/obj/item/weapon/paper{info = "Grade: D- Educator's Notes: SEE ME AFTER CLASS."; name = "Summoning Midterm Exam"},/turf/simulated/floor{tag = "icon-vault (NORTHEAST)"; icon_state = "vault"; dir = 5},/area/awaymission/academy/classrooms)
+"hn" = (/obj/structure/closet/crate,/obj/item/stack/sheet/glass,/obj/item/target,/obj/item/target,/turf/simulated/floor,/area/awaymission/academy/classrooms)
+"ho" = (/obj/machinery/shieldwallgen,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/awaymission/academy/classrooms)
+"hp" = (/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/academy/classrooms)
+"hq" = (/obj/item/weapon/stool,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/academy/classrooms)
+"hr" = (/obj/machinery/light,/turf/simulated/floor{icon_state = "whitehall"; dir = 2},/area/awaymission/academy/classrooms)
+"hs" = (/obj/machinery/light,/turf/simulated/floor/wood,/area/awaymission/academy/classrooms)
+"ht" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/academyaft)
+"hu" = (/obj/machinery/door/mineral/wood,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"hv" = (/obj/machinery/door/mineral/wood,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"hw" = (/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hx" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hy" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hz" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hB" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hC" = (/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/power/apc{dir = 1; environ = 3; equipment = 3; locked = 0; req_access = ""},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hD" = (/obj/structure/grille,/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hE" = (/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/academyaft)
+"hF" = (/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hG" = (/obj/machinery/light{dir = 1},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hH" = (/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
+"hI" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"hJ" = (/obj/item/weapon/crowbar/red,/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
+"hK" = (/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hL" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hM" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hN" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"hO" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hP" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hQ" = (/obj/machinery/light{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hR" = (/obj/machinery/power/battery/smes/infinite,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hS" = (/obj/machinery/power/terminal{dir = 8},/obj/structure/cable{icon_state = "0-4"; d2 = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hT" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hU" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hV" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"hW" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hX" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"hY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{icon_state = "green"; dir = 8},/area/awaymission/academy/academyaft)
+"hZ" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"ia" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
+"ib" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"ic" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"id" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/item/weapon/caution,/turf/simulated/floor{tag = "icon-green (EAST)"; icon_state = "green"; dir = 4},/area/awaymission/academy/academyaft)
+"ie" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"if" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"ig" = (/obj/machinery/constructable_frame/machine_frame,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"ih" = (/obj/machinery/light{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"ii" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"ij" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"ik" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"il" = (/obj/structure/grille,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"im" = (/obj/structure/closet,/obj/item/candle,/obj/item/candle,/obj/item/weapon/storage/fancy/matchbox,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"in" = (/obj/structure/closet,/obj/item/weapon/storage/belt/soulstone,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"io" = (/obj/structure/closet,/obj/item/clothing/under/blackskirt,/obj/item/clothing/glasses/regular,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"ip" = (/obj/structure/closet,/obj/item/clothing/under/lightpurple,/obj/item/clothing/shoes/sandal,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iq" = (/obj/structure/closet,/obj/item/weapon/lipstick/random,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"ir" = (/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
+"is" = (/obj/structure/closet,/obj/item/clothing/under/lightpurple,/obj/item/weapon/staff,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"it" = (/obj/structure/closet,/obj/item/weapon/storage/wallet/random,/obj/item/clothing/glasses/regular/hipster,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iu" = (/obj/structure/closet,/obj/item/clothing/head/wizard/fake,/obj/item/clothing/suit/wizrobe/fake,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iv" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/drinks/beer,/obj/item/clothing/under/purple,/obj/item/mounted/poster,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iw" = (/obj/structure/closet,/obj/item/weapon/storage/box/snappops,/obj/item/weapon/storage/backpack,/obj/item/weapon/paper{info = "Current Grade: F. Educator's Notes: No improvement shown despite multiple private lessons. Suggest additional tutilage."; name = "Pyromancy Evaluation"},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"ix" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iy" = (/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/power/battery/smes/infinite,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"iA" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iB" = (/obj/structure/rack,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iC" = (/turf/simulated/floor/grass,/area/awaymission/academy/academyaft)
+"iD" = (/obj/structure/rack,/obj/item/weapon/circuitboard/telecomms/broadcaster,/obj/item/weapon/circuitboard/telecomms/receiver,/obj/item/weapon/circuitboard/telecomms/relay,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iE" = (/obj/abstract/map/spawner/mobs/humanoid/wiz,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iG" = (/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iH" = (/obj/structure/mirror{pixel_y = 28},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iI" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iJ" = (/obj/structure/rack,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/subspace/crystal,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/micro_laser/high,/obj/item/weapon/stock_parts/micro_laser/high,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iK" = (/obj/machinery/power/battery/smes/infinite,/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"iL" = (/obj/structure/rack,/obj/item/clothing/glasses/welding,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iM" = (/obj/machinery/door/mineral/iron,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iN" = (/obj/structure/rack,/obj/item/weapon/stock_parts/scanning_module,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/subspace/filter,/obj/item/weapon/stock_parts/subspace/ansible,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iO" = (/obj/item/weapon/stock_parts/manipulator,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iP" = (/obj/structure/rack,/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"iQ" = (/obj/structure/sink{icon_state = "sink"; dir = 8; pixel_x = -12; pixel_y = 2},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iR" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
+"iT" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
+"iU" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iV" = (/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iW" = (/obj/structure/rack,/obj/item/weapon/stock_parts/manipulator,/obj/item/weapon/stock_parts/subspace/filter,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"iX" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iY" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"iZ" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/rack,/obj/item/stack/sheet/metal,/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"ja" = (/obj/machinery/light{dir = 8},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"jb" = (/obj/machinery/light{dir = 4},/turf/simulated/floor{icon_state = "hydrofloor"},/area/awaymission/academy/academyaft)
+"jc" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"jd" = (/obj/item/weapon/paper,/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
+"je" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"jf" = (/obj/machinery/door/airlock/maintenance_hatch,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jg" = (/obj/item/device/multitool,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
+"jh" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
+"ji" = (/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
+"jj" = (/obj/structure/toilet{dir = 8},/obj/machinery/light/small{dir = 1},/obj/effect/decal/cleanable/vomit,/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"jk" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/wood,/area/awaymission/academy/academyaft)
+"jl" = (/obj/structure/toilet{dir = 4},/obj/machinery/light/small{dir = 1},/obj/effect/landmark{name = "awaystart"},/turf/simulated/floor{icon_state = "cafeteria"; dir = 2},/area/awaymission/academy/academyaft)
+"jm" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/engine,/area/awaymission/academy/academyaft)
+"jn" = (/obj/structure/shuttle/engine/heater,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jo" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/weapon/beach_ball/holoball,/turf/simulated/floor{icon_state = "red"; dir = 1},/area/awaymission/academy/academyaft)
+"jp" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor{icon_state = "red"; dir = 5},/area/awaymission/academy/academyaft)
+"jq" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jr" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"js" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
+"jt" = (/obj/structure/window/reinforced{dir = 1},/obj/structure/table,/obj/item/device/soulstone,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"ju" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_l"; icon_state = "propulsion_l"},/turf/space,/area/awaymission/academy/academyaft)
+"jv" = (/obj/structure/shuttle/engine/propulsion{tag = "icon-propulsion_r"; icon_state = "propulsion_r"},/turf/space,/area/awaymission/academy/academyaft)
+"jw" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jx" = (/turf/simulated/floor{icon_state = "red"; dir = 4},/area/awaymission/academy/academyaft)
+"jy" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jz" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
+"jA" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"jB" = (/obj/structure/table,/obj/item/clothing/glasses/scanner/meson/truesight,/obj/machinery/light/small{dir = 8},/turf/simulated/floor,/area/awaymission/academy/academyaft)
+"jC" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jD" = (/obj/structure/noticeboard,/turf/simulated/wall,/area/awaymission/academy/academyaft)
+"jE" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jF" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
+"jG" = (/obj/structure/table,/obj/item/organ/internal/brain{name = "The preserved brain of Harry Houdini"},/obj/machinery/light/small{dir = 4},/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"jH" = (/turf/simulated/floor{dir = 8; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"jI" = (/turf/simulated/floor{dir = 4; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"jJ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
+"jK" = (/obj/structure/grille,/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/item/weapon/shard,/obj/item/weapon/shard/plasma,/turf/simulated/floor/plating/airless,/area/awaymission/academy/academyaft)
+"jL" = (/obj/structure/window/reinforced,/obj/structure/table,/obj/item/weapon/reagent_containers/food/drinks/golden_cup,/turf/simulated/floor{icon_state = "red"},/area/awaymission/academy/academyaft)
+"jM" = (/obj/structure/window/reinforced,/turf/simulated/floor{icon_state = "red"; dir = 6},/area/awaymission/academy/academyaft)
+"jN" = (/obj/structure/cult/pylon,/turf/simulated/floor{icon_state = "yellow"; dir = 10},/area/awaymission/academy/academyaft)
+"jO" = (/turf/simulated/floor{icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"jP" = (/obj/structure/cult/pylon,/turf/simulated/floor{dir = 6; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"jQ" = (/obj/structure/window/reinforced,/turf/simulated/floor/airless{tag = "icon-white (EAST)"; icon_state = "white"; dir = 4},/area/awaymission/academy/academyaft)
+"jR" = (/obj/structure/table,/obj/structure/window/reinforced,/obj/item/device/batterer,/turf/simulated/floor/airless{tag = "icon-whitered (EAST)"; icon_state = "whitered"; dir = 4},/area/awaymission/academy/academyaft)
+"jS" = (/obj/item/weapon/shard{icon_state = "medium"},/obj/item/weapon/shard/plasma,/turf/space,/area)
+"jT" = (/obj/machinery/igniter,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jU" = (/obj/structure/window/reinforced,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jV" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academyaft)
+"jW" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jX" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jY" = (/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"jZ" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"ka" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_y = 0},/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"kb" = (/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"kc" = (/turf/simulated/floor{dir = 9; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"kd" = (/obj/machinery/light,/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"ke" = (/obj/machinery/light,/turf/simulated/floor{dir = 9; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"kf" = (/turf/simulated/floor{dir = 5; icon_state = "yellow"},/area/awaymission/academy/academyaft)
+"kg" = (/obj/machinery/door/airlock/hatch,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"kh" = (/obj/machinery/door/airlock/hatch,/turf/simulated/floor/carpet,/area/awaymission/academy/academyaft)
+"ki" = (/turf/simulated/wall/r_wall,/area/awaymission/academy/academygate)
+"kj" = (/obj/machinery/light/small{dir = 1},/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
+"kk" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kl" = (/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
+"km" = (/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kn" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 1},/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"ko" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kp" = (/obj/structure/grille,/obj/structure/window/reinforced/plasma,/obj/structure/window/reinforced/plasma{dir = 8},/obj/structure/window/reinforced/plasma{dir = 4},/obj/structure/window/full/reinforced/tinted,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kq" = (/obj/structure/window/reinforced,/turf/simulated/floor/grass,/area/awaymission/academy/academygate)
+"kr" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/window{dir = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"ks" = (/obj/machinery/door/window{dir = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"ku" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kv" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kw" = (/obj/structure/cable,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kx" = (/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"ky" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kz" = (/obj/machinery/power/apc{dir = 1; environ = 3; equipment = 3; locked = 0; req_access = ""},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kA" = (/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kB" = (/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kC" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kE" = (/obj/machinery/gateway{dir = 9},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kF" = (/obj/machinery/gateway{dir = 1},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kG" = (/obj/machinery/gateway{dir = 5},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kH" = (/obj/machinery/gateway{dir = 8},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kI" = (/obj/structure/cable,/obj/machinery/gateway/centeraway{calibrated = 0},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kJ" = (/obj/machinery/gateway{dir = 4},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kK" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kL" = (/obj/machinery/gateway,/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kM" = (/obj/machinery/gateway{dir = 6},/turf/simulated/floor/plating,/area/awaymission/academy/academygate)
+"kN" = (/obj/machinery/light,/turf/simulated/floor/carpet,/area/awaymission/academy/academygate)
+"kO" = (/obj/machinery/door_control{id_tag = "AcademyGate"; pixel_y = -24},/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
+"kP" = (/turf/simulated/floor/carpet{icon_state = "carpetsymbol"},/area/awaymission/academy/academygate)
+"kQ" = (/obj/machinery/door/poddoor/shutters{id_tag = "AcademyGate"},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplate"},/area/awaymission/academy/academygate)
+
+(1,1,1) = {"
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacadadadadadadaeabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababafagahagagaiagajababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababakajalajajajalajajamababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanaoajapajajaqarasasatauavanaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaxajajayayazayayayaAaBaCawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagaDajayaEaFaGaHayauaDagawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaIajaJayaKaLaMaLayaNajaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawagaDajayaOaPaLaQayauaDagawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaawaRajajayayayayayayauajaoawaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaSaTajajajajaUajaqasaBajahaSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababakajajajajajauajajaVababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWababababaXababaYababababaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWabbabbaLajaLaLauaLbbayabaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWabaLaLaLajaLbcaBaLaLaLabaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWbdaLajajajbeauajajajbfbdaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWabbgajajbhbibjbkajajblabaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaWabbmajbnbobpbqbrajajbsabaWaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaWaabdaLajajajajbtbuajajbvbdaaaWaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWabaWaWabaLbwaLaLajauaLaLbwbxabaWaWabaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaWaWaaaaabayayayaybybzayayayayabaaaaaWaWaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWaWaaaWaaaaabbAbAbAbAajaubAbAbAbAabaaaaaWaaaWaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaabBbCbDbEbEbFbCbBbBbBbBbBbBbBbBbBbBabbAbGbHbAajaubAbGbHbAababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaaaaaaaaaabBbBbIbJbKbKbLbIbMbNbObPbPbPbPbPbPbQaybRbSbTbAajaubAbSbTbUaybVbWbXbYbZancacbababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBccbIbKbKbKbKcdbIbNcecfcgchchcichceaybAcjckbAajaubAbAbAbAabclcmclayayawcncocpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcqbIbKcrbKbKbIbIbNcechchchcfchchceaybAbAbAbAajauajajajajcsctcucvaycwaScncacxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcycdbKbKbKbKbIczbNcAchchchchchchcAaybAcBcBbAajaucCajcCajabclcmclcDcEcFcncbcGabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcHbIbKbKbKcIbIbIbNcJcKchchchchchcLaybAcMcMbAajcNasasasascsbXcOctcPayancncacxabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcQbIbKbKcRbKbIcdbNcScTcTcTcTcTcTcUaybAcVbAbAajaubAbAbAbAabclctclctclawcocncpabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBcWbIcXbKbKcYbIcdbNcZdadadadadadadbaybAbGbHbAajaubAbGbHbAaydcclctdddeaScncbababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdfdgdhdhdhdhdibIbNdjdjdjdjdjdjdjdjaybAbSbTbAajaubAbSbTbAayayayayayayayayayabbBbBbBbBbBbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdkdkdkcdcdbIcWbIbNdjdjdldjdldjdmdjaybRbAbAbAajaubAbAbAdnaydodpdqdrdpdpdpdqdpdsbNdtdtdubBbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdvbIdwcdbIbIcWdxbNdjdjdydzdydjdydjayaLaLaLaLajauaLaLaLaLaydAdBdCbIdBdDbIbIbIdEbNdtdtdtdtbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdFdGdHdgdgdgdIczbNdjdjdjdjdldjdldjayaLdJdJaLajauaLdJdJaLaydAbIbIbIbIbIbIdKdLdEdMdtdtdtdNbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdObIdPcdbIbIcWbIbNdjdjdjdjdydjdydjayaLdJdJaLajauaLdJdJaLaydAdBdDbIdBdQbIdRdSdEbNdTdtdtdtbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBdkdkdkbIcdbIcWbIbNdUdjdjdjdjdjdjdVayaLdJdJaLajauaLdJdJaLaydAbIbIbIbIbIbIdWdXdYdZeaebdtecbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBbBbBbBbNbNbNedeebNbNbNefefbNbNbNbNbNayayayayayajauayayayayaydAdBdDbIbIegbIbIehdEbNeiejdtecbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBekelbBemeneoepeqereseteueueueueueveueseueueueuewexeueueueybNezeAeBeAeAeAbIbIeCeDbNeiejdteEbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBeFeFbBeGeHeIepeqeueueueueueueueueJeueueueueueueueJeueueueubNbNbNbNbNbNbNeKeKbNbNbNbNeLbNbBbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeMeNbKbKeObIePbIbIeqeuewewewewewewewexewewewewewewewexeweweweubNeQeQeQeReSeQeQeQeQeTeUeUeVeUbBbBaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeWbBbKbKeFeXeYeXeZeqeuewfafbewfafbewfcfbewfafbewfafbexfafbeweubNeQeQeQfdeQeQeQeQeQeTeUeUeVfebBaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeWbBbKbKeFfffgfffheqeuewfifjewfifjewfkfjewfifjewfifjexfifjeweufleQeQeQfmeQfneQeQeQeTeUeUeVfobBaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafpeNbKbKeObIfqbIbIeqeuewewewewewewewexewewewfrfsfsfsftfsfsfsfufvfwfwfwfwfwfxfwfwfwfyfzfzfAfBbBaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBeFeFbBfCeHfDepeqeueueueueueueueueJeueueueJeueueueueueueueubNeQfEfFfGeQfmeQeQeQeTeUeUeUfHbBaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBfIelbBfJfKfLepfMfNfufufufufOeueufPfufQfufReweueueweweueueybNeQeQeQeQfSeQeQeQeQeTeUeUeUbBbBaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBbBbBbBbBbBbNedeebNbNbNbNbNfTfUfUfVbNbNfWfXfYfWfWfYfYfWbNbNbNbNbNbNbNbNbNbNbNbNbNbNbNbBbBaWaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBfZbKbKgagbgcgdgegegfbNggdjdjdjdjdjbNghfXfYghghfYfYghbNgigjgkgigicSglgmgnbIbIbIgobBbBaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBgpgqbKgrgsbIbIbIgtgubNdjgvdjgwgxdjgagygzfYghghfYfYghbNgAgBgCgDgAcSbIgEbIbIbIbIbBbBaWaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaabBgFbKbKgGgsbIgHbIbIgIbNdjdldzdjdjdjgrghfYfYghghfYfYghbNgAgJgAgAgKcSglgLbIbIgMbBbBaWaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaabBgNgNgNgrgsbIdBbIbIgObNdUdydjgxgPdjgrghfYfYghghfYfYgQbNgRgJgAgAgAcSbIgSbIbIbBbBaWaaaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaabBgTgTgTgrgsbIgHbIgHgIbNdjgvdjdjdjdjfTgygUgVghghfYfYghbNgAgJgWgXgYcSgZgLgobBbBaWaaaaaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaaaaaaaaaaaabBbKhabKgGgsbIdBbIdBgIbNdjdldjhbhcdjbNhdfYfXghghfYfYghbNgAgJhehehecSbIhfbBbBaWaaaaaaaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaabBhgbKbKgrgsbIgHbIgHgIbNdjdydjdjdjdjhhfYfYhigygygUgUgUhjhkhlgYgYhmcShnbBbBaWaaaaaaaaaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBbKbKhafThohphqhrhqdtbNdjdjdjhsdjdjbNghfYfXghghfYfYghbNgAgAhehehecSbBbBaWaaaaaaaaaaaaaWaaaWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthththththththththththtfWfWfWfWfWfWfWfWfWhufWfWhvfWfWfWfWfWfWfWfWfWhthththththththththththtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwhxhyhyhzhAhBhChthDhthEhFhFhGhFhFhHfYhIfXfYfYfYhIfYhEhFhFhGhFhFhJhthDhthKhLhMhNhOhPhwhwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthQhRhShyhThFhUhVhWhXhWhYhZhZhZhZhZiagUgUibicgUgUgUgUhYhZhZhZhZhZidhWiehWhAifhKhFhwhwigihhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwiihwhwijhKhKikhtilhthEiminioipiqfWiririrfXfYiririrfWisitiuiviwhHhtilhtixiyhKhKhwhwhwhwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwizhShOiAhKhFiBhththtfWfWfWfWfWfWfWiriCirfXfYiriCirfWfWfWfWfWfWfWhththtiDhKiEhKhwhwighwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwiihwhwiFhKhKiBhtaahtiGiGiGiHiGiIfWiriCirfXfYiriCirfWiGiGiHiGiGiGhtaahtiJhKhFhKhwhwhwhwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwiKhShyifhKhKiLhtaahtiGiGiGiGiGiGiMiriCirfXfYiriCiriMiGiGiGiGiGiGhtaahtiNiOhKhKhwhwighwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthwhwhwhwhKhFhKiPhtaahtiQiGiGiRfWfWfWiSiCirfXfYiriCiTfWfWfWiUiGiGiVhtaahtiWhKhKhKhwhwhwhwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahththKhFhKhKhKhFikhtaahtiGiGiGiGiMiXfWiriCirfXfYiriCirfWiYiMiGiGiGiGhtaahtiZhFhKhKhKhFhKhthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthtjahKhFhFhKhKhtaahtiQiGiGiGfWfWfWiriCirfXfYiriCirfWfWfWiGiGiGiVhtaahthFhFhKhKhFjbhthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahththKhFhKhKhFhtaWhtiGiGiGiGiMjcfWjdiCirfXfYiriCirfWiYiMiGiGiGiGhtaWhthFhKhKhKjehthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthththtjfhthtaahtiQiGiGiRfWfWfWiriCirfXfYiriCirfWfWfWiUiGiGiVhtaahthtjfhthththtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtjgjhjijihtaWhtiGiGiGiGiMjjfWirirjkgzfYiririrfWjliMiGiGiGiGhtaWhtjijijhjmhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaaaahtjijijijihtaWhththtfWfWfWfWfWfWfWhufWfWhvfWfWfWfWfWfWfWhththtaWhtjijijijihtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaahtjnjnjnjnhtaaaaaahtjojpjqgyjrgUgUibgUgUgUgUgUgUgyjqjsjthtaaaaaahtjnjnjnjnhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaaaaaaaZaZaaaaaaaaaaaaaaaaaahtjujujujvhtaaaaaajwhFjxjyghfXfYfYfYfYfYfYfYfYfYghjyjzjAjwaaaaaahtjujujujvhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtjBjxjyghjCfWfWjDfWfWjDfWfWjEghjyjFjGhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajwhFjxjyghfXfYjHhFhFhFhFjIfYfYghjyjJjAjKaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaZaZaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtjLjMjyghfXfYjNjOjOjOjOjPfYfYghjyjQjRhtjSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthtjTjyghfXjUfYfYfYfYfYfYjUfYghjyjThthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthtjVghjWeHjXfYfYfYfYjYeHjXghjVhthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahthtghjZkagUgVfYfYfYfYkbfYghhthtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtghghghghfXfYfYfYghghghghhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtghkckdghfXfYfYfYghkekfghhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahtjwhththtkghthtkhhththtjwhtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikjkkklklkmkjkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaknklkkklklkmklknaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakoklkkklklkmklkoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakpkqkrkqkqkskqkpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikmktkukukukvkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikmkmkwkmkmkxkykzkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikmkmkAkBkxkxkxkCkDkmkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikmkxkxkEkFkGkxkxkxkmkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikmkxkxkHkIkJkxkxkxkmkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikmkmkxkKkLkMkxkxkmkmkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikNkmkxkxkxkxkmkNkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikOkxkxkxkxkPkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakikikQkQkQkQkikiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/_map.dm b/maps/_map.dm
index 02b3d4128f5..551685b467a 100644
--- a/maps/_map.dm
+++ b/maps/_map.dm
@@ -89,6 +89,8 @@
//Map elements that should be loaded together with this map. Stuff like the holodeck areas, etc.
var/list/load_map_elements = list()
var/snow_theme = 0
+ var/center_x = 226
+ var/center_y = 254
/datum/map/New()
. = ..()
diff --git a/maps/bagelstation.dm b/maps/bagelstation.dm
index fe8a882d0f2..08b421a2f96 100644
--- a/maps/bagelstation.dm
+++ b/maps/bagelstation.dm
@@ -31,6 +31,9 @@
/datum/map_element/dungeon/holodeck
)
+ center_x = 260
+ center_y = 236
+
//All security airlocks have randomized wires
/obj/machinery/door/airlock/glass_security/New()
diff --git a/maps/defficiency.dm b/maps/defficiency.dm
index 59c03363aad..05d17913f4e 100644
--- a/maps/defficiency.dm
+++ b/maps/defficiency.dm
@@ -59,6 +59,9 @@
/datum/map_element/dungeon/holodeck
)
+ center_x = 231
+ center_y = 249
+
//The central shuttle leads to both outposts
/datum/map/active/New()
. = ..()
diff --git a/maps/packedstation.dm b/maps/packedstation.dm
index 19517457b96..ed5b1a281bc 100644
--- a/maps/packedstation.dm
+++ b/maps/packedstation.dm
@@ -33,6 +33,9 @@
holomap_offset_x = list(0,0,0,86,4,0,0,)
holomap_offset_y = list(0,0,0,94,10,0,0,)
+ center_x = 221
+ center_y = 241
+
/datum/map/active/New()
.=..()
diff --git a/maps/randomvaults/asteroid_temple.dmm b/maps/randomvaults/asteroid_temple.dmm
index 02fd62ca430..f8aba80362b 100644
--- a/maps/randomvaults/asteroid_temple.dmm
+++ b/maps/randomvaults/asteroid_temple.dmm
@@ -21,7 +21,7 @@
"au" = (/turf/simulated/floor/wood,/area/vault/asteroid)
"av" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/vault/asteroid)
"aw" = (/obj/structure/bookcase,/mob/living/simple_animal/hostile/scarybat/book/woody,/turf/simulated/floor/wood,/area/vault/asteroid)
-"ax" = (/obj/effect/decal/cleanable/cockroach_remains,/obj/structure/cult/pylon,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"ax" = (/obj/effect/decal/cleanable/cockroach_remains,/obj/structure/cult_legacy/pylon,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/vault/asteroid)
"ay" = (/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
"az" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/cockroach_remains,/turf/simulated/floor/plating,/area/vault/asteroid)
"aA" = (/obj/structure/window/reinforced/plasma{dir = 4},/turf/simulated/floor/plating,/area/vault/asteroid)
@@ -42,8 +42,8 @@
"aP" = (/turf/simulated/floor/plating,/area/vault/asteroid)
"aQ" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/item/weapon/storage/fancy/matchbox/empty,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
"aR" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/wood,/area/vault/asteroid)
-"aS" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/vault/asteroid)
-"aT" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aS" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/vault/asteroid)
+"aT" = (/obj/structure/cult_legacy/pylon,/turf/simulated/floor/wood,/area/vault/asteroid)
"aU" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/remains/human,/obj/item/weapon/handcuffs,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/vault/asteroid)
"aW" = (/obj/structure/window/reinforced/plasma{dir = 4},/obj/effect/decal/cleanable/blood/writing{desc = "It looks like a writing in blood. The blood seems to have dried a long time ago."; message = "veniam petimus"; pixel_y = 32},/obj/effect/spider/stickyweb,/turf/simulated/floor/plating,/area/vault/asteroid)
@@ -64,10 +64,10 @@
"bl" = (/obj/structure/window/reinforced/plasma,/obj/structure/cage,/turf/simulated/floor/plating,/area/vault/asteroid)
"bm" = (/obj/structure/window/reinforced/plasma{dir = 4},/turf/simulated/wall/r_wall,/area/vault/asteroid)
"bn" = (/obj/structure/window/reinforced/plasma{dir = 8},/turf/simulated/wall/r_wall,/area/vault/asteroid)
-"bo" = (/obj/structure/cult/pylon,/obj/structure/window/reinforced/plasma,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bo" = (/obj/structure/cult_legacy/pylon,/obj/structure/window/reinforced/plasma,/turf/simulated/floor/plating,/area/vault/asteroid)
"bp" = (/obj/structure/window/reinforced/plasma,/obj/item/weapon/paper/crumpled/bloody{info = "Only one artifact is real, all the others are fake. Don't make the same mistake that I did..."},/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/vault/asteroid)
"bq" = (/turf/simulated/floor{icon_state = "dark"},/area/vault/asteroid)
-"br" = (/obj/structure/cult/talisman,/obj/effect/landmark/catechizer_spawn,/turf/simulated/floor{icon_state = "dark"},/area/vault/asteroid)
+"br" = (/obj/structure/cult_legacy/talisman,/obj/effect/landmark/catechizer_spawn,/turf/simulated/floor{icon_state = "dark"},/area/vault/asteroid)
"bs" = (/obj/effect/decal/remains/human,/turf/simulated/floor/carpet,/area/vault/asteroid)
"bt" = (/obj/structure/constructshell/cult,/turf/simulated/floor/carpet,/area/vault/asteroid)
"bu" = (/mob/living/simple_animal/hostile/faithless{faction = "mimic"; name = "The Guardian"},/turf/simulated/floor/carpet,/area/vault/asteroid)
diff --git a/maps/randomvaults/backup/asteroid_temple.dmm b/maps/randomvaults/backup/asteroid_temple.dmm
new file mode 100644
index 00000000000..02fd62ca430
--- /dev/null
+++ b/maps/randomvaults/backup/asteroid_temple.dmm
@@ -0,0 +1,100 @@
+"aa" = (/turf/space,/area)
+"ab" = (/obj/item/stack/sheet/metal,/turf/space,/area)
+"ac" = (/turf/simulated/wall,/area/vault/asteroid)
+"ad" = (/turf/space,/area/vault/asteroid)
+"ae" = (/obj/item/stack/sheet/metal,/turf/space,/area/vault/asteroid)
+"af" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating/airless,/area/vault/asteroid)
+"ag" = (/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg1"},/area/vault/asteroid)
+"ah" = (/turf/simulated/floor/plating/airless,/area/vault/asteroid)
+"ai" = (/obj/structure/lattice,/turf/space,/area/vault/asteroid)
+"aj" = (/obj/structure/cult/forge,/turf/simulated/floor/plating/airless{broken = 1; icon_state = "panelscorched"},/area/vault/asteroid)
+"ak" = (/turf/simulated/floor/plating/airless{broken = 1; icon_state = "panelscorched"},/area/vault/asteroid)
+"al" = (/obj/structure/catwalk,/turf/space,/area/vault/asteroid)
+"am" = (/obj/item/stack/tile/plasteel,/turf/simulated/floor/plating/airless{broken = 1; icon_state = "platingdmg1"},/area/vault/asteroid)
+"an" = (/obj/machinery/door/mineral/wood,/turf/simulated/floor/plating,/area/vault/asteroid)
+"ao" = (/obj/structure/lattice,/turf/space,/area)
+"ap" = (/turf/simulated/wall/r_wall,/area/vault/asteroid)
+"aq" = (/obj/structure/reagent_dispensers/bloodkeg,/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/vault/asteroid)
+"ar" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass,/obj/item/weapon/reagent_containers/food/drinks/ice{pixel_x = 12; pixel_y = 2},/turf/simulated/floor/wood,/area/vault/asteroid)
+"as" = (/obj/structure/table/woodentable,/turf/simulated/floor/wood,/area/vault/asteroid)
+"at" = (/obj/item/weapon/stool,/turf/simulated/floor/wood,/area/vault/asteroid)
+"au" = (/turf/simulated/floor/wood,/area/vault/asteroid)
+"av" = (/obj/structure/bookcase,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aw" = (/obj/structure/bookcase,/mob/living/simple_animal/hostile/scarybat/book/woody,/turf/simulated/floor/wood,/area/vault/asteroid)
+"ax" = (/obj/effect/decal/cleanable/cockroach_remains,/obj/structure/cult/pylon,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"ay" = (/obj/item/weapon/cigbutt,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
+"az" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/cockroach_remains,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aA" = (/obj/structure/window/reinforced/plasma{dir = 4},/turf/simulated/floor/plating,/area/vault/asteroid)
+"aB" = (/obj/item/weapon/shard{icon_state = "small"},/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/blood,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aC" = (/obj/item/weapon/stool,/turf/simulated/floor/carpet,/area/vault/asteroid)
+"aD" = (/turf/simulated/floor/carpet,/area/vault/asteroid)
+"aE" = (/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken6"},/area/vault/asteroid)
+"aF" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/structure/table/woodentable,/obj/item/candle,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aG" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aH" = (/obj/machinery/door/window/brigdoor{dir = 8; id_tag = ""; name = "Cell 1"; req_access_txt = "2"},/turf/simulated/floor/plating,/area/vault/asteroid)
+"aI" = (/obj/structure/window/reinforced/plasma{dir = 4},/obj/item/weapon/reagent_containers/food/snacks/meat/spiderleg,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aJ" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aK" = (/obj/item/weapon/reagent_containers/food/snacks/meat/roach,/obj/item/weapon/stool,/obj/effect/decal/remains/xeno{desc = "They look like the remains of something... unholy. They have a strange aura about them."},/turf/simulated/floor/plating,/area/vault/asteroid)
+"aL" = (/obj/item/weapon/storage/fancy/cigarettes,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aM" = (/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/plating,/area/vault/asteroid)
+"aN" = (/obj/item/weapon/shard/plasma,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aO" = (/obj/item/stack/rods,/turf/space,/area)
+"aP" = (/turf/simulated/floor/plating,/area/vault/asteroid)
+"aQ" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/item/weapon/storage/fancy/matchbox/empty,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aR" = (/obj/effect/decal/cleanable/blood/drip,/obj/effect/decal/cleanable/vomit,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aS" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood{broken = 1; icon_state = "wood-broken"},/area/vault/asteroid)
+"aT" = (/obj/structure/cult/pylon,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aU" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aV" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/remains/human,/obj/item/weapon/handcuffs,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aW" = (/obj/structure/window/reinforced/plasma{dir = 4},/obj/effect/decal/cleanable/blood/writing{desc = "It looks like a writing in blood. The blood seems to have dried a long time ago."; message = "veniam petimus"; pixel_y = 32},/obj/effect/spider/stickyweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aX" = (/obj/item/stack/medical/bruise_pack/tajaran,/obj/item/stack/medical/ointment/tajaran,/turf/simulated/floor/wood,/area/vault/asteroid)
+"aY" = (/obj/structure/cage/autoclose,/obj/item/weapon/cigbutt,/mob/living/simple_animal/hostile/giant_spider/hunter,/turf/simulated/floor/plating,/area/vault/asteroid)
+"aZ" = (/obj/machinery/door/window/brigdoor{dir = 8; id_tag = ""; name = "Cell 2"; req_access_txt = "2"},/obj/effect/spider/stickyweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"ba" = (/obj/structure/window/reinforced/plasma{dir = 4},/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bb" = (/obj/structure/window/reinforced/plasma{dir = 4},/turf/simulated/wall,/area/vault/asteroid)
+"bc" = (/obj/structure/window/reinforced/plasma{dir = 8},/turf/simulated/wall,/area/vault/asteroid)
+"bd" = (/obj/effect/decal/cleanable/cockroach_remains,/obj/effect/landmark/corpse/civilian,/mob/living/simple_animal/cockroach,/mob/living/simple_animal/cockroach,/mob/living/simple_animal/cockroach,/mob/living/simple_animal/cockroach,/turf/simulated/floor/plating,/area/vault/asteroid)
+"be" = (/obj/structure/window/barricade{dir = 8},/turf/simulated/floor/plating,/area/vault/asteroid)
+"bf" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/item/weapon/cigbutt,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bg" = (/obj/structure/window/reinforced{dir = 8},/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/spider/stickyweb,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bh" = (/obj/structure/window/reinforced/plasma{dir = 4},/obj/effect/spider/stickyweb,/obj/item/weapon/reagent_containers/food/snacks/meat/spiderleg,/obj/effect/decal/cleanable/cockroach_remains,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bi" = (/obj/structure/lattice,/obj/structure/window/reinforced/plasma{dir = 4},/turf/space,/area)
+"bj" = (/turf/simulated/floor{dir = 5; icon_state = "stage_stairs"},/area/vault/asteroid)
+"bk" = (/obj/structure/lattice,/obj/structure/window/reinforced/plasma{dir = 8},/turf/space,/area)
+"bl" = (/obj/structure/window/reinforced/plasma,/obj/structure/cage,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bm" = (/obj/structure/window/reinforced/plasma{dir = 4},/turf/simulated/wall/r_wall,/area/vault/asteroid)
+"bn" = (/obj/structure/window/reinforced/plasma{dir = 8},/turf/simulated/wall/r_wall,/area/vault/asteroid)
+"bo" = (/obj/structure/cult/pylon,/obj/structure/window/reinforced/plasma,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bp" = (/obj/structure/window/reinforced/plasma,/obj/item/weapon/paper/crumpled/bloody{info = "Only one artifact is real, all the others are fake. Don't make the same mistake that I did..."},/obj/effect/decal/remains/human,/turf/simulated/floor/plating,/area/vault/asteroid)
+"bq" = (/turf/simulated/floor{icon_state = "dark"},/area/vault/asteroid)
+"br" = (/obj/structure/cult/talisman,/obj/effect/landmark/catechizer_spawn,/turf/simulated/floor{icon_state = "dark"},/area/vault/asteroid)
+"bs" = (/obj/effect/decal/remains/human,/turf/simulated/floor/carpet,/area/vault/asteroid)
+"bt" = (/obj/structure/constructshell/cult,/turf/simulated/floor/carpet,/area/vault/asteroid)
+"bu" = (/mob/living/simple_animal/hostile/faithless{faction = "mimic"; name = "The Guardian"},/turf/simulated/floor/carpet,/area/vault/asteroid)
+
+(1,1,1) = {"
+aaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaacacacacacadadaeadacacacacacacaa
+aaaaaaacafagahahaiaeadaiahafajafagacaa
+aaaaaaacahakahahalaiaialamahagakahacaa
+aaaaaaacacanacacadadadadacacacanacacaa
+aaaaaaaaaoalaoaaaaaaaaaaaaaaaoalaoaaaa
+acacacacacanacacacacacaaaaapapanapapaa
+acaqarasatauauavawavacaaaaapaxayazaAaa
+acauaBaCaDaDaDaDaEauacaaaaapaFaGaHaIaa
+acaJauaDaDaDaDaDauauacaaaoapaKaLaMaNaO
+acaJauaDaDaDaDaDauaJanalalanaPaQapapaa
+acaRaSaDaDaDaDaDaTauacaaaoapaUaPaVaWaa
+acaXauauauauauauauauacapapapaYaPaZbaaa
+acacacacbbanbcacacacacapbdanbebfbgbhaa
+aaaaaaaabibjbkaaaaaaaaapapapblblapapaa
+aaaaaaaabibjbkaaaaaaaaaaaaaaaaaaaaaaaa
+aaaaaaaabibjbkaaaaaaaaaaaaaaaaaaaaaaaa
+apapapapbmbjbnapapapapaaaaaaaaaaaaaaaa
+apboapboapanapboapbpapaaaaaaaaaaaaaaaa
+apbqbqbqbqbqbqbqbqbqapaaaaaaaaaaaaaaaa
+apbrbqaDaDbsaDaDbqbrapaaaaaaaaaaaaaaaa
+apbqbqbtbsbubsbtbqbqapaaaaaaaaaaaaaaaa
+apbrbqaDaDbsaDaDbqbrapaaaaaaaaaaaaaaaa
+apapapapapapapapapapapaaaaaaaaaaaaaaaa
+"}
diff --git a/maps/roidstation.dm b/maps/roidstation.dm
index 0179166d362..9842743fdcf 100644
--- a/maps/roidstation.dm
+++ b/maps/roidstation.dm
@@ -33,6 +33,10 @@
holomap_offset_x = list(0,0,0,86,4,0,0,)
holomap_offset_y = list(0,0,0,94,10,0,0,)
+ center_x = 177
+ center_y = 193
+
+
////////////////////////////////////////////////////////////////
#include "roidstation/areas.dm"
#include "roidstation/pipes.dm" // More atmos layered pipes
diff --git a/maps/tgstation.dm b/maps/tgstation.dm
index cfc0e2e966e..af2b4c775e5 100644
--- a/maps/tgstation.dm
+++ b/maps/tgstation.dm
@@ -33,6 +33,9 @@
holomap_offset_x = list(0,0,0,86,4,0,0,)
holomap_offset_y = list(0,0,0,94,10,0,0,)
+ center_x = 226
+ center_y = 254
+
////////////////////////////////////////////////////////////////
#include "tgstation.dmm"
#endif
diff --git a/vgstation13.dme b/vgstation13.dme
index 2f83e917b05..65a2ff33ad0 100644
--- a/vgstation13.dme
+++ b/vgstation13.dme
@@ -71,7 +71,6 @@
#include "code\hub.dm"
#include "code\names.dm"
#include "code\world.dm"
-#include "code\modules\organs\internal\heart\heart.dm"
#include "code\__HELPERS\angles_dirs.dm"
#include "code\__HELPERS\clockwork.dm"
#include "code\__HELPERS\cmp.dm"
@@ -337,6 +336,7 @@
#include "code\datums\gamemode\objectives\absorb.dm"
#include "code\datums\gamemode\objectives\acquire_blood.dm"
#include "code\datums\gamemode\objectives\block.dm"
+#include "code\datums\gamemode\objectives\bloodcult.dm"
#include "code\datums\gamemode\objectives\convert_people.dm"
#include "code\datums\gamemode\objectives\custom.dm"
#include "code\datums\gamemode\objectives\die.dm"
@@ -1864,6 +1864,7 @@
#include "code\modules\organs\pain.dm"
#include "code\modules\organs\wound.dm"
#include "code\modules\organs\internal\eyes\eyes.dm"
+#include "code\modules\organs\internal\heart\heart.dm"
#include "code\modules\organs\internal\kidney\filter.dm"
#include "code\modules\organs\internal\liver\liver.dm"
#include "code\modules\organs\internal\lungs\filter.dm"