diff --git a/code/datums/config/config_types/config_game_world.dm b/code/datums/config/config_types/config_game_world.dm index fe91d44250f..93df9d8f422 100644 --- a/code/datums/config/config_types/config_game_world.dm +++ b/code/datums/config/config_types/config_game_world.dm @@ -20,7 +20,8 @@ /decl/config/toggle/on/cult_ghostwriter, /decl/config/toggle/allow_holidays, /decl/config/toggle/humans_need_surnames, - /decl/config/toggle/roundstart_level_generation + /decl/config/toggle/roundstart_level_generation, + /decl/config/toggle/lights_start_on ) /decl/config/num/exterior_ambient_light @@ -125,3 +126,7 @@ /decl/config/toggle/roundstart_level_generation uid = "roundstart_level_generation" desc = "Enable/Disable random level generation. Will behave strangely if turned off with a map that expects it on." + +/decl/config/toggle/lights_start_on + uid = "lights_start_on" + desc = "If true, most lightswitches start on by default. Otherwise, they start off." \ No newline at end of file diff --git a/code/datums/inventory_slots/slots/slot_shoes.dm b/code/datums/inventory_slots/slots/slot_shoes.dm index 9ba3252eb8e..02c47d26787 100644 --- a/code/datums/inventory_slots/slots/slot_shoes.dm +++ b/code/datums/inventory_slots/slots/slot_shoes.dm @@ -22,7 +22,7 @@ var/blood_color for(var/foot_tag in list(BP_L_FOOT, BP_R_FOOT)) var/obj/item/organ/external/stomper = GET_EXTERNAL_ORGAN(user, foot_tag) - if(stomper && stomper.coating) + if(stomper && stomper.coating?.total_volume) blood_color = stomper.coating.get_color() break if(blood_color) @@ -38,7 +38,7 @@ return "[pronouns.He] [pronouns.is] wearing [_holding.get_examine_line()] on [pronouns.his] feet." for(var/bp in list(BP_L_FOOT, BP_R_FOOT)) var/obj/item/organ/external/E = GET_EXTERNAL_ORGAN(owner, bp) - if(E && E.coating) + if(E && E.coating?.total_volume) if(user == owner) return "There's something on your feet!" return "There's something on [pronouns.his] feet!" diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index aa610cdf12f..85671b7bb5e 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -164,6 +164,15 @@ for(var/g in decls_repository.get_decl_paths_of_subtype(/decl/material/gas)) if(!env_info.important_gasses[g]) trace_gas += g + // not everything in these lists is a subtype of /decl/material/gas, so: + for(var/dangerous_gas in env_info.dangerous_gasses) + if(env_info.important_gasses[dangerous_gas] || !env_info.dangerous_gasses[dangerous_gas]) + continue + trace_gas |= dangerous_gas + for(var/filtered_gas in env_info.filter_gasses) + if(env_info.important_gasses[filtered_gas]) + continue + trace_gas |= filtered_gas queue_icon_update() diff --git a/code/game/machinery/lightswitch.dm b/code/game/machinery/lightswitch.dm index 33a1bb173c2..8fc6978ab6f 100644 --- a/code/game/machinery/lightswitch.dm +++ b/code/game/machinery/lightswitch.dm @@ -14,7 +14,7 @@ z_flags = ZMM_MANGLE_PLANES layer = ABOVE_WINDOW_LAYER - var/on = 0 + var/on = null // if null, takes from config option on init var/area/connected_area = null var/other_area = null @@ -42,6 +42,8 @@ /obj/machinery/light_switch/LateInitialize() . = ..() + if(isnull(on)) + on = get_config_value(/decl/config/toggle/lights_start_on) connected_area?.set_lightswitch(on) update_icon() diff --git a/code/game/objects/items/__item.dm b/code/game/objects/items/__item.dm index 088453f8012..5b40afb9144 100644 --- a/code/game/objects/items/__item.dm +++ b/code/game/objects/items/__item.dm @@ -860,7 +860,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out. /obj/item/proc/get_examine_name() . = name - if(coating) + if(coating?.total_volume) . = SPAN_WARNING("stained [.]") if(gender == PLURAL) . = "some [.]" diff --git a/code/modules/chat_filter/_chat_filter.dm b/code/modules/chat_filter/_chat_filter.dm index 95f52cf83a2..15beabc9ba0 100644 --- a/code/modules/chat_filter/_chat_filter.dm +++ b/code/modules/chat_filter/_chat_filter.dm @@ -7,7 +7,7 @@ var/global/list/chat_modifiers_in_use var/list/all_filters = decls_repository.get_decls_of_type(/decl/chat_filter) for(var/filtertype in all_filters) var/decl/chat_filter/chat_filter = all_filters[filtertype] - if(!chat_filter.disabled && chat_filter.filter_category != chat_filter.type) + if(!chat_filter.disabled) if(chat_filter.can_deny_message) global.chat_blockers_in_use += chat_filter if(chat_filter.can_modify_message) @@ -31,10 +31,10 @@ var/global/list/chat_modifiers_in_use . = chat_filter.replace(., match) /decl/chat_filter + abstract_type = /decl/chat_filter var/name var/disabled var/summary - var/filter_category = /decl/chat_filter var/can_modify_message = FALSE var/can_deny_message = FALSE diff --git a/code/modules/chat_filter/_chat_filter_regex.dm b/code/modules/chat_filter/_chat_filter_regex.dm index 3ddd4dee624..29982777e74 100644 --- a/code/modules/chat_filter/_chat_filter_regex.dm +++ b/code/modules/chat_filter/_chat_filter_regex.dm @@ -1,6 +1,7 @@ /decl/chat_filter/regexp - filter_category = /decl/chat_filter/regexp + abstract_type = /decl/chat_filter/regexp var/regex/filter_regex /decl/chat_filter/regexp/match(var/message) - . = filter_regex && findtext(message, filter_regex) + filter_regex.index = 0 // we use the global flag, so we need to reset this for every match or else repeat messages will break + . = filter_regex && filter_regex.Find(message) diff --git a/code/modules/chat_filter/filter_markdown.dm b/code/modules/chat_filter/filter_markdown.dm index 4b31c915db5..5421067fa56 100644 --- a/code/modules/chat_filter/filter_markdown.dm +++ b/code/modules/chat_filter/filter_markdown.dm @@ -1,27 +1,27 @@ /decl/chat_filter/regexp/markdown - filter_category = /decl/chat_filter/regexp/markdown + abstract_type = /decl/chat_filter/regexp/markdown can_modify_message = TRUE var/format_char var/format_replace_proc /decl/chat_filter/regexp/markdown/Initialize() . = ..() - filter_regex = regex("([format_char])(.+?)([format_char])", "g") + filter_regex = regex("([REGEX_QUOTE(format_char)])(.+?)([REGEX_QUOTE(format_char)])", "g") /decl/chat_filter/regexp/markdown/replace(var/message, var/match) . = filter_regex.Replace(message, format_replace_proc) /proc/chatFilterRegexBold(full_match, prefix_char, message_body, suffix_char) - . = "[message_body]" + . = "[trim(message_body)]" /decl/chat_filter/regexp/markdown/bold name = "Bold" summary = "Applies bold to speech and emote text that is surrounded by *asterisks*." - format_char = "\\*" + format_char = "*" format_replace_proc = /proc/chatFilterRegexBold /proc/chatFilterRegexItalic(full_match, prefix_char, message_body, suffix_char) - . = "[message_body]" + . = "[trim(message_body)]" /decl/chat_filter/regexp/markdown/italic name = "Italics" diff --git a/code/modules/emotes/emote_mob.dm b/code/modules/emotes/emote_mob.dm index 5778a4ce922..4d63def2c68 100644 --- a/code/modules/emotes/emote_mob.dm +++ b/code/modules/emotes/emote_mob.dm @@ -117,8 +117,6 @@ if(!message || !emoter) return - message = html_decode(message) - name_anchor = findtext(message, anchor_char) if(name_anchor > 0) // User supplied emote with visible_emote token (default ^) pretext = copytext(message, 1, name_anchor) @@ -139,11 +137,7 @@ if(end_char != " ") pretext += " " - // Grab the last character of the emote message. - end_char = copytext(subtext, length(subtext), length(subtext) + 1) - if(!(end_char in list(".", "?", "!", "\"", "-", "~"))) // gotta include ~ for all you fucking weebs - // No punctuation supplied. Tack a period on the end. - subtext += "." + handle_autopunctuation(subtext) // Add a space to the subtext, unless it begins with an apostrophe or comma. if(subtext != ".") @@ -153,12 +147,9 @@ if(start_char != "," && start_char != "'") subtext = " " + subtext - pretext = capitalize(html_encode(pretext)) - nametext = html_encode(nametext) - subtext = html_encode(subtext) // Store the player's name in a nice bold, naturalement nametext = "[emoter]" - return pretext + nametext + subtext + return capitalize(pretext) + nametext + subtext /mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null) @@ -171,15 +162,16 @@ else input = message - if(input) - message = format_emote(src, message) - else + if(!input) return + message = trim(html_encode(message)) + message = filter_modify_message(message) + message = format_emote(src, message) + if (message) log_emote("[name]/[key] : [message]") //do not show NPC animal emotes to ghosts, it turns into hellscape - message = filter_modify_message(message) var/check_ghosts = client ? /datum/client_preference/ghost_sight : null if(m_type == VISIBLE_MESSAGE) visible_message(message, checkghosts = check_ghosts) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index aeddfea8312..7024317a429 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -204,7 +204,7 @@ criminal = R.get_criminalStatus() msg += "Criminal status: \[[criminal]\]\n" - msg += "Security records: \[View\]\n" + msg += "Security records: \[View\]\n" if(hasHUD(user, HUD_MEDICAL)) var/perpname = "wot" @@ -223,7 +223,7 @@ medical = R.get_status() msg += "Physical status: \[[medical]\]\n" - msg += "Medical records: \[View\]\n" + msg += "Medical records: \[View\]\n" // Show IC/OOC info if available. if(comments_record_id) @@ -270,7 +270,7 @@ /mob/living/carbon/human/getHUDsource(hudtype) var/obj/item/clothing/glasses/G = get_equipped_item(slot_glasses_str) if(!istype(G)) - return + return ..() if(G.glasses_hud_type & hudtype) return G if(G.hud && (G.hud.glasses_hud_type & hudtype)) diff --git a/code/modules/mob/living/life.dm b/code/modules/mob/living/life.dm index b6c56f75e32..782bdbae84d 100644 --- a/code/modules/mob/living/life.dm +++ b/code/modules/mob/living/life.dm @@ -19,6 +19,7 @@ machine = null CLEAR_HUD_ALERTS(src) // These will be set again in the various update procs below. + handle_hud_glasses() // Clear HUD overlay images. Done early so that organs, etc. can add them back. //Handle temperature/pressure differences between body and environment handle_environment(loc.return_air()) @@ -540,7 +541,6 @@ /mob/living/proc/handle_hud_icons() handle_hud_icons_health() - handle_hud_glasses() /mob/living/proc/handle_hud_icons_health() return diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 26cd2a57e2d..03e864618d9 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -100,18 +100,6 @@ returns[2] = null return returns -/mob/living/proc/format_say_message(var/message = null) - if(!message) - return - - message = html_decode(message) - - var/end_char = copytext_char(message, -1) - if(!(end_char in list(".", "?", "!", "-", "~"))) - message += "." - - return html_encode(message) - /mob/living/proc/handle_mob_specific_speech(message, message_mode, verb = "says", decl/language/speaking) SHOULD_CALL_PARENT(TRUE) return FALSE @@ -142,7 +130,8 @@ else message = copytext_char(message, 3) - message = trim_left(message) + // trim pre-language-parsing so we can get language and radio keys + message = trim(message) //parse the language code and consume it if(!speaking) @@ -177,10 +166,10 @@ else verb = say_quote(message, speaking) - message = trim_left(message) + message = trim(html_encode(message)) // trim again post-language-parsing message = handle_autohiss(message, speaking) - message = format_say_message(message) message = filter_modify_message(message) + message = handle_autopunctuation(message) if(speaking && !speaking.can_be_spoken_properly_by(src)) message = speaking.muddle(message) diff --git a/code/modules/mob/observer/eye/freelook/life.dm b/code/modules/mob/observer/eye/freelook/life.dm index 6a8a6975fd7..98b9c477e1f 100644 --- a/code/modules/mob/observer/eye/freelook/life.dm +++ b/code/modules/mob/observer/eye/freelook/life.dm @@ -1,7 +1,7 @@ /mob/observer/eye/freelook/Life() - . = ..() + ..() // If we lost our client, reset the list of visible chunks so they update properly on return - if(. && owner == src && !client) + if(owner == src && !client) visibleChunks.Cut() /*else if(owner && !owner.client) visibleChunks.Cut()*/ diff --git a/code/modules/mob/observer/ghost/ghost.dm b/code/modules/mob/observer/ghost/ghost.dm index d2e89e4e528..a03d9e7cf9e 100644 --- a/code/modules/mob/observer/ghost/ghost.dm +++ b/code/modules/mob/observer/ghost/ghost.dm @@ -109,8 +109,8 @@ Works together with spawning an observer, noted above. /mob/observer/ghost/Life() - . = ..() - if(!. || !loc || !client) + ..() + if(!loc || !client) return FALSE handle_hud_glasses() diff --git a/code/modules/mob/say.dm b/code/modules/mob/say.dm index 4d06bb5bfd1..a7363022c79 100644 --- a/code/modules/mob/say.dm +++ b/code/modules/mob/say.dm @@ -111,3 +111,12 @@ var/global/list/special_channel_keys = list( var/obj/item/mask = get_equipped_item(slot_wear_mask_str) if(istype(mask, /obj/item/clothing/mask/muzzle) || istype(mask, /obj/item/sealant)) . = mask + +/// Adds punctuation to an emote or speech message automatically. +/mob/proc/handle_autopunctuation(message) + if(!message) + return + var/end_char = copytext_char(trim_right(strip_html_properly(message)), -1) + if(!(end_char in list(".", "?", "!", "-", "~"))) + message += "." + return message \ No newline at end of file diff --git a/code/modules/modular_computers/computers/modular_computer/interaction.dm b/code/modules/modular_computers/computers/modular_computer/interaction.dm index 31df9783893..1c50131c7d4 100644 --- a/code/modules/modular_computers/computers/modular_computer/interaction.dm +++ b/code/modules/modular_computers/computers/modular_computer/interaction.dm @@ -138,6 +138,7 @@ LAZYADD(., /decl/interaction_handler/remove_id/modular_computer) LAZYADD(., /decl/interaction_handler/remove_pen/modular_computer) LAZYADD(., /decl/interaction_handler/emergency_shutdown) + LAZYADD(., /decl/interaction_handler/remove_chargestick) // // Remove ID @@ -149,7 +150,8 @@ . = ..() if(.) var/datum/extension/assembly/assembly = get_extension(target, /datum/extension/assembly) - . = !!(assembly?.get_component(PART_CARD)) + var/obj/item/stock_parts/computer/card_slot/card_slot = assembly?.get_component(PART_CARD) + return !!card_slot?.stored_card /decl/interaction_handler/remove_id/modular_computer/invoked(atom/target, mob/user, obj/item/prop) var/datum/extension/assembly/assembly = get_extension(target, /datum/extension/assembly) @@ -186,4 +188,26 @@ return !isnull(assembly) && assembly.enabled /decl/interaction_handler/emergency_shutdown/invoked(obj/item/modular_computer/target, mob/user, obj/item/prop) - target.emergency_shutdown() \ No newline at end of file + target.emergency_shutdown() + +// +// Remove Charge-stick +// +/decl/interaction_handler/remove_chargestick + name = "Remove Chargestick" + icon = 'icons/screen/radial.dmi' + icon_state = "radial_eject" + expected_target_type = /obj/item/modular_computer + +/decl/interaction_handler/remove_chargestick/is_possible(atom/target, mob/user, obj/item/prop) + . = ..() + if(!.) + return . + var/datum/extension/assembly/assembly = get_extension(target, /datum/extension/assembly) + var/obj/item/stock_parts/computer/charge_stick_slot/mstick_slot = assembly.get_component(PART_MSTICK) + return !!mstick_slot?.stored_stick + +/decl/interaction_handler/remove_chargestick/invoked(atom/target, mob/user, obj/item/prop) + var/datum/extension/assembly/assembly = get_extension(target, /datum/extension/assembly) + var/obj/item/stock_parts/computer/charge_stick_slot/mstick_slot = assembly.get_component(PART_MSTICK) + mstick_slot.eject_stick(user) \ No newline at end of file diff --git a/maps/tether/atoms/areas.dm b/maps/tether/atoms/areas.dm index 3840c41e32a..dda17598695 100644 --- a/maps/tether/atoms/areas.dm +++ b/maps/tether/atoms/areas.dm @@ -282,8 +282,8 @@ icon_state = "shuttle2" base_turf = /turf/floor/natural/barren -/area/shuttle/escape/centcom - name = "\improper Emergency Shuttle CentCom" +/area/shuttle/tram + name = "\improper Orange Line Tram" icon_state = "shuttle" /area/shuttle/specops/centcom diff --git a/maps/tether/datums/jobs/civilian.dm b/maps/tether/datums/jobs/civilian.dm index 9c39a8cf737..b1b020f4917 100644 --- a/maps/tether/datums/jobs/civilian.dm +++ b/maps/tether/datums/jobs/civilian.dm @@ -94,6 +94,7 @@ department_types = list(/decl/department/supply) total_positions = 1 spawn_positions = 1 + pto_type = PTO_CARGO supervisors = "the head of personnel" economic_power = 5 access = list( @@ -139,6 +140,7 @@ department_types = list(/decl/department/supply) total_positions = 3 spawn_positions = 3 + pto_type = PTO_CARGO supervisors = "the quartermaster and the head of personnel" access = list( access_maint_tunnels, @@ -175,6 +177,7 @@ department_types = list(/decl/department/supply) total_positions = 4 spawn_positions = 4 + pto_type = PTO_CARGO supervisors = "the quartermaster and the head of personnel" economic_power = 5 access = list( diff --git a/maps/tether/datums/jobs/command.dm b/maps/tether/datums/jobs/command.dm index 955efdcc3b7..087a6adbfbd 100644 --- a/maps/tether/datums/jobs/command.dm +++ b/maps/tether/datums/jobs/command.dm @@ -15,6 +15,8 @@ head_position = TRUE req_admin_notify = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND + timeoff_factor = 5 guestbanned = TRUE must_fill = TRUE not_random_selectable = TRUE @@ -57,6 +59,7 @@ head_position = TRUE req_admin_notify = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND guestbanned = TRUE not_random_selectable = TRUE access = list( @@ -154,6 +157,7 @@ title = "Command Secretary" department_types = list(/decl/department/command, /decl/department/service) disallow_jobhop = TRUE + pto_type = PTO_COMMAND // you count! for now... total_positions = 2 spawn_positions = 2 supervisors = "Command staff" diff --git a/maps/tether/datums/jobs/engineering.dm b/maps/tether/datums/jobs/engineering.dm index f3a6e6e3f9c..e1a283ec61a 100644 --- a/maps/tether/datums/jobs/engineering.dm +++ b/maps/tether/datums/jobs/engineering.dm @@ -16,6 +16,8 @@ must_fill = TRUE not_random_selectable = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND + timeoff_factor = 3 access = list( access_engine, access_engine_equip, @@ -95,6 +97,7 @@ total_positions = 8 spawn_positions = 8 + pto_type = PTO_ENGINEERING supervisors = "the chief engineer" selection_color = "#5b4d20" economic_power = 5 diff --git a/maps/tether/datums/jobs/medical.dm b/maps/tether/datums/jobs/medical.dm index 77788d1178d..407ff9327b6 100644 --- a/maps/tether/datums/jobs/medical.dm +++ b/maps/tether/datums/jobs/medical.dm @@ -2,6 +2,8 @@ title = "Chief Medical Officer" head_position = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND + timeoff_factor = 3 department_types = list( /decl/department/medical, /decl/department/command @@ -80,6 +82,7 @@ minimal_player_age = 3 total_positions = 5 spawn_positions = 3 + pto_type = PTO_MEDICAL supervisors = "the chief medical officer" selection_color = "#013d3b" economic_power = 7 @@ -134,6 +137,7 @@ minimal_player_age = 7 total_positions = 2 spawn_positions = 2 + pto_type = PTO_MEDICAL supervisors = "the chief medical officer" selection_color = "#013d3b" economic_power = 5 @@ -169,6 +173,7 @@ department_types = list(/decl/department/medical) total_positions = 1 spawn_positions = 1 + pto_type = PTO_MEDICAL economic_power = 5 minimal_player_age = 3 supervisors = "the chief medical officer" diff --git a/maps/tether/datums/jobs/offduty.dm b/maps/tether/datums/jobs/offduty.dm index 4e0dd28b4dc..910ad61f308 100644 --- a/maps/tether/datums/jobs/offduty.dm +++ b/maps/tether/datums/jobs/offduty.dm @@ -12,6 +12,7 @@ access = list() minimal_access = list() outfit_type = /decl/hierarchy/outfit/job/generic/assistant + description = "Off-duty crew has no responsibilities or authority and is just here to spend their \"well-deserved\" time off." /datum/job/offduty/get_access() if(get_config_value(/decl/config/toggle/assistant_maint)) @@ -26,25 +27,37 @@ /datum/job/offduty/cargo title = "Off-duty Cargo" + pto_type = PTO_CARGO department_types = list(/decl/department/supply) selection_color = "#9b633e" /datum/job/offduty/engineering title = "Off-duty Engineer" + pto_type = PTO_ENGINEERING department_types = list(/decl/department/engineering) selection_color = "#5b4d20" /datum/job/offduty/medical title = "Off-duty Medic" + pto_type = PTO_MEDICAL department_types = list(/decl/department/medical) selection_color = "#013d3b" /datum/job/offduty/science title = "Off-duty Scientist" + pto_type = PTO_SCIENCE department_types = list(/decl/department/science) selection_color = "#633d63" /datum/job/offduty/security title = "Off-duty Officer" + pto_type = PTO_SECURITY department_types = list(/decl/department/security) selection_color = "#601c1c" + + +/datum/job/offduty/security + title = "Off-duty Command" + pto_type = PTO_COMMAND + department_types = list(/decl/department/command) + selection_color = "#9b633e" diff --git a/maps/tether/datums/jobs/science.dm b/maps/tether/datums/jobs/science.dm index eba32803e49..327b3f904b4 100644 --- a/maps/tether/datums/jobs/science.dm +++ b/maps/tether/datums/jobs/science.dm @@ -3,6 +3,8 @@ alt_titles = list("Chief Science Officer", "Research Supervisor") head_position = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND + timeoff_factor = 3 req_admin_notify = TRUE guestbanned = TRUE must_fill = TRUE @@ -82,6 +84,7 @@ department_types = list(/decl/department/science) total_positions = 8 spawn_positions = 5 + pto_type = PTO_SCIENCE supervisors = "the Research Director" selection_color = "#633d63" economic_power = 7 @@ -131,6 +134,7 @@ department_types = list(/decl/department/science) total_positions = 2 spawn_positions = 2 + pto_type = PTO_SCIENCE supervisors = "the Chief Science Officer" selection_color = "#633d63" economic_power = 5 diff --git a/maps/tether/datums/jobs/security.dm b/maps/tether/datums/jobs/security.dm index a824d580752..7f4c8e04581 100644 --- a/maps/tether/datums/jobs/security.dm +++ b/maps/tether/datums/jobs/security.dm @@ -2,6 +2,8 @@ title = "Head of Security" head_position = TRUE disallow_jobhop = TRUE + pto_type = PTO_COMMAND + timeoff_factor = 3 department_types = list( /decl/department/security, /decl/department/command @@ -96,6 +98,7 @@ department_types = list(/decl/department/security) total_positions = 1 spawn_positions = 1 + pto_type = PTO_SECURITY supervisors = "the head of security" selection_color = "#601c1c" economic_power = 5 @@ -193,6 +196,7 @@ department_types = list(/decl/department/security) total_positions = 4 spawn_positions = 4 + pto_type = PTO_SECURITY supervisors = "the head of security" selection_color = "#601c1c" alt_titles = list("Junior Officer") diff --git a/maps/tether/icons/hud.dmi b/maps/tether/icons/hud.dmi index 16c0b5defac..84f34230f91 100644 Binary files a/maps/tether/icons/hud.dmi and b/maps/tether/icons/hud.dmi differ diff --git a/maps/tether/main_dmms/tether-01-surface1.dmm b/maps/tether/main_dmms/tether-01-surface1.dmm index 83f22ebcb7f..b4dda11e824 100644 --- a/maps/tether/main_dmms/tether-01-surface1.dmm +++ b/maps/tether/main_dmms/tether-01-surface1.dmm @@ -32655,6 +32655,10 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/floor/tiled/dark, /area/tether/surfacebase/medical/triage) +"rGX" = ( +/obj/effect/shuttle_landmark/escape_shuttle/station, +/turf/floor/tiled/techfloor/grid, +/area/tether/surfacebase/tram) "rKM" = ( /obj/structure/stairs/long/north, /turf/floor/tiled, @@ -54171,7 +54175,7 @@ aqE aqE aqE aqE -aqE +rGX aqE aqE aqE diff --git a/maps/tether/main_dmms/tether-10-colony.dmm b/maps/tether/main_dmms/tether-10-colony.dmm index 334cca269c7..9585c827787 100644 --- a/maps/tether/main_dmms/tether-10-colony.dmm +++ b/maps/tether/main_dmms/tether-10-colony.dmm @@ -17,14 +17,10 @@ icon_state = "burst_l" }, /turf/unsimulated/floor/shuttle_ceiling, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "af" = ( /turf/wall/shuttle/dark, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "ag" = ( /turf/unsimulated/floor/shuttle_ceiling, /area/centcom/specops) @@ -36,9 +32,7 @@ dir = 8 }, /turf/unsimulated/floor/shuttle_ceiling, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aj" = ( /obj/structure/shuttle/engine/heater{ dir = 8 @@ -47,22 +41,16 @@ dir = 4 }, /turf/floor/airless, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "ak" = ( /obj/machinery/computer/modular/preset/civilian, /obj/machinery/computer/shuttle_control/specops, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "al" = ( /obj/structure/bed/chair, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "am" = ( /obj/machinery/recharger/wallcharger{ pixel_x = 4; @@ -70,9 +58,7 @@ }, /obj/structure/bed/chair, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "an" = ( /obj/machinery/recharger/wallcharger{ pixel_x = 4; @@ -87,16 +73,12 @@ }, /obj/structure/bed/chair, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "ao" = ( /turf/wall/shuttle/dark{ hard_corner = 1 }, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "ap" = ( /obj/structure/window/reinforced{ dir = 1 @@ -194,6 +176,12 @@ icon_state = "dark" }, /area/centcom/specops) +"aw" = ( +/obj/effect/shuttle_landmark/escape_shuttle/start, +/turf/floor/shuttle/white{ + color = "#cccccc" + }, +/area/shuttle/tram) "ax" = ( /obj/structure/window/reinforced{ dir = 1 @@ -275,14 +263,10 @@ dir = 8 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aC" = ( /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aD" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ id_tag = "specops_shuttle_fore"; @@ -292,9 +276,7 @@ dir = 1 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aE" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "specops_shuttle_fore_hatch"; @@ -302,9 +284,7 @@ name = "Forward Docking Hatch" }, /turf/floor, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aF" = ( /obj/structure/rack, /obj/item/ammo_casing/rocket, @@ -452,17 +432,13 @@ pixel_y = -30 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aR" = ( /obj/machinery/computer/prisoner{ name = "Implant Management" }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aS" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ id_tag = "specops_shuttle_port"; @@ -472,17 +448,13 @@ dir = 1 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aT" = ( /obj/structure/bed/chair{ dir = 1 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aU" = ( /obj/structure/bed/chair{ dir = 1 @@ -491,9 +463,7 @@ dir = 4 }, /turf/floor/shuttle/blue, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "aV" = ( /obj/structure/rack, /obj/item/gun/energy/pulse_rifle, @@ -639,9 +609,7 @@ icon_state = "burst_r" }, /turf/unsimulated/floor/shuttle_ceiling, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "bi" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "specops_shuttle_port_hatch"; @@ -651,9 +619,7 @@ /turf/unsimulated/floor{ icon_state = "dark" }, -/area/shuttle/specops/centcom{ - base_turf = /turf/unsimulated/floor/shuttle_ceiling - }) +/area/shuttle/specops/centcom) "bj" = ( /obj/structure/rack, /obj/item/clothing/gloves/thick/swat{ @@ -9252,16 +9218,12 @@ /area/centcom/security) "si" = ( /turf/wall/shuttle, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sj" = ( /obj/structure/grille, /obj/structure/shuttle/window, /turf/floor, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sk" = ( /obj/structure/table/woodentable{ dir = 5 @@ -9415,9 +9377,7 @@ /area/centcom/security) "sB" = ( /turf/wall/shuttle/hard_corner, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sC" = ( /obj/structure/closet/hydrant{ pixel_x = -30; @@ -9433,24 +9393,18 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sD" = ( /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sE" = ( /obj/structure/bed/chair/shuttle, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sF" = ( /obj/structure/bed/chair{ dir = 8 @@ -9641,17 +9595,13 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sX" = ( /obj/structure/table, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sY" = ( /obj/machinery/status_display{ pixel_y = 30 @@ -9663,9 +9613,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "sZ" = ( /obj/structure/table/glass, /obj/item/box/cups, @@ -9844,9 +9792,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "tm" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 4 @@ -10015,9 +9961,7 @@ name = "Shuttle Hatch" }, /turf/floor/shuttle/yellow, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "tC" = ( /obj/machinery/door/airlock/external/glass{ id_tag = "escape_shuttle_hatch_offsite"; @@ -10025,9 +9969,7 @@ name = "Shuttle Hatch" }, /turf/floor/shuttle/yellow, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "tD" = ( /obj/structure/table/glass, /obj/item/roller, @@ -10248,9 +10190,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "ub" = ( /obj/structure/bed/chair/shuttle, /obj/structure/emergency_dispenser{ @@ -10260,9 +10200,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "uc" = ( /obj/effect/wingrille_spawn/reinforced/crescent, /turf/unsimulated/floor/steel, @@ -10330,18 +10268,14 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "un" = ( /obj/structure/table, /obj/random/maintenance/clean, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "uo" = ( /obj/structure/flora/pottedplant{ icon_state = "plant-22" @@ -10571,9 +10505,7 @@ "uP" = ( /obj/structure/sign/nanotrasen, /turf/wall/shuttle, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "uQ" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 8 @@ -10675,18 +10607,14 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "vc" = ( /obj/structure/table, /obj/random/plushie, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "vd" = ( /obj/machinery/door/firedoor, /obj/machinery/door/blast/regular/open{ @@ -10781,9 +10709,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "vl" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -10795,9 +10721,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "vm" = ( /turf/unsimulated/wall, /area/centcom/security/arrivals) @@ -10979,7 +10903,6 @@ /area/centcom/restaurant) "vJ" = ( /obj/structure/sign/directions/elevator{ - name = "\improper Elevator"; pixel_x = -30 }, /turf/unsimulated/floor/steel, @@ -11300,17 +11223,13 @@ /obj/structure/grille, /obj/structure/shuttle/window, /turf/floor/shuttle/white, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "wg" = ( /obj/effect/floor_decal/industrial/outline/blue, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "wh" = ( /obj/machinery/computer/modular/preset/cardslot/personnel{ dir = 4 @@ -11587,18 +11506,14 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "wD" = ( /obj/effect/floor_decal/industrial/outline/blue, /obj/machinery/light, /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "wE" = ( /obj/machinery/computer/modular/preset/civilian{ dir = 4 @@ -11833,9 +11748,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "xa" = ( /obj/structure/bed/chair/shuttle{ dir = 1 @@ -11844,9 +11757,7 @@ /turf/floor/shuttle/white{ color = "#cccccc" }, -/area/shuttle/escape/centcom{ - base_turf = /turf/unsimulated/floor/techfloor_grid - }) +/area/shuttle/tram) "xb" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 10 @@ -21641,7 +21552,7 @@ sD sD sD sD -sD +aw sD sD sD diff --git a/maps/tether/submaps/tether_misc.dmm b/maps/tether/submaps/tether_misc.dmm index ca36ec717a8..00169b4a277 100644 --- a/maps/tether/submaps/tether_misc.dmm +++ b/maps/tether/submaps/tether_misc.dmm @@ -29,6 +29,10 @@ /obj/structure/window/reinforced, /turf/unsimulated/wall, /area/space) +"aA" = ( +/obj/effect/shuttle_landmark/escape_shuttle/transit, +/turf/unsimulated/floor/techfloor_grid, +/area/centcom/ferry) "aI" = ( /obj/structure/window/reinforced{ dir = 4 @@ -586,8 +590,8 @@ /turf/floor/holofloor/tiled, /area/holodeck/source_emptycourt) "cC" = ( -/turf/unsimulated/floor/maglev, -/area/space) +/turf/unsimulated/dark_filler, +/area/centcom/ferry) "cO" = ( /obj/machinery/embedded_controller/radio/simple_docking_controller{ id_tag = "supply_shuttle"; @@ -1931,7 +1935,7 @@ /obj/effect/transit/light{ dir = 8 }, -/turf/unsimulated/mineral, +/turf/unsimulated/dark_filler, /area/centcom/ferry) "nw" = ( /obj/machinery/door/window/holowindoor{ @@ -1978,8 +1982,12 @@ }, /area/holodeck/holodorm/source_zaddat) "uC" = ( +/obj/effect/floor_decal/transit/orange{ + dir = 8 + }, +/obj/effect/step_trigger/lost_in_space/tram, /turf/unsimulated/floor/techfloor_grid, -/area/space) +/area/centcom/ferry) "vi" = ( /obj/structure/table, /obj/item/firstaid/surgery, @@ -2312,6 +2320,10 @@ }, /turf/floor/tiled/white, /area/holodeck/holodorm/source_standard) +"EV" = ( +/obj/effect/step_trigger/lost_in_space/tram, +/turf/unsimulated/floor/maglev, +/area/centcom/ferry) "EX" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -2574,6 +2586,13 @@ }, /turf/floor/tiled/white, /area/holodeck/holodorm/source_standard) +"Os" = ( +/obj/effect/floor_decal/transit/orange{ + dir = 4 + }, +/obj/effect/step_trigger/lost_in_space/tram, +/turf/unsimulated/floor/techfloor_grid, +/area/centcom/ferry) "OJ" = ( /obj/effect/floor_decal/borderfloorwhite{ dir = 1 @@ -2728,6 +2747,10 @@ }, /turf/floor/tiled/white, /area/holodeck/holodorm/source_standard) +"YD" = ( +/obj/effect/step_trigger/lost_in_space/tram, +/turf/unsimulated/floor/techfloor_grid, +/area/centcom/ferry) "ZY" = ( /obj/structure/table/glass/pglass, /obj/effect/floor_decal/borderfloorwhite{ @@ -3319,7 +3342,6 @@ ap ap "} (5,1,1) = {" -gX hl hl hl @@ -3350,7 +3372,8 @@ hl hl hl hl -gX +hl +hl ap ap ap @@ -3461,7 +3484,7 @@ ap ap "} (6,1,1) = {" -gX +cC hm hm hm @@ -3491,7 +3514,7 @@ hm hv hm hm -hm +uC mu ap ap @@ -3603,7 +3626,7 @@ ap ap "} (7,1,1) = {" -gX +cC hn hn hn @@ -3612,20 +3635,20 @@ hn hn ib ib -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo lo hn @@ -3633,8 +3656,8 @@ hn hn hn hn -hn -gX +YD +cC ap ap ap @@ -3745,7 +3768,7 @@ ap ap "} (8,1,1) = {" -gX +cC ho ho ho @@ -3753,30 +3776,30 @@ ho ho ho ic -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -lx ho ho ho ho ho ho -gX +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +lx +ho +ho +ho +ho +ho +EV +cC ap ap ap @@ -3887,7 +3910,7 @@ ap ap "} (9,1,1) = {" -gX +cC hn hn hn @@ -3895,30 +3918,30 @@ hn hn hn ib -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -lo hn hn hn hn hn hn -gX +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +lo +hn +hn +hn +hn +hn +YD +cC ap ap ap @@ -4029,7 +4052,7 @@ ap ap "} (10,1,1) = {" -gX +cC hn hn hn @@ -4037,30 +4060,30 @@ hn hn hn ib -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -lo hn hn hn hn hn hn -gX +hn +aA +hn +hn +hn +hn +hn +hn +hn +hn +lo +hn +hn +hn +hn +hn +YD +cC ap ap ap @@ -4171,7 +4194,7 @@ ap ap "} (11,1,1) = {" -gX +cC hn hn hn @@ -4179,30 +4202,30 @@ hn hn hn id -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -lo hn hn hn hn hn hn -gX +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +lo +hn +hn +hn +hn +hn +YD +cC ap ap ap @@ -4313,7 +4336,7 @@ ap ap "} (12,1,1) = {" -gX +cC hn hn hn @@ -4321,30 +4344,30 @@ hn hn hn id -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -lo hn hn hn hn hn hn -gX +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +lo +hn +hn +hn +hn +hn +YD +cC ap ap ap @@ -4455,7 +4478,7 @@ ap ap "} (13,1,1) = {" -gX +cC ho ho ho @@ -4463,30 +4486,30 @@ ho ho ho ie -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -cC -lx ho ho ho ho ho ho -gX +ho +ho +ho +ho +ho +ho +ho +ho +ho +ho +lx +ho +ho +ho +ho +ho +EV +cC ap ap ap @@ -4597,7 +4620,7 @@ ap ap "} (14,1,1) = {" -gX +cC hn hn hn @@ -4606,20 +4629,20 @@ hn hn id id -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC -uC +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn +hn lo lo hn @@ -4627,8 +4650,8 @@ hn hn hn hn -hn -gX +YD +cC ap ap ap @@ -4739,7 +4762,7 @@ ap ap "} (15,1,1) = {" -gX +cC hp hp hp @@ -4769,8 +4792,8 @@ hp hp hI hp -hp -gX +Os +cC ap ap ap @@ -4881,7 +4904,6 @@ ap ap "} (16,1,1) = {" -gX hl hl hl @@ -4912,7 +4934,8 @@ hl hl hl hl -gX +hl +hl ap ap ap diff --git a/maps/tether/submaps/tether_ships.dmm b/maps/tether/submaps/tether_ships.dmm index b5ccd2acfaf..5e7a49648fb 100644 --- a/maps/tether/submaps/tether_ships.dmm +++ b/maps/tether/submaps/tether_ships.dmm @@ -126,9 +126,6 @@ /obj/effect/step_trigger/lost_in_space, /turf/space, /area/space) -"hx" = ( -/turf/unsimulated/mineral, -/area/space) "hz" = ( /obj/effect/step_trigger/thrower{ affect_ghosts = 1; @@ -175,7 +172,7 @@ /obj/effect/transit/light{ dir = 4 }, -/turf/unsimulated/mineral, +/turf/unsimulated/dark_filler, /area/space) "HC" = ( /obj/abstract/level_data_spawner/admin_level, @@ -18759,7 +18756,7 @@ aa aa aa aa -hx +dJ gW gW gW @@ -18781,7 +18778,7 @@ gW gW gW gW -hx +dJ aa "} (132,1,1) = {" @@ -18901,7 +18898,7 @@ aa aa aa aa -hx +dJ gX gX gX @@ -18923,7 +18920,7 @@ gX gX gX hh -hx +dJ aa "} (133,1,1) = {" @@ -19043,7 +19040,7 @@ aa aa aa aa -hx +dJ gY gY gY @@ -19065,7 +19062,7 @@ gY gY gY gY -hx +dJ aa "} (134,1,1) = {" @@ -19185,7 +19182,7 @@ aa aa aa aa -hx +dJ gY gY gY @@ -19207,7 +19204,7 @@ gY gY gY gY -hx +dJ aa "} (135,1,1) = {" @@ -19327,7 +19324,7 @@ aa aa aa aa -hx +dJ gY gY gY @@ -19349,7 +19346,7 @@ gY gY gY gY -hx +dJ aa "} (136,1,1) = {" @@ -19469,7 +19466,7 @@ aa aa aa aa -hx +dJ gY gY gY @@ -19491,7 +19488,7 @@ gY gY gY gY -hx +dJ aa "} (137,1,1) = {" @@ -19611,7 +19608,7 @@ aa aa aa aa -hx +dJ gY gY gY @@ -19633,7 +19630,7 @@ gY gY gY gY -hx +dJ aa "} (138,1,1) = {" @@ -19753,7 +19750,7 @@ aa aa aa aa -hx +dJ gZ gZ gZ @@ -19895,7 +19892,7 @@ aa aa aa aa -hx +dJ gW gW gW @@ -19917,7 +19914,7 @@ gW gW gW gW -hx +dJ aa "} (140,1,1) = {" diff --git a/maps/tether/tether.dm b/maps/tether/tether.dm index 6e21f510bcf..90a7f8ee23e 100644 --- a/maps/tether/tether.dm +++ b/maps/tether/tether.dm @@ -59,6 +59,7 @@ #include "../../mods/content/lighthouse/_lighthouse.dme" #include "../../mods/content/resleeving/_resleeving.dme" + #include "tether_evacuation.dm" #include "tether_jobs.dm" #include "tether_leveldata.dm" #include "tether_unit_testing.dm" diff --git a/maps/tether/tether_define.dm b/maps/tether/tether_define.dm index 6b867422050..865a1ef604e 100644 --- a/maps/tether/tether_define.dm +++ b/maps/tether/tether_define.dm @@ -16,18 +16,15 @@ system_name = "Virgo-Erigone" overmap_ids = list(OVERMAP_ID_SPACE) num_exoplanets = 0 - // TODO: evac_controller_type = /datum/evacuation_controller/tram -/* shuttle_docked_message = "The scheduled Orange Line tram to the %dock_name% has arrived. It will depart in approximately %ETD%." shuttle_leaving_dock = "The Orange Line tram has left the station. Estimate %ETA% until the tram arrives at %dock_name%." shuttle_called_message = "A scheduled crew transfer to the %dock_name% is occuring. The tram will be arriving shortly. Those departing should proceed to the Orange Line tram station within %ETA%." shuttle_recall_message = "The scheduled crew transfer has been cancelled." - shuttle_name = "Automated Tram" + // shuttle_name = "Automated Tram" // todo: ATC port using SSradiochatter emergency_shuttle_docked_message = "The evacuation tram has arrived at the tram station. You have approximately %ETD% to board the tram." emergency_shuttle_leaving_dock = "The emergency tram has left the station. Estimate %ETA% until the tram arrives at %dock_name%." emergency_shuttle_called_message = "An emergency evacuation has begun, and an off-schedule tram has been called. It will arrive at the tram station in approximately %ETA%." emergency_shuttle_recall_message = "The evacuation tram has been recalled." -*/ starting_money = 5000 diff --git a/maps/tether/tether_evacuation.dm b/maps/tether/tether_evacuation.dm new file mode 100644 index 00000000000..4d4cb4500d6 --- /dev/null +++ b/maps/tether/tether_evacuation.dm @@ -0,0 +1,39 @@ +/datum/map/tether + evac_controller_type = /datum/evacuation_controller/shuttle/tram + +/datum/evacuation_controller/shuttle/tram + name = "departures tram controller" + evacuation_options = list( + EVAC_OPT_CALL_SHUTTLE = new /datum/evacuation_option/call_shuttle/tram, + EVAC_OPT_RECALL_SHUTTLE = new /datum/evacuation_option/recall_shuttle/tram + ) + +/datum/evacuation_option/call_shuttle/tram + option_text = "Call emergency tram" + option_desc = "call the emergency tram" + +/datum/evacuation_option/recall_shuttle/tram + option_text = "Cancel tram call" + option_desc = "recall the emergency tram" + +/datum/shuttle/autodock/ferry/emergency/escape_shuttle + name = "Escape Shuttle" + warmup_time = 10 + location = 1 + shuttle_area = /area/shuttle/tram + waypoint_offsite = "nav_tram_start" + waypoint_station = "nav_tram_station" + landmark_transition = "nav_tram_transit" + +/obj/effect/shuttle_landmark/escape_shuttle/start + landmark_tag = "nav_tram_start" + base_area = /area/centcom/terminal + base_turf = /turf/unsimulated/floor/techfloor_grid + +/obj/effect/shuttle_landmark/escape_shuttle/transit + landmark_tag = "nav_tram_transit" + flags = SLANDMARK_FLAG_AUTOSET + +/obj/effect/shuttle_landmark/escape_shuttle/station + landmark_tag = "nav_tram_station" + flags = SLANDMARK_FLAG_AUTOSET \ No newline at end of file diff --git a/mods/content/dungeon_loot/loot_pile.dm b/mods/content/dungeon_loot/loot_pile.dm index fc8dff5808a..b488fd95abf 100644 --- a/mods/content/dungeon_loot/loot_pile.dm +++ b/mods/content/dungeon_loot/loot_pile.dm @@ -62,7 +62,7 @@ return TRUE //You already searched this one - if(!allow_multiple_looting && (user.ckey in searched_by)) + if(!allow_multiple_looting && LAZYISIN(user.ckey, searched_by)) to_chat(L, SPAN_WARNING("You can't find anything else vaguely useful in \the [src]. Another set of eyes might, however.")) return TRUE @@ -72,7 +72,7 @@ return TRUE // You found something! - searched_by |= user.ckey + LAZYDISTINCTADD(searched_by, user.ckey) var/obj/item/loot = null var/span = "notice" // Blue diff --git a/mods/content/genemodding/tail_organ.dm b/mods/content/genemodding/tail_organ.dm index 6ff47865859..28247fc7712 100644 --- a/mods/content/genemodding/tail_organ.dm +++ b/mods/content/genemodding/tail_organ.dm @@ -4,3 +4,6 @@ /obj/item/organ/external/tail/proc/get_tail_colour() return tail_colour || ((bodytype.appearance_flags & HAS_SKIN_COLOR) ? skin_colour : null) + +/obj/item/organ/external/tail/proc/get_tail_hair_colour() + return tail_hair_colour || (owner && GET_HAIR_COLOUR(owner)) \ No newline at end of file diff --git a/mods/content/genemodding/update_icons.dm b/mods/content/genemodding/update_icons.dm index d8592d3030a..65c5717d951 100644 --- a/mods/content/genemodding/update_icons.dm +++ b/mods/content/genemodding/update_icons.dm @@ -10,7 +10,7 @@ return // No tail data! // These values may be null and are generally optional. - var/hair_colour = GET_HAIR_COLOUR(src) + var/hair_colour = tail_organ.get_tail_hair_colour() // GENEMODDING EDIT var/tail_hair = tail_organ.get_tail_hair() var/tail_blend = tail_organ.get_tail_blend() var/tail_hair_blend = tail_organ.get_tail_hair_blend() diff --git a/mods/content/neural_interface/implant.dm b/mods/content/neural_interface/implant.dm index 85caad1e2a7..c1a85a1c70c 100644 --- a/mods/content/neural_interface/implant.dm +++ b/mods/content/neural_interface/implant.dm @@ -125,13 +125,27 @@ os_full_name = "Nanite Interface Framework v2.0.0-rc1" expected_type = /obj/item/organ/internal/augment/active/nif -/mob/living/carbon/human/getHUDsource(hudtype) +/mob/getHUDsource(hudtype) if((. = ..())) return . var/obj/item/organ/internal/augment/active/nif/nif = get_organ(BP_AUGMENT_HEAD, /obj/item/organ/internal/augment/active/nif) if(!nif?.is_usable()) return null + var/datum/extension/assembly/assembly = get_extension(nif, /datum/extension/assembly) + var/obj/item/stock_parts/computer/network_card/network_card = assembly.get_component(PART_NETWORK) var/datum/extension/interactive/os/os = get_extension(nif, /datum/extension/interactive/os) for(var/datum/computer_file/program/nifsoft/nif_hud/running_nifhud in os.running_programs) if(hudtype == running_nifhud.hudtype) - return nif + return network_card // I hate this. + +/* If we ever want to switch to returning the NIF instead of the network card, we have the following code. +// Checks for NIF networks. TODO: /atom/proc/get_network()? +/mob/getHUDnetwork(hudtype) + if((. = ..())) + return . + var/obj/item/organ/internal/augment/active/nif/nif = getHUDsource(hudtype) + if(!nif?.is_usable()) + return null + var/datum/extension/interactive/os/os = get_extension(nif, /datum/extension/interactive/os) + return os.get_network() +*/ \ No newline at end of file diff --git a/nano/templates/timeclock.tmpl b/nano/templates/timeclock.tmpl index 25f15d67cca..f9a315808f5 100644 --- a/nano/templates/timeclock.tmpl +++ b/nano/templates/timeclock.tmpl @@ -66,7 +66,7 @@ {{:helper.link('Go Off-Duty', 'alert', {'switch-to-offduty': 1})}} {{else}} - Insufficent Time Off Accrued + Insufficient Time Off Accrued {{/if}} {{else (data.job_datum.timeoff_factor < 0) }} {{props data.job_choices }}