From a4c356ad57dc42552a0e9f11faff0ddcbad62fff Mon Sep 17 00:00:00 2001 From: Putnam Date: Sun, 29 Dec 2019 21:28:09 -0800 Subject: [PATCH 1/8] added a cryo to the ghost cafe --- _maps/map_files/generic/CentCom.dmm | 41 ++++++++++++++++------------- code/game/machinery/cryopod.dm | 12 ++++++--- 2 files changed, 32 insertions(+), 21 deletions(-) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 7e095329af..0faf54151a 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -2108,10 +2108,6 @@ }, /turf/closed/indestructible/riveted, /area/space) -"fy" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/tdome/arena_source) "fz" = ( /turf/open/floor/plasteel, /area/tdome/arena_source) @@ -15117,10 +15113,6 @@ }, /turf/open/floor/plasteel, /area/tdome/tdomeobserve) -"Is" = ( -/obj/effect/turf_decal/delivery, -/turf/open/floor/plasteel, -/area/tdome/arena) "It" = ( /turf/open/floor/plasteel, /area/tdome/arena) @@ -16975,6 +16967,13 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"Oy" = ( +/obj/machinery/computer/cryopod{ + dir = 8; + pixel_x = 26 + }, +/turf/open/floor/wood, +/area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -18243,6 +18242,12 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"WB" = ( +/obj/machinery/cryopod/ghost_cafe{ + dir = 8 + }, +/turf/open/floor/wood, +/area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, /obj/item/pen, @@ -47762,9 +47767,9 @@ Xk Xk GY NT -Xk +Oy Ms -Xk +WB NT vt Mx @@ -60356,14 +60361,14 @@ GM HW HW Il -Is +IF IE IX Jh Jh Js IE -Is +IF JI JP JZ @@ -63954,14 +63959,14 @@ GM HW HW Il -Is +IF IJ IY Jk Jk Jt IJ -Is +IF JI JP Kc @@ -78178,14 +78183,14 @@ fa fn fr fx -fy +fF fE fL fN fN fS fE -fy +fF ab aa aa @@ -81776,14 +81781,14 @@ dA dA dA fx -fy +fF fJ fM fQ fQ fT fJ -fy +fF ab aa aa diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 98dd91d3bd..b26cae2fb0 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -177,6 +177,8 @@ // 15 minutes-ish safe period before being despawned. var/time_till_despawn = 15 * 600 // This is reduced by 90% if a player manually enters cryo var/despawn_world_time = null // Used to keep track of the safe period. + var/penalize_cryo = TRUE // Makes it so that players who cryo are not eligible for midround antags. + var/announce_cryo = TRUE // Makes it so when players cryo it's announced to the station var/obj/machinery/computer/cryopod/control_computer var/last_no_computer_message = 0 @@ -401,14 +403,14 @@ if(control_computer) control_computer.frozen_crew += "[mob_occupant.real_name]" - if(GLOB.announcement_systems.len) + if(GLOB.announcement_systems.len && announce_cryo) var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list()) visible_message("\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage.") // Ghost and delete the mob. if(!mob_occupant.get_ghost(1)) - mob_occupant.ghostize(FALSE, penalize = TRUE) + mob_occupant.ghostize(FALSE, penalize = penalize_cryo) QDEL_NULL(occupant) open_machine() @@ -491,4 +493,8 @@ //Attacks/effects. /obj/machinery/cryopod/blob_act() - return //Sorta gamey, but we don't really want these to be destroyed. \ No newline at end of file + return //Sorta gamey, but we don't really want these to be destroyed. + +/obj/machinery/cryopod/ghost_cafe + penalize_cryo = FALSE + announce_cryo = FALSE From 90ebbdfdb9c2d36212c3c796524a6a6b33264e4c Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 00:53:03 -0800 Subject: [PATCH 2/8] elements are so good. they're so good --- code/__HELPERS/game.dm | 8 +- code/_globalvars/misc.dm | 2 + .../datums/elements/ghost_role_eligibility.dm | 54 ++++++++++++++ .../dynamic/dynamic_rulesets_midround.dm | 74 ++++++++----------- code/game/objects/items/holy_weapons.dm | 4 +- .../objects/structures/ghost_role_spawners.dm | 2 + code/modules/admin/verbs/one_click_antag.dm | 14 ++-- code/modules/antagonists/blob/blob/powers.dm | 4 +- code/modules/client/client_defines.dm | 4 - code/modules/events/holiday/xmas.dm | 2 +- code/modules/mob/dead/observer/login.dm | 3 - code/modules/mob/dead/observer/observer.dm | 28 +------ .../living/simple_animal/guardian/guardian.dm | 8 +- tgstation.dme | 1 + 14 files changed, 111 insertions(+), 97 deletions(-) create mode 100644 code/datums/elements/ghost_role_eligibility.dm diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 222002f512..65c7145d8f 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -444,12 +444,8 @@ candidates -= M /proc/pollGhostCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE) - var/list/candidates = list() - - for(var/mob/dead/observer/G in GLOB.player_list) - if(G.can_reenter_round(TRUE)) - candidates += G - + var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(/datum/element/ghost_role_eligibility) + var/list/candidates = eligibility.get_all_ghost_role_eligible() return pollCandidates(Question, jobbanType, gametypeCheck, be_special_flag, poll_time, ignore_category, flashwindow, candidates) /proc/pollCandidates(Question, jobbanType, datum/game_mode/gametypeCheck, be_special_flag = 0, poll_time = 300, ignore_category = null, flashwindow = TRUE, list/group = null) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index af31e2b5a5..ec3593ee9d 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -23,6 +23,8 @@ GLOBAL_VAR_INIT(bsa_unlock, FALSE) //BSA unlocked by head ID swipes GLOBAL_LIST_EMPTY(player_details) // ckey -> /datum/player_details +GLOBAL_LIST_EMPTY(clientless_round_timeouts) // ckey -> time that ckey can rejoin round + // All religion stuff GLOBAL_VAR(religion) GLOBAL_VAR(deity) diff --git a/code/datums/elements/ghost_role_eligibility.dm b/code/datums/elements/ghost_role_eligibility.dm new file mode 100644 index 0000000000..8ecb579bc8 --- /dev/null +++ b/code/datums/elements/ghost_role_eligibility.dm @@ -0,0 +1,54 @@ +/datum/element/ghost_role_eligibility + element_flags = ELEMENT_DETACH + var/list/timeouts = list() + var/list/mob/eligible_mobs = list() + +/datum/element/ghost_role_eligibility/Attach(datum/target,penalize = FALSE) + . = ..() + if(!ismob(target)) + return ELEMENT_INCOMPATIBLE + var/mob/M = target + if(!(M in eligible_mobs)) + eligible_mobs += M + if(penalize) //penalizing them from making a ghost role / midround antag comeback right away. + var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES + var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES + if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed. + penalty += roundstart_quit_limit - world.time + if(penalty) + penalty += world.realtime + if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) + penalty = CANT_REENTER_ROUND + if(!(M.ckey in timeouts)) + timeouts += M.ckey + timeouts[M.ckey] = 0 + timeouts[M.ckey] = max(timeouts[M.ckey],penalty) + +/datum/element/ghost_role_eligibility/Detach(mob/M) + . = ..() + if(M in eligible_mobs) + eligible_mobs -= M + +/datum/element/ghost_role_eligibility/proc/get_all_ghost_role_eligible(silent = FALSE) + var/list/candidates = list() + for(var/m in eligible_mobs) + var/mob/M = m + if(M.can_reenter_round(TRUE)) + candidates += M + return candidates + +/mob/proc/can_reenter_round(silent = FALSE) + var/datum/element/ghost_role_eligibility/eli = SSdcs.GetElement(/datum/element/ghost_role_eligibility) + return eli.can_reenter_round(src,silent) + +/datum/element/ghost_role_eligibility/proc/can_reenter_round(var/mob/M,silent = FALSE) + if(!(M in eligible_mobs)) + return FALSE + if(!(M.ckey in timeouts)) + return TRUE + var/timeout = timeouts[M.ckey] + if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime) + return TRUE + if(!silent && M.client) + to_chat(M, "You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].") + return FALSE diff --git a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm index 91ac73d142..32c076b69a 100644 --- a/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm +++ b/code/game/gamemodes/dynamic/dynamic_rulesets_midround.dm @@ -17,10 +17,10 @@ var/list/living_antags = list() var/list/dead_players = list() var/list/list_observers = list() + var/list/ghost_eligible = list() /datum/dynamic_ruleset/midround/from_ghosts weight = 0 - required_type = /mob/dead/observer /// Whether the ruleset should call generate_ruleset_body or not. var/makeBody = TRUE @@ -34,6 +34,8 @@ living_players = trim_list(mode.current_players[CURRENT_LIVING_PLAYERS]) living_antags = trim_list(mode.current_players[CURRENT_LIVING_ANTAGS]) list_observers = trim_list(mode.current_players[CURRENT_OBSERVERS]) + var/datum/element/ghost_role_eligibility/eligibility = SSdcs.GetElement(/datum/element/ghost_role_eligibility) + ghost_eligible = trim_list(eligibility.get_all_ghost_role_eligible()) /datum/dynamic_ruleset/midround/proc/trim_list(list/L = list()) var/list/trimmed_list = L.Copy() @@ -70,6 +72,25 @@ continue return trimmed_list +/datum/dynamic_ruleset/midround/from_ghosts/trim_list(list/L = list()) + var/list/trimmed_list = L.Copy() + for(var/mob/M in trimmed_list) + if (!M.client) // Are they connected? + trimmed_list.Remove(M) + continue + if(!mode.check_age(M.client, minimum_required_age)) + trimmed_list.Remove(M) + continue + if(antag_flag_override) + if(!(antag_flag_override in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag_override)) + trimmed_list.Remove(M) + continue + else + if(!(antag_flag in M.client.prefs.be_special) || jobban_isbanned(M.ckey, antag_flag)) + trimmed_list.Remove(M) + continue + return trimmed_list + // You can then for example prompt dead players in execute() to join as strike teams or whatever // Or autotator someone @@ -91,11 +112,15 @@ return FALSE return TRUE +/datum/dynamic_ruleset/midround/from_ghosts/ready(forced = FALSE) + if (required_candidates > ghost_eligible.len) + SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") + return FALSE + return ..() + + /datum/dynamic_ruleset/midround/from_ghosts/execute() - var/list/possible_candidates = list() - possible_candidates.Add(dead_players) - possible_candidates.Add(list_observers) - var/application_successful = send_applications(possible_candidates) + var/application_successful = send_applications(ghost_eligible) return assigned.len > 0 && application_successful /// This sends a poll to ghosts if they want to be a ghost spawn from a ruleset. @@ -292,9 +317,6 @@ var/datum/mind/wizard /datum/dynamic_ruleset/midround/from_ghosts/wizard/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE if(GLOB.wizardstart.len == 0) log_admin("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") message_admins("Cannot accept Wizard ruleset. Couldn't find any wizard spawn points.") @@ -354,12 +376,6 @@ required_candidates = operative_cap[indice_pop] return ..() -/datum/dynamic_ruleset/midround/from_ghosts/nuclear/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE - return ..() - /datum/dynamic_ruleset/midround/from_ghosts/nuclear/finish_setup(mob/new_character, index) new_character.mind.special_role = "Nuclear Operative" new_character.mind.assigned_role = "Nuclear Operative" @@ -391,12 +407,6 @@ high_population_requirement = 50 repeatable = TRUE -/datum/dynamic_ruleset/midround/from_ghosts/blob/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE - return ..() - /datum/dynamic_ruleset/midround/from_ghosts/blob/generate_ruleset_body(mob/applicant) var/body = applicant.become_overmind() return body @@ -423,12 +433,6 @@ repeatable = TRUE var/list/vents = list() -/datum/dynamic_ruleset/midround/from_ghosts/xenomorph/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE - return ..() - /datum/dynamic_ruleset/midround/from_ghosts/xenomorph/execute() // 50% chance of being incremented by one required_candidates += prob(50) @@ -523,12 +527,6 @@ requirements = list(30,30,20,20,15,10,10,10,10,5) // yes, it can even happen in "extended"! high_population_requirement = 5 -/datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/ready(forced = FALSE) - if (required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE - return ..() - /datum/dynamic_ruleset/midround/from_ghosts/sentient_disease/generate_ruleset_body(mob/applicant) var/mob/camera/disease/virus = new /mob/camera/disease(SSmapping.get_station_center()) applicant.transfer_ckey(virus, FALSE) @@ -563,9 +561,6 @@ deadMobs++ if(deadMobs < REVENANT_SPAWN_THRESHOLD) return FALSE - if(required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE for(var/mob/living/L in GLOB.dead_mob_list) //look for any dead bodies var/turf/T = get_turf(L) if(T && is_station_level(T.z)) @@ -611,9 +606,6 @@ var/list/spawn_locs = list() /datum/dynamic_ruleset/midround/from_ghosts/slaughter_demon/ready(forced = FALSE) - if(required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) if(isturf(L.loc)) spawn_locs += L.loc @@ -663,9 +655,6 @@ repeatable = TRUE /datum/dynamic_ruleset/midround/from_ghosts/abductors/ready(forced = FALSE) - if(required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE team = new /datum/team/abductor_team if(team.team_number > ABDUCTOR_MAX_TEAMS) return FALSE @@ -703,9 +692,6 @@ var/spawn_loc /datum/dynamic_ruleset/midround/from_ghosts/ninja/ready(forced = FALSE) - if(required_candidates > (dead_players.len + list_observers.len)) - SSblackbox.record_feedback("tally","dynamic",1,"Times rulesets rejected due to not enough ghosts") - return FALSE if(!spawn_loc) var/list/spawn_locs = list() for(var/obj/effect/landmark/carpspawn/L in GLOB.landmarks_list) diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 7a83893f8b..c6c5547e54 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -479,10 +479,10 @@ possessed = TRUE - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) + var/list/mob/candidates = pollGhostCandidates("Do you want to play as the spirit of [user.real_name]'s blade?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_POSSESSED_BLADE) if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) + var/mob/C = pick(candidates) var/mob/living/simple_animal/shade/S = new(src) S.real_name = name S.name = name diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index fdc85475fb..8ee6981fa4 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -618,6 +618,8 @@ O.equip(new_spawn, FALSE, new_spawn.client) SSjob.equip_loadout(null, new_spawn, FALSE) SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn) + new_spawn.AddElement(/datum/element/ghost_role_eligibility) + ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, "Ghost Cafe") /datum/outfit/ghostcafe name = "ID, jumpsuit and shoes" diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 09a8f692d8..7675f858ee 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -137,9 +137,9 @@ /datum/admins/proc/makeWizard() - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null) + var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for the position of a Wizard Foundation 'diplomat'?", ROLE_WIZARD, null) - var/mob/dead/observer/selected = pick_n_take(candidates) + var/mob/selected = pick_n_take(candidates) var/mob/living/carbon/human/new_character = makeBody(selected) new_character.mind.make_Wizard() @@ -214,9 +214,9 @@ /datum/admins/proc/makeNukeTeam() var/datum/game_mode/nuclear/temp = new - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, temp) - var/list/mob/dead/observer/chosen = list() - var/mob/dead/observer/theghost = null + var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for a nuke team being sent in?", ROLE_OPERATIVE, temp) + var/list/mob/chosen = list() + var/mob/theghost = null if(candidates.len) var/numagents = 5 @@ -378,7 +378,7 @@ ertemplate.enforce_human = prefs["enforce_human"]["value"] == "Yes" ? TRUE : FALSE ertemplate.opendoors = prefs["open_armory"]["value"] == "Yes" ? TRUE : FALSE - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null) + var/list/mob/candidates = pollGhostCandidates("Do you wish to be considered for [ertemplate.polldesc] ?", "deathsquad", null) var/teamSpawned = FALSE if(candidates.len > 0) @@ -404,7 +404,7 @@ numagents-- continue // This guy's unlucky, not enough spawn points, we skip him. var/spawnloc = spawnpoints[numagents] - var/mob/dead/observer/chosen_candidate = pick(candidates) + var/mob/chosen_candidate = pick(candidates) candidates -= chosen_candidate if(!chosen_candidate.key) continue diff --git a/code/modules/antagonists/blob/blob/powers.dm b/code/modules/antagonists/blob/blob/powers.dm index e49d186362..76c9c6f482 100644 --- a/code/modules/antagonists/blob/blob/powers.dm +++ b/code/modules/antagonists/blob/blob/powers.dm @@ -156,7 +156,7 @@ if(!can_buy(40)) return - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly + var/list/mob/candidates = pollGhostCandidates("Do you want to play as a [blob_reagent_datum.name] blobbernaut?", ROLE_BLOB, null, ROLE_BLOB, 50) //players must answer rapidly if(LAZYLEN(candidates)) //if we got at least one candidate, they're a blobbernaut now. B.max_integrity = initial(B.max_integrity) * 0.25 //factories that produced a blobbernaut have much lower health B.obj_integrity = min(B.obj_integrity, B.max_integrity) @@ -171,7 +171,7 @@ blobber.update_icons() blobber.adjustHealth(blobber.maxHealth * 0.5) blob_mobs += blobber - var/mob/dead/observer/C = pick(candidates) + var/mob/C = pick(candidates) C.transfer_ckey(blobber) SEND_SOUND(blobber, sound('sound/effects/blobattack.ogg')) SEND_SOUND(blobber, sound('sound/effects/attackblob.ogg')) diff --git a/code/modules/client/client_defines.dm b/code/modules/client/client_defines.dm index ae9932e96f..361b2a7517 100644 --- a/code/modules/client/client_defines.dm +++ b/code/modules/client/client_defines.dm @@ -80,7 +80,3 @@ var/next_keysend_reset = 0 var/next_keysend_trip_reset = 0 var/keysend_tripped = FALSE - - // stops players from coming back through ghost/midround roles after suicide/cryo - // for a duration set by CONFIG_GET(number/suicide_reenter_round_timer) and CONFIG_GET(number/roundstart_suicide_time_limit) - var/reenter_round_timeout = 0 diff --git a/code/modules/events/holiday/xmas.dm b/code/modules/events/holiday/xmas.dm index 65d96ad150..ea63ee611f 100644 --- a/code/modules/events/holiday/xmas.dm +++ b/code/modules/events/holiday/xmas.dm @@ -75,7 +75,7 @@ /datum/round_event/santa/start() var/list/candidates = pollGhostCandidates("Santa is coming to town! Do you want to be Santa?", poll_time=150) if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) + var/mob/C = pick(candidates) santa = new /mob/living/carbon/human(pick(GLOB.blobstart)) C.transfer_ckey(santa, FALSE) diff --git a/code/modules/mob/dead/observer/login.dm b/code/modules/mob/dead/observer/login.dm index bf86a97574..1b328dbc69 100644 --- a/code/modules/mob/dead/observer/login.dm +++ b/code/modules/mob/dead/observer/login.dm @@ -18,6 +18,3 @@ update_icon(preferred_form) updateghostimages() - - client.reenter_round_timeout = max(client.reenter_round_timeout, clientless_round_timeout) - clientless_round_timeout = client.reenter_round_timeout diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index 499236e8ac..72d68c6721 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -19,7 +19,6 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) hud_type = /datum/hud/ghost movement_type = GROUND | FLYING var/can_reenter_corpse - var/clientless_round_timeout = 0 //mobs will lack a client as long as their player is disconnected. See client_defines.dm "reenter_round_timeout" var/datum/hud/living/carbon/hud = null // hud var/bootime = 0 var/started_as_observer //This variable is set to 1 when you enter the game as an observer. @@ -135,7 +134,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER) AA.onNewMob(src) . = ..() - + AddElement(/datum/element/ghost_role_eligibility) grant_all_languages() /mob/dead/observer/get_photo_description(obj/item/camera/camera) @@ -270,20 +269,9 @@ Works together with spawning an observer, noted above. var/mob/dead/observer/ghost = new(src) // Transfer safety to observer spawning proc. SStgui.on_transfer(src, ghost) // Transfer NanoUIs. ghost.can_reenter_corpse = can_reenter_corpse - if(penalize) //penalizing them from making a ghost role / midround antag comeback right away. - var/penalty = CONFIG_GET(number/suicide_reenter_round_timer) MINUTES - var/roundstart_quit_limit = CONFIG_GET(number/roundstart_suicide_time_limit) MINUTES - if(world.time < roundstart_quit_limit) //add up the time difference to their antag rolling penalty if they quit before half a (ingame) hour even passed. - penalty += roundstart_quit_limit - world.time - if(penalty) - penalty += world.realtime - if(penalty - SSshuttle.realtimeofstart > SSshuttle.auto_call + SSshuttle.emergencyCallTime + SSshuttle.emergencyDockTime + SSshuttle.emergencyEscapeTime) - penalty = CANT_REENTER_ROUND - if(client) - client.reenter_round_timeout = penalty - else //A disconnected player (quite likely for cryopods) - ghost.clientless_round_timeout = penalty transfer_ckey(ghost, FALSE) + ghost.AddElement(/datum/element/ghost_role_eligibility,penalize) // technically already run earlier, but this adds the penalty + // needs to be done AFTER the ckey transfer, too return ghost /* @@ -340,15 +328,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp return ghostize(0, penalize = TRUE) -/mob/dead/observer/proc/can_reenter_round(silent = FALSE) - var/timeout = clientless_round_timeout - if(client) - timeout = client.reenter_round_timeout - if(timeout != CANT_REENTER_ROUND && timeout <= world.realtime) - return TRUE - if(!silent && client) - to_chat(src, "You are unable to reenter the round[timeout != CANT_REENTER_ROUND ? " yet. Your ghost role blacklist will expire in [DisplayTimeText(timeout - world.realtime)]" : ""].") - return FALSE + /mob/dead/observer/Move(NewLoc, direct) if(updatedir) diff --git a/code/modules/mob/living/simple_animal/guardian/guardian.dm b/code/modules/mob/living/simple_animal/guardian/guardian.dm index 1bd434b233..62c8588ac8 100644 --- a/code/modules/mob/living/simple_animal/guardian/guardian.dm +++ b/code/modules/mob/living/simple_animal/guardian/guardian.dm @@ -424,9 +424,9 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians var/mob/living/simple_animal/hostile/guardian/G = input(src, "Pick the guardian you wish to reset", "Guardian Reset") as null|anything in guardians if(G) to_chat(src, "You attempt to reset [G.real_name]'s personality...") - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100) + var/list/mob/candidates = pollGhostCandidates("Do you want to play as [src.real_name]'s [G.real_name]?", ROLE_PAI, null, FALSE, 100) if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) + var/mob/C = pick(candidates) to_chat(G, "Your user reset you, and your body was taken over by a ghost. Looks like they weren't happy with your performance.") to_chat(src, "Your [G.real_name] has been successfully reset.") message_admins("[key_name_admin(C)] has taken control of ([key_name_admin(G)])") @@ -498,10 +498,10 @@ GLOBAL_LIST_EMPTY(parasites) //all currently existing/living guardians return used = TRUE to_chat(user, "[use_message]") - var/list/mob/dead/observer/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE) + var/list/mob/candidates = pollGhostCandidates("Do you want to play as the [mob_name] of [user.real_name]?", ROLE_PAI, null, FALSE, 100, POLL_IGNORE_HOLOPARASITE) if(LAZYLEN(candidates)) - var/mob/dead/observer/C = pick(candidates) + var/mob/C = pick(candidates) spawn_guardian(user, C.key) else to_chat(user, "[failure_message]") diff --git a/tgstation.dme b/tgstation.dme index 5526e5eaf0..9348e2e131 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -467,6 +467,7 @@ #include "code\datums\elements\_element.dm" #include "code\datums\elements\cleaning.dm" #include "code\datums\elements\earhealing.dm" +#include "code\datums\elements\ghost_role_eligibility.dm" #include "code\datums\helper_datums\events.dm" #include "code\datums\helper_datums\getrev.dm" #include "code\datums\helper_datums\icon_snapshot.dm" From 8d00e4f09433b07d9c8050ca2ab90ca6f1d34489 Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 01:17:48 -0800 Subject: [PATCH 3/8] added crematorium, replaced every floor in the ghost cafe with indestructible ones --- _maps/map_files/generic/CentCom.dmm | 835 ++++++++++++++-------------- 1 file changed, 426 insertions(+), 409 deletions(-) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 0faf54151a..77f0b70a0e 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -4826,7 +4826,7 @@ pixel_x = 25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "mb" = ( /obj/structure/table/reinforced, @@ -6425,7 +6425,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "oX" = ( /obj/structure/bookcase/random, @@ -6796,7 +6796,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "pH" = ( /obj/structure/table/wood, @@ -7312,7 +7312,7 @@ color = "#596479"; dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "qQ" = ( /obj/machinery/door/airlock/centcom{ @@ -8698,7 +8698,7 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "tX" = ( /obj/machinery/door/airlock{ @@ -8713,7 +8713,7 @@ /area/centcom/supplypod) "tZ" = ( /obj/structure/chair/wood/normal, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "uc" = ( /obj/effect/turf_decal/tile/green{ @@ -9326,7 +9326,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "vt" = ( /obj/structure/rack, @@ -9334,7 +9334,7 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "vu" = ( /obj/structure/chair/stool, @@ -10359,7 +10359,7 @@ /obj/machinery/light{ dir = 8 }, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "yg" = ( /obj/structure/chair, @@ -10607,7 +10607,7 @@ /obj/structure/table/wood/bar, /obj/structure/safe/floor, /obj/item/seeds/cherry/bomb, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "yN" = ( /obj/structure/table/reinforced, @@ -11054,6 +11054,9 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) +"zT" = ( +/turf/open/indestructible/boss/air, +/area/centcom/holding) "zU" = ( /obj/structure/closet/crate/freezer, /turf/open/floor/plasteel/cafeteria, @@ -11338,7 +11341,7 @@ pixel_y = 25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "AD" = ( /obj/machinery/door/airlock/centcom{ @@ -11579,12 +11582,12 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Bs" = ( /obj/structure/table/wood, /obj/machinery/computer/libraryconsole/bookmanagement, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Bu" = ( /obj/structure/table/wood, @@ -12461,11 +12464,11 @@ /obj/machinery/vr_sleeper{ dir = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "CV" = ( /obj/structure/chair/stool, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "CX" = ( /obj/structure/closet/secure_closet/security, @@ -12659,12 +12662,16 @@ /obj/machinery/vr_sleeper{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Dk" = ( /obj/structure/table, /turf/open/floor/plasteel/cafeteria, /area/syndicate_mothership) +"Dl" = ( +/obj/structure/mineral_door/paperframe, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Do" = ( /obj/effect/turf_decal/tile/bar, /obj/effect/turf_decal/tile/bar{ @@ -13471,21 +13478,21 @@ /obj/structure/table/wood, /obj/item/instrument/piano_synth, /obj/item/instrument/guitar, -/turf/open/floor/carpet/black, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fb" = ( /obj/structure/piano, /obj/machinery/light{ dir = 8 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fc" = ( /obj/structure/sign/barsign{ pixel_y = 32 }, /obj/structure/chair/stool, -/turf/open/floor/carpet/black, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fg" = ( /obj/structure/flora/grass/brown, @@ -13502,11 +13509,11 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fj" = ( /obj/machinery/vending/cigarette, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Fm" = ( /obj/machinery/shower{ @@ -13794,7 +13801,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "FX" = ( /turf/open/floor/plasteel/stairs, @@ -13968,7 +13975,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Gu" = ( /obj/machinery/door/airlock/silver{ @@ -14341,7 +14348,7 @@ /obj/structure/chair/wood/wings{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Ha" = ( /obj/effect/turf_decal/tile/brown{ @@ -14427,7 +14434,7 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Hn" = ( /obj/structure/sink{ @@ -14649,7 +14656,7 @@ /area/space) "HH" = ( /obj/machinery/light, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "HI" = ( /obj/structure/sink{ @@ -14773,7 +14780,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "HR" = ( /obj/structure/sink{ @@ -16212,7 +16219,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "KU" = ( /obj/structure/closet/emcloset, @@ -16569,7 +16576,7 @@ /obj/effect/mob_spawn/human/ghostcafe{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Mt" = ( /obj/structure/window/reinforced{ @@ -16578,7 +16585,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Mu" = ( /obj/machinery/light{ @@ -16594,7 +16601,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Mv" = ( /obj/structure/table/reinforced, @@ -16610,7 +16617,7 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "My" = ( /obj/docking_port/stationary{ @@ -16679,11 +16686,11 @@ /obj/machinery/light/small{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "MM" = ( /obj/structure/window/reinforced, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "MP" = ( /obj/machinery/light{ @@ -16695,7 +16702,7 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "MS" = ( /obj/structure/table, @@ -16742,7 +16749,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Nk" = ( /obj/machinery/door/airlock/centcom{ @@ -16764,7 +16771,7 @@ /obj/item/storage/fancy/candle_box, /obj/item/storage/fancy/candle_box, /obj/item/storage/box/lights/mixed, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Nn" = ( /obj/structure/closet/secure_closet/hydroponics{ @@ -16780,7 +16787,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Nu" = ( /turf/open/floor/wood, @@ -16798,7 +16805,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Nz" = ( /obj/effect/turf_decal/tile/brown{ @@ -16818,7 +16825,7 @@ /obj/item/reagent_containers/medspray/synthflesh, /obj/item/reagent_containers/medspray/synthflesh, /obj/item/reagent_containers/medspray/synthflesh, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "NF" = ( /obj/structure/ladder/unbreakable/binary, @@ -16850,13 +16857,13 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "NT" = ( /obj/structure/window/paperframe{ CanAtmosPass = 0 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "NU" = ( /obj/machinery/door/airlock/centcom{ @@ -16926,7 +16933,7 @@ /area/centcom/control) "Ol" = ( /obj/structure/table/wood/fancy, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Om" = ( /obj/effect/turf_decal/tile/brown, @@ -16972,7 +16979,7 @@ dir = 8; pixel_x = 26 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ @@ -17002,7 +17009,7 @@ /obj/machinery/light{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "OH" = ( /obj/effect/spawner/structure/window/reinforced, @@ -17012,7 +17019,7 @@ /obj/structure/mineral_door/paperframe{ name = "Dojo" }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "OM" = ( /obj/machinery/light{ @@ -17035,7 +17042,7 @@ /obj/item/clothing/under/kilt, /obj/structure/closet, /obj/item/clothing/under/roman, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "OV" = ( /obj/machinery/light{ @@ -17059,14 +17066,14 @@ /area/centcom/supplypod) "Ph" = ( /obj/structure/closet/crate/bin, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Pl" = ( /obj/structure/window/reinforced, /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Pn" = ( /turf/closed/indestructible/fakedoor{ @@ -17077,7 +17084,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Pq" = ( /obj/structure/urinal{ @@ -17118,7 +17125,7 @@ /obj/structure/window/reinforced{ dir = 4 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "PD" = ( /turf/open/floor/plasteel/cafeteria, @@ -17130,7 +17137,7 @@ /obj/machinery/light{ dir = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PG" = ( /obj/structure/table/reinforced, @@ -17149,7 +17156,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PJ" = ( /obj/effect/turf_decal/stripes/line{ @@ -17159,7 +17166,7 @@ /area/syndicate_mothership) "PL" = ( /obj/machinery/autolathe, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PM" = ( /obj/machinery/vending/clothing{ @@ -17179,7 +17186,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PP" = ( /obj/machinery/door/airlock/external{ @@ -17213,7 +17220,7 @@ /area/holodeck/rec_center/firingrange) "PX" = ( /obj/machinery/computer/arcade/battle, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PY" = ( /obj/effect/turf_decal/tile/green{ @@ -17226,7 +17233,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "PZ" = ( /obj/effect/turf_decal/delivery, @@ -17255,7 +17262,7 @@ /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Qm" = ( /obj/singularity/wizard/mapped, @@ -17310,7 +17317,7 @@ pixel_y = -25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "QH" = ( /obj/machinery/chem_master/condimaster{ @@ -17328,7 +17335,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "QI" = ( /obj/structure/toilet{ @@ -17345,7 +17352,7 @@ /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "QN" = ( /obj/machinery/light{ @@ -17400,7 +17407,7 @@ /area/holodeck/rec_center/basketball) "Ra" = ( /obj/machinery/door/window/eastright, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Rb" = ( /obj/effect/turf_decal/stripes/corner{ @@ -17420,7 +17427,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Re" = ( /obj/structure/mineral_door/paperframe, @@ -17440,7 +17447,7 @@ /obj/structure/chair/wood/normal{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Rj" = ( /obj/machinery/vending/hydroseeds, @@ -17454,7 +17461,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Rl" = ( /obj/structure/mirror{ @@ -17468,7 +17475,7 @@ /obj/structure/chair/wood/wings{ dir = 3 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Ro" = ( /obj/structure/closet{ @@ -17487,14 +17494,14 @@ /obj/item/tank/internals/plasmaman/belt/full, /obj/item/tank/internals/plasmaman/belt/full, /obj/item/tank/internals/plasmaman/belt/full, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Rq" = ( /obj/machinery/light{ dir = 1; light_color = "#cee5d2" }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Ru" = ( /obj/structure/fireplace, @@ -17541,7 +17548,7 @@ pixel_x = -3; pixel_y = 3 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "RR" = ( /turf/open/floor/plasteel, @@ -17555,13 +17562,13 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "RX" = ( /obj/structure/chair/comfy/brown{ color = "#596479" }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "RZ" = ( /obj/effect/turf_decal/tile/bar, @@ -17581,7 +17588,7 @@ /turf/open/floor/plasteel/dark, /area/syndicate_mothership) "Sd" = ( -/turf/open/floor/carpet/black, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Sf" = ( /obj/structure/chair{ @@ -17615,7 +17622,7 @@ /obj/machinery/defibrillator_mount/loaded{ pixel_y = 28 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Sw" = ( /obj/machinery/hydroponics/constructable, @@ -17632,7 +17639,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Sy" = ( /obj/effect/turf_decal/tile/brown{ @@ -17714,7 +17721,7 @@ /obj/item/wallframe/newscaster, /obj/item/paper_bin, /obj/item/pen/fountain, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "SV" = ( /obj/effect/turf_decal/tile/bar, @@ -17736,11 +17743,11 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "SY" = ( /obj/structure/table/wood, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "SZ" = ( /obj/machinery/door/airlock/wood{ @@ -17751,7 +17758,7 @@ /area/centcom/holding) "Tb" = ( /obj/structure/closet/crate/freezer/blood, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Tc" = ( /obj/machinery/button/door{ @@ -17761,7 +17768,7 @@ pixel_y = -25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Tj" = ( /obj/effect/turf_decal/tile/bar, @@ -17776,7 +17783,7 @@ /obj/item/candle/infinite{ pixel_y = 6 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "To" = ( /turf/open/indestructible/airblock, @@ -17787,7 +17794,7 @@ /obj/item/stack/sheet/metal/fifty, /obj/item/storage/toolbox/mechanical, /obj/item/multitool, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Tr" = ( /obj/structure/closet/chefcloset, @@ -17799,7 +17806,7 @@ /obj/structure/flora/ausbushes/ppflowers, /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Tw" = ( /obj/structure/closet{ @@ -17816,7 +17823,7 @@ /obj/item/clothing/head/helmet/space/plasmaman, /obj/item/clothing/head/helmet/space/plasmaman, /obj/item/clothing/head/helmet/space/plasmaman, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Tz" = ( /obj/effect/light_emitter, @@ -17846,7 +17853,7 @@ /obj/structure/mirror{ pixel_y = 28 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "TM" = ( /mob/living/simple_animal/bot/medbot{ @@ -17855,7 +17862,7 @@ radio_key = null; stationary_mode = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "TO" = ( /obj/effect/turf_decal/tile/bar, @@ -17875,11 +17882,11 @@ /area/syndicate_mothership) "Ud" = ( /obj/effect/landmark/holding_facility, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Uf" = ( /obj/structure/closet/secure_closet, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Ug" = ( /obj/machinery/door/poddoor/shuttledock{ @@ -17898,7 +17905,7 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Uj" = ( /obj/machinery/door/airlock/centcom{ @@ -17933,7 +17940,7 @@ /obj/effect/turf_decal/tile/green{ dir = 8 }, -/turf/open/floor/plasteel/white, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Un" = ( /obj/machinery/door/airlock/centcom{ @@ -17977,11 +17984,11 @@ desc = "Swipe your ID on the closet to claim it. First come first serve, this one is wooden and fancy. Store your stuff here."; name = "Personal ID-Locked Closet" }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "UE" = ( /obj/structure/chair/stool/bar, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "UG" = ( /obj/structure/flora/tree/pine, @@ -18026,11 +18033,11 @@ /obj/structure/chair/wood/wings{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "UV" = ( /obj/machinery/computer/arcade, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "UW" = ( /obj/effect/turf_decal/tile/brown{ @@ -18114,7 +18121,7 @@ /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced/fulltile, /obj/machinery/light, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Vv" = ( /obj/structure/table, @@ -18164,7 +18171,7 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "VO" = ( /turf/closed/indestructible/riveted, @@ -18200,7 +18207,7 @@ /area/space) "Wb" = ( /obj/machinery/door/window/westleft, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "Wc" = ( /obj/machinery/door/airlock/centcom{ @@ -18232,6 +18239,10 @@ }, /turf/open/floor/plating, /area/syndicate_mothership) +"Wl" = ( +/obj/machinery/door/airlock/wood, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "Wr" = ( /turf/open/floor/plasteel/dark, /area/centcom/supplypod) @@ -18242,11 +18253,17 @@ }, /turf/open/floor/wood, /area/centcom/holding) +"Ww" = ( +/obj/structure/bodycontainer/crematorium{ + dir = 4 + }, +/turf/open/indestructible/hotelwood, +/area/centcom/holding) "WB" = ( /obj/machinery/cryopod/ghost_cafe{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, @@ -18288,7 +18305,7 @@ /obj/structure/extinguisher_cabinet{ pixel_y = 32 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "WN" = ( /obj/machinery/button/door{ @@ -18298,7 +18315,7 @@ pixel_y = 25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "WO" = ( /obj/effect/turf_decal/tile/brown, @@ -18342,11 +18359,11 @@ /obj/structure/flora/ausbushes/fullgrass, /obj/structure/flora/ausbushes/palebush, /obj/structure/window/reinforced/fulltile, -/turf/open/floor/grass, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xe" = ( /obj/machinery/vending/autodrobe, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xg" = ( /obj/effect/turf_decal/tile/red{ @@ -18361,7 +18378,7 @@ /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) "Xk" = ( -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xl" = ( /obj/structure/closet/syndicate/personal, @@ -18373,7 +18390,7 @@ "Xn" = ( /obj/structure/bed, /obj/item/bedsheet/random, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xo" = ( /obj/machinery/vending/dinnerware, @@ -18398,7 +18415,7 @@ /area/centcom/supplypod/loading/four) "Xs" = ( /obj/structure/chair/comfy/brown, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xt" = ( /obj/machinery/door/airlock/centcom{ @@ -18421,13 +18438,13 @@ /area/holodeck/rec_center/firingrange) "Xw" = ( /obj/structure/table/wood/fancy/royalblue, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xx" = ( /obj/machinery/light{ dir = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Xy" = ( /obj/machinery/door/airlock/external{ @@ -18449,7 +18466,7 @@ pixel_y = 25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "XE" = ( /obj/machinery/door/airlock/centcom{ @@ -18466,12 +18483,12 @@ /obj/structure/chair/wood/wings{ dir = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "XT" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/sashimi, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "XU" = ( /obj/machinery/computer/secure_data{ @@ -18482,7 +18499,7 @@ "XX" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/drinks/bottle/sake, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "XY" = ( /obj/machinery/door/poddoor/shutters{ @@ -18499,7 +18516,7 @@ pixel_y = -25; specialfunctions = 4 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Yc" = ( /obj/effect/turf_decal/stripes/line, @@ -18517,12 +18534,12 @@ /obj/machinery/defibrillator_mount/loaded{ pixel_y = 28 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Yf" = ( /obj/structure/table/wood, /obj/item/reagent_containers/food/snacks/chawanmushi, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Yg" = ( /obj/effect/turf_decal/stripes/corner{ @@ -18534,7 +18551,7 @@ /obj/structure/extinguisher_cabinet{ pixel_x = -27 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Yi" = ( /obj/structure/dresser, @@ -18542,13 +18559,13 @@ /area/syndicate_mothership) "Ym" = ( /obj/machinery/computer/arcade/orion_trail, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Yo" = ( /obj/machinery/light{ dir = 8 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Ys" = ( /obj/structure/table/reinforced, @@ -18590,7 +18607,7 @@ /area/centcom/holding) "YL" = ( /obj/machinery/vending/clothing, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "YN" = ( /obj/structure/window/reinforced{ @@ -18603,7 +18620,7 @@ /obj/structure/chair/comfy/brown{ dir = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "YQ" = ( /obj/structure/table, @@ -18614,7 +18631,7 @@ /obj/structure/window/reinforced{ dir = 1 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "YV" = ( /obj/machinery/light{ @@ -18625,10 +18642,10 @@ damtype = "stamina"; force = 30 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "YW" = ( -/turf/open/floor/plating, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Za" = ( /obj/machinery/door/airlock/wood{ @@ -18643,7 +18660,7 @@ /obj/item/twohanded/required/kirbyplants{ icon_state = "plant-10" }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Zi" = ( /turf/open/floor/plasteel, @@ -18682,7 +18699,7 @@ radio_key = null; stationary_mode = 1 }, -/turf/open/floor/wood, +/turf/open/indestructible/hotelwood, /area/centcom/holding) "Zz" = ( /obj/effect/landmark/start/nukeop_leader, @@ -18754,7 +18771,7 @@ /obj/structure/window/reinforced{ dir = 8 }, -/turf/open/floor/carpet/black, +/turf/open/indestructible/boss/air, /area/centcom/holding) "ZV" = ( /obj/effect/turf_decal/tile/brown, @@ -43137,13 +43154,13 @@ Rm Tn UT yd -Xk -Xk +YW +YW XM NT UV CV -Xk +YW NT CT oV @@ -43153,15 +43170,15 @@ CT oV CT Nd -Xk -Xk -Xk +YW +Ww +YW Nd aa Nd Uf -Xk -Xk +YW +YW Nd aa aa @@ -43390,34 +43407,34 @@ Pq ZW ZW Za -Xk -Xk -Xk +YW +YW +YW Tu -Xk -Xk +YW +YW Tn NT RQ -Xk -Xk +YW +YW NT -Xk -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW +YW Nd Gs -Xk +YW HH Nd aa Nd MJ -Xk +YW YW Nd aa @@ -43647,35 +43664,35 @@ Pa ZW ZW Nd -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW GY NT UV CV -Xk +YW NT Dj PF Dj -Xk +YW Dj PF Dj Nd -Xk -Xk -Xk +YW +YW +YW Nd aa Nd ma YW -Xk +YW Nd aa aa @@ -43904,17 +43921,17 @@ SB ZW Nw Nd -Xk -Xk -Xk +YW +YW +YW Ph -Xk +YW Tu Vu Nd Gs -Xk -Xk +YW +YW Nd Nd Nd @@ -44161,34 +44178,34 @@ Nd Nd Nd Nd -Xk -Xk +YW +YW XM QL -Xk -Xk +YW +YW XM NT PX CV -Xk +YW NT -Xk +YW Yo -Xk -Xk -Xk +YW +YW +YW Yo -Xk +YW Nd -Xk -Xk +YW +YW Yo -Xk -Xk +YW +YW Yo -Xk -Xk +YW +YW WE Nd aa @@ -44414,38 +44431,38 @@ Nd Nd py Nd -Xk +YW Yo -Xk -XL -Xk -Xk +YW +Wl +YW +YW Tn Tu -Xk -Xk +YW +YW Tn NT Zh -Xk -Xk -Re -Xk -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +Dl +YW +YW +YW +YW +YW +YW +YW Qu -Xk -Xk -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW +YW +YW Zu Nd aa @@ -44664,45 +44681,45 @@ aa aa Nd PL -Xk +YW Yo -Xk -Xk -Xk -Xk +YW +YW +YW +YW Yh -Xk +YW Nd Nd Nd Gs -Xk +YW GY Tu -Xk -Xk +YW +YW GY NT Ym CV -Xk +YW NT -Xk +YW Xx -Xk -Xk -Xk +YW +YW +YW Xx -Xk +YW Nd -Xk -Xk -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW +YW +YW PM Nd aa @@ -44921,7 +44938,7 @@ aa aa Nd Tq -Xk +YW MG YN Nd @@ -44932,17 +44949,17 @@ Nd Nd Fa KT -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW HH Nd -Xk -Xk -Xk +YW +YW +YW Nd Nd Nd @@ -45177,8 +45194,8 @@ aa aa aa Nd -Xk -Xk +YW +YW Rh Mm Nd @@ -45187,19 +45204,19 @@ Fh Yu Nd Fb -Sd +YW KT -Xk -Xk -Sd -Sd -Sd -Sd -Sd +YW +YW +YW +YW +YW +YW +YW Re -Xk -Xk -Xk +YW +YW +YW NT vt YV @@ -45212,8 +45229,8 @@ UD tZ SY Nd -Xk -Xk +YW +YW Nd SY Ri @@ -45434,8 +45451,8 @@ aa aa aa Nd -Xk -Xk +YW +YW Rh ZT Nd @@ -45444,36 +45461,36 @@ Fh QW Nd Fc -Sd +YW KT -Xk -Xk -Sd -Sd -Sd -Sd -Sd +YW +YW +YW +YW +YW +YW +YW Nd Gs Zx -Xk +YW OL -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW Nd Gs -Xk -Xk +YW +YW lS -Xk -Xk +YW +YW RP -Xk -Xk +YW +YW HH Nd aa @@ -45700,37 +45717,37 @@ JE Fh YQ Nd -MR -Sd +Xx +YW FW -Xk -Xk -Sd -Sd -Sd -Sd -Sd +YW +YW +YW +YW +YW +YW +YW Re -Xk -Xk -Xk +YW +YW +YW NT So XM -Xk +YW XM XM -Xk +YW Nd Xn -Xk +YW Ya Nd -Xk -Xk +YW +YW Nd XD -Xk +YW Xn Nd aa @@ -45949,23 +45966,23 @@ aa aa Nd yM -Xk +YW Yo -Xk +YW Nd SG Fh Vv Nd Nd -Sd +YW FX -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW HH Nd WM @@ -45977,14 +45994,14 @@ Po Wb Po ZU -Xk +YW Nd Nd Nd Nd Nd -Xk -Xk +YW +YW Nd Nd Nd @@ -46206,9 +46223,9 @@ aa aa Nd OG -Xk -Xk -Xk +YW +YW +YW Nd zX Fh @@ -46218,30 +46235,30 @@ Nd Nd Nd Gs -Xk +YW XM Tu -Xk -Xk +YW +YW XM NT -Xk +YW Ud Ud NT YU -Sd -Sd -Sd +zT +zT +zT MM -Xk +YW Nd UD tZ SY Nd -Xk -Xk +YW +YW Nd SY Ri @@ -46463,9 +46480,9 @@ aa aa Nd TK -Xk -Xk -Xk +YW +YW +YW Nd QA Fh @@ -46474,12 +46491,12 @@ ED Yo Yf UE -Xk -Xk +YW +YW Tn Xd -Xk -Xk +YW +YW Tn NT Ro @@ -46487,21 +46504,21 @@ Ud Ud NT YU -Sd -Sd -Sd +zT +zT +zT MM TM Nd Gs -Xk -Xk +YW +YW uh -Xk -Xk +YW +YW zW -Xk -Xk +YW +YW HH Nd aa @@ -46720,23 +46737,23 @@ aa aa Nd YL -Xk -Xk -Xk +YW +YW +YW Nd Xo Fh Fh py -Xk +YW SY UE -Xk -Xk +YW +YW GY Tu -Xk -Xk +YW +YW GY NT Tw @@ -46744,21 +46761,21 @@ Ud Ud NT YU -Sd -Sd -Sd +zT +zT +zT MM -Xk +YW Nd Xn -Xk +YW Tc Nd -Xk -Xk +YW +YW Nd AC -Xk +YW Xn Nd aa @@ -46977,22 +46994,22 @@ aa aa Nd Xe -Xk -Xk -Xk +YW +YW +YW Nd TB Fh Fh BV -Xk +YW XT UE -Xk -Xk -Xk +YW +YW +YW Ph -Xk +YW Qk Vu Nd @@ -47005,7 +47022,7 @@ PA Ra PA Pl -Xk +YW Nd Nd Nd @@ -47234,42 +47251,42 @@ aa aa Nd Ny -Xk -Xk -Xk +YW +YW +YW Nd Vz Fh YJ QT -Xk +YW SY UE -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW XM NT -Xk -Xk -Xk +YW +YW +YW NT Ye GY -Xk +YW GY GY -Xk +YW Nd Xs Ol YO Nd -Xk -Xk +YW +YW Nd RX Xw @@ -47492,44 +47509,44 @@ aa Nd Bs Ri -Xk -Xk +YW +YW XL Fh Fh Fh XL -Xk +YW XX UE -Xk -Xk -Xk +YW +YW +YW Tu -Xk -Xk +YW +YW Tn NT -Xk -Xk -Xk +YW +YW +YW OL -Xk -Xk -Xk -Xk -Xk -Xk +YW +YW +YW +YW +YW +YW Nd Gs -Xk -Xk +YW +YW SZ -Xk -Xk +YW +YW Ws -Xk -Xk +YW +YW HH Nd aa @@ -47748,7 +47765,7 @@ aa aa Nd SU -Xk +YW Xx Nm Nd @@ -47763,8 +47780,8 @@ Fi Tn UT Hm -Xk -Xk +YW +YW GY NT Oy @@ -47782,8 +47799,8 @@ Ru Of QF Nd -Xk -Xk +YW +YW Nd WN Ur @@ -48037,12 +48054,12 @@ Nd Nd Kf WV -Xk +YW Nd Nd Nd Nd -Xk +YW zY Rv Nd From f2759abb4cde609fe3d0d41a0db33f77a3d3335f Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 01:18:05 -0800 Subject: [PATCH 4/8] fixed a runtime --- code/datums/elements/_element.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/datums/elements/_element.dm b/code/datums/elements/_element.dm index 8f9b97db22..17e2b12232 100644 --- a/code/datums/elements/_element.dm +++ b/code/datums/elements/_element.dm @@ -11,7 +11,7 @@ if(type == /datum/element) return ELEMENT_INCOMPATIBLE if(element_flags & ELEMENT_DETACH) - RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach) + RegisterSignal(target, COMSIG_PARENT_QDELETING, .proc/Detach, override = TRUE) /datum/element/proc/Detach(datum/source, force) UnregisterSignal(source, COMSIG_PARENT_QDELETING) @@ -36,4 +36,4 @@ */ /datum/proc/RemoveElement(eletype, ...) var/datum/element/ele = SSdcs.GetElement(arglist(args)) - ele.Detach(src) \ No newline at end of file + ele.Detach(src) From 4b6e8cfa18d52003fe538dce8c93ab9cc0269ede Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 01:26:03 -0800 Subject: [PATCH 5/8] no, not a cryo... --- _maps/map_files/generic/CentCom.dmm | 585 +++++++++++++--------------- 1 file changed, 280 insertions(+), 305 deletions(-) diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm index 77f0b70a0e..6129d263fd 100644 --- a/_maps/map_files/generic/CentCom.dmm +++ b/_maps/map_files/generic/CentCom.dmm @@ -16974,13 +16974,6 @@ }, /turf/open/floor/wood, /area/centcom/holding) -"Oy" = ( -/obj/machinery/computer/cryopod{ - dir = 8; - pixel_x = 26 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Oz" = ( /obj/effect/turf_decal/stripes/corner{ dir = 1 @@ -18259,12 +18252,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"WB" = ( -/obj/machinery/cryopod/ghost_cafe{ - dir = 8 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "WC" = ( /obj/structure/table/reinforced, /obj/item/pen, @@ -18377,9 +18364,6 @@ }, /turf/open/floor/holofloor, /area/holodeck/rec_center/basketball) -"Xk" = ( -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xl" = ( /obj/structure/closet/syndicate/personal, /obj/effect/turf_decal/stripes/line{ @@ -18440,12 +18424,6 @@ /obj/structure/table/wood/fancy/royalblue, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"Xx" = ( -/obj/machinery/light{ - dir = 4 - }, -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Xy" = ( /obj/machinery/door/airlock/external{ name = "Ferry Airlock" @@ -18644,9 +18622,6 @@ }, /turf/open/indestructible/hotelwood, /area/centcom/holding) -"YW" = ( -/turf/open/indestructible/hotelwood, -/area/centcom/holding) "Za" = ( /obj/machinery/door/airlock/wood{ id_tag = "lmrestroom" @@ -43154,13 +43129,13 @@ Rm Tn UT yd -YW -YW +Sd +Sd XM NT UV CV -YW +Sd NT CT oV @@ -43170,15 +43145,15 @@ CT oV CT Nd -YW +Sd Ww -YW +Sd Nd aa Nd Uf -YW -YW +Sd +Sd Nd aa aa @@ -43407,35 +43382,35 @@ Pq ZW ZW Za -YW -YW -YW +Sd +Sd +Sd Tu -YW -YW +Sd +Sd Tn NT RQ -YW -YW +Sd +Sd NT -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd Nd Gs -YW +Sd HH Nd aa Nd MJ -YW -YW +Sd +Sd Nd aa aa @@ -43664,35 +43639,35 @@ Pa ZW ZW Nd -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd GY NT UV CV -YW +Sd NT Dj PF Dj -YW +Sd Dj PF Dj Nd -YW -YW -YW +Sd +Sd +Sd Nd aa Nd ma -YW -YW +Sd +Sd Nd aa aa @@ -43921,17 +43896,17 @@ SB ZW Nw Nd -YW -YW -YW +Sd +Sd +Sd Ph -YW +Sd Tu Vu Nd Gs -YW -YW +Sd +Sd Nd Nd Nd @@ -44178,34 +44153,34 @@ Nd Nd Nd Nd -YW -YW +Sd +Sd XM QL -YW -YW +Sd +Sd XM NT PX CV -YW +Sd NT -YW +Sd Yo -YW -YW -YW +Sd +Sd +Sd Yo -YW +Sd Nd -YW -YW +Sd +Sd Yo -YW -YW +Sd +Sd Yo -YW -YW +Sd +Sd WE Nd aa @@ -44431,38 +44406,38 @@ Nd Nd py Nd -YW +Sd Yo -YW +Sd Wl -YW -YW +Sd +Sd Tn Tu -YW -YW +Sd +Sd Tn NT Zh -YW -YW +Sd +Sd Dl -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd Qu -YW -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd +Sd Zu Nd aa @@ -44681,45 +44656,45 @@ aa aa Nd PL -YW +Sd Yo -YW -YW -YW -YW +Sd +Sd +Sd +Sd Yh -YW +Sd Nd Nd Nd Gs -YW +Sd GY Tu -YW -YW +Sd +Sd GY NT Ym CV -YW +Sd NT -YW -Xx -YW -YW -YW -Xx -YW +Sd +MR +Sd +Sd +Sd +MR +Sd Nd -YW -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd +Sd PM Nd aa @@ -44938,7 +44913,7 @@ aa aa Nd Tq -YW +Sd MG YN Nd @@ -44949,17 +44924,17 @@ Nd Nd Fa KT -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd HH Nd -YW -YW -YW +Sd +Sd +Sd Nd Nd Nd @@ -45194,8 +45169,8 @@ aa aa aa Nd -YW -YW +Sd +Sd Rh Mm Nd @@ -45204,19 +45179,19 @@ Fh Yu Nd Fb -YW +Sd KT -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd Re -YW -YW -YW +Sd +Sd +Sd NT vt YV @@ -45229,8 +45204,8 @@ UD tZ SY Nd -YW -YW +Sd +Sd Nd SY Ri @@ -45451,8 +45426,8 @@ aa aa aa Nd -YW -YW +Sd +Sd Rh ZT Nd @@ -45461,36 +45436,36 @@ Fh QW Nd Fc -YW +Sd KT -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd Nd Gs Zx -YW +Sd OL -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd Nd Gs -YW -YW +Sd +Sd lS -YW -YW +Sd +Sd RP -YW -YW +Sd +Sd HH Nd aa @@ -45717,37 +45692,37 @@ JE Fh YQ Nd -Xx -YW +MR +Sd FW -YW -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd +Sd Re -YW -YW -YW +Sd +Sd +Sd NT So XM -YW +Sd XM XM -YW +Sd Nd Xn -YW +Sd Ya Nd -YW -YW +Sd +Sd Nd XD -YW +Sd Xn Nd aa @@ -45966,23 +45941,23 @@ aa aa Nd yM -YW +Sd Yo -YW +Sd Nd SG Fh Vv Nd Nd -YW +Sd FX -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd HH Nd WM @@ -45994,14 +45969,14 @@ Po Wb Po ZU -YW +Sd Nd Nd Nd Nd Nd -YW -YW +Sd +Sd Nd Nd Nd @@ -46223,9 +46198,9 @@ aa aa Nd OG -YW -YW -YW +Sd +Sd +Sd Nd zX Fh @@ -46235,14 +46210,14 @@ Nd Nd Nd Gs -YW +Sd XM Tu -YW -YW +Sd +Sd XM NT -YW +Sd Ud Ud NT @@ -46251,14 +46226,14 @@ zT zT zT MM -YW +Sd Nd UD tZ SY Nd -YW -YW +Sd +Sd Nd SY Ri @@ -46480,9 +46455,9 @@ aa aa Nd TK -YW -YW -YW +Sd +Sd +Sd Nd QA Fh @@ -46491,12 +46466,12 @@ ED Yo Yf UE -YW -YW +Sd +Sd Tn Xd -YW -YW +Sd +Sd Tn NT Ro @@ -46511,14 +46486,14 @@ MM TM Nd Gs -YW -YW +Sd +Sd uh -YW -YW +Sd +Sd zW -YW -YW +Sd +Sd HH Nd aa @@ -46737,23 +46712,23 @@ aa aa Nd YL -YW -YW -YW +Sd +Sd +Sd Nd Xo Fh Fh py -YW +Sd SY UE -YW -YW +Sd +Sd GY Tu -YW -YW +Sd +Sd GY NT Tw @@ -46765,17 +46740,17 @@ zT zT zT MM -YW +Sd Nd Xn -YW +Sd Tc Nd -YW -YW +Sd +Sd Nd AC -YW +Sd Xn Nd aa @@ -46994,22 +46969,22 @@ aa aa Nd Xe -YW -YW -YW +Sd +Sd +Sd Nd TB Fh Fh BV -YW +Sd XT UE -YW -YW -YW +Sd +Sd +Sd Ph -YW +Sd Qk Vu Nd @@ -47022,7 +46997,7 @@ PA Ra PA Pl -YW +Sd Nd Nd Nd @@ -47251,42 +47226,42 @@ aa aa Nd Ny -YW -YW -YW +Sd +Sd +Sd Nd Vz Fh YJ QT -YW +Sd SY UE -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd XM NT -YW -YW -YW +Sd +Sd +Sd NT Ye GY -YW +Sd GY GY -YW +Sd Nd Xs Ol YO Nd -YW -YW +Sd +Sd Nd RX Xw @@ -47509,44 +47484,44 @@ aa Nd Bs Ri -YW -YW +Sd +Sd XL Fh Fh Fh XL -YW +Sd XX UE -YW -YW -YW +Sd +Sd +Sd Tu -YW -YW +Sd +Sd Tn NT -YW -YW -YW +Sd +Sd +Sd OL -YW -YW -YW -YW -YW -YW +Sd +Sd +Sd +Sd +Sd +Sd Nd Gs -YW -YW +Sd +Sd SZ -YW -YW +Sd +Sd Ws -YW -YW +Sd +Sd HH Nd aa @@ -47765,8 +47740,8 @@ aa aa Nd SU -YW -Xx +Sd +MR Nm Nd SN @@ -47780,13 +47755,13 @@ Fi Tn UT Hm -YW -YW +Sd +Sd GY NT -Oy +Sd Ms -WB +Sd NT vt Mx @@ -47799,8 +47774,8 @@ Ru Of QF Nd -YW -YW +Sd +Sd Nd WN Ur @@ -48054,12 +48029,12 @@ Nd Nd Kf WV -YW +Sd Nd Nd Nd Nd -YW +Sd zY Rv Nd From 6e9d13e48f2ae842ce7d5df76c674e17b4e05d1b Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 01:52:06 -0800 Subject: [PATCH 6/8] Replace the cryopod with a simple ghost button. --- code/datums/action.dm | 11 +++++++++++ code/game/machinery/cryopod.dm | 8 +------- code/game/objects/structures/ghost_role_spawners.dm | 2 ++ 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/code/datums/action.dm b/code/datums/action.dm index 77aa729eb1..cb56c26b91 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -141,6 +141,17 @@ current_button.add_overlay(mutable_appearance(icon_icon, button_icon_state)) current_button.button_icon_state = button_icon_state +/datum/action/ghost + icon_icon = 'icons/mob/mob.dmi' + button_icon_state = "ghost" + name = "Ghostize" + desc = "Turn into a ghost and freely come back to your body." + +/datum/action/ghost/Trigger() + if(!..()) + return 0 + var/mob/M = target + M.ghostize(1) //Presets for item actions /datum/action/item_action diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index b26cae2fb0..3314401245 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -177,8 +177,6 @@ // 15 minutes-ish safe period before being despawned. var/time_till_despawn = 15 * 600 // This is reduced by 90% if a player manually enters cryo var/despawn_world_time = null // Used to keep track of the safe period. - var/penalize_cryo = TRUE // Makes it so that players who cryo are not eligible for midround antags. - var/announce_cryo = TRUE // Makes it so when players cryo it's announced to the station var/obj/machinery/computer/cryopod/control_computer var/last_no_computer_message = 0 @@ -410,7 +408,7 @@ // Ghost and delete the mob. if(!mob_occupant.get_ghost(1)) - mob_occupant.ghostize(FALSE, penalize = penalize_cryo) + mob_occupant.ghostize(FALSE, penalize = TRUE) QDEL_NULL(occupant) open_machine() @@ -494,7 +492,3 @@ //Attacks/effects. /obj/machinery/cryopod/blob_act() return //Sorta gamey, but we don't really want these to be destroyed. - -/obj/machinery/cryopod/ghost_cafe - penalize_cryo = FALSE - announce_cryo = FALSE diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 8ee6981fa4..b6c69e5470 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -620,6 +620,8 @@ SSquirks.AssignQuirks(new_spawn, new_spawn.client, TRUE, TRUE, null, FALSE, new_spawn) new_spawn.AddElement(/datum/element/ghost_role_eligibility) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, "Ghost Cafe") + var/datum/action/ghost/G = new(new_spawn) + G.Grant(new_spawn) /datum/outfit/ghostcafe name = "ID, jumpsuit and shoes" From cb1403e095db632b24b5f21ec6ebd9a8c62c83ca Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 01:54:46 -0800 Subject: [PATCH 7/8] oh yeah that's there too --- code/game/machinery/cryopod.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 3314401245..e9d3006b06 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -401,7 +401,7 @@ if(control_computer) control_computer.frozen_crew += "[mob_occupant.real_name]" - if(GLOB.announcement_systems.len && announce_cryo) + if(GLOB.announcement_systems.len) var/obj/machinery/announcement_system/announcer = pick(GLOB.announcement_systems) announcer.announce("CRYOSTORAGE", mob_occupant.real_name, announce_rank, list()) visible_message("\The [src] hums and hisses as it moves [mob_occupant.real_name] into storage.") From 5af513593cc057052aa657f379ee6157672cebd0 Mon Sep 17 00:00:00 2001 From: Putnam Date: Mon, 30 Dec 2019 13:34:53 -0800 Subject: [PATCH 8/8] fixed conflict, included helpful flavor --- code/game/objects/structures/ghost_role_spawners.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index ecb9675aeb..4656a9348e 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -629,6 +629,8 @@ new_spawn.AddElement(/datum/element/ghost_role_eligibility) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn,TRAIT_EXEMPT_HEALTH_EVENTS,GHOSTROLE_TRAIT) + to_chat(new_spawn,"You maybe sharing your cafe with some ninja-captured individuals, so make sure to only interact with the ghosts you hear as a ghost!") + to_chat(new_spawn,"You can turn yourself into a ghost and freely reenter your body with the ghost action.") var/datum/action/ghost/G = new(new_spawn) G.Grant(new_spawn)