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 = {""} + 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"