From 86f2489ffffa2cda5ae26227ca8d1ae552c42f30 Mon Sep 17 00:00:00 2001 From: Cthulhu80 <122310258+Cthulhu80@users.noreply.github.com> Date: Fri, 17 Nov 2023 17:57:39 -0500 Subject: [PATCH 01/65] Adds drawing to tacmaps (#4475) # About the pull request Features - Gives cic (sos, xo, co) and the queen the ability to draw on the tactical map and then announce it to their respective factions - All marine faction members now are able to access the tactical map announcement through the stat panel, which can be viewed at any time. - Xenos in addition to having the normal tactical map will also have access to their own canvas map that can be viewed when Queen is on ovi. - Ghosts can view the tactical maps for both factions in the Ghost tab as well as from ghost alert popups. - Admins can view all the round's drawings and optionally delete them. # Explain why it's good for the game Hopefully this will spice things up for cic, queen and players alike. The idea is command and the queen would now be able to better convey what they want from their faction, which should help with general cohesion and likely expand strategic plays on both sides. (don't abuse it or harry will take it away, or make it more exclusive to the queen and co) # Testing photographs and procedure Screen Shot 2023-09-23 at 6 38 25 PM Screen Shot 2023-09-23 at 6 39 08 PM Screen Shot 2023-09-23 at 6 40 22 PM Screen Shot 2023-09-23 at 6 42 54 PM # Changelog :cl: Cthulhu80, Drathek add: Adds drawing to tactical maps, viewable via stat panel for marines and xeno tacmap for xenos. fix: Corrupted (and other hives) now have separate tactical maps. /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> Co-authored-by: Drulikar --- code/__DEFINES/hud.dm | 2 + code/__DEFINES/minimap.dm | 18 +- code/__HELPERS/icons.dm | 7 +- code/_globalvars/global_lists.dm | 8 + code/_globalvars/misc.dm | 16 + code/controllers/subsystem/minimap.dm | 491 +++++++++++++++++- code/game/gamemodes/cm_initialize.dm | 26 +- .../game/machinery/computer/communications.dm | 2 +- .../computer/groundside_operations.dm | 6 +- code/game/objects/items/devices/cictablet.dm | 5 +- code/modules/admin/admin_verbs.dm | 1 + .../admin/tacmap_panel/tacmap_admin_panel.dm | 9 + .../tacmap_panel/tacmap_admin_panel_tgui.dm | 152 ++++++ code/modules/almayer/machinery.dm | 13 +- code/modules/client/client_procs.dm | 9 +- .../structures/special/pylon_core.dm | 4 +- code/modules/cm_aliens/structures/tunnel.dm | 2 +- code/modules/cm_marines/overwatch.dm | 5 +- code/modules/cm_preds/yaut_machines.dm | 1 + .../desert_dam/motion_sensor/sensortower.dm | 2 +- code/modules/escape_menu/admin_buttons.dm | 26 +- code/modules/maptext_alerts/screen_alerts.dm | 5 + code/modules/mob/dead/observer/observer.dm | 21 + code/modules/mob/living/carbon/human/human.dm | 4 +- .../mob/living/carbon/xenomorph/Xenomorph.dm | 6 +- .../xenomorph/abilities/queen/queen_powers.dm | 2 +- .../living/carbon/xenomorph/xeno_defines.dm | 3 +- code/modules/mob/new_player/new_player.dm | 10 +- code/modules/vehicles/apc/apc_command.dm | 2 +- colonialmarines.dme | 2 + html/statbrowser.js | 9 + tgui/packages/tgui/interfaces/CanvasLayer.js | 311 +++++++++++ tgui/packages/tgui/interfaces/DrawnMap.js | 110 ++++ .../tgui/interfaces/OverwatchConsole.js | 1 - .../tgui/interfaces/TacmapAdminPanel.js | 164 ++++++ tgui/packages/tgui/interfaces/TacticalMap.tsx | 326 +++++++++++- .../tgui/styles/interfaces/TacticalMap.scss | 4 + 37 files changed, 1720 insertions(+), 65 deletions(-) create mode 100644 code/modules/admin/tacmap_panel/tacmap_admin_panel.dm create mode 100644 code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm create mode 100644 tgui/packages/tgui/interfaces/CanvasLayer.js create mode 100644 tgui/packages/tgui/interfaces/DrawnMap.js create mode 100644 tgui/packages/tgui/interfaces/TacmapAdminPanel.js diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 38e5693dcb..deee80c7a9 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -23,3 +23,5 @@ #define NOTIFY_ATTACK "attack" #define NOTIFY_ORBIT "orbit" #define NOTIFY_JOIN_XENO "join_xeno" +#define NOTIFY_XENO_TACMAP "xeno_tacmap" +#define NOTIFY_USCM_TACMAP "uscm_tacmap" diff --git a/code/__DEFINES/minimap.dm b/code/__DEFINES/minimap.dm index 71d0ed8e74..003d723600 100644 --- a/code/__DEFINES/minimap.dm +++ b/code/__DEFINES/minimap.dm @@ -5,7 +5,17 @@ #define MINIMAP_FLAG_UPP (1<<3) #define MINIMAP_FLAG_CLF (1<<4) #define MINIMAP_FLAG_YAUTJA (1<<5) -#define MINIMAP_FLAG_ALL (1<<6) - 1 +#define MINIMAP_FLAG_XENO_CORRUPTED (1<<6) +#define MINIMAP_FLAG_XENO_ALPHA (1<<7) +#define MINIMAP_FLAG_XENO_BRAVO (1<<8) +#define MINIMAP_FLAG_XENO_CHARLIE (1<<9) +#define MINIMAP_FLAG_XENO_DELTA (1<<10) +#define MINIMAP_FLAG_XENO_FERAL (1<<11) +#define MINIMAP_FLAG_XENO_TAMED (1<<12) +#define MINIMAP_FLAG_XENO_MUTATED (1<<13) +#define MINIMAP_FLAG_XENO_FORSAKEN (1<<14) +#define MINIMAP_FLAG_XENO_RENEGADE (1<<15) +#define MINIMAP_FLAG_ALL (1<<16) - 1 ///Converts the overworld x and y to minimap x and y values #define MINIMAP_SCALE 2 @@ -77,9 +87,3 @@ GLOBAL_LIST_INIT(all_minimap_flags, bitfield2list(MINIMAP_FLAG_ALL)) #define TACMAP_BASE_OCCLUDED "Occluded" #define TACMAP_BASE_OPEN "Open" - -#define TACMAP_DEFAULT "Default" -#define TACMAP_XENO "Xeno" -#define TACMAP_YAUTJA "Yautja" -#define TACMAP_FACTION "Faction" - diff --git a/code/__HELPERS/icons.dm b/code/__HELPERS/icons.dm index 1116f1acb2..24e39ff16c 100644 --- a/code/__HELPERS/icons.dm +++ b/code/__HELPERS/icons.dm @@ -682,8 +682,9 @@ world * * moving - whether or not to use a moving state for the given icon * * sourceonly - if TRUE, only generate the asset and send back the asset url, instead of tags that display the icon to players * * extra_clases - string of extra css classes to use when returning the icon string + * * keyonly - if TRUE, only returns the asset key to use get_asset_url manually. Overrides sourceonly. */ -/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null) +/proc/icon2html(atom/thing, client/target, icon_state, dir = SOUTH, frame = 1, moving = FALSE, sourceonly = FALSE, extra_classes = null, keyonly = FALSE) if (!thing) return @@ -714,6 +715,8 @@ world SSassets.transport.register_asset(name, thing) for (var/thing2 in targets) SSassets.transport.send_assets(thing2, name) + if(keyonly) + return name if(sourceonly) return SSassets.transport.get_asset_url(name) return "" @@ -756,6 +759,8 @@ world SSassets.transport.register_asset(key, rsc_ref, file_hash, icon_path) for (var/client_target in targets) SSassets.transport.send_assets(client_target, key) + if(keyonly) + return key if(sourceonly) return SSassets.transport.get_asset_url(key) return "" diff --git a/code/_globalvars/global_lists.dm b/code/_globalvars/global_lists.dm index 1e1e9cefd5..3ba92a7c4d 100644 --- a/code/_globalvars/global_lists.dm +++ b/code/_globalvars/global_lists.dm @@ -6,6 +6,14 @@ GLOBAL_LIST_EMPTY(CMBFaxes) GLOBAL_LIST_EMPTY(GeneralFaxes) //Inter-machine faxes GLOBAL_LIST_EMPTY(fax_contents) //List of fax contents to maintain it even if source paper is deleted +//datum containing a reference to the flattend map png url, the actual png is stored in the user's cache. +GLOBAL_LIST_EMPTY(uscm_flat_tacmap_data) +GLOBAL_LIST_EMPTY(xeno_flat_tacmap_data) + +//datum containing the svg overlay coords in array format. +GLOBAL_LIST_EMPTY(uscm_svg_tacmap_data) +GLOBAL_LIST_EMPTY(xeno_svg_tacmap_data) + GLOBAL_LIST_EMPTY(failed_fultons) //A list of fultoned items which weren't collected and fell back down GLOBAL_LIST_EMPTY(larva_burst_by_hive) diff --git a/code/_globalvars/misc.dm b/code/_globalvars/misc.dm index 44f4b2c401..cd6708198e 100644 --- a/code/_globalvars/misc.dm +++ b/code/_globalvars/misc.dm @@ -14,6 +14,22 @@ GLOBAL_LIST_INIT(pill_icon_mappings, map_pill_icons()) /// In-round override to default OOC color GLOBAL_VAR(ooc_color_override) +// tacmap cooldown for xenos and marines +GLOBAL_VAR_INIT(uscm_canvas_cooldown, 0) +GLOBAL_VAR_INIT(xeno_canvas_cooldown, 0) + +// getFlatIcon cooldown for xenos and marines +GLOBAL_VAR_INIT(uscm_flatten_map_icon_cooldown, 0) +GLOBAL_VAR_INIT(xeno_flatten_map_icon_cooldown, 0) + +// latest unannounced flat tacmap for xenos and marines +GLOBAL_VAR(uscm_unannounced_map) +GLOBAL_VAR(xeno_unannounced_map) + +//global tacmaps for action button access +GLOBAL_DATUM_INIT(uscm_tacmap_status, /datum/tacmap/drawing/status_tab_view, new) +GLOBAL_DATUM_INIT(xeno_tacmap_status, /datum/tacmap/drawing/status_tab_view/xeno, new) + /// List of roles that can be setup for each gamemode GLOBAL_LIST_INIT(gamemode_roles, list()) diff --git a/code/controllers/subsystem/minimap.dm b/code/controllers/subsystem/minimap.dm index 6f5b9303a9..d28fe91629 100644 --- a/code/controllers/subsystem/minimap.dm +++ b/code/controllers/subsystem/minimap.dm @@ -256,8 +256,6 @@ SUBSYSTEM_DEF(minimaps) removal_cbs[target] = CALLBACK(src, PROC_REF(removeimage), blip, target) RegisterSignal(target, COMSIG_PARENT_QDELETING, PROC_REF(remove_marker)) - - /** * removes an image from raw tracked lists, invoked by callback */ @@ -322,7 +320,7 @@ SUBSYSTEM_DEF(minimaps) minimaps_by_z["[z_level]"].images_assoc["[flag]"] -= source /** - * Fetches a /atom/movable/screen/minimap instance or creates on if none exists + * Fetches a /atom/movable/screen/minimap instance or creates one if none exists * Note this does not destroy them when the map is unused, might be a potential thing to do? * Arguments: * * zlevel: zlevel to fetch map for @@ -338,6 +336,170 @@ SUBSYSTEM_DEF(minimaps) hashed_minimaps[hash] = map return map +/** + * Fetches the datum containing an announced flattend map png reference. + * + * Arguments: + * * faction: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_tacmap_data_png(faction) + var/list/map_list + + if(faction == FACTION_MARINE) + map_list = GLOB.uscm_flat_tacmap_data + else if(faction == XENO_HIVE_NORMAL) + map_list = GLOB.xeno_flat_tacmap_data + else + return null + + var/map_length = length(map_list) + + if(map_length == 0) + return null + + return map_list[map_length] + +/** + * Fetches the datum containing the latest unannounced flattend map png reference. + * + * Arguments: + * * faction: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_unannounced_tacmap_data_png(faction) + if(faction == FACTION_MARINE) + return GLOB.uscm_unannounced_map + else if(faction == XENO_HIVE_NORMAL) + return GLOB.xeno_unannounced_map + + return null + +/** + * Fetches the last set of svg coordinates for the tacmap drawing. + * + * Arguments: + * * faction: which faction get the map for: FACTION_MARINE or XENO_HIVE_NORMAL + */ +/proc/get_tacmap_data_svg(faction) + var/list/map_list + + if(faction == FACTION_MARINE) + map_list = GLOB.uscm_svg_tacmap_data + else if(faction == XENO_HIVE_NORMAL) + map_list = GLOB.xeno_svg_tacmap_data + else + return null + + var/map_length = length(map_list) + + if(map_length == 0) + return null + + return map_list[map_length] + +/** + * Re-sends relevant flattened tacmaps to a single client. + * + * Arguments: + * * user: The mob that is either an observer, marine, or xeno + */ +/proc/resend_current_map_png(mob/user) + if(!user.client) + return + + var/is_observer = user.faction == FACTION_NEUTRAL && isobserver(user) + if(is_observer || user.faction == FACTION_MARINE) + // Send marine maps + var/datum/flattened_tacmap/latest = get_tacmap_data_png(FACTION_MARINE) + if(latest) + SSassets.transport.send_assets(user.client, latest.asset_key) + var/datum/flattened_tacmap/unannounced = get_unannounced_tacmap_data_png(FACTION_MARINE) + if(unannounced && (!latest || latest.asset_key != unannounced.asset_key)) + SSassets.transport.send_assets(user.client, unannounced.asset_key) + + var/mob/living/carbon/xenomorph/xeno = user + if(is_observer || istype(xeno) && xeno.hivenumber == XENO_HIVE_NORMAL) + // Send xeno maps + var/datum/flattened_tacmap/latest = get_tacmap_data_png(XENO_HIVE_NORMAL) + if(latest) + SSassets.transport.send_assets(user.client, latest.asset_key) + var/datum/flattened_tacmap/unannounced = get_unannounced_tacmap_data_png(XENO_HIVE_NORMAL) + if(unannounced && (!latest || latest.asset_key != unannounced.asset_key)) + SSassets.transport.send_assets(user.client, unannounced.asset_key) + +/** + * Flattens the current map and then distributes it for the specified faction as an unannounced map. + * + * Arguments: + * * faction: Which faction to distribute the map to: FACTION_MARINE or XENO_HIVE_NORMAL + * Return: + * * Returns a boolean value, TRUE if the operation was successful, FALSE if it was not (on cooldown generally). + */ +/datum/tacmap/drawing/proc/distribute_current_map_png(faction) + if(faction == FACTION_MARINE) + if(!COOLDOWN_FINISHED(GLOB, uscm_flatten_map_icon_cooldown)) + return FALSE + COOLDOWN_START(GLOB, uscm_flatten_map_icon_cooldown, flatten_map_cooldown_time) + else if(faction == XENO_HIVE_NORMAL) + if(!COOLDOWN_FINISHED(GLOB, xeno_flatten_map_icon_cooldown)) + return FALSE + COOLDOWN_START(GLOB, xeno_flatten_map_icon_cooldown, flatten_map_cooldown_time) + else + return FALSE + + var/icon/flat_map = getFlatIcon(map_holder.map, appearance_flags = TRUE) + if(!flat_map) + to_chat(usr, SPAN_WARNING("A critical error has occurred! Contact a coder.")) // tf2heavy: "Oh, this is bad!" + return FALSE + + // Send to only relevant clients + var/list/faction_clients = list() + for(var/client/client as anything in GLOB.clients) + if(!client || !client.mob) + continue + var/mob/client_mob = client.mob + if(client_mob.faction == faction) + faction_clients += client + else if(client_mob.faction == FACTION_NEUTRAL && isobserver(client_mob)) + faction_clients += client + else if(isxeno(client_mob)) + var/mob/living/carbon/xenomorph/xeno = client_mob + if(xeno.hivenumber == faction) + faction_clients += client + + // This may be unnecessary to do this way if the asset url is always the same as the lookup key + var/flat_tacmap_key = icon2html(flat_map, faction_clients, keyonly = TRUE) + if(!flat_tacmap_key) + to_chat(usr, SPAN_WARNING("A critical error has occurred! Contact a coder.")) + return FALSE + var/flat_tacmap_png = SSassets.transport.get_asset_url(flat_tacmap_key) + var/datum/flattened_tacmap/new_flat = new(flat_tacmap_png, flat_tacmap_key) + + if(faction == FACTION_MARINE) + GLOB.uscm_unannounced_map = new_flat + else //if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_unannounced_map = new_flat + + return TRUE + +/** + * Globally stores svg coords for a given faction. + * + * Arguments: + * * faction: which faction to save the data for: FACTION_MARINE or XENO_HIVE_NORMAL + * * svg_coords: an array of coordinates corresponding to an svg. + * * ckey: the ckey of the user who submitted this + */ +/datum/tacmap/drawing/proc/store_current_svg_coords(faction, svg_coords, ckey) + var/datum/svg_overlay/svg_store_overlay = new(svg_coords, ckey) + + if(faction == FACTION_MARINE) + GLOB.uscm_svg_tacmap_data += svg_store_overlay + else if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_svg_tacmap_data += svg_store_overlay + else + qdel(svg_store_overlay) + debug_log("SVG coordinates for [faction] are not implemented!") + /datum/controller/subsystem/minimaps/proc/fetch_tacmap_datum(zlevel, flags) var/hash = "[zlevel]-[flags]" if(hashed_tacmaps[hash]) @@ -442,7 +604,7 @@ SUBSYSTEM_DEF(minimaps) marker_flags = MINIMAP_FLAG_USCM /datum/action/minimap/observer - minimap_flags = MINIMAP_FLAG_XENO|MINIMAP_FLAG_USCM|MINIMAP_FLAG_UPP|MINIMAP_FLAG_CLF|MINIMAP_FLAG_UPP + minimap_flags = MINIMAP_FLAG_ALL marker_flags = NONE hidden = TRUE @@ -452,17 +614,61 @@ SUBSYSTEM_DEF(minimaps) var/targeted_ztrait = ZTRAIT_GROUND var/atom/owner + /// tacmap holder for holding the minimap var/datum/tacmap_holder/map_holder +/datum/tacmap/drawing + /// A url that will point to the wiki map for the current map as a fall back image + var/static/wiki_map_fallback + + /// color selection for the tactical map canvas, defaults to black. + var/toolbar_color_selection = "black" + var/toolbar_updated_selection = "black" + + var/canvas_cooldown_time = 4 MINUTES + var/flatten_map_cooldown_time = 3 MINUTES + + /// boolean value to keep track if the canvas has been updated or not, the value is used in tgui state. + var/updated_canvas = FALSE + /// current flattend map + var/datum/flattened_tacmap/new_current_map + /// previous flattened map + var/datum/flattened_tacmap/old_map + /// current svg + var/datum/svg_overlay/current_svg + + var/action_queue_change = 0 + + /// The last time the map has been flattened - used as a key to trick react into updating the canvas + var/last_update_time = 0 + /// A temporary lock out time before we can open the new canvas tab to allow the tacmap time to fire + var/tacmap_ready_time = 0 + /datum/tacmap/New(atom/source, minimap_type) allowed_flags = minimap_type owner = source +/datum/tacmap/drawing/status_tab_view/New() + var/datum/tacmap/drawing/status_tab_view/uscm_tacmap + allowed_flags = MINIMAP_FLAG_USCM + owner = uscm_tacmap + +/datum/tacmap/drawing/status_tab_view/xeno/New() + var/datum/tacmap/drawing/status_tab_view/xeno/xeno_tacmap + allowed_flags = MINIMAP_FLAG_XENO + owner = xeno_tacmap + /datum/tacmap/Destroy() map_holder = null owner = null return ..() +/datum/tacmap/drawing/Destroy() + new_current_map = null + old_map = null + current_svg = null + return ..() + /datum/tacmap/tgui_interact(mob/user, datum/tgui/ui) if(!map_holder) var/level = SSmapping.levels_by_trait(targeted_ztrait) @@ -476,11 +682,216 @@ SUBSYSTEM_DEF(minimaps) ui = new(user, src, "TacticalMap") ui.open() +/datum/tacmap/drawing/tgui_interact(mob/user, datum/tgui/ui) + var/mob/living/carbon/xenomorph/xeno = user + var/is_xeno = istype(xeno) + var/faction = is_xeno ? xeno.hivenumber : user.faction + if(faction == FACTION_NEUTRAL && isobserver(user)) + faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + + new_current_map = get_unannounced_tacmap_data_png(faction) + old_map = get_tacmap_data_png(faction) + current_svg = get_tacmap_data_svg(faction) + + var/use_live_map = faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || is_xeno + + if(use_live_map && !map_holder) + var/level = SSmapping.levels_by_trait(targeted_ztrait) + if(!level[1]) + return + map_holder = SSminimaps.fetch_tacmap_datum(level[1], allowed_flags) + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + if(!wiki_map_fallback) + var/wiki_url = CONFIG_GET(string/wikiurl) + var/obj/item/map/current_map/new_map = new + if(wiki_url && new_map.html_link) + wiki_map_fallback ="[wiki_url]/[new_map.html_link]" + else + debug_log("Failed to determine fallback wiki map! Attempted '[wiki_url]/[new_map.html_link]'") + qdel(new_map) + + // Ensure we actually have the map image sent + resend_current_map_png(user) + + if(use_live_map) + tacmap_ready_time = SSminimaps.next_fire + 2 SECONDS + addtimer(CALLBACK(src, PROC_REF(on_tacmap_fire), faction), SSminimaps.next_fire - world.time + 1 SECONDS) + user.client.register_map_obj(map_holder.map) + + ui = new(user, src, "TacticalMap") + ui.open() + +/datum/tacmap/drawing/ui_data(mob/user) + var/list/data = list() + + data["newCanvasFlatImage"] = new_current_map?.flat_tacmap + data["oldCanvasFlatImage"] = old_map?.flat_tacmap + data["svgData"] = current_svg?.svg_data + + data["actionQueueChange"] = action_queue_change + + data["toolbarColorSelection"] = toolbar_color_selection + data["toolbarUpdatedSelection"] = toolbar_updated_selection + + if(isxeno(user)) + data["canvasCooldown"] = max(GLOB.xeno_canvas_cooldown - world.time, 0) + else + data["canvasCooldown"] = max(GLOB.uscm_canvas_cooldown - world.time, 0) + + data["nextCanvasTime"] = canvas_cooldown_time + data["updatedCanvas"] = updated_canvas + + data["lastUpdateTime"] = last_update_time + data["tacmapReady"] = world.time > tacmap_ready_time + + return data + /datum/tacmap/ui_static_data(mob/user) var/list/data = list() - data["mapRef"] = map_holder.map_ref + data["mapRef"] = map_holder?.map_ref + data["canDraw"] = FALSE + data["canViewTacmap"] = TRUE + data["canViewCanvas"] = FALSE + data["isXeno"] = FALSE + return data +/datum/tacmap/drawing/ui_static_data(mob/user) + var/list/data = list() + + data["mapRef"] = map_holder?.map_ref + data["canDraw"] = FALSE + data["mapFallback"] = wiki_map_fallback + + var/mob/living/carbon/xenomorph/xeno = user + var/is_xeno = istype(xeno) + var/faction = is_xeno ? xeno.hivenumber : user.faction + + data["isXeno"] = is_xeno + data["canViewTacmap"] = is_xeno + data["canViewCanvas"] = faction == FACTION_MARINE || faction == XENO_HIVE_NORMAL + + if(faction == FACTION_MARINE && skillcheck(user, SKILL_LEADERSHIP, SKILL_LEAD_EXPERT) || faction == XENO_HIVE_NORMAL && isqueen(user)) + data["canDraw"] = TRUE + data["canViewTacmap"] = TRUE + + return data + +/datum/tacmap/drawing/status_tab_view/ui_static_data(mob/user) + var/list/data = list() + data["mapFallback"] = wiki_map_fallback + data["canDraw"] = FALSE + data["canViewTacmap"] = FALSE + data["canViewCanvas"] = TRUE + data["isXeno"] = FALSE + + return data + +/datum/tacmap/drawing/status_tab_view/xeno/ui_static_data(mob/user) + var/list/data = list() + data["mapFallback"] = wiki_map_fallback + data["canDraw"] = FALSE + data["canViewTacmap"] = FALSE + data["canViewCanvas"] = TRUE + data["isXeno"] = TRUE + + return data + +/datum/tacmap/drawing/ui_close(mob/user) + . = ..() + action_queue_change = 0 + updated_canvas = FALSE + toolbar_color_selection = "black" + toolbar_updated_selection = "black" + +/datum/tacmap/drawing/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/mob/user = ui.user + var/mob/living/carbon/xenomorph/xeno = user + var/faction = istype(xeno) ? xeno.hivenumber : user.faction + if(faction == FACTION_NEUTRAL && isobserver(user)) + faction = allowed_flags == MINIMAP_FLAG_XENO ? XENO_HIVE_NORMAL : FACTION_MARINE + + switch (action) + if ("menuSelect") + if(params["selection"] != "new canvas") + if(updated_canvas) + updated_canvas = FALSE + toolbar_updated_selection = toolbar_color_selection // doing this if it == canvas can cause a latency issue with the stroke. + else + distribute_current_map_png(faction) + last_update_time = world.time + // An attempt to get the image to load on first try in the interface, but doesn't seem always reliable + + new_current_map = get_unannounced_tacmap_data_png(faction) + old_map = get_tacmap_data_png(faction) + current_svg = get_tacmap_data_svg(faction) + + if ("updateCanvas") + // forces state change, this will export the svg. + toolbar_updated_selection = "export" + updated_canvas = TRUE + action_queue_change += 1 + + if ("clearCanvas") + toolbar_updated_selection = "clear" + updated_canvas = FALSE + action_queue_change += 1 + + if ("undoChange") + toolbar_updated_selection = "undo" + updated_canvas = FALSE + action_queue_change += 1 + + if ("selectColor") + var/newColor = params["color"] + if(newColor) + toolbar_color_selection = newColor + toolbar_updated_selection = newColor + action_queue_change += 1 + + if ("onDraw") + updated_canvas = FALSE + + if ("selectAnnouncement") + if(!istype(params["image"], /list)) // potentially very serious? + return FALSE + + if(faction == FACTION_MARINE) + GLOB.uscm_flat_tacmap_data += new_current_map + else if(faction == XENO_HIVE_NORMAL) + GLOB.xeno_flat_tacmap_data += new_current_map + + store_current_svg_coords(faction, params["image"], user) + current_svg = get_tacmap_data_svg(faction) + old_map = get_tacmap_data_png(faction) + + if(faction == FACTION_MARINE) + COOLDOWN_START(GLOB, uscm_canvas_cooldown, canvas_cooldown_time) + var/mob/living/carbon/human/human_leader = user + for(var/datum/squad/current_squad in RoleAuthority.squads) + current_squad.send_maptext("Tactical map update in progress...", "Tactical Map:") + human_leader.visible_message(SPAN_BOLDNOTICE("Tactical map update in progress...")) + playsound_client(human_leader.client, "sound/effects/sos-morse-code.ogg") + notify_ghosts(header = "Tactical Map", message = "The USCM tactical map has been updated.", ghost_sound = "sound/effects/sos-morse-code.ogg", notify_volume = 80, action = NOTIFY_USCM_TACMAP, enter_link = "uscm_tacmap=1", enter_text = "View", source = owner) + + else if(faction == XENO_HIVE_NORMAL) + var/mutable_appearance/appearance = mutable_appearance(icon('icons/mob/hud/actions_xeno.dmi'), "toggle_queen_zoom") + COOLDOWN_START(GLOB, xeno_canvas_cooldown, canvas_cooldown_time) + xeno_maptext("The Queen has updated your hive mind map", "You sense something unusual...", faction) + notify_ghosts(header = "Tactical Map", message = "The Xenomorph tactical map has been updated.", ghost_sound = "sound/voice/alien_distantroar_3.ogg", notify_volume = 50, action = NOTIFY_XENO_TACMAP, enter_link = "xeno_tacmap=1", enter_text = "View", source = user, alert_overlay = appearance) + + toolbar_updated_selection = toolbar_color_selection + message_admins("[key_name(user)] has updated the tactical map for [faction].") + updated_canvas = FALSE + + return TRUE + /datum/tacmap/ui_status(mob/user) if(!(isatom(owner))) return UI_INTERACTIVE @@ -493,7 +904,7 @@ SUBSYSTEM_DEF(minimaps) else return UI_CLOSE -/datum/tacmap/xeno/ui_status(mob/user) +/datum/tacmap/drawing/xeno/ui_status(mob/user) if(!isxeno(user)) return UI_CLOSE @@ -516,3 +927,71 @@ SUBSYSTEM_DEF(minimaps) /datum/tacmap_holder/Destroy() map = null return ..() + +/datum/flattened_tacmap + var/flat_tacmap + var/asset_key + var/time + +/datum/flattened_tacmap/New(flat_tacmap, asset_key) + src.flat_tacmap = flat_tacmap + src.asset_key = asset_key + src.time = time_stamp() + +/datum/svg_overlay + var/svg_data + var/ckey + var/name + var/time + +/datum/svg_overlay/New(svg_data, mob/user) + src.svg_data = svg_data + src.ckey = user?.persistent_ckey + src.name = user?.real_name + src.time = time_stamp() + +/// Callback when timer indicates the tacmap is flattenable now +/datum/tacmap/drawing/proc/on_tacmap_fire(faction) + distribute_current_map_png(faction) + last_update_time = world.time + +/// Gets the MINIMAP_FLAG for the provided faction or hivenumber if one exists +/proc/get_minimap_flag_for_faction(faction) + switch(faction) + if(XENO_HIVE_NORMAL) + return MINIMAP_FLAG_XENO + if(FACTION_MARINE) + return MINIMAP_FLAG_USCM + if(FACTION_UPP) + return MINIMAP_FLAG_UPP + if(FACTION_WY) + return MINIMAP_FLAG_USCM + if(FACTION_CLF) + return MINIMAP_FLAG_CLF + if(FACTION_PMC) + return MINIMAP_FLAG_PMC + if(FACTION_YAUTJA) + return MINIMAP_FLAG_YAUTJA + if(XENO_HIVE_CORRUPTED) + return MINIMAP_FLAG_XENO_CORRUPTED + if(XENO_HIVE_ALPHA) + return MINIMAP_FLAG_XENO_ALPHA + if(XENO_HIVE_BRAVO) + return MINIMAP_FLAG_XENO_BRAVO + if(XENO_HIVE_CHARLIE) + return MINIMAP_FLAG_XENO_CHARLIE + if(XENO_HIVE_DELTA) + return MINIMAP_FLAG_XENO_DELTA + if(XENO_HIVE_FERAL) + return MINIMAP_FLAG_XENO_FERAL + if(XENO_HIVE_TAMED) + return MINIMAP_FLAG_XENO_TAMED + if(XENO_HIVE_MUTATED) + return MINIMAP_FLAG_XENO_MUTATED + if(XENO_HIVE_FORSAKEN) + return MINIMAP_FLAG_XENO_FORSAKEN + if(XENO_HIVE_YAUTJA) + return MINIMAP_FLAG_YAUTJA + if(XENO_HIVE_RENEGADE) + return MINIMAP_FLAG_XENO_RENEGADE + return 0 diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index effd3325f8..17a2550090 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -423,7 +423,7 @@ Additional game mode variables. for(var/mob_name in picked_hive.banished_ckeys) if(picked_hive.banished_ckeys[mob_name] == xeno_candidate.ckey) to_chat(xeno_candidate, SPAN_WARNING("You are banished from the [picked_hive], you may not rejoin unless the Queen re-admits you or dies.")) - return + return FALSE if(isnewplayer(xeno_candidate)) var/mob/new_player/noob = xeno_candidate noob.close_spawn_windows() @@ -443,9 +443,6 @@ Additional game mode variables. return FALSE new_xeno = userInput - if(!xeno_candidate) - return FALSE - if(!(new_xeno in GLOB.living_xeno_list) || new_xeno.stat == DEAD) to_chat(xeno_candidate, SPAN_WARNING("You cannot join if the xenomorph is dead.")) return FALSE @@ -479,14 +476,14 @@ Additional game mode variables. else new_xeno = pick(available_xenos_non_ssd) //Just picks something at random. if(istype(new_xeno) && xeno_candidate && xeno_candidate.client) if(isnewplayer(xeno_candidate)) - var/mob/new_player/N = xeno_candidate - N.close_spawn_windows() + var/mob/new_player/noob = xeno_candidate + noob.close_spawn_windows() for(var/mob_name in new_xeno.hive.banished_ckeys) if(new_xeno.hive.banished_ckeys[mob_name] == xeno_candidate.ckey) to_chat(xeno_candidate, SPAN_WARNING("You are banished from this hive, You may not rejoin unless the Queen re-admits you or dies.")) - return + return FALSE if(transfer_xeno(xeno_candidate, new_xeno)) - return 1 + return TRUE to_chat(xeno_candidate, "JAS01: Something went wrong, tell a coder.") /datum/game_mode/proc/attempt_to_join_as_facehugger(mob/xeno_candidate) @@ -614,20 +611,21 @@ Additional game mode variables. /datum/game_mode/proc/transfer_xeno(xeno_candidate, mob/living/new_xeno) if(!xeno_candidate || !isxeno(new_xeno) || QDELETED(new_xeno)) return FALSE + var/datum/mind/xeno_candidate_mind if(ismind(xeno_candidate)) xeno_candidate_mind = xeno_candidate else if(ismob(xeno_candidate)) - var/mob/M = xeno_candidate - if(M.mind) - xeno_candidate_mind = M.mind + var/mob/xeno_candidate_mob = xeno_candidate + if(xeno_candidate_mob.mind) + xeno_candidate_mind = xeno_candidate_mob.mind else - xeno_candidate_mind = new /datum/mind(M.key, M.ckey) + xeno_candidate_mind = new /datum/mind(xeno_candidate_mob.key, xeno_candidate_mob.ckey) xeno_candidate_mind.active = TRUE xeno_candidate_mind.current = new_xeno else if(isclient(xeno_candidate)) - var/client/C = xeno_candidate - xeno_candidate_mind = new /datum/mind(C.key, C.ckey) + var/client/xeno_candidate_client = xeno_candidate + xeno_candidate_mind = new /datum/mind(xeno_candidate_client.key, xeno_candidate_client.ckey) xeno_candidate_mind.active = TRUE xeno_candidate_mind.current = new_xeno else diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 3332577683..b39f59530a 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -43,7 +43,7 @@ var/stat_msg1 var/stat_msg2 - var/datum/tacmap/tacmap + var/datum/tacmap/drawing/tacmap var/minimap_type = MINIMAP_FLAG_USCM processing = TRUE diff --git a/code/game/machinery/computer/groundside_operations.dm b/code/game/machinery/computer/groundside_operations.dm index 9856ae8f97..f2b36276c8 100644 --- a/code/game/machinery/computer/groundside_operations.dm +++ b/code/game/machinery/computer/groundside_operations.dm @@ -25,7 +25,11 @@ add_pmcs = FALSE else if(SSticker.current_state < GAME_STATE_PLAYING) RegisterSignal(SSdcs, COMSIG_GLOB_MODE_PRESETUP, PROC_REF(disable_pmc)) - tacmap = new(src, minimap_type) + if(announcement_faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version + return ..() /obj/structure/machinery/computer/groundside_operations/Destroy() diff --git a/code/game/objects/items/devices/cictablet.dm b/code/game/objects/items/devices/cictablet.dm index 6abd709801..69e745da08 100644 --- a/code/game/objects/items/devices/cictablet.dm +++ b/code/game/objects/items/devices/cictablet.dm @@ -24,7 +24,10 @@ COOLDOWN_DECLARE(distress_cooldown) /obj/item/device/cotablet/Initialize() - tacmap = new(src, minimap_type) + if(announcement_faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version if(SSticker.mode && MODE_HAS_FLAG(MODE_FACTION_CLASH)) add_pmcs = FALSE else if(SSticker.current_state < GAME_STATE_PLAYING) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 7d91273130..5d02917f70 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -69,6 +69,7 @@ var/list/admin_verbs_default = list( /client/proc/toggle_ares_ping, /client/proc/cmd_admin_say, /*staff-only ooc chat*/ /client/proc/cmd_mod_say, /* alternate way of typing asay, no different than cmd_admin_say */ + /client/proc/cmd_admin_tacmaps_panel, ) var/list/admin_verbs_admin = list( diff --git a/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm b/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm new file mode 100644 index 0000000000..dcc8c7d5b6 --- /dev/null +++ b/code/modules/admin/tacmap_panel/tacmap_admin_panel.dm @@ -0,0 +1,9 @@ +/client/proc/cmd_admin_tacmaps_panel() + set name = "Tacmaps Panel" + set category = "Admin.Panels" + + if(!check_rights(R_ADMIN|R_MOD)) + to_chat(src, "Only administrators may use this command.") + return + + GLOB.tacmap_admin_panel.tgui_interact(mob) diff --git a/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm b/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm new file mode 100644 index 0000000000..e4b6f68460 --- /dev/null +++ b/code/modules/admin/tacmap_panel/tacmap_admin_panel_tgui.dm @@ -0,0 +1,152 @@ +GLOBAL_DATUM_INIT(tacmap_admin_panel, /datum/tacmap_admin_panel, new) + +#define LATEST_SELECTION -1 + +/datum/tacmap_admin_panel + var/name = "Tacmap Panel" + /// The index picked last for USCM (zero indexed), -1 will try to select latest if it exists + var/uscm_selection = LATEST_SELECTION + /// The index picked last for Xenos (zero indexed), -1 will try to select latest if it exists + var/xeno_selection = LATEST_SELECTION + /// A url that will point to the wiki map for the current map as a fall back image + var/static/wiki_map_fallback + /// The last time the map selection was changed - used as a key to trick react into updating the map + var/last_update_time = 0 + +/datum/tacmap_admin_panel/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + if(!wiki_map_fallback) + var/wiki_url = CONFIG_GET(string/wikiurl) + var/obj/item/map/current_map/new_map = new + if(wiki_url && new_map.html_link) + wiki_map_fallback ="[wiki_url]/[new_map.html_link]" + else + debug_log("Failed to determine fallback wiki map! Attempted '[wiki_url]/[new_map.html_link]'") + qdel(new_map) + + // Ensure we actually have the latest map images sent (recache can handle older/different faction maps) + resend_current_map_png(user) + + ui = new(user, src, "TacmapAdminPanel", "Tacmap Panel") + ui.open() + +/datum/tacmap_admin_panel/ui_state(mob/user) + return GLOB.admin_state + +/datum/tacmap_admin_panel/ui_data(mob/user) + var/list/data = list() + var/list/uscm_ckeys = list() + var/list/xeno_ckeys = list() + var/list/uscm_names = list() + var/list/xeno_names = list() + var/list/uscm_times = list() + var/list/xeno_times = list() + + // Assumption: Length of flat_tacmap_data is the same as svg_tacmap_data + var/uscm_length = length(GLOB.uscm_svg_tacmap_data) + if(uscm_selection < 0 || uscm_selection >= uscm_length) + uscm_selection = uscm_length - 1 + for(var/i = 1, i <= uscm_length, i++) + var/datum/svg_overlay/current_svg = GLOB.uscm_svg_tacmap_data[i] + uscm_ckeys += current_svg.ckey + uscm_names += current_svg.name + uscm_times += current_svg.time + data["uscm_ckeys"] = uscm_ckeys + data["uscm_names"] = uscm_names + data["uscm_times"] = uscm_times + + var/xeno_length = length(GLOB.xeno_svg_tacmap_data) + if(xeno_selection < 0 || xeno_selection >= xeno_length) + xeno_selection = xeno_length - 1 + for(var/i = 1, i <= xeno_length, i++) + var/datum/svg_overlay/current_svg = GLOB.xeno_svg_tacmap_data[i] + xeno_ckeys += current_svg.ckey + xeno_names += current_svg.name + xeno_times += current_svg.time + data["xeno_ckeys"] = xeno_ckeys + data["xeno_names"] = xeno_names + data["xeno_times"] = xeno_times + + if(uscm_selection == LATEST_SELECTION) + data["uscm_map"] = null + data["uscm_svg"] = null + else + var/datum/flattened_tacmap/selected_flat = GLOB.uscm_flat_tacmap_data[uscm_selection + 1] + var/datum/svg_overlay/selected_svg = GLOB.uscm_svg_tacmap_data[uscm_selection + 1] + data["uscm_map"] = selected_flat.flat_tacmap + data["uscm_svg"] = selected_svg.svg_data + + if(xeno_selection == LATEST_SELECTION) + data["xeno_map"] = null + data["xeno_svg"] = null + else + var/datum/flattened_tacmap/selected_flat = GLOB.xeno_flat_tacmap_data[xeno_selection + 1] + var/datum/svg_overlay/selected_svg = GLOB.xeno_svg_tacmap_data[xeno_selection + 1] + data["xeno_map"] = selected_flat.flat_tacmap + data["xeno_svg"] = selected_svg.svg_data + + data["uscm_selection"] = uscm_selection + data["xeno_selection"] = xeno_selection + data["map_fallback"] = wiki_map_fallback + data["last_update_time"] = last_update_time + + return data + +/datum/tacmap_admin_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + var/mob/user = ui.user + var/client/client_user = user.client + if(!client_user) + return // Is this even possible? + + switch(action) + if("recache") + var/is_uscm = params["uscm"] + var/datum/flattened_tacmap/selected_flat + if(is_uscm) + if(uscm_selection == LATEST_SELECTION) + return TRUE + selected_flat = GLOB.uscm_flat_tacmap_data[uscm_selection + 1] + else + if(xeno_selection == LATEST_SELECTION) + return TRUE + selected_flat = GLOB.xeno_flat_tacmap_data[xeno_selection + 1] + SSassets.transport.send_assets(client_user, selected_flat.asset_key) + last_update_time = world.time + return TRUE + + if("change_selection") + var/is_uscm = params["uscm"] + if(is_uscm) + uscm_selection = params["index"] + else + xeno_selection = params["index"] + last_update_time = world.time + return TRUE + + if("delete") + var/is_uscm = params["uscm"] + var/datum/svg_overlay/selected_svg + if(is_uscm) + if(uscm_selection == LATEST_SELECTION) + return TRUE + selected_svg = GLOB.uscm_svg_tacmap_data[uscm_selection + 1] + else + if(xeno_selection == LATEST_SELECTION) + return TRUE + selected_svg = GLOB.xeno_svg_tacmap_data[xeno_selection + 1] + selected_svg.svg_data = null + last_update_time = world.time + message_admins("[key_name_admin(usr)] deleted the tactical map drawing by [selected_svg.ckey].") + return TRUE + +/datum/tacmap_admin_panel/ui_close(mob/user) + . = ..() + uscm_selection = LATEST_SELECTION + xeno_selection = LATEST_SELECTION + +#undef LATEST_SELECTION diff --git a/code/modules/almayer/machinery.dm b/code/modules/almayer/machinery.dm index cb90db9e85..e72f4e7f9f 100644 --- a/code/modules/almayer/machinery.dm +++ b/code/modules/almayer/machinery.dm @@ -80,13 +80,19 @@ use_power = USE_POWER_IDLE density = TRUE idle_power_usage = 2 - ///flags that we want to be shown when you interact with this table var/datum/tacmap/map + ///flags that we want to be shown when you interact with this table var/minimap_type = MINIMAP_FLAG_USCM + ///The faction that is intended to use this structure (determines type of tacmap used) + var/faction = FACTION_MARINE /obj/structure/machinery/prop/almayer/CICmap/Initialize() . = ..() - map = new(src, minimap_type) + + if (faction == FACTION_MARINE) + map = new /datum/tacmap/drawing(src, minimap_type) + else + map = new(src, minimap_type) // Non-drawing version /obj/structure/machinery/prop/almayer/CICmap/Destroy() QDEL_NULL(map) @@ -99,12 +105,15 @@ /obj/structure/machinery/prop/almayer/CICmap/upp minimap_type = MINIMAP_FLAG_UPP + faction = FACTION_UPP /obj/structure/machinery/prop/almayer/CICmap/clf minimap_type = MINIMAP_FLAG_CLF + faction = FACTION_CLF /obj/structure/machinery/prop/almayer/CICmap/pmc minimap_type = MINIMAP_FLAG_PMC + faction = FACTION_PMC //Nonpower using props diff --git a/code/modules/client/client_procs.dm b/code/modules/client/client_procs.dm index 9268cd3aad..7811a6c9cb 100644 --- a/code/modules/client/client_procs.dm +++ b/code/modules/client/client_procs.dm @@ -147,7 +147,6 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( return cmd_admin_pm(receiver_client, null) return - else if(href_list["FaxView"]) var/datum/fax/info = locate(href_list["FaxView"]) @@ -164,6 +163,14 @@ GLOBAL_LIST_INIT(whitelisted_client_procs, list( else if(href_list["medals_panel"]) GLOB.medals_panel.tgui_interact(mob) + else if(href_list["tacmaps_panel"]) + GLOB.tacmap_admin_panel.tgui_interact(mob) + + else if(href_list["MapView"]) + if(isxeno(mob)) + return + GLOB.uscm_tacmap_status.tgui_interact(mob) + //NOTES OVERHAUL if(href_list["add_merit_info"]) var/key = href_list["add_merit_info"] diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 88964d76c3..62a7417c57 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -248,7 +248,7 @@ /obj/effect/alien/resin/special/pylon/core/proc/update_minimap_icon() SSminimaps.remove_marker(src) - SSminimaps.add_marker(src, z, MINIMAP_FLAG_XENO, "core") + SSminimaps.add_marker(src, z, get_minimap_flag_for_faction(linked_hive?.hivenumber), "core") /obj/effect/alien/resin/special/pylon/core/process() . = ..() @@ -318,7 +318,7 @@ to_chat(new_xeno, SPAN_XENOANNOUNCE("You are a xenomorph larva awakened from slumber!")) playsound(new_xeno, 'sound/effects/xeno_newlarva.ogg', 50, 1) if(new_xeno.client) - if(new_xeno.client?.prefs.toggles_flashing & FLASH_POOLSPAWN) + if(new_xeno.client.prefs.toggles_flashing & FLASH_POOLSPAWN) window_flash(new_xeno.client) linked_hive.stored_larva-- diff --git a/code/modules/cm_aliens/structures/tunnel.dm b/code/modules/cm_aliens/structures/tunnel.dm index f716d69b5b..185bee06c5 100644 --- a/code/modules/cm_aliens/structures/tunnel.dm +++ b/code/modules/cm_aliens/structures/tunnel.dm @@ -48,7 +48,7 @@ if(resin_trap) qdel(resin_trap) - SSminimaps.add_marker(src, z, MINIMAP_FLAG_XENO, "xenotunnel") + SSminimaps.add_marker(src, z, get_minimap_flag_for_faction(hivenumber), "xenotunnel") /obj/structure/tunnel/Destroy() if(hive) diff --git a/code/modules/cm_marines/overwatch.dm b/code/modules/cm_marines/overwatch.dm index 6db426a348..3cf33ebd39 100644 --- a/code/modules/cm_marines/overwatch.dm +++ b/code/modules/cm_marines/overwatch.dm @@ -39,8 +39,11 @@ /obj/structure/machinery/computer/overwatch/Initialize() . = ..() - tacmap = new(src, minimap_type) + if (faction == FACTION_MARINE) + tacmap = new /datum/tacmap/drawing(src, minimap_type) + else + tacmap = new(src, minimap_type) // Non-drawing version /obj/structure/machinery/computer/overwatch/Destroy() QDEL_NULL(tacmap) diff --git a/code/modules/cm_preds/yaut_machines.dm b/code/modules/cm_preds/yaut_machines.dm index a1782ca22b..f076c6782d 100644 --- a/code/modules/cm_preds/yaut_machines.dm +++ b/code/modules/cm_preds/yaut_machines.dm @@ -6,6 +6,7 @@ breakable = FALSE minimap_type = MINIMAP_FLAG_ALL + faction = FACTION_YAUTJA /obj/structure/machinery/autolathe/yautja name = "yautja autolathe" diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm index 5783d0ce9f..4ef11c3224 100644 --- a/code/modules/desert_dam/motion_sensor/sensortower.dm +++ b/code/modules/desert_dam/motion_sensor/sensortower.dm @@ -68,7 +68,7 @@ return SSminimaps.remove_marker(current_xeno) - current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|MINIMAP_FLAG_XENO) + current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|get_minimap_flag_for_faction(current_xeno.hivenumber)) minimap_added += WEAKREF(current_xeno) /obj/structure/machinery/sensortower/proc/checkfailure() diff --git a/code/modules/escape_menu/admin_buttons.dm b/code/modules/escape_menu/admin_buttons.dm index e6771d05bf..661901c1b7 100644 --- a/code/modules/escape_menu/admin_buttons.dm +++ b/code/modules/escape_menu/admin_buttons.dm @@ -46,7 +46,7 @@ new /atom/movable/screen/escape_menu/home_button( null, src, - "Medal Panel", + "Medals Panel", /* offset = */ 5, CALLBACK(src, PROC_REF(home_medal)), ) @@ -56,8 +56,18 @@ new /atom/movable/screen/escape_menu/home_button( null, src, - "Teleport Panel", + "Tacmaps Panel", /* offset = */ 6, + CALLBACK(src, PROC_REF(home_tacmaps)), + ) + ) + + page_holder.give_screen_object( + new /atom/movable/screen/escape_menu/home_button( + null, + src, + "Teleport Panel", + /* offset = */ 7, CALLBACK(src, PROC_REF(home_teleport)), ) ) @@ -67,7 +77,7 @@ null, src, "Inview Panel", - /* offset = */ 7, + /* offset = */ 8, CALLBACK(src, PROC_REF(home_inview)), ) ) @@ -77,7 +87,7 @@ null, src, "Unban Panel", - /* offset = */ 8, + /* offset = */ 9, CALLBACK(src, PROC_REF(home_unban)), ) ) @@ -87,7 +97,7 @@ null, src, "Shuttle Manipulator", - /* offset = */ 9, + /* offset = */ 10, CALLBACK(src, PROC_REF(home_shuttle)), ) ) @@ -117,6 +127,12 @@ GLOB.medals_panel.tgui_interact(client?.mob) +/datum/escape_menu/proc/home_tacmaps() + if(!client?.admin_holder.check_for_rights(R_ADMIN|R_MOD)) + return + + GLOB.tacmap_admin_panel.tgui_interact(client?.mob) + /datum/escape_menu/proc/home_teleport() if(!client?.admin_holder.check_for_rights(R_MOD)) return diff --git a/code/modules/maptext_alerts/screen_alerts.dm b/code/modules/maptext_alerts/screen_alerts.dm index 820c64301b..0b923f7dc7 100644 --- a/code/modules/maptext_alerts/screen_alerts.dm +++ b/code/modules/maptext_alerts/screen_alerts.dm @@ -246,3 +246,8 @@ ghost_user.do_observe(target) if(NOTIFY_JOIN_XENO) ghost_user.join_as_alien() + if(NOTIFY_USCM_TACMAP) + GLOB.uscm_tacmap_status.tgui_interact(ghost_user) + if(NOTIFY_XENO_TACMAP) + GLOB.xeno_tacmap_status.tgui_interact(ghost_user) + diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index da0560e151..a68a67cfdf 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -377,6 +377,10 @@ handle_joining_as_freed_mob(locate(href_list["claim_freed"])) if(href_list["join_xeno"]) join_as_alien() + if(href_list[NOTIFY_USCM_TACMAP]) + GLOB.uscm_tacmap_status.tgui_interact(src) + if(href_list[NOTIFY_XENO_TACMAP]) + GLOB.xeno_tacmap_status.tgui_interact(src) /mob/dead/observer/proc/set_huds_from_prefs() if(!client || !client.prefs) @@ -898,6 +902,23 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp GLOB.hive_datum[hives[faction]].hive_ui.open_hive_status(src) +/mob/dead/observer/verb/view_uscm_tacmap() + set name = "View USCM Tacmap" + set category = "Ghost.View" + + GLOB.uscm_tacmap_status.tgui_interact(src) + +/mob/dead/observer/verb/view_xeno_tacmap() + set name = "View Xeno Tacmap" + set category = "Ghost.View" + + var/datum/hive_status/hive = GLOB.hive_datum[XENO_HIVE_NORMAL] + if(!hive || !length(hive.totalXenos)) + to_chat(src, SPAN_ALERT("There seems to be no living normal hive at the moment")) + return + + GLOB.xeno_tacmap_status.tgui_interact(src) + /mob/dead/verb/join_as_alien() set category = "Ghost.Join" set name = "Join as Xeno" diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 2ec8ccf253..3bc8e97623 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -115,7 +115,9 @@ . += "Primary Objective: [html_decode(assigned_squad.primary_objective)]" if(assigned_squad.secondary_objective) . += "Secondary Objective: [html_decode(assigned_squad.secondary_objective)]" - + if(faction == FACTION_MARINE) + . += "" + . += "View Tactical Map" if(mobility_aura) . += "Active Order: MOVE" if(protection_aura) diff --git a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm index 51cab73e80..7beaaab8a0 100644 --- a/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm +++ b/code/modules/mob/living/carbon/xenomorph/Xenomorph.dm @@ -508,7 +508,11 @@ if(queen.can_not_harm(src)) return COMPONENT_SCREECH_ACT_CANCEL -/mob/living/carbon/xenomorph/proc/add_minimap_marker(flags = MINIMAP_FLAG_XENO) +/// Adds a minimap marker for this xeno using the provided flags. +/// If flags is 0, it will use get_minimap_flag_for_faction for this xeno +/mob/living/carbon/xenomorph/proc/add_minimap_marker(flags) + if(!flags) + flags = get_minimap_flag_for_faction(hivenumber) if(IS_XENO_LEADER(src)) SSminimaps.add_marker(src, z, hud_flags = flags, given_image = caste.get_minimap_icon(), overlay_iconstates = list(caste.minimap_leadered_overlay)) return diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm index 65ea443c13..23da1ce659 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/queen/queen_powers.dm @@ -698,5 +698,5 @@ set name = "View Xeno Tacmap" set desc = "This opens a tactical map, where you can see where every xenomorph is." set category = "Alien" - hive.tacmap.tgui_interact(src) + diff --git a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm index f1fff4fb76..79f73631c7 100644 --- a/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm +++ b/code/modules/mob/living/carbon/xenomorph/xeno_defines.dm @@ -362,7 +362,7 @@ /// This number divides the total xenos counted for slots to give the max number of lesser drones var/playable_lesser_drones_max_divisor = 3 - var/datum/tacmap/xeno/tacmap + var/datum/tacmap/drawing/xeno/tacmap var/minimap_type = MINIMAP_FLAG_XENO /datum/hive_status/New() @@ -370,6 +370,7 @@ hive_ui = new(src) mark_ui = new(src) faction_ui = new(src) + minimap_type = get_minimap_flag_for_faction(hivenumber) tacmap = new(src, minimap_type) if(!internal_faction) internal_faction = name diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index a6b654ba2d..cebe265a67 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -150,7 +150,7 @@ observer.set_huds_from_prefs() qdel(src) - return 1 + return TRUE if("late_join") @@ -276,11 +276,11 @@ if(player.get_playtime(STATISTIC_HUMAN) == 0 && player.get_playtime(STATISTIC_XENO) == 0) msg_admin_niche("NEW JOIN: [key_name(character, 1, 1, 0)]. IP: [character.lastKnownIP], CID: [character.computer_id]") if(character.client) - var/client/C = character.client - if(C.player_data && C.player_data.playtime_loaded && length(C.player_data.playtimes) == 0) + var/client/client = character.client + if(client.player_data && client.player_data.playtime_loaded && length(client.player_data.playtimes) == 0) msg_admin_niche("NEW PLAYER: [key_name(character, 1, 1, 0)]. IP: [character.lastKnownIP], CID: [character.computer_id]") - if(C.player_data && C.player_data.playtime_loaded && ((round(C.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1)) <= 5)) - msg_sea("NEW PLAYER: [key_name(character, 0, 1, 0)] only has [(round(C.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1))] hours as a human. Current role: [get_actual_job_name(character)] - Current location: [get_area(character)]") + if(client.player_data && client.player_data.playtime_loaded && ((round(client.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1)) <= 5)) + msg_sea("NEW PLAYER: [key_name(character, 0, 1, 0)] only has [(round(client.get_total_human_playtime() DECISECONDS_TO_HOURS, 0.1))] hours as a human. Current role: [get_actual_job_name(character)] - Current location: [get_area(character)]") character.client.init_verbs() qdel(src) diff --git a/code/modules/vehicles/apc/apc_command.dm b/code/modules/vehicles/apc/apc_command.dm index c5bd559283..ace9df2b2a 100644 --- a/code/modules/vehicles/apc/apc_command.dm +++ b/code/modules/vehicles/apc/apc_command.dm @@ -59,7 +59,7 @@ continue SSminimaps.remove_marker(current_xeno) - current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|MINIMAP_FLAG_XENO) + current_xeno.add_minimap_marker(MINIMAP_FLAG_USCM|get_minimap_flag_for_faction(current_xeno.hivenumber)) minimap_added += WEAKREF(current_xeno) else if(WEAKREF(current_xeno) in minimap_added) diff --git a/colonialmarines.dme b/colonialmarines.dme index 9ef2ad37c6..293b69c60d 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1377,6 +1377,8 @@ #include "code\modules\admin\tabs\event_tab.dm" #include "code\modules\admin\tabs\round_tab.dm" #include "code\modules\admin\tabs\server_tab.dm" +#include "code\modules\admin\tacmap_panel\tacmap_admin_panel.dm" +#include "code\modules\admin\tacmap_panel\tacmap_admin_panel_tgui.dm" #include "code\modules\admin\topic\topic.dm" #include "code\modules\admin\topic\topic_chems.dm" #include "code\modules\admin\topic\topic_events.dm" diff --git a/html/statbrowser.js b/html/statbrowser.js index 105270ad29..289536d37d 100644 --- a/html/statbrowser.js +++ b/html/statbrowser.js @@ -374,6 +374,8 @@ function draw_debug() { document.getElementById("statcontent").appendChild(table3); } function draw_status() { + var status_tab_map_href_exception = + "View Tactical Map"; if (!document.getElementById("Status")) { createStatusTab("Status"); current_tab = "Status"; @@ -384,6 +386,13 @@ function draw_status() { document .getElementById("statcontent") .appendChild(document.createElement("br")); + } else if ( + // hardcoded because merely using .includes() to test for a href seems unreliable for some reason. + status_tab_parts[i] == status_tab_map_href_exception + ) { + var maplink = document.createElement("a"); + maplink.innerHTML = status_tab_parts[i]; + document.getElementById("statcontent").appendChild(maplink); } else { var div = document.createElement("div"); div.textContent = status_tab_parts[i]; diff --git a/tgui/packages/tgui/interfaces/CanvasLayer.js b/tgui/packages/tgui/interfaces/CanvasLayer.js new file mode 100644 index 0000000000..e647ae765b --- /dev/null +++ b/tgui/packages/tgui/interfaces/CanvasLayer.js @@ -0,0 +1,311 @@ +import { Box, Icon, Tooltip } from '../components'; +import { Component, createRef } from 'inferno'; + +// this file should probably not be in interfaces, should move it later. +export class CanvasLayer extends Component { + constructor(props) { + super(props); + this.canvasRef = createRef(); + + // color selection + // using this.state prevents unpredictable behavior + this.state = { + selection: this.props.selection, + mapLoad: true, + }; + + // needs to be of type png of jpg + this.img = null; + this.imageSrc = this.props.imageSrc; + + // stores the stacked lines + this.lineStack = []; + + // stores the individual line drawn + this.currentLine = []; + + this.ctx = null; + this.isPainting = false; + this.lastX = null; + this.lastY = null; + + this.complexity = 0; + } + + componentDidMount() { + this.ctx = this.canvasRef.current.getContext('2d'); + this.ctx.lineWidth = 4; + this.ctx.lineCap = 'round'; + + this.img = new Image(); + + this.img.src = this.imageSrc; + + this.img.onload = () => { + this.setState({ mapLoad: true }); + }; + + this.img.onerror = () => { + this.setState({ mapLoad: false }); + }; + + this.drawCanvas(); + } + + handleMouseDown = (e) => { + this.isPainting = true; + + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + this.ctx.beginPath(); + this.ctx.moveTo(this.lastX, this.lastY); + this.lastX = x; + this.lastY = y; + }; + + handleMouseMove = (e) => { + if (!this.isPainting || !this.state.selection) { + return; + } + if (e.buttons === 0) { + // We probably dragged off the window - lets not get stuck drawing + this.handleMouseUp(e); + return; + } + + this.ctx.strokeStyle = this.state.selection; + + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + if (this.lastX !== null && this.lastY !== null) { + // this controls how often we make new strokes + if (Math.abs(this.lastX - x) + Math.abs(this.lastY - y) < 20) { + return; + } + + this.ctx.moveTo(this.lastX, this.lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + this.currentLine.push([ + this.lastX, + this.lastY, + x, + y, + this.ctx.strokeStyle, + ]); + } + + this.lastX = x; + this.lastY = y; + }; + + handleMouseUp = (e) => { + if ( + this.isPainting && + this.state.selection && + this.lastX !== null && + this.lastY !== null + ) { + const rect = this.canvasRef.current.getBoundingClientRect(); + const x = e.clientX - rect.left; + const y = e.clientY - rect.top; + + this.ctx.moveTo(this.lastX, this.lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + this.currentLine.push([ + this.lastX, + this.lastY, + x, + y, + this.ctx.strokeStyle, + ]); + } + + this.isPainting = false; + this.lastX = null; + this.lastY = null; + + if (this.currentLine.length === 0) { + return; + } + + this.lineStack.push([...this.currentLine]); + this.currentLine = []; + this.complexity = this.getComplexity(); + this.props.onDraw(); + }; + + handleSelectionChange = () => { + const { selection } = this.props; + + if (selection === 'clear') { + this.ctx.clearRect( + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + + this.lineStack = []; + this.complexity = 0; + return; + } + + if (selection === 'undo') { + if (this.lineStack.length === 0) { + return; + } + + const line = this.lineStack.pop(); + if (line.length === 0) { + return; + } + + const prevColor = line[0][4]; + + this.ctx.clearRect( + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current.width, + this.canvasRef.current.height + ); + this.ctx.globalCompositeOperation = 'source-over'; + + this.lineStack.forEach((currentLine) => { + currentLine.forEach(([lastX, lastY, x, y, colorSelection]) => { + this.ctx.strokeStyle = colorSelection; + this.ctx.beginPath(); + this.ctx.moveTo(lastX, lastY); + this.ctx.lineTo(x, y); + this.ctx.stroke(); + }); + }); + + this.complexity = this.getComplexity(); + this.setState({ selection: prevColor }); + this.props.onUndo(prevColor); + return; + } + + if (selection === 'export') { + const svgData = this.convertToSVG(); + this.props.onImageExport(svgData); + return; + } + + this.setState({ selection: selection }); + }; + + componentDidUpdate(prevProps) { + if (prevProps.actionQueueChange !== this.props.actionQueueChange) { + this.handleSelectionChange(); + } + } + + drawCanvas() { + this.img.onload = () => { + // this onload may or may not be causing problems. + this.ctx.drawImage( + this.img, + 0, + 0, + this.canvasRef.current?.width, + this.canvasRef.current?.height + ); + }; + } + + convertToSVG() { + const lines = this.lineStack.flat(); + const combinedArray = lines.flatMap( + ([lastX, lastY, x, y, colorSelection]) => [ + lastX, + lastY, + x, + y, + colorSelection, + ] + ); + return combinedArray; + } + + getComplexity() { + let count = 0; + this.lineStack.forEach((item) => { + count += item.length; + }); + return count; + } + + displayCanvas() { + return ( +
+ {this.complexity > 500 && ( + + + + )} + this.handleMouseDown(e)} + onMouseUp={(e) => this.handleMouseUp(e)} + onMouseMove={(e) => this.handleMouseMove(e)} + /> +
+ ); + } + + displayLoading() { + return ( +
+ +

+ Please wait a few minutes before attempting to access the canvas. +

+
+
+ ); + } + + render() { + if (this.state.mapLoad) { + return this.displayCanvas(); + } else { + // edge case where a new user joins and tries to draw on the canvas before they cached the png + return this.displayLoading(); + } + } +} diff --git a/tgui/packages/tgui/interfaces/DrawnMap.js b/tgui/packages/tgui/interfaces/DrawnMap.js new file mode 100644 index 0000000000..cd5a9539f8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/DrawnMap.js @@ -0,0 +1,110 @@ +import { Box } from '../components'; +import { Component, createRef } from 'inferno'; + +export class DrawnMap extends Component { + constructor(props) { + super(props); + this.containerRef = createRef(); + this.flatImgSrc = this.props.flatImage; + this.backupImgSrc = this.props.backupImage; + this.state = { + mapLoad: true, + loadingBackup: true, + }; + this.img = null; + this.svg = this.props.svgData; + } + + componentDidMount() { + this.img = new Image(); + this.img.src = this.flatImgSrc; + this.img.onload = () => { + this.setState({ mapLoad: true }); + }; + + this.img.onerror = () => { + this.img.src = this.backupImgSrc; + this.setState({ mapLoad: false }); + }; + + const backupImg = new Image(); + backupImg.src = this.backupImgSrc; + backupImg.onload = () => { + this.setState({ loadingBackup: false }); + }; + } + + parseSvgData(svgDataArray) { + if (!svgDataArray) return null; + let lines = []; + for (let i = 0; i < svgDataArray.length; i += 5) { + const x1 = svgDataArray[i]; + const y1 = svgDataArray[i + 1]; + const x2 = svgDataArray[i + 2]; + const y2 = svgDataArray[i + 3]; + const stroke = svgDataArray[i + 4]; + lines.push({ x1, y1, x2, y2, stroke }); + } + return lines; + } + + getSize() { + const ratio = Math.min( + (self.innerWidth - 50) / 650, + (self.innerHeight - 150) / 600 + ); + return { width: 650 * ratio, height: 600 * ratio }; + } + + render() { + const parsedSvgData = this.parseSvgData(this.svg); + const size = this.getSize(); + + return ( +
+ {this.state.loadingBackup && !this.state.mapLoad && ( + +

Loading map...

+
+ )} + {this.img && this.state.mapLoad && ( + + )} + {parsedSvgData && this.state.mapLoad && ( + + {parsedSvgData.map((line, index) => ( + + ))} + + )} +
+ ); + } +} diff --git a/tgui/packages/tgui/interfaces/OverwatchConsole.js b/tgui/packages/tgui/interfaces/OverwatchConsole.js index 1a6f67ac7c..1805f231fb 100644 --- a/tgui/packages/tgui/interfaces/OverwatchConsole.js +++ b/tgui/packages/tgui/interfaces/OverwatchConsole.js @@ -61,7 +61,6 @@ const SquadPanel = (props, context) => { const { act, data } = useBackend(context); const [category, setCategory] = useLocalState(context, 'selected', 'monitor'); - let hello = 2; return ( <> diff --git a/tgui/packages/tgui/interfaces/TacmapAdminPanel.js b/tgui/packages/tgui/interfaces/TacmapAdminPanel.js new file mode 100644 index 0000000000..a5d00c688a --- /dev/null +++ b/tgui/packages/tgui/interfaces/TacmapAdminPanel.js @@ -0,0 +1,164 @@ +import { useBackend, useLocalState } from '../backend'; +import { Tabs, Section, Button, Stack, Flex } from '../components'; +import { DrawnMap } from './DrawnMap'; +import { Window } from '../layouts'; + +const PAGES = [ + { + title: 'USCM', + component: () => FactionPage, + color: 'blue', + icon: 'medal', + }, + { + title: 'Hive', + component: () => FactionPage, + color: 'purple', + icon: 'star', + }, +]; + +export const TacmapAdminPanel = (props, context) => { + const { data } = useBackend(context); + const { + uscm_map, + xeno_map, + uscm_svg, + xeno_svg, + uscm_ckeys, + xeno_ckeys, + uscm_names, + xeno_names, + uscm_times, + xeno_times, + uscm_selection, + xeno_selection, + map_fallback, + last_update_time, + } = data; + + const [pageIndex, setPageIndex] = useLocalState(context, 'pageIndex', 0); + + const PageComponent = PAGES[pageIndex].component(); + + return ( + + + + + + {PAGES.map((page, i) => { + if (page.canAccess && !page.canAccess(data)) { + return; + } + + return ( + setPageIndex(i)}> + {page.title} + + ); + })} + + + + + + +
+ +
+
+
+
+
+ ); +}; + +const FactionPage = (props, context) => { + const { act } = useBackend(context); + const { svg, ckeys, names, times, selected_map, is_uscm } = props; + + return ( +
+ act('recache', { + uscm: is_uscm, + }) + } + /> + }> + {Object(ckeys).map((ckey, ckey_index) => ( + + + + act('change_selection', { + uscm: is_uscm, + index: ckey_index, + }) + } + /> + + + {names[ckey_index]} ({ckey}) - {times[ckey_index]} + + + + act('delete', { + uscm: is_uscm, + index: ckey_index, + }) + } + /> + + + ))} +
+ ); +}; diff --git a/tgui/packages/tgui/interfaces/TacticalMap.tsx b/tgui/packages/tgui/interfaces/TacticalMap.tsx index 01ba483acf..9299603871 100644 --- a/tgui/packages/tgui/interfaces/TacticalMap.tsx +++ b/tgui/packages/tgui/interfaces/TacticalMap.tsx @@ -1,24 +1,330 @@ -import { useBackend } from '../backend'; -import { ByondUi } from '../components'; +import { useBackend, useLocalState } from '../backend'; +import { Button, Dropdown, Section, Stack, ProgressBar, Box, Tabs } from '../components'; import { Window } from '../layouts'; +import { CanvasLayer } from './CanvasLayer'; +import { DrawnMap } from './DrawnMap'; +import { ByondUi } from '../components'; interface TacMapProps { + toolbarColorSelection: string; + toolbarUpdatedSelection: string; + updatedCanvas: boolean; + themeId: number; + svgData: any; + canViewTacmap: number; + canDraw: number; + isXeno: boolean; + canViewCanvas: number; + newCanvasFlatImage: string; + oldCanvasFlatImage: string; + actionQueueChange: number; + exportedColor: string; + mapFallback: string; mapRef: string; + currentMenu: string; + lastUpdateTime: any; + nextCanvasTime: any; + canvasCooldown: any; + exportedTacMapImage: any; + tacmapReady: number; } +const PAGES = [ + { + title: 'tacmap', + canOpen: (data) => { + return 1; + }, + component: () => ViewMapPanel, + icon: 'map', + canAccess: (data) => { + return data.canViewTacmap; + }, + }, + { + title: 'old canvas', + canOpen: (data) => { + return 1; + }, + component: () => OldMapPanel, + icon: 'eye', + canAccess: (data) => { + return data.canViewCanvas; + }, + }, + { + title: 'new canvas', + canOpen: (data) => { + return data.tacmapReady; + }, + component: () => DrawMapPanel, + icon: 'paintbrush', + canAccess: (data) => { + return data.canDraw; + }, + }, +]; + +const colorOptions = [ + 'black', + 'red', + 'orange', + 'blue', + 'purple', + 'green', + 'brown', +]; + +const colors: Record = { + 'black': '#000000', + 'red': '#fc0000', + 'orange': '#f59a07', + 'blue': '#0561f5', + 'purple': '#c002fa', + 'green': '#02c245', + 'brown': '#5c351e', +}; + export const TacticalMap = (props, context) => { const { data, act } = useBackend(context); + const [pageIndex, setPageIndex] = useLocalState( + context, + 'pageIndex', + data.canViewTacmap ? 0 : 1 + ); + const PageComponent = PAGES[pageIndex].component(); + + const handleTacmapOnClick = (i, pageTitle) => { + setPageIndex(i); + act('menuSelect', { + selection: pageTitle, + }); + }; + return ( - + - +
+ + + + {PAGES.map((page, i) => { + if (page.canAccess(data) === 0) { + return; + } + return ( + handleTacmapOnClick(i, page.title)}> + {page.canOpen(data) === 0 ? 'loading' : page.title} + + ); + })} + + + +
+
); }; + +const ViewMapPanel = (props, context) => { + const { data } = useBackend(context); + + // byond ui can't resist trying to render + if (data.canViewTacmap === 0 || data.mapRef === null) { + return ; + } + + return ( +
+ +
+ ); +}; + +const OldMapPanel = (props, context) => { + const { data } = useBackend(context); + return ( +
+ {data.canViewCanvas ? ( + + ) : ( + +

Unauthorized.

+
+ )} +
+ ); +}; + +const DrawMapPanel = (props, context) => { + const { data, act } = useBackend(context); + + const timeLeftPct = data.canvasCooldown / data.nextCanvasTime; + const canUpdate = data.canvasCooldown <= 0 && !data.updatedCanvas; + + const handleTacMapExport = (image: any) => { + data.exportedTacMapImage = image; + }; + + const handleColorSelection = (dataSelection) => { + if (colors[dataSelection] !== null && colors[dataSelection] !== undefined) { + return colors[dataSelection]; + } else { + return dataSelection; + } + }; + const findColorValue = (oldValue: string) => { + return (Object.keys(colors) as Array).find( + (key) => colors[key] === (oldValue as string) + ); + }; + + return ( + <> +
+ + + {(!data.updatedCanvas && ( +
+
+ + act('selectColor', { color: findColorValue(value) }) + } + onDraw={() => act('onDraw')} + /> +
+ + ); +}; diff --git a/tgui/packages/tgui/styles/interfaces/TacticalMap.scss b/tgui/packages/tgui/styles/interfaces/TacticalMap.scss index 312c9ce262..a4ab134517 100644 --- a/tgui/packages/tgui/styles/interfaces/TacticalMap.scss +++ b/tgui/packages/tgui/styles/interfaces/TacticalMap.scss @@ -9,3 +9,7 @@ margin: 0.5em; text-align: center; } + +.progress-stack { + margin-top: 15px; +} From a4284b4153c9e4c120ac0b4678151a1cb401d56d Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Fri, 17 Nov 2023 23:06:32 +0000 Subject: [PATCH 02/65] Automatic changelog for PR #4475 [ci skip] --- html/changelogs/AutoChangeLog-pr-4475.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4475.yml diff --git a/html/changelogs/AutoChangeLog-pr-4475.yml b/html/changelogs/AutoChangeLog-pr-4475.yml new file mode 100644 index 0000000000..27d43d1e7a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4475.yml @@ -0,0 +1,5 @@ +author: "Cthulhu80, Drathek" +delete-after: True +changes: + - rscadd: "Adds drawing to tactical maps, viewable via stat panel for marines and xeno tacmap for xenos." + - bugfix: "Corrupted (and other hives) now have separate tactical maps." \ No newline at end of file From ef2b7f17d87890afd812c23674e6e5e77dbcd1db Mon Sep 17 00:00:00 2001 From: Changelogs Date: Sat, 18 Nov 2023 01:10:42 +0000 Subject: [PATCH 03/65] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-4475.yml | 5 ----- html/changelogs/AutoChangeLog-pr-4912.yml | 10 ---------- html/changelogs/AutoChangeLog-pr-4937.yml | 4 ---- html/changelogs/AutoChangeLog-pr-4938.yml | 4 ---- html/changelogs/archive/2023-11.yml | 20 ++++++++++++++++++++ 5 files changed, 20 insertions(+), 23 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4475.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4912.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4937.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4938.yml diff --git a/html/changelogs/AutoChangeLog-pr-4475.yml b/html/changelogs/AutoChangeLog-pr-4475.yml deleted file mode 100644 index 27d43d1e7a..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4475.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Cthulhu80, Drathek" -delete-after: True -changes: - - rscadd: "Adds drawing to tactical maps, viewable via stat panel for marines and xeno tacmap for xenos." - - bugfix: "Corrupted (and other hives) now have separate tactical maps." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4912.yml b/html/changelogs/AutoChangeLog-pr-4912.yml deleted file mode 100644 index 29dd976c40..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4912.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: "fira" -delete-after: True -changes: - - bugfix: "Fixed the tank driving through vehicle blockers and accessing \"deep\" parts of the map it wasn't intended to push." - - bugfix: "Tentatively fixed some visual bugs with turret based vehicles." - - bugfix: "Fixed using the tank coupon as first vehicle spawn causing Gear Vendor to still give out APC gear." - - admin: "Added an APC coupon in same vein as Tank Coupon for Admins to use." - - admin: "Tank/APC Coupons now spawn broken down versions of the vehicles, for the full VC experience. You want a ready to use one, just spawn it." - - admin: "Tank/APC coupons do not spawn VC pamphlets in ASRS anymore." - - admin: "Added a vehicle_flag for tanks to bypass blockers (in a legit fashion this time). Abuse at your discretion." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4937.yml b/html/changelogs/AutoChangeLog-pr-4937.yml deleted file mode 100644 index 4c7bb250ae..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4937.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ihatethisengine" -delete-after: True -changes: - - rscadd: "Cloaked lurker devouring now shows a message to target again." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4938.yml b/html/changelogs/AutoChangeLog-pr-4938.yml deleted file mode 100644 index 8c84372326..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4938.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "fira" -delete-after: True -changes: - - admin: "Moderators are now immune to inactivity kick, much like Admins." \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index acb5a065d7..2498cfca42 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -242,3 +242,23 @@ - rscadd: Faxes sent from HighCom fax machines now appear in their correct category. sleepynecrons: - imageadd: fixes biosuit body sprite not properly covering mobs +2023-11-18: + Cthulhu80, Drathek: + - rscadd: Adds drawing to tactical maps, viewable via stat panel for marines and + xeno tacmap for xenos. + - bugfix: Corrupted (and other hives) now have separate tactical maps. + fira: + - admin: Moderators are now immune to inactivity kick, much like Admins. + - bugfix: Fixed the tank driving through vehicle blockers and accessing "deep" parts + of the map it wasn't intended to push. + - bugfix: Tentatively fixed some visual bugs with turret based vehicles. + - bugfix: Fixed using the tank coupon as first vehicle spawn causing Gear Vendor + to still give out APC gear. + - admin: Added an APC coupon in same vein as Tank Coupon for Admins to use. + - admin: Tank/APC Coupons now spawn broken down versions of the vehicles, for the + full VC experience. You want a ready to use one, just spawn it. + - admin: Tank/APC coupons do not spawn VC pamphlets in ASRS anymore. + - admin: Added a vehicle_flag for tanks to bypass blockers (in a legit fashion this + time). Abuse at your discretion. + ihatethisengine: + - rscadd: Cloaked lurker devouring now shows a message to target again. From 2fe0665edaafd14fe2230647ea7e37792eb6e22e Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sun, 19 Nov 2023 10:51:17 +0000 Subject: [PATCH 04/65] Automatic TGS DMAPI Update (#4954) This pull request updates the TGS DMAPI to the latest version. Please note any breaking or unimplemented changes before merging. Co-authored-by: tgstation-server --- code/__DEFINES/tgs.dm | 2 +- code/modules/tgs/v5/__interop_version.dm | 2 +- code/modules/tgs/v5/_defines.dm | 2 ++ code/modules/tgs/v5/topic.dm | 20 ++++++++++++++++---- code/modules/tgs/v5/undefs.dm | 4 ++++ 5 files changed, 24 insertions(+), 6 deletions(-) diff --git a/code/__DEFINES/tgs.dm b/code/__DEFINES/tgs.dm index 0cc106ec9c..b0e97e05e9 100644 --- a/code/__DEFINES/tgs.dm +++ b/code/__DEFINES/tgs.dm @@ -1,6 +1,6 @@ // tgstation-server DMAPI -#define TGS_DMAPI_VERSION "6.6.2" +#define TGS_DMAPI_VERSION "6.7.0" // All functions and datums outside this document are subject to change with any version and should not be relied on. diff --git a/code/modules/tgs/v5/__interop_version.dm b/code/modules/tgs/v5/__interop_version.dm index 1b52b31d6a..83420d130a 100644 --- a/code/modules/tgs/v5/__interop_version.dm +++ b/code/modules/tgs/v5/__interop_version.dm @@ -1 +1 @@ -"5.6.2" +"5.7.0" diff --git a/code/modules/tgs/v5/_defines.dm b/code/modules/tgs/v5/_defines.dm index bdcd4e4dd5..48969c0c7d 100644 --- a/code/modules/tgs/v5/_defines.dm +++ b/code/modules/tgs/v5/_defines.dm @@ -80,6 +80,7 @@ #define DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH 8 #define DMAPI5_TOPIC_COMMAND_SEND_CHUNK 9 #define DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK 10 +#define DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST 11 #define DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE "commandType" #define DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND "chatCommand" @@ -89,6 +90,7 @@ #define DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME "newInstanceName" #define DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE "chatUpdate" #define DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION "newServerVersion" +#define DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE "broadcastMessage" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE "commandResponse" #define DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE "commandResponseMessage" diff --git a/code/modules/tgs/v5/topic.dm b/code/modules/tgs/v5/topic.dm index d7d4712138..2ef0c70a97 100644 --- a/code/modules/tgs/v5/topic.dm +++ b/code/modules/tgs/v5/topic.dm @@ -94,7 +94,7 @@ if(DMAPI5_TOPIC_COMMAND_CHANGE_PORT) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") if(event_handler != null) event_handler.HandleEvent(TGS_EVENT_PORT_SWAP, new_port) @@ -141,7 +141,7 @@ if(DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE) var/new_port = topic_parameters[DMAPI5_TOPIC_PARAMETER_NEW_PORT] if (!isnum(new_port) || !(new_port > 0)) - return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]") + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_PORT]") server_port = new_port return TopicResponse() @@ -157,7 +157,7 @@ var/error_message = null if (new_port != null) if (!isnum(new_port) || !(new_port > 0)) - error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]]" + error_message = "Invalid [DMAPI5_TOPIC_PARAMETER_NEW_PORT]" else server_port = new_port @@ -165,7 +165,7 @@ if (!istext(new_version_string)) if(error_message != null) error_message += ", " - error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]]" + error_message += "Invalid or missing [DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION]" else var/datum/tgs_version/new_version = new(new_version_string) if (event_handler) @@ -267,4 +267,16 @@ return chunk_to_send + if(DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST) + var/message = topic_parameters[DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE] + if (!istext(message)) + return TopicResponse("Invalid or missing [DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE]") + + TGS_WORLD_ANNOUNCE(message) + return TopicResponse() + return TopicResponse("Unknown command: [command]") + +/datum/tgs_api/v5/proc/WorldBroadcast(message) + set waitfor = FALSE + TGS_WORLD_ANNOUNCE(message) diff --git a/code/modules/tgs/v5/undefs.dm b/code/modules/tgs/v5/undefs.dm index f163adaaaf..fd1ed7e4cf 100644 --- a/code/modules/tgs/v5/undefs.dm +++ b/code/modules/tgs/v5/undefs.dm @@ -78,6 +78,9 @@ #undef DMAPI5_TOPIC_COMMAND_SERVER_PORT_UPDATE #undef DMAPI5_TOPIC_COMMAND_HEALTHCHECK #undef DMAPI5_TOPIC_COMMAND_WATCHDOG_REATTACH +#undef DMAPI5_TOPIC_COMMAND_SEND_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_CHUNK +#undef DMAPI5_TOPIC_COMMAND_RECEIVE_BROADCAST #undef DMAPI5_TOPIC_PARAMETER_COMMAND_TYPE #undef DMAPI5_TOPIC_PARAMETER_CHAT_COMMAND @@ -87,6 +90,7 @@ #undef DMAPI5_TOPIC_PARAMETER_NEW_INSTANCE_NAME #undef DMAPI5_TOPIC_PARAMETER_CHAT_UPDATE #undef DMAPI5_TOPIC_PARAMETER_NEW_SERVER_VERSION +#undef DMAPI5_TOPIC_PARAMETER_BROADCAST_MESSAGE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE #undef DMAPI5_TOPIC_RESPONSE_COMMAND_RESPONSE_MESSAGE From 5eb033520a99e1d73ca541182d9bb346c8304ec0 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:01:49 -0800 Subject: [PATCH 05/65] Fix jump-to-area runtime (#4946) # About the pull request Title. # Changelog :cl: fix: Jump-to-area verb will now warn you if there aren't any turfs in the given area. /:cl: --- code/modules/admin/verbs/adminjump.dm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index cef0625c0a..2806b8c3ba 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -15,11 +15,17 @@ if(!src.mob) return + var/list/area_turfs = get_area_turfs(A) + + if(!length(area_turfs)) + to_chat(src, "There aren't any turfs in this area!") + return + if(!isobserver(mob)) src.admin_ghost() src.mob.on_mob_jump() - src.mob.forceMove(pick(get_area_turfs(A))) + src.mob.forceMove(pick(area_turfs)) message_admins(WRAP_STAFF_LOG(usr, "jumped to area [get_area(usr)] ([usr.loc.x],[usr.loc.y],[usr.loc.z])."), usr.loc.x, usr.loc.y, usr.loc.z) From e1bb9496a57e54da1b29deb739bdb0f55f274b77 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Sun, 19 Nov 2023 11:10:04 +0000 Subject: [PATCH 06/65] Automatic changelog for PR #4946 [ci skip] --- html/changelogs/AutoChangeLog-pr-4946.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4946.yml diff --git a/html/changelogs/AutoChangeLog-pr-4946.yml b/html/changelogs/AutoChangeLog-pr-4946.yml new file mode 100644 index 0000000000..411c1b12c8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4946.yml @@ -0,0 +1,4 @@ +author: "Zonespace27" +delete-after: True +changes: + - bugfix: "Jump-to-area verb will now warn you if there aren't any turfs in the given area." \ No newline at end of file From f544b827b85ee7104891c72844b92bbe8b493ac8 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:01:52 -0800 Subject: [PATCH 07/65] Fix c4 deletion runtime (#4947) # About the pull request Nullchecks a forceMove --- code/game/objects/items/explosives/plastic.dm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/objects/items/explosives/plastic.dm b/code/game/objects/items/explosives/plastic.dm index 830df96590..ac0a2263cd 100644 --- a/code/game/objects/items/explosives/plastic.dm +++ b/code/game/objects/items/explosives/plastic.dm @@ -26,7 +26,7 @@ /obj/item/explosive/plastic/Destroy() disarm() - . = ..() + return ..() /obj/item/explosive/plastic/explosion_throw(severity, direction, scatter_multiplier) if(active) @@ -156,7 +156,9 @@ plant_target.overlays -= overlay qdel(overlay) plant_target.contents -= src - forceMove(get_turf(plant_target)) + var/turf/plant_turf = get_turf(plant_target) + if(plant_turf) + forceMove(plant_turf) plant_target = null if(customizable) if(active) //deactivate From 5ac1975131cf309627af58f3a4d838554d3daef5 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:02:07 -0800 Subject: [PATCH 08/65] Fix issue with null hud_used in stop_tracking_resin_mark (#4948) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/f061830e-975f-49fb-b17e-a139fc5bff09) Fixes above runtime. Unsure if `hud_used` being null is because this is being called during the destroy process of the xeno, or if it's a deeper issue. I've put in a crash to test. --- code/modules/mob/living/carbon/xenomorph/XenoProcs.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm index 780299547a..0645d5fcba 100644 --- a/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm +++ b/code/modules/mob/living/carbon/xenomorph/XenoProcs.dm @@ -695,6 +695,12 @@ to_chat(src, SPAN_INFO("shift click the compass to watch the mark, alt click to stop tracking")) /mob/living/carbon/xenomorph/proc/stop_tracking_resin_mark(destroyed, silent = FALSE) //tracked_marker shouldnt be nulled outside this PROC!! >:C + if(QDELETED(src)) + return + + if(!hud_used) + CRASH("hud_used is null in stop_tracking_resin_mark") + var/atom/movable/screen/mark_locator/ML = hud_used.locate_marker ML.overlays.Cut() From 5f3331f6914b5b2726c5a001944a39ad65a6b896 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:02:18 -0800 Subject: [PATCH 09/65] Fix null parent crash in radial slice clicked() (#4949) function # About the pull request Same method as https://github.com/cmss13-devs/cmss13/pull/4948 ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/c11029df-2442-4698-8002-da8625c0c7a0) --- code/_onclick/hud/radial.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/_onclick/hud/radial.dm b/code/_onclick/hud/radial.dm index cfc6c4d034..4a23ebd882 100644 --- a/code/_onclick/hud/radial.dm +++ b/code/_onclick/hud/radial.dm @@ -34,6 +34,12 @@ GLOBAL_LIST_EMPTY(radial_menus) /atom/movable/screen/radial/slice/clicked(mob/user) + if(QDELETED(src)) + return + + if(!parent) + CRASH("clicked() called on a radial slice with a null parent while not deleted/deleting") + if(user.client == parent.current_user) if(next_page) parent.next_page() From e398d9319e133dce4761adcd20e1958b076f468e Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:02:28 -0800 Subject: [PATCH 10/65] Experimental sniper runtime fix (#4950) # About the pull request Fixes(?) below ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/21a757b2-05e1-44b9-be0d-5c1044cbe296) There are multiple possible causes, will look into further if this runtime pops up again --- code/modules/projectiles/guns/specialist/sniper.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/specialist/sniper.dm b/code/modules/projectiles/guns/specialist/sniper.dm index 17a2c0f268..1e72a42538 100644 --- a/code/modules/projectiles/guns/specialist/sniper.dm +++ b/code/modules/projectiles/guns/specialist/sniper.dm @@ -154,7 +154,7 @@ target.overlays -= lockon_direction_icon qdel(laser_beam) - if(!check_can_use(target, TRUE)) + if(!check_can_use(target, TRUE) || target.is_dead()) return var/obj/projectile/aimed_proj = sniper_rifle.in_chamber From 9e45fbcb6433fe450d9e1a4ba9cb59f1870e375e Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Sun, 19 Nov 2023 03:02:39 -0800 Subject: [PATCH 11/65] Fix med_hud_set_health runtime for xenomorphs (#4951) # About the pull request Fixes below ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/ef8b8ae6-9e23-420e-acbe-24ddf035b7e5) Same rationale as https://github.com/cmss13-devs/cmss13/pull/4948 --- code/datums/mob_hud.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/code/datums/mob_hud.dm b/code/datums/mob_hud.dm index b0df9bca77..ff12635107 100644 --- a/code/datums/mob_hud.dm +++ b/code/datums/mob_hud.dm @@ -283,6 +283,12 @@ var/list/datum/mob_hud/huds = list( return /mob/living/carbon/xenomorph/med_hud_set_health() + if(QDELETED(src)) + return + + if(!(HEALTH_HUD_XENO in hud_list)) + CRASH("hud_list lacks HEALTH_HUD_XENO despite not being deleted in med_hud_set_health()") + var/image/holder = hud_list[HEALTH_HUD_XENO] var/health_hud_type = "xenohealth" From 47bac6076f8f4ab9817e31f712f27f890a83a6d1 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Mon, 20 Nov 2023 01:12:24 +0000 Subject: [PATCH 12/65] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-4946.yml | 4 ---- html/changelogs/archive/2023-11.yml | 4 ++++ 2 files changed, 4 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4946.yml diff --git a/html/changelogs/AutoChangeLog-pr-4946.yml b/html/changelogs/AutoChangeLog-pr-4946.yml deleted file mode 100644 index 411c1b12c8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4946.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Zonespace27" -delete-after: True -changes: - - bugfix: "Jump-to-area verb will now warn you if there aren't any turfs in the given area." \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 2498cfca42..6ffb285f96 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -262,3 +262,7 @@ time). Abuse at your discretion. ihatethisengine: - rscadd: Cloaked lurker devouring now shows a message to target again. +2023-11-20: + Zonespace27: + - bugfix: Jump-to-area verb will now warn you if there aren't any turfs in the given + area. From 986d66f1c4d3eeda1f6d721df8dd65afbf5e5416 Mon Sep 17 00:00:00 2001 From: hislittlecuzingames <142365554+hislittlecuzingames@users.noreply.github.com> Date: Mon, 20 Nov 2023 07:28:39 -0500 Subject: [PATCH 13/65] Added Ability for Looping Sounds to be heard from further away. (#4857) # Allows Looping Sounds to be heard from further away. # Explain why it's good for the game allows for looping alarms to be proximity based and heard from more than 1 room away should one desire. side note... I was eating pizza and there was hella black ash on the bottom. I think they burned garlic bread. It was nasty. # Testing Photographs and Procedure screenshot a sound? okay uhh... I uhh... adjusted settings and played a looping sound and walked away from it. :cl: code: Added ability to have looping sounds from further away /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/datums/looping_sounds/_looping_sound.dm | 34 ++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/code/datums/looping_sounds/_looping_sound.dm b/code/datums/looping_sounds/_looping_sound.dm index c6fc23c68e..11ba151464 100644 --- a/code/datums/looping_sounds/_looping_sound.dm +++ b/code/datums/looping_sounds/_looping_sound.dm @@ -37,6 +37,15 @@ /// Has the looping started yet? var/loop_started = FALSE + /** + * Let's you make a "loud" sound that "projects." IE you can hear this sound from a further distance away. + * Think of like an air raid siren. They're loud if you're close yeah... but you can hear them from mad far away, bruv + * with a longer "falloff distance." Fixes the extra_range stuff + */ + var/is_sound_projecting = FALSE + ///only applicable to is_sound_projecting: max range till sound volume starts dropping as distance increases + var/falloff_distance = 50 + /* // as of yet unused varen \\ /// How much the sound will be affected by falloff per tile. @@ -130,19 +139,18 @@ sound_to_play.channel = get_free_channel() sound_to_play.volume = volume_override || volume //Use volume as fallback if theres no override SEND_SOUND(parent, sound_to_play) - else - playsound( - parent, - sound_to_play, - volume, - vary, - extra_range//, - // falloff_exponent = falloff_exponent, - // pressure_affected = pressure_affected, - // ignore_walls = ignore_walls, - // falloff_distance = falloff_distance, - // use_reverb = use_reverb - ) + return + if (is_sound_projecting) + playsound(parent, sound_to_play, volume, vary, extra_range, VOLUME_SFX, 0, 0, falloff_distance) + return + + playsound( + parent, + sound_to_play, + volume, + vary, + extra_range + ) /// Returns the sound we should now be playing. /datum/looping_sound/proc/get_sound(_mid_sounds) From 068b9f724b4ec429e5b1dbdb84ccca356b41be2a Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Mon, 20 Nov 2023 12:38:34 +0000 Subject: [PATCH 14/65] Automatic changelog for PR #4857 [ci skip] --- html/changelogs/AutoChangeLog-pr-4857.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4857.yml diff --git a/html/changelogs/AutoChangeLog-pr-4857.yml b/html/changelogs/AutoChangeLog-pr-4857.yml new file mode 100644 index 0000000000..775c87aff5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4857.yml @@ -0,0 +1,4 @@ +author: "hislittlecuzingames" +delete-after: True +changes: + - code_imp: "Added ability to have looping sounds from further away" \ No newline at end of file From 56a0b3e033f8886f48602489cc46f32d15ace438 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Tue, 21 Nov 2023 01:14:19 +0000 Subject: [PATCH 15/65] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-4857.yml | 4 ---- html/changelogs/archive/2023-11.yml | 3 +++ 2 files changed, 3 insertions(+), 4 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4857.yml diff --git a/html/changelogs/AutoChangeLog-pr-4857.yml b/html/changelogs/AutoChangeLog-pr-4857.yml deleted file mode 100644 index 775c87aff5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4857.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "hislittlecuzingames" -delete-after: True -changes: - - code_imp: "Added ability to have looping sounds from further away" \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 6ffb285f96..d7d533486f 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -266,3 +266,6 @@ Zonespace27: - bugfix: Jump-to-area verb will now warn you if there aren't any turfs in the given area. +2023-11-21: + hislittlecuzingames: + - code_imp: Added ability to have looping sounds from further away From 9c274b68e10cf775073a7dd3a931149f12dd3cc0 Mon Sep 17 00:00:00 2001 From: hislittlecuzingames <142365554+hislittlecuzingames@users.noreply.github.com> Date: Tue, 21 Nov 2023 05:57:20 -0500 Subject: [PATCH 16/65] =?UTF-8?q?Added=20Ability=20to=20turn=20on=20and=20?= =?UTF-8?q?turn=20off=20a=20dropship=20alarm.=20(Requires=20pro=E2=80=A6?= =?UTF-8?q?=20(#4858)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit …jecting-looping-sounds branch made 5 November 2023 to work) #ATTENTION!!!!! Requires this PR to be approved first to work: https://github.com/cmss13-devs/cmss13/pull/4857 # About the pull request Makes an alarm the pilots can use on alamo or normandy to tell ground forces "Hey I plan on taking off soon." # Explain why it's good for the game The ship takeoff sound to taking off is like 7 seconds. Ground combat is mad intense & people can miss people talking. So having that alarm may make it so people hear that they're leaving before the ship leaves. # Testing Photographs and Procedure
Screenshots & Videos oh...
# Changelog :cl: add: Launch Announcement Alarm for dropships to notify ground forces of departure. /:cl: --------- Co-authored-by: Drathek <76988376+Drulikar@users.noreply.github.com> --- code/datums/looping_sounds/misc_sounds.dm | 3 + .../shuttle/computers/dropship_computer.dm | 22 +++++++ code/modules/shuttle/shuttle.dm | 12 ++++ colonialmarines.dme | 1 + .../Dropships/single_alarm_brr_dropship_1.ogg | Bin 0 -> 22433 bytes .../tgui/interfaces/DropshipFlightControl.tsx | 55 +++++++++++++++++- 6 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 code/datums/looping_sounds/misc_sounds.dm create mode 100644 sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg diff --git a/code/datums/looping_sounds/misc_sounds.dm b/code/datums/looping_sounds/misc_sounds.dm new file mode 100644 index 0000000000..6411b3f51f --- /dev/null +++ b/code/datums/looping_sounds/misc_sounds.dm @@ -0,0 +1,3 @@ +/datum/looping_sound/looping_launch_announcement_alarm + mid_sounds = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) + start_sound = list('sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg' = 1) diff --git a/code/modules/shuttle/computers/dropship_computer.dm b/code/modules/shuttle/computers/dropship_computer.dm index 4fe1022705..d72e0871af 100644 --- a/code/modules/shuttle/computers/dropship_computer.dm +++ b/code/modules/shuttle/computers/dropship_computer.dm @@ -319,6 +319,9 @@ .["door_status"] = is_remote ? list() : shuttle.get_door_data() .["has_flyby_skill"] = skillcheck(user, SKILL_PILOT, SKILL_PILOT_EXPERT) + // Launch Alarm Variables + .["playing_launch_announcement_alarm"] = shuttle.playing_launch_announcement_alarm + .["destinations"] = list() // add flight .["destinations"] += list( @@ -381,6 +384,7 @@ msg_admin_niche(log) log_interact(user, msg = "[log]") shuttle.send_for_flyby() + stop_playing_launch_announcement_alarm() return TRUE update_equipment(is_optimised, FALSE) @@ -410,6 +414,7 @@ var/log = "[key_name(user)] launched the dropship [src.shuttleId] on transport." msg_admin_niche(log) log_interact(user, msg = "[log]") + stop_playing_launch_announcement_alarm() return TRUE if("button-push") playsound(loc, get_sfx("terminal_button"), KEYBOARD_SOUND_VOLUME, 1) @@ -469,6 +474,23 @@ if("cancel-flyby") if(shuttle.in_flyby && shuttle.timer && shuttle.timeLeft(1) >= DROPSHIP_WARMUP_TIME) shuttle.setTimer(DROPSHIP_WARMUP_TIME) + if("play_launch_announcement_alarm") + if (shuttle.mode != SHUTTLE_IDLE && shuttle.mode != SHUTTLE_RECHARGING) + to_chat(usr, SPAN_WARNING("The Launch Announcement Alarm is designed to tell people that you're going to take off soon.")) + return + shuttle.alarm_sound_loop.start() + shuttle.playing_launch_announcement_alarm = TRUE + return + if ("stop_playing_launch_announcement_alarm") + stop_playing_launch_announcement_alarm() + return + +/obj/structure/machinery/computer/shuttle/dropship/flight/proc/stop_playing_launch_announcement_alarm() + var/obj/docking_port/mobile/marine_dropship/shuttle = SSshuttle.getShuttle(shuttleId) + + shuttle.alarm_sound_loop.stop() + shuttle.playing_launch_announcement_alarm = FALSE + return /obj/structure/machinery/computer/shuttle/dropship/flight/lz1 icon = 'icons/obj/structures/machinery/computer.dmi' diff --git a/code/modules/shuttle/shuttle.dm b/code/modules/shuttle/shuttle.dm index 7bbdb214d3..85fc38bf5f 100644 --- a/code/modules/shuttle/shuttle.dm +++ b/code/modules/shuttle/shuttle.dm @@ -343,6 +343,9 @@ var/rechargeTime = 0 //time spent after arrival before being able to launch again var/prearrivalTime = 0 //delay after call time finishes for sound effects, explosions, etc. + var/playing_launch_announcement_alarm = FALSE // FALSE = off ; TRUE = on + var/datum/looping_sound/looping_launch_announcement_alarm/alarm_sound_loop + var/landing_sound = 'sound/effects/engine_landing.ogg' var/ignition_sound = 'sound/effects/engine_startup.ogg' /// Default shuttle audio ambience while flying @@ -383,6 +386,7 @@ /obj/docking_port/mobile/Destroy(force) if(force) + QDEL_NULL(alarm_sound_loop) SSshuttle.mobile -= src destination = null previous = null @@ -410,6 +414,14 @@ initial_engines = count_engines() current_engines = initial_engines + //Launch Announcement Alarm variables setup + alarm_sound_loop = new(src) + alarm_sound_loop.mid_length = 20 + alarm_sound_loop.extra_range = 30 + alarm_sound_loop.volume = 100 + alarm_sound_loop.is_sound_projecting = TRUE + alarm_sound_loop.falloff_distance = 7 + #ifdef DOCKING_PORT_HIGHLIGHT highlight("#0f0") #endif diff --git a/colonialmarines.dme b/colonialmarines.dme index 293b69c60d..a4ff7cf7c9 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -553,6 +553,7 @@ #include "code\datums\langchat\langchat.dm" #include "code\datums\looping_sounds\_looping_sound.dm" #include "code\datums\looping_sounds\item_sounds.dm" +#include "code\datums\looping_sounds\misc_sounds.dm" #include "code\datums\origin\civilian.dm" #include "code\datums\origin\origin.dm" #include "code\datums\origin\upp.dm" diff --git a/sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg b/sound/vehicles/Dropships/single_alarm_brr_dropship_1.ogg new file mode 100644 index 0000000000000000000000000000000000000000..9fe0b4c11da16009e15c30e998f35e6f479d37e8 GIT binary patch literal 22433 zcmeFZcT^Ky-zYi>A%toIB!;FT^Z-gAAjOhEf`EXOfB`Ha^rjTCmk^2}6p;=B#?S*O zAjO6P21G!mi=rrq9Tc%)KNEf4_q_MJ-#X{6b=Ljw%$f{)c9}iDUiKcghJ<(mP~e{< zNaAmS@-)91vI??qPb@1ePFw}0*8kHb=5ObVkgej8|31VcA>f_7*=t3`g5Uq;I3@A- zQHEd-Mp$&{nys-RxX3V;_n!%HjyO{jqN$0gi5X6RYt-(r=-8mRpxt{7#BYNEe{@H> zGi`%s*zS5M5WMa8^GzzAd-Jy%fQyo8v-D}CZaR0hdq?#1pr6@ zU}_sEu)wCuicgcfh$0_>LoScdTBN z{Bx210|yR#7hAYWAkr2gemvKpsxTIO)L*c002>4o*nCRau}OKLN&WV)_SPjMcO~;- zGnyye#S1**cWm1ibZ=k$y?sZ03X}aV9`(7H>^GUb<4dwXHszml`RL;>;`0yaI0(Sk zvdVvIAi%2%W~~GgNh$SEAW)1FoOCwcAiLbLDmeUH*y*;=y0)l+W}|^-xj$V%j)95a z2H=MkSN*@vV4wV;|NTi0?IQqW5SKS&)NjUU(>%0q#u`ce!Ehe{(v<9B)DuhE97nnt zw;nt<@1@?#b-w-4dBwkoASOEikcsL&G3vKKY>RFmsQANeD}~}`{95JHqg|==(|VU` z3s3){VB{T@rywm2`ipw_MMK4LcO2!4EB}@bDxQ{Vs2u_8R9=)Q^s4xS{lZ3yrE2dp zz_C6<#m{RlDTAfd+|zokm*{_=_YYgt?ku^}WiginhqF=FZDO>Sifn!fwYq&f?RB54svlu>+`a>b5;%!m8}!L zhLyPAwX2 zm*m7K-#n#$>y-AEW^I=dquWcQtsh9kN;G$pizj-=Fgkt|6Xa>JW7Iro)GKIwU(o%w zAiwsbK5hR9%wMs2d@ue#Bu6YFc&p5(4%x8(DLH)o%vsA!EyrwapKRTO`5~#rwMAvG zY6UX?MRG!U)rGujF7E|5Q$IC7EVWp8Nf6n8?#<=@?fGxX*&M44o}lE=VzvK6ayp6X zcAzvh8@YV=3*&}i5TSc%EB})K0MMBwx8;u>arZDD_b?y#F!rKv_+Lv5*g8&f86|;; z%>w`x0GO+&8at$*$jY)xrGz3JMe0407 zAS==S-u|Cm!HG!jF!226G2leQbjUF2pSi$UI?ZTg5@<>O&yW9RE_ZXt*8iA`OmZR9 zUH;E!`oB;3zZm%6VgO`uhywV-*q+rigt9Fmz=@~iY@FjFi5=jxxc-2uv(gg=X8np{ zsnLH)2WViINC#G}Ur{BUMOslNbvH5W-%clhI|w$Eft?-14KKR>#n<4AEIKPyNe?H5 zL)VWcg>{qsh5!A_u>pV$kpkF&Qa}0M?^N!f2mqGZfj*#r;gB5!0oXx4Wl{i;9dvNj zfB%^O@3sGBLI_(Q08R)Pm}vC@Xl8&9Ion8<=>xb(98e`IL&Tk-;0qSvNr5^5 zQWAI)tvoP7a-XxzuM89P#TacFrJf1`ouE`a2`r+@UL35FzWV`$Tc0NggM#J-M7yLI z?G~X);W=5b=P1bq?0HX85L#SSD+DbG`A^63 z_#G>`;yNK{U7+GlUOVpP1+l}xahJ~-Nznh^tMG-w*O$*34gjD7bw4l22mVBS*K7m; zPdXt0t`lK>tEL&D=5lcnP*!cm16+_7(*2!?m2v@!wlZh^ooyX713f$l29+|l1f4t& zibG|EhpCfsWxj``W?r^aEv~}D!$1;XYgmFm1|m779tJFd-d;d1YtZV2wyhKKc}bk2 zW+fJMZ)%kT#6C`LHWBobU7c|6u=M**`dr-2qZV zj3}J}F^y`4LK*OG6hu_A*xwZj-*mT$@qaJge@cw}HyvGNrTojvcBUu308Vvx1 zM*sMv96?hjXy~9~dznN;7=S((T(bgc>tK+a_5Wml2pb&3M*b6_Sfu;^Q;L!K{p z#xMVWmL`288d|*p?44u@vQJWmS-o~CIupK9wOJ8BfU#IQg-d*?oty3Cgtkq$($~q$ z_vJO%a*2q_iZS0vBId4@)Y*z$U!FnREJz@*4g|$_yR2qqu5X%g8}@XhCP=jiur9#N zsTHgPL5VPOx&+oW^*`x4@VOqQy~>_o zsW{1`_X{?lp7_EyN3nZ(m8UV-IRfMbt-y@hUSE)Lq=V8kjK_21?nnaU4VC~|2TRdY z@xu6*ORrqT{zI5cUv&K$SfG4A*GsHCVcDC zWBVN)8|>^=pYtmw9i=o|8C$?mzu(cRl!GvU*CwYEDhqS+Z3hZHDNycDB?jwEzGLcMzG%?ZFYx zs_GM}B-lNYDMx_5p-G1;7ujnhwh#5}kg`SCA~_6oGDO z_|;Us^bJ;^)6c~h5#5d0B9Bc!zCu2E4{+J*6Nqp!9c8XtIx8|b%j)$-cfBd!Wb9ht zKI#hi2B-I1w7{w%{ps%aQ}UmXI#+{JJh5dbCMHS{neC4v`4`z?{8XmCPE3)s?I{h*U)J+_)%8&?yA3o1S;m*;ZkEY| zv`~d0aUFbVfBIbLu}$0cURuAIiISCtn7E-OJD(;jJ!P||&mP{lP;&S3JMO?m*%yKK zd~6yL0#lR6SD~cW*ra)k-1FoHW}m;4J+bBvB1RFR4{QukPmK8diYYOua`Q>?QR_)y z-Kmc+B`>r&mdy4g6f&ICt+aWZCR(g4{js;76F;}tn?#Nu_-^awaT;UOn{1u6bL zy!bjyO^pFTe}WfYia{Hx_CTS%SQI%O5GYL_H%n2z<;B9WsFL&+UbTDFxnvp)kPy5i z%T-*k;MmhPYTV_P*mfp3z{e;DQAPC;Nl7VN*ay59c4NMnrO_5HgeS~wG&W&IHu5h; z%$YMvE3>14q0DfHwP6+wU+!UVQ;LRF5y%3zM;>^l`&DI$BcyPqe`#f|7pry+-V-qqptH3*p% zYjs2z(Ii`NV;N`6koj#UvcTKZy{a1@d}(QJu`{g&b6F@!QuLeKZ^tcl@dt0UPiu{Y zlfo~b_IAj&x{(_A>vQ23iJvm4AIn8E;lCrC17;F~OSU~eSoiw?*)?pyR@7uX$GyHW zjubu7zp5g5HB63+Q#DF5yTNPuyjB+R)Es6nd$e+HbP1|*=)7)LE=b?)xmpX_`q-|L z828MU96l4a;v);mE2j2cKGpWhL_^)fs<9BeRX6y#a&R!{1oBEJrzX`VnM7j_mxsp~ z;sp~u$Sr=VH3*IYTfv=H4r!v*aqT6^k>t)^9Jax2s=D&oUhWVJ4$wOVo@jYY6B8-B zac?YL<j3>7z8@9O0nlyH1v^fUfZ>n_4n{^RJo7c01$=nB_J>4yC&Jrd(0UA{b zWsEbujJ(|_a(=98J__PafdzzYP*(v^kaTYp_pQ^&6C}BjCJPPy9fV->Tjf(amG=8p zbX*+Kjn z@MUE6+K{vYC<0g&vVD2OxRRVR@?V8T9B1RHJYU7vs5P((#kgpZ!XRsKmW2rbq1S}~ zys$}DL_lltJ{Hp#orX@VY3=1@7%)U`c3yN7Bju)Hf*_oy|B}Q(kt5wBVDATy#*S3- z-UNO`W0$?J%jl$nx2j#`bp4$@Q!-J)zn4*=vOag0a!iF#3;y0 z=EFhrwS*-H*!1Yzs>dw@5=b zjTk3Gv@vl2fKiqq<_4!Uj9Uspa{-+r4vRDcDQdRiodir;yuLN98s$Y~pfiR;(}}~> zSq*tAno5prz|bS2kW&P<#Ij^fQd{MUCB}|jE67wJqQ_ct#RqNY;_mdC=j5{0oVpoN zZzvf_p?J(o@t-&rRck+NLgEPDf2=lZ|KMkbBjmeZgfWlGtiuVo zczo!qD9Gd?2~Mf&wryWJEHkzvSZb4oCwmKLaMd3RgcXh-?kg@FKE83saP%P^4SD3P z>j$i^$@H!PoNSldFZhSa5@A$1Bx>0>D=z*iedVu1-;VzpYF{#X_L1!T?m^yA&diJi zU}BAio%=T3@@`X@s@;{jd!oj>_Jc3$zb&`NyaFVzeY^T<7wSwxMZ$;IAF7Vij=;0w zciJ7{(119HyxC5cXpkk!DJs(77J*8lrUA4R(|79aepa*g`c zfk(doRL}|;dS`7q?Rrq_2sg(cbk3Nu05XxEC7ZA_hK) zT7-a8harGZ}A4`7Bwzz+%z)?3!K_Q1R*p)Du(4$T?i<1Fa76^}M zx*5*mg*`~nOi4C2ifjq??ds_MSmFHam){7PamPSkJendd6>i zQ%AZ+xRhft!zM5gdXFhN5{*x<|42yqLgE2XHr90uXR7hVfJF0?!r?bJc4E(l+h3&XLYkSBI&qTX9o~F9ruo zy0yX3^1*{irun#XT}Ogyc-I}b!>v8Njjc+~t>&T@CA3<7m1GYu6e9bQN?W(1a;GD# ziNkJ!PZ~sLTWxD^8{gO*b_cuOf0xJW@Ipt8S>r~3V>v8wJfQQVjsPU)ouL^ z`m=gPVu8QrK2j0jW&jEHAS%6a$H_!D?I4qphbia*`J z^;Pw5@LNY0u`=-bp+g8;@3!l~fH4L}*X~BSkK|ujkQ3nu2vy0NcMB&^HsN)s`g!z6 zqonoic{sm;xMylXuxOwp+t>_t^VmJ%i5mg((wp>jHt*W9^CM~J9vn1LG98bfNPpMh zqtBFZYiSxf_ef}8qd)J^3^g8!bf_yO0{n2I<*#q6Pwab`tPd|EZ0LEsXvpN)2|p?y zzj2-|t*}QWT*5MW=VGQ$xj5=1j7ug73KvnOpRY9WBuoft#|CJ1cDupd)fBT%*Z5wJJS;`*9 z?iC1YvLV?XQ`sev8}4eK(Js1~g(0un@ypb*>V3V{^fP$i#o*tN?%De%bZ|`YwOd=N zz#s@(*!b)~Ym-JfChWS;Z=;LvMG2J)-zTRFTFiqzfsW zz}XA0{7(=uev(Ar7(ef;&JFhllnWL)WXhG?-R`L7b4$BVPSk&N%sXlBL0#YNN@%Cy z#vK#(rlj;NX1JuJx9_sboGa03p#4&S_96hT{ay}Y5@FwROyILkBlH*55$+s)hEq8- z7)^?3T?4QsHLy&-Pc!!*kn%tBcU$W?gcQ9qZ|BG7r>+C4mYY6i(^87HQ=RWTlM`9OS3=CFzucj! zL#h|252cb<7>K#IDm_bLVe;P7@oO8BZpGktZbi?#q;aB^to%~;jtoMz)w&-D3xyQXDH6_I{J$wn^pIk*YNEq-C=PJbO zY!6C>)=JMFPd%P{IQMks>BCpgpG{9aAAT)n=uN~k(8{LEZBFNxwhmU4!|Kl!?8I+} zMMpc(=5f!tpt?;B1YQmh67J^mGFFxS8d_<5)mH@zp;MdMCDLgTja&k6c^GedOl_M{dhz3UT^GxdG=1+x zbrb8b;Um+(drErixcY7OR3PcdhVN4CMt)oCKKU)N%x6w|yvDqD&o|oH*0A{fyK_KP zPAZs$S)B45MPFn zJQ=E$G=j3_w z9!Zu{^{%Y+ls)W`T6rJeE|&refAHb0xAD7L$@-(xzdkNy1f4W`Mq!qf`1Br}-c&|; zxnbgbm(GU^!`;f@zJ=n$Ek_4NCku=3uDazdbL^XJWI?+p<>}e`8lc_5YCs*TX4?(4 za0YPTmvzU$rWsE+c_r8LqgQ??ZIm20nc4fwe^SG$B9=)E-iOrkNC%T8;sj&i=kN$D zLr(3mgdI{XDy$s+hCz!mjcRLQjgMT;V0eNVeZvXkadKy|CLU3R=-+?aFoaT%M{wbo zH8msN@lnU%unZy>F;owE|C&0h75@H9<>zNizaJN#owF?&Va-c>q^%5bm{$ETgT8-f zsc7wb2RivO;?`+bq)7RBBE3AXF#Ihy0I%Rh|TRiXUAfF8f!^~U#c>a*9}2j`6f z)(~@UzuJySdM9-Fw$pLvt3;bx6+=5p*c5u&>rrM=HEKE&wq>(AW`aU&}$!fVUs>Y052Kq1TA81(e%82(48zMY?sj64TPH#q zMRk(AB1;7VsE`M$QKU&5Gmfx ztbm`cF)c1b5T>hzg+lWMlG{FQ?0TpX1~mlj`;zObxte{({hXM7@1GBE1>_%Ak1Fk1 z^%FMK`Ln7fgY4!6n`+)FMcgb>U^x%6tjx^Ph@elv7E;ntX)CsUjB>A?xom91~fy^CfiG|(+-!1Xqxxptblz2UNm$t6h-+pbLuxk{8w|WuamH2hy(o}hV zH+NYNi9}2EhV~Tm@L2A<>H84@TcuZeN!|Ce?xN@3fUC$i`yH0^wYOI;kErr1nd@m@A z%m#EoPR2fyyR8n&FNEX ztG~R@rZv?2$*yf~$T@$0XUEU9D1RPb7g}Sxc3VlEhrwaUskK+URhKFbKn_OjHZvZE zy%N(XHvi_Nv_>gpb;sl;k$ zv9kjeXZ;(^$L}D`>pxpe7V|PnGs1|GCS&2}8LaUZK|YI{9Co`n0Wncq6H4@Tr`}p| zPLszcGL3kWKnA-Due(&l*l`$kAWlnxi#*+ZxqG$b&eV-%LC_I3xzHwT+Hab@f`NYK ze7?=?7b@r+2Vg1W(c2fn1=~v}jh=c^0ic|M`|T!&g;9_huB8AD&UR{lSdH=g@p>h6 zcXQ~AkFU#GZVOb3baPH~Qvkr8L?Ekbg4_50&=7S7h-1gS-fQ^F{s?psa;JS~W0vy+ z4RtF^MWrp8` zvPjKV-6tot9+i&L;{>jR=akAxDksxPIDZ}ejHhggS-PGM+ zSwI=(?jF4(u-fsQw|~Zi;zhUX3U?n%U#$wIkgXOvSwKCcqHBi|u+w_O;+aM1EY;on zK}kQ}tw#>O_-HjR+$GDD(r4;W)S5l20TPqzDUCEErll42SSEx14BH(=kz+^@yy=ZR z)qwOSI3}gizp%=eciY=*Uz_0Dw4&FBpZF0CJN(7(+w!(f*!QQ7t<}iP{qDHF!aOx1 z`n&J8-v>VP-FG>~BPJOn4*!71Ve-h`0trfbFT2OVd~eag&gIDkQmuObi93Z7(qT!> zrXjnCP4DY{xCnrw-_I#XpFg?T9yzS_yU;~@cpSKx+*{0k&VoSXUc%<>{HE6DDoTO; zd27=QN*r~RPS2fLM1WDp<3kC|rhvFP{k+7)LU4fyD~l9I9%ADlcQ~yygIDWa*WoK_ z9g`Z3v-`S{ZQJ9a(59d_+GPoRpZ@E`1#t&6%gL#dlN6NFAk~h%ZL^JcQPG%rEyH}){AdnVuk8ds?p+_ z_SS3~n)}d?`K82u`yNjlt@A%VRN5P|A?b+x9VO2OVdEq9fpvGEMik|2y!c*O$Nv5= z`-L$u`C$*Z?2zVD)Rg7)L4EoR^j}Qi7t36?eqDD2nhrU)+C4X(Ge}3En(>-%s3H}| zLXqo!oGvCVnu%FymKGyp26F6#su!9l&=+{4iQecm-#XTV2h3^$hVD$K8xnY6gI$DL zS`CL;Poq-YdM5ekt_$Wjx8~F2koD4hTxdnaxrzFBJ&tynSB~5(t6%(l!sOu73qM&$ zHb+!4VU_!C@3-4N2U8I|MPSPP%;k3X-nPGo<;NHvmG0*IE9&0DXAQ zxpLAQp7f$}Ki`WIKlk0FP#JwntF;@u{V>>ts)j-p`3a9Gk;g6$IKgi5AG^*7V& zmmQ0auU&{9PEV}7?r(;?yLw~N+t&pAD*5Ly9;@UUG6AwNJs#7 zIz8&Xj%tTAKq|+Kf2hT%4XG|-lCArcHLV_*s zc-NJ7NFGj;99=aEyFswPvV4WNp(*}nS%u-XT=^7$Fp1|37h8I-tjy}>d_4F%+OMyy zzxs=k+i+^g_M9^gcix=+G@=$v3!i%Uvs#1DnYljWFa+rr*}xszJ~^_D?)ZHhd?d~y zQ+oEpnpY{tM?Y>lRAAF38$p1wIc)9*{>sfC^;M=1AEqFVcx?u3qpJ+pv2 z00W^}lHTAJAhXKp(fh}Xs(i@VF^%8y=OL<#5&$mERC>(oK^221wuMb#KtT-FO_u{< z(rhV^+2b9fKF4Wfa^ zf{sm7s3wc0aB%!H1{aD>mvmpOY31}7_0J{$u=az7?a)f1sxY45%vWXjkhYdam0UVL zu=B;X_%TCSM&R%CV66pQ*2|FIxc!cLYPLsed=n|1(Dk8F%;D|9XA^&FE;xA}D!6qI zuGjuxL+Q3nmP!;p&?$WgRHT!S`?gXVUEKa%T125f^-)jtDSKs&hgU?&SXwFufZ>wV zW|2{^GuBbep#dTxaYEG`52m9Gv1lzGvxk=)CaGrZVkd%2HV6fyc$VKd4$o+k!Q-tV zl=MlQAmN^cp9V^j8iDL;Ebz_BkK4jeF81Yi^Ladd*3jZ+{qC#hj=sd))4Olu$1KMU zyoxB#Hf6o;^inK2tvBKW>PtL6*X`N37Ycv-x+_f?qL$7a=;u0qx_?P+%G&1oGbKp# z;-jOCUpr+F7yWvEB4z5*?p9?J9UQt7a?Pou@j9qdEuznRtexL;09Gjfa1Y8|0=W&qgm^&{ z+gQl$vQLbZojJi>w=u-+IJGhFrK+Obkak67K-5OQV?hmIO_;Tq%y^&kb|7joBxLpZ zEb}&vj@{qA>MnQ8@uAqk@wbx~smfm6QxbW;eYQs?zOk!=k;1ex9W{hH&- zT4f+Bu@pq2!N5N%^Rq=&>3ECKS57qDGQsR&v=W%Kaba>scusP1s@E1fH|3_6Bs{+d zD=FEC6QEDbS;?eqwY2-(T$qGl7~&anqG2Y6jGV%ACs;;YK25nxm|fEKJ#b;yGsc%% zQZEE9!4(iDSW|6y7Nmuwoc*}^wTx<7OOV#nH_C(Av@{3ZS4lyN%UAYXQQ5U5^5J%n zq>=oNu0WN+S&xl@lRGXezF!yZ_&xs6JHUi(j_{Cj)Xxq#F!@)4;{iw&@DL|BVBlX@ zIo`6;lgIa_rXSBQe0;w&xBMHr@ZsCiv{OgZ^%)B$=}3#mp7}i&<+1Xs+oiSDoF}Uo zU^**P1ZE>OzzZY22VA!Um?7>rgu0W3DWG@P(;MzySIdl8TVoLZ09RF68=lC(GSXa? zQS=BZwJX#Zk15AN?ITbyw8IhWzU*J$ucx!^&Dp@RdJaI~%VU(M_>x6AimFMQ?(Up; zu?|2Dsgmg{wha|DJerP8$jmb8E3Ss{0kZN>2UxfSJ)}kCAhi z64$J^Rj;IezskJi>bLgLmtEIMh(%Xw_pvv2sHKfh$B^Knq*Dj?b{-o(D1FsqEh|ok z4~c_<@Npdd2q);ZU`lc_p)j>570f1!v1McDQYYm0OxxF2acNP2ol#qxx1S-47G)Ai z-{KVk8WM(bMz3%}z~#A1(j+icx^qdydw^|!bYA&GEEWmhAZ`60ltK8pn zc?7?{Ey(G6hi(MtP3TJzB6m?|C4r53HJ{ zU3`67=WI*XArb~R;FSHUzKRU^!rk8SHq9j1X;if|24zU1}& zUmNCb1n-@kqe-j2bXdQ2Z>d_y?H*xmReAQdat?( ztlR{C0$Rr^_cBb8WQF1I0)eM8YD$%=91zh7V0<4wS&pc(9x;dc>A^*0X3qzdv9e$K zjb`nsBcBJ6Uxru6x^AeucYIIx_th}Edn31D1~bq*S>VwkH{thupx{J+!0rv_StaDIg^qf36Xk-tFH$~Q%^X=1n znCa#$B$$OlwT25byz6Ufs~ClFZ2gI&8H9Eme0%;|dZqzg(w*U3Z>q2dv<=06wz4_w>KV6Ya5$DcLjrK+^tUGo?u*YxKX(L?q;bs5e zOxz)eN|+uQnEv|k)z$-YlaLadGd4e^PeN?iA2y#d&qny%A`8{DX{B<0V75kzCM>O1)}TYADRu9%Tr{+t=X${t%TihdDV>+L` zIl%PcF^$hA@7L_yHPv6eKb!m0C%>WLWLU!ijyw~FY!N`zV3Lr)v~@PW50|PR(9uBR zwa=>oD=lCeH{PEeZRyO_VKX5O+|C*!RTG`NTGFa23tI;|AaG|-*%d%psQR!?ydHv| z{jb83Ge(j+0h)o&ba0(96=jxYg;csVIA}09s11-ay13|a4w2x%mLWJNi6k%P-e^op zHfg=jODLS=3)snw;uO^?riQt*`LHiq1hq#gT_t!Z-mKe#zAx-$kn1^&@|u)Gh;ytH z^Nn68iijmILr#8Q9;*E+gonW)_i1#_dY6UIW1Mt!>;_bSQrIhGuQPwpc418puJ*~W_sfnm!QpAI zuP(h{XkR}Y)2Dl0Q| z*?*Chn6_qSVCDlwrjsEgW<)>_iB?~wikGp|-<5sWzcWbE2am|Vfsno+H?yRo>F!Sa z_L7(1UnK!oj7@sFF~N)8BBW8BwX8!W$URtNR-074?X;$l&9<*5@ECS?e!qWG_C2ED zy^dn%?8kCM40M#hcdJ)az|x_2PXe)+@b9VIFO;aZR^6CCVbx zH{AF5F^c)S5^(38pw&1u6v<93(>i{H`D7yCXNvW9+=owa;G$sdoMSQkZ1mK%_Q;># zAqX76QP8mN!QGjEB9?9sr1Tg{pgasHa+) zq@|{!@_=BB(iZ<Jh_rtS$9B6j z9V?vlrI~Zl#79A#^QEW<*(f#TG<~>n%ds$7Wa9)2h4!>+Z?zRIl=8WF87_;|W)7`3 z;o5^AT+ZQREjOp9y$Nn+KING=yhF_`6diL3(&;r<+4rDNGe5ujXoTmFOFvxB9WBAv zQTBVSJRbaEPumBQgcNzx7HXj7(1~@R>rM+uyr%e4Yv9dJ``!b(js3mO%U0GAdWX%X zLyUeHe$dvJtcv@nBKy04y|h!pEA_iI)i{IK6L0`H4YGA6*ApfZajo=%gPXujq;P=i z9$^f3qoEc1WSo4YW7e!>TC$KzflZFo$Yxep*bc98-dUo48-v!x{nZtlbP%y0%+|8T zae@&-YfLhi1~Up3;kWCJS=)@-OLHbU96n^Udl(r(CE0fhxV^lA_qhXKJB(%6y*va! zx{QHOU|;N=TmCWs^h}3Uy98fH@zuTzS2hm7GpL3WfFv1~cepI>;M$z~2alfG@xXF5 zd^I59X_!>=WM5Fybu9QGST#?w(#*{h_}mVF{ehAz~>i)jg;Y}@+EF5o-{ID&HSNm^Xs%$ zCO+`<;kTQhT#6RYm|##mCUJ}<@g`{VGi{WjiMa}Ct~~KZ+Nq@uhrp%V_=02~X)2<5 zOUbRpR44EfAhTv7-nUSgW8MfuLSOi@gnS->lA^W zN0C)>PoX0K$nc@236Y&-bnD8rj06tF5*b3fB!|rewjfqMk(PBNvo)zss#_7PcgrPo z#jm9fau0sG(Y(z0`W)U?3S=JQSZlW|OA=X}~ctc3|YlHhD4=^zw7abkVyd#ENyc=AfEmPA2uF|$L za~E;9R?e|aIJO?^p%LH~wy+)<8A8=07KMsX1{UlUn?_AFc(f*OcVm|5`G=K(eGfC& zY=0Db<)pB?Ll%-4g^uXKYuRs@`1IZBtK%H~!-RU!m3kEG^^nFT1ISq9!SvHv7Sb-y z5U7(@S8o5h@A$6hY3rdQFIC7U2v$TCNtpscO14{Fl-=d(vTptKN#oBG^*(oPt(&YJ zho#dtu^|B@Ux~2a<(k{Ce}yVz?rd6n{l?875*54Fwydm3kXRKu|4{3vcA**}q4&;) zk*%CdXO}20x`9zT$Yyv=ZGKo>v_lNl$bP;rp~xXP*cBB3?hj{oF#*D^czi`jA8YclbrEU^>p()&XP67Z; zo?-v!?_!6tP3?x!o$p0+xBBkT6#Q=9yD_87ByyN^dHl^8?P=SX7yMrpKR?VF?90v_ z+xt1_Yfxe`8(`xEZ8~?CHtoC+BMLFTZ}Q^Emx;262a(1b%8wFc)PMka&V}1CJX>Tc zV_#)K)Ag}ALwz~*f&g2Ouz&sy2N@4qUhohnEkJ(`SbGKaQ1RXT{JR(L7rrkoEi63$ z_;K;m*Nvgu7dJeVmg$pIU3p~1eh$?1k0rm|)zy{Y2?n}Eo4>oLgTXBjS(036C{*s^ z?Dmw+41Xd8lEOyi>GoI4ZBgk?#5L{a3jM=0WML)^HQ2}uEUI=aV|UT~_}l%LZDak{ znSI46T=jEDIVkE}ay;;bdCjzYhHY95rS%e4lZ7$z$JO6X)$oe;lFWWL0%NO1|ufe{&=v($1 zhhq*&_rf2Z$Aa>|mjV8}3Pm?QLrchIXu&0w++cJ_bmvp|eiP0S1v|?| zh^(YqPdC-wU7kTxmLx%Qvum+oiI!yZ30?!37q>lfd@@Vgz%!4l9147xP#Sq=)O)L- z{L#0|2lKR=hc6^D_8lH5E;nqPAB;CS@MG@kv28&YhHFImMVZcTkH@Rty59LNBIEqd z&+CI-`q!Nv5%Fa!ww-Ugb=%M8kXG||t=qj-YyiHOi=!Q}MeJ6*Cw+Z3?UAoPWLvIE~&U3~%VcGob>Z-(}c9x^%8`0dogk>@(1TH{RZokz}e?5^JN{P7C? z(er!F?Q2F~M($I?s=?4eDNh0XoP}oeEHeBJE%8QvMn#!lNynkeqr0CuJSf#u%UenS zKMD2Sj52+s^7v`t*xb7LU-&dlY}6->ocA-uJ`nh?knKap^U}JVXJRPrje3Q^-I_5@ zO*ObPDH05?V3S?o#-gGc0I4M2Lw*4(4Y+BsRo&}R5_EDxtv*}G60iqOWzWiZq#%jj zS#Db*;3;S|XHNjx5Y>c5jms>-vYdCAZx%8si2_Qi{(+T2u}OI=tZJ56!-A?ESG0RA zIK3SFi1&s21_Y;97X>knf`lHVRMf^;oy?(@*0F0f*S@?b?cP}bjY*pF-+Sm%LEH_Y zi+02EK&>jI!$jLvGvJ_)R#)wA9J`!$_q4+G`3pcVTL5{wS#OzoA%lB$i11qF$4dPp zx`@s-b-=HXl40|Q(h4BB_V=RoEP>VZ*926&Hg&>KtHwPj&f(b;?qq_GvvZ{BA155# z`zTU1XUX?6Vd#hqcS9NcBwv@1?~Ov4D>q<`z4zi|I^BDUoHF^b{`CUhgesZ&*{%w6 zGh(0m)z_-@+Ed4iSP&qCD^&8i@8?WusYyc49RZ}s_m0)PYrpUQ;ImWf8j|9yPCUvI zyCo!`{NgI)&f@}aA0!Nt272ol6RZ|+IW1-+M;(d2b#xg!^4lvIgqP9F zvfK zp61F}hZqrS5Zu+VCKwavApX*Y&Erq-e9d`Wt}2R3&)~BzRMxV5*U^osJ&ip3RuPozO7NO2uv2x z(win20gV`{2pd2}8wz_HQ<%P3E*q~3>5;JqsP}S`0&O~1vfWz*3^YmCVsw8e7qFKI z?ZHFgjTd*^cnq0hhi8P-v_s*zSN_KbzI@iaH_Oaq5WE^z2dTH`MuEztCq2 z-WBGY2kA8&{lwT)!w1&R5k90_c(e+CW%OY;_W zZn3|D^G~p2D$7?d*oP+@zgPE^`Pgd%>SFb;e$SnvRhf4!m)ZyO!0!;H+*jJVL~)uG zxZ&=NR!+}woeClrOQZl5&3A&It2u)%C%Sw>Fi}Impur5DyCFOsttKzxnS1?@BF;P> z%JuK#_beD&%@AoCVo+n5V+q-pj3gDxFhUqh7^HNR5@S$f5VB?|TN-05hAFJ zL^_kj^yTskU)?G^(He8w+NB&@-|h^+ix|rKa_zkvBO9*f88prKorjlVe5X;U83_~Q-cY5@r71R-Ctra743;!^6qJF@aGYq8`jFyz^TIwszWT#n;`lfsW zlJ}iFf@s)F03PdQ71tdoc@NaIk3Upl=AsqQQ#?zS~#g{VPOFg?=wRj`Hy_ zZUb06WI2^xcZ^~5&jbxTdnP6xGBY^|u3MG+zito!&Q&-n^o*2pXK;+10xnS=cUF)| z*D_ABMNqqEkWaIvDBl$XAJt4OPF$;c@b8ns^gG=(LobYio4PCDnZc?wa#0oa_mIw5?Y zF7@*=*Jpd2Il|PIQkMc$(43HhQwN1opqQTZ#)7aoF*xkhAVQ~TlX2?RD9Lma0@drEjA6CJza2Sx~ejB`Xm7t50rk(p1=~=BL z)qliiGF51xO8gE=11^3Thj2?nNqPw$!6jBLTfhA_$`y; zT2UVjSL$72ZHmo~Z!3wyz=Nyf&iVaSX4Bn&C;!NmagS~j@WvPW2U3~mI@pOd;7L78 zcS>l*fQ0Ywx&f#)Y)ycd@bN%CXXF0r3C>MJP*2LnobmtVa8 za;8UKwoyOHiIQ@MH>Dph6PTeA`OR_WU|7xIF`H^vn1G#Hj}6--WkWAL5R*Fb( zCG4Z95^>0~d?_6X!0q#>EvJu$=T978_%vOy{`2v<9W4HNi19&Vy32|@8xW0elfB-W zR0Y*iMIT8cVl}^JK%9nz?Tffyz~tdNI4b*q<~%r3{M$j4LQ%@?}pIeyfjr#-8EM&!T$Ho1*-pDc0m zj9nXjQn6V#oA67gVfmw?eT_>>+K+}9%+@jNu$m3)?ab3kEadz}$KoW99^hfHqkY$n zi#DMPzou5VWd<2;kzr$)JQ2U}NNOk)prfQEd;Z?Hi2@cw7tu;mt>~LLgOf!*mvh7=Owvx&53z zkX{y5Wp-ZcljF(n#K?($h}(GRW5yBTKZ5IAtVE1`859k>>WK=^X(M0!@mrz-;7)Oy%A zweHqW&fQ4%tzEz2)~`;t!3ty_y=!9p$Gj&1j%^8O01HW#%^y2R-R!3uEnx`2-UsO`0XJo@|@qz=A$#2mRi@=gtQ78ysBaj9l zNON36{PS4szMdF<;Emh*b8n%+YIkdTK5CV_%Nz|{(*3+sD7e3lw&XD1bgp|YWMb@Uu}8?u z2=f>kqRbo!=wU#a9b!(r72bOV-US3{+;sOuGKjrgMW4|Pyp@Pv`{Y`2>2reHcpDbW}sBsNZ@yz zz+y=G6U*{EP$J?S4T}Q=ULgl7G=y+Bg?OU4QqlRGlpO^}OLDqA5OCO(-49kQzm5#|R0o)Rjc8Dp)tRq~N^SkD zSH5|=$Ur%1^`b@Dts!%^OA-{kjC%2N@X`=@0grCoBIho_3v;LTz1j~3qV{6;#8)Z| zLOGyI*VDyfO(6-L^h zr6>)w1?#^3aTB3(It>)8Wq1U8~UOALXa_xf|b&M#UZeO_EX_t4|W zu4`aaK!2jmT59Nuzl#0s@?&4!D$_K#Lkh+%M?AO6D-?3|X!6c`Fq1%)FHpH^r_q-= zxvnFNeSUgsYSX@w{^?b7=R{!$DGm#j%qP87ynSP7UbcEQRPjx8$ZpXJHMDaeHI5+n zFTnx7iT{5y1hjJjrDnBY*wVt7%oWTV%KW~4rn%P?DhmvBf7=0t=be0H7vd&wfY~b8 zLE@2lyhYhIGCB7Z50szzP%U@9vNn)#BEem-gjSLRaw@rP4)yvajcBc+j4Lt4Pn&qn zq6w$;^2c=(ulGHS4=bbX%+5qKweOxReq`t-1*YINEZn{D1g?!kU9Yx5__%6kyqVGN zynzvzi}s#8f_;eISgifT)zb8G8I#!cW=*hWGnZPMYfC9+$a5SAzU`MOk-&3l@!hl+ z%*zzR`m0({8OO%mimfU`KM<+y_2ZgdKc?cYKa?UJ2DU8~4`@;!MWwqe&coGx~hh z@UGFqR(52RWzbq56wA94*Lmx>`u9$Jw2ZP4KM>CkSyB^_EHRo)N^nW)_zI*FyPss* zN&(|n8c-kD*Z(Jw-MDt>Do?u%6MmSYCeZKG_c?iLk}eH`ID+zE)aHRTRGatJ{31(_~OxvvWYR*`^Of~ zSKGC0%`SgaCT=dzDE}Zvt>5Q+$zPq5ZP4}JXr{~fyRu^(NNRPZ9|P)B&n7Oyn@;C& R9cJ@J!mrSPqN*?O{{mNrQ#b$s literal 0 HcmV?d00001 diff --git a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx index 65a67524f5..bbb7fea96d 100644 --- a/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx +++ b/tgui/packages/tgui/interfaces/DropshipFlightControl.tsx @@ -23,6 +23,8 @@ interface DropshipNavigationProps extends NavigationProps { primary_lz?: string; automated_control: AutomatedControl; has_flyby_skill: 0 | 1; + + playing_launch_announcement_alarm: boolean; } const DropshipDoorControl = (_, context) => { @@ -42,7 +44,10 @@ const DropshipDoorControl = (_, context) => { + ); +}; + +const PlayLaunchAnnouncementAlarm = (_, context) => { + const { act } = useBackend(context); + return ( + + ); +}; + +const LaunchAnnouncementAlarm = (_, context) => { + const { data, act } = useBackend(context); + const [siteselection, setSiteSelection] = useSharedState( + context, + 'target_site', + undefined + ); + return ( +
+ ) : ( + + ) + } + /> + ); +}; + const RenderScreen = (props, context) => { const { data } = useBackend(context); return ( @@ -292,6 +344,7 @@ const RenderScreen = (props, context) => { )} {data.door_status.length > 0 && } + {} ); }; From ef6587e938058c360d4a685015a4f0ba3aa5473a Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Tue, 21 Nov 2023 11:13:50 +0000 Subject: [PATCH 17/65] Automatic changelog for PR #4858 [ci skip] --- html/changelogs/AutoChangeLog-pr-4858.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4858.yml diff --git a/html/changelogs/AutoChangeLog-pr-4858.yml b/html/changelogs/AutoChangeLog-pr-4858.yml new file mode 100644 index 0000000000..22a86b1c3f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4858.yml @@ -0,0 +1,4 @@ +author: "hislittlecuzingames" +delete-after: True +changes: + - rscadd: "Launch Announcement Alarm for dropships to notify ground forces of departure." \ No newline at end of file From c0caa87164bbd53c00837259656380b5f48ca231 Mon Sep 17 00:00:00 2001 From: morrowwolf Date: Tue, 21 Nov 2023 15:59:04 -0500 Subject: [PATCH 18/65] Mess tech scaling (#4983) # About the pull request This PR adds scaling to allow for an extra mess tech slot once there are 70 marines playing. This is a paid code request from a player. # Explain why it's good for the game Mess tech can be a lonely job and it can spice things up to have a partner in the culinary arts. # Testing Photographs and Procedure I spawned in as a mess tech. I then created 50 marines and checked if I could spawn in as a mess tech. As expected the answer was no. I then creates 20 more marines and checked if I could spawn in as a mess tech and could. # Changelog :cl: Morrow add: Mess tech positions now scale from 1 to 2 after 70 marines are in the game /:cl: --------- Co-authored-by: BeagleGaming1 <56142455+BeagleGaming1@users.noreply.github.com> --- .../jobs/job/civilians/other/mess_seargent.dm | 20 ++++++++++++++++++- code/game/jobs/slot_scaling.dm | 3 +++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/code/game/jobs/job/civilians/other/mess_seargent.dm b/code/game/jobs/job/civilians/other/mess_seargent.dm index 97578eb115..fb4f5ee14d 100644 --- a/code/game/jobs/job/civilians/other/mess_seargent.dm +++ b/code/game/jobs/job/civilians/other/mess_seargent.dm @@ -1,13 +1,31 @@ /datum/job/civilian/chef title = JOB_MESS_SERGEANT - total_positions = 1 + total_positions = 2 spawn_positions = 1 + allow_additional = TRUE + scaled = TRUE selection_class = "job_ot" flags_startup_parameters = ROLE_ADD_TO_DEFAULT supervisors = "the auxiliary support officer" gear_preset = /datum/equipment_preset/uscm_ship/chef entry_message_body = "Your job is to service the marines with excellent food, drinks and entertaining the shipside crew when needed. You have a lot of freedom and it is up to you, to decide what to do with it. Good luck!" +/datum/job/civilian/chef/set_spawn_positions(count) + spawn_positions = mess_sergeant_slot_formula(count) + +/datum/job/civilian/chef/get_total_positions(latejoin = FALSE) + var/positions = spawn_positions + if(latejoin) + positions = mess_sergeant_slot_formula(get_total_marines()) + if(positions <= total_positions_so_far) + positions = total_positions_so_far + else + total_positions_so_far = positions + else + total_positions_so_far = positions + + return positions + /obj/effect/landmark/start/chef name = JOB_MESS_SERGEANT icon_state = "chef_spawn" diff --git a/code/game/jobs/slot_scaling.dm b/code/game/jobs/slot_scaling.dm index 7230f57eb7..2d444d06e5 100644 --- a/code/game/jobs/slot_scaling.dm +++ b/code/game/jobs/slot_scaling.dm @@ -50,3 +50,6 @@ /proc/working_joe_slot_formula(playercount) return job_slot_formula(playercount,30,1,3,6) + +/proc/mess_sergeant_slot_formula(playercount) + return job_slot_formula(playercount, 70, 1, 1, 2) From eb6da90c5812469eb7dcdd76fc5f8f9050aed8b8 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Tue, 21 Nov 2023 21:15:01 +0000 Subject: [PATCH 19/65] Automatic changelog for PR #4983 [ci skip] --- html/changelogs/AutoChangeLog-pr-4983.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4983.yml diff --git a/html/changelogs/AutoChangeLog-pr-4983.yml b/html/changelogs/AutoChangeLog-pr-4983.yml new file mode 100644 index 0000000000..72dfdd9d84 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4983.yml @@ -0,0 +1,4 @@ +author: "Morrow" +delete-after: True +changes: + - rscadd: "Mess tech positions now scale from 1 to 2 after 70 marines are in the game" \ No newline at end of file From 5ba86a038f8988c3446ea05b06af3358924d7679 Mon Sep 17 00:00:00 2001 From: harryob Date: Tue, 21 Nov 2023 21:31:39 +0000 Subject: [PATCH 20/65] ports the tg profiler subsystem (#4793) i neeeeed more statistics yummy. added by anturk in https://github.com/tgstation/tgstation/pull/48672 :cl: AnturK server: the server now supports auto-profiling /:cl: --- code/__DEFINES/subsystems.dm | 1 + .../configuration/entries/general.dm | 2 + code/controllers/subsystem/profiler.dm | 74 +++++++++++++++++++ colonialmarines.dme | 1 + 4 files changed, 78 insertions(+) create mode 100644 code/controllers/subsystem/profiler.dm diff --git a/code/__DEFINES/subsystems.dm b/code/__DEFINES/subsystems.dm index 301ca04096..6af4a3585e 100644 --- a/code/__DEFINES/subsystems.dm +++ b/code/__DEFINES/subsystems.dm @@ -109,6 +109,7 @@ // Subsystems shutdown in the reverse of the order they initialize in // The numbers just define the ordering, they are meaningless otherwise. +#define SS_INIT_PROFILER 86 #define SS_INIT_INPUT 85 #define SS_INIT_TOPIC 83 #define SS_INIT_LOBBYART 82 diff --git a/code/controllers/configuration/entries/general.dm b/code/controllers/configuration/entries/general.dm index cc3d00fd95..385cbcb8d4 100644 --- a/code/controllers/configuration/entries/general.dm +++ b/code/controllers/configuration/entries/general.dm @@ -627,3 +627,5 @@ This maintains a list of ip addresses that are able to bypass topic filtering. protection = CONFIG_ENTRY_HIDDEN|CONFIG_ENTRY_LOCKED /datum/config_entry/flag/guest_ban + +/datum/config_entry/flag/auto_profile diff --git a/code/controllers/subsystem/profiler.dm b/code/controllers/subsystem/profiler.dm new file mode 100644 index 0000000000..f9ba79046c --- /dev/null +++ b/code/controllers/subsystem/profiler.dm @@ -0,0 +1,74 @@ +#define PROFILER_FILENAME "profiler.json" +#define SENDMAPS_FILENAME "sendmaps.json" + +SUBSYSTEM_DEF(profiler) + name = "Profiler" + init_order = SS_INIT_PROFILER + runlevels = RUNLEVELS_DEFAULT | RUNLEVEL_LOBBY + wait = 300 SECONDS + var/fetch_cost = 0 + var/write_cost = 0 + +/datum/controller/subsystem/profiler/stat_entry(msg) + msg += "F:[round(fetch_cost,1)]ms" + msg += "|W:[round(write_cost,1)]ms" + return msg + +/datum/controller/subsystem/profiler/Initialize() + if(CONFIG_GET(flag/auto_profile)) + StartProfiling() + else + StopProfiling() //Stop the early start profiler + return SS_INIT_SUCCESS + +/datum/controller/subsystem/profiler/OnConfigLoad() + if(CONFIG_GET(flag/auto_profile)) + StartProfiling() + can_fire = TRUE + else + StopProfiling() + can_fire = FALSE + +/datum/controller/subsystem/profiler/fire() + DumpFile() + +/datum/controller/subsystem/profiler/Shutdown() + if(CONFIG_GET(flag/auto_profile)) + DumpFile(allow_yield = FALSE) + world.Profile(PROFILE_CLEAR, type = "sendmaps") + return ..() + +/datum/controller/subsystem/profiler/proc/StartProfiling() + world.Profile(PROFILE_START) + world.Profile(PROFILE_START, type = "sendmaps") + +/datum/controller/subsystem/profiler/proc/StopProfiling() + world.Profile(PROFILE_STOP) + world.Profile(PROFILE_STOP, type = "sendmaps") + +/datum/controller/subsystem/profiler/proc/DumpFile(allow_yield = TRUE) + var/timer = TICK_USAGE_REAL + var/current_profile_data = world.Profile(PROFILE_REFRESH, format = "json") + var/current_sendmaps_data = world.Profile(PROFILE_REFRESH, type = "sendmaps", format="json") + fetch_cost = MC_AVERAGE(fetch_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + if(allow_yield) + CHECK_TICK + + if(!length(current_profile_data)) //Would be nice to have explicit proc to check this + stack_trace("Warning, profiling stopped manually before dump.") + var/prof_file = file("[GLOB.log_directory]/[PROFILER_FILENAME]") + if(fexists(prof_file)) + fdel(prof_file) + if(!length(current_sendmaps_data)) //Would be nice to have explicit proc to check this + stack_trace("Warning, sendmaps profiling stopped manually before dump.") + var/sendmaps_file = file("[GLOB.log_directory]/[SENDMAPS_FILENAME]") + if(fexists(sendmaps_file)) + fdel(sendmaps_file) + + timer = TICK_USAGE_REAL + WRITE_FILE(prof_file, current_profile_data) + WRITE_FILE(sendmaps_file, current_sendmaps_data) + write_cost = MC_AVERAGE(write_cost, TICK_DELTA_TO_MS(TICK_USAGE_REAL - timer)) + +#undef PROFILER_FILENAME +#undef SENDMAPS_FILENAME diff --git a/colonialmarines.dme b/colonialmarines.dme index a4ff7cf7c9..101a80f0e2 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -268,6 +268,7 @@ #include "code\controllers\subsystem\police_clues.dm" #include "code\controllers\subsystem\power.dm" #include "code\controllers\subsystem\predships.dm" +#include "code\controllers\subsystem\profiler.dm" #include "code\controllers\subsystem\projectiles.dm" #include "code\controllers\subsystem\quadtrees.dm" #include "code\controllers\subsystem\reagents.dm" From 75f1901ad273cd4db954b319a213c2db882032b0 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Tue, 21 Nov 2023 21:39:58 +0000 Subject: [PATCH 21/65] Automatic changelog for PR #4793 [ci skip] --- html/changelogs/AutoChangeLog-pr-4793.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4793.yml diff --git a/html/changelogs/AutoChangeLog-pr-4793.yml b/html/changelogs/AutoChangeLog-pr-4793.yml new file mode 100644 index 0000000000..67830aa5fc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4793.yml @@ -0,0 +1,4 @@ +author: "AnturK" +delete-after: True +changes: + - server: "the server now supports auto-profiling" \ No newline at end of file From d6b0de8fcf074d6e137cbeb538e2f7918951a8ed Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:46:46 -0800 Subject: [PATCH 22/65] Nullchecks client in tooltips (#4969) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/195d2500-7a60-4214-9719-35091874cb48) --- code/modules/tooltip/tooltip.dm | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/tooltip/tooltip.dm b/code/modules/tooltip/tooltip.dm index b3dc005c08..e668196d38 100644 --- a/code/modules/tooltip/tooltip.dm +++ b/code/modules/tooltip/tooltip.dm @@ -98,10 +98,12 @@ Notes: last_target = null /datum/tooltip/proc/do_hide() - winshow(owner, control, FALSE) + if(owner) + winshow(owner, control, FALSE) /datum/tooltip/Destroy(force, ...) last_target = null + owner = null return ..() //Open a tooltip for user, at a location based on params From 5aadceee8e1e03b23befec0e495083297f01f010 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:46:52 -0800 Subject: [PATCH 23/65] Fix crate unpacking runtime (#4968) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/d78d9b1e-718b-470b-af35-557784c4a143) --- code/game/objects/structures/crates_lockers/largecrate.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 2f2877ba75..f1b58e6f65 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -28,9 +28,8 @@ material_sheet = new parts_type(current_turf, 2) // Move the objects back to the turf, above the crate material - for(var/atom/movable/moving_atom in contents) - var/atom/movable/current_atom = contents[1] - current_atom.forceMove(current_turf) + for(var/atom/movable/moving_atom as anything in contents) + moving_atom.forceMove(current_turf) deconstruct(TRUE) From ba6cb19301f741d7e212a5cfcb69d574eb56669a Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:46:58 -0800 Subject: [PATCH 24/65] Fix handswap runtime (#4967) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/7d39f774-5eaa-4a09-a90f-9cbfb0190050) --- code/_onclick/other_mobs.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/other_mobs.dm b/code/_onclick/other_mobs.dm index 9c9784286d..0bfa0a7592 100644 --- a/code/_onclick/other_mobs.dm +++ b/code/_onclick/other_mobs.dm @@ -13,7 +13,7 @@ var/obj/structure/S = A S.do_climb(src, mods) return TRUE - else if(!(isitem(A) && get_dist(src, A) <= 1) && client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_SWAP_HANDS) + else if(!(isitem(A) && get_dist(src, A) <= 1) && (client && (client.prefs.toggle_prefs & TOGGLE_MIDDLE_MOUSE_SWAP_HANDS))) swap_hand() return TRUE From 3eb97862995bc96f423a7731455c955baedaaeff Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 13:47:26 -0800 Subject: [PATCH 25/65] Fix stack split & flamer fire runtime (#4965) than or equal to 1 # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/5ecfe1d7-cc9d-4363-853a-e5dcc9147708) ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/5efdc0ed-15d9-4b0a-8d8b-d6614d77b211) --- code/game/objects/items/stacks/stack.dm | 2 ++ code/modules/projectiles/guns/flamer/flamer.dm | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 3912e2d641..82e091be90 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -313,6 +313,8 @@ Also change the icon to reflect the amount of sheets, if possible.*/ if(mods["alt"]) if(!CAN_PICKUP(user, src)) return + if(amount <= 1) + return var/desired = tgui_input_number(user, "How much would you like to split off from this stack?", "How much?", 1, amount-1, 1) if(!desired) return diff --git a/code/modules/projectiles/guns/flamer/flamer.dm b/code/modules/projectiles/guns/flamer/flamer.dm index 44fe816c0e..0089df506d 100644 --- a/code/modules/projectiles/guns/flamer/flamer.dm +++ b/code/modules/projectiles/guns/flamer/flamer.dm @@ -461,7 +461,8 @@ GLOBAL_LIST_EMPTY(flamer_particles) tied_reagent = new R.type() // Can't get deleted this way tied_reagent.make_alike(R) - tied_reagents = obj_reagents + if(obj_reagents) + tied_reagents = obj_reagents target_clicked = target From b49be8b6d0266fd0c1cc7df81dfc6fb6f1d137b0 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:21:40 -0800 Subject: [PATCH 26/65] Fix plushie/fountain pen/family photo pickup runtime (#4970) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/12e1f453-b26c-4c7e-aaed-cd5079a0ce4b) I'm not 100% on why this happens. My best guess is it's the usual "clients don't follow the rules" stuff that lets them attempt to take the plushie out of their satchel before they're fully spawned in and started. --- code/game/objects/items/props/helmetgarb.dm | 2 +- code/game/objects/items/tools/misc_tools.dm | 2 +- code/game/objects/items/toys/toys.dm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/props/helmetgarb.dm b/code/game/objects/items/props/helmetgarb.dm index b20c567150..35558bf019 100644 --- a/code/game/objects/items/props/helmetgarb.dm +++ b/code/game/objects/items/props/helmetgarb.dm @@ -529,7 +529,7 @@ /obj/item/prop/helmetgarb/family_photo/pickup(mob/user, silent) . = ..() if(!owner) - RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner), override = TRUE) ///Sets the owner of the family photo to the human it spawns with, needs var/source for signals diff --git a/code/game/objects/items/tools/misc_tools.dm b/code/game/objects/items/tools/misc_tools.dm index 0b4a7cc987..f70f934970 100644 --- a/code/game/objects/items/tools/misc_tools.dm +++ b/code/game/objects/items/tools/misc_tools.dm @@ -289,7 +289,7 @@ /obj/item/tool/pen/fountain/pickup(mob/user, silent) . = ..() if(!owner_name) - RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner)) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(set_owner), override = TRUE) ///Sets the owner of the pen to who it spawns with, requires var/source for signals /obj/item/tool/pen/fountain/proc/set_owner(datum/source) diff --git a/code/game/objects/items/toys/toys.dm b/code/game/objects/items/toys/toys.dm index 851f203c52..88946f5fa4 100644 --- a/code/game/objects/items/toys/toys.dm +++ b/code/game/objects/items/toys/toys.dm @@ -591,7 +591,7 @@ /obj/item/toy/plush/random_plushie/pickup(mob/user, silent) . = ..() - RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie)) + RegisterSignal(user, COMSIG_POST_SPAWN_UPDATE, PROC_REF(create_plushie), override = TRUE) ///The randomizer picking and spawning a plushie on either the ground or in the humans backpack. Needs var/source due to signals /obj/item/toy/plush/random_plushie/proc/create_plushie(datum/source) From d644b6fd7ddbe244b6e45d0ce476c467f94e6f43 Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 14:22:06 -0800 Subject: [PATCH 27/65] Greps for missing arg in to_chat & fixes several cases (#4971) # About the pull request Greps for this issue ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/853f9c80-95bf-45a4-a155-5f4a1bbac893) --- .../objects/items/reagent_containers/food/fortunecookie.dm | 4 ++-- code/game/objects/structures/props.dm | 4 ++-- code/modules/clothing/under/marine_uniform.dm | 2 +- code/modules/droppod/droppod_ui.dm | 6 ++++-- tools/ci/check_grep.sh | 7 +++++++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/reagent_containers/food/fortunecookie.dm b/code/game/objects/items/reagent_containers/food/fortunecookie.dm index a878ff589d..270bd4d7c4 100644 --- a/code/game/objects/items/reagent_containers/food/fortunecookie.dm +++ b/code/game/objects/items/reagent_containers/food/fortunecookie.dm @@ -93,7 +93,7 @@ user.put_in_hands(cookiefortune) cookiefortune = null else - to_chat(SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) + to_chat(user, SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) else . = ..() @@ -109,7 +109,7 @@ user.put_in_hands(cookiefortune) cookiefortune = null else - to_chat(SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) + to_chat(user, SPAN_WARNING("You break open the fortune cookie, but there's no fortune inside! Oh no!")) else . = ..() diff --git a/code/game/objects/structures/props.dm b/code/game/objects/structures/props.dm index bd5610487e..f465e1535d 100644 --- a/code/game/objects/structures/props.dm +++ b/code/game/objects/structures/props.dm @@ -805,14 +805,14 @@ /obj/structure/prop/brazier/campfire/attackby(obj/item/attacking_item, mob/user) if(!istype(attacking_item, /obj/item/stack/sheet/wood)) - to_chat(SPAN_NOTICE("You cannot fuel [src] with [attacking_item].")) + to_chat(user, SPAN_NOTICE("You cannot fuel [src] with [attacking_item].")) return var/obj/item/stack/sheet/wood/fuel = attacking_item if(remaining_fuel >= initial(remaining_fuel)) to_chat(user, SPAN_NOTICE("You cannot fuel [src] further.")) return if(!fuel.use(1)) - to_chat(SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) + to_chat(user, SPAN_NOTICE("You do not have enough [attacking_item] to fuel [src].")) return visible_message(SPAN_NOTICE("[user] fuels [src] with [fuel].")) remaining_fuel++ diff --git a/code/modules/clothing/under/marine_uniform.dm b/code/modules/clothing/under/marine_uniform.dm index dbbfdb059f..a950b4de3d 100644 --- a/code/modules/clothing/under/marine_uniform.dm +++ b/code/modules/clothing/under/marine_uniform.dm @@ -1004,7 +1004,7 @@ return if(!linked_hood) - to_chat(SPAN_BOLDWARNING("You are missing a linked_hood! This should not be possible.")) + to_chat(user, SPAN_BOLDWARNING("You are missing a linked_hood! This should not be possible.")) CRASH("[user] attempted to toggle hood on [src] that was missing a linked_hood.") playsound(user.loc, "armorequip", 25, 1) diff --git a/code/modules/droppod/droppod_ui.dm b/code/modules/droppod/droppod_ui.dm index 33202e38a0..b0c6683a4f 100644 --- a/code/modules/droppod/droppod_ui.dm +++ b/code/modules/droppod/droppod_ui.dm @@ -76,7 +76,8 @@ GLOBAL_LIST_INIT(droppod_target_mode, list( /datum/admin_podlauncher/proc/refresh_bay() bay = locate(/area/admin/droppod/loading) in GLOB.sorted_areas if(!bay) - to_chat(SPAN_WARNING("There's no /area/admin/droppod/loading. You can make one yourself, but yell at the mappers to fix this.")) + if(holder) + to_chat(holder, SPAN_WARNING("There's no /area/admin/droppod/loading. You can make one yourself, but yell at the mappers to fix this.")) CRASH("No /area/admin/droppod/loading has been mapped into the admin z-level!") ordered_area = list() for(var/turf/T in bay) @@ -221,7 +222,8 @@ GLOBAL_LIST_INIT(droppod_target_mode, list( custom_dropoff = TRUE temp_pod.dropoff_point = get_turf(target) - to_chat(SPAN_NOTICE("You have selected [temp_pod.dropoff_point] as your dropoff location.")) + if(holder) + to_chat(holder, SPAN_NOTICE("You have selected [temp_pod.dropoff_point] as your dropoff location.")) SStgui.update_uis(src) return COMPONENT_INTERRUPT_CLICK diff --git a/tools/ci/check_grep.sh b/tools/ci/check_grep.sh index 4a223fe3d3..796e50e2d9 100644 --- a/tools/ci/check_grep.sh +++ b/tools/ci/check_grep.sh @@ -198,6 +198,13 @@ if $grep 'balloon_alert\(.*?, ?"[A-Z]' $code_files; then st=1 fi; +part "to_chat without user" +if $grep 'to_chat\(("|SPAN)' $code_files; then + echo + echo -e "${RED}ERROR: to_chat() requires a target as its first argument.${NC}" + st=1 +fi; + section "515 Proc Syntax" part "proc ref syntax" if $grep '\.proc/' $code_x_515 ; then From b3d63e063664cf03f28a1022b1bf66e9b0c7f07c Mon Sep 17 00:00:00 2001 From: Zonespace <41448081+Zonespace27@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:52:40 -0800 Subject: [PATCH 28/65] Fix macro_set index out of range bug (#4972) # About the pull request ![image](https://github.com/cmss13-devs/cmss13/assets/41448081/6ddb3b06-8e72-4b23-8b2a-14ea8a2315a1) --- code/modules/keybindings/setup.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/keybindings/setup.dm b/code/modules/keybindings/setup.dm index 703649808f..9ba1b783a1 100644 --- a/code/modules/keybindings/setup.dm +++ b/code/modules/keybindings/setup.dm @@ -15,7 +15,7 @@ for(var/k in 1 to length(macro_set)) var/list/split_name = splittext(macro_set[k], ".") - if(findtext(split_name[2], "srvkeybinds-") == 1) + if((length(split_name) >= 2) && (findtext(split_name[2], "srvkeybinds-") == 1)) var/macro_name = "[split_name[1]].[split_name[2]]" // [3] is "command" erase_output = "[erase_output];[macro_name].parent=null" winset(src, null, erase_output) From e7d3ce04f103872f3633438fd88c3e3843414399 Mon Sep 17 00:00:00 2001 From: Birdtalon Date: Wed, 22 Nov 2023 00:53:30 +0000 Subject: [PATCH 29/65] Removes a couple of istype(src) & unused proc (#4955) # About the pull request Removes a couple if istype(src) I noticed. - GetJobRealName() removed this is never called - GetJobName() moved into the scope of `/obj/item/card/id` instead of `/obj` This is only ever called in that object. - Moves `make_dizzy()` processing into `/mob/living/carbon/human` and removes istype(src) on `/mob` # Explain why it's good for the game # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: code: Removes some istype(src) /:cl: --- code/__HELPERS/job.dm | 22 ------------------- code/game/objects/items/cards_ids.dm | 15 +++++++++++++ code/modules/mob/living/carbon/human/human.dm | 6 +++++ code/modules/mob/mob.dm | 11 ++-------- 4 files changed, 23 insertions(+), 31 deletions(-) diff --git a/code/__HELPERS/job.dm b/code/__HELPERS/job.dm index 89fe687764..220236c6f7 100644 --- a/code/__HELPERS/job.dm +++ b/code/__HELPERS/job.dm @@ -14,32 +14,10 @@ all_jobs += new jobtype return all_jobs - /proc/get_all_centcom_jobs() return list() -//gets the actual job rank (ignoring alt titles) -//this is used solely for sechuds -/obj/proc/GetJobRealName() - if (!istype(src,/obj/item/card/id)) return - var/obj/item/card/id/I = src - if(I.rank in GLOB.joblist) return I.rank - if(I.assignment in GLOB.joblist) return I.assignment - return "Unknown" - /proc/get_all_job_icons() return GLOB.joblist + list("Prisoner")//For all existing HUD icons -/obj/proc/GetJobName() //Used in secHUD icon generation - var/obj/item/card/id/I = src - if(istype(I)) - var/job_icons = get_all_job_icons() - var/centcom = get_all_centcom_jobs() - - if(I.assignment in job_icons) return I.assignment//Check if the job has a hud icon - if(I.rank in job_icons) return I.rank - if(I.assignment in centcom) return "Centcom"//Return with the NT logo if it is a Centcom job - if(I.rank in centcom) return "Centcom" - return "Unknown" //Return unknown if none of the above apply - /proc/get_actual_job_name(mob/M) if(!M) return null diff --git a/code/game/objects/items/cards_ids.dm b/code/game/objects/items/cards_ids.dm index a5e0eafe2f..f6af3c0ca2 100644 --- a/code/game/objects/items/cards_ids.dm +++ b/code/game/objects/items/cards_ids.dm @@ -97,6 +97,21 @@ . = ..() screen_loc = null +/obj/item/card/id/proc/GetJobName() //Used in secHUD icon generation + + var/job_icons = get_all_job_icons() + var/centcom = get_all_centcom_jobs() + + if(assignment in job_icons) + return assignment//Check if the job has a hud icon + if(rank in job_icons) + return rank + if(assignment in centcom) + return "Centcom"//Return with the NT logo if it is a Centcom job + if(rank in centcom) + return "Centcom" + return "Unknown" //Return unknown if none of the above apply + /obj/item/card/id/attack_self(mob/user as mob) ..() user.visible_message("[user] shows you: [icon2html(src, viewers(user))] [name]: assignment: [assignment]") diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 3bc8e97623..95fd393d12 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1741,3 +1741,9 @@ return FALSE . = ..() + +/mob/living/carbon/human/make_dizzy(amount) + dizziness = min(500, dizziness + amount) // store what will be new value + // clamped to max 500 + if(dizziness > 100 && !is_dizzy) + INVOKE_ASYNC(src, PROC_REF(dizzy_process)) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c28de81ecf..26139af07e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -593,20 +593,13 @@ adds a dizziness amount to a mob use this rather than directly changing var/dizziness since this ensures that the dizzy_process proc is started -currently only humans get dizzy +currently only mob/living/carbon/human get dizzy value of dizziness ranges from 0 to 1000 below 100 is not dizzy */ /mob/proc/make_dizzy(amount) - if(!istype(src, /mob/living/carbon/human)) // for the moment, only humans get dizzy - return - - dizziness = min(500, dizziness + amount) // store what will be new value - // clamped to max 500 - if(dizziness > 100 && !is_dizzy) - INVOKE_ASYNC(src, PROC_REF(dizzy_process)) - + return /* dizzy process - wiggles the client's pixel offset over time From d7e054057ad6674c6ea3a61ae10d1764a3237424 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 01:10:09 +0000 Subject: [PATCH 30/65] Automatic changelog for PR #4955 [ci skip] --- html/changelogs/AutoChangeLog-pr-4955.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4955.yml diff --git a/html/changelogs/AutoChangeLog-pr-4955.yml b/html/changelogs/AutoChangeLog-pr-4955.yml new file mode 100644 index 0000000000..e5c9d19ebd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4955.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - code_imp: "Removes some istype(src)" \ No newline at end of file From 8f4d9bac2ed0ca167c73159e0bfafae80eff3958 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Wed, 22 Nov 2023 01:14:36 +0000 Subject: [PATCH 31/65] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-4793.yml | 4 ---- html/changelogs/AutoChangeLog-pr-4858.yml | 4 ---- html/changelogs/AutoChangeLog-pr-4955.yml | 4 ---- html/changelogs/AutoChangeLog-pr-4983.yml | 4 ---- html/changelogs/archive/2023-11.yml | 10 ++++++++++ 5 files changed, 10 insertions(+), 16 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4793.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4858.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4955.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4983.yml diff --git a/html/changelogs/AutoChangeLog-pr-4793.yml b/html/changelogs/AutoChangeLog-pr-4793.yml deleted file mode 100644 index 67830aa5fc..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4793.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "AnturK" -delete-after: True -changes: - - server: "the server now supports auto-profiling" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4858.yml b/html/changelogs/AutoChangeLog-pr-4858.yml deleted file mode 100644 index 22a86b1c3f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4858.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "hislittlecuzingames" -delete-after: True -changes: - - rscadd: "Launch Announcement Alarm for dropships to notify ground forces of departure." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4955.yml b/html/changelogs/AutoChangeLog-pr-4955.yml deleted file mode 100644 index e5c9d19ebd..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4955.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - code_imp: "Removes some istype(src)" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4983.yml b/html/changelogs/AutoChangeLog-pr-4983.yml deleted file mode 100644 index 72dfdd9d84..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4983.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Morrow" -delete-after: True -changes: - - rscadd: "Mess tech positions now scale from 1 to 2 after 70 marines are in the game" \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index d7d533486f..66eaccb86d 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -269,3 +269,13 @@ 2023-11-21: hislittlecuzingames: - code_imp: Added ability to have looping sounds from further away +2023-11-22: + AnturK: + - server: the server now supports auto-profiling + Birdtalon: + - code_imp: Removes some istype(src) + Morrow: + - rscadd: Mess tech positions now scale from 1 to 2 after 70 marines are in the + game + hislittlecuzingames: + - rscadd: Launch Announcement Alarm for dropships to notify ground forces of departure. From eeee374151d015d20fa94e9755d878664e76ed75 Mon Sep 17 00:00:00 2001 From: Drathek <76988376+Drulikar@users.noreply.github.com> Date: Tue, 21 Nov 2023 16:54:17 -0800 Subject: [PATCH 32/65] Hivecores perform multiple spawns at once (#4953) # About the pull request This PR simply makes it so hive cores try to dequeue as many larva as they have stored_larva each larva spawn delay rather than a single larva. # Explain why it's good for the game Fixes #4945 # Testing Photographs and Procedure 1. Spawn as queen 2. Create core 3. Ensure hive has 2 stored_larva 4. Ghost (Have two admin clients at this point observing) 5. Ensure both clients have xeno preference set and then lose larva protections (assuming admin) 6. Both will spawn at once 7. Try again with 1 stored_larva 8. One will spawn and other has queue message updated # Changelog :cl: Drathek fix: Tweaked larva queue spawning: Now spawns as many larva as possible each cycle rather than one. /:cl: --- .../cm_aliens/structures/special/pylon_core.dm | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/code/modules/cm_aliens/structures/special/pylon_core.dm b/code/modules/cm_aliens/structures/special/pylon_core.dm index 62a7417c57..a7cb15a31c 100644 --- a/code/modules/cm_aliens/structures/special/pylon_core.dm +++ b/code/modules/cm_aliens/structures/special/pylon_core.dm @@ -272,12 +272,14 @@ if(spawning_larva || (last_larva_queue_time + spawn_cooldown * 4) < world.time) last_larva_queue_time = world.time var/list/players_with_xeno_pref = get_alien_candidates(linked_hive) - if(length(players_with_xeno_pref)) - if(spawning_larva && spawn_burrowed_larva(players_with_xeno_pref[1])) - // We were in spawning_larva mode and successfully spawned someone - count_spawned = 1 - // Update everyone's queue status - message_alien_candidates(players_with_xeno_pref, dequeued = count_spawned) + if(spawning_larva) + var/i = 0 + while(i < length(players_with_xeno_pref) && can_spawn_larva()) + if(spawn_burrowed_larva(players_with_xeno_pref[++i])) + // We were in spawning_larva mode and successfully spawned someone + count_spawned++ + // Update everyone's queue status + message_alien_candidates(players_with_xeno_pref, dequeued = count_spawned) if(linked_hive.hijack_burrowed_surge && (last_surge_time + surge_cooldown) < world.time) last_surge_time = world.time From de2a345d366b15ac6929528038b2ba9c01d01b29 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 01:29:08 +0000 Subject: [PATCH 33/65] Automatic changelog for PR #4953 [ci skip] --- html/changelogs/AutoChangeLog-pr-4953.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4953.yml diff --git a/html/changelogs/AutoChangeLog-pr-4953.yml b/html/changelogs/AutoChangeLog-pr-4953.yml new file mode 100644 index 0000000000..4dd8c48e82 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4953.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Tweaked larva queue spawning: Now spawns as many larva as possible each cycle rather than one." \ No newline at end of file From ed3628e7e52c93e76e0298e88e7bb2b78dab438c Mon Sep 17 00:00:00 2001 From: LC4492 <122557086+LC4492@users.noreply.github.com> Date: Wed, 22 Nov 2023 00:24:59 -0300 Subject: [PATCH 34/65] Bureau du commandant - CO office (#4827) # About the pull request An update to the CO office # Explain why it's good for the game If people like, its good, if people don't, it is not # Testing Photographs and Procedure ![image](https://github.com/cmss13-devs/cmss13/assets/122557086/f4ca9cc9-9719-44bb-aef7-fcf95da5f7f5)
# Changelog :cl: maptweak: Changes to the CO office: The bathroom now faces into the CO's bedroom, and not to his main office. Victory cabinet have been moved to the Officer's mess because of logical issues. Extra-detail to the office, including an exclusive stamp, table flags and others. The safe is now inside the CO's bedroom, and not in his office. The energy APC is now inside the CO's bedroom, and not in his office. Jones finally have a BED again, or something like that. Other minor changes to objects, such the addition of a cane, a box of glasses for serving guests, etc. /:cl: --- maps/map_files/USS_Almayer/USS_Almayer.dmm | 5921 ++++++++++---------- 1 file changed, 3110 insertions(+), 2811 deletions(-) diff --git a/maps/map_files/USS_Almayer/USS_Almayer.dmm b/maps/map_files/USS_Almayer/USS_Almayer.dmm index 528e0a02f7..f3074bd4d7 100644 --- a/maps/map_files/USS_Almayer/USS_Almayer.dmm +++ b/maps/map_files/USS_Almayer/USS_Almayer.dmm @@ -529,6 +529,17 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) +"abQ" = ( +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 + }, +/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "abR" = ( /obj/item/tank/phoron, /turf/open/floor/almayer{ @@ -787,12 +798,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_s) -"acE" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/lifeboat_pumps/north2) "acF" = ( /obj/structure/machinery/light{ dir = 1 @@ -915,12 +920,20 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"acT" = ( -/obj/structure/closet/firecloset, +"acS" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ + pixel_y = -29 + }, /turf/open/floor/almayer{ - icon_state = "cargo" + icon_state = "silver" }, -/area/almayer/lifeboat_pumps/north2) +/area/almayer/command/cichallway) "acU" = ( /obj/structure/closet/basketball, /turf/open/floor/almayer{ @@ -1088,12 +1101,6 @@ "adu" = ( /turf/open/floor/almayer, /area/almayer/shipboard/starboard_missiles) -"adv" = ( -/obj/structure/machinery/power/apc/almayer{ - dir = 8 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "ady" = ( /obj/effect/step_trigger/clone_cleaner, /obj/effect/decal/warning_stripes{ @@ -1176,15 +1183,6 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) -"adQ" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north2) "adR" = ( /obj/structure/machinery/door/airlock/almayer/generic{ access_modified = 1; @@ -1213,13 +1211,6 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"adZ" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/north2) "aea" = ( /obj/structure/machinery/light{ dir = 1 @@ -1321,16 +1312,6 @@ "aet" = ( /turf/closed/wall/almayer, /area/almayer/living/starboard_garden) -"aew" = ( -/obj/structure/machinery/firealarm{ - pixel_y = 28 - }, -/obj/structure/closet/secure_closet/bar{ - name = "Success Cabinet"; - req_access_txt = "1" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aex" = ( /obj/item/reagent_container/food/drinks/cans/beer{ pixel_x = 6; @@ -1579,17 +1560,6 @@ icon_state = "redfull" }, /area/almayer/shipboard/starboard_missiles) -"afc" = ( -/obj/structure/reagent_dispensers/water_cooler/stacks{ - density = 0; - pixel_y = 17 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_s) "afd" = ( /obj/structure/largecrate/random/barrel/white, /obj/structure/sign/safety/bulkhead_door{ @@ -2127,18 +2097,6 @@ icon_state = "plate" }, /area/almayer/living/cafeteria_officer) -"aha" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - access_modified = 1; - name = "\improper Commanding Officer's Quarters"; - req_access = null; - req_access_txt = "31" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/commandbunks) "ahb" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -2262,20 +2220,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"ahv" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"ahw" = ( -/obj/structure/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "ahx" = ( /obj/structure/window/framed/almayer/hull, /turf/open/floor/plating, @@ -2383,43 +2327,6 @@ icon_state = "bluecorner" }, /area/almayer/living/offices/flight) -"ahY" = ( -/obj/structure/machinery/light, -/obj/structure/surface/table/woodentable/fancy, -/obj/item/clothing/shoes/laceup{ - desc = "The height of fashion, and they're pre-polished! The name 'Bob' is written on the inside."; - pixel_y = -5 - }, -/obj/effect/landmark/map_item, -/obj/item/device/flashlight/lamp/green, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"ahZ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper_bin/uscm, -/obj/item/tool/pen, -/obj/structure/machinery/door_control{ - id = "ARES StairsLock"; - name = "ARES Exterior Lockdown Override"; - pixel_x = 8; - pixel_y = -24; - req_one_access_txt = "90;91;92" - }, -/obj/structure/machinery/door_control{ - id = "ARES Emergency"; - name = "ARES Emergency Lockdown Override"; - pixel_y = -24; - req_one_access_txt = "91;92" - }, -/obj/structure/machinery/door_control{ - id = "Brig Lockdown Shutters"; - name = "Brig Lockdown Override"; - pixel_x = -8; - pixel_y = -24; - req_access_txt = "1;3" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aia" = ( /turf/open/floor/almayer{ dir = 8; @@ -2631,14 +2538,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"aiF" = ( -/obj/structure/disposalpipe/segment, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"aiG" = ( -/obj/structure/filingcabinet, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "aiH" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -2660,6 +2559,14 @@ icon_state = "red" }, /area/almayer/living/starboard_garden) +"aiQ" = ( +/obj/structure/machinery/faxmachine, +/obj/structure/surface/table/almayer, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "aiR" = ( /obj/structure/stairs{ dir = 8; @@ -2708,7 +2615,13 @@ }, /area/almayer/hull/upper_hull/u_f_s) "aiW" = ( -/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 1 + }, /turf/open/floor/carpet, /area/almayer/living/commandbunks) "aiX" = ( @@ -2754,6 +2667,12 @@ "ajl" = ( /turf/closed/wall/almayer/white, /area/almayer/medical/upper_medical) +"ajm" = ( +/obj/structure/closet/secure_closet/securecom, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "ajp" = ( /obj/structure/surface/table/almayer, /obj/structure/dropship_equipment/fuel/cooling_system{ @@ -3054,71 +2973,14 @@ icon_state = "redcorner" }, /area/almayer/shipboard/weapon_room) -"akk" = ( -/obj/structure/machinery/door/window/westright{ - dir = 4 - }, -/obj/structure/machinery/shower{ - dir = 4 - }, -/obj/structure/window/reinforced, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/commandbunks) -"akl" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/commandbunks) -"akm" = ( -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, -/obj/structure/machinery/door/firedoor/border_only/almayer, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/commandbunks) -"akn" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/structure/pipes/standard/manifold/hidden/supply{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "ako" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"akp" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"akr" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 1 }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"aks" = ( -/obj/structure/surface/table/almayer, -/obj/item/clipboard, -/obj/item/device/binoculars, -/turf/open/floor/wood/ship, +/turf/open/floor/carpet, /area/almayer/living/commandbunks) "akt" = ( /obj/structure/cable/heavyduty{ @@ -3347,28 +3209,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/starboard_garden) -"alb" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/commandbunks) -"alc" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 28 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/commandbunks) "ald" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -3407,15 +3247,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"alj" = ( -/obj/structure/surface/table/almayer, -/obj/item/paper, -/obj/item/device/whistle, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -17 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alk" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 4; @@ -3433,13 +3264,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) -"alo" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_18" - }, -/obj/structure/machinery/light, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alp" = ( /turf/open/floor/almayer{ dir = 9; @@ -3460,12 +3284,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"alu" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/megaphone, -/obj/item/device/radio, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "alw" = ( /obj/structure/machinery/door/airlock/almayer/generic{ dir = 2; @@ -3698,6 +3516,15 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) +"amE" = ( +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/structure/surface/rack, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "amF" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -3920,6 +3747,47 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) +"anp" = ( +/obj/structure/sign/safety/hazard{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) +"anq" = ( +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = 28 + }, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/structure/surface/rack, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/clothing/suit/storage/marine/light/vest, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) +"anr" = ( +/obj/structure/sign/safety/intercom{ + pixel_x = 8; + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "ans" = ( /turf/open/floor/almayer{ dir = 8; @@ -4240,15 +4108,6 @@ icon_state = "bluecorner" }, /area/almayer/hallways/aft_hallway) -"aox" = ( -/obj/structure/machinery/cm_vending/sorted/medical/wall_med{ - pixel_y = 25 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "silver" - }, -/area/almayer/command/cichallway) "aoy" = ( /obj/structure/sign/safety/fire_haz{ pixel_x = 8; @@ -4489,10 +4348,6 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) -"aoZ" = ( -/obj/structure/sign/prop1, -/turf/closed/wall/almayer/reinforced, -/area/almayer/living/commandbunks) "apa" = ( /obj/structure/surface/rack, /obj/item/tool/screwdriver, @@ -5555,6 +5410,16 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) +"asu" = ( +/obj/structure/sign/safety/hazard{ + pixel_x = 32; + pixel_y = -8 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "asv" = ( /obj/effect/decal/cleanable/blood/oil, /obj/structure/machinery/light{ @@ -5972,6 +5837,12 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) +"atx" = ( +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "aty" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/almayer{ @@ -6147,14 +6018,6 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) -"atY" = ( -/obj/structure/closet/emcloset, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/lifeboat) "atZ" = ( /obj/structure/machinery/door_control{ id = "OTStore"; @@ -7476,6 +7339,16 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering) +"axR" = ( +/obj/structure/machinery/shower, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/machinery/door/window/tinted{ + dir = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/engineering/upper_engineering/port) "axV" = ( /obj/structure/machinery/telecomms/server/presets/command, /turf/open/floor/almayer{ @@ -7922,6 +7795,33 @@ icon_state = "bluecorner" }, /area/almayer/living/offices/flight) +"azm" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/paper_bin/uscm{ + pixel_y = 7; + pixel_x = -17 + }, +/obj/item/tool/pen/clicky{ + pixel_x = -13; + pixel_y = -1 + }, +/obj/item/tool/pen/clicky{ + pixel_y = 5; + pixel_x = -13 + }, +/obj/structure/machinery/door_control{ + id = "CO-Office"; + name = "Door Control"; + normaldoorcontrol = 1; + req_access_txt = "31"; + pixel_y = 7 + }, +/obj/item/ashtray/bronze{ + pixel_y = 1; + pixel_x = 12 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "azn" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/almayer{ @@ -7937,6 +7837,12 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) +"azp" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "azq" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -8947,14 +8853,6 @@ icon_state = "orangecorner" }, /area/almayer/command/telecomms) -"aDc" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/command/lifeboat) "aDe" = ( /obj/structure/machinery/light{ dir = 8 @@ -9748,12 +9646,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_four) -"aGi" = ( -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "aGj" = ( /obj/structure/machinery/door/poddoor/almayer/open{ dir = 2; @@ -9932,24 +9824,6 @@ "aHe" = ( /turf/closed/wall/almayer, /area/almayer/command/lifeboat) -"aHk" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/sink{ - pixel_y = 16 - }, -/obj/structure/mirror{ - pixel_y = 21 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/numbertwobunks) "aHl" = ( /obj/structure/machinery/portable_atmospherics/canister/air, /turf/open/floor/engine, @@ -10104,12 +9978,6 @@ }, /turf/open/floor/engine, /area/almayer/engineering/airmix) -"aHT" = ( -/obj/structure/bed/chair/wood/normal, -/obj/item/bedsheet/brown, -/obj/item/toy/plush/farwa, -/turf/open/floor/wood/ship, -/area/almayer/shipboard/brig/cells) "aHU" = ( /obj/structure/platform{ dir = 1 @@ -10336,6 +10204,12 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) +"aIV" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "aIX" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -10598,6 +10472,11 @@ icon_state = "silver" }, /area/almayer/command/cichallway) +"aKk" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "aKn" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -10889,16 +10768,6 @@ icon_state = "dark_sterile" }, /area/almayer/living/numbertwobunks) -"aLt" = ( -/obj/structure/surface/rack, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/numbertwobunks) "aLB" = ( /turf/closed/wall/almayer, /area/almayer/hallways/starboard_hallway) @@ -11240,14 +11109,6 @@ icon_state = "red" }, /area/almayer/squads/alpha) -"aNe" = ( -/obj/structure/closet/firecloset, -/obj/item/clothing/mask/gas, -/obj/item/clothing/mask/gas, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/lifeboat) "aNi" = ( /turf/closed/wall/almayer, /area/almayer/living/chapel) @@ -11403,6 +11264,18 @@ /obj/effect/landmark/start/nurse, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/offices) +"aOj" = ( +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Bathroom"; + dir = 2 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "aOq" = ( /obj/structure/surface/table/almayer, /obj/item/tool/extinguisher, @@ -12479,6 +12352,11 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/command/cichallway) +"aTl" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply, +/turf/open/floor/almayer, +/area/almayer/command/cichallway) "aTm" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north1) @@ -12652,12 +12530,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/basketball) -"aTV" = ( -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/cells) "aTW" = ( /obj/structure/bed/chair{ dir = 8 @@ -13181,23 +13053,6 @@ icon_state = "test_floor4" }, /area/almayer/lifeboat_pumps/south1) -"aWA" = ( -/obj/structure/toilet{ - pixel_y = 13 - }, -/obj/item/paper_bin/uscm{ - pixel_x = 9; - pixel_y = -3 - }, -/obj/structure/machinery/light/small{ - dir = 4 - }, -/obj/item/prop/magazine/dirty{ - pixel_x = -6; - pixel_y = -10 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/living/captain_mess) "aWD" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -14798,16 +14653,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) -"bfe" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "orange" - }, -/area/almayer/engineering/upper_engineering/port) "bfl" = ( /turf/open/floor/almayer{ dir = 5; @@ -15327,6 +15172,10 @@ icon_state = "bluefull" }, /area/almayer/living/bridgebunks) +"bhM" = ( +/obj/structure/safe/cl_office, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "bhT" = ( /obj/structure/cargo_container/lockmart/mid{ layer = 3.1; @@ -15421,6 +15270,22 @@ icon_state = "sterile_green_corner" }, /area/almayer/medical/lower_medical_medbay) +"biJ" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22" + }, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 1; + name = "ship-grade camera" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/command/lifeboat) "biL" = ( /obj/structure/platform{ dir = 4 @@ -15584,6 +15449,13 @@ icon_state = "plate" }, /area/almayer/hallways/starboard_umbilical) +"bjQ" = ( +/obj/structure/machinery/shower{ + dir = 8 + }, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cells) "bjR" = ( /obj/structure/cargo_container/arious/right, /turf/open/floor/almayer, @@ -16404,6 +16276,16 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"boc" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "bof" = ( /obj/structure/pipes/vents/scrubber{ dir = 4 @@ -16659,6 +16541,15 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"bpw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "bpz" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -18095,6 +17986,16 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) +"bxA" = ( +/obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "bxB" = ( /obj/structure/disposalpipe/segment{ dir = 2; @@ -19200,18 +19101,6 @@ icon_state = "cargo" }, /area/almayer/living/cryo_cells) -"bCO" = ( -/obj/item/tool/kitchen/tray{ - layer = 2.9 - }, -/obj/item/reagent_container/food/snacks/carpmeat{ - layer = 3.3 - }, -/obj/item/reagent_container/food/snacks/carpmeat{ - layer = 3.3 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "bCP" = ( /obj/structure/bed/chair{ dir = 1 @@ -20068,6 +19957,16 @@ icon_state = "green" }, /area/almayer/squads/req) +"bGz" = ( +/obj/structure/window/framed/almayer, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "green" + }, +/area/almayer/squads/req) "bGF" = ( /obj/structure/machinery/landinglight/ds2{ dir = 1 @@ -20539,31 +20438,6 @@ }, /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/navigation) -"bIz" = ( -/mob/living/simple_animal/cat/Jones{ - dir = 8 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"bIA" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 - }, -/obj/structure/mirror{ - pixel_x = 29 - }, -/obj/structure/machinery/light{ - unacidable = 1; - unslashable = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/auxiliary_officer_office) "bII" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = 8; @@ -22449,6 +22323,23 @@ icon_state = "tcomms" }, /area/almayer/engineering/engine_core) +"bQl" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/item/prop/magazine/boots/n160{ + pixel_y = -8; + pixel_x = 4; + layer = 2.8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/commandbunks) "bQm" = ( /obj/structure/reagent_dispensers/fueltank, /turf/open/floor/almayer{ @@ -22551,6 +22442,12 @@ }, /turf/closed/wall/almayer, /area/almayer/squads/req) +"bQS" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend, +/turf/open/floor/almayer{ + icon_state = "green" + }, +/area/almayer/squads/req) "bQU" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -22644,14 +22541,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/lobby) -"bRo" = ( -/obj/effect/landmark/late_join/working_joe, -/obj/effect/landmark/start/working_joe, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/airoom) "bRr" = ( /obj/structure/machinery/fuelcell_recycler, /turf/open/floor/almayer{ @@ -23318,6 +23207,19 @@ icon_state = "blue" }, /area/almayer/squads/charlie_delta_shared) +"bUo" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = -32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = -32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/squads/req) "bUp" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -23563,6 +23465,12 @@ icon_state = "blue" }, /area/almayer/squads/delta) +"bVs" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "bVw" = ( /turf/open/floor/almayer{ dir = 4; @@ -24128,14 +24036,17 @@ /obj/structure/machinery/light, /turf/open/floor/almayer, /area/almayer/hallways/vehiclehangar) +"bYa" = ( +/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "green" + }, +/area/almayer/squads/req) "bYc" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) -"bYd" = ( -/obj/structure/bookcase/manuals/engineering, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "bYe" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -25448,6 +25359,13 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hallways/hangar) +"cdB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "cdE" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/drinks/cans/waterbottle{ @@ -26098,12 +26016,6 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha) -"cij" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "cil" = ( /obj/structure/machinery/light, /obj/structure/sign/safety/waterhazard{ @@ -26490,15 +26402,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_s) -"ckE" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) "ckI" = ( /obj/structure/disposalpipe/segment, /obj/item/device/radio/intercom{ @@ -26978,6 +26881,16 @@ icon_state = "plating" }, /area/almayer/shipboard/port_point_defense) +"cmo" = ( +/obj/structure/surface/table/almayer, +/obj/effect/spawner/random/powercell, +/obj/effect/spawner/random/tool, +/obj/item/packageWrap, +/turf/open/floor/almayer{ + dir = 8; + icon_state = "green" + }, +/area/almayer/squads/req) "cmp" = ( /turf/closed/wall/almayer, /area/almayer/engineering/engineering_workshop/hangar) @@ -27306,6 +27219,10 @@ icon_state = "blue" }, /area/almayer/squads/delta) +"com" = ( +/obj/structure/largecrate/supply/weapons/pistols, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "cop" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/tankerbunks) @@ -27327,6 +27244,14 @@ icon_state = "plate" }, /area/almayer/squads/alpha_bravo_shared) +"coD" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_18"; + pixel_y = 12 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "coG" = ( /obj/effect/decal/cleanable/blood/oil, /turf/open/floor/almayer{ @@ -27512,6 +27437,21 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) +"crw" = ( +/obj/structure/bed/bedroll{ + name = "cat bed"; + desc = "A bed of cotton fabric, purposely made for a cat to comfortably sleep on."; + pixel_y = 0 + }, +/mob/living/simple_animal/cat/Jones{ + dir = 8 + }, +/obj/structure/machinery/firealarm{ + pixel_y = 28; + pixel_x = -1 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "crD" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ @@ -27838,12 +27778,6 @@ icon_state = "redcorner" }, /area/almayer/shipboard/brig/execution) -"czG" = ( -/obj/structure/machinery/recharge_station, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/airoom) "czJ" = ( /obj/structure/sign/safety/restrictedarea{ pixel_x = 8; @@ -28009,12 +27943,6 @@ }, /turf/open/floor/almayer, /area/almayer/living/chapel) -"cCd" = ( -/obj/structure/bookcase{ - icon_state = "book-5" - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "cCD" = ( /obj/structure/platform{ dir = 8; @@ -28601,6 +28529,15 @@ icon_state = "test_floor4" }, /area/almayer/medical/containment/cell/cl) +"cNK" = ( +/obj/structure/pipes/vents/pump{ + dir = 1 + }, +/obj/structure/machinery/light/small, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "cNX" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28726,16 +28663,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) -"cRg" = ( -/obj/item/tool/weldpack{ - pixel_y = 15 - }, -/obj/structure/surface/table/almayer, -/obj/item/clothing/head/welding, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "cRi" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -28858,6 +28785,12 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_f_p) +"cVb" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "cVs" = ( /obj/structure/platform_decoration{ dir = 8 @@ -28967,6 +28900,16 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_s) +"cWE" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "cWI" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -29327,12 +29270,6 @@ icon_state = "plating" }, /area/almayer/engineering/engine_core) -"ddN" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/squads/req) "deb" = ( /obj/structure/bed, /obj/structure/machinery/flasher{ @@ -29438,17 +29375,6 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) -"dfP" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/rifle/l42a, -/obj/item/weapon/gun/rifle/l42a{ - pixel_y = 6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "dgg" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -29489,6 +29415,11 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) +"dha" = ( +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "dhQ" = ( /obj/structure/sign/safety/terminal{ pixel_x = -17 @@ -29582,14 +29513,6 @@ icon_state = "cargo_arrow" }, /area/almayer/squads/alpha_bravo_shared) -"diM" = ( -/obj/structure/bed/chair{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "djm" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -29644,14 +29567,6 @@ icon_state = "orange" }, /area/almayer/engineering/engineering_workshop/hangar) -"djN" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/engineering/upper_engineering/port) "djQ" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -29731,17 +29646,6 @@ allow_construction = 0 }, /area/almayer/stair_clone/upper) -"dkS" = ( -/obj/structure/machinery/shower, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/machinery/door/window/tinted{ - dir = 2 - }, -/obj/item/clothing/mask/cigarette/weed, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/engineering/upper_engineering/port) "dll" = ( /obj/structure/surface/table/almayer, /turf/open/floor/almayer{ @@ -29763,15 +29667,6 @@ icon_state = "dark_sterile" }, /area/almayer/shipboard/brig/surgery) -"dlN" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "dmg" = ( /obj/structure/machinery/vending/coffee, /obj/structure/sign/safety/coffee{ @@ -29867,22 +29762,6 @@ icon_state = "mono" }, /area/almayer/engineering/upper_engineering/starboard) -"dnJ" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22" - }, -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "dnS" = ( /obj/structure/safe, /turf/open/floor/almayer{ @@ -29946,6 +29825,10 @@ icon_state = "cargo" }, /area/almayer/squads/req) +"doU" = ( +/obj/structure/surface/rack, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/engineering/upper_engineering/port) "dpn" = ( /obj/structure/closet/secure_closet/freezer/fridge/full, /obj/structure/machinery/light{ @@ -30175,12 +30058,6 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) -"dtv" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out" - }, -/turf/open/floor/almayer, -/area/almayer/command/lifeboat) "dtH" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -30264,6 +30141,15 @@ icon_state = "mono" }, /area/almayer/living/starboard_garden) +"duz" = ( +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + pixel_y = 24 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/engineering/upper_engineering/port) "duF" = ( /obj/structure/closet/secure_closet/personal, /turf/open/floor/almayer{ @@ -30458,6 +30344,15 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"dyj" = ( +/obj/structure/closet/secure_closet/commander, +/obj/item/clothing/suit/storage/marine/light/vest, +/obj/item/device/whistle, +/obj/item/device/megaphone, +/obj/item/device/radio, +/obj/item/clothing/shoes/laceup, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "dyp" = ( /obj/structure/machinery/ares/cpu, /turf/open/floor/almayer/no_build{ @@ -30523,17 +30418,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_p) -"dAi" = ( -/obj/structure/sign/nosmoking_2{ - pixel_x = 32 - }, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "dAq" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/disposalpipe/segment{ @@ -30801,6 +30685,12 @@ icon_state = "greencorner" }, /area/almayer/hallways/starboard_hallway) +"dEJ" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/lifeboat_pumps/north2) "dEQ" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/tabasco, @@ -30815,6 +30705,24 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) +"dFb" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/storage/bible{ + desc = "As the legendary US Army chaplain once said, 'There are no Athiests in fancy offices'."; + name = "Holy Bible"; + pixel_x = -3; + pixel_y = 9 + }, +/obj/item/prop/helmetgarb/rosary{ + pixel_y = 5; + pixel_x = -4 + }, +/obj/item/device/flashlight/lamp{ + pixel_y = 1; + pixel_x = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "dFk" = ( /turf/open/floor/almayer{ dir = 8; @@ -31030,6 +30938,16 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) +"dID" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "dII" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/marine/shared/alpha_bravo, /obj/effect/decal/warning_stripes{ @@ -31052,6 +30970,12 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_m_s) +"dKa" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_s) "dKm" = ( /obj/structure/machinery/power/apc/almayer{ dir = 4 @@ -31094,6 +31018,16 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) +"dLe" = ( +/obj/structure/pipes/standard/manifold/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 4; + icon_state = "pipe-j2" + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/almayer/command/cichallway) "dLt" = ( /obj/structure/sign/safety/hazard{ pixel_x = -17; @@ -31118,6 +31052,20 @@ icon_state = "silver" }, /area/almayer/hallways/aft_hallway) +"dMf" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/photo_album{ + pixel_x = -4; + pixel_y = 5 + }, +/obj/item/folder/black{ + pixel_x = 7; + pixel_y = -3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "dMB" = ( /turf/open/floor/almayer{ dir = 8; @@ -31247,6 +31195,25 @@ icon_state = "silver" }, /area/almayer/command/airoom) +"dQp" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 1; + pixel_y = 1 + }, +/obj/structure/machinery/door/airlock/almayer/generic{ + dir = 1; + name = "Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/shipboard/brig/cells) "dQs" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -31290,6 +31257,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/hydroponics) +"dRs" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/engineering/upper_engineering/port) "dRv" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -31353,19 +31326,6 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/main_office) -"dSn" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/shipboard/brig/cells) "dSp" = ( /obj/structure/machinery/camera/autoname/almayer{ name = "ship-grade camera" @@ -31613,6 +31573,13 @@ icon_state = "dark_sterile" }, /area/almayer/engineering/laundry) +"dXo" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/taperecorder, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "dXr" = ( /obj/structure/bed/chair{ dir = 8; @@ -31765,12 +31732,6 @@ icon_state = "plate" }, /area/almayer/shipboard/port_point_defense) -"eaX" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/engineering/upper_engineering/starboard) "ebd" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/plating/plating_catwalk, @@ -31784,26 +31745,6 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"ebt" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/machinery/camera/autoname/almayer{ - name = "ship-grade camera" - }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) -"ebz" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "ebD" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -31933,26 +31874,6 @@ icon_state = "sterile_green" }, /area/almayer/medical/medical_science) -"edx" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/sign/safety/maint{ - pixel_x = 8; - pixel_y = -32 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/lifeboat) -"edM" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/hallways/vehiclehangar) "eed" = ( /turf/open/floor/almayer{ icon_state = "mono" @@ -32242,15 +32163,6 @@ dir = 1 }, /area/almayer/medical/containment/cell) -"eiH" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/toilet{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/cells) "eiK" = ( /obj/structure/bed/chair{ dir = 4 @@ -32411,6 +32323,15 @@ icon_state = "dark_sterile" }, /area/almayer/medical/operating_room_one) +"elM" = ( +/obj/structure/bed/chair{ + dir = 8; + pixel_y = 3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "elR" = ( /turf/closed/wall/almayer/research/containment/wall/corner{ dir = 1 @@ -32592,18 +32513,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) -"epK" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/smg/m39{ - pixel_y = 6 - }, -/obj/item/weapon/gun/smg/m39{ - pixel_y = -6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "eqb" = ( /obj/structure/surface/table/almayer, /obj/item/tool/stamp/denied{ @@ -32726,14 +32635,6 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) -"erz" = ( -/obj/structure/closet/crate, -/obj/item/ammo_box/magazine/l42a, -/obj/item/ammo_box/magazine/l42a, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "erG" = ( /obj/structure/disposalpipe/junction{ dir = 2; @@ -32758,10 +32659,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/port_umbilical) -"erZ" = ( -/obj/structure/pipes/vents/scrubber, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "esi" = ( /obj/structure/sign/safety/stairs{ pixel_x = 15; @@ -32781,6 +32678,23 @@ icon_state = "plate" }, /area/almayer/hallways/starboard_hallway) +"esC" = ( +/obj/structure/toilet{ + pixel_y = 13 + }, +/obj/item/paper_bin/uscm{ + pixel_x = 9; + pixel_y = -3 + }, +/obj/structure/machinery/light/small{ + dir = 4 + }, +/obj/item/prop/magazine/dirty{ + pixel_x = -6; + pixel_y = -10 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/captain_mess) "esF" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -32814,6 +32728,14 @@ icon_state = "plating_striped" }, /area/almayer/command/lifeboat) +"etn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/command/lifeboat) "ets" = ( /obj/structure/machinery/power/apc/almayer{ dir = 4 @@ -32900,12 +32822,6 @@ icon_state = "logo_c" }, /area/almayer/command/cic) -"euY" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/engineering/upper_engineering/port) "eva" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = 32 @@ -33048,12 +32964,6 @@ icon_state = "cargo" }, /area/almayer/shipboard/brig/cryo) -"eyv" = ( -/obj/structure/machinery/sentry_holder/almayer, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) "eyG" = ( /obj/structure/platform, /turf/open/floor/almayer{ @@ -33196,16 +33106,18 @@ icon_state = "orange" }, /area/almayer/hallways/starboard_hallway) -"eBo" = ( -/obj/structure/machinery/cm_vending/gear/commanding_officer, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "eBC" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_umbilical) +"eBE" = ( +/obj/structure/machinery/photocopier{ + anchored = 0 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "eBO" = ( /obj/structure/bed, /turf/open/floor/almayer{ @@ -33374,6 +33286,17 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"eFG" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/surface/table/almayer, +/obj/item/tool/hand_labeler, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "sterile_green_side" + }, +/area/almayer/medical/chemistry) "eFH" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_a_s) @@ -33851,19 +33774,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) -"eRt" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/hull/lower_hull/l_f_s) "eRu" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -33913,16 +33823,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) -"eSJ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/transmitter/rotary{ - name = "Captain's Office"; - phone_category = "Offices"; - phone_id = "Captain's Office"; - pixel_y = 6 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "eSU" = ( /obj/structure/prop/almayer/name_stencil{ icon_state = "almayer1" @@ -33941,27 +33841,6 @@ /obj/effect/landmark/crap_item, /turf/open/floor/almayer, /area/almayer/living/briefing) -"eTh" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/structure/surface/rack, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "eTo" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -33975,13 +33854,6 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) -"eTx" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "eTO" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -34143,6 +34015,14 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"eXk" = ( +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/airoom) "eXo" = ( /obj/structure/machinery/light/small, /turf/open/floor/plating/plating_catwalk, @@ -34154,15 +34034,17 @@ /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, /area/almayer/living/offices) -"eXU" = ( -/obj/structure/bed/chair{ - dir = 8; - pixel_y = 3 +"eXS" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 1 }, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_x = 2; + pixel_y = 2 }, -/area/almayer/hull/upper_hull/u_m_s) +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_p) "eYr" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -34202,10 +34084,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"eYC" = ( -/obj/structure/machinery/vending/cigarette, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "eYH" = ( /obj/structure/platform{ dir = 4 @@ -34299,6 +34177,25 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) +"faE" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + name = "law and engineering manuals bookcase"; + opacity = 0 + }, +/obj/item/book/manual/marine_law, +/obj/item/book/manual/detective, +/obj/item/book/manual/security_space_law, +/obj/item/book/manual/engineering_guide, +/obj/item/book/manual/engineering_construction, +/obj/item/book/manual/orbital_cannon_manual, +/obj/item/book/manual/ripley_build_and_repair, +/obj/item/book/manual/engineering_hacking, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "faO" = ( /obj/item/stack/cable_coil, /turf/open/floor/plating/plating_catwalk, @@ -34809,6 +34706,12 @@ icon_state = "redcorner" }, /area/almayer/shipboard/brig/execution) +"fnv" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "fnx" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/structure/machinery/door/window/eastright{ @@ -34850,18 +34753,6 @@ icon_state = "test_floor4" }, /area/almayer/squads/req) -"fnQ" = ( -/obj/structure/toilet{ - dir = 1 - }, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/machinery/door/window/tinted{ - dir = 1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/engineering/upper_engineering/port) "fnZ" = ( /obj/structure/machinery/portable_atmospherics/canister/air, /obj/structure/machinery/light/small{ @@ -34982,12 +34873,6 @@ }, /turf/open/floor/wood/ship, /area/almayer/command/corporateliason) -"fqg" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer, -/area/almayer/lifeboat_pumps/south2) "fqu" = ( /obj/structure/largecrate/random/barrel/red, /turf/open/floor/almayer, @@ -35044,6 +34929,20 @@ icon_state = "red" }, /area/almayer/shipboard/starboard_missiles) +"frJ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "frM" = ( /obj/effect/decal/warning_stripes{ icon_state = "S"; @@ -35057,6 +34956,19 @@ icon_state = "tcomms" }, /area/almayer/command/airoom) +"frY" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = -6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "fsd" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -35644,16 +35556,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/morgue) -"fFq" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "fFD" = ( /obj/structure/window/reinforced{ dir = 4; @@ -35689,6 +35591,16 @@ icon_state = "plate" }, /area/almayer/medical/morgue) +"fGa" = ( +/obj/structure/surface/rack, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/numbertwobunks) "fGg" = ( /obj/effect/decal/cleanable/blood/oil/streak, /turf/open/floor/almayer, @@ -36064,13 +35976,6 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) -"fNb" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/computer/card{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "fNg" = ( /obj/structure/largecrate/random/barrel/yellow, /turf/open/floor/plating/plating_catwalk, @@ -36106,19 +36011,21 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) -"fOh" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4; - icon_state = "exposed01-supply" - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/combat_correspondent) "fOk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 }, /turf/open/floor/almayer, /area/almayer/living/briefing) +"fOv" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "fOz" = ( /obj/structure/target{ name = "punching bag" @@ -36224,6 +36131,20 @@ /obj/effect/step_trigger/clone_cleaner, /turf/closed/wall/almayer, /area/almayer/hull/upper_hull/u_m_p) +"fQY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/largecrate/supply/weapons/m39{ + pixel_x = 2 + }, +/obj/structure/largecrate/supply/weapons/m41a{ + layer = 3.1; + pixel_x = 6; + pixel_y = 17 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "fRr" = ( /obj/structure/machinery/light{ dir = 1 @@ -36327,19 +36248,6 @@ icon_state = "green" }, /area/almayer/hallways/starboard_hallway) -"fUn" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_21" - }, -/obj/structure/sign/poster/io{ - pixel_y = 32; - name = "propaganda poster" - }, -/obj/structure/sign/safety/escapepod{ - pixel_x = -17 - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "fUA" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/briefing) @@ -36363,6 +36271,18 @@ icon_state = "dark_sterile" }, /area/almayer/medical/chemistry) +"fWi" = ( +/obj/structure/toilet{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/machinery/door/window/tinted{ + dir = 1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/engineering/upper_engineering/port) "fWT" = ( /obj/structure/machinery/door/airlock/almayer/engineering{ dir = 2; @@ -36391,16 +36311,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/medical/morgue) -"fXt" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "green" - }, -/area/almayer/squads/req) "fXx" = ( /obj/structure/surface/rack, /turf/open/floor/almayer{ @@ -36421,17 +36331,33 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/hallways/aft_hallway) -"fXM" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" +"fXE" = ( +/obj/structure/surface/table/almayer, +/obj/structure/machinery/computer/emails{ + pixel_x = 2; + pixel_y = 5 }, -/turf/open/floor/almayer, -/area/almayer/command/lifeboat) +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "fXN" = ( /obj/effect/landmark/start/marine/delta, /obj/effect/landmark/late_join/delta, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) +"fXP" = ( +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "silver" + }, +/area/almayer/command/cichallway) "fYb" = ( /turf/open/floor/almayer{ dir = 8; @@ -36782,28 +36708,6 @@ icon_state = "orangecorner" }, /area/almayer/hallways/stern_hallway) -"geW" = ( -/obj/structure/sign/prop1{ - pixel_y = 32 - }, -/obj/item/storage/fancy/cigar, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_x = 9; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/sake{ - layer = 3.6; - pixel_x = -9; - pixel_y = 16 - }, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "geX" = ( /obj/structure/pipes/vents/scrubber, /obj/structure/sign/safety/ammunition{ @@ -36912,14 +36816,6 @@ /obj/effect/landmark/start/liaison, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) -"ghX" = ( -/obj/structure/machinery/shower{ - dir = 8 - }, -/obj/item/toy/inflatable_duck, -/obj/structure/window/reinforced, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/cells) "gio" = ( /obj/structure/closet/emcloset, /obj/structure/sign/safety/restrictedarea{ @@ -37056,6 +36952,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) +"gka" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "gks" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/plating, @@ -37124,10 +37026,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_p) -"glU" = ( -/obj/structure/bed/chair/office/dark, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "gmb" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 1 @@ -37275,15 +37173,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) -"gqF" = ( -/obj/structure/machinery/photocopier, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "gqK" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -37503,6 +37392,12 @@ icon_state = "green" }, /area/almayer/squads/req) +"gvW" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) "gwm" = ( /obj/structure/largecrate/random/case/small, /obj/item/device/taperecorder{ @@ -37529,15 +37424,6 @@ icon_state = "bluecorner" }, /area/almayer/living/basketball) -"gwu" = ( -/obj/structure/machinery/light, -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out" - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/command/lifeboat) "gww" = ( /obj/structure/bed/chair, /obj/structure/machinery/light{ @@ -37737,6 +37623,13 @@ icon_state = "orange" }, /area/almayer/engineering/ce_room) +"gyU" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/north2) "gzn" = ( /obj/structure/machinery/landinglight/ds2/delaytwo{ dir = 8 @@ -37930,6 +37823,19 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) +"gCB" = ( +/obj/structure/machinery/power/apc/almayer/hardened{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "gCI" = ( /obj/structure/machinery/light{ dir = 4 @@ -37949,16 +37855,14 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) -"gDq" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 10 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 2 +"gDP" = ( +/obj/structure/closet/crate, +/obj/item/ammo_box/magazine/l42a, +/obj/item/ammo_box/magazine/l42a, +/turf/open/floor/almayer{ + icon_state = "plate" }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/hull/upper_hull/u_m_s) "gDW" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -37992,36 +37896,6 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) -"gEI" = ( -/obj/item/device/flashlight/lamp/green{ - pixel_x = 5; - pixel_y = 3 - }, -/obj/structure/machinery/door_control{ - id = "cl_shutters"; - name = "Privacy Shutters"; - pixel_x = -5; - pixel_y = 8; - req_access_txt = "200" - }, -/obj/structure/machinery/door_control{ - id = "RoomDivider"; - name = "Room Divider"; - pixel_x = -5; - pixel_y = -4; - req_access_txt = "200" - }, -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/door_control{ - id = "cl_evac"; - name = "Evac Pod Door Control"; - normaldoorcontrol = 1; - pixel_x = -5; - pixel_y = 2; - req_access_txt = "200" - }, -/turf/open/floor/carpet, -/area/almayer/command/corporateliason) "gEK" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -38069,31 +37943,22 @@ icon_state = "plate" }, /area/almayer/squads/delta) -"gGl" = ( +"gGp" = ( /obj/structure/surface/table/almayer, -/obj/item/device/taperecorder, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) -"gGo" = ( -/obj/structure/surface/table/almayer, -/obj/effect/landmark/map_item{ - pixel_x = -8 +/obj/item/clothing/mask/cigarette/pipe{ + pixel_x = 8 }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_x = 7; - pixel_y = -1; - throwforce = 15 +/obj/structure/transmitter/rotary{ + name = "Reporter Telephone"; + phone_category = "Almayer"; + phone_id = "Reporter"; + pixel_x = -4; + pixel_y = 6 }, /turf/open/floor/almayer{ icon_state = "plate" }, -/area/almayer/living/briefing) +/area/almayer/command/combat_correspondent) "gGr" = ( /obj/structure/machinery/vending/cigarette, /turf/open/floor/almayer{ @@ -38226,12 +38091,6 @@ icon_state = "orange" }, /area/almayer/engineering/lower_engineering) -"gJs" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_ammo/cargo/blend, -/turf/open/floor/almayer{ - icon_state = "green" - }, -/area/almayer/squads/req) "gJP" = ( /obj/structure/machinery/light, /obj/structure/disposalpipe/segment{ @@ -38687,14 +38546,6 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) -"gUr" = ( -/obj/item/stack/folding_barricade/three, -/obj/item/stack/folding_barricade/three, -/obj/structure/surface/rack, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/hull/lower_hull/l_f_s) "gUv" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -38754,6 +38605,18 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north2) +"gVd" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/folder/black{ + pixel_y = 8 + }, +/obj/item/folder/yellow, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 8; + pixel_x = -16 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "gVq" = ( /obj/structure/machinery/light, /obj/effect/decal/warning_stripes{ @@ -39035,6 +38898,16 @@ icon_state = "silver" }, /area/almayer/living/auxiliary_officer_office) +"hbI" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 32; + pixel_y = 7 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "hbZ" = ( /obj/structure/surface/table/almayer, /obj/structure/sign/safety/terminal{ @@ -39120,6 +38993,16 @@ "hcZ" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/offices) +"hdb" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "hdd" = ( /turf/open/floor/almayer{ dir = 9; @@ -39200,13 +39083,6 @@ icon_state = "plate" }, /area/almayer/engineering/engine_core) -"hey" = ( -/obj/effect/decal/cleanable/blood/oil/streak, -/obj/structure/machinery/sentry_holder/almayer, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) "heK" = ( /obj/structure/machinery/door/airlock/almayer/maint{ dir = 1; @@ -39262,35 +39138,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"hfm" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/photocopier{ - anchored = 0 - }, -/obj/structure/sign/poster/io{ - pixel_y = 32; - name = "propaganda poster" - }, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) -"hfw" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22" - }, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 1; - name = "ship-grade camera" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "red" - }, -/area/almayer/command/lifeboat) "hfy" = ( /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, @@ -39436,6 +39283,14 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) +"hiy" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "hiB" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -39449,13 +39304,6 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) -"hiN" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer, -/area/almayer/command/lifeboat) "hiQ" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 8 @@ -39678,6 +39526,19 @@ icon_state = "sterile_green" }, /area/almayer/medical/hydroponics) +"hnI" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + name = "\improper Flight Crew Quarters"; + req_one_access_txt = "19;22" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/pilotbunks) "hnV" = ( /obj/structure/machinery/light, /turf/open/floor/almayer, @@ -39868,6 +39729,18 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/starboard) +"htG" = ( +/obj/item/tool/soap, +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "htI" = ( /obj/structure/platform_decoration{ dir = 1 @@ -40109,6 +39982,13 @@ "hyQ" = ( /turf/closed/wall/almayer, /area/almayer/living/synthcloset) +"hzb" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4; + icon_state = "exposed01-supply" + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/combat_correspondent) "hzc" = ( /turf/closed/wall/almayer/outer, /area/almayer/engineering/upper_engineering/notunnel) @@ -40276,6 +40156,12 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"hBL" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/lifeboat) "hBU" = ( /obj/structure/largecrate/random/secure, /obj/effect/decal/warning_stripes{ @@ -40423,16 +40309,12 @@ /obj/structure/largecrate/random/barrel/red, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) -"hGa" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "hGB" = ( /obj/structure/machinery/light, +/obj/structure/flora/pottedplant{ + pixel_y = 3; + pixel_x = -1 + }, /turf/open/floor/wood/ship, /area/almayer/living/commandbunks) "hGD" = ( @@ -40556,19 +40438,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_s) -"hJh" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/computer/emails{ - pixel_x = 2; - pixel_y = 5 - }, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "hJk" = ( /obj/structure/stairs/perspective{ dir = 4; @@ -40642,6 +40511,61 @@ icon_state = "cargo_arrow" }, /area/almayer/engineering/engineering_workshop/hangar) +"hLB" = ( +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/crate, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "hLC" = ( /obj/structure/surface/table/almayer, /turf/open/floor/almayer{ @@ -41196,12 +41120,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"hWX" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/hull/upper_hull/u_f_p) "hXb" = ( /turf/open/floor/almayer{ dir = 1; @@ -41239,15 +41157,18 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cic_hallway) -"hXD" = ( +"hXG" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, /obj/effect/decal/warning_stripes{ - icon_state = "SW-out"; - pixel_x = -1 + icon_state = "N"; + pixel_y = 2 }, /turf/open/floor/almayer{ - icon_state = "mono" + icon_state = "dark_sterile" }, -/area/almayer/lifeboat_pumps/south1) +/area/almayer/engineering/upper_engineering/port) "hXS" = ( /obj/structure/sign/safety/water{ pixel_x = 8; @@ -41338,6 +41259,12 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) +"iaa" = ( +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "iag" = ( /obj/structure/surface/table/almayer, /obj/item/tool/hand_labeler, @@ -41388,12 +41315,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) -"iaE" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) "iaF" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -41581,15 +41502,6 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/north1) -"ift" = ( -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/item/clothing/suit/storage/marine/light/vest, -/obj/structure/surface/rack, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "ifR" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -41692,19 +41604,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_p) -"iii" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = -32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = -32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/squads/req) "iit" = ( /obj/effect/decal/warning_stripes{ icon_state = "W"; @@ -41909,14 +41808,13 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/living/offices/flight) -"imW" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 10 - }, -/turf/open/floor/almayer{ - icon_state = "plate" +"imJ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 }, -/area/almayer/command/combat_correspondent) +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "ina" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/emails{ @@ -42195,6 +42093,17 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) +"isI" = ( +/obj/structure/sign/nosmoking_2{ + pixel_x = 32 + }, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "isN" = ( /obj/structure/sink{ dir = 8; @@ -42206,17 +42115,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/morgue) -"isS" = ( -/obj/item/stack/sheet/cardboard{ - amount = 50 - }, -/obj/structure/surface/rack, -/obj/item/packageWrap, -/turf/open/floor/almayer{ - dir = 4; - icon_state = "green" - }, -/area/almayer/squads/req) "isW" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -42306,16 +42204,6 @@ }, /turf/open/floor/plating, /area/almayer/hull/lower_hull/l_f_p) -"iuw" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "orange" - }, -/area/almayer/engineering/upper_engineering/port) "iuz" = ( /obj/structure/surface/rack, /obj/effect/spawner/random/warhead, @@ -42333,16 +42221,6 @@ icon_state = "silver" }, /area/almayer/shipboard/brig/cic_hallway) -"iuT" = ( -/obj/structure/closet/emcloset, -/obj/structure/machinery/camera/autoname/almayer{ - dir = 4; - name = "ship-grade camera" - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/hull/upper_hull/u_f_s) "ivf" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/device/camera, @@ -42435,6 +42313,15 @@ /obj/structure/bed/chair/comfy/beige, /turf/open/floor/carpet, /area/almayer/command/cichallway) +"iwZ" = ( +/obj/structure/surface/table/almayer, +/obj/item/storage/fancy/cigarettes/lucky_strikes, +/obj/item/packageWrap, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "green" + }, +/area/almayer/squads/req) "ixj" = ( /obj/structure/surface/table/reinforced/prison, /obj/structure/machinery/computer/crew/alt, @@ -42770,6 +42657,14 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_p) +"iEz" = ( +/obj/structure/machinery/light, +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21"; + pixel_y = 3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "iFc" = ( /obj/structure/pipes/vents/pump{ dir = 1 @@ -43114,6 +43009,13 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"iNY" = ( +/obj/structure/machinery/status_display{ + pixel_x = 32; + pixel_y = 16 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "iNZ" = ( /obj/structure/machinery/light{ dir = 8 @@ -43138,6 +43040,18 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"iPu" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/item/bedsheet/hop{ + pixel_y = 0 + }, +/obj/structure/bed{ + pixel_y = 0 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "iPv" = ( /obj/structure/bed/chair/comfy, /obj/structure/window/reinforced/ultra, @@ -43337,6 +43251,25 @@ /obj/item/facepaint/black, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/alpha) +"iTd" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) +"iTe" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "iTf" = ( /obj/structure/closet/crate/trashcart, /obj/item/clothing/gloves/yellow, @@ -43433,14 +43366,6 @@ icon_state = "mono" }, /area/almayer/medical/hydroponics) -"iUC" = ( -/obj/structure/machinery/faxmachine, -/obj/structure/surface/table/almayer, -/obj/structure/machinery/light/small, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "iUW" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -43489,30 +43414,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) -"iVZ" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/folder/black, -/obj/item/storage/bible/booze, -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door_control{ - id = "CO-Office"; - name = "Door Control"; - normaldoorcontrol = 1; - pixel_x = 18; - req_access_txt = "31" - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"iWb" = ( -/obj/structure/sign/safety/hazard{ - pixel_x = 32; - pixel_y = -8 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "iWc" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -43771,6 +43672,15 @@ icon_state = "plating" }, /area/almayer/command/airoom) +"jaK" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hallways/vehiclehangar) "jaP" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/computer/cameras/almayer_network{ @@ -43888,19 +43798,6 @@ icon_state = "plating_striped" }, /area/almayer/engineering/upper_engineering/starboard) -"jcZ" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "jdk" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -44129,22 +44026,28 @@ icon_state = "test_floor4" }, /area/almayer/living/auxiliary_officer_office) -"jgu" = ( -/obj/structure/sink{ - dir = 4; - pixel_x = 11 +"jgr" = ( +/obj/structure/surface/table/almayer, +/obj/item/device/camera{ + pixel_x = -8; + pixel_y = 12 }, -/obj/structure/mirror{ - pixel_x = 29 +/obj/item/paper_bin/uscm{ + pixel_x = 6; + pixel_y = 6 }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 +/obj/item/tool/pen{ + pixel_x = 4; + pixel_y = -4 + }, +/obj/item/storage/box/donkpockets{ + pixel_x = -8; + pixel_y = -1 }, /turf/open/floor/almayer{ - icon_state = "dark_sterile" + icon_state = "plate" }, -/area/almayer/living/captain_mess) +/area/almayer/command/combat_correspondent) "jgw" = ( /obj/structure/sign/safety/nonpress_0g{ pixel_x = 32 @@ -44227,6 +44130,21 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"jhB" = ( +/obj/structure/bookcase{ + icon_state = "book-5"; + name = "medical manuals bookcase"; + opacity = 0 + }, +/obj/item/book/manual/surgery, +/obj/item/book/manual/research_and_development, +/obj/item/book/manual/medical_diagnostics_manual, +/obj/item/book/manual/medical_cloning, +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "jhD" = ( /obj/structure/machinery/firealarm{ pixel_y = -28 @@ -44396,11 +44314,6 @@ icon_state = "plate" }, /area/almayer/living/briefing) -"jkL" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/weldingtool, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) "jkS" = ( /obj/structure/window/framed/almayer/hull/hijack_bustable, /obj/structure/machinery/door/poddoor/shutters/almayer/open{ @@ -44585,20 +44498,6 @@ /obj/structure/machinery/door/firedoor/border_only/almayer, /turf/open/floor/plating, /area/almayer/command/cic) -"jog" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/photo_album{ - pixel_x = -4; - pixel_y = 5 - }, -/obj/item/folder/black{ - pixel_x = 7; - pixel_y = -3 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "jox" = ( /obj/structure/machinery/brig_cell/cell_3{ pixel_x = -32 @@ -44714,16 +44613,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/medical_science) -"jrV" = ( -/obj/structure/surface/table/almayer, -/obj/item/weapon/gun/rifle/l42a{ - pixel_y = 6 - }, -/obj/item/weapon/gun/rifle/l42a, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "jss" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -44773,12 +44662,6 @@ icon_state = "greencorner" }, /area/almayer/hallways/starboard_hallway) -"juf" = ( -/obj/structure/machinery/sentry_holder/almayer, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) "jup" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out"; @@ -44794,14 +44677,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/living/port_emb) -"juN" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper_bin/uscm, -/obj/item/tool/pen{ - pixel_y = 7 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "juX" = ( /obj/structure/platform_decoration{ dir = 1 @@ -44952,6 +44827,13 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) +"jxP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "jyi" = ( /obj/structure/machinery/power/port_gen/pacman, /turf/open/floor/almayer{ @@ -44979,6 +44861,15 @@ icon_state = "test_floor4" }, /area/almayer/engineering/upper_engineering/notunnel) +"jzE" = ( +/obj/structure/closet/secure_closet/bar{ + name = "Success Cabinet"; + req_access_txt = "1" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/captain_mess) "jzZ" = ( /obj/structure/platform_decoration, /turf/open/floor/almayer{ @@ -45073,36 +44964,6 @@ icon_state = "test_floor4" }, /area/almayer/command/lifeboat) -"jBY" = ( -/obj/structure/surface/rack, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0; - pixel_x = -6; - pixel_y = 7 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0; - pixel_x = -6; - pixel_y = -3 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0; - pixel_x = 5; - pixel_y = 9 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0; - pixel_x = 5; - pixel_y = -3 - }, -/obj/structure/noticeboard{ - desc = "The note is haphazardly attached to the cork board by what looks like a bent firing pin. 'The order has come in to perform end of life service checks on all L42A service rifles, any that are defective are to be dis-assembled and packed into a crate and sent to to the cargo hold. L42A service rifles that are in working order after servicing, are to be locked in secure cabinets ready to be off-loaded at Chinook. Scheduled end of life service for the L42A - Complete'"; - pixel_y = 29 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "jCa" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -45213,6 +45074,12 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_a_s) +"jFY" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/engineering/upper_engineering/port) "jGn" = ( /obj/structure/machinery/light{ dir = 1 @@ -45505,6 +45372,16 @@ }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) +"jMx" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out" + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = 11; + pixel_y = -26 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "jMG" = ( /obj/structure/largecrate/random/case/small, /obj/structure/largecrate/random/mini/wooden{ @@ -45588,6 +45465,13 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"jND" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "jOi" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -45726,15 +45610,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"jRZ" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "jSo" = ( /obj/item/tool/warning_cone, /turf/open/floor/almayer{ @@ -45996,29 +45871,6 @@ icon_state = "plate" }, /area/almayer/living/offices) -"jWC" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/command/lifeboat) -"jWH" = ( -/obj/structure/machinery/power/apc/almayer/hardened{ - cell_type = /obj/item/cell/hyper; - dir = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north1) "jWU" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/blocker/forcefield/multitile_vehicles, @@ -46047,18 +45899,54 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) -"jXW" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/lifeboat) "jXY" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"jYc" = ( +/obj/item/bedsheet/blue{ + layer = 3.2 + }, +/obj/item/bedsheet/blue{ + pixel_y = 13 + }, +/obj/item/toy/plush/therapy/red{ + desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; + force = 15; + layer = 4.1; + name = "Sergeant Huggs"; + pixel_y = 15; + throwforce = 15 + }, +/obj/item/clothing/head/cmcap{ + layer = 4.1; + pixel_x = -1; + pixel_y = 22 + }, +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "blue" + }, +/area/almayer/living/port_emb) "jYd" = ( /obj/structure/machinery/gear{ id = "vehicle_elevator_gears" @@ -46243,20 +46131,20 @@ icon_state = "bluefull" }, /area/almayer/squads/charlie_delta_shared) -"kaJ" = ( -/obj/structure/bed/chair{ - dir = 4 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "kaN" = ( /obj/structure/platform{ dir = 1 }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_p) +"kaS" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "kbc" = ( /obj/effect/decal/warning_stripes{ icon_state = "N"; @@ -46369,6 +46257,14 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"kdv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/starboard) "kdB" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -46380,6 +46276,27 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering/starboard) +"keT" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/storage/fancy/cigar{ + pixel_y = 2; + layer = 3.04; + pixel_x = -2 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = -11; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_y = 16; + pixel_x = -2 + }, +/obj/item/reagent_container/food/drinks/bottle/sake{ + pixel_x = 7; + pixel_y = 16 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kff" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -46419,6 +46336,17 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) +"kfR" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "kfU" = ( /turf/open/floor/plating, /area/almayer/powered/agent) @@ -46641,6 +46569,12 @@ }, /turf/open/floor/almayer, /area/almayer/shipboard/brig/cells) +"kmk" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hallways/vehiclehangar) "kmp" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -46717,10 +46651,12 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/grunt_rnr) -"knT" = ( -/obj/structure/safe/cl_office, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) +"knL" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/lifeboat_pumps/south2) "koc" = ( /obj/structure/machinery/status_display{ pixel_y = -30 @@ -46974,12 +46910,6 @@ icon_state = "cargo" }, /area/almayer/squads/bravo) -"ksv" = ( -/obj/structure/closet/secure_closet/securecom, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "ksA" = ( /obj/structure/closet/secure_closet/freezer/fridge/groceries, /obj/structure/machinery/light{ @@ -47025,6 +46955,17 @@ icon_state = "red" }, /area/almayer/shipboard/brig/evidence_storage) +"ktn" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "ktB" = ( /obj/structure/largecrate/random/barrel/white, /turf/open/floor/almayer{ @@ -47481,6 +47422,10 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) +"kDK" = ( +/obj/structure/pipes/vents/scrubber, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kDR" = ( /obj/structure/disposalpipe/junction{ dir = 1; @@ -47517,10 +47462,6 @@ icon_state = "plate" }, /area/almayer/living/pilotbunks) -"kFk" = ( -/obj/structure/closet/secure_closet/commander, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "kFq" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/engineering_construction, @@ -47704,6 +47645,12 @@ icon_state = "plate" }, /area/almayer/squads/alpha) +"kJm" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kJC" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -47745,6 +47692,19 @@ icon_state = "green" }, /area/almayer/hallways/port_hallway) +"kJW" = ( +/obj/structure/machinery/door/window/westright, +/obj/structure/machinery/shower{ + dir = 8; + layer = 3.10; + plane = -4 + }, +/obj/item/tool/soap{ + pixel_x = 2; + pixel_y = 7 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/commandbunks) "kKb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -47913,6 +47873,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/briefing) +"kNq" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/faxmachine/uscm/command/capt{ + name = "Commanding Officer's Fax Machine"; + pixel_y = 3; + pixel_x = -4 + }, +/obj/structure/machinery/light{ + dir = 1 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kNx" = ( /obj/structure/sign/safety/ref_bio_storage{ pixel_x = -17; @@ -48063,6 +48035,12 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) +"kPH" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/lifeboat_pumps/south2) "kPJ" = ( /obj/structure/machinery/cryopod/right{ pixel_y = 6 @@ -48131,6 +48109,12 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/operating_room_three) +"kRg" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/lifeboat) "kRu" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -48182,6 +48166,18 @@ icon_state = "tcomms" }, /area/almayer/command/airoom) +"kSH" = ( +/obj/structure/sign/prop1{ + pixel_y = 32 + }, +/obj/structure/filingcabinet/security{ + pixel_x = -8 + }, +/obj/structure/filingcabinet/medical{ + pixel_x = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kSJ" = ( /obj/structure/disposalpipe/junction{ dir = 4; @@ -48211,6 +48207,16 @@ icon_state = "plating" }, /area/almayer/squads/req) +"kTc" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "kTq" = ( /obj/structure/largecrate/supply/supplies/mre, /turf/open/floor/almayer{ @@ -48266,23 +48272,18 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) -"kUb" = ( -/obj/structure/closet/secure_closet, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/device/camera_film, -/obj/item/storage/box/tapes, -/obj/item/clothing/head/fedora, -/obj/item/clothing/suit/storage/marine/light/reporter, -/obj/item/clothing/head/helmet/marine/reporter, -/obj/item/clothing/head/cmcap/reporter, -/obj/item/device/flashlight, -/obj/item/device/toner, -/obj/item/device/toner, +"kUh" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ + access_modified = 1; + dir = 1; + name = "\improper Flight Crew Quarters"; + req_one_access_txt = "19;22" + }, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "test_floor4" }, -/area/almayer/command/combat_correspondent) +/area/almayer/living/pilotbunks) "kUt" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -48327,6 +48328,27 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south2) +"kVT" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/tool/stamp/hop{ + name = "Commanding Officer's rubber stamp"; + pixel_x = -5; + pixel_y = 9 + }, +/obj/item/paper_bin/uscm{ + pixel_y = 6; + pixel_x = 7 + }, +/obj/item/tool/pen/red/clicky{ + pixel_x = -6; + pixel_y = 3 + }, +/obj/item/tool/pen/blue/clicky{ + pixel_x = -6; + pixel_y = -3 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "kVX" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -48506,6 +48528,12 @@ icon_state = "orange" }, /area/almayer/hallways/port_umbilical) +"kZH" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "kZN" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/prop/almayer/computer/PC{ @@ -48599,6 +48627,16 @@ }, /turf/open/floor/plating, /area/almayer/command/cic) +"laY" = ( +/obj/effect/decal/cleanable/dirt, +/obj/item/storage/toolbox/mechanical{ + pixel_x = 4; + pixel_y = -3 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "lbb" = ( /obj/structure/surface/table/almayer, /obj/item/organ/heart/prosthetic{ @@ -49045,6 +49083,12 @@ icon_state = "red" }, /area/almayer/living/offices/flight) +"lkm" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/engineering/upper_engineering/starboard) "lkM" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -49069,22 +49113,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"llt" = ( -/obj/structure/machinery/conveyor{ - id = "req_belt" - }, -/obj/structure/plasticflaps, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer, -/area/almayer/squads/req) -"llD" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 5 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/combat_correspondent) "llM" = ( /obj/structure/pipes/vents/scrubber, /turf/open/floor/almayer, @@ -49468,6 +49496,11 @@ icon_state = "plating_striped" }, /area/almayer/squads/req) +"ltc" = ( +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/airoom) "lto" = ( /obj/structure/machinery/iv_drip, /turf/open/floor/almayer{ @@ -49494,16 +49527,19 @@ }, /turf/open/floor/plating, /area/almayer/hull/upper_hull/u_m_p) +"ltU" = ( +/obj/structure/bed/chair{ + dir = 8 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "ltX" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/main_office) -"lue" = ( -/obj/structure/surface/table/almayer, -/obj/item/folder/yellow, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "luk" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -49514,6 +49550,17 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_a_p) +"lul" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + name = "\improper Commanding Officer's Quarters"; + req_access = null; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "lut" = ( /obj/structure/machinery/computer/crew, /turf/open/floor/almayer{ @@ -49806,61 +49853,6 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"lAj" = ( -/obj/structure/machinery/light/small{ - dir = 1 - }, -/obj/structure/closet/crate, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/obj/item/ammo_magazine/rifle/l42a/ap{ - current_rounds = 0 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) "lAl" = ( /turf/open/floor/almayer{ dir = 4; @@ -49983,20 +49975,6 @@ icon_state = "plate" }, /area/almayer/engineering/engineering_workshop/hangar) -"lCn" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/obj/structure/sign/safety/ammunition{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/sign/safety/hazard{ - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "lCt" = ( /turf/open/floor/almayer{ dir = 10; @@ -50049,13 +50027,22 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) -"lDj" = ( +"lDn" = ( /obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 2 + icon_state = "NE-out"; + pixel_y = 1 }, /turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) +/area/almayer/command/lifeboat) +"lDD" = ( +/obj/structure/safe/co_office, +/obj/item/weapon/pole/fancy_cane, +/obj/item/tool/lighter/zippo/gold{ + pixel_y = 3; + layer = 3.05 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "lDJ" = ( /obj/structure/sign/safety/distribution_pipes{ pixel_x = -17 @@ -50065,20 +50052,6 @@ icon_state = "orange" }, /area/almayer/hallways/starboard_hallway) -"lDK" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/largecrate/supply/weapons/m39{ - pixel_x = 2 - }, -/obj/structure/largecrate/supply/weapons/m41a{ - layer = 3.1; - pixel_x = 6; - pixel_y = 17 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "lDL" = ( /obj/structure/machinery/light{ dir = 4 @@ -50350,6 +50323,15 @@ }, /turf/open/floor/almayer, /area/almayer/hull/upper_hull/u_f_s) +"lIl" = ( +/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ + name = "\improper Armourer's Workshop"; + req_access = null + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/hull/upper_hull/u_m_s) "lIp" = ( /obj/structure/bed/chair/comfy/beige{ dir = 1 @@ -50442,6 +50424,19 @@ icon_state = "cargo" }, /area/almayer/living/offices) +"lJL" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/shipboard/brig/cells) "lJO" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -50490,20 +50485,6 @@ /obj/structure/surface/table/almayer, /turf/open/floor/almayer, /area/almayer/squads/charlie) -"lLN" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/reagent_dispensers/peppertank{ - pixel_y = -30 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" - }, -/area/almayer/shipboard/brig/armory) "lLS" = ( /obj/structure/sign/safety/galley{ pixel_x = 32 @@ -50544,6 +50525,12 @@ icon_state = "plating_striped" }, /area/almayer/squads/req) +"lMx" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/engineering/upper_engineering/starboard) "lMM" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out"; @@ -50700,6 +50687,14 @@ icon_state = "silver" }, /area/almayer/command/securestorage) +"lQi" = ( +/obj/structure/machinery/cm_vending/clothing/commanding_officer{ + pixel_y = 0 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/living/commandbunks) "lQj" = ( /obj/structure/machinery/door_control{ id = "InnerShutter"; @@ -50719,11 +50714,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) -"lQq" = ( -/obj/structure/bed, -/obj/item/bedsheet/hop, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "lQu" = ( /obj/structure/bed/stool, /turf/open/floor/almayer{ @@ -50846,12 +50836,16 @@ /obj/structure/closet/firecloset, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_p) -"lUv" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +"lUA" = ( +/obj/structure/surface/table/almayer, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, /turf/open/floor/almayer{ - icon_state = "redfull" + icon_state = "plate" }, -/area/almayer/hull/lower_hull/l_f_s) +/area/almayer/hull/upper_hull/u_m_s) "lVl" = ( /obj/structure/machinery/cm_vending/sorted/tech/electronics_storage, /turf/open/floor/almayer, @@ -51099,16 +51093,6 @@ icon_state = "greencorner" }, /area/almayer/hallways/aft_hallway) -"mcl" = ( -/obj/structure/sign/safety/ladder{ - pixel_x = -16 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/turf/open/floor/almayer, -/area/almayer/hallways/vehiclehangar) "mcL" = ( /obj/structure/machinery/vending/snack, /obj/structure/sign/safety/maint{ @@ -51368,6 +51352,13 @@ }, /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) +"mje" = ( +/obj/structure/machinery/light, +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "mji" = ( /obj/structure/pipes/standard/manifold/fourway/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -51448,6 +51439,16 @@ allow_construction = 0 }, /area/almayer/shipboard/brig/lobby) +"mko" = ( +/obj/item/tool/weldpack{ + pixel_y = 15 + }, +/obj/structure/surface/table/almayer, +/obj/item/clothing/head/welding, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "mkx" = ( /obj/structure/machinery/door_control{ id = "cl_shutters 2"; @@ -51672,6 +51673,12 @@ /obj/structure/disposalpipe/segment, /turf/closed/wall/almayer, /area/almayer/squads/req) +"mqb" = ( +/obj/structure/pipes/standard/manifold/hidden/supply{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "mqg" = ( /obj/structure/bed/chair{ dir = 4 @@ -51857,6 +51864,17 @@ icon_state = "orange" }, /area/almayer/squads/bravo) +"mts" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "mtD" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -51901,48 +51919,6 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/north1) -"mus" = ( -/obj/item/bedsheet/blue{ - layer = 3.2 - }, -/obj/item/bedsheet/blue{ - pixel_y = 13 - }, -/obj/item/toy/plush/therapy/red{ - desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; - force = 15; - layer = 4.1; - name = "Sergeant Huggs"; - pixel_y = 15; - throwforce = 15 - }, -/obj/item/clothing/head/cmcap{ - layer = 4.1; - pixel_x = -1; - pixel_y = 22 - }, -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/turf/open/floor/almayer{ - icon_state = "blue" - }, -/area/almayer/living/port_emb) "mux" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -51975,15 +51951,6 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) -"mvH" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out"; - pixel_x = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south2) "mvI" = ( /obj/structure/machinery/camera/autoname/almayer{ dir = 4; @@ -52058,6 +52025,19 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_f_p) +"myl" = ( +/obj/structure/machinery/power/apc/almayer/hardened{ + cell_type = /obj/item/cell/hyper; + dir = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "myn" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -52171,6 +52151,13 @@ /obj/effect/spawner/random/tool, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) +"mAr" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "mAT" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ dir = 8; @@ -52315,6 +52302,23 @@ icon_state = "emerald" }, /area/almayer/living/briefing) +"mDX" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/obj/structure/disposalpipe/segment, +/obj/structure/machinery/door/airlock/almayer/command/reinforced{ + dir = 1; + id_tag = "CO-Office"; + name = "\improper Commanding Officer's Office"; + req_access = null; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/commandbunks) "mEb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -52495,12 +52499,6 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) -"mIA" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/lifeboat_pumps/south2) "mIB" = ( /obj/structure/machinery/cm_vending/sorted/medical/marinemed, /obj/structure/sign/safety/medical{ @@ -52511,6 +52509,26 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) +"mIJ" = ( +/obj/structure/sign/safety/ladder{ + pixel_x = -16 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hallways/vehiclehangar) +"mIP" = ( +/obj/structure/pipes/vents/pump, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "mIW" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -52640,6 +52658,15 @@ icon_state = "mono" }, /area/almayer/medical/hydroponics) +"mKy" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "mKJ" = ( /obj/structure/machinery/firealarm{ pixel_y = 28 @@ -52994,6 +53021,33 @@ icon_state = "test_floor4" }, /area/almayer/command/airoom) +"mRp" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + freerange = 1; + name = "General Listening Channel"; + pixel_y = -28 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) +"mRQ" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22" + }, +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "mRS" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -53004,13 +53058,6 @@ icon_state = "test_floor4" }, /area/almayer/hallways/starboard_hallway) -"mRU" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) "mRW" = ( /turf/open/floor/almayer/research/containment/corner1, /area/almayer/medical/containment/cell/cl) @@ -53076,6 +53123,14 @@ icon_state = "green" }, /area/almayer/hallways/aft_hallway) +"mTc" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/emails{ + dir = 4; + pixel_y = 2 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "mTd" = ( /obj/structure/machinery/smartfridge/chemistry{ pixel_x = -3; @@ -53298,19 +53353,6 @@ dir = 1 }, /area/almayer/medical/containment/cell) -"mXa" = ( -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/rifle/l42a{ - pixel_y = 6 - }, -/obj/item/weapon/gun/rifle/l42a, -/obj/item/weapon/gun/rifle/l42a{ - pixel_y = -6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "mXj" = ( /turf/closed/wall/almayer, /area/almayer/living/commandbunks) @@ -53348,17 +53390,6 @@ icon_state = "blue" }, /area/almayer/hallways/port_hallway) -"mYX" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/rifle/m41a{ - pixel_y = 6 - }, -/obj/item/weapon/gun/rifle/m41a, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "mYY" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -53446,17 +53477,6 @@ "naB" = ( /turf/closed/wall/almayer/reinforced, /area/almayer/shipboard/brig/perma) -"naQ" = ( -/obj/structure/machinery/light/small{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/engineering/upper_engineering/port) "naR" = ( /obj/structure/machinery/iv_drip, /obj/effect/decal/warning_stripes{ @@ -53484,15 +53504,6 @@ icon_state = "test_floor4" }, /area/almayer/living/gym) -"nbr" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "nbB" = ( /obj/structure/closet/secure_closet/freezer/fridge/full, /turf/open/floor/almayer{ @@ -53605,6 +53616,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) +"neG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "neO" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -54018,12 +54038,6 @@ icon_state = "silver" }, /area/almayer/command/securestorage) -"nna" = ( -/obj/structure/closet/firecloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/hull/upper_hull/u_f_s) "nnc" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer{ @@ -54089,6 +54103,12 @@ /obj/structure/largecrate/random/barrel/white, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) +"nnX" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "noj" = ( /obj/structure/largecrate, /obj/structure/prop/server_equipment/laptop{ @@ -54151,13 +54171,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/containment) -"npB" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_s) "nqx" = ( /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -54270,6 +54283,22 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_s) +"nsQ" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 29 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/captain_mess) "nsY" = ( /turf/closed/wall/almayer, /area/almayer/living/port_emb) @@ -54392,17 +54421,6 @@ }, /turf/open/floor/almayer, /area/almayer/squads/alpha) -"nuI" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/surface/table/almayer, -/obj/item/tool/hand_labeler, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "sterile_green_side" - }, -/area/almayer/medical/chemistry) "nuK" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/franks{ @@ -54424,6 +54442,24 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_s) +"nvG" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/sink{ + pixel_y = 16 + }, +/obj/structure/mirror{ + pixel_y = 21 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/numbertwobunks) "nvM" = ( /obj/structure/window/framed/almayer/white, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -54471,26 +54507,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"nwv" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/item/paper{ - pixel_x = 3; - pixel_y = 3 - }, -/obj/item/tool/lighter/zippo/gold, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) -"nww" = ( -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = 28 - }, -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "nwx" = ( /obj/effect/decal/cleanable/dirt, /turf/open/floor/almayer{ @@ -54654,18 +54670,6 @@ icon_state = "blue" }, /area/almayer/hallways/aft_hallway) -"nzI" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "nzO" = ( /obj/effect/decal/cleanable/blood/oil, /obj/effect/decal/warning_stripes{ @@ -54767,6 +54771,46 @@ icon_state = "orange" }, /area/almayer/squads/bravo) +"nCx" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = -5; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + desc = "A premium double-malt whiskey, this bottle was gifted to the Captain of the USS Almayer after the completion of the ship's space trials by the VADM. himself."; + pixel_x = 3; + pixel_y = 16 + }, +/obj/item/reagent_container/food/drinks/bottle/whiskey{ + pixel_x = 11; + pixel_y = 16 + }, +/obj/item/storage/box/drinkingglasses{ + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) +"nCR" = ( +/obj/structure/sink{ + dir = 4; + pixel_x = 11 + }, +/obj/structure/mirror{ + pixel_x = 29 + }, +/obj/structure/machinery/light{ + unacidable = 1; + unslashable = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/auxiliary_officer_office) "nCT" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -54775,6 +54819,33 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) +"nCU" = ( +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/obj/structure/coatrack{ + pixel_y = 1; + pixel_x = -5 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) +"nDd" = ( +/obj/structure/sign/safety/ammunition{ + pixel_x = 15; + pixel_y = 32 + }, +/obj/structure/sign/safety/hazard{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "nDh" = ( /obj/structure/transmitter/rotary{ name = "CL Office Telephone"; @@ -54980,6 +55051,12 @@ icon_state = "plate" }, /area/almayer/shipboard/port_point_defense) +"nGY" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/lifeboat_pumps/north2) "nHg" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -55247,16 +55324,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"nMM" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_s) "nMV" = ( /obj/structure/machinery/cm_vending/sorted/medical/wall_med{ pixel_y = 25 @@ -55434,6 +55501,18 @@ icon_state = "plate" }, /area/almayer/squads/req) +"nPY" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "nQg" = ( /obj/structure/sink{ pixel_y = 24 @@ -55478,13 +55557,6 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/engineering/upper_engineering) -"nSj" = ( -/obj/structure/machinery/cm_vending/sorted/cargo_guns/cargo/blend, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "green" - }, -/area/almayer/squads/req) "nSG" = ( /obj/structure/machinery/door_control{ id = "tcomms"; @@ -55541,6 +55613,10 @@ }, /turf/open/floor/almayer, /area/almayer/command/computerlab) +"nTA" = ( +/obj/structure/bed/chair/comfy/blue, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "nTH" = ( /obj/structure/sign/safety/storage{ pixel_x = 8; @@ -55894,12 +55970,6 @@ icon_state = "green" }, /area/almayer/living/grunt_rnr) -"ocs" = ( -/obj/structure/pipes/vents/pump{ - dir = 4 - }, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "ocB" = ( /obj/effect/decal/warning_stripes{ icon_state = "S"; @@ -56090,16 +56160,6 @@ icon_state = "cargo" }, /area/almayer/squads/charlie) -"ohl" = ( -/obj/structure/window/framed/almayer, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 1 - }, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "green" - }, -/area/almayer/squads/req) "ohA" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -56147,6 +56207,18 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/north2) +"ohS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/living/captain_mess) "oih" = ( /obj/structure/bed{ icon_state = "abed" @@ -56337,21 +56409,6 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/execution) -"olk" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 2 - }, -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/engineering/upper_engineering/port) "olv" = ( /obj/structure/surface/table/almayer, /obj/item/tool/hand_labeler{ @@ -56421,6 +56478,13 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/cells) +"omu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_shotgun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "omy" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -56494,6 +56558,17 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) +"ooo" = ( +/obj/structure/reagent_dispensers/water_cooler/stacks{ + density = 0; + pixel_y = 17 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) "oos" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/grunt_rnr) @@ -56531,16 +56606,6 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/perma) -"opj" = ( -/obj/structure/surface/table/almayer, -/obj/effect/spawner/random/powercell, -/obj/effect/spawner/random/tool, -/obj/item/packageWrap, -/turf/open/floor/almayer{ - dir = 8; - icon_state = "green" - }, -/area/almayer/squads/req) "opC" = ( /obj/structure/machinery/door/airlock/almayer/command/reinforced{ name = "\improper Combat Information Center" @@ -56552,6 +56617,23 @@ "opD" = ( /turf/open/floor/plating/plating_catwalk, /area/almayer/living/gym) +"opI" = ( +/obj/structure/closet/secure_closet, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/device/camera_film, +/obj/item/storage/box/tapes, +/obj/item/clothing/head/fedora, +/obj/item/clothing/suit/storage/marine/light/reporter, +/obj/item/clothing/head/helmet/marine/reporter, +/obj/item/clothing/head/cmcap/reporter, +/obj/item/device/flashlight, +/obj/item/device/toner, +/obj/item/device/toner, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "opJ" = ( /obj/docking_port/stationary/emergency_response/external/port4, /turf/open/space/basic, @@ -56598,13 +56680,6 @@ icon_state = "plate" }, /area/almayer/living/pilotbunks) -"oqA" = ( -/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "cargo_arrow" - }, -/area/almayer/command/cic) "oqD" = ( /obj/structure/surface/table/almayer, /obj/item/tool/wet_sign, @@ -56635,6 +56710,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/port_emb) +"oqY" = ( +/obj/structure/machinery/conveyor{ + id = "req_belt" + }, +/obj/structure/plasticflaps, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer, +/area/almayer/squads/req) "oqZ" = ( /obj/structure/surface/table/almayer, /obj/structure/machinery/microwave{ @@ -56785,18 +56870,6 @@ "otu" = ( /turf/closed/wall/almayer/research/containment/wall/connect_w, /area/almayer/medical/containment/cell) -"otK" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ - access_modified = 1; - dir = 1; - name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/pilotbunks) "otX" = ( /obj/effect/decal/warning_stripes{ icon_state = "W" @@ -57242,12 +57315,6 @@ icon_state = "mono" }, /area/almayer/medical/medical_science) -"oDO" = ( -/obj/structure/machinery/sentry_holder/almayer, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south2) "oDR" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 9 @@ -57469,18 +57536,15 @@ icon_state = "test_floor4" }, /area/almayer/medical/medical_science) +"oIt" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "oIB" = ( /turf/closed/wall/almayer, /area/almayer/command/combat_correspondent) -"oIY" = ( -/obj/structure/machinery/cryopod/right{ - layer = 3.1; - pixel_y = 13 - }, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/airoom) "oJp" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -57661,13 +57725,6 @@ icon_state = "redfull" }, /area/almayer/squads/alpha_bravo_shared) -"oMM" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/structure/machinery/cm_vending/clothing/commanding_officer, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "oMQ" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer, @@ -57682,6 +57739,14 @@ icon_state = "mono" }, /area/almayer/engineering/ce_room) +"oNf" = ( +/obj/item/stack/folding_barricade/three, +/obj/item/stack/folding_barricade/three, +/obj/structure/surface/rack, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/hull/lower_hull/l_f_s) "oNj" = ( /obj/structure/sign/prop1{ pixel_x = -32; @@ -57995,6 +58060,40 @@ icon_state = "cargo" }, /area/almayer/squads/alpha) +"oTM" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/item/clothing/mask/cigarette/pipe{ + pixel_y = -7; + layer = 2.8 + }, +/obj/item/reagent_container/spray/cleaner{ + pixel_x = -4; + pixel_y = 7; + layer = 3.04 + }, +/obj/structure/machinery/door_control/brbutton{ + pixel_y = 26; + pixel_x = -12; + id = "Brig Lockdown Shutters"; + name = "Brig Lockdown" + }, +/obj/structure/machinery/door_control/brbutton{ + pixel_y = 26; + id = "ARES StairsLock"; + name = "ARES Exterior Lockdown Override"; + pixel_x = -2 + }, +/obj/structure/machinery/door_control/brbutton{ + pixel_y = 26; + pixel_x = 8; + name = "ARES Emergency Lockdown Override"; + id = "ARES Emergency" + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "oUG" = ( /obj/structure/machinery/light{ dir = 8 @@ -58201,15 +58300,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) -"pbl" = ( -/obj/structure/bed, -/obj/item/toy/plush/farwa{ - pixel_x = 5 - }, -/obj/item/clothing/under/redpyjamas, -/obj/item/bedsheet/orange, -/turf/open/floor/wood/ship, -/area/almayer/command/corporateliason) "pbp" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ @@ -58426,18 +58516,6 @@ allow_construction = 0 }, /area/almayer/stair_clone) -"pfA" = ( -/obj/item/tool/soap, -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/engineering/upper_engineering/port) "pfH" = ( /obj/structure/platform_decoration, /turf/open/floor/almayer{ @@ -58466,6 +58544,15 @@ icon_state = "orange" }, /area/almayer/hull/lower_hull/l_m_s) +"pgw" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "pgD" = ( /turf/closed/wall/almayer, /area/almayer/lifeboat_pumps/south1) @@ -58501,6 +58588,15 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"phj" = ( +/obj/structure/machinery/photocopier, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "piO" = ( /obj/structure/surface/rack, /obj/item/tool/weldingtool, @@ -58576,6 +58672,16 @@ }, /turf/open/floor/almayer, /area/almayer/engineering/engineering_workshop/hangar) +"pjR" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "pky" = ( /obj/structure/largecrate/random/secure, /turf/open/floor/almayer{ @@ -58662,6 +58768,16 @@ icon_state = "plate" }, /area/almayer/living/briefing) +"pmI" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_f_s) "pmV" = ( /obj/structure/prop/server_equipment/yutani_server/broken{ density = 0; @@ -58686,6 +58802,23 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"pnL" = ( +/obj/structure/machinery/constructable_frame{ + icon_state = "box_2" + }, +/obj/item/weapon/baseballbat/metal{ + pixel_x = -2; + pixel_y = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + dir = 6; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/starboard) "pop" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 1 @@ -59550,6 +59683,15 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) +"pIZ" = ( +/obj/structure/pipes/standard/simple/hidden/supply, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 2 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/lifeboat_pumps/north1) "pJi" = ( /obj/structure/closet/firecloset, /turf/open/floor/almayer{ @@ -59557,18 +59699,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) -"pJn" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light/small{ - dir = 1 - }, -/obj/structure/largecrate/random/secure{ - pixel_x = -5 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "pJD" = ( /obj/structure/pipes/vents/scrubber{ dir = 1 @@ -59686,6 +59816,15 @@ icon_state = "plate" }, /area/almayer/living/captain_mess) +"pMk" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north2) "pMp" = ( /obj/structure/disposalpipe/segment, /turf/open/floor/almayer{ @@ -59732,14 +59871,6 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) -"pNK" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/auxiliary_officer_office) "pNM" = ( /obj/structure/platform{ dir = 4 @@ -59846,16 +59977,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"pPF" = ( -/obj/structure/machinery/power/apc/almayer/hardened, -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south2) "pPM" = ( /obj/structure/surface/rack, /turf/open/floor/almayer{ @@ -59870,28 +59991,6 @@ icon_state = "red" }, /area/almayer/shipboard/port_missiles) -"pPV" = ( -/obj/structure/pipes/vents/pump, -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - pixel_y = 24 - }, -/obj/structure/machinery/door_control{ - id = "Alpha_2"; - name = "Door Lock"; - normaldoorcontrol = 1; - pixel_x = 23; - specialfunctions = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/port_emb) "pQq" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -60073,16 +60172,6 @@ icon_state = "mono" }, /area/almayer/command/computerlab) -"pUe" = ( -/obj/structure/machinery/power/apc/almayer/hardened, -/obj/effect/decal/warning_stripes{ - icon_state = "SE-out"; - pixel_x = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/south1) "pUf" = ( /obj/structure/bed/chair{ dir = 4 @@ -60106,15 +60195,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_m_p) -"pUl" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hallways/vehiclehangar) "pUp" = ( /obj/item/device/radio/intercom{ freerange = 1; @@ -60170,6 +60250,12 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"pVx" = ( +/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/squads/req) "pVA" = ( /obj/item/trash/cigbutt/ucigbutt{ pixel_x = 2; @@ -60493,15 +60579,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) -"qbh" = ( -/obj/structure/pipes/vents/pump{ - dir = 1 - }, -/obj/structure/machinery/light/small, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "qbt" = ( /obj/structure/pipes/vents/pump, /turf/open/floor/almayer{ @@ -60758,6 +60835,12 @@ icon_state = "silvercorner" }, /area/almayer/command/cichallway) +"qfD" = ( +/obj/structure/bed/chair/office/dark{ + dir = 8 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "qfR" = ( /obj/structure/machinery/light{ dir = 1 @@ -60822,6 +60905,16 @@ }, /turf/open/floor/almayer, /area/almayer/squads/delta) +"qgU" = ( +/obj/structure/machinery/power/apc/almayer/hardened, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "qhb" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -60976,15 +61069,19 @@ /obj/effect/landmark/late_join/charlie, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/charlie) -"qkj" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 +"qkm" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_21" }, -/turf/open/floor/almayer{ - icon_state = "plate" +/obj/structure/sign/poster/io{ + pixel_y = 32; + name = "propaganda poster" }, -/area/almayer/command/lifeboat) +/obj/structure/sign/safety/escapepod{ + pixel_x = -17 + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "qkn" = ( /obj/structure/sign/safety/maint{ pixel_x = -17 @@ -61019,6 +61116,16 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/hallways/starboard_umbilical) +"qlp" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/prop/tableflag/uscm{ + pixel_x = -5 + }, +/obj/item/prop/tableflag/uscm2{ + pixel_x = 5 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "qlz" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -61028,6 +61135,14 @@ }, /turf/open/floor/plating, /area/almayer/shipboard/sea_office) +"qlI" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "qmk" = ( /obj/structure/surface/table/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -61042,21 +61157,6 @@ icon_state = "bluecorner" }, /area/almayer/squads/delta) -"qmr" = ( -/obj/structure/surface/table/almayer, -/obj/item/tool/screwdriver, -/obj/item/prop/helmetgarb/gunoil{ - pixel_x = -7; - pixel_y = 12 - }, -/obj/item/weapon/gun/rifle/l42a{ - pixel_x = 17; - pixel_y = 6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "qmt" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out"; @@ -61167,6 +61267,17 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/perma) +"qmZ" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/transmitter/rotary{ + name = "Commanding Officer's Office"; + phone_category = "Offices"; + phone_id = "Commanding Officer's Office"; + pixel_y = 8; + pixel_x = 16 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "qnd" = ( /obj/effect/decal/warning_stripes{ icon_state = "SW-out" @@ -61293,16 +61404,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/chemistry) -"qpU" = ( -/obj/structure/flora/pottedplant{ - icon_state = "pottedplant_22"; - pixel_y = 12 - }, -/obj/structure/surface/table/almayer, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/lifeboat) "qqn" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -61310,6 +61411,15 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/basketball) +"qqr" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "qqu" = ( /turf/open/floor/almayer{ dir = 1; @@ -61418,12 +61528,6 @@ icon_state = "plate" }, /area/almayer/living/gym) -"qtR" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/lifeboat) "qtS" = ( /obj/structure/largecrate/random/case/double, /turf/open/floor/almayer, @@ -61449,6 +61553,20 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/cryo_tubes) +"quy" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/structure/sign/safety/maint{ + pixel_x = 8; + pixel_y = -32 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "SW-out"; + pixel_x = -1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/lifeboat) "quI" = ( /obj/structure/machinery/door_control{ id = "laddersouthwest"; @@ -61694,35 +61812,6 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) -"qyH" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer, -/area/almayer/command/lifeboat) -"qyJ" = ( -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) -"qyM" = ( -/obj/structure/surface/table/almayer, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_x = 8 - }, -/obj/structure/transmitter/rotary{ - name = "Reporter Telephone"; - phone_category = "Almayer"; - phone_id = "Reporter"; - pixel_x = -4; - pixel_y = 6 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "qyW" = ( /obj/structure/bed/chair{ dir = 4 @@ -61808,24 +61897,10 @@ }, /turf/open/floor/almayer, /area/almayer/living/briefing) -"qCg" = ( -/obj/structure/mirror{ - pixel_y = 32 - }, -/obj/structure/sink{ - pixel_y = 24 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/engineering/upper_engineering/port) "qCi" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 }, -/obj/item/device/radio/intercom{ - freerange = 1; - name = "General Listening Channel"; - pixel_y = -28 - }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) "qCo" = ( @@ -62008,6 +62083,12 @@ icon_state = "dark_sterile" }, /area/almayer/medical/operating_room_two) +"qGU" = ( +/obj/structure/closet/firecloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/lifeboat_pumps/south2) "qHb" = ( /obj/structure/bed/chair{ dir = 8 @@ -62091,6 +62172,15 @@ icon_state = "mono" }, /area/almayer/medical/medical_science) +"qJf" = ( +/obj/structure/machinery/light{ + dir = 4 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/engineering/upper_engineering) "qJj" = ( /obj/structure/desertdam/decals/road_edge{ icon_state = "road_edge_decal3"; @@ -62146,6 +62236,15 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) +"qJU" = ( +/obj/structure/bed, +/obj/item/toy/plush/farwa{ + pixel_x = 5 + }, +/obj/item/clothing/under/redpyjamas, +/obj/item/bedsheet/orange, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "qJY" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/drinks/bottle/orangejuice{ @@ -62191,6 +62290,16 @@ icon_state = "plating" }, /area/almayer/engineering/upper_engineering) +"qKt" = ( +/obj/structure/closet/emcloset, +/obj/structure/machinery/camera/autoname/almayer{ + dir = 4; + name = "ship-grade camera" + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_s) "qKz" = ( /obj/structure/machinery/light/small, /turf/open/floor/almayer{ @@ -62219,6 +62328,16 @@ icon_state = "greencorner" }, /area/almayer/hallways/port_hallway) +"qKY" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "qLi" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -62461,6 +62580,15 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) +"qPX" = ( +/obj/structure/machinery/light, +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer{ + icon_state = "red" + }, +/area/almayer/command/lifeboat) "qQc" = ( /obj/structure/closet/secure_closet/personal/patient{ name = "morgue closet" @@ -62478,16 +62606,6 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/south1) -"qQL" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "orange" - }, -/area/almayer/engineering/upper_engineering/port) "qQM" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -62549,19 +62667,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/general_equipment) -"qRL" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/machinery/door/airlock/multi_tile/almayer/generic2{ - access_modified = 1; - name = "\improper Flight Crew Quarters"; - req_one_access_txt = "19;22" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/pilotbunks) "qRT" = ( /obj/effect/decal/warning_stripes{ icon_state = "SE-out"; @@ -62989,6 +63094,15 @@ icon_state = "silvercorner" }, /area/almayer/command/computerlab) +"rbE" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + req_access = list(1); + pixel_y = 0 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/living/commandbunks) "rbF" = ( /obj/effect/landmark/late_join, /obj/effect/landmark/ert_spawns/distress_cryo, @@ -63061,14 +63175,6 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering) -"rcW" = ( -/obj/item/storage/toolbox/mechanical{ - pixel_y = 13 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "rde" = ( /obj/structure/sign/prop1, /turf/closed/wall/almayer, @@ -63270,17 +63376,6 @@ icon_state = "emeraldcorner" }, /area/almayer/living/briefing) -"rhD" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) "rhO" = ( /obj/structure/machinery/vending/cola/research{ pixel_x = 4 @@ -63575,6 +63670,17 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) +"rmE" = ( +/obj/structure/machinery/light/small{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "rmN" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/plating/plating_catwalk, @@ -63852,16 +63958,6 @@ /obj/structure/pipes/standard/manifold/hidden/supply, /turf/open/floor/almayer, /area/almayer/command/computerlab) -"rsW" = ( -/obj/structure/pipes/vents/pump, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/engineering/upper_engineering/port) "rsY" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -63941,6 +64037,22 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/living/grunt_rnr) +"rur" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S"; + pixel_y = -1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/port_emb) "rux" = ( /obj/structure/surface/table/almayer, /obj/item/paper_bin/uscm, @@ -63991,12 +64103,6 @@ /obj/structure/largecrate/random/case/double, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_f_s) -"rwT" = ( -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "rwY" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/poddoor/shutters/almayer{ @@ -64057,11 +64163,12 @@ icon_state = "mono" }, /area/almayer/lifeboat_pumps/north1) -"rzf" = ( -/obj/effect/landmark/late_join/working_joe, -/obj/effect/landmark/start/working_joe, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/airoom) +"ryR" = ( +/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "rzj" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -64103,13 +64210,6 @@ icon_state = "bluecorner" }, /area/almayer/living/briefing) -"rAv" = ( -/obj/structure/machinery/shower{ - dir = 8 - }, -/obj/structure/window/reinforced, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/shipboard/brig/cells) "rAx" = ( /obj/structure/disposalpipe/junction{ dir = 4 @@ -64289,14 +64389,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering/port) -"rDd" = ( -/obj/structure/surface/table/woodentable/fancy, -/obj/structure/machinery/computer/emails{ - dir = 1; - pixel_y = 2 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "rDe" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/snacks/kepler_crisps{ @@ -64653,11 +64745,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) -"rJg" = ( -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "rJh" = ( /obj/item/storage/backpack/marine/satchel{ desc = "It's the heavy-duty black polymer kind. Time to take out the trash!"; @@ -64782,6 +64869,28 @@ dir = 8 }, /area/almayer/medical/containment/cell/cl) +"rNb" = ( +/obj/structure/pipes/vents/pump, +/obj/structure/mirror{ + pixel_y = 32 + }, +/obj/structure/sink{ + pixel_y = 24 + }, +/obj/structure/machinery/door_control{ + id = "Alpha_2"; + name = "Door Lock"; + normaldoorcontrol = 1; + pixel_x = 23; + specialfunctions = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/port_emb) "rNF" = ( /obj/structure/machinery/light{ unacidable = 1; @@ -64833,17 +64942,6 @@ icon_state = "plate" }, /area/almayer/living/gym) -"rOZ" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/closet/secure_closet/guncabinet, -/obj/item/weapon/gun/rifle/l42a{ - pixel_y = 6 - }, -/obj/item/weapon/gun/rifle/l42a, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "rPh" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -65088,27 +65186,6 @@ icon_state = "silver" }, /area/almayer/command/computerlab) -"rUB" = ( -/obj/structure/pipes/vents/pump, -/obj/item/tool/soap, -/obj/effect/decal/cleanable/blood, -/obj/effect/decal/warning_stripes{ - icon_state = "W" - }, -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 1 - }, -/obj/structure/sink{ - pixel_y = 24 - }, -/obj/structure/mirror{ - pixel_y = 32 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/shipboard/brig/cells) "rUU" = ( /obj/structure/machinery/door/airlock/almayer/maint{ req_access = null; @@ -65144,14 +65221,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cic_hallway) -"rWF" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/lifeboat) "rWL" = ( /obj/structure/barricade/metal, /turf/open/floor/almayer{ @@ -65258,14 +65327,6 @@ icon_state = "plate" }, /area/almayer/living/offices/flight) -"rYZ" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_x = -1; - pixel_y = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hallways/vehiclehangar) "rZz" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 5 @@ -65736,18 +65797,6 @@ icon_state = "test_floor4" }, /area/almayer/command/lifeboat) -"skg" = ( -/obj/structure/machinery/light/small{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - dir = 10; - icon_state = "orange" - }, -/area/almayer/engineering/upper_engineering/starboard) "skl" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -65899,25 +65948,6 @@ icon_state = "blue" }, /area/almayer/squads/delta) -"soa" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_x = 1; - pixel_y = 1 - }, -/obj/structure/machinery/door/airlock/almayer/generic{ - dir = 1; - name = "Bathroom" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/shipboard/brig/cells) "soq" = ( /obj/structure/machinery/computer/working_joe{ dir = 4; @@ -66148,6 +66178,15 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/starboard) +"ssW" = ( +/obj/structure/machinery/light{ + dir = 1 + }, +/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_shotgun, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/command/cic) "ssX" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 6 @@ -66182,6 +66221,12 @@ allow_construction = 0 }, /area/almayer/stair_clone/upper) +"stu" = ( +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "stY" = ( /obj/structure/machinery/door/firedoor/border_only/almayer, /obj/structure/pipes/standard/simple/hidden/supply{ @@ -66240,16 +66285,18 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"svp" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 +"svC" = ( +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/smg/m39{ + pixel_y = 6 }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 +/obj/item/weapon/gun/smg/m39{ + pixel_y = -6 }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_s) +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "swn" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -66350,6 +66397,28 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) +"sxT" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/m41a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/m41a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) +"sxW" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "silver" + }, +/area/almayer/command/cichallway) "syH" = ( /obj/structure/machinery/firealarm{ pixel_y = -28 @@ -66467,24 +66536,6 @@ icon_state = "orange" }, /area/almayer/engineering/ce_room) -"sBF" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/obj/structure/disposalpipe/segment, -/obj/structure/machinery/door/airlock/almayer/command/reinforced{ - access_modified = 1; - dir = 1; - id_tag = "CO-Office"; - name = "\improper Commanding Officer's Office"; - req_access = null; - req_access_txt = "31" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/commandbunks) "sBH" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 10 @@ -66950,6 +67001,25 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/starboard_hallway) +"sLZ" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/item/device/flashlight/lamp/green{ + pixel_y = 20; + pixel_x = -7 + }, +/obj/item/ashtray/bronze{ + pixel_y = 19; + pixel_x = 4 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/landmark/map_item{ + pixel_y = 3; + pixel_x = -1 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "sMs" = ( /obj/structure/machinery/door/airlock/almayer/maint/reinforced{ dir = 1 @@ -67055,6 +67125,15 @@ }, /turf/open/floor/almayer, /area/almayer/lifeboat_pumps/south1) +"sOZ" = ( +/obj/structure/sign/safety/ammunition{ + pixel_y = 32 + }, +/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, +/turf/open/floor/almayer{ + icon_state = "redfull" + }, +/area/almayer/medical/upper_medical) "sPc" = ( /obj/structure/machinery/light{ dir = 1 @@ -67359,6 +67438,27 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/shipboard/brig/cryo) +"sWs" = ( +/obj/structure/closet/emcloset, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/hull/upper_hull/u_f_p) +"sWC" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "NE-out"; + pixel_y = 2 + }, +/obj/structure/machinery/door/airlock/almayer/generic{ + name = "\improper Bathroom" + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/engineering/upper_engineering/port) "sWW" = ( /obj/structure/machinery/flasher{ alpha = 1; @@ -67479,6 +67579,14 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south2) +"sYB" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "sYC" = ( /obj/structure/machinery/door/airlock/almayer/maint, /obj/structure/machinery/door/poddoor/almayer/open{ @@ -67608,6 +67716,12 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/aft_hallway) +"tan" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "tat" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -67686,6 +67800,14 @@ icon_state = "test_floor4" }, /area/almayer/shipboard/brig/perma) +"tcZ" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/engineering/upper_engineering/port) "tda" = ( /obj/structure/machinery/door/firedoor/border_only/almayer{ dir = 2 @@ -67796,6 +67918,15 @@ /obj/effect/landmark/late_join, /turf/open/floor/almayer, /area/almayer/living/cryo_cells) +"teE" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cells) "teH" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/simple/hidden/supply, @@ -67936,6 +68067,18 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) +"thR" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/largecrate/random/secure{ + pixel_x = -5 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "thT" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -67996,23 +68139,6 @@ icon_state = "green" }, /area/almayer/hallways/starboard_hallway) -"tiw" = ( -/obj/structure/machinery/constructable_frame{ - icon_state = "box_2" - }, -/obj/item/weapon/baseballbat/metal{ - pixel_x = -2; - pixel_y = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "SW-out"; - pixel_x = -1 - }, -/turf/open/floor/almayer{ - dir = 6; - icon_state = "orange" - }, -/area/almayer/engineering/upper_engineering/starboard) "tiE" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer, @@ -68329,12 +68455,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_m_s) -"tpt" = ( -/obj/structure/machinery/sentry_holder/almayer, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north2) "tpD" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -68361,6 +68481,21 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_p) +"tqd" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/screwdriver, +/obj/item/prop/helmetgarb/gunoil{ + pixel_x = -7; + pixel_y = 12 + }, +/obj/item/weapon/gun/rifle/l42a{ + pixel_x = 17; + pixel_y = 6 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "tqe" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -68412,19 +68547,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) -"tqB" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 1; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "tqV" = ( /obj/structure/extinguisher_cabinet{ pixel_y = 26 @@ -68709,6 +68831,25 @@ icon_state = "outerhull_dir" }, /area/space) +"twI" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + density = 0; + pixel_y = 16 + }, +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/structure/machinery/door_control{ + id = "bot_uniforms"; + name = "Uniform Vendor Lockdown"; + pixel_x = -24; + pixel_y = 18; + req_access_txt = "31" + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/cic) "twT" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -68860,12 +69001,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) -"tAh" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/engineering/upper_engineering/port) "tAi" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -68933,6 +69068,13 @@ /obj/item/tool/crowbar, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south1) +"tBu" = ( +/obj/effect/decal/cleanable/blood/oil/streak, +/obj/structure/machinery/sentry_holder/almayer, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south1) "tBz" = ( /obj/structure/machinery/power/apc/almayer{ dir = 1 @@ -69118,6 +69260,15 @@ /obj/effect/spawner/random/tool, /turf/open/floor/plating/plating_catwalk, /area/almayer/lifeboat_pumps/south2) +"tGj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/north1) "tGq" = ( /obj/effect/projector{ name = "Almayer_Up4"; @@ -69194,6 +69345,12 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/shipboard/brig/cells) +"tId" = ( +/obj/structure/machinery/recharge_station, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/airoom) "tIp" = ( /obj/structure/machinery/door/airlock/almayer/generic{ name = "\improper Dorms" @@ -69259,17 +69416,6 @@ icon_state = "plate" }, /area/almayer/living/bridgebunks) -"tJo" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_x = 2; - pixel_y = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_p) "tJp" = ( /obj/structure/surface/table/almayer, /obj/item/tool/crowbar/red, @@ -69301,6 +69447,15 @@ }, /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) +"tJN" = ( +/obj/structure/machinery/cryopod/right{ + layer = 3.1; + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/airoom) "tJR" = ( /obj/structure/machinery/vending/cigarette, /obj/structure/sign/safety/medical{ @@ -69386,11 +69541,6 @@ icon_state = "red" }, /area/almayer/hallways/aft_hallway) -"tMn" = ( -/obj/structure/pipes/standard/simple/hidden/supply, -/obj/structure/bed/chair/comfy/beige, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "tMW" = ( /obj/effect/decal/warning_stripes{ icon_state = "NW-out"; @@ -69538,10 +69688,6 @@ /obj/structure/machinery/light, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/hangar) -"tQM" = ( -/obj/structure/safe/co_office, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "tQV" = ( /turf/closed/wall/almayer/outer, /area/almayer/lifeboat_pumps/south1) @@ -69630,28 +69776,12 @@ icon_state = "orangecorner" }, /area/almayer/living/briefing) -"tSF" = ( -/obj/structure/surface/table/almayer, -/obj/item/device/camera{ - pixel_x = -8; - pixel_y = 12 - }, -/obj/item/paper_bin/uscm{ - pixel_x = 6; - pixel_y = 6 - }, -/obj/item/tool/pen{ - pixel_x = 4; - pixel_y = -4 - }, -/obj/item/storage/box/donkpockets{ - pixel_x = -8; - pixel_y = -1 - }, -/turf/open/floor/almayer{ - icon_state = "plate" +"tTk" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 4 }, -/area/almayer/command/combat_correspondent) +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "tTp" = ( /obj/structure/surface/table/almayer, /obj/item/reagent_container/food/condiment/hotsauce/sriracha{ @@ -69818,13 +69948,6 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/cryo) -"tXz" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "W"; - pixel_x = -1 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hallways/vehiclehangar) "tXM" = ( /obj/structure/pipes/vents/pump{ dir = 8 @@ -69883,12 +70006,6 @@ icon_state = "dark_sterile" }, /area/almayer/medical/lower_medical_lobby) -"tYv" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/hull/upper_hull/u_f_p) "tYw" = ( /obj/effect/decal/medical_decals{ icon_state = "triagedecalbottomleft"; @@ -69910,6 +70027,12 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_f_s) +"tYM" = ( +/obj/structure/pipes/vents/pump{ + dir = 4 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "tYX" = ( /turf/open/floor/almayer{ icon_state = "test_floor4" @@ -69952,12 +70075,6 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) -"tZB" = ( -/obj/structure/machinery/light{ - dir = 1 - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "tZF" = ( /obj/structure/machinery/light/small{ dir = 8 @@ -70065,6 +70182,13 @@ /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, /area/almayer/command/computerlab) +"uaX" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W"; + pixel_x = -1 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_s) "uaZ" = ( /obj/structure/surface/table/almayer, /obj/item/weapon/gun/rifle/m41a, @@ -70088,17 +70212,6 @@ icon_state = "ai_floors" }, /area/almayer/command/airoom) -"uck" = ( -/obj/structure/surface/rack, -/obj/item/stack/cable_coil, -/obj/item/attachable/flashlight/grip, -/obj/item/ammo_box/magazine/l42a{ - pixel_y = 14 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "ucp" = ( /obj/structure/window/framed/almayer, /turf/open/floor/plating, @@ -70131,15 +70244,36 @@ icon_state = "plate" }, /area/almayer/command/cic) -"udb" = ( -/obj/structure/sign/safety/ammunition{ - pixel_y = 32 +"ucI" = ( +/obj/item/device/flashlight/lamp/green{ + pixel_x = 5; + pixel_y = 3 }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" +/obj/structure/machinery/door_control{ + id = "cl_shutters"; + name = "Privacy Shutters"; + pixel_x = -5; + pixel_y = 8; + req_access_txt = "200" }, -/area/almayer/medical/upper_medical) +/obj/structure/machinery/door_control{ + id = "RoomDivider"; + name = "Room Divider"; + pixel_x = -5; + pixel_y = -4; + req_access_txt = "200" + }, +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/door_control{ + id = "cl_evac"; + name = "Evac Pod Door Control"; + normaldoorcontrol = 1; + pixel_x = -5; + pixel_y = 2; + req_access_txt = "200" + }, +/turf/open/floor/carpet, +/area/almayer/command/corporateliason) "udi" = ( /turf/open/floor/almayer{ icon_state = "red" @@ -70306,16 +70440,12 @@ icon_state = "cargo" }, /area/almayer/squads/req) -"ufS" = ( -/obj/structure/sign/safety/terminal{ - pixel_x = 7; - pixel_y = 29 - }, -/obj/structure/filingcabinet, +"ufL" = ( +/obj/structure/machinery/door/poddoor/shutters/almayer/uniform_vendors, /turf/open/floor/almayer{ - icon_state = "plate" + icon_state = "test_floor4" }, -/area/almayer/command/combat_correspondent) +/area/almayer/command/cic) "ugs" = ( /obj/structure/surface/table/almayer, /obj/item/book/manual/marine_law{ @@ -70591,19 +70721,6 @@ icon_state = "mono" }, /area/almayer/medical/upper_medical) -"umR" = ( -/obj/structure/machinery/power/apc/almayer/hardened{ - cell_type = /obj/item/cell/hyper; - dir = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "mono" - }, -/area/almayer/lifeboat_pumps/north2) "umS" = ( /obj/structure/bed/chair/comfy{ dir = 8 @@ -70621,17 +70738,6 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_f_p) -"umY" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_x = -1; - pixel_y = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_f_s) "unh" = ( /obj/structure/surface/table/almayer, /obj/item/storage/firstaid/o2, @@ -70682,40 +70788,6 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_medbay) -"uoh" = ( -/obj/structure/window/reinforced{ - dir = 4; - pixel_x = -2; - pixel_y = 4 - }, -/obj/structure/window/reinforced{ - dir = 8; - layer = 3.3; - pixel_y = 4 - }, -/obj/structure/bed{ - can_buckle = 0 - }, -/obj/structure/bed{ - buckling_y = 13; - layer = 3.5; - pixel_y = 13 - }, -/obj/item/bedsheet/yellow{ - layer = 3.2 - }, -/obj/item/bedsheet/yellow{ - pixel_y = 13 - }, -/obj/structure/sign/safety/bathunisex{ - pixel_x = -16; - pixel_y = 8 - }, -/obj/item/toy/plush/barricade, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/living/port_emb) "uoi" = ( /obj/effect/decal/warning_stripes{ icon_state = "S" @@ -71071,14 +71143,24 @@ }, /turf/open/floor/wood/ship, /area/almayer/living/basketball) -"uvk" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" +"uva" = ( +/obj/structure/surface/table/almayer, +/obj/effect/landmark/map_item{ + pixel_x = -8 + }, +/obj/item/toy/plush/therapy/red{ + desc = "A USCM approved plush doll. It's not soft and hardly comforting!"; + force = 15; + layer = 4.1; + name = "Sergeant Huggs"; + pixel_x = 7; + pixel_y = -1; + throwforce = 15 }, /turf/open/floor/almayer{ - icon_state = "orange" + icon_state = "plate" }, -/area/almayer/engineering/upper_engineering/starboard) +/area/almayer/living/briefing) "uvs" = ( /obj/structure/machinery/conveyor{ id = "lower_garbage" @@ -71160,26 +71242,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/cells) -"uvZ" = ( -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - desc = "A premium double-malt whiskey, this bottle was gifted to the Captain of the USS Almayer after the completion of the ship's space trials by the VADM. himself."; - pixel_x = 1; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - pixel_x = 9; - pixel_y = 16 - }, -/obj/item/reagent_container/food/drinks/bottle/whiskey{ - pixel_x = -7; - pixel_y = 16 - }, -/obj/item/clothing/mask/cigarette/pipe{ - pixel_y = 5 - }, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "uws" = ( /obj/structure/machinery/light{ dir = 4 @@ -71381,6 +71443,16 @@ icon_state = "red" }, /area/almayer/shipboard/port_missiles) +"uAl" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 1; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/port) "uAs" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -71419,6 +71491,12 @@ icon_state = "emerald" }, /area/almayer/living/port_emb) +"uAL" = ( +/obj/structure/bed/chair/wood/normal, +/obj/item/bedsheet/brown, +/obj/item/toy/plush/farwa, +/turf/open/floor/wood/ship, +/area/almayer/shipboard/brig/cells) "uAW" = ( /obj/structure/machinery/cryopod{ layer = 3.1; @@ -71458,6 +71536,12 @@ icon_state = "orange" }, /area/almayer/hallways/stern_hallway) +"uBM" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 5 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/combat_correspondent) "uBN" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -71637,12 +71721,6 @@ icon_state = "plate" }, /area/almayer/hallways/port_hallway) -"uGa" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/lifeboat_pumps/south2) "uGc" = ( /obj/structure/machinery/suit_storage_unit/compression_suit/uscm, /obj/structure/sign/safety/hazard{ @@ -72116,6 +72194,19 @@ icon_state = "plate" }, /area/almayer/engineering/engineering_workshop/hangar) +"uRs" = ( +/obj/structure/machinery/light{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 9; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "uRt" = ( /obj/structure/machinery/light{ dir = 8 @@ -72310,16 +72401,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/processing) -"uUV" = ( -/obj/structure/machinery/shower, -/obj/structure/window/reinforced/tinted{ - dir = 8 - }, -/obj/structure/machinery/door/window/tinted{ - dir = 2 - }, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/engineering/upper_engineering/port) "uVb" = ( /obj/structure/closet/toolcloset, /turf/open/floor/almayer{ @@ -72491,6 +72572,16 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) +"uYd" = ( +/obj/structure/flora/pottedplant{ + icon_state = "pottedplant_22"; + pixel_y = 12 + }, +/obj/structure/surface/table/almayer, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "uYg" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -72518,6 +72609,16 @@ /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/hallways/repair_bay) +"uZY" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "uZZ" = ( /obj/structure/machinery/door/airlock/multi_tile/almayer/generic{ name = "\improper Basketball Court" @@ -72536,15 +72637,6 @@ }, /turf/closed/wall/almayer, /area/almayer/hallways/starboard_umbilical) -"vba" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/engineering/upper_engineering/port) "vbf" = ( /obj/structure/machinery/landinglight/ds2/delaytwo{ dir = 8 @@ -72574,6 +72666,23 @@ icon_state = "orange" }, /area/almayer/squads/bravo) +"vbP" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) +"vbR" = ( +/obj/structure/window/framed/almayer, +/obj/structure/machinery/door/firedoor/border_only/almayer{ + dir = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "green" + }, +/area/almayer/squads/req) "vbS" = ( /obj/structure/closet/secure_closet/personal/patient{ name = "morgue closet" @@ -73052,6 +73161,16 @@ icon_state = "red" }, /area/almayer/lifeboat_pumps/south1) +"vjd" = ( +/obj/structure/machinery/door/firedoor/border_only/almayer, +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + icon_state = "test_floor4" + }, +/area/almayer/command/lifeboat) "vjg" = ( /obj/structure/prop/almayer/missile_tube{ icon_state = "missiletubesouth" @@ -73182,6 +73301,14 @@ icon_state = "orange" }, /area/almayer/shipboard/brig/processing) +"vlk" = ( +/obj/structure/closet/emcloset, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/lifeboat) "vln" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 4 @@ -73199,6 +73326,40 @@ icon_state = "redfull" }, /area/almayer/shipboard/port_missiles) +"vlO" = ( +/obj/structure/window/reinforced{ + dir = 4; + pixel_x = -2; + pixel_y = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + layer = 3.3; + pixel_y = 4 + }, +/obj/structure/bed{ + can_buckle = 0 + }, +/obj/structure/bed{ + buckling_y = 13; + layer = 3.5; + pixel_y = 13 + }, +/obj/item/bedsheet/yellow{ + layer = 3.2 + }, +/obj/item/bedsheet/yellow{ + pixel_y = 13 + }, +/obj/structure/sign/safety/bathunisex{ + pixel_x = -16; + pixel_y = 8 + }, +/obj/item/toy/plush/barricade, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/living/port_emb) "vlR" = ( /obj/structure/machinery/light{ dir = 4 @@ -73334,6 +73495,17 @@ icon_state = "orangefull" }, /area/almayer/living/briefing) +"vpv" = ( +/obj/structure/machinery/shower, +/obj/structure/window/reinforced/tinted{ + dir = 8 + }, +/obj/structure/machinery/door/window/tinted{ + dir = 2 + }, +/obj/item/clothing/mask/cigarette/weed, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/engineering/upper_engineering/port) "vpI" = ( /obj/effect/landmark/start/police, /turf/open/floor/plating/plating_catwalk, @@ -73526,6 +73698,16 @@ icon_state = "plate" }, /area/almayer/hallways/hangar) +"vsI" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/camera/autoname/almayer{ + name = "ship-grade camera" + }, +/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "vsJ" = ( /obj/structure/machinery/door/airlock/almayer/maint{ access_modified = 1; @@ -73605,14 +73787,6 @@ icon_state = "test_floor4" }, /area/almayer/hallways/port_hallway) -"vtT" = ( -/obj/structure/pipes/standard/manifold/hidden/supply, -/obj/structure/disposalpipe/junction{ - dir = 4; - icon_state = "pipe-j2" - }, -/turf/open/floor/almayer, -/area/almayer/command/cichallway) "vub" = ( /turf/closed/wall/almayer, /area/almayer/shipboard/sea_office) @@ -74058,14 +74232,6 @@ icon_state = "green" }, /area/almayer/shipboard/brig/cells) -"vCz" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer{ - dir = 2 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/lifeboat_pumps/north1) "vCG" = ( /obj/structure/toilet{ dir = 8 @@ -74090,6 +74256,14 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/hydroponics) +"vEf" = ( +/obj/structure/pipes/standard/simple/hidden/supply{ + dir = 10 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "vEj" = ( /obj/structure/prop/invuln/overhead_pipe{ pixel_x = 12 @@ -74220,16 +74394,6 @@ /obj/structure/disposalpipe/segment, /turf/open/floor/almayer, /area/almayer/living/port_emb) -"vHl" = ( -/obj/structure/machinery/door/firedoor/border_only/almayer, -/obj/effect/decal/warning_stripes{ - icon_state = "NW-out"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/command/lifeboat) "vHq" = ( /obj/item/device/assembly/mousetrap/armed, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -74547,14 +74711,6 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/port_hallway) -"vMC" = ( -/obj/structure/bed/chair/office/dark{ - dir = 8 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/command/combat_correspondent) "vME" = ( /turf/open/floor/almayer{ dir = 9; @@ -74952,6 +75108,14 @@ /obj/structure/machinery/light/small, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_s) +"vUk" = ( +/obj/item/storage/toolbox/mechanical{ + pixel_y = 13 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "vUI" = ( /obj/structure/largecrate/random/barrel/white, /obj/structure/sign/safety/security{ @@ -75018,6 +75182,13 @@ icon_state = "sterile_green" }, /area/almayer/medical/containment) +"vVu" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "vVw" = ( /turf/open/floor/almayer{ icon_state = "plate" @@ -75120,6 +75291,27 @@ }, /turf/open/floor/almayer, /area/almayer/squads/charlie_delta_shared) +"vWG" = ( +/obj/structure/pipes/vents/pump, +/obj/item/tool/soap, +/obj/effect/decal/cleanable/blood, +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/obj/structure/sink{ + pixel_y = 24 + }, +/obj/structure/mirror{ + pixel_y = 32 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/shipboard/brig/cells) "vWJ" = ( /obj/structure/machinery/landinglight/ds1/delaytwo{ dir = 4 @@ -75282,16 +75474,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull) -"vZJ" = ( -/obj/structure/sign/safety/intercom{ - pixel_x = 8; - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m39_submachinegun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "wan" = ( /obj/structure/surface/table/almayer, /obj/item/facepaint/brown, @@ -75504,15 +75686,6 @@ icon_state = "red" }, /area/almayer/shipboard/brig/main_office) -"wdv" = ( -/obj/structure/machinery/light{ - dir = 4 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/engineering/upper_engineering) "wdz" = ( /obj/effect/landmark/start/marine/engineer/charlie, /obj/effect/landmark/late_join/charlie, @@ -75847,6 +76020,12 @@ icon_state = "test_floor4" }, /area/almayer/medical/medical_science) +"wkA" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out" + }, +/turf/open/floor/almayer, +/area/almayer/command/lifeboat) "wkH" = ( /obj/structure/surface/table/reinforced/almayer_B, /obj/item/device/whistle{ @@ -75859,6 +76038,17 @@ icon_state = "bluefull" }, /area/almayer/command/cichallway) +"wkL" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/closet/secure_closet/guncabinet, +/obj/item/weapon/gun/rifle/l42a{ + pixel_y = 6 + }, +/obj/item/weapon/gun/rifle/l42a, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "wkM" = ( /obj/structure/machinery/door/poddoor/shutters/almayer{ id = "ARES StairsLower"; @@ -76100,13 +76290,6 @@ icon_state = "rasputin3" }, /area/almayer/powered/agent) -"wpj" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "E"; - pixel_x = 2 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) "wpw" = ( /obj/structure/bed/chair/comfy/ares{ dir = 1 @@ -76160,6 +76343,16 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hallways/stern_hallway) +"wqr" = ( +/obj/structure/sign/safety/terminal{ + pixel_x = 7; + pixel_y = 29 + }, +/obj/structure/filingcabinet, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "wqu" = ( /obj/structure/window/framed/almayer, /turf/open/floor/plating, @@ -76347,6 +76540,18 @@ /obj/item/reagent_container/food/snacks/sliceable/pizza/vegetablepizza, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/lower_hull/l_m_p) +"wuT" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + dir = 10; + icon_state = "orange" + }, +/area/almayer/engineering/upper_engineering/starboard) "wvb" = ( /obj/structure/pipes/standard/simple/hidden/supply{ dir = 4 @@ -76523,18 +76728,6 @@ icon_state = "bluefull" }, /area/almayer/command/cichallway) -"wyv" = ( -/obj/structure/machinery/door_control{ - id = "ARES JoeCryo"; - name = "Working Joe Cryogenics Lockdown"; - pixel_x = -24; - pixel_y = -8; - req_one_access_txt = "91;92" - }, -/obj/effect/landmark/late_join/working_joe, -/obj/effect/landmark/start/working_joe, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/command/airoom) "wyO" = ( /obj/structure/largecrate/random/barrel/red, /obj/structure/prop/invuln/overhead_pipe{ @@ -76586,13 +76779,6 @@ icon_state = "sterile_green" }, /area/almayer/medical/lower_medical_medbay) -"wAd" = ( -/obj/effect/decal/cleanable/dirt, -/obj/structure/machinery/light{ - dir = 8 - }, -/turf/open/floor/almayer, -/area/almayer/hull/upper_hull/u_f_p) "wAR" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -76826,6 +77012,18 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) +"wFJ" = ( +/obj/structure/toilet{ + dir = 8; + pixel_y = 8; + layer = 2.9 + }, +/obj/structure/window{ + pixel_y = -2; + layer = 2.95 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/living/commandbunks) "wFR" = ( /turf/open/floor/almayer, /area/almayer/living/gym) @@ -76866,6 +77064,13 @@ /obj/effect/landmark/late_join/delta, /turf/open/floor/plating/plating_catwalk, /area/almayer/squads/delta) +"wGI" = ( +/obj/effect/decal/cleanable/dirt, +/obj/structure/machinery/light{ + dir = 8 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "wGX" = ( /obj/structure/pipes/standard/manifold/hidden/supply{ dir = 1 @@ -76972,6 +77177,12 @@ icon_state = "plate" }, /area/almayer/hallways/vehiclehangar) +"wJB" = ( +/obj/structure/machinery/cryopod/right, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/airoom) "wJD" = ( /obj/structure/bed/chair{ dir = 8; @@ -76993,6 +77204,23 @@ "wJH" = ( /turf/closed/wall/almayer/research/containment/wall/east, /area/almayer/medical/containment/cell/cl) +"wJQ" = ( +/obj/item/trash/plate{ + pixel_x = 9; + pixel_y = 11 + }, +/obj/item/reagent_container/food/snacks/carpmeat{ + layer = 3.3; + pixel_y = 11; + pixel_x = 8 + }, +/obj/item/reagent_container/food/snacks/carpmeat{ + layer = 3.3; + pixel_y = 11; + pixel_x = 8 + }, +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "wKn" = ( /obj/structure/surface/rack, /obj/item/facepaint/sniper, @@ -77024,15 +77252,6 @@ }, /turf/open/floor/plating, /area/almayer/medical/containment) -"wKS" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" - }, -/turf/open/floor/almayer{ - dir = 6; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "wLi" = ( /obj/structure/machinery/door_control/airlock{ id = "s_engi"; @@ -77145,6 +77364,14 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_a_s) +"wMv" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "W" + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/auxiliary_officer_office) "wMG" = ( /obj/structure/machinery/cryopod/right{ pixel_y = 6 @@ -77194,6 +77421,14 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull) +"wNS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/lifeboat) "wNT" = ( /obj/structure/platform, /turf/open/floor/almayer, @@ -77275,16 +77510,6 @@ icon_state = "bluefull" }, /area/almayer/command/cichallway) -"wQa" = ( -/obj/structure/sign/safety/hazard{ - pixel_x = 15; - pixel_y = 32 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_m4a3_pistol, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "wQg" = ( /turf/open/floor/almayer{ dir = 1; @@ -77546,6 +77771,17 @@ "wVb" = ( /turf/closed/wall/almayer/outer, /area/almayer/hull/lower_hull/l_a_s) +"wVw" = ( +/obj/structure/machinery/light/small{ + dir = 8 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m39_submachinegun, +/turf/open/floor/plating/almayer, +/area/almayer/shipboard/brig/armory) "wVy" = ( /obj/structure/window/reinforced{ dir = 8 @@ -77657,22 +77893,6 @@ icon_state = "blue" }, /area/almayer/living/pilotbunks) -"wWJ" = ( -/obj/structure/machinery/light{ - dir = 8 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "S"; - pixel_y = -1 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" - }, -/area/almayer/living/port_emb) "wWL" = ( /obj/item/tool/screwdriver, /obj/structure/platform_decoration{ @@ -77792,14 +78012,18 @@ /turf/open/floor/plating, /area/almayer/engineering/ce_room) "wYZ" = ( -/obj/structure/machinery/door/airlock/almayer/secure/reinforced{ - name = "\improper Armourer's Workshop"; - req_access = null +/obj/structure/machinery/light{ + dir = 1 }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" +/obj/structure/machinery/photocopier{ + anchored = 0 }, -/area/almayer/hull/upper_hull/u_m_s) +/obj/structure/sign/poster/io{ + pixel_y = 32; + name = "propaganda poster" + }, +/turf/open/floor/wood/ship, +/area/almayer/command/corporateliason) "wZa" = ( /turf/open/floor/almayer{ icon_state = "redcorner" @@ -78048,20 +78272,22 @@ icon_state = "tcomms" }, /area/almayer/engineering/engine_core) +"xfk" = ( +/obj/structure/surface/rack, +/obj/item/stack/cable_coil, +/obj/item/attachable/flashlight/grip, +/obj/item/ammo_box/magazine/l42a{ + pixel_y = 14 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/hull/upper_hull/u_m_s) "xfm" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/structure/window/framed/almayer, /turf/open/floor/plating, /area/almayer/living/cafeteria_officer) -"xfw" = ( -/obj/structure/surface/table/almayer, -/obj/item/storage/fancy/cigarettes/lucky_strikes, -/obj/item/packageWrap, -/turf/open/floor/almayer{ - dir = 9; - icon_state = "green" - }, -/area/almayer/squads/req) "xfO" = ( /obj/effect/decal/warning_stripes{ icon_state = "E"; @@ -78130,16 +78356,6 @@ icon_state = "plating" }, /area/almayer/hallways/vehiclehangar) -"xgE" = ( -/obj/effect/decal/cleanable/dirt, -/obj/item/storage/toolbox/mechanical{ - pixel_x = 4; - pixel_y = -3 - }, -/turf/open/floor/almayer{ - icon_state = "plate" - }, -/area/almayer/hull/upper_hull/u_m_s) "xgJ" = ( /obj/structure/machinery/cm_vending/sorted/medical/blood, /obj/structure/machinery/light{ @@ -78233,6 +78449,14 @@ }, /turf/open/floor/carpet, /area/almayer/command/cichallway) +"xik" = ( +/obj/structure/machinery/shower{ + dir = 8 + }, +/obj/item/toy/inflatable_duck, +/obj/structure/window/reinforced, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cells) "xiz" = ( /obj/structure/prop/invuln/lattice_prop{ icon_state = "lattice12"; @@ -78260,18 +78484,14 @@ icon_state = "kitchen" }, /area/almayer/living/grunt_rnr) -"xjw" = ( -/obj/structure/pipes/standard/simple/hidden/supply{ - dir = 4 - }, -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 - }, -/turf/open/floor/almayer{ - icon_state = "dark_sterile" +"xjt" = ( +/obj/structure/surface/table/woodentable/fancy, +/obj/structure/machinery/computer/card{ + dir = 4; + pixel_x = 2 }, -/area/almayer/engineering/upper_engineering/port) +/turf/open/floor/carpet, +/area/almayer/living/commandbunks) "xjz" = ( /turf/open/floor/almayer{ icon_state = "plating_striped" @@ -78450,6 +78670,28 @@ icon_state = "test_floor4" }, /area/almayer/hull/lower_hull/l_a_p) +"xns" = ( +/obj/structure/machinery/door_control{ + id = "ARES JoeCryo"; + name = "Working Joe Cryogenics Lockdown"; + pixel_x = -24; + pixel_y = -8; + req_one_access_txt = "91;92" + }, +/obj/effect/landmark/late_join/working_joe, +/obj/effect/landmark/start/working_joe, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/command/airoom) +"xnz" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 1 + }, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "red" + }, +/area/almayer/command/lifeboat) "xnI" = ( /obj/effect/landmark/start/requisition, /turf/open/floor/plating/plating_catwalk, @@ -78506,6 +78748,20 @@ icon_state = "orange" }, /area/almayer/engineering/upper_engineering/port) +"xoS" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "N"; + pixel_y = 2 + }, +/obj/structure/reagent_dispensers/peppertank{ + pixel_y = -30 + }, +/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, +/turf/open/floor/almayer{ + dir = 5; + icon_state = "plating" + }, +/area/almayer/shipboard/brig/armory) "xpd" = ( /obj/structure/disposalpipe/segment, /obj/structure/pipes/standard/manifold/hidden/supply{ @@ -78523,6 +78779,23 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_p) +"xpi" = ( +/obj/structure/sink{ + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/obj/structure/mirror{ + pixel_x = -29 + }, +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "dark_sterile" + }, +/area/almayer/living/commandbunks) "xpo" = ( /obj/structure/machinery/light, /turf/open/floor/almayer{ @@ -78634,6 +78907,14 @@ icon_state = "plate" }, /area/almayer/shipboard/brig/perma) +"xrq" = ( +/obj/structure/closet/firecloset, +/obj/item/clothing/mask/gas, +/obj/item/clothing/mask/gas, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/lifeboat) "xrr" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -78684,12 +78965,6 @@ icon_state = "cargo" }, /area/almayer/hallways/vehiclehangar) -"xtg" = ( -/obj/structure/machinery/cm_vending/clothing/staff_officer_armory, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) "xtD" = ( /obj/structure/surface/table/almayer, /obj/item/tool/weldpack, @@ -78707,17 +78982,36 @@ icon_state = "sterile_green_side" }, /area/almayer/medical/lower_medical_lobby) -"xub" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 2 +"xtQ" = ( +/obj/structure/surface/rack, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = 7 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = -6; + pixel_y = -3 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = 9 + }, +/obj/item/ammo_magazine/rifle/l42a/ap{ + current_rounds = 0; + pixel_x = 5; + pixel_y = -3 + }, +/obj/structure/noticeboard{ + desc = "The note is haphazardly attached to the cork board by what looks like a bent firing pin. 'The order has come in to perform end of life service checks on all L42A service rifles, any that are defective are to be dis-assembled and packed into a crate and sent to to the cargo hold. L42A service rifles that are in working order after servicing, are to be locked in secure cabinets ready to be off-loaded at Chinook. Scheduled end of life service for the L42A - Complete'"; + pixel_y = 29 }, -/obj/structure/closet/secure_closet/guncabinet/red/mp_armory_m4ra_rifle, /turf/open/floor/almayer{ - dir = 5; - icon_state = "plating" + icon_state = "plate" }, -/area/almayer/shipboard/brig/armory) +/area/almayer/hull/upper_hull/u_m_s) "xuc" = ( /obj/structure/surface/table/almayer, /obj/item/tool/extinguisher, @@ -78900,6 +79194,17 @@ icon_state = "test_floor4" }, /area/almayer/hallways/aft_hallway) +"xxa" = ( +/obj/item/stack/sheet/cardboard{ + amount = 50 + }, +/obj/structure/surface/rack, +/obj/item/packageWrap, +/turf/open/floor/almayer{ + dir = 4; + icon_state = "green" + }, +/area/almayer/squads/req) "xxe" = ( /obj/structure/surface/rack, /obj/item/tool/crowbar, @@ -79061,6 +79366,15 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/hull/upper_hull/u_a_s) +"xyL" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "SE-out"; + pixel_x = 1 + }, +/turf/open/floor/almayer{ + icon_state = "mono" + }, +/area/almayer/lifeboat_pumps/south2) "xyY" = ( /obj/structure/pipes/standard/simple/hidden/supply, /obj/effect/decal/warning_stripes{ @@ -79138,10 +79452,6 @@ icon_state = "green" }, /area/almayer/squads/req) -"xAC" = ( -/obj/structure/surface/rack, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/engineering/upper_engineering/port) "xAI" = ( /obj/structure/platform{ dir = 1 @@ -79242,6 +79552,13 @@ icon_state = "test_floor4" }, /area/almayer/hull/upper_hull/u_m_p) +"xDj" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "E"; + pixel_x = 2 + }, +/turf/open/floor/almayer, +/area/almayer/hull/upper_hull/u_f_p) "xDn" = ( /turf/open/floor/almayer{ dir = 1; @@ -79539,12 +79856,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_f_s) -"xJn" = ( -/obj/structure/closet/emcloset, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/engineering/upper_engineering/starboard) "xJC" = ( /obj/structure/machinery/door/airlock/almayer/generic/corporate{ name = "Corporate Liaison's Closet" @@ -79568,6 +79879,12 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/hangar) +"xJT" = ( +/obj/structure/toilet{ + dir = 4 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/shipboard/brig/cells) "xKM" = ( /obj/structure/machinery/status_display{ pixel_x = 16; @@ -79757,6 +80074,14 @@ }, /turf/open/floor/almayer, /area/almayer/hallways/starboard_hallway) +"xNL" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "NW-out"; + pixel_x = -1; + pixel_y = 2 + }, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hallways/vehiclehangar) "xOL" = ( /obj/structure/machinery/disposal, /obj/structure/disposalpipe/trunk, @@ -80121,6 +80446,14 @@ icon_state = "plate" }, /area/almayer/hull/upper_hull/u_m_s) +"xUV" = ( +/obj/structure/bed/chair{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "plate" + }, +/area/almayer/command/combat_correspondent) "xVc" = ( /obj/effect/step_trigger/clone_cleaner, /obj/structure/machinery/door_control{ @@ -80259,6 +80592,11 @@ icon_state = "mono" }, /area/almayer/medical/medical_science) +"xYe" = ( +/obj/structure/surface/table/almayer, +/obj/item/tool/weldingtool, +/turf/open/floor/plating/plating_catwalk, +/area/almayer/hull/upper_hull/u_m_s) "xYf" = ( /obj/structure/machinery/cm_vending/clothing/sea, /turf/open/floor/almayer{ @@ -80282,6 +80620,15 @@ icon_state = "orange" }, /area/almayer/shipboard/brig/cells) +"xYr" = ( +/obj/structure/machinery/light, +/obj/structure/machinery/cm_vending/gear/commanding_officer{ + pixel_y = 0 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/living/commandbunks) "xYB" = ( /obj/structure/sign/safety/storage{ pixel_x = 8; @@ -80315,18 +80662,6 @@ }, /turf/open/floor/plating/plating_catwalk, /area/almayer/engineering/upper_engineering) -"xZf" = ( -/obj/structure/machinery/light, -/obj/structure/closet/secure_closet/guncabinet/red/cic_armory_mk1_rifle_ap, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/command/cic) -"xZz" = ( -/obj/structure/surface/table/almayer, -/obj/structure/machinery/faxmachine/uscm/command/capt, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) "xZI" = ( /obj/structure/prop/invuln/lattice_prop{ dir = 1; @@ -80520,10 +80855,6 @@ icon_state = "plate" }, /area/almayer/engineering/upper_engineering/port) -"ydr" = ( -/obj/structure/largecrate/supply/weapons/pistols, -/turf/open/floor/plating/plating_catwalk, -/area/almayer/hull/upper_hull/u_m_s) "ydx" = ( /obj/structure/sign/safety/hvac_old{ pixel_x = 8; @@ -80593,17 +80924,6 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"yeo" = ( -/obj/structure/machinery/cm_vending/clothing/dress{ - req_access = list(1) - }, -/turf/open/floor/wood/ship, -/area/almayer/living/commandbunks) -"yev" = ( -/obj/item/device/flashlight/lamp/green, -/obj/structure/surface/table/woodentable/fancy, -/turf/open/floor/carpet, -/area/almayer/living/commandbunks) "yeH" = ( /obj/structure/pipes/standard/simple/hidden/supply, /turf/open/floor/almayer, @@ -80647,13 +80967,18 @@ }, /turf/open/floor/wood/ship, /area/almayer/shipboard/brig/chief_mp_office) -"yeX" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "S" +"yff" = ( +/obj/structure/machinery/cm_vending/clothing/dress{ + density = 0; + pixel_y = 16 }, -/obj/structure/closet/secure_closet/guncabinet/blue/riot_control, -/turf/open/floor/plating/almayer, -/area/almayer/shipboard/brig/armory) +/obj/structure/machinery/light{ + dir = 4 + }, +/turf/open/floor/almayer{ + icon_state = "cargo" + }, +/area/almayer/command/cic) "yfm" = ( /obj/effect/landmark/start/marine/delta, /obj/effect/landmark/late_join/delta, @@ -80698,6 +81023,18 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) +"yfG" = ( +/obj/effect/decal/warning_stripes{ + icon_state = "S" + }, +/obj/structure/machinery/power/apc/almayer{ + dir = 8 + }, +/obj/item/storage/briefcase{ + pixel_y = 15 + }, +/turf/open/floor/wood/ship, +/area/almayer/living/commandbunks) "yfS" = ( /obj/structure/window/framed/almayer, /obj/structure/machinery/door/firedoor/border_only/almayer{ @@ -80714,18 +81051,6 @@ icon_state = "plate" }, /area/almayer/command/lifeboat) -"ygs" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "NE-out"; - pixel_y = 1 - }, -/obj/structure/machinery/door/airlock/almayer/generic{ - name = "\improper Bathroom" - }, -/turf/open/floor/almayer{ - icon_state = "test_floor4" - }, -/area/almayer/living/captain_mess) "ygy" = ( /obj/structure/machinery/light/small{ dir = 1 @@ -80741,16 +81066,6 @@ icon_state = "plate" }, /area/almayer/hull/lower_hull/l_m_s) -"ygM" = ( -/obj/structure/sign/safety/ammunition{ - pixel_x = 32; - pixel_y = 7 - }, -/obj/structure/closet/secure_closet/guncabinet/red/armory_shotgun, -/turf/open/floor/almayer{ - icon_state = "redfull" - }, -/area/almayer/medical/upper_medical) "yhI" = ( /turf/open/floor/almayer{ dir = 4; @@ -80872,16 +81187,6 @@ icon_state = "cargo" }, /area/almayer/hull/lower_hull/l_m_s) -"ykD" = ( -/obj/effect/decal/warning_stripes{ - icon_state = "N"; - pixel_y = 1 - }, -/turf/open/floor/almayer{ - dir = 5; - icon_state = "red" - }, -/area/almayer/command/lifeboat) "ykF" = ( /obj/structure/machinery/cm_vending/sorted/tech/tool_storage, /turf/open/floor/almayer{ @@ -80932,12 +81237,6 @@ icon_state = "plate" }, /area/almayer/squads/delta) -"ylg" = ( -/obj/structure/machinery/cryopod/right, -/turf/open/floor/almayer{ - icon_state = "cargo" - }, -/area/almayer/command/airoom) "ylJ" = ( /obj/structure/sign/safety/maint{ pixel_x = 8; @@ -89557,8 +89856,8 @@ mLJ eiO xFs xkd -eiH -aTV +teE +xJT xkd xkd xkd @@ -89760,9 +90059,9 @@ iqn eRL tmy xkd -rUB -dSn -soa +vWG +lJL +dQp xzu xkd xkd @@ -89963,8 +90262,8 @@ aJz dXy nHg xkd -ghX -rAv +xik +bjQ xkd eTo iHG @@ -91797,7 +92096,7 @@ eZH ohJ thL thL -aHT +uAL liZ rUk jVa @@ -92379,9 +92678,9 @@ pCi rPC rwS lrq -fFq +kTc uqo -rhD +wVw cqn gTx eRL @@ -92582,9 +92881,9 @@ ahE rPC nfI lrq -eTx +omu uqo -hGa +sYB cqn ldu eRL @@ -92785,9 +93084,9 @@ ahE rPC heV lrq -lCn +frJ uqo -xub +ktn cqn nBb mdS @@ -92988,9 +93287,9 @@ ahE wcn nBc lrq -ebt +vsI uqo -lLN +xoS lrq mAT lrq @@ -93191,7 +93490,7 @@ pCi wcn wcn lrq -yeX +mAr uqo fsT jnA @@ -93394,7 +93693,7 @@ pCi oCL wcn lrq -ebz +uZY uqo uqo uqo @@ -93597,7 +93896,7 @@ pCi rPC aou lrq -yeX +mAr uqo uvy tfO @@ -93910,8 +94209,8 @@ poR mGL pNp kcp -pNK -bIA +wMv +nCR alU uDn bKf @@ -94318,9 +94617,9 @@ bTS lxo qcy kcp -edM -edM -mcl +kmk +kmk +mIJ bLt bXX bKh @@ -94521,9 +94820,9 @@ oQM aqI aqI kcp -pUl -tXz -rYZ +jaK +jxP +xNL bLu bBB bBB @@ -97753,7 +98052,7 @@ aaa nXP ndx uNL -eRt +nDd soS sgy nsu @@ -97956,9 +98255,9 @@ aaa nXP hJp uNL -lUv +gka bwQ -gUr +oNf uNL aNw kXJ @@ -98300,7 +98599,7 @@ ukU bfP fvv vcK -wAd +wGI tuA tuA tuA @@ -99314,9 +99613,9 @@ vCO vCO vCO jxB -wpj -gDq -tJo +xDj +boc +eXS bGr hnV xEF @@ -99517,9 +99816,9 @@ wmT jhW mWD jxB -hWX -tYv -mRU +gvW +sWs +imJ xuB gpe xEF @@ -99680,7 +99979,7 @@ aad aai aai pCi -nMM +pmI avl avl agj @@ -99722,7 +100021,7 @@ aES aES aES aES -lDj +vbP uEv gpe xEF @@ -99881,20 +100180,20 @@ aaa aaa aad ahE -iuT -nna -svp +qKt +dKa +hdb avl agj agj -aew -bCO -hvH -hvH -hvH +oTM +mTc +sLZ +yfG +lQi kcN -cod -oqA +twI +ufL aic aov wVW @@ -100084,20 +100383,20 @@ aaa aaa aad ahE -afc -npB -umY +ooo +uaX +kfR avl agj -yeo +lDD agc -bIz +qfD agc -hvH -lQq +kJm +xYr kcN cod -oqA +ufL aic aov wVW @@ -100292,16 +100591,16 @@ wBY hJJ qCi agj -eBo +crw +wJQ agc agc -agc -ahY -mXj +kJm +rbE kcN -kcN -agj -amI +yff +ufL +aic aKq luZ alX @@ -100493,16 +100792,16 @@ pCi kwS avl avl -lIh +mRp agj -oMM -agc -agc -glU -rDd +nCx +tYM +mqb +kDK +jMx mXj -akk -alb +kcN +kcN agj aic aKq @@ -100698,14 +100997,14 @@ avl hCo lIh agj -kFk +keT hvH +bVs hvH hvH -ahZ -mXj -akl -alc +aOj +bQl +xpi agj bFA aov @@ -100901,16 +101200,16 @@ avl hMI lFb agj +dyj +fnv +bVs +iPu +dFb mXj -mXj -aoZ -aha -mXj -mXj -akm -mXj +wFJ +kJW agj -aox +aic aoA wVW teY @@ -101095,7 +101394,7 @@ bdH aaa aaa bdH -aaa +bdH aaa aad ahE @@ -101105,13 +101404,13 @@ iDT tDx agj mXj -tZB -hvH -hvH -hvH -adv -hvH -alj +mXj +lul +mXj +mXj +mXj +mXj +mXj agj aic aov @@ -101298,7 +101597,7 @@ bdH bdH bdH aaa -aaa +bdH aaa aad pCi @@ -101307,16 +101606,16 @@ dTt jgM lFb agj -eYC -agc -fNb -eSJ -agc -agc -hvH -alo +mXj +pjR +jND +aKk +aKk +nCU +faE +mXj agj -aic +amI aov wVW wVW @@ -101510,17 +101809,17 @@ avl jpJ lzH agj -uvZ -agc -agc -juN -pxG -agc -ocs +qlI +cdB +xjt +coD agc +ako +tYM +hGB agj aic -aov +acS wVW asQ awG @@ -101713,19 +102012,19 @@ avl llM lGL agj -geW -erZ -tMn -iVZ -aiW -aiW -akn -xyk -sBF -amY -vtT +eBE +hvH +agc +azm +pxG +fOv +agc +agc +agj +aic +sxW wVW -nww +abQ atN cEl sOi @@ -101916,21 +102215,21 @@ avl avl mrc agj -cCd -agc -agc -nwv -pxG -agc -ako +kSH +hvH +nTA +qmZ agc -agj -aic -aov +aiW +xyk +xyk +mDX +aTl +dLe wVW -qyJ +atx qEk -ksv +ajm wVW arP alX @@ -101942,7 +102241,7 @@ hkG wVW fvB qEk -aGi +iaa wVW aKn aKz @@ -102119,19 +102418,19 @@ pCi jTi nRq agj -bYd +kVT +hvH agc -qck -yev +qlp +pxG +tTk agc agc -akp -hGB agj -aic +fXP aov wVW -qyJ +atx qEk ato wVW @@ -102145,7 +102444,7 @@ aEB wVW fvB qEk -aGi +iaa wVW aKn aKz @@ -102322,19 +102621,19 @@ pCi avl myn agj -mXj -tZB +kNq hvH -ahv -aiF -aiF -akr -xZz +qck +gVd +agc +tan +kDK +iEz agj aic aov wVW -nbr +ssW qEk hrm wVW @@ -102348,7 +102647,7 @@ aEC wVW dNZ qEk -xZf +mje wVW aKn aKz @@ -102526,18 +102825,18 @@ cnX lIh agj mXj -tQM -lue -ahw -aiG -aiG -aks -alu +fnv +hvH +hvH +iNY +hvH +jhB +mXj agj aic aoA wVW -qyJ +atx jvX ato wVW @@ -102549,9 +102848,9 @@ alX aIf aED wVW -xtg +ryR jvX -aGi +iaa wVW aKn aKy @@ -103572,7 +103871,7 @@ aJc ecr ecr ecr -ygs +ohS aET nUv aJU @@ -103774,8 +104073,8 @@ cST aTz aUl aET -aWA -jgu +esC +nsQ aET mSi wHp @@ -103973,7 +104272,7 @@ aGV rvA aKE awF -cST +jzE aUw aUm aET @@ -104348,7 +104647,7 @@ awW add add add -juf +stu add add add @@ -104394,7 +104693,7 @@ baw aJU aJU aJU -hey +tBu aJU aJU aJU @@ -104748,7 +105047,7 @@ bdH aaC abs adq -jWH +myl ajI add fsU @@ -104806,7 +105105,7 @@ qys gBW aJU tiW -pUe +qgU pgD tQV aaC @@ -104978,13 +105277,13 @@ umS yjM qbO aqw -qRL +hnI bYe amO wZM aPm awF -aHk +nvG vGI aLp awF @@ -105189,7 +105488,7 @@ ejp awF aHn szU -aLt +fGa awF aRC aUw @@ -105357,7 +105656,7 @@ aaa aaY abs adq -ckE +tGj ajI add fsU @@ -105415,7 +105714,7 @@ qys gBW aJU tiW -hXD +bpw pgD tQV aaY @@ -105769,7 +106068,7 @@ aoC add add add -juf +stu add add add @@ -105815,7 +106114,7 @@ baw aJU aJU aJU -eyv +nnX aJU aJU aJU @@ -106493,7 +106792,7 @@ bsk sxu cBI bkA -nuI +eFG bej arX vSG @@ -106598,7 +106897,7 @@ aiX aiX aiX sHM -otK +kUh aiX aiX aiX @@ -106794,7 +107093,7 @@ awW awW awW fSm -vCz +hiy apl bbL bbL @@ -106997,7 +107296,7 @@ ajf ajf ajf oAO -dlN +pIZ aod qgG amC @@ -107200,7 +107499,7 @@ awW awW awW aSJ -dAi +isI dtM aii mce @@ -109235,7 +109534,7 @@ dtM akU ajC sqf -wQa +anp wjz fnA jZY @@ -109438,7 +109737,7 @@ dtM aii ajC sqf -udb +sOZ oNJ eDo eDo @@ -109641,7 +109940,7 @@ dtM ajt aik sqf -eTh +anq awn xsz jTj @@ -109844,11 +110143,11 @@ dtM aii ajC sqf -vZJ +anr awn tEi -iWb -ygM +asu +hbI sqf ajl vtx @@ -112303,7 +112602,7 @@ kSJ avj cGr awE -fUn +qkm wQv rne guC @@ -112915,7 +113214,7 @@ awE bqy bYj eUR -gEI +ucI nDh bYj xne @@ -114738,12 +115037,12 @@ ajr aii avm awE -hfm +wYZ rne rne fAo awE -knT +bhM wQv bBi awE @@ -115150,7 +115449,7 @@ rne wft awE hpf -pbl +qJU igp awE hoX @@ -115608,7 +115907,7 @@ kxd jgk nsY rSG -wWJ +rur oqS nsY lhu @@ -116013,7 +116312,7 @@ gsg vHq vvY nsY -pPV +rNb bxC jiU nsY @@ -116421,7 +116720,7 @@ wNl nGh fPp lqN -uoh +vlO nsY xCN pOB @@ -117088,7 +117387,7 @@ uVh nsY kzK lFh -mus +jYc pVA mzV pML @@ -117240,7 +117539,7 @@ aLf tRc qEW bdd -gGo +uva mLb wmz vpt @@ -118157,7 +118456,7 @@ abg caF aar aar -wYZ +lIl aar aar ael @@ -118359,10 +118658,10 @@ bWs abg caF aar -rcW +vUk sTB -jrV -qmr +lUA +tqd ael afE agT @@ -118562,9 +118861,9 @@ acO aJs cbN aar -lDK +fQY aap -eXU +elM vFb ael afH @@ -118765,10 +119064,10 @@ pNQ abx hTy aar -pJn +thR aao aao -erz +gDP ael afI agY @@ -118968,10 +119267,10 @@ acP bUE qFQ aar -jBY +xtQ aap aao -mYX +sxT ael afJ agY @@ -119171,10 +119470,10 @@ acG abx caF aar -ydr +com aap aao -mYX +sxT ael afK ahc @@ -119376,7 +119675,7 @@ lCz aar tAV sTB -uck +xfk wKn ael afL @@ -119577,7 +119876,7 @@ acG abx caF aar -wYZ +lIl aar aar aar @@ -119782,8 +120081,8 @@ arJ aar aao aao -rOZ -dfP +wkL +mts adO afM fpR @@ -119983,10 +120282,10 @@ jSY abx hTy aar -lAj +hLB aao aao -xgE +laY adO afN ahh @@ -120186,10 +120485,10 @@ acP bUE qFQ aar -jkL -iaE +xYe +kZH aao -mXa +frY adO afO ahh @@ -120389,10 +120688,10 @@ aJa abg ccf aar -cRg +mko uaZ aap -epK +svC adO jkj ahh @@ -121321,7 +121620,7 @@ rbY gwD bOK bPD -nSj +bYa bPD jOk bNB @@ -121524,7 +121823,7 @@ rbY bEc bKA bCA -gJs +bQS bCA bKA bEc @@ -121602,7 +121901,7 @@ aeA aeC aeC aeC -tpt +cVb aeC aeC aeC @@ -121650,7 +121949,7 @@ lJY vcE vcE vcE -oDO +iTd vcE vcE vcE @@ -121937,7 +122236,7 @@ bmD mYv doP jac -isS +xxa cai bdl bII @@ -122002,7 +122301,7 @@ aag aag abh acx -adQ +pMk ajs aeC wXh @@ -122062,7 +122361,7 @@ eyG kpo vcE kUV -mvH +xyL rRq uOi aag @@ -122204,8 +122503,8 @@ aah aah aah abi -acE -adZ +nGY +gyU ajk aeA asY @@ -122265,8 +122564,8 @@ deg wLu lJY xVS -fqg -uGa +kPH +knL uyC aah aah @@ -122328,7 +122627,7 @@ aYW bzV beB mCo -xfw +iwZ lBF bKA sbM @@ -122343,7 +122642,7 @@ bmD lyk bOR eHa -opj +cmo xAB mCo bJz @@ -122407,8 +122706,8 @@ bdH bdH bdH abi -acT -adZ +dEJ +gyU ajk aeA atp @@ -122468,8 +122767,8 @@ pfH wlF lJY xVS -fqg -mIA +kPH +qGU uyC bdH aaa @@ -122611,7 +122910,7 @@ aaa bdH abh acx -umR +gCB ajs aeC wXh @@ -122671,7 +122970,7 @@ eyG kpo vcE kUV -pPF +bxA rRq uOi bdH @@ -123023,7 +123322,7 @@ amH aeC aeC aeC -tpt +cVb aeC aeC aeC @@ -123071,7 +123370,7 @@ kKR vcE vcE vcE -oDO +iTd vcE vcE vcE @@ -123156,7 +123455,7 @@ bZr bNQ bNQ bNQ -ohl +bGz hMs cbw iEb @@ -123359,7 +123658,7 @@ bZr krN krN krN -llt +oqY can buH iEb @@ -123465,9 +123764,9 @@ alG anG apf oIB -tSF -qyM -jog +jgr +gGp +dMf oIB sFR vuv @@ -123562,7 +123861,7 @@ bZr ibc uly bNN -fXt +vbR pky cbv cbS @@ -123668,9 +123967,9 @@ alG aYD uPI oIB -hJh -vMC -iUC +fXE +kaS +aiQ oIB sFR vuv @@ -123871,9 +124170,9 @@ sUF anG apd oIB -ufS +wqr bZw -kaJ +xUV oIB sFR hPo @@ -123968,7 +124267,7 @@ bZr bKA dyx eYr -iii +bUo uys cbz cbU @@ -124075,8 +124374,8 @@ aYD aTS qgK tEB -llD -gGl +uBM +dXo oIB lBR nVu @@ -124171,7 +124470,7 @@ bmD bKA dyx hGN -ddN +pVx uys ttM iEb @@ -124278,8 +124577,8 @@ anG mPX oIB wKF -fOh -diM +hzb +ltU oIB fbx cFA @@ -124480,9 +124779,9 @@ aSC aZH iAB oIB -gqF -imW -qbh +phj +vEf +cNK oIB fbx cxo @@ -124683,8 +124982,8 @@ rFY ctC gPF oIB -kUb -rJg +opI +dha pxj oIB fbx @@ -126705,8 +127004,8 @@ auu aoT aFm xBe -cij -jRZ +aIV +qqr arH xBe alG @@ -127113,7 +127412,7 @@ anO nFX atv auV -ift +amE xBe alG aDZ @@ -127316,7 +127615,7 @@ atc nFX atv auV -ift +amE xBe alG aYj @@ -127720,8 +128019,8 @@ atq aDr aFu xBe -rwT -wdv +azp +qJf anV xBe alG @@ -130977,7 +131276,7 @@ vuv vuv jWh jWh -olk +sWC jWh jWh jWh @@ -131179,10 +131478,10 @@ vuv nfS emx jWh -qCg -xjw -pfA -xAC +duz +hXG +htG +doU jWh lbB uIv @@ -131382,10 +131681,10 @@ iEs cxo cxo jWh -uUV -rsW -djN -fnQ +axR +mIP +tcZ +fWi jWh lbB cKL @@ -131585,10 +131884,10 @@ vuv xct cxo jWh -dkS -vba -naQ -fnQ +vpv +pgw +rmE +fWi jWh xPZ pcv @@ -131769,7 +132068,7 @@ ptK dmQ psm psm -qyH +lDn arV wZX eky @@ -131783,7 +132082,7 @@ aDQ eky wZX arV -dtv +wkA vuv vuv cxo @@ -131971,8 +132270,8 @@ hWU dmQ aeq psm -aNe -hiN +xrq +vVu arV wZX eky @@ -131986,8 +132285,8 @@ aHe eky wZX arV -fXM -aNe +oIt +xrq vuv ahb cxo @@ -132174,8 +132473,8 @@ rwb dmQ jXY psm -atY -qkj +vlk +mKy aMT svl pzJ @@ -132189,8 +132488,8 @@ qDt pzJ sQO aMT -rWF -atY +wNS +vlk vuv woM nqD @@ -132378,7 +132677,7 @@ dmQ atD psm psm -vHl +vjd aRp jBX akS @@ -132392,7 +132691,7 @@ aHe tKf jBX aRp -edx +quy vuv vuv myC @@ -132774,8 +133073,8 @@ cuC bNM tgK tfb -skg -eaX +wuT +lMx pVZ pVZ pVZ @@ -132807,8 +133106,8 @@ qMu qMu qMu qMu -euY -iuw +jFY +qKY jHL wOK uIv @@ -132977,8 +133276,8 @@ cuC riJ kHY uhM -uvk -xJn +kdv +lkm cuC aag aag @@ -133010,8 +133309,8 @@ aag aag aag bYn -tAh -bfe +dRs +uAl rDb qjV rID @@ -133180,7 +133479,7 @@ cuC cuC umy iKZ -tiw +pnL cuC cuC mNX @@ -133214,7 +133513,7 @@ mNX qOk bYn bYn -qQL +cWE kHS rID bYn @@ -134207,8 +134506,8 @@ xVk xVk aad jbq -jXW -jcZ +kRg +uRs aDO qqu eky @@ -134216,8 +134515,8 @@ aNl eky dFk aDO -nzI -jXW +nPY +kRg jbq ajZ xVk @@ -134410,8 +134709,8 @@ xVk xVk aad jbq -qtR -jWC +hBL +dID eky eky nJu @@ -134419,8 +134718,8 @@ aNl eky eky eky -aDc -qtR +etn +hBL jbq ajZ xVk @@ -134614,7 +134913,7 @@ xVk eJQ aPw aHe -dnJ +mRQ eky eky eky @@ -134622,7 +134921,7 @@ aNl eky eky eky -hfw +biJ aHe aPw eJQ @@ -136441,7 +136740,7 @@ xVk oee aPw aHe -tqB +iTe eky eky atg @@ -136449,7 +136748,7 @@ aBE ouB eky eky -gwu +qPX aHe aPw oee @@ -136643,8 +136942,8 @@ xVk xVk aad jbq -aNe -jWC +xrq +dID eky eky esT @@ -136652,8 +136951,8 @@ nYE orH eky eky -aDc -aNe +etn +xrq jbq ajZ xVk @@ -136846,8 +137145,8 @@ xVk xVk aad jbq -atY -jWC +vlk +dID eky eky bAe @@ -136855,8 +137154,8 @@ aBG sGh eky eky -aDc -atY +etn +vlk jbq ajZ xVk @@ -137049,8 +137348,8 @@ xVk xVk aad aPw -qpU -ykD +uYd +xnz dqj eky xaS @@ -137058,8 +137357,8 @@ ejt mPf eky gUV -wKS -qpU +neG +uYd aPw ajZ xVk @@ -140146,9 +140445,9 @@ lmz lmz lmz daz -rzf -bRo -wyv +ltc +eXk +xns pTt gAe rCi @@ -140349,9 +140648,9 @@ lmz lmz lmz daz -czG -ylg -oIY +tId +wJB +tJN daz daz daz From d95be7e65ead9d09af23a09b2f59b473f62d61e1 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 03:33:23 +0000 Subject: [PATCH 35/65] Automatic changelog for PR #4827 [ci skip] --- html/changelogs/AutoChangeLog-pr-4827.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4827.yml diff --git a/html/changelogs/AutoChangeLog-pr-4827.yml b/html/changelogs/AutoChangeLog-pr-4827.yml new file mode 100644 index 0000000000..b95ce40e46 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4827.yml @@ -0,0 +1,4 @@ +author: "LC4492" +delete-after: True +changes: + - maptweak: "Changes to the CO office: The bathroom now faces into the CO's bedroom, and not to his main office. Victory cabinet have been moved to the Officer's mess because of logical issues. Extra-detail to the office, including an exclusive stamp, table flags and others. The safe is now inside the CO's bedroom, and not in his office. The energy APC is now inside the CO's bedroom, and not in his office. Jones finally have a BED again, or something like that. Other minor changes to objects, such the addition of a cane, a box of glasses for serving guests, etc." \ No newline at end of file From 8f5e5e16e5d8e969939491f7fd9dd794a6af7060 Mon Sep 17 00:00:00 2001 From: Steelpoint <6595389+Steelpoint@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:37:38 +0800 Subject: [PATCH 36/65] Break Up Secure Storage LV-624: V2 (#4944) Breaks open the secure storage on LV-624. Remake of #4767 Mapping changes are identical, however this PR has also removed buttons that reference the now removed secure dome shutters from the rest of the map, and similar nightmare inserts. # Explain why it's good for the game Survivor holds on 624 are usually a case of either the survivors running and gunning or hiding in secure storage for 18 minutes until the xenos reach T3, then its a case of if the Xenos can breach secure storage before the Marines arrive. Secure storage is simply not a fun exercise for both sides, if survivors are going to survive there should be more effort than hiding in a pre-made bunker. I should note that this does not make Secure Storage a impossible hold, only that its now not 100% inaccessible to xenos until they reach T3. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: maptweak: Secure Storage on LV-624 has been broken open, making it far less defendable but easier to access. /:cl: Co-authored-by: Steelpoint --- maps/map_files/LV624/LV624.dmm | 161 ++++++++---------- maps/map_files/LV624/armory/10.cheese.dmm | 6 - maps/map_files/LV624/armory/10.extra.dmm | 6 - maps/map_files/LV624/armory/10.looted.dmm | 14 +- maps/map_files/LV624/science/10.yautja.dmm | 14 +- .../LV624/science/40.fullylocked.dmm | 13 +- 6 files changed, 77 insertions(+), 137 deletions(-) diff --git a/maps/map_files/LV624/LV624.dmm b/maps/map_files/LV624/LV624.dmm index ba11b0b8ee..af507ab907 100644 --- a/maps/map_files/LV624/LV624.dmm +++ b/maps/map_files/LV624/LV624.dmm @@ -9229,12 +9229,6 @@ /obj/effect/landmark/crap_item, /obj/effect/landmark/crap_item, /obj/item/clothing/suit/armor/vest/security, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, @@ -11199,32 +11193,11 @@ /obj/item/ore/silver, /turf/open/floor/greengrid, /area/lv624/lazarus/secure_storage) -"aWb" = ( -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, -/obj/structure/machinery/door_control{ - id = "secure_outer_blast"; - name = "Secure Outer Doors"; - pixel_x = 25; - pixel_y = -5 - }, -/turf/open/floor/greengrid, -/area/lv624/lazarus/secure_storage) "aWc" = ( /obj/structure/computerframe{ anchored = 1 }, -/obj/structure/machinery/door_control{ - id = "secure_outer_blast"; - name = "Secure Outer Doors"; - pixel_x = 25; - pixel_y = -5 - }, -/turf/open/floor/greengrid, +/turf/open/floor/plating, /area/lv624/lazarus/secure_storage) "aWd" = ( /obj/structure/machinery/cm_vending/sorted/tech/comp_storage, @@ -11342,24 +11315,7 @@ /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/south_west_jungle) -"aWu" = ( -/obj/structure/machinery/door/poddoor/almayer{ - dir = 4; - id = "secure_inner_blast"; - layer = 3.3; - name = "\improper Secure Armory Blast Door"; - unacidable = 1 - }, -/turf/open/floor/greengrid, -/area/lv624/lazarus/secure_storage) "aWv" = ( -/obj/structure/machinery/door/poddoor/almayer{ - dir = 4; - id = "secure_outer_blast"; - layer = 3.3; - name = "\improper Secure Armory Blast Door"; - unacidable = 1 - }, /turf/open/floor/plating{ icon_state = "platebotc" }, @@ -13900,6 +13856,10 @@ "dLY" = ( /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/east_jungle) +"dMc" = ( +/obj/structure/flora/jungle/planttop1, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_central_jungle) "dMF" = ( /obj/structure/surface/table/reinforced/prison{ color = "#6b675e" @@ -14051,6 +14011,9 @@ icon_state = "bot" }, /area/lv624/lazarus/landing_zones/lz1) +"ebr" = ( +/turf/open/gm/dirtgrassborder/east, +/area/lv624/ground/jungle/south_central_jungle) "ebS" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/east, @@ -17042,6 +17005,10 @@ /obj/structure/flora/jungle/vines/light_3, /turf/open/gm/dirtgrassborder/grassdirt_corner2/south_west, /area/lv624/ground/caves/sand_temple) +"ksM" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_central_jungle) "ksQ" = ( /obj/structure/surface/rack, /obj/item/storage/toolbox/mechanical{ @@ -17189,6 +17156,10 @@ icon_state = "vault" }, /area/lv624/lazarus/quartstorage) +"kBq" = ( +/obj/structure/flora/bush/ausbushes/ausbush, +/turf/open/gm/dirtgrassborder/grassdirt_corner/south_west, +/area/lv624/ground/jungle/south_west_jungle) "kCD" = ( /obj/structure/flora/bush/ausbushes/var3/leafybush, /turf/open/auto_turf/strata_grass/layer1, @@ -18026,6 +17997,9 @@ icon_state = "grass1" }, /area/lv624/ground/barrens/south_eastern_barrens) +"mkn" = ( +/turf/open/floor/plating, +/area/lv624/lazarus/secure_storage) "mko" = ( /obj/structure/fence, /turf/open/gm/dirtgrassborder/north, @@ -21614,6 +21588,11 @@ }, /turf/open/gm/dirt, /area/lv624/ground/caves/south_central_caves) +"sWk" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg3" + }, +/area/lv624/lazarus/secure_storage) "sWy" = ( /obj/effect/landmark/monkey_spawn, /turf/open/gm/grass/grass1, @@ -22728,6 +22707,10 @@ "uWJ" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/caves/south_west_caves) +"uXV" = ( +/obj/structure/flora/bush/ausbushes/lavendergrass, +/turf/open/gm/dirt, +/area/lv624/ground/jungle/south_central_jungle) "uXW" = ( /obj/structure/barricade/sandbags/wired, /turf/open/floor/wood{ @@ -23192,6 +23175,10 @@ /obj/structure/flora/jungle/vines/light_1, /turf/open/gm/grass/grass1, /area/lv624/ground/jungle/north_east_jungle) +"vUj" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/south, +/area/lv624/ground/jungle/south_west_jungle) "vUw" = ( /obj/structure/flora/bush/ausbushes/var3/fullgrass, /turf/open/gm/dirt, @@ -23205,6 +23192,9 @@ /obj/effect/landmark/objective_landmark/medium, /turf/open/floor/greengrid, /area/lv624/lazarus/secure_storage) +"vVe" = ( +/turf/open/gm/dirtgrassborder/grassdirt_corner/south_east, +/area/lv624/ground/jungle/south_central_jungle) "vVf" = ( /turf/open/floor{ dir = 5; @@ -23510,18 +23500,6 @@ /obj/structure/flora/bush/ausbushes/var3/ywflowers, /turf/open/auto_turf/strata_grass/layer1, /area/lv624/ground/caves/south_central_caves) -"wAe" = ( -/obj/effect/decal/cleanable/blood/splatter, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" - }, -/area/lv624/lazarus/research) "wAF" = ( /obj/effect/decal/grass_overlay/grass1/inner{ dir = 1 @@ -24147,6 +24125,11 @@ /obj/item/storage/box/lights/mixed, /turf/open/floor/vault, /area/lv624/lazarus/quartstorage) +"xLT" = ( +/turf/open/floor/plating{ + icon_state = "platingdmg1" + }, +/area/lv624/lazarus/secure_storage) "xNi" = ( /obj/effect/landmark/structure_spawner/setup/distress/xeno_weed_node, /obj/effect/decal/grass_overlay/grass1{ @@ -24157,6 +24140,10 @@ "xNK" = ( /turf/open/gm/dirt, /area/lv624/ground/barrens/containers) +"xNQ" = ( +/obj/structure/flora/bush/ausbushes/var3/sparsegrass, +/turf/open/gm/dirtgrassborder/east, +/area/lv624/ground/jungle/south_central_jungle) "xPk" = ( /turf/open/gm/dirtgrassborder/grassdirt_corner2/north_west, /area/lv624/ground/colony/south_medbay_road) @@ -33500,10 +33487,10 @@ aTf aTf aTf aUQ -aWb aUQ aUQ aUQ +sWk aUQ aUQ aTf @@ -33729,11 +33716,11 @@ aTf aTf aTf aTf -aWu -aWu -aWu -aTf -aTf +mkn +xLT +mkn +xLT +sWk aTf aTf aXh @@ -33957,13 +33944,13 @@ efp aTf aTf aWc -aUQ -aUQ -aUQ -aTf -aTf -aTf -cWm +mkn +mkn +sWk +mkn +mkn +xLT +kBq aXh aXh aKb @@ -34185,13 +34172,13 @@ efp efp aTf aTf +xLT aWv aWv -aWv -aTf -aXh -aXh -aXh +xLT +xTT +xTT +vUj qGH aLj aXk @@ -34416,10 +34403,10 @@ uSq qIO qIO qIO -ntL -mnK -kxI -wkP +qIO +uXV +qtj +dMc knp iIU kZw @@ -34644,10 +34631,10 @@ uSq njC qIO qIO -ntL -kxI -tsa -kxI +qIO +qtj +qtj +ksM rox wqz kZw @@ -34873,9 +34860,9 @@ hDX qIO qIO aXH -kxI -gGd -kxI +ebr +xNQ +vVe kxI wbK rHp @@ -41666,7 +41653,7 @@ auV atU avE atp -wAe +awr atU axH aum diff --git a/maps/map_files/LV624/armory/10.cheese.dmm b/maps/map_files/LV624/armory/10.cheese.dmm index 26bfd92837..cee714b1c1 100644 --- a/maps/map_files/LV624/armory/10.cheese.dmm +++ b/maps/map_files/LV624/armory/10.cheese.dmm @@ -182,12 +182,6 @@ pixel_x = 8; pixel_y = -4 }, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, diff --git a/maps/map_files/LV624/armory/10.extra.dmm b/maps/map_files/LV624/armory/10.extra.dmm index f9c0f47729..7086e945d1 100644 --- a/maps/map_files/LV624/armory/10.extra.dmm +++ b/maps/map_files/LV624/armory/10.extra.dmm @@ -187,12 +187,6 @@ /obj/effect/landmark/crap_item, /obj/item/ammo_magazine/smg/m39/extended, /obj/item/weapon/gun/smg/m39, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, /turf/open/floor{ icon_state = "cult" }, diff --git a/maps/map_files/LV624/armory/10.looted.dmm b/maps/map_files/LV624/armory/10.looted.dmm index 478a3db3ea..b81e066081 100644 --- a/maps/map_files/LV624/armory/10.looted.dmm +++ b/maps/map_files/LV624/armory/10.looted.dmm @@ -186,18 +186,6 @@ icon_state = "cult" }, /area/lv624/lazarus/armory) -"K" = ( -/obj/item/stack/sheet/metal, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = 25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "cult" - }, -/area/lv624/lazarus/armory) "T" = ( /obj/structure/machinery/door_control{ id = "garage_blast"; @@ -272,7 +260,7 @@ i w w w -K +w p i "} diff --git a/maps/map_files/LV624/science/10.yautja.dmm b/maps/map_files/LV624/science/10.yautja.dmm index c77bacd352..04e671be32 100644 --- a/maps/map_files/LV624/science/10.yautja.dmm +++ b/maps/map_files/LV624/science/10.yautja.dmm @@ -538,18 +538,6 @@ icon_state = "white" }, /area/lv624/lazarus/research) -"WJ" = ( -/obj/effect/landmark/crap_item, -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" - }, -/area/lv624/lazarus/research) "Zw" = ( /obj/structure/surface/table, /obj/item/storage/fancy/vials/random, @@ -670,7 +658,7 @@ al ar aJ Lo -WJ +gd ar aZ CC diff --git a/maps/map_files/LV624/science/40.fullylocked.dmm b/maps/map_files/LV624/science/40.fullylocked.dmm index 8e523f6c7e..933de359a4 100644 --- a/maps/map_files/LV624/science/40.fullylocked.dmm +++ b/maps/map_files/LV624/science/40.fullylocked.dmm @@ -417,17 +417,6 @@ "bF" = ( /turf/closed/wall/strata_ice/jungle, /area/lv624/ground/jungle/central_jungle) -"gu" = ( -/obj/structure/machinery/door_control{ - id = "secure_inner_blast"; - name = "Secure Inner Doors"; - pixel_x = -25; - pixel_y = 5 - }, -/turf/open/floor{ - icon_state = "white" - }, -/area/lv624/lazarus/research) "ky" = ( /obj/effect/landmark/objective_landmark/science, /turf/open/floor{ @@ -608,7 +597,7 @@ ay au aQ Kl -gu +ak au bp ay From 1b85e53909047dc7c043b15ba6394d75dfbd9b78 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 03:45:54 +0000 Subject: [PATCH 37/65] Automatic changelog for PR #4944 [ci skip] --- html/changelogs/AutoChangeLog-pr-4944.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4944.yml diff --git a/html/changelogs/AutoChangeLog-pr-4944.yml b/html/changelogs/AutoChangeLog-pr-4944.yml new file mode 100644 index 0000000000..0c8af20f86 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4944.yml @@ -0,0 +1,4 @@ +author: "Steelpoint" +delete-after: True +changes: + - maptweak: "Secure Storage on LV-624 has been broken open, making it far less defendable but easier to access." \ No newline at end of file From c448d8aa5e253f92d4ad3a4306708a91ff9367c1 Mon Sep 17 00:00:00 2001 From: silencer-pl <103842328+silencer-pl@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:32:43 -0500 Subject: [PATCH 38/65] Adds DISCORDURL to the example config (#5002) # About the pull request This adds a commented DISCORDURL entry to the example config in the files, along with a comment explaining its use. This entry is currently missing and is not mentioned anywhere in the files so unless you already know what you are looking for, you are forced to dig to get the exact string. # Explain why it's good for the game Config file clarity and general user friendliness is good. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
This does not seem like a front facing change at all, so did not include a changelog. --- config/example/config.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/config/example/config.txt b/config/example/config.txt index 8e8bb2b754..8a976e02a5 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -140,6 +140,9 @@ RULESURL https://cm-ss13.com/viewtopic.php?f=57&t=5094 ## Ban appeals URL - usually for a forum or wherever people should go to contact your admins. BANAPPEALS https://cm-ss13.com/viewforum.php?f=76 +## Discord URL - uncomment and add a valid Discord invite link (remember to make it a permanent one, since it does not default to it) to make the Discord button work properly. +## DISCORDURL + ## In-game features ## Remove the # to show a popup 'reply to' window to every non-admin that recieves an adminPM. ## The intention is to make adminPMs more visible. (although I fnd popups annoying so this defaults to off) From cbfb9f31da9d858240ab9f543c37d0171e4825c7 Mon Sep 17 00:00:00 2001 From: fira Date: Wed, 22 Nov 2023 20:08:17 +0100 Subject: [PATCH 39/65] Makes Thunderdome Floor Explosion-Proof (#4994) # About the pull request Explosions could permanently mess with the tdome floor. This looks ugly and happens frequently with the amount of abombs thrown in it. # Explain why it's good for the game Admin level looks cleaner and clearer. # Testing Photographs and Procedure Drop-Bomb enter enter DMM edited in-place via regex, shouldn't be any mapmerging issues # Changelog :cl: fix: The Thunderdome floor is now explosion-proof. /:cl: --- code/game/turfs/floor_types.dm | 7 ++++ maps/map_files/generic/Admin_level.dmm | 52 +++++++++++++------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/code/game/turfs/floor_types.dm b/code/game/turfs/floor_types.dm index 4e47fd004f..e9c6b9a204 100644 --- a/code/game/turfs/floor_types.dm +++ b/code/game/turfs/floor_types.dm @@ -203,6 +203,13 @@ icon_state = "default" plating_type = /turf/open/floor/plating/almayer +/// Admin level thunderdome floor. Doesn't get damaged by explosions and such for pristine testing +/turf/open/floor/tdome + icon = 'icons/turf/almayer.dmi' + icon_state = "plating" + plating_type = /turf/open/floor/tdome + hull_floor = TRUE + //Cargo elevator /turf/open/floor/almayer/empty name = "empty space" diff --git a/maps/map_files/generic/Admin_level.dmm b/maps/map_files/generic/Admin_level.dmm index 43b3d26ec3..d085d7a99b 100644 --- a/maps/map_files/generic/Admin_level.dmm +++ b/maps/map_files/generic/Admin_level.dmm @@ -12,7 +12,7 @@ /turf/open/floor/wood/ship, /area/adminlevel/ert_station) "ad" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -27,7 +27,7 @@ id = "tdome_observer"; name = "\improper Observer Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -63,7 +63,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "W" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -72,7 +72,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "E" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -83,7 +83,7 @@ id = "tdome_t2"; name = "\improper Team 2 Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "test_floor4" }, /area/tdome) @@ -101,7 +101,7 @@ /turf/open/space, /area/space) "aE" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y0" }, @@ -683,7 +683,7 @@ /obj/item/device/binoculars{ pixel_y = 4 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -896,7 +896,7 @@ }, /area/adminlevel/ert_station/shuttle_dispatch) "wj" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y2" }, @@ -921,7 +921,7 @@ /area/adminlevel/ert_station) "wv" = ( /obj/structure/machinery/vending/snack, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1147,7 +1147,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "E" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1163,7 +1163,7 @@ /obj/structure/flora/pottedplant{ icon_state = "pottedplant_20" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1277,13 +1277,13 @@ /turf/open/floor/plating/almayer, /area/adminlevel/ert_station/shuttle_dispatch) "DV" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "tcomms" }, /area/tdome) "Ee" = ( /obj/effect/landmark/thunderdome/one, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1375,7 +1375,7 @@ "Fw" = ( /obj/structure/surface/table/almayer, /obj/item/storage/fancy/cigar, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1639,7 +1639,7 @@ /turf/closed/wall/mineral/gold, /area/adminlevel/ert_station) "Kq" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "redfull" }, /area/tdome/tdome2) @@ -1738,7 +1738,7 @@ /obj/structure/disposalpipe/trunk{ dir = 4 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1871,7 +1871,7 @@ /area/adminlevel/ert_station) "NU" = ( /obj/structure/machinery/vending/cola, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1937,7 +1937,7 @@ /obj/effect/decal/warning_stripes{ icon_state = "W" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -1967,13 +1967,13 @@ /area/adminlevel/simulation) "PF" = ( /obj/effect/landmark/thunderdome/two, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, /area/tdome/tdome2) "PJ" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 1; icon_state = "w-y1" }, @@ -2041,7 +2041,7 @@ /area/adminlevel/ert_station) "QL" = ( /obj/structure/bed/chair/comfy/black, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "tcomms" }, /area/tdome/tdomeobserve) @@ -2095,7 +2095,7 @@ id = "tdome_t1"; name = "\improper Team 1 Shutters" }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "test_floor4" }, /area/tdome) @@ -2165,7 +2165,7 @@ name = "Observer Shutters"; pixel_y = 9 }, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2313,7 +2313,7 @@ /area/adminlevel/ert_station) "VD" = ( /obj/structure/machinery/vending/cigarette/free, -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2483,7 +2483,7 @@ }, /area/adminlevel/ert_station) "YP" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ dir = 5; icon_state = "plating" }, @@ -2498,7 +2498,7 @@ /turf/open/floor/plating/plating_catwalk, /area/adminlevel/ert_station) "Zd" = ( -/turf/open/floor/almayer{ +/turf/open/floor/tdome{ icon_state = "bluefull" }, /area/tdome/tdome1) From 876259e9e0f21cd24e2ea0a1d188bf3187bfb37c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 19:23:53 +0000 Subject: [PATCH 40/65] Automatic changelog for PR #4994 [ci skip] --- html/changelogs/AutoChangeLog-pr-4994.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4994.yml diff --git a/html/changelogs/AutoChangeLog-pr-4994.yml b/html/changelogs/AutoChangeLog-pr-4994.yml new file mode 100644 index 0000000000..2ace9428aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4994.yml @@ -0,0 +1,4 @@ +author: "fira" +delete-after: True +changes: + - bugfix: "The Thunderdome floor is now explosion-proof." \ No newline at end of file From fa6ee9c0498a15d07664297c2127081f1e3799f6 Mon Sep 17 00:00:00 2001 From: Sort1eEnMer <151575280+Sort1eEnMer@users.noreply.github.com> Date: Wed, 22 Nov 2023 13:20:12 -0600 Subject: [PATCH 41/65] Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description (#4987) # About the pull request Matches the unlock time given in the refused nuke timelock message with the time given in the nuke's techtree description. # Explain why it's good for the game It was confusing seeing two different numbers for when the nuke would be unlocked. # Testing Photographs and Procedure Gave myself tech points, tried to unlock nuke early, time was correct after commit. # Changelog :cl: SortieEnMer qol: Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description / :cl: --- code/modules/cm_tech/techs/marine/tier4/nuke.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/cm_tech/techs/marine/tier4/nuke.dm b/code/modules/cm_tech/techs/marine/tier4/nuke.dm index f970f37a3f..932caa4a68 100644 --- a/code/modules/cm_tech/techs/marine/tier4/nuke.dm +++ b/code/modules/cm_tech/techs/marine/tier4/nuke.dm @@ -36,7 +36,7 @@ return if(ROUND_TIME < NUKE_UNLOCK_TIME) - to_chat(unlocking_mob, SPAN_WARNING("You cannot purchase this node before [NUKE_UNLOCK_TIME / (1 MINUTES)] minutes into the operation.")) + to_chat(unlocking_mob, SPAN_WARNING("You cannot purchase this node before [Ceiling((NUKE_UNLOCK_TIME + SSticker.round_start_time) / (1 MINUTES))] minutes into the operation.")) return FALSE return TRUE From 43d197a373d5968979ebdbc51bd1a5a7a764646e Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 19:39:34 +0000 Subject: [PATCH 42/65] Automatic changelog for PR #4987 [ci skip] --- html/changelogs/AutoChangeLog-pr-4987.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4987.yml diff --git a/html/changelogs/AutoChangeLog-pr-4987.yml b/html/changelogs/AutoChangeLog-pr-4987.yml new file mode 100644 index 0000000000..ef48b7dd6e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4987.yml @@ -0,0 +1,4 @@ +author: "SortieEnMer" +delete-after: True +changes: + - qol: "Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description" \ No newline at end of file From 2dfbb94db367141b5ce511c1bcf42b6946adb9be Mon Sep 17 00:00:00 2001 From: zzzmike <85382350+zzzmike@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:21:11 -0800 Subject: [PATCH 43/65] Clarity on hijack announcements (#4989) # About the pull request Makes it clear that pods will also not crash at 100% fuel. And minor change to make the announcement flow a bit better. # Explain why it's good for the game Makes game mechanics a bit more clear for new players. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: qol: ARES hijack announcement specifies that pods will not crash at 100% fuel /:cl: --- code/controllers/subsystem/hijack.dm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/code/controllers/subsystem/hijack.dm b/code/controllers/subsystem/hijack.dm index 55b5aa75ca..a256a7f2a8 100644 --- a/code/controllers/subsystem/hijack.dm +++ b/code/controllers/subsystem/hijack.dm @@ -216,13 +216,13 @@ SUBSYSTEM_DEF(hijack) switch(announce) if(1) - marine_announcement("Emergency fuel replenishment at 25 percent. Lifeboat emergency early launch now available.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 25 percent. Lifeboat emergency early launch is now available.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(2) - marine_announcement("Emergency fuel replenishment at 50 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 50 percent.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(3) - marine_announcement("Emergency fuel replenishment at 75 percent.[marine_warning_areas ? "\nTo increase speed restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 75 percent.[marine_warning_areas ? "\nTo increase speed, restore power to the following areas: [marine_warning_areas]" : " All fueling areas operational."]", HIJACK_ANNOUNCE) if(4) - marine_announcement("Emergency fuel replenishment at 100 percent. Safe utilization of lifeboats now possible.", HIJACK_ANNOUNCE) + marine_announcement("Emergency fuel replenishment is at 100 percent. Safe utilization of lifeboats and pods is now possible.", HIJACK_ANNOUNCE) if(!admin_sd_blocked) addtimer(CALLBACK(src, PROC_REF(unlock_self_destruct)), 8 SECONDS) From 8d5f3d38ddee66c1d1a05e36e7843518023ee64c Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:01:05 +0000 Subject: [PATCH 44/65] Automatic changelog for PR #4989 [ci skip] --- html/changelogs/AutoChangeLog-pr-4989.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4989.yml diff --git a/html/changelogs/AutoChangeLog-pr-4989.yml b/html/changelogs/AutoChangeLog-pr-4989.yml new file mode 100644 index 0000000000..062eaf000f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4989.yml @@ -0,0 +1,4 @@ +author: "zzzmike" +delete-after: True +changes: + - qol: "ARES hijack announcement specifies that pods will not crash at 100% fuel" \ No newline at end of file From c2aeb60871c36165ff4e7bf91df0f8749d833bad Mon Sep 17 00:00:00 2001 From: Drathek <76988376+Drulikar@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:21:31 -0800 Subject: [PATCH 45/65] Fix resin doors not closing on mob/living if they are merged with weeds (#4990) # About the pull request This PR simply changes the mob/living check in `/obj/structure/mineral_door/resin/Close()` to also account for whether they are merged with the weeds. As soon as xeno corpses are also merging with weeds this will handle them too. # Explain why it's good for the game Although I think this is a very rare situation, it can be especially confusing if a fully weeded corpse that intentionally is hard to see is causing a door to not close (seemingly arbitrarily). # Testing Photographs and Procedure
Screenshots & Videos https://github.com/cmss13-devs/cmss13/assets/76988376/4770ff65-c484-4e88-9381-19dfad22ffae
# Changelog :cl: Drathek fix: Resin doors will now close on dead mobs that are merged with weeds (currently only human). fix: Resin doors will now restart their closing timer each open making the delay to close consistent. code: Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently merged with weeds. /:cl: --- code/__DEFINES/traits.dm | 2 ++ code/datums/components/weed_food.dm | 2 ++ code/modules/cm_aliens/XenoStructures.dm | 31 ++++++++++++++---------- 3 files changed, 22 insertions(+), 13 deletions(-) diff --git a/code/__DEFINES/traits.dm b/code/__DEFINES/traits.dm index af8af22ca7..7f69a4acc4 100644 --- a/code/__DEFINES/traits.dm +++ b/code/__DEFINES/traits.dm @@ -147,6 +147,8 @@ #define TRAIT_IMMOBILIZED "immobilized" /// Apply this to make a mob not dense, and remove it when you want it to no longer make them undense, other sorces of undesity will still apply. Always define a unique source when adding a new instance of this! #define TRAIT_UNDENSE "undense" +/// Apply this to identify a mob as merged with weeds +#define TRAIT_MERGED_WITH_WEEDS "merged_with_weeds" // SPECIES TRAITS /// Knowledge of Yautja technology diff --git a/code/datums/components/weed_food.dm b/code/datums/components/weed_food.dm index 16be8665f5..648478aa61 100644 --- a/code/datums/components/weed_food.dm +++ b/code/datums/components/weed_food.dm @@ -260,6 +260,7 @@ merged = TRUE ADD_TRAIT(parent_mob, TRAIT_UNDENSE, XENO_WEED_TRAIT) + ADD_TRAIT(parent_mob, TRAIT_MERGED_WITH_WEEDS, XENO_WEED_TRAIT) parent_mob.anchored = TRUE parent_mob.mouse_opacity = MOUSE_OPACITY_TRANSPARENT parent_mob.plane = FLOOR_PLANE @@ -288,6 +289,7 @@ UnregisterSignal(absorbing_weeds, COMSIG_PARENT_QDELETING) absorbing_weeds = null + REMOVE_TRAIT(parent_mob, TRAIT_MERGED_WITH_WEEDS, XENO_WEED_TRAIT) parent_mob.anchored = FALSE parent_mob.mouse_opacity = MOUSE_OPACITY_ICON parent_mob.plane = GAME_PLANE diff --git a/code/modules/cm_aliens/XenoStructures.dm b/code/modules/cm_aliens/XenoStructures.dm index 73ced80994..211f53a0ec 100644 --- a/code/modules/cm_aliens/XenoStructures.dm +++ b/code/modules/cm_aliens/XenoStructures.dm @@ -418,18 +418,23 @@ update_icon() isSwitchingStates = 0 layer = DOOR_OPEN_LAYER - spawn(close_delay) - if(!isSwitchingStates && state == 1) - Close() + addtimer(CALLBACK(src, PROC_REF(Close)), close_delay, TIMER_UNIQUE|TIMER_OVERRIDE) + +/obj/structure/mineral_door/resin/proc/close_blocked() + for(var/turf/turf in locs) + for(var/mob/living/living_mob in turf) + if(!HAS_TRAIT(living_mob, TRAIT_MERGED_WITH_WEEDS)) + return TRUE + return FALSE /obj/structure/mineral_door/resin/Close() - if(!state || !loc) return //already closed + if(!state || !loc || isSwitchingStates) + return //already closed or changing //Can't close if someone is blocking it - for(var/turf/turf in locs) - if(locate(/mob/living) in turf) - spawn (close_delay) - Close() - return + if(close_blocked()) + addtimer(CALLBACK(src, PROC_REF(Close)), close_delay, TIMER_UNIQUE|TIMER_OVERRIDE) + return + isSwitchingStates = 1 playsound(loc, "alien_resin_move", 25) flick("[mineralType]closing",src) @@ -440,10 +445,10 @@ update_icon() isSwitchingStates = 0 layer = DOOR_CLOSED_LAYER - for(var/turf/turf in locs) - if(locate(/mob/living) in turf) - Open() - return + + if(close_blocked()) + Open() + return /obj/structure/mineral_door/resin/Dismantle(devastated = 0) qdel(src) From 35d5071c5240a37a4e4a79eb588f24cbd6de70de Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:21:33 +0000 Subject: [PATCH 46/65] Automatic changelog for PR #4990 [ci skip] --- html/changelogs/AutoChangeLog-pr-4990.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4990.yml diff --git a/html/changelogs/AutoChangeLog-pr-4990.yml b/html/changelogs/AutoChangeLog-pr-4990.yml new file mode 100644 index 0000000000..8f54dcade5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4990.yml @@ -0,0 +1,6 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Resin doors will now close on dead mobs that are merged with weeds (currently only human)." + - bugfix: "Resin doors will now restart their closing timer each open making the delay to close consistent." + - code_imp: "Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently merged with weeds." \ No newline at end of file From fa3745bf4137a5747a9ec399b4fd284fcca01ba7 Mon Sep 17 00:00:00 2001 From: Drathek <76988376+Drulikar@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:31:39 -0800 Subject: [PATCH 47/65] Fix buried larva spawn grace period at start of round (#4988) # About the pull request Looking at the code again, #4502 is unintentionally eliminating the buried larva grace period when there is no core. The first 30 minutes should have a core be optional (because the hive is still being established), but the queue requires a core (or nested bodies) to dequeue players from the queue. So as soon as there is one player in queue, buried spawns during the no-core grace period would be stopped. This PR makes it so the queue will only prevent manual buried spawns when there is a core. # Explain why it's good for the game Fixes a situation that needlessly hinders xeno start if the hive puts off creating a core. Also the logic was getting fairly complex here so the early returns should make it more manageable. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: Drathek fix: Fixed buried larva spawn grace period at start of round if there is a queue: Now join as xeno when there's a queue will only prevent buried larva spawns if there is no core. /:cl: --- code/game/gamemodes/cm_initialize.dm | 36 ++++++++++++++++------------ 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 17a2550090..519ce4ed4f 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -356,21 +356,27 @@ Additional game mode variables. else available_xenos_non_ssd += cur_xeno - // Only offer buried larva if there is no queue: - // This basically means this block of code will almost never execute, because we are instead relying on the hive cores/larva pops to handle their larva - // Technically this should be after a get_alien_candidates() call to be accurate, but we are intentionally trying to not call that proc as much as possible - if(GLOB.xeno_queue_candidate_count < 1) - var/datum/hive_status/hive - for(var/hivenumber in GLOB.hive_datum) - hive = GLOB.hive_datum[hivenumber] - if(!hive.hardcore && hive.stored_larva && (hive.hive_location || (world.time < XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time))) - if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) - available_xenos |= "any buried larva" - LAZYADD(available_xenos["any buried larva"], hive) - else - var/larva_option = "buried larva ([hive])" - available_xenos += larva_option - available_xenos[larva_option] = list(hive) + var/datum/hive_status/hive + for(var/hivenumber in GLOB.hive_datum) + hive = GLOB.hive_datum[hivenumber] + if(hive.hardcore) + continue + if(!hive.stored_larva) + continue + // Only offer buried larva if there is no queue because we are instead relying on the hive cores/larva pops to handle their larva: + // Technically this should be after a get_alien_candidates() call to be accurate, but we are intentionally trying to not call that proc as much as possible + if(hive.hive_location && GLOB.xeno_queue_candidate_count > 0) + continue + if(!hive.hive_location && (world.time > XENO_BURIED_LARVA_TIME_LIMIT + SSticker.round_start_time)) + continue + + if(SSticker.mode && (SSticker.mode.flags_round_type & MODE_RANDOM_HIVE)) + available_xenos |= "any buried larva" + LAZYADD(available_xenos["any buried larva"], hive) + else + var/larva_option = "buried larva ([hive])" + available_xenos += larva_option + available_xenos[larva_option] = list(hive) if(!available_xenos.len || (instant_join && !available_xenos_non_ssd.len)) if(!xeno_candidate.client || !xeno_candidate.client.prefs || !(xeno_candidate.client.prefs.be_special & BE_ALIEN_AFTER_DEATH)) From 91d3dd68c6b3870acdbf18d44b667fe30ffbe786 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:35:40 +0000 Subject: [PATCH 48/65] Automatic changelog for PR #4988 [ci skip] --- html/changelogs/AutoChangeLog-pr-4988.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4988.yml diff --git a/html/changelogs/AutoChangeLog-pr-4988.yml b/html/changelogs/AutoChangeLog-pr-4988.yml new file mode 100644 index 0000000000..ba67e425bd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4988.yml @@ -0,0 +1,4 @@ +author: "Drathek" +delete-after: True +changes: + - bugfix: "Fixed buried larva spawn grace period at start of round if there is a queue: Now join as xeno when there's a queue will only prevent buried larva spawns if there is no core." \ No newline at end of file From 7e7db48664cf2a48f6e3eb643106a87f7e45ffff Mon Sep 17 00:00:00 2001 From: ihatethisengine <115417687+ihatethisengine@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:33:50 +0300 Subject: [PATCH 49/65] Oppressor XvX nerf (#4981) # About the pull request Oppressor no longer can abduct "big" xenos (Queen, T3s, hivelord, carrier, defender). # Explain why it's good for the game Way too strong in XvX to abduct an enemy queen. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: ihatethisengine balance: Oppressor no longer can abduct big xenos. /:cl: --- .../abilities/praetorian/praetorian_powers.dm | 120 +++++++++--------- 1 file changed, 60 insertions(+), 60 deletions(-) diff --git a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm index 0d7a86c583..400a4a80ba 100644 --- a/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm +++ b/code/modules/mob/living/carbon/xenomorph/abilities/praetorian/praetorian_powers.dm @@ -234,16 +234,16 @@ xeno_attack_delay(stabbing_xeno) return ..() -/datum/action/xeno_action/activable/prae_abduct/use_ability(atom/A) - var/mob/living/carbon/xenomorph/X = owner +/datum/action/xeno_action/activable/prae_abduct/use_ability(atom/atom) + var/mob/living/carbon/xenomorph/xeno = owner - if(!A || A.layer >= FLY_LAYER || !isturf(X.loc)) + if(!atom || atom.layer >= FLY_LAYER || !isturf(xeno.loc)) return - if(!action_cooldown_check() || X.action_busy) + if(!action_cooldown_check() || xeno.action_busy) return - if(!X.check_state()) + if(!xeno.check_state()) return if(!check_plasma_owner()) @@ -252,11 +252,11 @@ // Build our turflist var/list/turf/turflist = list() var/list/telegraph_atom_list = list() - var/facing = get_dir(X, A) - var/turf/T = X.loc - var/turf/temp = X.loc - for(var/x in 0 to max_distance) - temp = get_step(T, facing) + var/facing = get_dir(xeno, atom) + var/turf/turf = xeno.loc + var/turf/temp = xeno.loc + for(var/distance in 0 to max_distance) + temp = get_step(turf, facing) if(facing in diagonals) // check if it goes through corners var/reverse_face = reverse_dir[facing] var/turf/back_left = get_step(temp, turn(reverse_face, 45)) @@ -267,103 +267,103 @@ break var/blocked = FALSE - for(var/obj/structure/S in temp) - if(S.opacity || ((istype(S, /obj/structure/barricade) || istype(S, /obj/structure/girder) && S.density || istype(S, /obj/structure/machinery/door)) && S.density)) + for(var/obj/structure/structure in temp) + if(structure.opacity || ((istype(structure, /obj/structure/barricade) || istype(structure, /obj/structure/girder) && structure.density || istype(structure, /obj/structure/machinery/door)) && structure.density)) blocked = TRUE break if(blocked) break - T = temp + turf = temp - if (T in turflist) + if (turf in turflist) break - turflist += T - facing = get_dir(T, A) - telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/brown/abduct_hook(T, windup) + turflist += turf + facing = get_dir(turf, atom) + telegraph_atom_list += new /obj/effect/xenomorph/xeno_telegraph/brown/abduct_hook(turf, windup) if(!length(turflist)) - to_chat(X, SPAN_XENOWARNING("You don't have any room to do your abduction!")) + to_chat(xeno, SPAN_XENOWARNING("You don't have any room to do your abduction!")) return - X.visible_message(SPAN_XENODANGER("\The [X]'s segmented tail starts coiling..."), SPAN_XENODANGER("You begin coiling your tail, aiming towards \the [A]...")) - X.emote("roar") + xeno.visible_message(SPAN_XENODANGER("\The [xeno]'s segmented tail starts coiling..."), SPAN_XENODANGER("You begin coiling your tail, aiming towards \the [atom]...")) + xeno.emote("roar") - var/throw_target_turf = get_step(X.loc, facing) + var/throw_target_turf = get_step(xeno.loc, facing) - ADD_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - X.update_canmove() - if(!do_after(X, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, numticks = 1)) - to_chat(X, SPAN_XENOWARNING("You relax your tail.")) + ADD_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + xeno.update_canmove() + if(!do_after(xeno, windup, INTERRUPT_NO_NEEDHAND, BUSY_ICON_HOSTILE, numticks = 1)) + to_chat(xeno, SPAN_XENOWARNING("You relax your tail.")) apply_cooldown() - for (var/obj/effect/xenomorph/xeno_telegraph/XT in telegraph_atom_list) - telegraph_atom_list -= XT - qdel(XT) + for (var/obj/effect/xenomorph/xeno_telegraph/xenotelegraph in telegraph_atom_list) + telegraph_atom_list -= xenotelegraph + qdel(xenotelegraph) - REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - X.update_canmove() + REMOVE_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + xeno.update_canmove() return if(!check_and_use_plasma_owner()) return - REMOVE_TRAIT(X, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - X.update_canmove() + REMOVE_TRAIT(xeno, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + xeno.update_canmove() - playsound(get_turf(X), 'sound/effects/bang.ogg', 25, 0) - X.visible_message(SPAN_XENODANGER("\The [X] suddenly uncoils its tail, firing it towards [A]!"), SPAN_XENODANGER("You uncoil your tail, sending it out towards \the [A]!")) + playsound(get_turf(xeno), 'sound/effects/bang.ogg', 25, 0) + xeno.visible_message(SPAN_XENODANGER("\The [xeno] suddenly uncoils its tail, firing it towards [atom]!"), SPAN_XENODANGER("You uncoil your tail, sending it out towards \the [atom]!")) var/list/targets = list() for (var/turf/target_turf in turflist) - for (var/mob/living/carbon/H in target_turf) - if(!isxeno_human(H) || X.can_not_harm(H) || H.is_dead() || H.is_mob_incapacitated(TRUE)) + for (var/mob/living/carbon/target in target_turf) + if(!isxeno_human(target) || xeno.can_not_harm(target) || target.is_dead() || target.is_mob_incapacitated(TRUE) || target.mob_size >= MOB_SIZE_BIG) continue - targets += H + targets += target if (LAZYLEN(targets) == 1) - X.balloon_alert(X, "your tail catches and slows one target!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and slows one target!", text_color = "#51a16c") else if (LAZYLEN(targets) == 2) - X.balloon_alert(X, "your tail catches and roots two targets!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and roots two targets!", text_color = "#51a16c") else if (LAZYLEN(targets) >= 3) - X.balloon_alert(X, "your tail catches and stuns [LAZYLEN(targets)] targets!", text_color = "#51a16c") + xeno.balloon_alert(xeno, "your tail catches and stuns [LAZYLEN(targets)] targets!", text_color = "#51a16c") - for (var/mob/living/carbon/H in targets) - X.visible_message(SPAN_XENODANGER("\The [X]'s hooked tail coils itself around [H]!"), SPAN_XENODANGER("Your hooked tail coils itself around [H]!")) + for (var/mob/living/carbon/target in targets) + xeno.visible_message(SPAN_XENODANGER("\The [xeno]'s hooked tail coils itself around [target]!"), SPAN_XENODANGER("Your hooked tail coils itself around [target]!")) - H.apply_effect(0.2, WEAKEN) + target.apply_effect(0.2, WEAKEN) if (LAZYLEN(targets) == 1) - new /datum/effects/xeno_slow(H, X, , ,25) - H.apply_effect(1, SLOW) + new /datum/effects/xeno_slow(target, xeno, , ,25) + target.apply_effect(1, SLOW) else if (LAZYLEN(targets) == 2) - ADD_TRAIT(H, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) - H.update_canmove() - if (ishuman(H)) - var/mob/living/carbon/human/Hu = H - Hu.update_xeno_hostile_hud() - addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(unroot_human), H), get_xeno_stun_duration(H, 25)) - to_chat(H, SPAN_XENOHIGHDANGER("[X] has pinned you to the ground! You cannot move!")) + ADD_TRAIT(target, TRAIT_IMMOBILIZED, TRAIT_SOURCE_ABILITY("Abduct")) + target.update_canmove() + if (ishuman(target)) + var/mob/living/carbon/human/human = target + human.update_xeno_hostile_hud() + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(unroot_human), target), get_xeno_stun_duration(target, 25)) + to_chat(target, SPAN_XENOHIGHDANGER("[xeno] has pinned you to the ground! You cannot move!")) - H.set_effect(2, DAZE) + target.set_effect(2, DAZE) else if (LAZYLEN(targets) >= 3) - H.apply_effect(get_xeno_stun_duration(H, 1.3), WEAKEN) - to_chat(H, SPAN_XENOHIGHDANGER("You are slammed into the other victims of [X]!")) + target.apply_effect(get_xeno_stun_duration(target, 1.3), WEAKEN) + to_chat(target, SPAN_XENOHIGHDANGER("You are slammed into the other victims of [xeno]!")) - shake_camera(H, 10, 1) + shake_camera(target, 10, 1) - var/obj/effect/beam/tail_beam = X.beam(H, "oppressor_tail", 'icons/effects/beam.dmi', 0.5 SECONDS, 8) + var/obj/effect/beam/tail_beam = xeno.beam(target, "oppressor_tail", 'icons/effects/beam.dmi', 0.5 SECONDS, 8) var/image/tail_image = image('icons/effects/status_effects.dmi', "hooked") - H.overlays += tail_image + target.overlays += tail_image - H.throw_atom(throw_target_turf, get_dist(throw_target_turf, H)-1, SPEED_VERY_FAST) + target.throw_atom(throw_target_turf, get_dist(throw_target_turf, target)-1, SPEED_VERY_FAST) qdel(tail_beam) // hook beam catches target, throws them back, is deleted (throw_atom has sleeps), then hook beam catches another target, repeat - addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay, H, tail_image), 0.5 SECONDS) //needed so it can actually be seen as it gets deleted too quickly otherwise. + addtimer(CALLBACK(src, /datum/action/xeno_action/activable/prae_abduct/proc/remove_tail_overlay, target, tail_image), 0.5 SECONDS) //needed so it can actually be seen as it gets deleted too quickly otherwise. apply_cooldown() return ..() From d97e87ae249c17e7c9d0d98d3940beee31febfb6 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 20:48:54 +0000 Subject: [PATCH 50/65] Automatic changelog for PR #4981 [ci skip] --- html/changelogs/AutoChangeLog-pr-4981.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4981.yml diff --git a/html/changelogs/AutoChangeLog-pr-4981.yml b/html/changelogs/AutoChangeLog-pr-4981.yml new file mode 100644 index 0000000000..6edc5e60a3 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4981.yml @@ -0,0 +1,4 @@ +author: "ihatethisengine" +delete-after: True +changes: + - balance: "Oppressor no longer can abduct big xenos." \ No newline at end of file From b28e9e5d3b97befc03c05166668d84d1581b34e7 Mon Sep 17 00:00:00 2001 From: zzzmike <85382350+zzzmike@users.noreply.github.com> Date: Wed, 22 Nov 2023 11:34:09 -0800 Subject: [PATCH 51/65] Location name standardization (#4980) # About the pull request The most noticeable thing about this PR is that it converts east/west/north/south references from fuel pumps into port/starboard/etc. Which will be quite noticeable during the hijack announcements when they go online or offline. It also makes it a bit more clear on crew monitor when something is on the upper deck or lower deck, and introduces some standardization for location names. Also ![Screenshot 2023-11-20 063208](https://github.com/cmss13-devs/cmss13/assets/85382350/01e3beff-d009-491d-877e-96e1818538cf) # Explain why it's good for the game I GET IT. It's much easier, especially for new players, if you could refer to things the way they are OOCly on your monitor. But it's also a disservice to have it both ways ingame. The crew monitor never refers to "North Lifeboat". It's starboard. PSA to anyone not good with the directional structure on crew monitor - (I'm not good with it either, don't worry) The engines are on the rear of the ship, in engineering. That's why it must be aft (or stern), and everything else must oriented from that perspective. If someone yells to get on starboard lifeboat, go north. Port? Go south. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: qol: Location name standardization. So, North is now Starboard. This is already how it is for everything except pumps. /:cl: --- code/game/area/almayer.dm | 139 +++++++++++++++++++------------------- 1 file changed, 70 insertions(+), 69 deletions(-) diff --git a/code/game/area/almayer.dm b/code/game/area/almayer.dm index 742ae7a1ad..d9ff42f4f5 100644 --- a/code/game/area/almayer.dm +++ b/code/game/area/almayer.dm @@ -29,12 +29,12 @@ SShijack.progress_areas[src] = power_equip /area/shuttle/almayer/elevator_maintenance/upperdeck - name = "\improper Maintenance Elevator" + name = "\improper Upper Deck Maintenance Elevator" icon_state = "shuttle" fake_zlevel = 1 /area/shuttle/almayer/elevator_maintenance/lowerdeck - name = "\improper Maintenance Elevator" + name = "\improper Lower Deck Maintenance Elevator" icon_state = "shuttle" fake_zlevel = 2 @@ -98,23 +98,23 @@ resin_construction_allowed = FALSE /area/almayer/command/securestorage - name = "\improper Secure Storage" + name = "\improper Upper Deck Secure Storage" icon_state = "corporatespace" - fake_zlevel = 2 // lowerdeck + fake_zlevel = 1 // upperdeck /area/almayer/command/computerlab - name = "\improper Computer Lab" + name = "\improper Upper Deck Computer Lab" icon_state = "ceroom" - fake_zlevel = 2 // lowerdeck + fake_zlevel = 1 // upperdeck /area/almayer/command/telecomms - name = "\improper Telecommunications" + name = "\improper Upper Deck Telecommunications" icon_state = "tcomms" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL /area/almayer/command/self_destruct - name = "\improper Self-Destruct Core Room" + name = "\improper Upper Deck Self-Destruct Core Room" icon_state = "selfdestruct" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL @@ -125,7 +125,7 @@ fake_zlevel = 1 // upperdeck /area/almayer/command/combat_correspondent - name = "\improper Combat Correspondent Office" + name = "\improper Upper Deck Combat Correspondent Office" icon_state = "selfdestruct" fake_zlevel = 1 // upperdeck @@ -133,36 +133,36 @@ minimap_color = MINIMAP_AREA_ENGI /area/almayer/engineering/upper_engineering - name = "\improper Upper Engineering" + name = "\improper Upper Deck Engineering" icon_state = "upperengineering" fake_zlevel = 1 // upperdeck /area/almayer/engineering/upper_engineering/starboard - name = "\improper Starboard Upper Engineering" + name = "\improper Upper Deck Starboard Engineering" /area/almayer/engineering/upper_engineering/port - name = "\improper Port Upper Engineering" + name = "\improper Upper Deck Port Engineering" /area/almayer/engineering/upper_engineering/notunnel flags_area = AREA_NOTUNNEL /area/almayer/engineering/ce_room - name = "\improper Chief Engineer Office" + name = "\improper Upper Deck Chief Engineer Office" icon_state = "ceroom" fake_zlevel = 1 // upperdeck /area/almayer/engineering/lower_engine_monitoring - name = "\improper Engine Reactor Monitoring" + name = "\improper Lower Deck Engine Reactor Monitoring" icon_state = "lowermonitoring" fake_zlevel = 2 // lowerdeck /area/almayer/engineering/lower_engineering - name = "\improper Engineering Lower" + name = "\improper Lower Deck Engineering" icon_state = "lowerengineering" fake_zlevel = 2 // lowerdeck /area/almayer/engineering/engineering_workshop - name = "\improper Engineering Workshop" + name = "\improper Lower Deck Engineering Workshop" icon_state = "workshop" fake_zlevel = 2 // lowerdeck @@ -180,17 +180,17 @@ hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/engineering/starboard_atmos - name = "\improper Atmospherics Starboard" + name = "\improper Upper Deck Starboard Atmospherics" icon_state = "starboardatmos" fake_zlevel = 1 // upperdeck /area/almayer/engineering/port_atmos - name = "\improper Atmospherics Port" + name = "\improper Upper Deck Port Atmospherics" icon_state = "portatmos" fake_zlevel = 1 // upperdeck /area/almayer/engineering/laundry - name = "\improper Laundry Room" + name = "\improper Upper Deck Laundry Room" icon_state = "laundry" fake_zlevel = 1 // upperdeck @@ -211,17 +211,17 @@ fake_zlevel = 2 // lowerdeck /area/almayer/shipboard/starboard_missiles - name = "\improper Missile Tubes Starboard" + name = "\improper Upper Deck Starboard Missile Tubes" icon_state = "starboardmissile" fake_zlevel = 1 // upperdeck /area/almayer/shipboard/port_missiles - name = "\improper Missile Tubes Port" + name = "\improper Upper Deck Port Missile Tubes" icon_state = "portmissile" fake_zlevel = 1 // upperdeck /area/almayer/shipboard/weapon_room - name = "\improper Weapon Control Room" + name = "\improper Lower Deck Weapon Control" icon_state = "weaponroom" fake_zlevel = 2 // lowerdeck @@ -229,12 +229,12 @@ flags_area = AREA_NOTUNNEL /area/almayer/shipboard/starboard_point_defense - name = "\improper Point Defense Starboard" + name = "\improper Lower Deck Starboard Point Defense" icon_state = "starboardpd" fake_zlevel = 2 // lowerdeck /area/almayer/shipboard/port_point_defense - name = "\improper Point Defense Port" + name = "\improper Lower Deck Port Point Defense" icon_state = "portpd" fake_zlevel = 2 // lowerdeck @@ -300,7 +300,7 @@ icon_state = "chiefmpoffice" /area/almayer/shipboard/sea_office - name = "\improper Senior Enlisted Advisor Office" + name = "\improper Lower Deck Senior Enlisted Advisor Office" icon_state = "chiefmpoffice" fake_zlevel = 2 // lowerdeck @@ -326,7 +326,7 @@ soundscape_interval = 50 /area/almayer/hallways/vehiclehangar - name = "\improper Vehicle Storage" + name = "\improper Lower Deck Vehicle Storage" icon_state = "exoarmor" fake_zlevel = 2 @@ -334,135 +334,136 @@ minimap_color = MINIMAP_AREA_COLONY /area/almayer/living/tankerbunks - name = "\improper Vehicle Crew Bunks" + name = "\improper Lower Deck Vehicle Crew Bunks" icon_state = "livingspace" fake_zlevel = 2 /area/almayer/living/auxiliary_officer_office - name = "\improper Auxiliary Support Officer office" + name = "\improper Lower Deck Auxiliary Support Officer office" icon_state = "livingspace" fake_zlevel = 2 /area/almayer/squads/tankdeliveries - name = "\improper Vehicle ASRS" + name = "\improper Lower Deck Vehicle ASRS" icon_state = "req" fake_zlevel = 2 /area/almayer/hallways/exoarmor - name = "\improper Vehicle Armor Storage" + name = "\improper Lower Deck Vehicle Armor Storage" icon_state = "exoarmor" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/repair_bay - name = "\improper Deployment Workshop" + name = "\improper Lower Deck Deployment Workshop" icon_state = "dropshiprepair" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/mission_planner - name = "\improper Dropship Central Computer Room" + name = "\improper Lower Deck Dropship Central Computer Room" icon_state = "missionplanner" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/starboard_umbilical - name = "\improper Umbilical Starboard" + name = "\improper Lower Deck Starboard Umbilical Hallway" icon_state = "starboardumbilical" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/port_umbilical - name = "\improper Umbilical Port" + name = "\improper Lower Deck Port Umbilical Hallway" icon_state = "portumbilical" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/aft_hallway - name = "\improper Hallway Aft" + name = "\improper Upper Deck Aft Hallway" icon_state = "aft" fake_zlevel = 1 // upperdeck /area/almayer/hallways/stern_hallway - name = "\improper Hallway Stern" + name = "\improper Upper Deck Stern Hallway" icon_state = "stern" fake_zlevel = 1 // upperdeck /area/almayer/hallways/port_hallway - name = "\improper Hallway Port" + name = "\improper Lower Deck Port Hallway" icon_state = "port" fake_zlevel = 2 // lowerdeck /area/almayer/hallways/starboard_hallway - name = "\improper Hallway Starboard" + name = "\improper Lower Deck Starboard Hallway" icon_state = "starboard" fake_zlevel = 2 // lowerdeck /area/almayer/stair_clone - name = "\improper Stairs" + name = "\improper Lower Deck Stairs" icon_state = "stairs_lowerdeck" fake_zlevel = 2 // lowerdeck resin_construction_allowed = FALSE /area/almayer/stair_clone/upper + name = "\improper Upper Deck Stairs" icon_state = "stairs_upperdeck" fake_zlevel = 1 // upperdeck /area/almayer/hull/lower_hull - name = "\improper Hull Lower" + name = "\improper Lower Deck Hull" icon_state = "lowerhull" fake_zlevel = 2 // lowerdeck /area/almayer/hull/upper_hull - name = "\improper Hull Upper" + name = "\improper Upper Deck Hull" icon_state = "upperhull" fake_zlevel = 1 // upperdeck /area/almayer/hull/upper_hull/u_f_s - name = "\improper Upper Fore-Starboard Hull" + name = "\improper Upper Deck Fore-Starboard Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_m_s - name = "\improper Upper Midship-Starboard Hull" + name = "\improper Upper Deck Starboard-Midship Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_a_s - name = "\improper Upper Aft-Starboard Hull" + name = "\improper Upper Deck Starboard-Aft Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_f_p - name = "\improper Upper Fore-Port Hull" + name = "\improper Upper Deck Port-Fore Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_m_p - name = "\improper Upper Midship-Port Hull" + name = "\improper Upper Deck Port-Midship Hull" icon_state = "upperhull" /area/almayer/hull/upper_hull/u_a_p - name = "\improper Upper Aft-Port Hull" + name = "\improper Upper Deck Port-Aft Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_f_s - name = "\improper Lower Fore-Starboard Hull" + name = "\improper Lower Deck Starboard-Fore Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_m_s - name = "\improper Lower Midship-Starboard Hull" + name = "\improper Lower Deck Starboard-Midship Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_a_s - name = "\improper Lower Aft-Starboard Hull" + name = "\improper Lower Deck Starboard Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_f_p - name = "\improper Lower Fore-Port Hull" + name = "\improper Lower Deck Port-Fore Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_m_p - name = "\improper Lower Midship-Port Hull" + name = "\improper Lower Deck Port-Midship Hull" icon_state = "upperhull" /area/almayer/hull/lower_hull/l_a_p - name = "\improper Lower Aft-Port Hull" + name = "\improper Lower Deck Port-Aft Hull" icon_state = "upperhull" /area/almayer/living/cryo_cells - name = "\improper Cryo Cells" + name = "\improper Lower Deck Cryo Cells" icon_state = "cryo" fake_zlevel = 2 // lowerdeck @@ -472,22 +473,22 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/port_emb - name = "\improper Extended Mission Bunks" + name = "\improper Lower Deck Port Extended Mission Bunks" icon_state = "portemb" fake_zlevel = 2 // lowerdeck /area/almayer/living/starboard_emb - name = "\improper Extended Mission Bunks" + name = "\improper Lower Deck Starboard Extended Mission Bunks" icon_state = "starboardemb" fake_zlevel = 2 // lowerdeck /area/almayer/living/port_garden - name = "\improper Garden" + name = "\improper Port Garden" icon_state = "portemb" fake_zlevel = 1 // upperdeck /area/almayer/living/starboard_garden - name = "\improper Garden" + name = "\improper Starboard Garden" icon_state = "starboardemb" fake_zlevel = 1 // upperdeck @@ -502,12 +503,12 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/officer_rnr - name = "\improper Officer's Lounge" + name = "\improper Upper Deck Officer's Lounge" icon_state = "officerrnr" fake_zlevel = 1 // upperdeck /area/almayer/living/officer_study - name = "\improper Officer's Study" + name = "\improper Upper Deck Officer's Study" icon_state = "officerstudy" fake_zlevel = 1 // upperdeck @@ -522,17 +523,17 @@ fake_zlevel = 2 // lowerdeck /area/almayer/living/gym - name = "\improper Gym" + name = "\improper Lower Deck Gym" icon_state = "officerrnr" fake_zlevel = 2 // lowerdeck /area/almayer/living/cafeteria_officer - name = "\improper Officer Cafeteria" + name = "\improper Upper Deck Officer Cafeteria" icon_state = "food" fake_zlevel = 1 // upperdeck /area/almayer/living/offices - name = "\improper Conference Office" + name = "\improper Lower Deck Conference Office" icon_state = "briefing" fake_zlevel = 2 // lowerdeck @@ -560,7 +561,7 @@ fake_zlevel = 1 // upperdeck /area/almayer/living/synthcloset - name = "\improper Synthetic Storage Closet" + name = "\improper Upper Deck Synthetic Storage Closet" icon_state = "livingspace" fake_zlevel = 1 // upperdeck @@ -738,16 +739,16 @@ hijack_evacuation_type = EVACUATION_TYPE_ADDITIVE /area/almayer/lifeboat_pumps/north1 - name = "North West Lifeboat Fuel Pump" + name = "Starboard Fore Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/north2 - name = "North East Lifeboat Fuel Pump" + name = "Starboard Aft Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/south1 - name = "South West Lifeboat Fuel Pump" + name = "Port Fore Lifeboat Fuel Pump" /area/almayer/lifeboat_pumps/south2 - name = "South East Lifeboat Fuel Pump" + name = "Port Aft Lifeboat Fuel Pump" /area/almayer/command/lifeboat name = "\improper Lifeboat Docking Port" @@ -760,7 +761,7 @@ flags_area = AREA_NOTUNNEL /area/space/almayer/lifeboat_dock - name = "\improper Lifeboat Docking Port" + name = "\improper Port Lifeboat Docking" icon_state = "lifeboat" fake_zlevel = 1 // upperdeck flags_area = AREA_NOTUNNEL From 7667a45fb8dbcf4788c210133db179c4ec12f5a3 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:03:59 +0000 Subject: [PATCH 52/65] Automatic changelog for PR #4980 [ci skip] --- html/changelogs/AutoChangeLog-pr-4980.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4980.yml diff --git a/html/changelogs/AutoChangeLog-pr-4980.yml b/html/changelogs/AutoChangeLog-pr-4980.yml new file mode 100644 index 0000000000..67fc216fe9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4980.yml @@ -0,0 +1,4 @@ +author: "zzzmike" +delete-after: True +changes: + - qol: "Location name standardization. So, North is now Starboard. This is already how it is for everything except pumps." \ No newline at end of file From 148a189066f7156984b2ef8765caee6efe457484 Mon Sep 17 00:00:00 2001 From: Birdtalon Date: Wed, 22 Nov 2023 19:39:20 +0000 Subject: [PATCH 53/65] Lesser drones now die upon ghosting (#4978) # About the pull request https://forum.cm-ss13.com/t/ghosted-lesser-drones-should-just-die/4356/10 Lessers now die upon ghosting and are not offered to observers. # Explain why it's good for the game Nobody likes trying to join as xeno or see their position in the queue only to see Lesser Drone (420) Lesser Drone (69) # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: del: Lesser drones die upon ghosting and are not offered to observers. /:cl: --------- Co-authored-by: harryob --- .../mob/living/carbon/xenomorph/castes/lesser_drone.dm | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm index 48bf0d95dd..3eb11d155c 100644 --- a/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm +++ b/code/modules/mob/living/carbon/xenomorph/castes/lesser_drone.dm @@ -95,3 +95,11 @@ if (PF) PF.flags_pass = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO PF.flags_can_pass_all = PASS_MOB_IS_XENO|PASS_MOB_THRU_XENO + +/mob/living/carbon/xenomorph/lesser_drone/ghostize(can_reenter_corpse = FALSE, aghosted = FALSE) + . = ..() + if(. && !aghosted) + gib() + +/mob/living/carbon/xenomorph/lesser_drone/handle_ghost_message() + return From b98d6032d5aca3302a8886b88f7b6102fc5f5368 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:19:43 +0000 Subject: [PATCH 54/65] Automatic changelog for PR #4978 [ci skip] --- html/changelogs/AutoChangeLog-pr-4978.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4978.yml diff --git a/html/changelogs/AutoChangeLog-pr-4978.yml b/html/changelogs/AutoChangeLog-pr-4978.yml new file mode 100644 index 0000000000..fc04901a02 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4978.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - rscdel: "Lesser drones die upon ghosting and are not offered to observers." \ No newline at end of file From 81f55a30a3d539ac398d84e8141cb92ed67c196c Mon Sep 17 00:00:00 2001 From: Birdtalon Date: Wed, 22 Nov 2023 20:41:28 +0000 Subject: [PATCH 55/65] Adds explosion handling to experimental sensor tower (#4984) # About the pull request Fixes #4958 Adds explosion handling to sensor tower. # Explain why it's good for the game # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: add: Explosion handling logic to experimental sensor tower. fix: Explosions no longer delete experimental sensor tower. /:cl: --- .../desert_dam/motion_sensor/sensortower.dm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/code/modules/desert_dam/motion_sensor/sensortower.dm b/code/modules/desert_dam/motion_sensor/sensortower.dm index 4ef11c3224..6a718607aa 100644 --- a/code/modules/desert_dam/motion_sensor/sensortower.dm +++ b/code/modules/desert_dam/motion_sensor/sensortower.dm @@ -233,6 +233,25 @@ ..() update_icon() +/* Decreases the buildstate of the sensor tower and switches it off if affected by any explosion. +Higher severity explosion will damage the sensor tower more +*/ +/obj/structure/machinery/sensortower/ex_act(severity) + if(buildstate == SENSORTOWER_BUILDSTATE_WRENCH) + return + switch(severity) + if(0 to EXPLOSION_THRESHOLD_LOW) + buildstate += 1 + if(EXPLOSION_THRESHOLD_LOW to EXPLOSION_THRESHOLD_MEDIUM) + buildstate = clamp(buildstate + 2, SENSORTOWER_BUILDSTATE_WORKING, SENSORTOWER_BUILDSTATE_WRENCH) + if(EXPLOSION_THRESHOLD_HIGH to INFINITY) + buildstate = 3 + if(is_on) + is_on = FALSE + cur_tick = 0 + stop_processing() + update_icon() + #undef SENSORTOWER_BUILDSTATE_WORKING #undef SENSORTOWER_BUILDSTATE_BLOWTORCH #undef SENSORTOWER_BUILDSTATE_WIRECUTTERS From 32b992b0a599ae0833552218cdbc53b83f537bab Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:36:27 +0000 Subject: [PATCH 56/65] Automatic changelog for PR #4984 [ci skip] --- html/changelogs/AutoChangeLog-pr-4984.yml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4984.yml diff --git a/html/changelogs/AutoChangeLog-pr-4984.yml b/html/changelogs/AutoChangeLog-pr-4984.yml new file mode 100644 index 0000000000..a2ddcbb933 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4984.yml @@ -0,0 +1,5 @@ +author: "Birdtalon" +delete-after: True +changes: + - rscadd: "Explosion handling logic to experimental sensor tower." + - bugfix: "Explosions no longer delete experimental sensor tower." \ No newline at end of file From 123019107d9dce6a5340d2ef7a9d609a7a07f226 Mon Sep 17 00:00:00 2001 From: Birdtalon Date: Wed, 22 Nov 2023 20:42:53 +0000 Subject: [PATCH 57/65] Differentiates pylons in same area when spawning as lesser drone (#4985) # About the pull request Adds a (1) to duplicate named pylons if they reside in the same area when trying to spawn at pylon as lesser drone. Fixes #4424 # Explain why it's good for the game # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags.
# Changelog :cl: fix: Pylons now differentiated in the input list with a (1) if in the same area. /:cl: --- code/game/gamemodes/cm_initialize.dm | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/code/game/gamemodes/cm_initialize.dm b/code/game/gamemodes/cm_initialize.dm index 519ce4ed4f..f047c4a5bf 100644 --- a/code/game/gamemodes/cm_initialize.dm +++ b/code/game/gamemodes/cm_initialize.dm @@ -597,7 +597,14 @@ Additional game mode variables. for(var/obj/effect/alien/resin/special/pylon/cycled_pylon as anything in hive.hive_structures[XENO_STRUCTURE_PYLON]) if(cycled_pylon.lesser_drone_spawns >= 1) - selection_list += "[cycled_pylon.name] at [get_area(cycled_pylon)]" + var/pylon_number = 1 + var/pylon_name = "[cycled_pylon.name] at [get_area(cycled_pylon)]" + //For renaming the pylon if we have duplicates + var/pylon_selection_name = pylon_name + while(pylon_selection_name in selection_list) + pylon_selection_name = "[pylon_name] ([pylon_number])" + pylon_number ++ + selection_list += pylon_selection_name selection_list_structure += cycled_pylon if(!length(selection_list)) From 643c05d0500e3ec059e1db667dec2f471f1b8505 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 21:49:20 +0000 Subject: [PATCH 58/65] Automatic changelog for PR #4985 [ci skip] --- html/changelogs/AutoChangeLog-pr-4985.yml | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4985.yml diff --git a/html/changelogs/AutoChangeLog-pr-4985.yml b/html/changelogs/AutoChangeLog-pr-4985.yml new file mode 100644 index 0000000000..9d8216e9eb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4985.yml @@ -0,0 +1,4 @@ +author: "Birdtalon" +delete-after: True +changes: + - bugfix: "Pylons now differentiated in the input list with a (1) if in the same area." \ No newline at end of file From 15086ae683f727d9a990e05f8ce9a08e43731207 Mon Sep 17 00:00:00 2001 From: fira Date: Wed, 22 Nov 2023 23:22:30 +0100 Subject: [PATCH 59/65] Allow playing uploaded sounds through the music player w/ Webroot (#4934) # About the pull request Too long have we suffered at the hands of admin auditive abuse. The prophet, spookydonut, once said, "You shouldn't be using this lol". And he was right. Using "Play MIDI sound" both reduces usability for our users, and can cause performance issues by freezing up the game for a while as the data is transfered to these 200 poor CM addicts. So we sought to alienate it with "Play Internet Sound" backed by youtube-dl. Unfortunately, some things are subject to geo blocking or simply not available on Youtube. Thus the regime of terror of Admins continues. This PR brings us one step closer to our goal: it allows to use the now renamed "Play Admin Sound" to (also) upload a sound file to Webroot and have it played through CDN. It also works with simple transport but that mostly defeats the point. Also reduced default volume for new players from 50% to 20%... Don't worry, It's still way more than enough to get them to quit the server, i have mine at 2-10% max # Explain why it's good for the game * Less new player abuse by reducing default volume * More performance by allowing big or custom songs to be backed by CDN * Better UX: People can easily see the song name and more easily stop it * Admins can now hide the name of played songs if they want to. Don't ask me why. # Testing Photographs and Procedure ![image](https://github.com/cmss13-devs/cmss13/assets/604624/4f00c45d-76ca-47e2-860a-2f26d55de2a4) You'll have to believe me on the sound working # Changelog :cl: balance: Default Web Music Player volume is now 20% down from 50%. It was found too effective against new players. admin: "Play Internet Sound" is now "Play Admin Sound" and optionally allow to hide the track name. admin: "Play Admin Sound" can now be used with uploaded tracks, which use CDN delivery and the in-chat music player, granting players more control over them. admin: Removed "Play Midi Sound". /:cl: --- code/__DEFINES/__game.dm | 2 +- code/__DEFINES/sounds.dm | 2 +- code/datums/soundOutput.dm | 5 - code/modules/admin/admin_verbs.dm | 6 +- code/modules/admin/verbs/playsound.dm | 226 ++++++++----------- code/modules/client/preferences.dm | 10 +- code/modules/client/preferences_toggles.dm | 21 +- code/modules/tgui_panel/audio.dm | 7 +- code/modules/tgui_panel/tgui_panel.dm | 7 +- tgui/packages/tgui-panel/settings/reducer.js | 2 +- 10 files changed, 119 insertions(+), 169 deletions(-) diff --git a/code/__DEFINES/__game.dm b/code/__DEFINES/__game.dm index f1424f5560..765603df62 100644 --- a/code/__DEFINES/__game.dm +++ b/code/__DEFINES/__game.dm @@ -103,7 +103,7 @@ block( \ #define SOUND_MIDI (1<<1) #define SOUND_AMBIENCE (1<<2) #define SOUND_LOBBY (1<<3) -#define SOUND_INTERNET (1<<4) +#define SOUND_INTERNET (1<<4) // Unused currently. Kept for default prefs compat only #define SOUND_REBOOT (1<<5) #define SOUND_ADMIN_MEME (1<<6) #define SOUND_ADMIN_ATMOSPHERIC (1<<7) diff --git a/code/__DEFINES/sounds.dm b/code/__DEFINES/sounds.dm index a6bb381100..541d95d281 100644 --- a/code/__DEFINES/sounds.dm +++ b/code/__DEFINES/sounds.dm @@ -27,7 +27,7 @@ #define SOUND_CHANNEL_AMBIENCE 1019 #define SOUND_CHANNEL_WALKMAN 1020 #define SOUND_CHANNEL_SOUNDSCAPE 1021 -#define SOUND_CHANNEL_ADMIN_MIDI 1022 +//#define SOUND_CHANNEL_ADMIN_MIDI 1022 #define SOUND_CHANNEL_LOBBY 1023 #define SOUND_CHANNEL_Z 1024 diff --git a/code/datums/soundOutput.dm b/code/datums/soundOutput.dm index bc5ffd8efc..1f4512b28d 100644 --- a/code/datums/soundOutput.dm +++ b/code/datums/soundOutput.dm @@ -152,11 +152,6 @@ adjust_volume_prefs(VOLUME_AMB, "Set the volume for ambience and soundscapes", 0) soundOutput.update_ambience(null, null, TRUE) -/client/verb/adjust_volume_admin_music() - set name = "Adjust Volume Admin MIDIs" - set category = "Preferences.Sound" - adjust_volume_prefs(VOLUME_ADM, "Set the volume for admin MIDIs", SOUND_CHANNEL_ADMIN_MIDI) - /client/verb/adjust_volume_lobby_music() set name = "Adjust Volume LobbyMusic" set category = "Preferences.Sound" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 5d02917f70..207eebd3e4 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -100,10 +100,8 @@ var/list/admin_verbs_ban = list( ) var/list/admin_verbs_sounds = list( - /client/proc/play_web_sound, - /client/proc/play_sound, - /client/proc/stop_web_sound, - /client/proc/stop_sound, + /client/proc/play_admin_sound, + /client/proc/stop_admin_sound, /client/proc/cmd_admin_vox_panel ) diff --git a/code/modules/admin/verbs/playsound.dm b/code/modules/admin/verbs/playsound.dm index 9d622fce50..0763a0e107 100644 --- a/code/modules/admin/verbs/playsound.dm +++ b/code/modules/admin/verbs/playsound.dm @@ -1,45 +1,83 @@ -/client/proc/play_web_sound() +/client/proc/play_admin_sound() set category = "Admin.Fun" - set name = "Play Internet Sound" + set name = "Play Admin Sound" if(!check_rights(R_SOUNDS)) return - var/ytdl = CONFIG_GET(string/invoke_youtubedl) - if(!ytdl) - to_chat(src, SPAN_BOLDWARNING("Youtube-dl was not configured, action unavailable"), confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + var/sound_mode = tgui_input_list(src, "Play a sound from which source?", "Select Source", list("Web", "Upload")) + if(!sound_mode) return - var/web_sound_input = input("Enter content URL (supported sites only)", "Play Internet Sound via youtube-dl") as text|null - if(!istext(web_sound_input) || !length(web_sound_input)) - return + var/list/data = list() + var/log_title = TRUE + var/web_sound_input + var/asset_name + var/must_send_assets = FALSE + var/announce_title = TRUE + + if(sound_mode == "Web") + var/ytdl = CONFIG_GET(string/invoke_youtubedl) + if(!ytdl) + to_chat(src, SPAN_BOLDWARNING("Youtube-dl was not configured, action unavailable"), confidential = TRUE) //Check config.txt for the INVOKE_YOUTUBEDL value + return - web_sound_input = trim(web_sound_input) + web_sound_input = input("Enter content URL (supported sites only)", "Play Internet Sound via youtube-dl") as text|null + if(!istext(web_sound_input) || !length(web_sound_input)) + return - if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) - to_chat(src, SPAN_WARNING("Non-http(s) URIs are not allowed.")) - to_chat(src, SPAN_WARNING("For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.")) - return + web_sound_input = trim(web_sound_input) - var/web_sound_url = "" - var/list/music_extra_data = list() - var/title + if(findtext(web_sound_input, ":") && !findtext(web_sound_input, GLOB.is_http_protocol)) + to_chat(src, SPAN_WARNING("Non-http(s) URIs are not allowed.")) + to_chat(src, SPAN_WARNING("For youtube-dl shortcuts like ytsearch: please use the appropriate full url from the website.")) + return - var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_url_scrub(web_sound_input)]\"") - var/errorlevel = output[SHELLEO_ERRORLEVEL] - var/stdout = output[SHELLEO_STDOUT] - var/stderr = output[SHELLEO_STDERR] + var/list/output = world.shelleo("[ytdl] --geo-bypass --format \"bestaudio\[ext=mp3]/best\[ext=mp4]\[height<=360]/bestaudio\[ext=m4a]/bestaudio\[ext=aac]\" --dump-single-json --no-playlist -- \"[shell_url_scrub(web_sound_input)]\"") + var/errorlevel = output[SHELLEO_ERRORLEVEL] + var/stdout = output[SHELLEO_STDOUT] + var/stderr = output[SHELLEO_STDERR] - if(errorlevel) - to_chat(src, SPAN_WARNING("Youtube-dl URL retrieval FAILED: [stderr]")) - return + if(errorlevel) + to_chat(src, SPAN_WARNING("Youtube-dl URL retrieval FAILED: [stderr]")) + return - var/list/data = list() - try - data = json_decode(stdout) - catch(var/exception/e) - to_chat(src, SPAN_WARNING("Youtube-dl JSON parsing FAILED: [e]: [stdout]")) - return + try + data = json_decode(stdout) + catch(var/exception/e) + to_chat(src, SPAN_WARNING("Youtube-dl JSON parsing FAILED: [e]: [stdout]")) + return + + else if(sound_mode == "Upload") + var/current_transport = CONFIG_GET(string/asset_transport) + if(!current_transport || current_transport == "simple") + if(tgui_alert(usr, "WARNING: Your server is using simple asset transport. Sounds will have to be sent directly to players, which may freeze the game for long durations. Are you SURE?", "Really play direct sound?", list("Yes", "No")) != "Yes") + return + must_send_assets = TRUE + + var/soundfile = input(usr, "Choose a sound file to play", "Upload Sound") as null|file + if(!soundfile) + return + + var/static/regex/only_extension = regex(@{"^.*\.([a-z0-9]{1,5})$"}, "gi") + var/extension = only_extension.Replace("[soundfile]", "$1") + if(!length(extension)) + to_chat(src, SPAN_WARNING("Invalid filename extension.")) + return + + var/static/playsound_notch = 1 + asset_name = "admin_sound_[playsound_notch++].[extension]" + SSassets.transport.register_asset(asset_name, soundfile) + message_admins("[key_name_admin(src)] uploaded admin sound '[soundfile]' to asset transport.") + + var/static/regex/remove_extension = regex(@{"\.[a-z0-9]+$"}, "gi") + data["title"] = remove_extension.Replace("[soundfile]", "") + data["url"] = SSassets.transport.get_asset_url(asset_name) + web_sound_input = "[soundfile]" + log_title = FALSE + var/title + var/web_sound_url = "" + var/list/music_extra_data = list() if(data["url"]) music_extra_data["link"] = data["url"] music_extra_data["title"] = data["title"] @@ -48,19 +86,28 @@ music_extra_data["start"] = data["start_time"] music_extra_data["end"] = data["end_time"] - if(web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) + if(!must_send_assets && web_sound_url && !findtext(web_sound_url, GLOB.is_http_protocol)) to_chat(src, SPAN_BOLDWARNING("BLOCKED: Content URL not using http(s) protocol"), confidential = TRUE) to_chat(src, SPAN_WARNING("The media provider returned a content URL that isn't using the HTTP or HTTPS protocol"), confidential = TRUE) return + switch(tgui_alert(src, "Show the name of this sound to the players?", "Sound Name", list("Yes","No","Cancel"))) + if("No") + music_extra_data["title"] = "Admin sound" + announce_title = FALSE + if("Cancel") + return + var/list/targets = list() var/list/sound_type_list = list( "Meme" = SOUND_ADMIN_MEME, "Atmospheric" = SOUND_ADMIN_ATMOSPHERIC ) - var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All Inview", "Single Inview")) + + var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All In View Range", "Single Mob")) var/sound_type = tgui_input_list(src, "What kind of sound is this?", "Select Sound Type", sound_type_list) sound_type = sound_type_list[sound_type] + switch(style) if("Globally") targets = GLOB.mob_list @@ -70,30 +117,40 @@ targets = GLOB.human_mob_list + GLOB.dead_mob_list if("Ghosts") targets = GLOB.observer_list + GLOB.dead_mob_list - if("All Inview") - targets = viewers(usr.client.view, src) - if("Single Inview") - var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", sortmobs()) + if("All In View Range") + var/list/atom/ranged_atoms = urange(usr.client.view, get_turf(usr)) + for(var/mob/receiver in ranged_atoms) + targets += receiver + if("Single Mob") + var/list/mob/all_mobs = sortmobs() + var/list/mob/all_client_mobs = list() + for(var/mob/mob in all_mobs) + if(mob.client) + all_client_mobs += mob + var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", all_client_mobs) if(QDELETED(choice)) return targets.Add(choice) else return - for(var/i in targets) - var/mob/M = i - var/client/client = M?.client - if((client?.prefs.toggles_sound & SOUND_INTERNET) && (client?.prefs.toggles_sound & sound_type)) + for(var/mob/mob as anything in targets) + var/client/client = mob?.client + if((client?.prefs?.toggles_sound & SOUND_MIDI) && (client?.prefs?.toggles_sound & sound_type)) + if(must_send_assets) + SSassets.transport.send_assets(client, asset_name) client?.tgui_panel?.play_music(web_sound_url, music_extra_data) + if(announce_title) + to_chat(client, SPAN_BOLDANNOUNCE("An admin played: [music_extra_data["title"]]"), confidential = TRUE) else client?.tgui_panel?.stop_music() - log_admin("[key_name(src)] played web sound: [web_sound_input] - [title] - [style]") - message_admins("[key_name_admin(src)] played web sound: [web_sound_input] - [title] - [style]") + log_admin("[key_name(src)] played admin sound: [web_sound_input] -[log_title ? " [title] -" : ""] [style]") + message_admins("[key_name_admin(src)] played admin sound: [web_sound_input] -[log_title ? " [title] -" : ""] [style]") -/client/proc/stop_web_sound() +/client/proc/stop_admin_sound() set category = "Admin.Fun" - set name = "Stop Internet Sounds" + set name = "Stop Admin Sounds" if(!check_rights(R_SOUNDS)) return @@ -105,86 +162,3 @@ log_admin("[key_name(src)] stopped the currently playing web sounds.") message_admins("[key_name_admin(src)] stopped the currently playing web sounds.") -/client/proc/play_sound(S as sound) - set category = "Admin.Fun" - set name = "Play Midi Sound" - if(!check_rights(R_SOUNDS)) - return - - var/freq = 1 - var/vol = tgui_input_number(src, "What volume would you like the sound to play at?", "Volume", 25, 100, 1) - if(!vol) - return - vol = clamp(vol, 1, 100) - - var/sound/admin_sound = new() - admin_sound.file = S - admin_sound.priority = 250 - admin_sound.channel = SOUND_CHANNEL_ADMIN_MIDI - admin_sound.frequency = freq - admin_sound.wait = 1 - admin_sound.repeat = FALSE - admin_sound.status = SOUND_STREAM - admin_sound.volume = vol - - var/showtitle = FALSE - var/res = alert(src, "Show the title of this song to the players?",, "Yes","No", "Cancel") - switch(res) - if("Yes") - showtitle = TRUE - if("Cancel") - return - - var/list/targets = list() - var/list/sound_type_list = list( - "Meme" = SOUND_ADMIN_MEME, - "Atmospheric" = SOUND_ADMIN_ATMOSPHERIC - ) - var/style = tgui_input_list(src, "Who do you want to play this to?", "Select Listeners", list("Globally", "Xenos", "Marines", "Ghosts", "All Inview", "Single Inview")) - var/sound_type = tgui_input_list(src, "What kind of sound is this?", "Select Sound Type", sound_type_list) - sound_type = sound_type_list[sound_type] - switch(style) - if("Globally") - targets = GLOB.mob_list - if("Xenos") - targets = GLOB.xeno_mob_list + GLOB.dead_mob_list - if("Marines") - targets = GLOB.human_mob_list + GLOB.dead_mob_list - if("Ghosts") - targets = GLOB.observer_list + GLOB.dead_mob_list - if("All Inview") - targets = viewers(usr.client.view, src) - if("Single Inview") - var/mob/choice = tgui_input_list(src, "Select the mob to play to:","Select Mob", sortmobs()) - if(QDELETED(choice)) - return - targets.Add(choice) - else - return - - for(var/items in targets) - var/mob/Mob = items - var/client/client = Mob?.client - if((client?.prefs.toggles_sound & SOUND_INTERNET) && (client?.prefs.toggles_sound & sound_type)) - admin_sound.volume = vol * client?.admin_music_volume - SEND_SOUND(Mob, admin_sound) - admin_sound.volume = vol - if(showtitle) - to_chat(client, SPAN_BOLDANNOUNCE("An admin played: [S]"), confidential = TRUE) - - log_admin("[key_name(src)] played midi sound [S] - [style]") - message_admins("[key_name_admin(src)] played midi sound [S] - [style]") - -/client/proc/stop_sound() - set category = "Admin.Fun" - set name = "Stop Midi Sounds" - - if(!check_rights(R_SOUNDS)) - return - - for(var/mob/M in GLOB.player_list) - if(M.client) - SEND_SOUND(M, sound(null)) - - log_admin("[key_name(src)] stopped midi sounds.") - message_admins("[key_name_admin(src)] stopped midi sounds.") diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 04b82628e3..ad12cb99b5 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -586,8 +586,7 @@ var/const/MAX_SAVE_SLOTS = 10 dat += "Tooltips: [tooltips ? "Enabled" : "Disabled"]
" dat += "tgui Window Mode: [(tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
" dat += "tgui Window Placement: [(tgui_lock) ? "Primary monitor" : "Free (default)"]
" - dat += "Play Admin Midis: [(toggles_sound & SOUND_MIDI) ? "Yes" : "No"]
" - dat += "Play Admin Internet Sounds: [(toggles_sound & SOUND_INTERNET) ? "Yes" : "No"]
" + dat += "Play Admin Sounds: [(toggles_sound & SOUND_MIDI) ? "Yes" : "No"]
" dat += "Toggle Meme or Atmospheric Sounds: Toggle
" dat += "Set Eye Blur Type: Set
" dat += "Play Lobby Music: [(toggles_sound & SOUND_LOBBY) ? "Yes" : "No"]
" @@ -1807,11 +1806,10 @@ var/const/MAX_SAVE_SLOTS = 10 if("rand_body") be_random_body = !be_random_body - if("hear_midis") + if("hear_admin_sounds") toggles_sound ^= SOUND_MIDI - - if("hear_internet") - toggles_sound ^= SOUND_INTERNET + if(!(toggles_sound & SOUND_MIDI)) + user?.client?.tgui_panel?.stop_music() if("lobby_music") toggles_sound ^= SOUND_LOBBY diff --git a/code/modules/client/preferences_toggles.dm b/code/modules/client/preferences_toggles.dm index 6f9026a437..080f071823 100644 --- a/code/modules/client/preferences_toggles.dm +++ b/code/modules/client/preferences_toggles.dm @@ -48,25 +48,10 @@ to_chat(src, "You will [(prefs.toggles_sound & SOUND_REBOOT) ? "now" : "no longer"] hear server reboot sounds.") /client/verb/togglemidis() - set name = "Silence Current Midi" + set name = "Silence Current Admin Sound" set category = "Preferences.Sound" - set desc = "Toggles hearing sounds uploaded by admins" - // prefs.toggles_sound ^= SOUND_MIDI // Toggle on/off - // prefs.save_preferences() // We won't save the change - it'll be a temporary switch instead of permanent, but they can still make it permanent in character setup. - if(prefs.toggles_sound & SOUND_MIDI) // Not using && midi_playing here - since we can't tell how long an admin midi is, the user should always be able to turn it off at any time. - to_chat(src, SPAN_BOLDNOTICE("The currently playing midi has been silenced.")) - var/sound/break_sound = sound(null, repeat = 0, wait = 0, channel = SOUND_CHANNEL_ADMIN_MIDI) - break_sound.priority = 250 - src << break_sound //breaks the client's sound output on SOUND_CHANNEL_ADMIN_MIDI - if(src.mob.client.midi_silenced) return - if(midi_playing) - total_silenced++ - message_admins("A player has silenced the currently playing midi. Total: [total_silenced] player(s).", 1) - src.mob.client.midi_silenced = 1 - spawn(30 SECONDS) // Prevents message_admins() spam. Should match with the midi_playing_timer spawn() in playsound.dm - src.mob.client.midi_silenced = 0 - else - to_chat(src, SPAN_BOLDNOTICE("You have 'Play Admin Midis' disabled in your Character Setup, so this verb is useless to you.")) + set desc = "Stops the current admin sound. You can also use the STOP icon in the player above tgchat." + tgui_panel?.stop_music() /client/verb/togglechat() set name = "Toggle Abovehead Chat" diff --git a/code/modules/tgui_panel/audio.dm b/code/modules/tgui_panel/audio.dm index 6806961599..d66421df53 100644 --- a/code/modules/tgui_panel/audio.dm +++ b/code/modules/tgui_panel/audio.dm @@ -3,8 +3,6 @@ * SPDX-License-Identifier: MIT */ -/// Admin music volume, from 0 to 1. -/client/var/admin_music_volume = 1 /** * public @@ -22,8 +20,9 @@ /datum/tgui_panel/proc/play_music(url, extra_data) if(!is_ready()) return - if(!findtext(url, GLOB.is_http_protocol)) - return + // Commented to allow playing via simple asset transport. Just check when calling. +// if(!findtext(url, GLOB.is_http_protocol)) +// return var/list/payload = list() if(length(extra_data) > 0) for(var/key in extra_data) diff --git a/code/modules/tgui_panel/tgui_panel.dm b/code/modules/tgui_panel/tgui_panel.dm index 9fb8b02b01..f33f190d80 100644 --- a/code/modules/tgui_panel/tgui_panel.dm +++ b/code/modules/tgui_panel/tgui_panel.dm @@ -85,9 +85,10 @@ ), )) return TRUE - if(type == "audio/setAdminMusicVolume") - client.admin_music_volume = payload["volume"] - return TRUE +// Deprecated due to removal of old sound play commands +// if(type == "audio/setAdminMusicVolume") +// client.admin_music_volume = payload["volume"] +// return TRUE if(type == "telemetry") analyze_telemetry(payload) return TRUE diff --git a/tgui/packages/tgui-panel/settings/reducer.js b/tgui/packages/tgui-panel/settings/reducer.js index 42d799fd65..0c93a5b94d 100644 --- a/tgui/packages/tgui-panel/settings/reducer.js +++ b/tgui/packages/tgui-panel/settings/reducer.js @@ -16,7 +16,7 @@ const initialState = { fontFamily: FONTS[0], lineHeight: 1.2, theme: 'light', - adminMusicVolume: 0.5, + adminMusicVolume: 0.2, // Keep these two state vars for compatibility with other servers highlightText: '', highlightColor: '#ffdd44', From 7947f362f80b6c553586ef551bc0a482159b0461 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 22:32:48 +0000 Subject: [PATCH 60/65] Automatic changelog for PR #4934 [ci skip] --- html/changelogs/AutoChangeLog-pr-4934.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4934.yml diff --git a/html/changelogs/AutoChangeLog-pr-4934.yml b/html/changelogs/AutoChangeLog-pr-4934.yml new file mode 100644 index 0000000000..f3b1e179d8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4934.yml @@ -0,0 +1,7 @@ +author: "fira" +delete-after: True +changes: + - balance: "Default Web Music Player volume is now 20% down from 50%. It was found too effective against new players." + - admin: "\"Play Internet Sound\" is now \"Play Admin Sound\" and optionally allow to hide the track name." + - admin: "\"Play Admin Sound\" can now be used with uploaded tracks, which use CDN delivery and the in-chat music player, granting players more control over them." + - admin: "Removed \"Play Midi Sound\"." \ No newline at end of file From 170f3cd8759141ba4ec245975895531c66b37e0d Mon Sep 17 00:00:00 2001 From: QuickLode <63271983+QuickLode@users.noreply.github.com> Date: Wed, 22 Nov 2023 15:49:09 -0800 Subject: [PATCH 61/65] Synthetic internal powercell (#4559) # About the pull request This PR should tackle two things: 1. Synths shouldn't lose blood 2. Synths shouldn't feel woozy (RP) revives #3589 from ghostsheet # Explain why it's good for the game Synthetics should not be feeling woozy. They also shouldn't be going blind from bloodloss. # Testing Photographs and Procedure
Screenshots & Videos Put screenshots and videos here with an empty line between the screenshots and the `
` tags. https://cdn.discordapp.com/attachments/490668342357786645/1157856898834497536/image.png?ex=651a21c4&is=6518d044&hm=813abcc8be5fd02367499e24651c97b7f840d8bcbc557364c534f1c0a61f25f5& https://cdn.discordapp.com/attachments/490668342357786645/1157856899132305529/image.png?ex=651a21c4&is=6518d044&hm=d9fb14dcaa5eb9fa8ad1280636a5f8f188a72e0e5045b892fc29192046acd139&
# Changelog :cl: add: Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death) fix: Synthetic's should no longer lose blood. code: moves blood proc to human.dm from blood.dm with above changes. /:cl: --------- Co-authored-by: harryob --- code/modules/mob/living/blood.dm | 78 +----------------- .../mob/living/carbon/human/species/human.dm | 82 +++++++++++++++++++ 2 files changed, 84 insertions(+), 76 deletions(-) diff --git a/code/modules/mob/living/blood.dm b/code/modules/mob/living/blood.dm index ab3ce823c6..dea179e6ad 100644 --- a/code/modules/mob/living/blood.dm +++ b/code/modules/mob/living/blood.dm @@ -2,80 +2,6 @@ BLOOD SYSTEM */ -/mob/living/proc/handle_blood() - return - -// Takes care blood loss and regeneration -/mob/living/carbon/human/handle_blood() - if(NO_BLOOD in species.flags) - return - - if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. - //Blood regeneration if there is some space - if(blood_volume < max_blood && nutrition >= 1) - blood_volume += 0.1 // regenerate blood VERY slowly - nutrition -= 0.25 - else if(blood_volume > max_blood) - blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body - if(blood_volume > limit_blood) - blood_volume = limit_blood // This should never happen, but lets make sure - - var/b_volume = blood_volume - - // Damaged heart virtually reduces the blood volume, as the blood isn't - // being pumped properly anymore. - if(species && species.has_organ["heart"]) - var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] - if(!heart) - b_volume = 0 - else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS) - b_volume *= 1 - else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED) - b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100 - - //Effects of bloodloss - if(b_volume <= BLOOD_VOLUME_SAFE) - /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100% - var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100) - /// How much oxyloss will there be from the next time blood processes - var/additional_oxyloss = (100 - blood_percentage) / 5 - /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement - var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100) - if(oxyloss < maximum_oxyloss) - oxyloss += round(max(additional_oxyloss, 0)) - - switch(b_volume) - if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) - if(prob(1)) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel [word].")) - if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) - if(eye_blurry < 50) - AdjustEyeBlur(6) - oxyloss += 3 - if(prob(15)) - apply_effect(rand(1,3), PARALYZE) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel very [word].")) - if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) - if(eye_blurry < 50) - AdjustEyeBlur(6) - oxyloss += 8 - toxloss += 3 - if(prob(15)) - apply_effect(rand(1,3), PARALYZE) - var/word = pick("dizzy","woozy","faint") - to_chat(src, SPAN_DANGER("You feel extremely [word].")) - if(0 to BLOOD_VOLUME_SURVIVE) - death(create_cause_data("blood loss")) - -// Xeno blood regeneration -/mob/living/carbon/xenomorph/handle_blood() - if(stat != DEAD) //Only living xenos regenerate blood - //Blood regeneration if there is some space - if(blood_volume < max_blood) - blood_volume = min(blood_volume + 1, max_blood) - //Makes a blood drop, leaking amt units of blood from the mob /mob/living/carbon/proc/drip(amt) if(!blood_volume) @@ -91,7 +17,7 @@ /mob/living/carbon/human/drip(amt) if(in_stasis) // stasis now stops bloodloss return - if(NO_BLOOD in species.flags) + if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC)) return ..() @@ -272,7 +198,7 @@ return "xenoblood" /mob/living/carbon/human/get_blood_id() - if((NO_BLOOD in species.flags)) + if(species.flags & NO_BLOOD) return if(special_blood) return special_blood diff --git a/code/modules/mob/living/carbon/human/species/human.dm b/code/modules/mob/living/carbon/human/species/human.dm index 6a59e97af8..add78365a3 100644 --- a/code/modules/mob/living/carbon/human/species/human.dm +++ b/code/modules/mob/living/carbon/human/species/human.dm @@ -1,3 +1,85 @@ +// handles all blood related problems for humans and synthetics, moved from blood.dm +/mob/living/proc/handle_blood() + return + +// Takes care blood loss and regeneration +/mob/living/carbon/human/handle_blood() + if((species.flags & NO_BLOOD) && !(species.flags & IS_SYNTHETIC)) + return + + if(stat != DEAD && bodytemperature >= 170) //Dead or cryosleep people do not pump the blood. + //Blood regeneration if there is some space + if(blood_volume < max_blood && nutrition >= 1) + blood_volume += 0.1 // regenerate blood VERY slowly + nutrition -= 0.25 + else if(blood_volume > max_blood) + blood_volume -= 0.1 // The reverse in case we've gotten too much blood in our body + if(blood_volume > limit_blood) + blood_volume = limit_blood // This should never happen, but lets make sure + + var/b_volume = blood_volume + + // Damaged heart virtually reduces the blood volume, as the blood isn't + // being pumped properly anymore. + if(species && species.has_organ["heart"]) + var/datum/internal_organ/heart/heart = internal_organs_by_name["heart"] + if(!heart) + b_volume = 0 + else if(chem_effect_flags & CHEM_EFFECT_ORGAN_STASIS) + b_volume *= 1 + else if(heart.damage >= heart.organ_status >= ORGAN_BRUISED) + b_volume *= Clamp(100 - (2 * heart.damage), 30, 100) / 100 + + //Effects of bloodloss + if(b_volume <= BLOOD_VOLUME_SAFE) + /// The blood volume turned into a %, with BLOOD_VOLUME_NORMAL being 100% + var/blood_percentage = b_volume / (BLOOD_VOLUME_NORMAL / 100) + /// How much oxyloss will there be from the next time blood processes + var/additional_oxyloss = (100 - blood_percentage) / 5 + /// The limit of the oxyloss gained, ignoring oxyloss from the switch statement + var/maximum_oxyloss = Clamp((100 - blood_percentage) / 2, oxyloss, 100) + if(oxyloss < maximum_oxyloss) + oxyloss += round(max(additional_oxyloss, 0)) + + switch(b_volume) + if(BLOOD_VOLUME_OKAY to BLOOD_VOLUME_SAFE) + if(species.flags & IS_SYNTHETIC) + if(prob(1)) + to_chat(src, SPAN_DANGER("Subdermal damage detected in critical region. Operational impact minimal. Diagnosis queued for maintenance cycle.")) + else + if(prob(1)) + var/word = pick("dizzy","woozy","faint") + to_chat(src, SPAN_DANGER("You feel [word].")) + if(BLOOD_VOLUME_BAD to BLOOD_VOLUME_OKAY) + if(species.flags & IS_SYNTHETIC) + if(prob(3)) + apply_effect(rand(1, 2), WEAKEN) + to_chat(src, SPAN_DANGER("Internal power cell fault detected.\nSeek nearest recharging station.")) + else + if(eye_blurry < 50) + AdjustEyeBlur(6) + oxyloss += 3 + if(prob(15)) + apply_effect(rand(1,3), PARALYZE) + var/word = pick("dizzy","woozy","faint") + to_chat(src, SPAN_DANGER("You feel very [word].")) + if(BLOOD_VOLUME_SURVIVE to BLOOD_VOLUME_BAD) + if(species.flags & IS_SYNTHETIC) + if(prob(5)) + apply_effect(rand(1, 2), PARALYZE) + to_chat(src, SPAN_DANGER("Critical power cell failure detected.\nSeek recharging station immediately.")) + else + if(eye_blurry < 50) + AdjustEyeBlur(6) + oxyloss += 8 + toxloss += 3 + if(prob(15)) + apply_effect(rand(1, 3), PARALYZE) + var/word = pick("dizzy", "woozy", "faint") + to_chat(src, SPAN_DANGER("You feel extremely [word].")) + if(0 to BLOOD_VOLUME_SURVIVE) + death(create_cause_data(species.flags & IS_SYNTHETIC ? "power failure" : "blood loss")) + /datum/species/human group = SPECIES_HUMAN name = "Human" From 446f6f1e81478d1e684f6dd1e827acfbd0a71a73 Mon Sep 17 00:00:00 2001 From: cm13-github <128137806+cm13-github@users.noreply.github.com> Date: Wed, 22 Nov 2023 23:57:18 +0000 Subject: [PATCH 62/65] Automatic changelog for PR #4559 [ci skip] --- html/changelogs/AutoChangeLog-pr-4559.yml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 html/changelogs/AutoChangeLog-pr-4559.yml diff --git a/html/changelogs/AutoChangeLog-pr-4559.yml b/html/changelogs/AutoChangeLog-pr-4559.yml new file mode 100644 index 0000000000..4bc42904d0 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4559.yml @@ -0,0 +1,6 @@ +author: "QuickLode" +delete-after: True +changes: + - rscadd: "Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death)" + - bugfix: "Synthetic's should no longer lose blood." + - code_imp: "moves blood proc to human.dm from blood.dm with above changes." \ No newline at end of file From 236a44319009607869c05698d3215a3a1ebe9d40 Mon Sep 17 00:00:00 2001 From: Changelogs Date: Thu, 23 Nov 2023 01:11:08 +0000 Subject: [PATCH 63/65] Automatic changelog compile [ci skip] --- html/changelogs/AutoChangeLog-pr-4559.yml | 6 --- html/changelogs/AutoChangeLog-pr-4827.yml | 4 -- html/changelogs/AutoChangeLog-pr-4934.yml | 7 --- html/changelogs/AutoChangeLog-pr-4944.yml | 4 -- html/changelogs/AutoChangeLog-pr-4953.yml | 4 -- html/changelogs/AutoChangeLog-pr-4978.yml | 4 -- html/changelogs/AutoChangeLog-pr-4980.yml | 4 -- html/changelogs/AutoChangeLog-pr-4981.yml | 4 -- html/changelogs/AutoChangeLog-pr-4984.yml | 5 --- html/changelogs/AutoChangeLog-pr-4985.yml | 4 -- html/changelogs/AutoChangeLog-pr-4987.yml | 4 -- html/changelogs/AutoChangeLog-pr-4988.yml | 4 -- html/changelogs/AutoChangeLog-pr-4989.yml | 4 -- html/changelogs/AutoChangeLog-pr-4990.yml | 6 --- html/changelogs/AutoChangeLog-pr-4994.yml | 4 -- html/changelogs/archive/2023-11.yml | 52 +++++++++++++++++++++++ 16 files changed, 52 insertions(+), 68 deletions(-) delete mode 100644 html/changelogs/AutoChangeLog-pr-4559.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4827.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4934.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4944.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4953.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4978.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4980.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4981.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4984.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4985.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4987.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4988.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4989.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4990.yml delete mode 100644 html/changelogs/AutoChangeLog-pr-4994.yml diff --git a/html/changelogs/AutoChangeLog-pr-4559.yml b/html/changelogs/AutoChangeLog-pr-4559.yml deleted file mode 100644 index 4bc42904d0..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4559.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "QuickLode" -delete-after: True -changes: - - rscadd: "Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death)" - - bugfix: "Synthetic's should no longer lose blood." - - code_imp: "moves blood proc to human.dm from blood.dm with above changes." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4827.yml b/html/changelogs/AutoChangeLog-pr-4827.yml deleted file mode 100644 index b95ce40e46..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4827.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "LC4492" -delete-after: True -changes: - - maptweak: "Changes to the CO office: The bathroom now faces into the CO's bedroom, and not to his main office. Victory cabinet have been moved to the Officer's mess because of logical issues. Extra-detail to the office, including an exclusive stamp, table flags and others. The safe is now inside the CO's bedroom, and not in his office. The energy APC is now inside the CO's bedroom, and not in his office. Jones finally have a BED again, or something like that. Other minor changes to objects, such the addition of a cane, a box of glasses for serving guests, etc." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4934.yml b/html/changelogs/AutoChangeLog-pr-4934.yml deleted file mode 100644 index f3b1e179d8..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4934.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: "fira" -delete-after: True -changes: - - balance: "Default Web Music Player volume is now 20% down from 50%. It was found too effective against new players." - - admin: "\"Play Internet Sound\" is now \"Play Admin Sound\" and optionally allow to hide the track name." - - admin: "\"Play Admin Sound\" can now be used with uploaded tracks, which use CDN delivery and the in-chat music player, granting players more control over them." - - admin: "Removed \"Play Midi Sound\"." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4944.yml b/html/changelogs/AutoChangeLog-pr-4944.yml deleted file mode 100644 index 0c8af20f86..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4944.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Steelpoint" -delete-after: True -changes: - - maptweak: "Secure Storage on LV-624 has been broken open, making it far less defendable but easier to access." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4953.yml b/html/changelogs/AutoChangeLog-pr-4953.yml deleted file mode 100644 index 4dd8c48e82..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4953.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Tweaked larva queue spawning: Now spawns as many larva as possible each cycle rather than one." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4978.yml b/html/changelogs/AutoChangeLog-pr-4978.yml deleted file mode 100644 index fc04901a02..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4978.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - rscdel: "Lesser drones die upon ghosting and are not offered to observers." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4980.yml b/html/changelogs/AutoChangeLog-pr-4980.yml deleted file mode 100644 index 67fc216fe9..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4980.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zzzmike" -delete-after: True -changes: - - qol: "Location name standardization. So, North is now Starboard. This is already how it is for everything except pumps." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4981.yml b/html/changelogs/AutoChangeLog-pr-4981.yml deleted file mode 100644 index 6edc5e60a3..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4981.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "ihatethisengine" -delete-after: True -changes: - - balance: "Oppressor no longer can abduct big xenos." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4984.yml b/html/changelogs/AutoChangeLog-pr-4984.yml deleted file mode 100644 index a2ddcbb933..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4984.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - rscadd: "Explosion handling logic to experimental sensor tower." - - bugfix: "Explosions no longer delete experimental sensor tower." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4985.yml b/html/changelogs/AutoChangeLog-pr-4985.yml deleted file mode 100644 index 9d8216e9eb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4985.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Birdtalon" -delete-after: True -changes: - - bugfix: "Pylons now differentiated in the input list with a (1) if in the same area." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4987.yml b/html/changelogs/AutoChangeLog-pr-4987.yml deleted file mode 100644 index ef48b7dd6e..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4987.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SortieEnMer" -delete-after: True -changes: - - qol: "Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4988.yml b/html/changelogs/AutoChangeLog-pr-4988.yml deleted file mode 100644 index ba67e425bd..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4988.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Fixed buried larva spawn grace period at start of round if there is a queue: Now join as xeno when there's a queue will only prevent buried larva spawns if there is no core." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4989.yml b/html/changelogs/AutoChangeLog-pr-4989.yml deleted file mode 100644 index 062eaf000f..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4989.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "zzzmike" -delete-after: True -changes: - - qol: "ARES hijack announcement specifies that pods will not crash at 100% fuel" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4990.yml b/html/changelogs/AutoChangeLog-pr-4990.yml deleted file mode 100644 index 8f54dcade5..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4990.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "Drathek" -delete-after: True -changes: - - bugfix: "Resin doors will now close on dead mobs that are merged with weeds (currently only human)." - - bugfix: "Resin doors will now restart their closing timer each open making the delay to close consistent." - - code_imp: "Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently merged with weeds." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-4994.yml b/html/changelogs/AutoChangeLog-pr-4994.yml deleted file mode 100644 index 2ace9428aa..0000000000 --- a/html/changelogs/AutoChangeLog-pr-4994.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "fira" -delete-after: True -changes: - - bugfix: "The Thunderdome floor is now explosion-proof." \ No newline at end of file diff --git a/html/changelogs/archive/2023-11.yml b/html/changelogs/archive/2023-11.yml index 66eaccb86d..89f61d3562 100644 --- a/html/changelogs/archive/2023-11.yml +++ b/html/changelogs/archive/2023-11.yml @@ -279,3 +279,55 @@ game hislittlecuzingames: - rscadd: Launch Announcement Alarm for dropships to notify ground forces of departure. +2023-11-23: + Birdtalon: + - rscdel: Lesser drones die upon ghosting and are not offered to observers. + - rscadd: Explosion handling logic to experimental sensor tower. + - bugfix: Explosions no longer delete experimental sensor tower. + - bugfix: Pylons now differentiated in the input list with a (1) if in the same + area. + Drathek: + - bugfix: Resin doors will now close on dead mobs that are merged with weeds (currently + only human). + - bugfix: Resin doors will now restart their closing timer each open making the + delay to close consistent. + - code_imp: Added a TRAIT_MERGED_WITH_WEEDS that is set whenever the mob is currently + merged with weeds. + - bugfix: 'Fixed buried larva spawn grace period at start of round if there is a + queue: Now join as xeno when there''s a queue will only prevent buried larva + spawns if there is no core.' + - bugfix: 'Tweaked larva queue spawning: Now spawns as many larva as possible each + cycle rather than one.' + LC4492: + - maptweak: 'Changes to the CO office: The bathroom now faces into the CO''s bedroom, + and not to his main office. Victory cabinet have been moved to the Officer''s + mess because of logical issues. Extra-detail to the office, including an exclusive + stamp, table flags and others. The safe is now inside the CO''s bedroom, and + not in his office. The energy APC is now inside the CO''s bedroom, and not in + his office. Jones finally have a BED again, or something like that. Other minor + changes to objects, such the addition of a cane, a box of glasses for serving + guests, etc.' + QuickLode: + - rscadd: Damage to Synthetic's internal causes debuffs, eventual powercell failure.(death) + - bugfix: Synthetic's should no longer lose blood. + - code_imp: moves blood proc to human.dm from blood.dm with above changes. + SortieEnMer: + - qol: Match Unlock Time in Nuke Timelock Message with Nuke Techtree Description + Steelpoint: + - maptweak: Secure Storage on LV-624 has been broken open, making it far less defendable + but easier to access. + fira: + - bugfix: The Thunderdome floor is now explosion-proof. + - balance: Default Web Music Player volume is now 20% down from 50%. It was found + too effective against new players. + - admin: '"Play Internet Sound" is now "Play Admin Sound" and optionally allow to + hide the track name.' + - admin: '"Play Admin Sound" can now be used with uploaded tracks, which use CDN + delivery and the in-chat music player, granting players more control over them.' + - admin: Removed "Play Midi Sound". + ihatethisengine: + - balance: Oppressor no longer can abduct big xenos. + zzzmike: + - qol: ARES hijack announcement specifies that pods will not crash at 100% fuel + - qol: Location name standardization. So, North is now Starboard. This is already + how it is for everything except pumps. From b884060d94b3cf2dd61f767d28e28c797f00c355 Mon Sep 17 00:00:00 2001 From: Morrow Date: Thu, 23 Nov 2023 10:26:40 -0500 Subject: [PATCH 64/65] thanksgiving --- code/modules/cm_marines/equipment/gear.dm | 10 +++++++++ .../holidays/thanskgiving/decorators.dm | 21 +++++++++++++++++++ colonialmarines.dme | 1 + 3 files changed, 32 insertions(+) create mode 100644 code/modules/holidays/thanskgiving/decorators.dm diff --git a/code/modules/cm_marines/equipment/gear.dm b/code/modules/cm_marines/equipment/gear.dm index 41d9482ba8..9a943c7072 100644 --- a/code/modules/cm_marines/equipment/gear.dm +++ b/code/modules/cm_marines/equipment/gear.dm @@ -313,6 +313,16 @@ reagents.add_reagent("sugar", 9) bitesize = 8 +/obj/item/reagent_container/food/snacks/mre_pack/thanksgiving + name = "\improper USCM Prepared Meal (turkey)" + desc = "A tray of standard USCM food. A few slices of turkey and some regenerated mashed potatos with a rather viscous gravy on top. A classic, if rather half-hearted, Thanksgiving meal." + icon_state = "MREe" + +/obj/item/reagent_container/food/snacks/mre_pack/thanksgiving/Initialize() + . = ..() + reagents.add_reagent("nutriment", 10) + bitesize = 3 + /obj/item/storage/box/pizza name = "food delivery box" desc = "A space-age food storage device, capable of keeping food extra fresh. Actually, it's just a box." diff --git a/code/modules/holidays/thanskgiving/decorators.dm b/code/modules/holidays/thanskgiving/decorators.dm new file mode 100644 index 0000000000..d539be2299 --- /dev/null +++ b/code/modules/holidays/thanskgiving/decorators.dm @@ -0,0 +1,21 @@ +/datum/game_decorator/thanksgiving + +/datum/game_decorator/thanksgiving/is_active_decor() + return (text2num(time2text(world.timeofday, "MM")) == 11) && (text2num(time2text(world.timeofday, "DD")) == 23) + +/datum/game_decorator/thanksgiving/turkey_meals + +/datum/game_decorator/thanksgiving/turkey_meals/decorate() + . = ..() + + for(var/obj/structure/machinery/cm_vending/sorted/marine_food/cycled_food_vendor in world) + cycled_food_vendor.listed_products = list( + list("PREPARED MEALS", -1, null, null), + list("USCM Prepared Meal (Turkey)", 15, /obj/item/reagent_container/food/snacks/mre_pack/thanksgiving, VENDOR_ITEM_REGULAR), + list("USCM Protein Bar", 50, /obj/item/reagent_container/food/snacks/protein_pack, VENDOR_ITEM_REGULAR), + list("FLASKS", -1, null, null), + list("Canteen", 10, /obj/item/reagent_container/food/drinks/flask/canteen, VENDOR_ITEM_REGULAR), + list("Metal Flask", 10, /obj/item/reagent_container/food/drinks/flask, VENDOR_ITEM_REGULAR), + list("USCM Flask", 5, /obj/item/reagent_container/food/drinks/flask/marine, VENDOR_ITEM_REGULAR), + list("W-Y Flask", 5, /obj/item/reagent_container/food/drinks/flask/weylandyutani, VENDOR_ITEM_REGULAR) + ) diff --git a/colonialmarines.dme b/colonialmarines.dme index 6fa9e44a96..86c1486ebc 100644 --- a/colonialmarines.dme +++ b/colonialmarines.dme @@ -1756,6 +1756,7 @@ #include "code\modules\holidays\halloween\decorators.dm" #include "code\modules\holidays\halloween\pumpkins\patches.dm" #include "code\modules\holidays\halloween\pumpkins\wearable.dm" +#include "code\modules\holidays\thanskgiving\decorators.dm" #include "code\modules\hydroponics\botany_disks.dm" #include "code\modules\hydroponics\grown_inedible.dm" #include "code\modules\hydroponics\hydro_tools.dm" From fb093b5e35af4371b6308dd40731f4e41155371f Mon Sep 17 00:00:00 2001 From: Doubleumc Date: Thu, 23 Nov 2023 17:54:22 -0500 Subject: [PATCH 65/65] APC singlecrew mapping (#73) --- maps/interiors/apc.dmm | 9 ++++++--- maps/interiors/apc_command.dmm | 21 +++++++++++++++++++-- maps/interiors/apc_med.dmm | 7 +++++-- maps/interiors/apc_no_fpw.dmm | 9 ++++++--- 4 files changed, 36 insertions(+), 10 deletions(-) diff --git a/maps/interiors/apc.dmm b/maps/interiors/apc.dmm index 82ca4649ac..0b3100180b 100644 --- a/maps/interiors/apc.dmm +++ b/maps/interiors/apc.dmm @@ -410,13 +410,16 @@ /turf/open/void/vehicle, /area/space) "W" = ( -/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor{ - dir = 4 - }, /obj/structure/vehicle_locker{ layer = 5.21; pixel_y = 28 }, +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 + }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" }, diff --git a/maps/interiors/apc_command.dmm b/maps/interiors/apc_command.dmm index 0da5353a6d..74e7b2bce5 100644 --- a/maps/interiors/apc_command.dmm +++ b/maps/interiors/apc_command.dmm @@ -76,6 +76,12 @@ icon = 'icons/obj/vehicles/interiors/general.dmi'; pixel_y = 28 }, +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 + }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, @@ -134,8 +140,11 @@ /obj/structure/vehicle_locker{ pixel_y = 28 }, -/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor{ - dir = 4 +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" @@ -283,6 +292,14 @@ }, /area/vehicle/apc/command) "I" = ( +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + dir = 1; + pixel_x = 8 + }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_13" }, diff --git a/maps/interiors/apc_med.dmm b/maps/interiors/apc_med.dmm index f4da99a6fe..4403bc89fc 100644 --- a/maps/interiors/apc_med.dmm +++ b/maps/interiors/apc_med.dmm @@ -258,8 +258,11 @@ /obj/structure/vehicle_locker{ pixel_y = 28 }, -/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor{ - dir = 4 +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" diff --git a/maps/interiors/apc_no_fpw.dmm b/maps/interiors/apc_no_fpw.dmm index 6a08e69959..cbbfa9e642 100644 --- a/maps/interiors/apc_no_fpw.dmm +++ b/maps/interiors/apc_no_fpw.dmm @@ -98,13 +98,16 @@ /turf/open/void/vehicle, /area/space) "l" = ( -/obj/effect/landmark/interior/spawn/vehicle_gunner_seat/armor{ - dir = 4 - }, /obj/structure/vehicle_locker{ layer = 5.21; pixel_y = 28 }, +/obj/structure/bed/chair/vehicle{ + pixel_x = -8 + }, +/obj/structure/bed/chair/vehicle{ + pixel_x = 8 + }, /turf/open/shuttle/vehicle{ icon_state = "floor_3_8_1" },