diff --git a/.travis.yml b/.travis.yml index cea5f854c9..09cefa27b3 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,13 +4,10 @@ language: c env: global: - BASENAME="vorestation" # $BASENAME.dmb, $BASENAME.dme, etc. - - BYOND_MAJOR="513" - - BYOND_MINOR="1520" - - MACRO_COUNT=4 cache: directories: - - $HOME/BYOND-${BYOND_MAJOR}.${BYOND_MINOR} + - $HOME/BYOND addons: apt: @@ -37,13 +34,17 @@ jobs: include: - stage: "File Tests" #This is the odd man out, with specific installs and stuff. name: "Validate Files" - install: #Need python for some of the tag matching stuff - - pip install --user PyYaml -q - - pip install --user beautifulsoup4 -q - script: ./tools/travis/validate_files.sh addons: apt: - packages: ~ # Don't need any packages for this + packages: + - python3 + - python3-pip + - python3-setuptools + install: #Need python for some of the tag matching stuff + - tools/travis/install_build_deps.sh + script: + - tools/travis/validate_files.sh + - tools/travis/build_tgui.sh - stage: "Unit Tests" env: TEST_DEFINE="UNIT_TEST" TEST_FILE="code/_unit_tests.dm" RUN="1" name: "Compile normally (unit tests)" diff --git a/_build_dependencies.sh b/_build_dependencies.sh new file mode 100644 index 0000000000..b33548a58a --- /dev/null +++ b/_build_dependencies.sh @@ -0,0 +1,13 @@ +# This file has all the information on what versions of libraries are thrown into the code +# For dreamchecker +export SPACEMANDMM_TAG=suite-1.4 +# For NanoUI + TGUI +export NODE_VERSION=12 +# For the scripts in tools +export PHP_VERSION=5.6 +# Byond Major +export BYOND_MAJOR=513 +# Byond Minor +export BYOND_MINOR=1526 +# Macro Count +export MACRO_COUNT=4 \ No newline at end of file diff --git a/code/__defines/chemistry_vr.dm b/code/__defines/chemistry_vr.dm index 9aca934cf6..cc2a46f46d 100644 --- a/code/__defines/chemistry_vr.dm +++ b/code/__defines/chemistry_vr.dm @@ -1,4 +1,5 @@ // More for our custom races #define IS_CHIMERA 12 #define IS_SHADEKIN 13 -#define IS_GREY 14 //ywedit \ No newline at end of file +#define IS_ALRAUNE 14 +#define IS_GREY 15 //ywedit \ No newline at end of file diff --git a/code/__defines/misc.dm b/code/__defines/misc.dm index 1cf473f126..bad0a084a7 100644 --- a/code/__defines/misc.dm +++ b/code/__defines/misc.dm @@ -46,6 +46,10 @@ #define CLIENT_FROM_VAR(I) (ismob(I) ? I:client : (isclient(I) ? I : null)) + +//Persistence +#define AREA_FLAG_IS_NOT_PERSISTENT 8 // SSpersistence will not track values from this area. + // Shuttles. // These define the time taken for the shuttle to get to the space station, and the time before it leaves again. @@ -351,3 +355,110 @@ var/global/list/##LIST_NAME = list();\ #define JOB_SILICON 0x6 // 2|4, probably don't set jobs to this, but good for checking #define DEFAULT_OVERMAP_RANGE 0 // Makes general computers and devices be able to connect to other overmap z-levels on the same tile. + +/* + Used for wire name appearances. Replaces the color name on the left with the one on the right. + The color on the left is the one used as the actual color of the wire, but it doesn't look good when written. + So, we need to replace the name to something that looks better. +*/ +#define LIST_COLOR_RENAME \ + list( \ + "rebeccapurple" = "dark purple",\ + "darkslategrey" = "dark grey", \ + "darkolivegreen"= "dark green", \ + "darkslateblue" = "dark blue", \ + "darkkhaki" = "khaki", \ + "darkseagreen" = "light green",\ + "midnightblue" = "blue", \ + "lightgrey" = "light grey", \ + "darkgrey" = "dark grey", \ + "darkmagenta" = "dark magenta",\ + "steelblue" = "blue", \ + "goldenrod" = "gold" \ + ) + +/// Pure Black and white colorblindness. Every species except Vulpkanins and Tajarans will have this. +#define GREYSCALE_COLOR_REPLACE \ + list( \ + "red" = "grey", \ + "blue" = "grey", \ + "green" = "grey", \ + "orange" = "light grey", \ + "brown" = "grey", \ + "gold" = "light grey", \ + "cyan" = "silver", \ + "magenta" = "grey", \ + "purple" = "grey", \ + "pink" = "light grey" \ + ) + +/// Red colorblindness. Vulpkanins/Wolpins have this. +#define PROTANOPIA_COLOR_REPLACE \ + list( \ + "red" = "darkolivegreen", \ + "darkred" = "darkolivegreen", \ + "green" = "yellow", \ + "orange" = "goldenrod", \ + "gold" = "goldenrod", \ + "brown" = "darkolivegreen", \ + "cyan" = "steelblue", \ + "magenta" = "blue", \ + "purple" = "darkslategrey", \ + "pink" = "beige" \ + ) + +/// Green colorblindness. +#define DEUTERANOPIA_COLOR_REPLACE \ + list( \ + "red" = "goldenrod", \ + "green" = "tan", \ + "yellow" = "tan", \ + "orange" = "goldenrod", \ + "gold" = "burlywood", \ + "brown" = "saddlebrown",\ + "cyan" = "lavender", \ + "magenta" = "blue", \ + "darkmagenta" = "darkslateblue", \ + "purple" = "slateblue", \ + "pink" = "thistle" \ + ) + +/// Yellow-Blue colorblindness. Tajarans/Farwas have this. +#define TRITANOPIA_COLOR_REPLACE \ + list( \ + "red" = "rebeccapurple", \ + "blue" = "darkslateblue", \ + "green" = "darkolivegreen", \ + "orange" = "darkkhaki", \ + "gold" = "darkkhaki", \ + "brown" = "rebeccapurple", \ + "cyan" = "darkseagreen", \ + "magenta" = "darkslateblue", \ + "navy" = "darkslateblue", \ + "purple" = "darkslateblue", \ + "pink" = "lightgrey" \ + ) + +//Various stuff used in Persistence + +#define send_output(target, msg, control) target << output(msg, control) + +#define send_link(target, url) target << link(url) + +#define SPAN_NOTICE(X) "[X]" + +#define SPAN_WARNING(X) "[X]" + +#define SPAN_DANGER(X) "[X]" + +#define SPAN_OCCULT(X) "[X]" + +#define FONT_SMALL(X) "[X]" + +#define FONT_NORMAL(X) "[X]" + +#define FONT_LARGE(X) "[X]" + +#define FONT_HUGE(X) "[X]" + +#define FONT_GIANT(X) "[X]" diff --git a/code/__defines/species_languages_vr.dm b/code/__defines/species_languages_vr.dm index 831df5253d..54362278d4 100644 --- a/code/__defines/species_languages_vr.dm +++ b/code/__defines/species_languages_vr.dm @@ -1,5 +1,6 @@ #define SPECIES_WHITELIST_SELECTABLE 0x20 // Can select and customize, but not join as +#define LANGUAGE_DRUDAKAR "D'Rudak'Ar" #define LANGUAGE_SLAVIC "Pan-Slavic" #define LANGUAGE_BIRDSONG "Birdsong" #define LANGUAGE_SAGARU "Sagaru" diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 0fa2532bf9..79b82bfe22 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -77,6 +77,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define INIT_ORDER_AI -22 #define INIT_ORDER_AI_FAST -23 #define INIT_ORDER_GAME_MASTER -24 +#define INIT_ORDER_PERSISTENCE -25 #define INIT_ORDER_TICKER -50 #define INIT_ORDER_CHAT -100 //Should be last to ensure chat remains smooth during init. @@ -100,6 +101,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G #define FIRE_PRIORITY_TICKER 60 #define FIRE_PRIORITY_PLANETS 75 #define FIRE_PRIORITY_MACHINES 100 +#define FIRE_PRIORITY_TGUI 110 #define FIRE_PRIORITY_PROJECTILES 150 #define FIRE_PRIORITY_CHAT 400 #define FIRE_PRIORITY_OVERLAYS 500 diff --git a/code/__defines/tgui.dm b/code/__defines/tgui.dm new file mode 100644 index 0000000000..a6708c8bb7 --- /dev/null +++ b/code/__defines/tgui.dm @@ -0,0 +1,19 @@ +/// Maximum number of windows that can be suspended/reused +#define TGUI_WINDOW_SOFT_LIMIT 5 +/// Maximum number of open windows +#define TGUI_WINDOW_HARD_LIMIT 9 + +/// Maximum ping timeout allowed to detect zombie windows +#define TGUI_PING_TIMEOUT 4 SECONDS + +/// Window does not exist +#define TGUI_WINDOW_CLOSED 0 +/// Window was just opened, but is still not ready to be sent data +#define TGUI_WINDOW_LOADING 1 +/// Window is free and ready to receive data +#define TGUI_WINDOW_READY 2 + +/// Get a window id based on the provided pool index +#define TGUI_WINDOW_ID(index) "tgui-window-[index]" +/// Get a pool index of the provided window id +#define TGUI_WINDOW_INDEX(window_id) text2num(copytext(window_id, 13)) \ No newline at end of file diff --git a/code/__defines/wires.dm b/code/__defines/wires.dm new file mode 100644 index 0000000000..9fce2e8b87 --- /dev/null +++ b/code/__defines/wires.dm @@ -0,0 +1,122 @@ +// Wire defines for all machines/items. + +// Miscellaneous +#define WIRE_DUD_PREFIX "__dud" + +// General +#define WIRE_IDSCAN "ID Scan" +#define WIRE_MAIN_POWER1 "Primary Power" +#define WIRE_MAIN_POWER2 "Secondary Power" +#define WIRE_AI_CONTROL "AI Control" +#define WIRE_ELECTRIFY "Electrification" +#define WIRE_SAFETY "Safety" + +// Vendors and smartfridges +#define WIRE_THROW_ITEM "Item Throw" +#define WIRE_CONTRABAND "Contraband" + +// Airlock +#define WIRE_DOOR_BOLTS "Door Bolts" +#define WIRE_BACKUP_POWER1 "Primary Backup Power" +#define WIRE_BACKUP_POWER2 "Secondary Backup Power" +#define WIRE_OPEN_DOOR "Door State" +#define WIRE_SPEED "Door Timing" +#define WIRE_BOLT_LIGHT "Bolt Lights" + +// Air alarm +#define WIRE_SYPHON "Siphon" +#define WIRE_AALARM "Atmospherics Alarm" + +// Camera +#define WIRE_FOCUS "Focus" +#define WIRE_CAM_LIGHT "Camera Light" +#define WIRE_CAM_ALARM "Camera Alarm" + +// Grid Check +#define WIRE_REBOOT "Reboot" +#define WIRE_LOCKOUT "Lockout" +#define WIRE_ALLOW_MANUAL1 "Manual Override 1" +#define WIRE_ALLOW_MANUAL2 "Manual Override 2" +#define WIRE_ALLOW_MANUAL3 "Manual Override 3" + +// Jukebox +#define WIRE_POWER "Power" +#define WIRE_JUKEBOX_HACK "Hack" +#define WIRE_SPEEDUP "Speedup" +#define WIRE_SPEEDDOWN "Speeddown" +#define WIRE_REVERSE "Reverse" +#define WIRE_START "Start" +#define WIRE_STOP "Stop" +#define WIRE_PREV "Prev" +#define WIRE_NEXT "Next" + +// Mulebot +#define WIRE_MOB_AVOIDANCE "Mob Avoidance" +#define WIRE_LOADCHECK "Load Checking" +#define WIRE_MOTOR1 "Primary Motor" +#define WIRE_MOTOR2 "Secondary Motor" +#define WIRE_REMOTE_RX "Signal Receiver" +#define WIRE_REMOTE_TX "Signal Sender" +#define WIRE_BEACON_RX "Beacon Receiver" + +// Explosives, bombs +#define WIRE_EXPLODE "Explode" // Explodes if pulsed or cut while active, defuses a bomb that isn't active on cut. +#define WIRE_EXPLODE_DELAY "Explode Delay" // Explodes immediately if cut, explodes 3 seconds later if pulsed. +#define WIRE_DISARM "Disarm" // Explicit "disarming" wire. +#define WIRE_BADDISARM "Bad Disarm" // Disarming wire, except it blows up anyways. +#define WIRE_BOMB_UNBOLT "Unbolt" // Unbolts the bomb if cut, hint on pulsed. +#define WIRE_BOMB_DELAY "Delay" // Raises the timer on pulse, does nothing on cut. +#define WIRE_BOMB_PROCEED "Proceed" // Lowers the timer, explodes if cut while the bomb is active. +#define WIRE_BOMB_ACTIVATE "Activate" // Will start a bombs timer if pulsed, will hint if pulsed while already active, will stop a timer a bomb on cut. + +// Nuclear bomb +#define WIRE_BOMB_LIGHT "Bomb Light" +#define WIRE_BOMB_TIMING "Bomb Timing" +#define WIRE_BOMB_SAFETY "Bomb Safety" + +// Particle accelerator +#define WIRE_PARTICLE_POWER "Power Toggle" // Toggles whether the PA is on or not. +#define WIRE_PARTICLE_STRENGTH "Strength" // Determines the strength of the PA. +#define WIRE_PARTICLE_INTERFACE "Interface" // Determines the interface showing up. +#define WIRE_PARTICLE_POWER_LIMIT "Maximum Power" // Determines how strong the PA can be. + +// Autolathe +#define WIRE_AUTOLATHE_HACK "Hack" +#define WIRE_AUTOLATHE_DISABLE "Disable" + +// Radio +#define WIRE_RADIO_SIGNAL "Signal" +#define WIRE_RADIO_RECEIVER "Receiver" +#define WIRE_RADIO_TRANSMIT "Transmitter" + +// Cyborg +#define WIRE_BORG_LOCKED "Lockdown" +#define WIRE_BORG_CAMERA "Camera" +#define WIRE_BORG_LAWCHECK "Law Check" + +// Seed Storage +#define WIRE_SEED_SMART "Smart" +#define WIRE_SEED_LOCKDOWN "Lockdown" + +// Shield Generator +#define WIRE_SHIELD_CONTROL "Shield Controls" // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing. + +// SMES +#define WIRE_SMES_RCON "RCon" // Remote control (AI and consoles), cut to disable +#define WIRE_SMES_INPUT "Input" // Input wire, cut to disable input, pulse to disable for 60s +#define WIRE_SMES_OUTPUT "Output" // Output wire, cut to disable output, pulse to disable for 60s +#define WIRE_SMES_GROUNDING "Grounding" // Cut to quickly discharge causing sparks, pulse to only create few sparks +#define WIRE_SMES_FAILSAFES "Failsafes" // Cut to disable failsafes, mend to reenable + +// Suit storage unit +#define WIRE_SSU_UV "UV wire" + +// Tesla coil +#define WIRE_TESLACOIL_ZAP "Zap" + +// RIGsuits +#define WIRE_RIG_SECURITY "Security" +#define WIRE_RIG_AI_OVERRIDE "AI Override" +#define WIRE_RIG_SYSTEM_CONTROL "System Control" +#define WIRE_RIG_INTERFACE_LOCK "Interface Lock" +#define WIRE_RIG_INTERFACE_SHOCK "Interface Shock" diff --git a/code/_global_vars/lists/misc.dm b/code/_global_vars/lists/misc.dm index c10fcba530..adec2bf824 100644 --- a/code/_global_vars/lists/misc.dm +++ b/code/_global_vars/lists/misc.dm @@ -1,2 +1,5 @@ GLOBAL_LIST_INIT(speech_toppings, list("|" = "i", "+" = "b", "_" = "u")) GLOBAL_LIST_EMPTY(meteor_list) + +/// List of wire colors for each object type of that round. One for airlocks, one for vendors, etc. +GLOBAL_LIST_EMPTY(wire_color_directory) // This is an associative list with the `holder_type` as the key, and a list of colors as the value. \ No newline at end of file diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 6ec3ccb966..194ec86d3d 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -615,4 +615,25 @@ datum/projectile_data /proc/window_flash(var/client_or_usr) if (!client_or_usr) return - winset(client_or_usr, "mainwindow", "flash=5") \ No newline at end of file + winset(client_or_usr, "mainwindow", "flash=5") + +/** + * Get a bounding box of a list of atoms. + * + * Arguments: + * - atoms - List of atoms. Can accept output of view() and range() procs. + * + * Returns: list(x1, y1, x2, y2) + */ +/proc/get_bbox_of_atoms(list/atoms) + var/list/list_x = list() + var/list/list_y = list() + for(var/_a in atoms) + var/atom/a = _a + list_x += a.x + list_y += a.y + return list( + min(list_x), + min(list_y), + max(list_x), + max(list_y)) \ No newline at end of file diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index fdb127e21e..edfff4ceab 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -154,7 +154,7 @@ var/global/list/edible_trash = list(/obj/item/broken_device, /obj/item/weapon/bone, /obj/item/weapon/broken_bottle, /obj/item/weapon/card/emag_broken, - /obj/item/weapon/cigbutt, + /obj/item/trash/cigbutt, /obj/item/weapon/circuitboard/broken, /obj/item/weapon/clipboard, /obj/item/weapon/corncob, diff --git a/code/_helpers/logging.dm b/code/_helpers/logging.dm index d27abcbf7e..757555f037 100644 --- a/code/_helpers/logging.dm +++ b/code/_helpers/logging.dm @@ -176,6 +176,22 @@ /proc/log_unit_test(text) to_world_log("## UNIT_TEST: [text]") +/proc/log_tgui(user_or_client, text) + var/entry = "" + if(!user_or_client) + entry += "no user" + else if(istype(user_or_client, /mob)) + var/mob/user = user_or_client + entry += "[user.ckey] (as [user])" + else if(istype(user_or_client, /client)) + var/client/client = user_or_client + entry += "[client.ckey]" + entry += ":\n[text]" + WRITE_LOG(diary, entry) + +/proc/log_asset(text) + WRITE_LOG(diary, "ASSET: [text]") + /proc/report_progress(var/progress_message) admin_notice("[progress_message]", R_DEBUG) to_world_log(progress_message) diff --git a/code/_helpers/sorts/comparators.dm b/code/_helpers/sorts/comparators.dm index a9ca5748b7..f4a8c575c9 100644 --- a/code/_helpers/sorts/comparators.dm +++ b/code/_helpers/sorts/comparators.dm @@ -56,3 +56,9 @@ . = B[STAT_ENTRY_TIME] - A[STAT_ENTRY_TIME] if (!.) . = B[STAT_ENTRY_COUNT] - A[STAT_ENTRY_COUNT] + +// Compares complexity of recipes for use in cooking, etc. This is for telling which recipe to make, not for showing things to the player. +/proc/cmp_recipe_complexity_dsc(datum/recipe/A, datum/recipe/B) + var/a_score = LAZYLEN(A.items) + LAZYLEN(A.reagents) + LAZYLEN(A.fruit) + var/b_score = LAZYLEN(B.items) + LAZYLEN(B.reagents) + LAZYLEN(B.fruit) + return b_score - a_score \ No newline at end of file diff --git a/code/_helpers/text.dm b/code/_helpers/text.dm index 67844cf4a2..1b028e117b 100644 --- a/code/_helpers/text.dm +++ b/code/_helpers/text.dm @@ -138,6 +138,19 @@ /proc/sanitize_old(var/t,var/list/repl_chars = list("\n"="#","\t"="#")) return html_encode(replace_characters(t,repl_chars)) + +//Removes a few problematic characters +/proc/sanitize_simple(t,list/repl_chars = list("\n"="#","\t"="#")) + for(var/char in repl_chars) + var/index = findtext(t, char) + while(index) + t = copytext(t, 1, index) + repl_chars[char] + copytext(t, index + length(char)) + index = findtext(t, char, index + length(char)) + return t + +/proc/sanitize_filename(t) + return sanitize_simple(t, list("\n"="", "\t"="", "/"="", "\\"="", "?"="", "%"="", "*"="", ":"="", "|"="", "\""="", "<"="", ">"="")) + /* * Text searches */ diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index e218727049..99a313e454 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -1571,6 +1571,14 @@ var/mob/dview/dview_mob = new /datum/proc/stack_trace(msg) CRASH(msg) +GLOBAL_REAL_VAR(list/stack_trace_storage) +/proc/gib_stack_trace() + stack_trace_storage = list() + stack_trace() + stack_trace_storage.Cut(1, min(3,stack_trace_storage.len)) + . = stack_trace_storage + stack_trace_storage = null + // \ref behaviour got changed in 512 so this is necesary to replicate old behaviour. // If it ever becomes necesary to get a more performant REF(), this lies here in wait // #define REF(thing) (thing && istype(thing, /datum) && (thing:datum_flags & DF_USE_TAG) && thing:tag ? "[thing:tag]" : "\ref[thing]") diff --git a/code/_macros.dm b/code/_macros.dm index 5b7fb379d3..4796f93b47 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -37,4 +37,4 @@ #define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id) -#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } +#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") } \ No newline at end of file diff --git a/code/_onclick/hud/fullscreen.dm b/code/_onclick/hud/fullscreen.dm index 7060451b27..f0a959c6a7 100644 --- a/code/_onclick/hud/fullscreen.dm +++ b/code/_onclick/hud/fullscreen.dm @@ -123,8 +123,3 @@ /obj/screen/fullscreen/fishbed icon_state = "fishbed" - -#undef FULLSCREEN_LAYER -#undef BLIND_LAYER -#undef DAMAGE_LAYER -#undef CRIT_LAYER \ No newline at end of file diff --git a/code/_onclick/hud/map_popups.dm b/code/_onclick/hud/map_popups.dm new file mode 100644 index 0000000000..aae5c808c9 --- /dev/null +++ b/code/_onclick/hud/map_popups.dm @@ -0,0 +1,171 @@ +/client + /** + * Assoc list with all the active maps - when a screen obj is added to + * a map, it's put in here as well. + * + * Format: list( = list(/obj/screen)) + */ + var/list/screen_maps = list() + +/obj/screen + /** + * Map name assigned to this object. + * Automatically set by /client/proc/register_map_obj. + */ + var/assigned_map + /** + * Mark this object as garbage-collectible after you clean the map + * it was registered on. + * + * This could probably be changed to be a proc, for conditional removal. + * But for now, this works. + */ + var/del_on_map_removal = TRUE + +/** + * A screen object, which acts as a container for turfs and other things + * you want to show on the map, which you usually attach to "vis_contents". + */ +/obj/screen/map_view + icon_state = "blank" + // Map view has to be on the lowest plane to enable proper lighting + layer = SPACE_PLANE + plane = SPACE_PLANE + +/** + * A generic background object. + * It is also implicitly used to allocate a rectangle on the map, which will + * be used for auto-scaling the map. + */ +/obj/screen/background + name = "background" + icon = 'icons/mob/map_backgrounds.dmi' + icon_state = "clear" + layer = SPACE_PLANE + plane = SPACE_PLANE + +/** + * Sets screen_loc of this screen object, in form of point coordinates, + * with optional pixel offset (px, py). + * + * If applicable, "assigned_map" has to be assigned before this proc call. + */ +/obj/screen/proc/set_position(x, y, px = 0, py = 0) + if(assigned_map) + screen_loc = "[assigned_map]:[x]:[px],[y]:[py]" + else + screen_loc = "[x]:[px],[y]:[py]" + +/** + * Sets screen_loc to fill a rectangular area of the map. + * + * If applicable, "assigned_map" has to be assigned before this proc call. + */ +/obj/screen/proc/fill_rect(x1, y1, x2, y2) + if(assigned_map) + screen_loc = "[assigned_map]:[x1],[y1] to [x2],[y2]" + else + screen_loc = "[x1],[y1] to [x2],[y2]" + +/** + * Registers screen obj with the client, which makes it visible on the + * assigned map, and becomes a part of the assigned map's lifecycle. + */ +/client/proc/register_map_obj(obj/screen/screen_obj) + if(!screen_obj.assigned_map) + CRASH("Can't register [screen_obj] without 'assigned_map' property.") + if(!screen_maps[screen_obj.assigned_map]) + screen_maps[screen_obj.assigned_map] = list() + // NOTE: Possibly an expensive operation + var/list/screen_map = screen_maps[screen_obj.assigned_map] + if(!screen_map.Find(screen_obj)) + screen_map += screen_obj + if(!screen.Find(screen_obj)) + screen += screen_obj + +/** + * Clears the map of registered screen objects. + * + * Not really needed most of the time, as the client's screen list gets reset + * on relog. any of the buttons are going to get caught by garbage collection + * anyway. they're effectively qdel'd. + */ +/client/proc/clear_map(map_name) + if(!map_name || !(map_name in screen_maps)) + return FALSE + for(var/obj/screen/screen_obj in screen_maps[map_name]) + screen_maps[map_name] -= screen_obj + if(screen_obj.del_on_map_removal) + qdel(screen_obj) + screen_maps -= map_name + +/** + * Clears all the maps of registered screen objects. + */ +/client/proc/clear_all_maps() + for(var/map_name in screen_maps) + clear_map(map_name) + +/** + * Creates a popup window with a basic map element in it, without any + * further initialization. + * + * Ratio is how many pixels by how many pixels (keep it simple). + * + * Returns a map name. + */ +/client/proc/create_popup(name, ratiox = 100, ratioy = 100) + winclone(src, "popupwindow", name) + var/list/winparams = list() + winparams["size"] = "[ratiox]x[ratioy]" + winparams["on-close"] = "handle-popup-close [name]" + winset(src, "[name]", list2params(winparams)) + winshow(src, "[name]", 1) + + var/list/params = list() + params["parent"] = "[name]" + params["type"] = "map" + params["size"] = "[ratiox]x[ratioy]" + params["anchor1"] = "0,0" + params["anchor2"] = "[ratiox],[ratioy]" + winset(src, "[name]_map", list2params(params)) + + return "[name]_map" + +/** + * Create the popup, and get it ready for generic use by giving + * it a background. + * + * Width and height are multiplied by 64 by default. + */ +/client/proc/setup_popup(popup_name, width = 9, height = 9, \ + tilesize = 2, bg_icon) + if(!popup_name) + return + clear_map("[popup_name]_map") + var/x_value = world.icon_size * tilesize * width + var/y_value = world.icon_size * tilesize * height + var/map_name = create_popup(popup_name, x_value, y_value) + + var/obj/screen/background/background = new + background.assigned_map = map_name + background.fill_rect(1, 1, width, height) + if(bg_icon) + background.icon_state = bg_icon + register_map_obj(background) + + return map_name + +/** + * Closes a popup. + */ +/client/proc/close_popup(popup) + winshow(src, popup, 0) + handle_popup_close(popup) + +/** + * When the popup closes in any way (player or proc call) it calls this. + */ +/client/verb/handle_popup_close(window_id as text) + set hidden = TRUE + clear_map("[window_id]_map") diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 64535b174a..e393248c6e 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -470,7 +470,6 @@ var/mob/living/silicon/robot/R = usr if(R.module) R.uneq_active() - R.hud_used.update_robot_modules_display() else to_chat(R, "You haven't selected a module yet.") diff --git a/code/_onclick/hud/skybox.dm b/code/_onclick/hud/skybox.dm index f055ea8693..efd1179891 100644 --- a/code/_onclick/hud/skybox.dm +++ b/code/_onclick/hud/skybox.dm @@ -3,17 +3,20 @@ #define SKYBOX_TURFS (SKYBOX_PIXELS/WORLD_ICON_SIZE) // Skybox screen object. -/obj/skybox +/obj/screen/skybox name = "skybox" + icon = null + appearance_flags = TILE_BOUND|PIXEL_SCALE mouse_opacity = 0 anchored = TRUE simulated = FALSE screen_loc = "CENTER,CENTER" + layer = OBJ_LAYER plane = SKYBOX_PLANE blend_mode = BLEND_MULTIPLY // You actually need to do it this way or you see it in occlusion. // Adjust transform property to scale for client's view var. We assume the skybox is 736x736 px -/obj/skybox/proc/scale_to_view(var/view) +/obj/screen/skybox/proc/scale_to_view(var/view) var/matrix/M = matrix() // Translate to center the icon over us! M.Translate(-(SKYBOX_PIXELS - WORLD_ICON_SIZE) / 2) @@ -23,7 +26,7 @@ src.transform = M /client - var/obj/skybox/skybox + var/obj/screen/skybox/skybox /client/proc/update_skybox(rebuild) if(!skybox) diff --git a/code/controllers/configuration.dm b/code/controllers/configuration.dm index 3001b26f9e..f50d2b847d 100644 --- a/code/controllers/configuration.dm +++ b/code/controllers/configuration.dm @@ -237,6 +237,8 @@ var/list/gamemode_cache = list() var/static/dooc_allowed = 1 var/static/dsay_allowed = 1 + var/persistence_enabled = 1 + var/allow_byond_links = 0 var/allow_discord_links = 0 var/allow_url_links = 0 // honestly if I were you i'd leave this one off, only use in dire situations @@ -435,15 +437,15 @@ var/list/gamemode_cache = list() if ("allow_admin_spawning") config.allow_admin_spawning = 1 - + if ("allow_byond_links") allow_byond_links = 1 if ("allow_discord_links") - allow_discord_links = 1 + allow_discord_links = 1 if ("allow_url_links") - allow_url_links = 1 + allow_url_links = 1 if ("no_dead_vote") config.vote_no_dead = 1 @@ -581,6 +583,9 @@ var/list/gamemode_cache = list() if("protect_roles_from_antagonist") config.protect_roles_from_antagonist = 1 + if ("persistence_enabled") + config.persistence_enabled = 1 + if ("probability") var/prob_pos = findtext(value, " ") var/prob_name = null diff --git a/code/controllers/subsystems/persistence.dm b/code/controllers/subsystems/persistence.dm new file mode 100644 index 0000000000..49f3d601fe --- /dev/null +++ b/code/controllers/subsystems/persistence.dm @@ -0,0 +1,59 @@ +SUBSYSTEM_DEF(persistence) + name = "Persistence" + init_order = INIT_ORDER_PERSISTENCE + flags = SS_NO_FIRE + var/list/tracking_values = list() + var/list/persistence_datums = list() + +/datum/controller/subsystem/persistence/Initialize() + . = ..() + for(var/thing in subtypesof(/datum/persistent)) + var/datum/persistent/P = new thing + persistence_datums[thing] = P + P.Initialize() + +/datum/controller/subsystem/persistence/Shutdown() + for(var/thing in persistence_datums) + var/datum/persistent/P = persistence_datums[thing] + P.Shutdown() + +/datum/controller/subsystem/persistence/proc/track_value(var/atom/value, var/track_type) + + if(config.persistence_enabled == 0) //if the config is not set to persistent nothing will save or load. + return + + var/turf/T = get_turf(value) + if(!T) + return + + var/area/A = get_area(T) + if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT)) + return + +// if((!T.z in GLOB.using_map.station_levels) || !initialized) + if(!T.z in using_map.station_levels) + return + + if(!tracking_values[track_type]) + tracking_values[track_type] = list() + tracking_values[track_type] += value + +/datum/controller/subsystem/persistence/proc/forget_value(var/atom/value, var/track_type) + if(tracking_values[track_type]) + tracking_values[track_type] -= value + + +/datum/controller/subsystem/persistence/proc/show_info(var/mob/user) + if(!user.client.holder) + return + + var/list/dat = list("") + var/can_modify = check_rights(R_ADMIN, 0, user) + for(var/thing in persistence_datums) + var/datum/persistent/P = persistence_datums[thing] + if(P.has_admin_data) + dat += P.GetAdminSummary(user, can_modify) + dat += "
" + var/datum/browser/popup = new(user, "admin_persistence", "Persistence Data") + popup.set_content(jointext(dat, null)) + popup.open() \ No newline at end of file diff --git a/code/controllers/subsystems/skybox.dm b/code/controllers/subsystems/skybox.dm index 03f41f0f33..6befac0b60 100644 --- a/code/controllers/subsystems/skybox.dm +++ b/code/controllers/subsystems/skybox.dm @@ -132,7 +132,7 @@ SUBSYSTEM_DEF(skybox) for(var/z in zlevels) skybox_cache["[z]"] = generate_skybox(z) - for(var/client/C) + for(var/client/C in GLOB.clients) var/their_z = get_z(C.mob) if(!their_z) //Nullspace continue diff --git a/code/controllers/subsystems/tgui.dm b/code/controllers/subsystems/tgui.dm new file mode 100644 index 0000000000..91533a7783 --- /dev/null +++ b/code/controllers/subsystems/tgui.dm @@ -0,0 +1,343 @@ + /** + * tgui subsystem + * + * Contains all tgui state and subsystem code. + **/ + + +SUBSYSTEM_DEF(tgui) + name = "TGUI" + wait = 9 + flags = SS_NO_INIT + priority = FIRE_PRIORITY_TGUI + runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT + + /// A list of UIs scheduled to process + var/list/current_run = list() + /// A list of open UIs + var/list/open_uis = list() + /// A list of open UIs, grouped by src_object and ui_key. + var/list/open_uis_by_src = list() + /// The HTML base used for all UIs. + var/basehtml + +/datum/controller/subsystem/tgui/PreInit() + basehtml = file2text('tgui/packages/tgui/public/tgui.html') + +/datum/controller/subsystem/tgui/Shutdown() + close_all_uis() + +/datum/controller/subsystem/tgui/stat_entry() + ..("P:[open_uis.len]") + +/datum/controller/subsystem/tgui/fire(resumed = 0) + if(!resumed) + src.current_run = open_uis.Copy() + // Cache for sanic speed (lists are references anyways) + var/list/current_run = src.current_run + while(current_run.len) + var/datum/tgui/ui = current_run[current_run.len] + current_run.len-- + // TODO: Move user/src_object check to process() + if(ui && ui.user && ui.src_object) + ui.process() + else + open_uis.Remove(ui) + if(MC_TICK_CHECK) + return + +/** + * public + * + * Requests a usable tgui window from the pool. + * Returns null if pool was exhausted. + * + * required user mob + * return datum/tgui + */ +/datum/controller/subsystem/tgui/proc/request_pooled_window(mob/user) + if(!user.client) + return null + var/list/windows = user.client.tgui_windows + var/window_id + var/datum/tgui_window/window + var/window_found = FALSE + // Find a usable window + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + window_id = TGUI_WINDOW_ID(i) + window = windows[window_id] + // As we are looping, create missing window datums + if(!window) + window = new(user.client, window_id, pooled = TRUE) + // Skip windows with acquired locks + if(window.locked) + continue + if(window.status == TGUI_WINDOW_READY) + return window + if(window.status == TGUI_WINDOW_CLOSED) + window.status = TGUI_WINDOW_LOADING + window_found = TRUE + break + if(!window_found) + return null + return window + +/** + * public + * + * Force closes all tgui windows. + * + * required user mob + */ +/datum/controller/subsystem/tgui/proc/force_close_all_windows(mob/user) + if(user.client) + user.client.tgui_windows = list() + for(var/i in 1 to TGUI_WINDOW_HARD_LIMIT) + var/window_id = TGUI_WINDOW_ID(i) + user << browse(null, "window=[window_id]") + +/** + * public + * + * Force closes the tgui window by window_id. + * + * required user mob + * required window_id string + */ +/datum/controller/subsystem/tgui/proc/force_close_window(mob/user, window_id) + // Close all tgui datums based on window_id. + for(var/datum/tgui/ui in user.tgui_open_uis) + if(ui.window && ui.window.id == window_id) + ui.close(can_be_suspended = FALSE) + // Unset machine just to be sure. + user.unset_machine() + // Close window directly just to be sure. + user << browse(null, "window=[window_id]") + + /** + * public + * + * Get a open UI given a user, src_object, and ui_key and try to update it with data. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * required ui_key string The ui_key of the UI. + * + * return datum/tgui The found UI. + **/ +/datum/controller/subsystem/tgui/proc/try_update_ui( + mob/user, + datum/src_object, + datum/tgui/ui) + // Look up a UI if it wasn't passed. + if(isnull(ui)) + ui = get_open_ui(user, src_object) + // Couldn't find a UI. + if(isnull(ui)) + return null + ui.process_status() + // UI ended up with the closed status + // or is actively trying to close itself. + // FIXME: Doesn't actually fix the paper bug. + if(ui.status <= STATUS_CLOSE) + ui.close() + return null + ui.send_update() + return ui + + /** + * private + * + * Get a open UI given a user, src_object, and ui_key. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object/datum which owns the UI. + * required ui_key string The ui_key of the UI. + * + * return datum/tgui The found UI. + **/ +/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object) + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return null // No UIs open. + for(var/datum/tgui/ui in open_uis_by_src[key]) // Find UIs for this object. + // Make sure we have the right user + if(ui.user == user) + return ui + return null // Couldn't find a UI! + + /** + * private + * + * Update all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs updated. + **/ +/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return count // Couldn't find any UIs for this object. + for(var/datum/tgui/ui in open_uis_by_src[key]) + // Check the UI is valid. + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) + ui.process(force = 1) // Update the UI. + count++ // Count each UI we update. + return count + + /** + * private + * + * Close all UIs attached to src_object. + * + * required src_object datum The object/datum which owns the UIs. + * + * return int The number of UIs closed. + **/ +/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object) + var/count = 0 + var/key = "[REF(src_object)]" + // No UIs opened for this src_object + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return count + for(var/datum/tgui/ui in open_uis_by_src[key]) + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid. + ui.close() // Close the UI. + count++ // Count each UI we close. + return count + + /** + * private + * + * Close all UIs regardless of their attachment to src_object. + * + * return int The number of UIs closed. + **/ +/datum/controller/subsystem/tgui/proc/close_all_uis() + var/count = 0 + for(var/key in open_uis_by_src) + for(var/datum/tgui/ui in open_uis_by_src[key]) + if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid. + ui.close() // Close the UI. + count++ // Count each UI we close. + return count + + /** + * private + * + * Update all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only update UIs belonging this src_object. + * + * return int The number of UIs updated. + **/ +/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.process(force = 1) + count++ + return count + + /** + * private + * + * Close all UIs belonging to a user. + * + * required user mob The mob who opened/is using the UI. + * optional src_object datum If provided, only close UIs belonging this src_object. + * + * return int The number of UIs closed. + **/ +/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object) + var/count = 0 + if(length(user?.tgui_open_uis) == 0) + return count + for(var/datum/tgui/ui in user.tgui_open_uis) + if(isnull(src_object) || ui.src_object == src_object) + ui.close() + count++ + return count + + /** + * private + * + * Add a UI to the list of open UIs. + * + * required ui datum/tgui The UI to be added. + **/ +/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + open_uis_by_src[key] = list() + ui.user.tgui_open_uis |= ui + var/list/uis = open_uis_by_src[key] + uis |= ui + open_uis |= ui + + /** + * private + * + * Remove a UI from the list of open UIs. + * + * required ui datum/tgui The UI to be removed. + * + * return bool If the UI was removed or not. + **/ +/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui) + var/key = "[REF(ui.src_object)]" + if(isnull(open_uis_by_src[key]) || !istype(open_uis_by_src[key], /list)) + return FALSE + // Remove it from the list of processing UIs. + open_uis.Remove(ui) + // If the user exists, remove it from them too. + if(ui.user) + ui.user.tgui_open_uis.Remove(ui) + var/list/uis = open_uis_by_src[key] + uis.Remove(ui) + if(length(uis) == 0) + open_uis_by_src.Remove(key) + return TRUE + + /** + * private + * + * Handle client logout, by closing all their UIs. + * + * required user mob The mob which logged out. + * + * return int The number of UIs closed. + **/ +/datum/controller/subsystem/tgui/proc/on_logout(mob/user) + return close_user_uis(user) + + /** + * private + * + * Handle clients switching mobs, by transferring their UIs. + * + * required user source The client's original mob. + * required user target The client's new mob. + * + * return bool If the UIs were transferred. + **/ +/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target) + // The old mob had no open UIs. + if(length(source?.tgui_open_uis) == 0) + return FALSE + if(isnull(target.tgui_open_uis) || !istype(target.tgui_open_uis, /list)) + target.tgui_open_uis = list() + // Transfer all the UIs. + for(var/datum/tgui/ui in source.tgui_open_uis) + // Inform the UIs of their new owner. + ui.user = target + target.tgui_open_uis.Add(ui) + // Clear the old list. + source.tgui_open_uis.Cut() + return TRUE \ No newline at end of file diff --git a/code/datums/autolathe/engineering_1.dm b/code/datums/autolathe/engineering_1.dm index 15540b3489..e976022d33 100644 --- a/code/datums/autolathe/engineering_1.dm +++ b/code/datums/autolathe/engineering_1.dm @@ -90,13 +90,13 @@ id = "papershredder_electronics" build_path = /obj/item/weapon/circuitboard/papershredder materials = list(DEFAULT_WALL_MATERIAL = 62, "glass" = 62) - +/* Commented out for build errors /datum/design/item/autolathe/engineering/microwave name = "microwave electronics" id = "microwave_electronics" build_path = /obj/item/weapon/circuitboard/microwave materials = list(DEFAULT_WALL_MATERIAL = 62, "glass" = 62) - +*/ /datum/design/item/autolathe/engineering/washing name = "washing machine electronics" id = "washingmachine_electronics" diff --git a/code/datums/recipe.dm b/code/datums/recipe.dm deleted file mode 100644 index a70199887c..0000000000 --- a/code/datums/recipe.dm +++ /dev/null @@ -1,166 +0,0 @@ -/* * * * * * * * * * * * * * * * * * * * * * * * * * - * /datum/recipe by rastaf0 13 apr 2011 * - * * * * * * * * * * * * * * * * * * * * * * * * * * - * This is powerful and flexible recipe system. - * It exists not only for food. - * supports both reagents and objects as prerequisites. - * In order to use this system you have to define a deriative from /datum/recipe - * * reagents are reagents. Acid, milc, booze, etc. - * * items are objects. Fruits, tools, circuit boards. - * * result is type to create as new object - * * time is optional parameter, you shall use in in your machine, - default /datum/recipe/ procs does not rely on this parameter. - * - * Functions you need: - * /datum/recipe/proc/make(var/obj/container as obj) - * Creates result inside container, - * deletes prerequisite reagents, - * transfers reagents from prerequisite objects, - * deletes all prerequisite objects (even not needed for recipe at the moment). - * - * /proc/select_recipe(list/datum/recipe/avaiable_recipes, obj/obj as obj, exact = 1) - * Wonderful function that select suitable recipe for you. - * obj is a machine (or magik hat) with prerequisites, - * exact = 0 forces algorithm to ignore superfluous stuff. - * - * - * Functions you do not need to call directly but could: - * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) - * /datum/recipe/proc/check_items(var/obj/container as obj) - * - * */ - -/datum/recipe - var/list/reagents // example: = list("berryjuice" = 5) // do not list same reagent twice - var/list/items // example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo - var/list/fruit // example: = list("fruit" = 3) - var/result // example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal - var/time = 100 // 1/10 part of second - -/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) - . = 1 - for (var/r_r in reagents) - var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) - if (!(abs(aval_r_amnt - reagents[r_r])<0.5)) //if NOT equals - if (aval_r_amnt>reagents[r_r]) - . = 0 - else - return -1 - if ((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) - return 0 - return . - -/datum/recipe/proc/check_fruit(var/obj/container) - . = 1 - if(fruit && fruit.len) - var/list/checklist = list() - // You should trust Copy(). - checklist = fruit.Copy() - for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) - if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) - continue - checklist[G.seed.kitchen_tag]-- - for(var/ktag in checklist) - if(!isnull(checklist[ktag])) - if(checklist[ktag] < 0) - . = 0 - else if(checklist[ktag] > 0) - . = -1 - break - return . - -/datum/recipe/proc/check_items(var/obj/container as obj) - . = 1 - if (items && items.len) - var/list/checklist = list() - checklist = items.Copy() // You should really trust Copy - if(istype(container, /obj/machinery)) - var/obj/machinery/machine = container - for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit)) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if (!found) - . = 0 - else - for(var/obj/O in container.contents) - if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) - continue // Fruit is handled in check_fruit(). - var/found = 0 - for(var/i = 1; i < checklist.len+1; i++) - var/item_type = checklist[i] - if (istype(O,item_type)) - checklist.Cut(i, i+1) - found = 1 - break - if (!found) - . = 0 - if (checklist.len) - . = -1 - return . - -//general version -/datum/recipe/proc/make(var/obj/container as obj) - var/obj/result_obj = new result(container) - if(istype(container, /obj/machinery)) - var/obj/machinery/machine = container - for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - else - for (var/obj/O in (container.contents-result_obj)) - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -// food-related -/datum/recipe/proc/make_food(var/obj/container as obj) - if(!result) - to_world("Recipe [type] is defined without a result, please bug report this.") - return - var/obj/result_obj = new result(container) - if(istype(container, /obj/machinery)) - var/obj/machinery/machine = container - for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit)) - if (O.reagents) - O.reagents.del_reagent("nutriment") - O.reagents.update_total() - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - else - for (var/obj/O in (container.contents-result_obj)) - if (O.reagents) - O.reagents.del_reagent("nutriment") - O.reagents.update_total() - O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) - qdel(O) - container.reagents.clear_reagents() - return result_obj - -/proc/select_recipe(var/list/datum/recipe/avaiable_recipes, var/obj/obj as obj, var/exact) - var/list/datum/recipe/possible_recipes = new - var/target = exact ? 0 : 1 - for (var/datum/recipe/recipe in avaiable_recipes) - if((recipe.check_reagents(obj.reagents) < target) || (recipe.check_items(obj) < target) || (recipe.check_fruit(obj) < target)) - continue - possible_recipes |= recipe - if (possible_recipes.len==0) - return null - else if (possible_recipes.len==1) - return possible_recipes[1] - else //okay, let's select the most complicated recipe - var/highest_count = 0 - . = possible_recipes[1] - for (var/datum/recipe/recipe in possible_recipes) - var/count = ((recipe.items)?(recipe.items.len):0) + ((recipe.reagents)?(recipe.reagents.len):0) + ((recipe.fruit)?(recipe.fruit.len):0) - if (count >= highest_count) - highest_count = count - . = recipe - return . diff --git a/code/datums/repositories/cameras.dm b/code/datums/repositories/cameras.dm index d516113394..e69de29bb2 100644 --- a/code/datums/repositories/cameras.dm +++ b/code/datums/repositories/cameras.dm @@ -1,49 +0,0 @@ -var/global/datum/repository/cameras/camera_repository = new() - -/proc/invalidateCameraCache() - camera_repository.networks.Cut() - camera_repository.invalidated = 1 - camera_repository.camera_cache_id = (++camera_repository.camera_cache_id % 999999) - -/datum/repository/cameras - var/list/networks - var/invalidated = 1 - var/camera_cache_id = 1 - -/datum/repository/cameras/New() - networks = list() - ..() - -/datum/repository/cameras/proc/cameras_in_network(var/network, var/list/zlevels) - setup_cache() - var/list/network_list = networks[network] - if(LAZYLEN(zlevels)) - var/list/filtered_cameras = list() - for(var/list/C in network_list) - //Camera is marked as always-visible - if(C["omni"]) - filtered_cameras[++filtered_cameras.len] = C - continue - //Camera might be in an adjacent zlevel - var/camz = C["z"] - if(!camz) //It's inside something (helmet, communicator, etc) or nullspace or who knows - camz = get_z(locate(C["camera"]) in cameranet.cameras) - if(camz in zlevels) - filtered_cameras[++filtered_cameras.len] = C //Can't add lists to lists with += - return filtered_cameras - else - return network_list - -/datum/repository/cameras/proc/setup_cache() - if(!invalidated) - return - invalidated = 0 - - cameranet.process_sort() - for(var/obj/machinery/camera/C in cameranet.cameras) - var/cam = C.nano_structure() - for(var/network in C.network) - if(!networks[network]) - networks[network] = list() - var/list/netlist = networks[network] - netlist[++netlist.len] = cam diff --git a/code/datums/repositories/crew.dm b/code/datums/repositories/crew.dm index f67a17ca75..7a748049bc 100644 --- a/code/datums/repositories/crew.dm +++ b/code/datums/repositories/crew.dm @@ -51,6 +51,7 @@ var/global/datum/repository/crew/crew_repository = new() crewmemberData["area"] = sanitize(A.get_name()) crewmemberData["x"] = pos.x crewmemberData["y"] = pos.y + crewmemberData["realZ"] = pos.z crewmemberData["z"] = using_map.get_zlevel_name(pos.z) crewmembers[++crewmembers.len] = crewmemberData diff --git a/code/datums/supplypacks/atmospherics.dm b/code/datums/supplypacks/atmospherics.dm index cf102f129d..fb5d4a0e59 100644 --- a/code/datums/supplypacks/atmospherics.dm +++ b/code/datums/supplypacks/atmospherics.dm @@ -11,42 +11,42 @@ name = "Inflatable barriers" contains = list(/obj/item/weapon/storage/briefcase/inflatable = 3) cost = 20 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/aether containername = "Inflatable Barrier Crate" /datum/supply_pack/atmos/canister_empty name = "Empty gas canister" cost = 7 containername = "Empty gas canister crate" - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether contains = list(/obj/machinery/portable_atmospherics/canister) /datum/supply_pack/atmos/canister_air name = "Air canister" cost = 10 containername = "Air canister crate" - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether contains = list(/obj/machinery/portable_atmospherics/canister/air) /datum/supply_pack/atmos/canister_oxygen name = "Oxygen canister" cost = 15 containername = "Oxygen canister crate" - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether contains = list(/obj/machinery/portable_atmospherics/canister/oxygen) /datum/supply_pack/atmos/canister_nitrogen name = "Nitrogen canister" cost = 10 containername = "Nitrogen canister crate" - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether contains = list(/obj/machinery/portable_atmospherics/canister/nitrogen) /datum/supply_pack/atmos/canister_phoron name = "Phoron gas canister" cost = 60 containername = "Phoron gas canister crate" - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/aether access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/phoron) @@ -54,7 +54,7 @@ name = "N2O gas canister" cost = 15 containername = "N2O gas canister crate" - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/aether access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/sleeping_agent) @@ -62,7 +62,7 @@ name = "Carbon dioxide gas canister" cost = 15 containername = "CO2 canister crate" - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/aether access = access_atmospherics contains = list(/obj/machinery/portable_atmospherics/canister/carbon_dioxide) @@ -70,7 +70,7 @@ contains = list(/obj/machinery/pipedispenser/orderable) name = "Pipe Dispenser" cost = 25 - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/aether containername = "Pipe Dispenser Crate" access = access_atmospherics @@ -78,7 +78,7 @@ contains = list(/obj/machinery/pipedispenser/disposal/orderable) name = "Disposals Pipe Dispenser" cost = 25 - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/aether containername = "Disposal Dispenser Crate" access = access_atmospherics @@ -89,7 +89,7 @@ /obj/item/weapon/tank/air = 3 ) cost = 10 - containertype = /obj/structure/closet/crate/internals + containertype = /obj/structure/closet/crate/aether containername = "Internals crate" /datum/supply_pack/atmos/evacuation @@ -104,5 +104,5 @@ /obj/item/clothing/mask/gas = 4 ) cost = 35 - containertype = /obj/structure/closet/crate/internals + containertype = /obj/structure/closet/crate/aether containername = "Emergency crate" diff --git a/code/datums/supplypacks/contraband.dm b/code/datums/supplypacks/contraband.dm index d0caadf74f..ba2c729a0d 100644 --- a/code/datums/supplypacks/contraband.dm +++ b/code/datums/supplypacks/contraband.dm @@ -27,8 +27,8 @@ /obj/item/weapon/grenade/smokebomb = 4, /obj/item/weapon/grenade/chem_grenade/incendiary ) - cost = 500 - containertype = /obj/structure/closet/crate + cost = 25 + containertype = /obj/structure/closet/crate/weapon containername = "Special Ops crate" contraband = 1 @@ -39,7 +39,7 @@ /obj/item/weapon/reagent_containers/food/snacks/unajerky = 4 ) cost = 25 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/unathi containername = "Moghes imports crate" contraband = 1 @@ -51,7 +51,7 @@ ) cost = 1000 contraband = 1 - containertype = /obj/structure/closet/crate/secure/weapon + containertype = /obj/structure/closet/crate/hedberg containername = "Ballistic weapons crate" /datum/supply_pack/randomised/misc/telecrate @@ -95,5 +95,5 @@ ) cost = 400 //price, contraband = 1 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large containername = "Suspicious crate" diff --git a/code/datums/supplypacks/costumes.dm b/code/datums/supplypacks/costumes.dm index 879d5accd0..f9b61d9572 100644 --- a/code/datums/supplypacks/costumes.dm +++ b/code/datums/supplypacks/costumes.dm @@ -1,6 +1,6 @@ /* * Here is where any supply packs -* related to weapons live. +* related to costumes live. */ @@ -19,7 +19,7 @@ /obj/item/clothing/head/wizard/fake ) cost = 20 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanothreads containername = "Wizard costume crate" /datum/supply_pack/randomised/costumes/hats @@ -48,8 +48,8 @@ ) name = "Collectable hat crate!" cost = 200 - containertype = /obj/structure/closet/crate - containername = "Collectable hats crate! Brought to you by Bass.inc!" + containertype = /obj/structure/closet/crate/nanothreads + containername = "Collectable hats crate" /datum/supply_pack/randomised/costumes/costume num_contained = 3 @@ -84,7 +84,7 @@ ) name = "Costumes crate" cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanothreads containername = "Actor Costumes" /datum/supply_pack/costumes/formal_wear @@ -104,15 +104,15 @@ /obj/item/clothing/shoes/leather, /obj/item/clothing/accessory/wcoat ) - name = "Formalwear closet" + name = "Formalwear (Suits)" cost = 30 - containertype = /obj/structure/closet - containername = "Formalwear for the best occasions." + containertype = /obj/structure/closet/crate/gilthari + containername = "Formal suit crate" datum/supply_pack/costumes/witch name = "Witch costume" containername = "Witch costume" - containertype = /obj/structure/closet + containertype = /obj/structure/closet/crate/nanothreads cost = 20 contains = list( /obj/item/clothing/suit/wizrobe/marisa/fake, @@ -124,7 +124,7 @@ datum/supply_pack/costumes/witch /datum/supply_pack/randomised/costumes/costume_hats name = "Costume hats" containername = "Actor hats crate" - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanothreads cost = 10 num_contained = 3 contains = list( @@ -147,9 +147,9 @@ datum/supply_pack/costumes/witch ) /datum/supply_pack/randomised/costumes/dresses - name = "Womens formal dress locker" - containername = "Pretty dress locker" - containertype = /obj/structure/closet + name = "Formalwear (Dresses)" + containername = "Formal dress crate" + containertype = /obj/structure/closet/crate/gilthari cost = 15 num_contained = 3 contains = list( diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index 5ffa26d711..5d2bc99089 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -11,30 +11,72 @@ name = "Replacement lights" contains = list(/obj/item/weapon/storage/box/lights/mixed = 3) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/galaksi containername = "Replacement lights" /datum/supply_pack/eng/smescoil name = "Superconducting Magnetic Coil" contains = list(/obj/item/weapon/smes_coil) cost = 75 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/focalpoint containername = "Superconducting Magnetic Coil crate" /datum/supply_pack/eng/smescoil/super_capacity name = "Superconducting Capacitance Coil" contains = list(/obj/item/weapon/smes_coil/super_capacity) cost = 90 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/focalpoint containername = "Superconducting Capacitance Coil crate" /datum/supply_pack/eng/smescoil/super_io name = "Superconducting Transmission Coil" contains = list(/obj/item/weapon/smes_coil/super_io) cost = 90 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/focalpoint containername = "Superconducting Transmission Coil crate" +/datum/supply_pack/eng/shield_capacitor + name = "Shield Capacitor" + contains = list(/obj/machinery/shield_capacitor) + cost = 20 + containertype = /obj/structure/closet/crate/focalpoint + containername = "shield capacitor crate" + +/datum/supply_pack/eng/shield_capacitor/advanced + name = "Advanced Shield Capacitor" + contains = list(/obj/machinery/shield_capacitor/advanced) + cost = 30 + containertype = /obj/structure/closet/crate/focalpoint + containername = "advanced shield capacitor crate" + +/datum/supply_pack/eng/bubble_shield + name = "Bubble Shield Generator" + contains = list(/obj/machinery/shield_gen) + cost = 40 + containertype =/obj/structure/closet/crate/focalpoint + containername = "shield bubble generator crate" + +/datum/supply_pack/eng/bubble_shield/advanced + name = "Advanced Bubble Shield Generator" + contains = list(/obj/machinery/shield_gen/advanced) + cost = 60 + containertype = /obj/structure/closet/crate/focalpoint + containername = "advanced bubble shield generator crate" + +/datum/supply_pack/eng/hull_shield + name = "Hull Shield Generator" + contains = list(/obj/machinery/shield_gen/external) + cost = 80 + containertype = /obj/structure/closet/crate/focalpoint + containername = "shield hull generator crate" + +/datum/supply_pack/eng/hull_shield/advanced + name = "Advanced Hull Shield Generator" + contains = list(/obj/machinery/shield_gen/external/advanced) + cost = 120 + containertype = /obj/structure/closet/crate/focalpoint + containername = "advanced hull shield generator crate" + /datum/supply_pack/eng/electrical name = "Electrical maintenance crate" contains = list( @@ -44,7 +86,7 @@ /obj/item/weapon/cell/high = 2 ) cost = 10 - containertype = /obj/structure/closet/crate/engineering/electrical + containertype = /obj/structure/closet/crate/ward containername = "Electrical maintenance crate" /datum/supply_pack/eng/e_welders @@ -53,7 +95,7 @@ /obj/item/weapon/weldingtool/electric = 3 ) cost = 15 - containertype = /obj/structure/closet/crate/engineering/electrical + containertype = /obj/structure/closet/crate/ward containername = "Electric welder crate" /datum/supply_pack/eng/mechanical @@ -65,14 +107,14 @@ /obj/item/clothing/head/hardhat ) cost = 10 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/xion containername = "Mechanical maintenance crate" /datum/supply_pack/eng/fueltank name = "Fuel tank crate" contains = list(/obj/structure/reagent_dispensers/fueltank) cost = 10 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/nanotrasen containername = "fuel tank crate" /datum/supply_pack/eng/solar @@ -84,35 +126,35 @@ /obj/item/weapon/paper/solar ) cost = 20 - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/einstein containername = "Solar pack crate" /datum/supply_pack/eng/engine name = "Emitter crate" contains = list(/obj/machinery/power/emitter = 2) cost = 10 - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein containername = "Emitter crate" access = access_ce /datum/supply_pack/eng/engine/field_gen name = "Field Generator crate" contains = list(/obj/machinery/field_generator = 2) - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/xion containername = "Field Generator crate" access = access_ce /datum/supply_pack/eng/engine/sing_gen name = "Singularity Generator crate" contains = list(/obj/machinery/the_singularitygen) - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein containername = "Singularity Generator crate" access = access_ce /datum/supply_pack/eng/engine/collector name = "Collector crate" contains = list(/obj/machinery/power/rad_collector = 3) - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein containername = "Collector crate" /datum/supply_pack/eng/engine/PA @@ -127,23 +169,33 @@ /obj/structure/particle_accelerator/power_box, /obj/structure/particle_accelerator/end_cap ) - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein containername = "Particle Accelerator crate" access = access_ce -/datum/supply_pack/eng/shield_generator - name = "Shield Generator Construction Kit" - contains = list( - /obj/item/weapon/circuitboard/shield_generator, - /obj/item/weapon/stock_parts/capacitor, - /obj/item/weapon/stock_parts/micro_laser, - /obj/item/weapon/smes_coil, - /obj/item/weapon/stock_parts/console_screen, - /obj/item/weapon/stock_parts/subspace/amplifier - ) - cost = 80 - containertype = /obj/structure/closet/crate/engineering - containername = "shield generator construction kit crate" +/datum/supply_pack/eng/shield_gen + contains = list(/obj/item/weapon/circuitboard/shield_gen) + name = "Bubble shield generator circuitry" + cost = 30 + containertype = /obj/structure/closet/crate/secure/focalpoint + containername = "bubble shield generator circuitry crate" + access = access_ce + +/datum/supply_pack/eng/shield_gen_ex + contains = list(/obj/item/weapon/circuitboard/shield_gen_ex) + name = "Hull shield generator circuitry" + cost = 30 + containertype = /obj/structure/closet/crate/secure/focalpoint + containername = "hull shield generator circuitry crate" + access = access_ce + +/datum/supply_pack/eng/shield_cap + contains = list(/obj/item/weapon/circuitboard/shield_cap) + name = "Bubble shield capacitor circuitry" + cost = 30 + containertype = /obj/structure/closet/crate/secure/focalpoint + containername = "shield capacitor circuitry crate" + access = access_ce /datum/supply_pack/eng/smbig name = "Supermatter Core" @@ -157,7 +209,7 @@ contains = list(/obj/machinery/power/generator) name = "Mark I Thermoelectric Generator" cost = 40 - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/einstein containername = "Mk1 TEG crate" access = access_engine @@ -165,7 +217,7 @@ contains = list(/obj/machinery/atmospherics/binary/circulator) name = "Binary atmospheric circulator" cost = 20 - containertype = /obj/structure/closet/crate/secure/large + containertype = /obj/structure/closet/crate/secure/large/einstein containername = "Atmospheric circulator crate" access = access_engine @@ -183,7 +235,7 @@ name = "P.A.C.M.A.N. portable generator parts" cost = 25 containername = "P.A.C.M.A.N. Portable Generator Construction Kit" - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/focalpoint access = access_tech_storage contains = list( /obj/item/weapon/stock_parts/micro_laser, @@ -196,7 +248,7 @@ name = "Super P.A.C.M.A.N. portable generator parts" cost = 35 containername = "Super P.A.C.M.A.N. portable generator construction kit" - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/focalpoint access = access_tech_storage contains = list( /obj/item/weapon/stock_parts/micro_laser, @@ -209,7 +261,7 @@ name = "R-UST Mk. 8 Tokamak fusion core crate" cost = 50 containername = "R-UST Mk. 8 Tokamak Fusion Core crate" - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein access = access_engine contains = list( /obj/item/weapon/book/manual/rust_engine, @@ -221,7 +273,7 @@ name = "R-UST Mk. 8 fuel injector crate" cost = 30 containername = "R-UST Mk. 8 fuel injector crate" - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein access = access_engine contains = list( /obj/machinery/fusion_fuel_injector, @@ -233,7 +285,7 @@ name = "Gyrotron crate" cost = 15 containername = "Gyrotron Crate" - containertype = /obj/structure/closet/crate/secure/engineering + containertype = /obj/structure/closet/crate/secure/einstein access = access_engine contains = list( /obj/machinery/power/emitter/gyrotron, @@ -244,12 +296,12 @@ name = "Fusion Fuel Compressor circuitry crate" cost = 10 containername = "Fusion Fuel Compressor circuitry crate" - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/einstein contains = list(/obj/item/weapon/circuitboard/fusion_fuel_compressor) /datum/supply_pack/eng/tritium name = "Tritium crate" cost = 75 containername = "Tritium crate" - containertype = /obj/structure/closet/crate/engineering + containertype = /obj/structure/closet/crate/einstein contains = list(/obj/fiftyspawner/tritium) diff --git a/code/datums/supplypacks/engineering_vr.dm b/code/datums/supplypacks/engineering_vr.dm index 273d3f6558..61c0f0e180 100644 --- a/code/datums/supplypacks/engineering_vr.dm +++ b/code/datums/supplypacks/engineering_vr.dm @@ -1,3 +1,17 @@ +/datum/supply_pack/eng/modern_shield + name = "Modern Shield Construction Kit" + contains = list( + /obj/item/weapon/circuitboard/shield_generator, + /obj/item/weapon/stock_parts/capacitor, + /obj/item/weapon/stock_parts/micro_laser, + /obj/item/weapon/smes_coil, + /obj/item/weapon/stock_parts/console_screen, + /obj/item/weapon/stock_parts/subspace/amplifier + ) + cost = 80 + containertype = /obj/structure/closet/crate/focalpoint + containername = "shield generator construction kit crate" + /datum/supply_pack/eng/thermoregulator contains = list(/obj/machinery/power/thermoregulator) name = "Thermal Regulator" diff --git a/code/datums/supplypacks/hospitality.dm b/code/datums/supplypacks/hospitality.dm index 6547b25e70..2c9bbbce51 100644 --- a/code/datums/supplypacks/hospitality.dm +++ b/code/datums/supplypacks/hospitality.dm @@ -23,7 +23,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer = 4, ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/gilthari containername = "Party equipment" /datum/supply_pack/hospitality/barsupplies @@ -43,8 +43,15 @@ /obj/item/weapon/storage/box/glass_extras/sticks ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/gilthari containername = "crate of bar supplies" + +/datum/supply_pack/hospitality/cookingoil + name = "Cooking oil tank crate" + contains = list(/obj/structure/reagent_dispensers/cookingoil) + cost = 10 + containertype = /obj/structure/largecrate + containername = "cooking oil tank crate" /datum/supply_pack/randomised/hospitality/ group = "Hospitality" @@ -60,7 +67,7 @@ ) name = "Surprise pack of five pizzas" cost = 15 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/freezer/centauri containername = "Pizza crate" /datum/supply_pack/hospitality/gifts @@ -74,5 +81,5 @@ /obj/item/weapon/paper/card/flower ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/allico containername = "crate of gifts" \ No newline at end of file diff --git a/code/datums/supplypacks/hydroponics.dm b/code/datums/supplypacks/hydroponics.dm index 4341a696ad..069911606e 100644 --- a/code/datums/supplypacks/hydroponics.dm +++ b/code/datums/supplypacks/hydroponics.dm @@ -11,7 +11,7 @@ name = "Monkey crate" contains = list (/obj/item/weapon/storage/box/monkeycubes) cost = 20 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/freezer/nanotrasen containername = "Monkey crate" /datum/supply_pack/hydro/farwa @@ -110,7 +110,7 @@ /obj/item/seeds/sugarcaneseed ) cost = 10 - containertype = /obj/structure/closet/crate/hydroponics + containertype = /obj/structure/closet/crate/carp containername = "Seeds crate" access = access_hydroponics @@ -124,7 +124,7 @@ /obj/item/weapon/material/twohanded/fireaxe/scythe ) cost = 45 - containertype = /obj/structure/closet/crate/hydroponics + containertype = /obj/structure/closet/crate/grayson containername = "Weed control crate" access = access_hydroponics @@ -132,7 +132,7 @@ name = "Water tank crate" contains = list(/obj/structure/reagent_dispensers/watertank) cost = 10 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether containername = "water tank crate" /datum/supply_pack/hydro/bee_keeper @@ -144,14 +144,14 @@ /obj/item/bee_pack ) cost = 40 - containertype = /obj/structure/closet/crate/hydroponics + containertype = /obj/structure/closet/crate/carp containername = "Beekeeping crate" access = access_hydroponics /datum/supply_pack/hydro/tray name = "Empty hydroponics trays" cost = 50 - containertype = /obj/structure/closet/crate/hydroponics + containertype = /obj/structure/closet/crate/aether containername = "Hydroponics tray crate" contains = list(/obj/machinery/portable_atmospherics/hydroponics{anchored = 0} = 3) access = access_hydroponics diff --git a/code/datums/supplypacks/materials.dm b/code/datums/supplypacks/materials.dm index cd799a235b..95f15caa6d 100644 --- a/code/datums/supplypacks/materials.dm +++ b/code/datums/supplypacks/materials.dm @@ -11,40 +11,40 @@ name = "50 metal sheets" contains = list(/obj/fiftyspawner/steel) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Metal sheets crate" /datum/supply_pack/materials/glass50 name = "50 glass sheets" contains = list(/obj/fiftyspawner/glass) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Glass sheets crate" /datum/supply_pack/materials/wood50 name = "50 wooden planks" contains = list(/obj/fiftyspawner/wood) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Wooden planks crate" /datum/supply_pack/materials/plastic50 name = "50 plastic sheets" contains = list(/obj/fiftyspawner/plastic) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Plastic sheets crate" /datum/supply_pack/materials/cardboard_sheets contains = list(/obj/fiftyspawner/cardboard) name = "50 cardboard sheets" cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Cardboard sheets crate" /datum/supply_pack/materials/carpet name = "Imported carpet" - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Imported carpet crate" cost = 15 contains = list( @@ -55,7 +55,7 @@ /datum/supply_pack/misc/linoleum name = "Linoleum" - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson containername = "Linoleum crate" cost = 15 contains = list(/obj/fiftyspawner/linoleum) \ No newline at end of file diff --git a/code/datums/supplypacks/medical.dm b/code/datums/supplypacks/medical.dm index 1b164a2cdf..3edcbed200 100644 --- a/code/datums/supplypacks/medical.dm +++ b/code/datums/supplypacks/medical.dm @@ -22,28 +22,28 @@ /obj/item/weapon/storage/box/autoinjectors ) cost = 10 - containertype = /obj/structure/closet/crate/medical + containertype = /obj/structure/closet/crate/zenghu containername = "Medical crate" /datum/supply_pack/med/bloodpack name = "BloodPack crate" contains = list(/obj/item/weapon/storage/box/bloodpacks = 3) cost = 10 - containertype = /obj/structure/closet/crate/medical + containertype = /obj/structure/closet/crate/nanocare containername = "BloodPack crate" /datum/supply_pack/med/bodybag name = "Body bag crate" contains = list(/obj/item/weapon/storage/box/bodybags = 3) cost = 10 - containertype = /obj/structure/closet/crate/medical + containertype = /obj/structure/closet/crate/nanocare containername = "Body bag crate" /datum/supply_pack/med/cryobag name = "Stasis bag crate" contains = list(/obj/item/bodybag/cryobag = 3) cost = 40 - containertype = /obj/structure/closet/crate/medical + containertype = /obj/structure/closet/crate/nanocare containername = "Stasis bag crate" /datum/supply_pack/med/surgery @@ -62,7 +62,7 @@ /obj/item/weapon/surgical/circular_saw ) cost = 25 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Surgery crate" access = access_medical @@ -73,7 +73,7 @@ /obj/item/weapon/storage/box/cdeathalarm_kit ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/ward containername = "Death Alarm crate" access = access_medical @@ -83,7 +83,7 @@ /obj/item/weapon/storage/firstaid/clotting ) cost = 100 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/zenghu containername = "Clotting Medicine crate" access = access_medical @@ -97,7 +97,7 @@ /obj/item/weapon/storage/belt/medical = 3 ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/veymed containername = "Sterile equipment crate" /datum/supply_pack/med/extragear @@ -109,7 +109,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/medical = 3 ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical surplus equipment" access = access_medical @@ -133,7 +133,7 @@ /obj/item/weapon/reagent_containers/syringe ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Chief medical officer equipment" access = access_cmo @@ -156,7 +156,7 @@ /obj/item/weapon/reagent_containers/syringe ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical Doctor equipment" access = access_medical_equip @@ -179,7 +179,7 @@ /obj/item/weapon/reagent_containers/syringe ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Chemist equipment" access = access_chemistry @@ -207,7 +207,7 @@ /obj/item/clothing/accessory/storage/white_vest ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Paramedic equipment" access = access_medical_equip @@ -226,7 +226,7 @@ /obj/item/weapon/cartridge/medical ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Psychiatrist equipment" access = access_psychiatrist @@ -247,7 +247,7 @@ /obj/item/weapon/storage/box/gloves ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical scrubs crate" access = access_medical_equip @@ -264,7 +264,7 @@ /obj/item/weapon/pen ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Autopsy equipment crate" access = access_morgue @@ -291,7 +291,7 @@ /obj/item/weapon/storage/box/gloves ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical uniform crate" access = access_medical_equip @@ -309,7 +309,7 @@ /obj/item/weapon/storage/box/gloves ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical biohazard equipment" access = access_medical_equip @@ -317,7 +317,7 @@ name = "Portable freezers crate" contains = list(/obj/item/weapon/storage/box/freezer = 7) cost = 25 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Portable freezers" access = access_medical_equip @@ -325,7 +325,7 @@ name = "Virus sample crate" contains = list(/obj/item/weapon/virusdish/random = 4) cost = 25 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/zenghu containername = "Virus sample crate" access = access_cmo @@ -333,40 +333,40 @@ name = "Defibrillator crate" contains = list(/obj/item/device/defib_kit = 2) cost = 30 - containertype = /obj/structure/closet/crate/medical + containertype = /obj/structure/closet/crate/veymed containername = "Defibrillator crate" /datum/supply_pack/med/distillery name = "Chemical distiller crate" contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery = 1) cost = 50 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/nanotrasen containername = "Chemical distiller crate" /datum/supply_pack/med/advdistillery name = "Industrial Chemical distiller crate" contains = list(/obj/machinery/portable_atmospherics/powered/reagent_distillery/industrial = 1) cost = 150 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/xion containername = "Industrial Chemical distiller crate" /datum/supply_pack/med/oxypump name = "Oxygen pump crate" contains = list(/obj/machinery/oxygen_pump/mobile = 1) cost = 125 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/xion containername = "Oxygen pump crate" /datum/supply_pack/med/anestheticpump name = "Anesthetic pump crate" contains = list(/obj/machinery/oxygen_pump/mobile/anesthetic = 1) cost = 130 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/nanotrasen containername = "Anesthetic pump crate" /datum/supply_pack/med/stablepump name = "Portable stabilizer crate" contains = list(/obj/machinery/oxygen_pump/mobile/stabilizer = 1) cost = 175 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/nanotrasen containername = "Portable stabilizer crate" diff --git a/code/datums/supplypacks/misc.dm b/code/datums/supplypacks/misc.dm index 1e5890f0c8..db46de1e04 100644 --- a/code/datums/supplypacks/misc.dm +++ b/code/datums/supplypacks/misc.dm @@ -20,7 +20,7 @@ ) name = "Trading Card Crate" cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/oculum containername = "cards crate" /datum/supply_pack/randomised/misc/dnd @@ -36,7 +36,7 @@ ) name = "Miniatures Crate" cost = 200 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/oculum containername = "Miniature Crate" /datum/supply_pack/randomised/misc/plushies @@ -88,14 +88,14 @@ //VOREStation Add End name = "Plushies Crate" cost = 15 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/allico containername = "Plushies Crate" /datum/supply_pack/misc/eftpos contains = list(/obj/item/device/eftpos) name = "EFTPOS scanner" cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanotrasen containername = "EFTPOS crate" /datum/supply_pack/misc/chaplaingear @@ -113,7 +113,7 @@ /obj/item/weapon/storage/fancy/candle_box = 3 ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/gilthari containername = "Chaplain equipment crate" /datum/supply_pack/misc/hoverpod @@ -136,14 +136,14 @@ /obj/item/clothing/accessory/storage/webbing ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanothreads containername = "Webbing crate" /datum/supply_pack/misc/holoplant name = "Holoplant Pot" contains = list(/obj/machinery/holoplant/shipped) cost = 15 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/thinktronic containername = "Holoplant crate" /datum/supply_pack/misc/glucose_hypos @@ -152,7 +152,7 @@ /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/glucose = 5 ) cost = 25 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/zenghu containername = "Glucose Hypo Crate" /datum/supply_pack/misc/mre_rations @@ -169,7 +169,7 @@ /obj/item/weapon/storage/mre/menu9, /obj/item/weapon/storage/mre/menu10) cost = 50 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/centauri containername = "ready to eat rations" /datum/supply_pack/misc/paste_rations @@ -178,7 +178,7 @@ /obj/item/weapon/storage/mre/menu11 = 2 ) cost = 25 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/freezer/centauri containername = "emergency rations" /datum/supply_pack/misc/medical_rations @@ -187,5 +187,5 @@ /obj/item/weapon/storage/mre/menu13 = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/zenghu containername = "emergency rations" diff --git a/code/datums/supplypacks/recreation.dm b/code/datums/supplypacks/recreation.dm index 134ae76e30..9bb6b1a442 100644 --- a/code/datums/supplypacks/recreation.dm +++ b/code/datums/supplypacks/recreation.dm @@ -20,7 +20,7 @@ /obj/item/weapon/material/twohanded/fireaxe/foam = 2 ) cost = 50 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/allico containername = "foam weapon crate" /datum/supply_pack/recreation/lasertag @@ -31,8 +31,8 @@ /obj/item/weapon/gun/energy/lasertag/blue, /obj/item/clothing/suit/bluetag ) - containertype = /obj/structure/closet - containername = "Lasertag Closet" + containertype = /obj/structure/closet/crate/ward + containername = "Lasertag Supplies" cost = 10 /datum/supply_pack/recreation/artscrafts @@ -55,14 +55,14 @@ /obj/item/weapon/wrapping_paper = 3 ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/allico containername = "Arts and Crafts crate" /datum/supply_pack/recreation/painters name = "Station Painting Supplies" cost = 10 containername = "station painting supplies crate" - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/grayson contains = list( /obj/item/device/pipe_painter = 2, /obj/item/device/floor_painter = 2, @@ -82,7 +82,7 @@ name = "Deluxe Fishing Bait" cost = 40 containername = "deluxe bait crate" - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/carp num_contained = 8 contains = list( /obj/item/weapon/storage/box/wormcan, @@ -93,7 +93,7 @@ name = "Laser Tag Turrets" cost = 40 containername = "laser tag turret crate" - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ward contains = list( /obj/machinery/porta_turret/lasertag/blue, /obj/machinery/porta_turret/lasertag/red diff --git a/code/datums/supplypacks/robotics.dm b/code/datums/supplypacks/robotics.dm index 757d38b953..5f8cf6337c 100644 --- a/code/datums/supplypacks/robotics.dm +++ b/code/datums/supplypacks/robotics.dm @@ -20,7 +20,7 @@ /obj/item/weapon/cell/high = 2 ) cost = 10 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Robotics assembly" access = access_robotics @@ -56,7 +56,7 @@ name = "Morpheus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/morpheus) cost = 20 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/morpheus containername = "Robolimb blueprints (Morpheus)" access = access_robotics @@ -64,7 +64,7 @@ name = "Cyber Solutions robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/cybersolutions) cost = 20 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/cybersolutions containername = "Robolimb blueprints (Cyber Solutions)" access = access_robotics @@ -72,7 +72,7 @@ name = "Xion robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/xion) cost = 20 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/xion containername = "Robolimb blueprints (Xion)" access = access_robotics @@ -80,7 +80,7 @@ name = "Grayson robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/grayson) cost = 30 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/grayson containername = "Robolimb blueprints (Grayson)" access = access_robotics @@ -88,7 +88,7 @@ name = "Hephaestus robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/hephaestus) cost = 35 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/heph containername = "Robolimb blueprints (Hephaestus)" access = access_robotics @@ -96,7 +96,7 @@ name = "Ward-Takahashi robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/wardtakahashi) cost = 35 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/ward containername = "Robolimb blueprints (Ward-Takahashi)" access = access_robotics @@ -104,7 +104,7 @@ name = "Zeng Hu robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/zenghu) cost = 35 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/zenghu containername = "Robolimb blueprints (Zeng Hu)" access = access_robotics @@ -112,7 +112,7 @@ name = "Bishop robolimb blueprints" contains = list(/obj/item/weapon/disk/limb/bishop) cost = 70 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/bishop containername = "Robolimb blueprints (Bishop)" access = access_robotics @@ -133,7 +133,7 @@ /obj/item/weapon/circuitboard/mecha/ripley/peripherals ) cost = 25 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/xion containername = "APLU \"Ripley\" Circuit Crate" access = access_robotics @@ -144,7 +144,7 @@ /obj/item/weapon/circuitboard/mecha/odysseus/main ) cost = 25 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/veymed containername = "\"Odysseus\" Circuit Crate" access = access_robotics @@ -158,7 +158,7 @@ ) name = "Random APLU modkit" cost = 200 - containertype = /obj/structure/closet/crate/science + containertype = /obj/structure/closet/crate/xion containername = "heavy crate" /datum/supply_pack/randomised/robotics/exosuit_mod/durand @@ -168,6 +168,7 @@ /obj/item/device/kit/paint/durand/phazon ) name = "Random Durand exosuit modkit" + containertype = /obj/structure/closet/crate/heph /datum/supply_pack/randomised/robotics/exosuit_mod/gygax contains = list( @@ -176,6 +177,7 @@ /obj/item/device/kit/paint/gygax/recitence ) name = "Random Gygax exosuit modkit" + containertype = /obj/structure/closet/crate/heph /datum/supply_pack/robotics/jumper_cables name = "Jumper kit crate" @@ -183,7 +185,7 @@ /obj/item/device/defib_kit/jumper_kit = 2 ) cost = 30 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/einstein containername = "Jumper kit crate" access = access_robotics diff --git a/code/datums/supplypacks/science.dm b/code/datums/supplypacks/science.dm index ab55b8571e..c4c03ffd04 100644 --- a/code/datums/supplypacks/science.dm +++ b/code/datums/supplypacks/science.dm @@ -9,7 +9,7 @@ name = "Coolant tank crate" contains = list(/obj/structure/reagent_dispensers/coolanttank) cost = 15 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/aether containername = "coolant tank crate" /datum/supply_pack/sci/phoron @@ -39,7 +39,7 @@ /obj/item/seeds/kudzuseed ) cost = 15 - containertype = /obj/structure/closet/crate/hydroponics + containertype = /obj/structure/closet/crate/carp containername = "Exotic Seeds crate" access = access_hydroponics @@ -47,14 +47,14 @@ name = "Integrated circuit printer" contains = list(/obj/item/device/integrated_circuit_printer = 2) cost = 15 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ward containername = "Integrated circuit crate" /datum/supply_pack/sci/integrated_circuit_printer_upgrade name = "Integrated circuit printer upgrade - advanced designs" contains = list(/obj/item/weapon/disk/integrated_circuit/upgrade/advanced) cost = 30 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ward containername = "Integrated circuit crate" /datum/supply_pack/sci/xenoarch @@ -75,6 +75,6 @@ /obj/item/weapon/storage/bag/fossils, /obj/item/weapon/hand_labeler) cost = 100 - containertype = /obj/structure/closet/crate/secure/science + containertype = /obj/structure/closet/crate/secure/xion containername = "Xenoarchaeology Tech crate" access = access_research \ No newline at end of file diff --git a/code/datums/supplypacks/security.dm b/code/datums/supplypacks/security.dm index cd52347583..5fd24a473f 100644 --- a/code/datums/supplypacks/security.dm +++ b/code/datums/supplypacks/security.dm @@ -53,11 +53,11 @@ /obj/item/clothing/accessory/storage/pouches/blue, ) cost = 30 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Plate Carrier crate" /datum/supply_pack/security/carriersgreen - name = "Armor - Blue modular armor" + name = "Armor - Green modular armor" contains = list( /obj/item/clothing/suit/armor/pcarrier/green, /obj/item/clothing/accessory/armor/armguards/green, @@ -65,7 +65,7 @@ /obj/item/clothing/accessory/storage/pouches/green, ) cost = 30 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Plate Carrier crate" /datum/supply_pack/security/carriersnavy @@ -77,7 +77,7 @@ /obj/item/clothing/accessory/storage/pouches/navy, ) cost = 30 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Plate Carrier crate" /datum/supply_pack/security/carrierstan @@ -89,7 +89,7 @@ /obj/item/clothing/accessory/storage/pouches/tan, ) cost = 30 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Plate Carrier crate" /datum/supply_pack/security/armorplate @@ -98,7 +98,7 @@ /obj/item/clothing/accessory/armor/armorplate, ) cost = 5 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Armor plate crate" /datum/supply_pack/security/armorplatestab @@ -107,7 +107,7 @@ /obj/item/clothing/accessory/armor/armorplate/stab, ) cost = 10 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Armor plate crate" /datum/supply_pack/security/armorplatemedium @@ -116,7 +116,7 @@ /obj/item/clothing/accessory/armor/armorplate/medium, ) cost = 10 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Armor plate crate" /datum/supply_pack/security/armorplatetac @@ -125,7 +125,7 @@ /obj/item/clothing/accessory/armor/armorplate/tactical, ) cost = 15 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Armor plate crate" /datum/supply_pack/randomised/security/carriers @@ -140,7 +140,7 @@ /obj/item/clothing/suit/armor/pcarrier/press ) cost = 10 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Plate Carrier crate" /datum/supply_pack/security/carriertags @@ -158,7 +158,7 @@ /obj/item/clothing/accessory/armor/tag/abneg ) cost = 20 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Plate Carrier crate" /datum/supply_pack/security/helmcovers @@ -174,7 +174,7 @@ /obj/item/clothing/accessory/armor/helmcover/tan ) cost = 20 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Helmet Covers crate" /datum/supply_pack/randomised/security/armorplates @@ -193,7 +193,7 @@ /obj/item/clothing/accessory/armor/armorplate/bulletproof ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Armor plate crate" /datum/supply_pack/randomised/security/carrierarms @@ -210,7 +210,7 @@ /obj/item/clothing/accessory/armor/armguards/bulletproof ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Armor plate crate" /datum/supply_pack/randomised/security/carrierlegs @@ -227,7 +227,7 @@ /obj/item/clothing/accessory/armor/legguards/bulletproof ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Armor plate crate" /datum/supply_pack/randomised/security/carrierbags @@ -246,7 +246,7 @@ /obj/item/clothing/accessory/storage/pouches/large/tan ) cost = 50 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/scg containername = "Armor plate crate" /datum/supply_pack/security/riot_gear @@ -260,7 +260,7 @@ /obj/item/weapon/storage/box/handcuffs ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Riot gear crate" access = access_armory @@ -273,7 +273,7 @@ /obj/item/clothing/shoes/leg_guard/riot ) cost = 30 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Riot armor crate" access = access_armory @@ -287,7 +287,7 @@ /obj/item/clothing/accessory/armor/legguards/riot ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Riot armor crate" access = access_armory @@ -300,7 +300,7 @@ /obj/item/clothing/shoes/leg_guard/laserproof ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Ablative armor crate" access = access_armory @@ -314,7 +314,7 @@ /obj/item/clothing/accessory/armor/legguards/laserproof ) cost = 50 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/lawson containername = "Ablative armor crate" access = access_armory @@ -327,7 +327,7 @@ /obj/item/clothing/shoes/leg_guard/bulletproof ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Ballistic armor crate" access = access_armory /* VOREStation Removal - Howabout no ERT armor being orderable? @@ -342,7 +342,7 @@ /obj/item/clothing/accessory/armor/legguards/bulletproof ) cost = 50 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/heph containername = "Ballistic armor crate" access = access_armory @@ -355,13 +355,13 @@ /obj/item/clothing/shoes/leg_guard/combat ) cost = 40 - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/saare containername = "Combat armor crate" access = access_armory /datum/supply_pack/security/tactical name = "Armor - Tactical" - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/saare containername = "Tactical armor crate" cost = 40 access = access_armory @@ -387,7 +387,7 @@ /datum/supply_pack/security/flexitac name = "Armor - Tactical Light" - containertype = /obj/structure/closet/crate/secure/gear + containertype = /obj/structure/closet/crate/secure/saare containername = "Tactical Light armor crate" cost = 75 access = access_armory @@ -412,15 +412,14 @@ name = "Misc - Security Barriers" contains = list(/obj/machinery/deployable/barrier = 4) cost = 20 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/secure/heph containername = "Security barrier crate" - access = null /datum/supply_pack/security/securityshieldgen name = "Misc - Wall shield generators" contains = list(/obj/machinery/shieldwallgen = 4) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/heph containername = "Wall shield generators crate" access = access_teleporter @@ -434,7 +433,7 @@ /obj/item/clothing/accessory/holster/hip ) cost = 15 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/hedberg containername = "Holster crate" /datum/supply_pack/security/extragear @@ -446,7 +445,7 @@ /obj/item/clothing/suit/storage/hooded/wintercoat/security = 3 ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanothreads containername = "Security surplus equipment" /datum/supply_pack/security/detectivegear @@ -473,7 +472,7 @@ /obj/item/weapon/storage/bag/detective ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Forensic equipment" access = access_forensics_lockers @@ -486,7 +485,7 @@ /obj/item/device/detective_scanner ) cost = 60 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/ward containername = "Forensic equipment" access = access_forensics_lockers @@ -508,7 +507,7 @@ /obj/item/clothing/gloves/black = 2 ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Investigation clothing" access = access_forensics_lockers @@ -538,7 +537,7 @@ /obj/item/device/flashlight/maglight ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Officer equipment" access = access_brig @@ -567,7 +566,7 @@ /obj/item/device/flashlight/maglight ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Warden equipment" access = access_armory @@ -594,7 +593,7 @@ /obj/item/device/flashlight/maglight ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Head of security equipment" access = access_hos @@ -613,7 +612,7 @@ /obj/item/weapon/storage/box/holobadge ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Security uniform crate" /datum/supply_pack/security/navybluesecurityclothing @@ -634,7 +633,7 @@ /obj/item/weapon/storage/box/holobadge ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Navy blue security uniform crate" /datum/supply_pack/security/corporatesecurityclothing @@ -654,7 +653,7 @@ /obj/item/weapon/storage/box/holobadge ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Corporate security uniform crate" /datum/supply_pack/security/biosuit @@ -670,7 +669,7 @@ /obj/item/weapon/storage/box/gloves ) cost = 25 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Security biohazard gear" access = access_security @@ -680,6 +679,6 @@ /obj/item/weapon/contraband/poster/nanotrasen = 6 ) cost = 20 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanotrasen containername = "Morale Posters" access = access_maint_tunnels diff --git a/code/datums/supplypacks/supply.dm b/code/datums/supplypacks/supply.dm index b58c596045..5c35e2ae6f 100644 --- a/code/datums/supplypacks/supply.dm +++ b/code/datums/supplypacks/supply.dm @@ -18,14 +18,14 @@ /obj/item/weapon/reagent_containers/food/condiment/yeast = 3 ) cost = 10 - containertype = /obj/structure/closet/crate/freezer + containertype = /obj/structure/closet/crate/freezer/centauri containername = "Food crate" /datum/supply_pack/supply/toner name = "Toner cartridges" contains = list(/obj/item/device/toner = 6) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ummarcar containername = "Toner cartridges" /datum/supply_pack/supply/janitor @@ -48,7 +48,7 @@ /obj/structure/mopbucket ) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/galaksi containername = "Janitorial supplies" /datum/supply_pack/supply/shipping @@ -62,7 +62,7 @@ /obj/item/weapon/tool/wirecutters, /obj/item/weapon/tape_roll = 2) cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ummarcar containername = "Shipping supplies crate" /datum/supply_pack/supply/bureaucracy @@ -82,13 +82,19 @@ ) name = "Office supplies" cost = 15 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/ummarcar containername = "Office supplies crate" +/datum/supply_pack/supply/sticky_notes + name = "Stationery - sticky notes (50)" + contains = list(/obj/item/sticky_pad/random) + cost = 10 + containername = "\improper Sticky notes crate" + /datum/supply_pack/supply/spare_pda name = "Spare PDAs" cost = 10 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/thinktronic containername = "Spare PDA crate" contains = list(/obj/item/device/pda = 3) @@ -112,7 +118,7 @@ /obj/item/clothing/glasses/meson ) cost = 10 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Shaft miner equipment" access = access_mining /* //VOREStation Edit - Pointless on Tether. @@ -127,12 +133,12 @@ name = "Cargo Train Tug" contains = list(/obj/vehicle/train/engine) cost = 35 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/xion containername = "Cargo Train Tug Crate" /datum/supply_pack/supply/cargotrailer name = "Cargo Train Trolley" contains = list(/obj/vehicle/train/trolley) cost = 15 - containertype = /obj/structure/largecrate + containertype = /obj/structure/closet/crate/large/xion containername = "Cargo Train Trolley Crate" diff --git a/code/datums/supplypacks/voidsuits.dm b/code/datums/supplypacks/voidsuits.dm index 42da0a1753..b48f259cb6 100644 --- a/code/datums/supplypacks/voidsuits.dm +++ b/code/datums/supplypacks/voidsuits.dm @@ -17,7 +17,7 @@ /obj/item/weapon/tank/oxygen = 2, ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/aether containername = "Atmospheric voidsuit crate" access = access_atmospherics @@ -31,7 +31,7 @@ /obj/item/weapon/tank/oxygen = 2, ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/aether containername = "Heavy Duty Atmospheric voidsuit crate" access = access_atmospherics @@ -45,7 +45,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Engineering voidsuit crate" access = access_engine_equip @@ -59,7 +59,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Engineering Construction voidsuit crate" access = access_engine_equip @@ -73,7 +73,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 45 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Engineering Hazmat voidsuit crate" access = access_engine_equip @@ -87,7 +87,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Reinforced Engineering voidsuit crate" access = access_engine_equip @@ -101,7 +101,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Medical voidsuit crate" access = access_medical_equip @@ -115,7 +115,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Medical EMT voidsuit crate" access = access_medical_equip @@ -129,7 +129,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 45 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/nanocare containername = "Medical Biohazard voidsuit crate" access = access_medical_equip @@ -143,7 +143,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 60 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/veymed containername = "Vey-Med Autoadaptive voidsuit (humanoid) crate" access = access_medical_equip @@ -168,7 +168,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/heph containername = "Security voidsuit crate" /datum/supply_pack/voidsuits/security/crowd @@ -181,7 +181,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 60 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/heph containername = "Security Crowd Control voidsuit crate" access = access_armory @@ -195,7 +195,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 60 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/heph containername = "Security EVA voidsuit crate" access = access_armory @@ -208,7 +208,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 40 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/xion containername = "Mining voidsuit crate" access = access_mining @@ -221,7 +221,7 @@ /obj/item/weapon/tank/oxygen = 2 ) cost = 50 - containertype = /obj/structure/closet/crate/secure + containertype = /obj/structure/closet/crate/secure/grayson containername = "Frontier Mining voidsuit crate" access = access_mining @@ -232,7 +232,7 @@ /obj/item/clothing/mask/gas/zaddat = 1 ) cost = 30 - containertype = /obj/structure/closet/crate + containertype = /obj/structure/closet/crate/nanotrasen containername = "Zaddat Shroud crate" access = access_mining diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index f018a8e594..229412e93f 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -1,61 +1,53 @@ // Wires for airlocks /datum/wires/airlock/secure - random = 1 + randomize = 1 wire_count = 14 - window_y = 680 /datum/wires/airlock holder_type = /obj/machinery/door/airlock wire_count = 12 - window_y = 570 + proper_name = "Airlock" -var/const/AIRLOCK_WIRE_IDSCAN = 1 -var/const/AIRLOCK_WIRE_MAIN_POWER1 = 2 -var/const/AIRLOCK_WIRE_MAIN_POWER2 = 4 -var/const/AIRLOCK_WIRE_DOOR_BOLTS = 8 -var/const/AIRLOCK_WIRE_BACKUP_POWER1 = 16 -var/const/AIRLOCK_WIRE_BACKUP_POWER2 = 32 -var/const/AIRLOCK_WIRE_OPEN_DOOR = 64 -var/const/AIRLOCK_WIRE_AI_CONTROL = 128 -var/const/AIRLOCK_WIRE_ELECTRIFY = 256 -var/const/AIRLOCK_WIRE_SAFETY = 512 -var/const/AIRLOCK_WIRE_SPEED = 1024 -var/const/AIRLOCK_WIRE_LIGHT = 2048 - -/datum/wires/airlock/CanUse(var/mob/living/L) +/datum/wires/airlock/interactable(mob/user) var/obj/machinery/door/airlock/A = holder - if(!istype(L, /mob/living/silicon)) + if(!issilicon(user)) if(A.isElectrified()) - if(A.shock(L, 100)) - return 0 + if(A.shock(user, 100)) + return FALSE if(A.p_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/airlock/GetInteractWindow() +/datum/wires/airlock/New(atom/_holder) + wires = list( + WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_DOOR_BOLTS, + WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2, WIRE_OPEN_DOOR, WIRE_AI_CONTROL, + WIRE_ELECTRIFY, WIRE_SAFETY, WIRE_SPEED, WIRE_BOLT_LIGHT + ) + return ..() + +/datum/wires/airlock/get_status() + . = ..() var/obj/machinery/door/airlock/A = holder var/haspower = A.arePowerSystemsOn() //If there's no power, then no lights will be on. - . += ..() - . += show_hint(0x01, A.locked, "The door bolts have fallen!", "The door bolts look up.") - . += show_hint(0x02, A.lights && haspower, "The door bolt lights are on.", "The door bolt lights are off!") - . += show_hint(0x04, haspower, "The test light is on.", "The test light is off!") - . += show_hint(0x08, A.backup_power_lost_until, "The backup power light is off!", "The backup power light is on.") - . += show_hint(0x10, A.aiControlDisabled == 0 && !A.emagged && haspower, "The 'AI control allowed' light is on.", "The 'AI control allowed' light is off.") - . += show_hint(0x20, A.safe == 0 && haspower, "The 'Check Wiring' light is on.", "The 'Check Wiring' light is off.") - . += show_hint(0x40, A.normalspeed == 0 && haspower, "The 'Check Timing Mechanism' light is on.", "The 'Check Timing Mechanism' light is off.") - . += show_hint(0x80, A.aiDisabledIdScanner == 0 && haspower, "The IDScan light is on.", "The IDScan light is off.") - -/datum/wires/airlock/UpdateCut(var/index, var/mended) + . += "The door bolts [A.locked ? "have fallen!" : "look up."]" + . += "The door bolt lights are [(A.lights && haspower) ? "on." : "off!"]" + . += "The test light is [haspower ? "on." : "off!"]" + . += "The backup power light is [A.backup_power_lost_until ? "off!" : "on."]" + . += "The 'AI control allowed' light is [(A.aiControlDisabled == 0 && !A.emagged && haspower) ? "on" : "off"]." + . += "The 'Check Wiring' light is [(A.safe == 0 && haspower) ? "on" : "off"]." + . += "The 'Check Timing Mechanism' light is [(A.normalspeed == 0 && haspower) ? "on" : "off"]." + . += "The IDScan light is [(A.aiDisabledIdScanner == 0 && haspower) ? "on" : "off."]" +/datum/wires/airlock/on_cut(wire, mend) var/obj/machinery/door/airlock/A = holder - switch(index) - if(AIRLOCK_WIRE_IDSCAN) - A.aiDisabledIdScanner = !mended - if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2) - - if(!mended) + switch(wire) + if(WIRE_IDSCAN) + A.aiDisabledIdScanner = !mend + if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2) + if(!mend) //Cutting either one disables the main door power, but unless backup power is also cut, the backup power re-powers the door in 10 seconds. While unpowered, the door may be crowbarred open, but bolts-raising will not work. Cutting these wires may electocute the user. A.loseMainPower() A.shock(usr, 50) @@ -63,9 +55,8 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 A.regainMainPower() A.shock(usr, 50) - if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2) - - if(!mended) + if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2) + if(!mend) //Cutting either one disables the backup door power (allowing it to be crowbarred open, but disabling bolts-raising), but may electocute the user. A.loseBackupPower() A.shock(usr, 50) @@ -73,16 +64,14 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 A.regainBackupPower() A.shock(usr, 50) - if(AIRLOCK_WIRE_DOOR_BOLTS) - - if(!mended) + if(WIRE_DOOR_BOLTS) + if(!mend) //Cutting this wire also drops the door bolts, and mending it does not raise them. (This is what happens now, except there are a lot more wires going to door bolts at present) A.lock(1) A.update_icon() - if(AIRLOCK_WIRE_AI_CONTROL) - - if(!mended) + if(WIRE_AI_CONTROL) + if(!mend) //one wire for AI control. Cutting this prevents the AI from controlling the door unless it has hacked the door through the power connection (which takes about a minute). If both main and backup power are cut, as well as this wire, then the AI cannot operate or hack the door at all. //aiControlDisabled: If 1, AI control is disabled until the AI hacks back in and disables the lock. If 2, the AI has bypassed the lock. If -1, the control is enabled but the AI had bypassed it earlier, so if it is disabled again the AI would have no trouble getting back in. if(A.aiControlDisabled == 0) @@ -95,40 +84,41 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 else if(A.aiControlDisabled == 2) A.aiControlDisabled = -1 - if(AIRLOCK_WIRE_ELECTRIFY) - if(!mended) + if(WIRE_ELECTRIFY) + if(!mend) //Cutting this wire electrifies the door, so that the next person to touch the door without insulated gloves gets electrocuted. A.electrify(-1) else A.electrify(0) return // Don't update the dialog. - if (AIRLOCK_WIRE_SAFETY) - A.safe = mended + if (WIRE_SAFETY) + A.safe = mend - if(AIRLOCK_WIRE_SPEED) - A.autoclose = mended - if(mended) + if(WIRE_SPEED) + A.autoclose = mend + if(mend) if(!A.density) A.close() - if(AIRLOCK_WIRE_LIGHT) - A.lights = mended + if(WIRE_BOLT_LIGHT) + A.lights = mend A.update_icon() -/datum/wires/airlock/UpdatePulsed(var/index) - +/datum/wires/airlock/on_pulse(wire) var/obj/machinery/door/airlock/A = holder - switch(index) - if(AIRLOCK_WIRE_IDSCAN) + switch(wire) + if(WIRE_IDSCAN) //Sending a pulse through flashes the red light on the door (if the door has power). if(A.arePowerSystemsOn() && A.density) A.do_animate("deny") - if(AIRLOCK_WIRE_MAIN_POWER1, AIRLOCK_WIRE_MAIN_POWER2) + + if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2) //Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter). A.loseMainPower() - if(AIRLOCK_WIRE_DOOR_BOLTS) + + if(WIRE_DOOR_BOLTS) //one wire for door bolts. Sending a pulse through this drops door bolts if they're not down (whether power's on or not), //raises them if they are down (only if power's on) if(!A.locked) @@ -136,10 +126,11 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 else A.unlock() - if(AIRLOCK_WIRE_BACKUP_POWER1, AIRLOCK_WIRE_BACKUP_POWER2) + if(WIRE_BACKUP_POWER1, WIRE_BACKUP_POWER2) //two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter). A.loseBackupPower() - if(AIRLOCK_WIRE_AI_CONTROL) + + if(WIRE_AI_CONTROL) if(A.aiControlDisabled == 0) A.aiControlDisabled = 1 else if(A.aiControlDisabled == -1) @@ -152,24 +143,26 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 else if(A.aiControlDisabled == 2) A.aiControlDisabled = -1 - if(AIRLOCK_WIRE_ELECTRIFY) + if(WIRE_ELECTRIFY) //one wire for electrifying the door. Sending a pulse through this electrifies the door for 30 seconds. A.electrify(30) - if(AIRLOCK_WIRE_OPEN_DOOR) + + if(WIRE_OPEN_DOOR) //tries to open the door without ID //will succeed only if the ID wire is cut or the door requires no access and it's not emagged if(A.emagged) return if(!A.requiresID() || A.check_access(null)) if(A.density) A.open() else A.close() - if(AIRLOCK_WIRE_SAFETY) + + if(WIRE_SAFETY) A.safe = !A.safe if(!A.density) A.close() - if(AIRLOCK_WIRE_SPEED) + if(WIRE_SPEED) A.normalspeed = !A.normalspeed - if(AIRLOCK_WIRE_LIGHT) + if(WIRE_BOLT_LIGHT) A.lights = !A.lights A.update_icon() diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 7c56bd4e52..ed8477042b 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -1,94 +1,86 @@ /datum/wires/alarm holder_type = /obj/machinery/alarm wire_count = 5 + proper_name = "Air alarm" -var/const/AALARM_WIRE_IDSCAN = 1 -var/const/AALARM_WIRE_POWER = 2 -var/const/AALARM_WIRE_SYPHON = 4 -var/const/AALARM_WIRE_AI_CONTROL = 8 -var/const/AALARM_WIRE_AALARM = 16 +/datum/wires/alarm/New(atom/_holder) + wires = list( + WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_SYPHON, + WIRE_AI_CONTROL, WIRE_AALARM + ) + return ..() -/datum/wires/alarm/CanUse(var/mob/living/L) +/datum/wires/alarm/interactable(mob/user) var/obj/machinery/alarm/A = holder if(A.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/alarm/GetInteractWindow() +/datum/wires/alarm/get_status() var/obj/machinery/alarm/A = holder - . += ..() - . += show_hint(0x1, A.locked, "The Air Alarm is locked.", "The Air Alarm is unlocked.") - . += show_hint(0x2, A.shorted || (A.stat & (NOPOWER|BROKEN)), "The Air Alarm is offline.", "The Air Alarm is working properly!") - . += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.") + . = ..() + . += "The Air Alarm is [A.locked ? "locked." : "unlocked."]" + . += "The Air Alarm is [(A.shorted || (A.stat & (NOPOWER|BROKEN))) ? "offline." : "working properly!"]" + . += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]." -/datum/wires/alarm/UpdateCut(var/index, var/mended) +/datum/wires/alarm/on_cut(wire, mend) var/obj/machinery/alarm/A = holder - switch(index) - if(AALARM_WIRE_IDSCAN) - if(!mended) - A.locked = 1 - //to_world("Idscan wire cut") + switch(wire) + if(WIRE_IDSCAN) + if(!mend) + A.locked = TRUE - if(AALARM_WIRE_POWER) + if(WIRE_MAIN_POWER1) A.shock(usr, 50) - A.shorted = !mended + A.shorted = !mend A.update_icon() - //to_world("Power wire cut") - if (AALARM_WIRE_AI_CONTROL) - if (A.aidisabled == !mended) - A.aidisabled = mended - //to_world("AI Control Wire Cut") + if(WIRE_AI_CONTROL) + A.aidisabled = !mend - if(AALARM_WIRE_SYPHON) - if(!mended) - A.mode = 3 // AALARM_MODE_PANIC + if(WIRE_SYPHON) + if(!mend) + A.mode = 3 // MODE_PANIC A.apply_mode() - //to_world("Syphon Wire Cut") - if(AALARM_WIRE_AALARM) - if (A.alarm_area.atmosalert(2, A)) + if(WIRE_AALARM) + if(A.alarm_area.atmosalert(2, A)) A.post_alert(2) A.update_icon() + ..() -/datum/wires/alarm/UpdatePulsed(var/index) +/datum/wires/alarm/on_pulse(wire) var/obj/machinery/alarm/A = holder - switch(index) - if(AALARM_WIRE_IDSCAN) + switch(wire) + if(WIRE_IDSCAN) A.locked = !A.locked - // to_world("Idscan wire pulsed") - if (AALARM_WIRE_POWER) - // to_world("Power wire pulsed") - if(A.shorted == 0) - A.shorted = 1 + if(WIRE_MAIN_POWER1) + if(!A.shorted) + A.shorted = TRUE A.update_icon() spawn(12000) - if(A.shorted == 1) - A.shorted = 0 + if(A.shorted) + A.shorted = FALSE A.update_icon() - - if (AALARM_WIRE_AI_CONTROL) - // to_world("AI Control wire pulsed") - if (A.aidisabled == 0) - A.aidisabled = 1 + if(WIRE_AI_CONTROL) + if(!A.aidisabled) + A.aidisabled = TRUE A.updateDialog() spawn(100) - if (A.aidisabled == 1) - A.aidisabled = 0 + if(A.aidisabled) + A.aidisabled = FALSE - if(AALARM_WIRE_SYPHON) - // to_world("Syphon wire pulsed") - if(A.mode == 1) // AALARM_MODE_SCRUB - A.mode = 3 // AALARM_MODE_PANIC + if(WIRE_SYPHON) + if(A.mode == 1) // MODE_SCRUB + A.mode = 3 // MODE_PANIC else - A.mode = 1 // AALARM_MODE_SCRUB + A.mode = 1 // MODE_SCRUB A.apply_mode() - if(AALARM_WIRE_AALARM) - // to_world("Aalarm wire pulsed") - if (A.alarm_area.atmosalert(0, A)) + if(WIRE_AALARM) + if(A.alarm_area.atmosalert(0, A)) A.post_alert(0) A.update_icon() diff --git a/code/datums/wires/apc.dm b/code/datums/wires/apc.dm index 1b7f43d21f..15e96298ad 100644 --- a/code/datums/wires/apc.dm +++ b/code/datums/wires/apc.dm @@ -1,76 +1,66 @@ /datum/wires/apc holder_type = /obj/machinery/power/apc wire_count = 4 + proper_name = "APC" -#define APC_WIRE_IDSCAN 1 -#define APC_WIRE_MAIN_POWER1 2 -#define APC_WIRE_MAIN_POWER2 4 -#define APC_WIRE_AI_CONTROL 8 +/datum/wires/apc/New(atom/_holder) + wires = list(WIRE_IDSCAN, WIRE_MAIN_POWER1, WIRE_MAIN_POWER2, WIRE_AI_CONTROL) + return ..() -/datum/wires/apc/GetInteractWindow() +/datum/wires/apc/get_status() + . = ..() var/obj/machinery/power/apc/A = holder - . += ..() - . += show_hint(0x1, A.locked, "The APC is locked.", "The APC is unlocked.") - . += show_hint(0x2, A.shorted, "The APCs power has been shorted.", "The APC is working properly!") - . += show_hint(0x4, A.aidisabled, "The 'AI control allowed' light is off.", "The 'AI control allowed' light is on.") + . += "The APC is [A.locked ? "" : "un"]locked." + . += A.shorted ? "The APCs power has been shorted." : "The APC is working properly!" + . += "The 'AI control allowed' light is [A.aidisabled ? "off" : "on"]." - -/datum/wires/apc/CanUse(var/mob/living/L) +/datum/wires/apc/interactable(mob/user) var/obj/machinery/power/apc/A = holder if(A.wiresexposed) return 1 return 0 -/datum/wires/apc/UpdatePulsed(var/index) - +/datum/wires/apc/on_pulse(wire) var/obj/machinery/power/apc/A = holder - switch(index) - - if(APC_WIRE_IDSCAN) - A.locked = 0 + switch(wire) + if(WIRE_IDSCAN) + A.locked = FALSE spawn(300) if(A) - A.locked = 1 + A.locked = TRUE - if (APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) - if(A.shorted == 0) - A.shorted = 1 + if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2) + if(!A.shorted) + A.shorted = TRUE spawn(1200) - if(A && !IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2)) - A.shorted = 0 + if(A && !is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2)) + A.shorted = FALSE - if (APC_WIRE_AI_CONTROL) - if (A.aidisabled == 0) - A.aidisabled = 1 + if(WIRE_AI_CONTROL) + if(!A.aidisabled) + A.aidisabled = TRUE spawn(10) - if(A && !IsIndexCut(APC_WIRE_AI_CONTROL)) - A.aidisabled = 0 + if(A && !is_cut(WIRE_AI_CONTROL)) + A.aidisabled = FALSE -/datum/wires/apc/UpdateCut(var/index, var/mended) +/datum/wires/apc/on_cut(wire, mend) var/obj/machinery/power/apc/A = holder - switch(index) - if(APC_WIRE_MAIN_POWER1, APC_WIRE_MAIN_POWER2) - - if(!mended) - if(istype(usr, /mob/living)) + switch(wire) + if(WIRE_MAIN_POWER1, WIRE_MAIN_POWER2) + if(!mend) + if(isliving(usr)) A.shock(usr, 50) - A.shorted = 1 + A.shorted = TRUE - else if(!IsIndexCut(APC_WIRE_MAIN_POWER1) && !IsIndexCut(APC_WIRE_MAIN_POWER2)) - A.shorted = 0 - if(istype(usr, /mob/living)) + else if(!is_cut(WIRE_MAIN_POWER1) && !is_cut(WIRE_MAIN_POWER2)) + A.shorted = FALSE + if(isliving(usr)) A.shock(usr, 50) - if(APC_WIRE_AI_CONTROL) - - if(!mended) - if (A.aidisabled == 0) - A.aidisabled = 1 - else - if (A.aidisabled == 1) - A.aidisabled = 0 + if(WIRE_AI_CONTROL) + A.aidisabled = !mend diff --git a/code/datums/wires/autolathe.dm b/code/datums/wires/autolathe.dm index df625351b8..92f5f7facb 100644 --- a/code/datums/wires/autolathe.dm +++ b/code/datums/wires/autolathe.dm @@ -1,61 +1,54 @@ /datum/wires/autolathe - holder_type = /obj/machinery/autolathe wire_count = 6 + proper_name = "Autolathe" -var/const/AUTOLATHE_HACK_WIRE = 1 -var/const/AUTOLATHE_SHOCK_WIRE = 2 -var/const/AUTOLATHE_DISABLE_WIRE = 4 +/datum/wires/autolathe/New(atom/_holder) + wires = list(WIRE_AUTOLATHE_HACK, WIRE_ELECTRIFY, WIRE_AUTOLATHE_DISABLE) + return ..() -/datum/wires/autolathe/GetInteractWindow() +/datum/wires/autolathe/get_status() + . = ..() var/obj/machinery/autolathe/A = holder - . += ..() - . += show_hint(0x1, A.disabled, "The red light is off.", "The red light is on.") - . += show_hint(0x2, A.shocked, "The green light is off.", "The green light is on.") - . += show_hint(0x4, A.hacked, "The blue light is off.", "The blue light is on.") + . += "The red light is [A.disabled ? "off" : "on"]." + . += "The green light is [A.shocked ? "off" : "on"]." + . += "The blue light is [A.hacked ? "off" : "on"]." -/datum/wires/autolathe/CanUse() +/datum/wires/autolathe/interactable(mob/user) var/obj/machinery/autolathe/A = holder if(A.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/autolathe/proc/update_autolathe_ui(mob/living/user) - if(CanUse(user)) - var/obj/machinery/autolathe/A = holder - A.interact(user) - -/datum/wires/autolathe/UpdateCut(index, mended) +/datum/wires/autolathe/on_cut(wire, mend) var/obj/machinery/autolathe/A = holder - switch(index) - if(AUTOLATHE_HACK_WIRE) - A.hacked = !mended - if(AUTOLATHE_SHOCK_WIRE) - A.shocked = !mended - if(AUTOLATHE_DISABLE_WIRE) - A.disabled = !mended - update_autolathe_ui(usr) + switch(wire) + if(WIRE_AUTOLATHE_HACK) + A.hacked = !mend + if(WIRE_ELECTRIFY) + A.shocked = !mend + if(WIRE_AUTOLATHE_DISABLE) + A.disabled = !mend + ..() -/datum/wires/autolathe/UpdatePulsed(index) - if(IsIndexCut(index)) +/datum/wires/autolathe/on_pulse(wire) + if(is_cut(wire)) return var/obj/machinery/autolathe/A = holder - switch(index) - if(AUTOLATHE_HACK_WIRE) + switch(wire) + if(WIRE_AUTOLATHE_HACK) A.hacked = !A.hacked spawn(50) - if(A && !IsIndexCut(index)) + if(A && !is_cut(wire)) A.hacked = 0 - update_autolathe_ui(usr) - if(AUTOLATHE_SHOCK_WIRE) + if(WIRE_ELECTRIFY) A.shocked = !A.shocked spawn(50) - if(A && !IsIndexCut(index)) + if(A && !is_cut(wire)) A.shocked = 0 - if(AUTOLATHE_DISABLE_WIRE) + if(WIRE_AUTOLATHE_DISABLE) A.disabled = !A.disabled spawn(50) - if(A && !IsIndexCut(index)) + if(A && !is_cut(wire)) A.disabled = 0 - update_autolathe_ui(usr) - update_autolathe_ui(usr) + ..() \ No newline at end of file diff --git a/code/datums/wires/camera.dm b/code/datums/wires/camera.dm index 67210e2179..571e2a22e6 100644 --- a/code/datums/wires/camera.dm +++ b/code/datums/wires/camera.dm @@ -1,70 +1,64 @@ // Wires for cameras. /datum/wires/camera - random = 1 + randomize = TRUE holder_type = /obj/machinery/camera wire_count = 6 + proper_name = "Camera" -/datum/wires/camera/GetInteractWindow() +/datum/wires/camera/New(atom/_holder) + wires = list(WIRE_FOCUS, WIRE_MAIN_POWER1, WIRE_CAM_LIGHT, WIRE_CAM_ALARM) + return ..() + +/datum/wires/camera/get_status() . = ..() var/obj/machinery/camera/C = holder - . += show_hint(0x1, C.view_range == initial(C.view_range), "The focus light is on.", "The focus light is off.") - . += show_hint(0x2, C.can_use(), "The power link light is on.", "The power link light is off.") - . += show_hint(0x4, C.light_disabled, "The camera light is off.", "The camera light is on.") - . += show_hint(0x8, C.alarm_on, "The alarm light is on.", "The alarm light is off.") - return . + . += "The focus light is [(C.view_range == initial(C.view_range)) ? "on" : "off"]." + . += "The power link light is [C.can_use() ? "on" : "off"]." + . += "The camera light is [C.light_disabled ? "off" : "on"]." + . += "The alarm light is [C.alarm_on ? "on" : "off"]." -/datum/wires/camera/CanUse(var/mob/living/L) +/datum/wires/camera/interactable(mob/user) var/obj/machinery/camera/C = holder return C.panel_open -var/const/CAMERA_WIRE_FOCUS = 1 -var/const/CAMERA_WIRE_POWER = 2 -var/const/CAMERA_WIRE_LIGHT = 4 -var/const/CAMERA_WIRE_ALARM = 8 -var/const/CAMERA_WIRE_NOTHING1 = 16 -var/const/CAMERA_WIRE_NOTHING2 = 32 - -/datum/wires/camera/UpdateCut(var/index, var/mended) +/datum/wires/camera/on_cut(wire, mend) var/obj/machinery/camera/C = holder - switch(index) - if(CAMERA_WIRE_FOCUS) - var/range = (mended ? initial(C.view_range) : C.short_range) + switch(wire) + if(WIRE_FOCUS) + var/range = (mend ? initial(C.view_range) : C.short_range) C.setViewRange(range) - if(CAMERA_WIRE_POWER) - if(C.status && !mended || !C.status && mended) + if(WIRE_MAIN_POWER1) + if(C.status && !mend || !C.status && mend) C.deactivate(usr, 1) - if(CAMERA_WIRE_LIGHT) - C.light_disabled = !mended + if(WIRE_CAM_LIGHT) + C.light_disabled = !mend - if(CAMERA_WIRE_ALARM) - if(!mended) + if(WIRE_CAM_ALARM) + if(!mend) C.triggerCameraAlarm() else C.cancelCameraAlarm() - return + ..() -/datum/wires/camera/UpdatePulsed(var/index) +/datum/wires/camera/on_pulse(wire) var/obj/machinery/camera/C = holder - if(IsIndexCut(index)) + if(is_cut(wire)) return - switch(index) - if(CAMERA_WIRE_FOCUS) + switch(wire) + if(WIRE_FOCUS) var/new_range = (C.view_range == initial(C.view_range) ? C.short_range : initial(C.view_range)) C.setViewRange(new_range) - if(CAMERA_WIRE_LIGHT) + if(WIRE_CAM_LIGHT) C.light_disabled = !C.light_disabled - if(CAMERA_WIRE_ALARM) + if(WIRE_CAM_ALARM) C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") - return + ..() /datum/wires/camera/proc/CanDeconstruct() - if(IsIndexCut(CAMERA_WIRE_POWER) && IsIndexCut(CAMERA_WIRE_FOCUS) && IsIndexCut(CAMERA_WIRE_LIGHT) && IsIndexCut(CAMERA_WIRE_NOTHING1) && IsIndexCut(CAMERA_WIRE_NOTHING2)) - return 1 - else - return 0 + return is_all_cut() diff --git a/code/datums/wires/explosive.dm b/code/datums/wires/explosive.dm index 6dc8e988ac..52b0150b66 100644 --- a/code/datums/wires/explosive.dm +++ b/code/datums/wires/explosive.dm @@ -1,30 +1,33 @@ /datum/wires/explosive wire_count = 1 + proper_name = "Explosive wires" -var/const/WIRE_EXPLODE = 1 +/datum/wires/explosive/New(atom/_holder) + wires = list(WIRE_EXPLODE) + return ..() /datum/wires/explosive/proc/explode() return -/datum/wires/explosive/UpdatePulsed(var/index) - switch(index) +/datum/wires/explosive/on_pulse(wire) + switch(wire) if(WIRE_EXPLODE) explode() -/datum/wires/explosive/UpdateCut(var/index, var/mended) - switch(index) +/datum/wires/explosive/on_cut(wire, mend) + switch(wire) if(WIRE_EXPLODE) - if(!mended) + if(!mend) explode() /datum/wires/explosive/c4 holder_type = /obj/item/weapon/plastique -/datum/wires/explosive/c4/CanUse(var/mob/living/L) +/datum/wires/explosive/c4/interactable(mob/user) var/obj/item/weapon/plastique/P = holder if(P.open_panel) - return 1 - return 0 + return TRUE + return FALSE /datum/wires/explosive/c4/explode() var/obj/item/weapon/plastique/P = holder diff --git a/code/datums/wires/grid_checker.dm b/code/datums/wires/grid_checker.dm index 355f39ec18..42bc470e05 100644 --- a/code/datums/wires/grid_checker.dm +++ b/code/datums/wires/grid_checker.dm @@ -1,66 +1,64 @@ /datum/wires/grid_checker holder_type = /obj/machinery/power/grid_checker wire_count = 8 + proper_name = "Grid Checker" -var/const/GRID_CHECKER_WIRE_REBOOT = 1 // This wire causes the grid-check to end, if pulsed. -var/const/GRID_CHECKER_WIRE_LOCKOUT = 2 // If cut or pulsed, locks the user out for half a minute. -var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_1 = 4 // Needs to be cut for REBOOT to be possible. -var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_2 = 8 // Needs to be cut for REBOOT to be possible. -var/const/GRID_CHECKER_WIRE_ALLOW_MANUAL_3 = 16 // Needs to be cut for REBOOT to be possible. -var/const/GRID_CHECKER_WIRE_SHOCK = 32 // Shocks the user if not wearing gloves. -var/const/GRID_CHECKER_WIRE_NOTHING_1 = 64 // Does nothing, but makes it a bit harder. -var/const/GRID_CHECKER_WIRE_NOTHING_2 = 128 // Does nothing, but makes it a bit harder. +/datum/wires/grid_checker/New(atom/_holder) + wires = list( + WIRE_REBOOT, WIRE_LOCKOUT, WIRE_ALLOW_MANUAL1, + WIRE_ALLOW_MANUAL2, WIRE_ALLOW_MANUAL3, WIRE_ELECTRIFY + ) + return ..() - -/datum/wires/grid_checker/CanUse(var/mob/living/L) +/datum/wires/grid_checker/interactable(mob/user) var/obj/machinery/power/grid_checker/G = holder if(G.opened) return TRUE return FALSE - -/datum/wires/grid_checker/GetInteractWindow() +/datum/wires/grid_checker/get_status() var/obj/machinery/power/grid_checker/G = holder - . += ..() - . += show_hint(0x1, G.power_failing, "The green light is off.", "The green light is on.") - . += show_hint(0x2, G.wire_locked_out, "The red light is on.", "The red light is off.") - . += show_hint(0x4, G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3, "The blue light is on.", "The blue light is off.") + . = ..() + . += "The green light is [G.power_failing ? "off." : "on."]" + . += "The red light is [G.wire_locked_out ? "on." : "off."]" + . += "The blue light is [(G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3) ? "on." : "off."]" - -/datum/wires/grid_checker/UpdateCut(var/index, var/mended) +/datum/wires/grid_checker/on_cut(wire, mend) var/obj/machinery/power/grid_checker/G = holder - switch(index) - if(GRID_CHECKER_WIRE_LOCKOUT) - G.wire_locked_out = !mended - if(GRID_CHECKER_WIRE_ALLOW_MANUAL_1) - G.wire_allow_manual_1 = !mended - if(GRID_CHECKER_WIRE_ALLOW_MANUAL_2) - G.wire_allow_manual_2 = !mended - if(GRID_CHECKER_WIRE_ALLOW_MANUAL_3) - G.wire_allow_manual_3 = !mended - if(GRID_CHECKER_WIRE_SHOCK) + switch(wire) + if(WIRE_LOCKOUT) + G.wire_locked_out = !mend + if(WIRE_ALLOW_MANUAL1) + G.wire_allow_manual_1 = !mend + if(WIRE_ALLOW_MANUAL2) + G.wire_allow_manual_2 = !mend + if(WIRE_ALLOW_MANUAL3) + G.wire_allow_manual_3 = !mend + if(WIRE_ELECTRIFY) if(G.wire_locked_out) return G.shock(usr, 70) + ..() - -/datum/wires/grid_checker/UpdatePulsed(var/index) +/datum/wires/grid_checker/on_pulse(wire) var/obj/machinery/power/grid_checker/G = holder - switch(index) - if(GRID_CHECKER_WIRE_REBOOT) + switch(wire) + if(WIRE_REBOOT) if(G.wire_locked_out) return - if(G.power_failing && G.wire_allow_manual_1 && G.wire_allow_manual_2 && G.wire_allow_manual_3) G.end_power_failure(TRUE) - if(GRID_CHECKER_WIRE_LOCKOUT) + + if(WIRE_LOCKOUT) if(G.wire_locked_out) return G.wire_locked_out = TRUE spawn(30 SECONDS) G.wire_locked_out = FALSE - if(GRID_CHECKER_WIRE_SHOCK) + + if(WIRE_ELECTRIFY) if(G.wire_locked_out) return - G.shock(usr, 70) \ No newline at end of file + G.shock(usr, 70) + ..() \ No newline at end of file diff --git a/code/datums/wires/jukebox.dm b/code/datums/wires/jukebox.dm index e207334ffd..125bbd78ef 100644 --- a/code/datums/wires/jukebox.dm +++ b/code/datums/wires/jukebox.dm @@ -1,42 +1,39 @@ /datum/wires/jukebox - random = 1 + randomize = TRUE holder_type = /obj/machinery/media/jukebox wire_count = 11 + proper_name = "Jukebox" -var/const/WIRE_POWER = 1 -var/const/WIRE_HACK = 2 -var/const/WIRE_SPEEDUP = 4 -var/const/WIRE_SPEEDDOWN = 8 -var/const/WIRE_REVERSE = 16 -var/const/WIRE_NOTHING1 = 32 -var/const/WIRE_NOTHING2 = 64 -var/const/WIRE_START = 128 -var/const/WIRE_STOP = 256 -var/const/WIRE_PREV = 512 -var/const/WIRE_NEXT = 1024 +/datum/wires/jukebox/New(atom/_holder) + wires = list( + WIRE_MAIN_POWER1, WIRE_JUKEBOX_HACK, + WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE, + WIRE_START, WIRE_STOP, WIRE_PREV, WIRE_NEXT + ) + return ..() -/datum/wires/jukebox/CanUse(var/mob/living/L) +/datum/wires/jukebox/interactable(mob/user) var/obj/machinery/media/jukebox/A = holder if(A.panel_open) - return 1 - return 0 + return TRUE + return FALSE // Show the status of lights as a hint to the current state -/datum/wires/jukebox/GetInteractWindow() +/datum/wires/jukebox/get_status() var/obj/machinery/media/jukebox/A = holder - . += ..() - . += show_hint(0x1, A.stat & (BROKEN|NOPOWER), "The power light is off.", "The power light is on.") - . += show_hint(0x2, A.hacked, "The parental guidance light is off.", "The parental guidance light is on.") - . += show_hint(0x4, IsIndexCut(WIRE_REVERSE), "The data light is hauntingly dark.", "The data light is glowing softly.") + . = ..() + . += "The power light is [A.stat & (BROKEN|NOPOWER) ? "off." : "on."]" + . += "The parental guidance light is [A.hacked ? "off." : "on."]" + . += "The data light is [is_cut(WIRE_REVERSE) ? "hauntingly dark." : "glowing softly."]" // Give a hint as to what each wire does -/datum/wires/jukebox/UpdatePulsed(var/index) +/datum/wires/jukebox/on_pulse(wire) var/obj/machinery/media/jukebox/A = holder - switch(index) - if(WIRE_POWER) + switch(wire) + if(WIRE_MAIN_POWER1) holder.visible_message("[bicon(holder)] The power light flickers.") A.shock(usr, 90) - if(WIRE_HACK) + if(WIRE_JUKEBOX_HACK) holder.visible_message("[bicon(holder)] The parental guidance light flickers.") if(WIRE_REVERSE) holder.visible_message("[bicon(holder)] The data light blinks ominously.") @@ -55,24 +52,21 @@ var/const/WIRE_NEXT = 1024 else A.shock(usr, 10) // The nothing wires give a chance to shock just for fun -/datum/wires/jukebox/UpdateCut(var/index, var/mended) +/datum/wires/jukebox/on_cut(wire, mend) var/obj/machinery/media/jukebox/A = holder - switch(index) - if(WIRE_POWER) + switch(wire) + if(WIRE_MAIN_POWER1) // TODO - Actually make machine electrified or something. A.shock(usr, 90) - if(WIRE_HACK) - if(mended) - A.set_hacked(0) - else - A.set_hacked(1) + if(WIRE_JUKEBOX_HACK) + A.set_hacked(!mend) if(WIRE_SPEEDUP, WIRE_SPEEDDOWN, WIRE_REVERSE) - var/newfreq = IsIndexCut(WIRE_REVERSE) ? -1 : 1; - if (IsIndexCut(WIRE_SPEEDUP)) + var/newfreq = is_cut(WIRE_REVERSE) ? -1 : 1; + if(is_cut(WIRE_SPEEDUP)) newfreq *= 2 - if (IsIndexCut(WIRE_SPEEDDOWN)) + if(is_cut(WIRE_SPEEDDOWN)) newfreq *= 0.5 A.freq = newfreq diff --git a/code/datums/wires/mines.dm b/code/datums/wires/mines.dm index 372810988c..209fcc4c30 100644 --- a/code/datums/wires/mines.dm +++ b/code/datums/wires/mines.dm @@ -1,32 +1,29 @@ /datum/wires/mines wire_count = 6 - random = 1 + randomize = TRUE holder_type = /obj/effect/mine + proper_name = "Explosive Wires" -#define WIRE_DETONATE 1 -#define WIRE_TIMED_DET 2 -#define WIRE_DISARM 4 -#define WIRE_DUMMY_1 8 -#define WIRE_DUMMY_2 16 -#define WIRE_BADDISARM 32 +/datum/wires/mines/New(atom/_holder) + wires = list(WIRE_EXPLODE, WIRE_EXPLODE_DELAY, WIRE_DISARM, WIRE_BADDISARM) + return ..() -/datum/wires/mines/GetInteractWindow() +/datum/wires/mines/get_status() . = ..() - . += "
\n["Warning: detonation may occur even with proper equipment."]" - return . + . += "\[Warning: detonation may occur even with proper equipment.]" /datum/wires/mines/proc/explode() return -/datum/wires/mines/UpdateCut(var/index, var/mended) +/datum/wires/mines/on_cut(wire, mend) var/obj/effect/mine/C = holder - switch(index) - if(WIRE_DETONATE) + switch(wire) + if(WIRE_EXPLODE) C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") C.explode() - if(WIRE_TIMED_DET) + if(WIRE_EXPLODE_DELAY) C.visible_message("[bicon(C)] *BEEE-*", "[bicon(C)] *BEEE-*") C.explode() @@ -35,30 +32,22 @@ new C.mineitemtype(get_turf(C)) spawn(0) qdel(C) - return - - if(WIRE_DUMMY_1) - return - - - if(WIRE_DUMMY_2) - return if(WIRE_BADDISARM) C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() - return + ..() -/datum/wires/mines/UpdatePulsed(var/index) +/datum/wires/mines/on_pulse(wire) var/obj/effect/mine/C = holder - if(IsIndexCut(index)) + if(is_cut(wire)) return - switch(index) - if(WIRE_DETONATE) + switch(wire) + if(WIRE_EXPLODE) C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") - if(WIRE_TIMED_DET) + if(WIRE_EXPLODE_DELAY) C.visible_message("[bicon(C)] *BEEPBEEPBEEP*", "[bicon(C)] *BEEPBEEPBEEP*") spawn(20) C.explode() @@ -66,16 +55,10 @@ if(WIRE_DISARM) C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") - if(WIRE_DUMMY_1) - C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") - - if(WIRE_DUMMY_2) - C.visible_message("[bicon(C)] *beep*", "[bicon(C)] *beep*") - if(WIRE_BADDISARM) C.visible_message("[bicon(C)] *ping*", "[bicon(C)] *ping*") - return + ..() -/datum/wires/mines/CanUse(var/mob/living/L) +/datum/wires/mines/interactable(mob/user) var/obj/effect/mine/M = holder return M.panel_open diff --git a/code/datums/wires/particle_accelerator.dm b/code/datums/wires/particle_accelerator.dm index 3d90236b46..e3fd198b3b 100644 --- a/code/datums/wires/particle_accelerator.dm +++ b/code/datums/wires/particle_accelerator.dm @@ -1,52 +1,48 @@ /datum/wires/particle_acc/control_box wire_count = 5 holder_type = /obj/machinery/particle_accelerator/control_box + proper_name = "Particle accelerator control" -var/const/PARTICLE_TOGGLE_WIRE = 1 // Toggles whether the PA is on or not. -var/const/PARTICLE_STRENGTH_WIRE = 2 // Determines the strength of the PA. -var/const/PARTICLE_INTERFACE_WIRE = 4 // Determines the interface showing up. -var/const/PARTICLE_LIMIT_POWER_WIRE = 8 // Determines how strong the PA can be. -//var/const/PARTICLE_NOTHING_WIRE = 16 // Blank wire +/datum/wires/particle_acc/control_box/New(atom/_holder) + wires = list(WIRE_PARTICLE_POWER, WIRE_PARTICLE_STRENGTH, WIRE_PARTICLE_INTERFACE, WIRE_PARTICLE_POWER_LIMIT) + return ..() -/datum/wires/particle_acc/control_box/CanUse(var/mob/living/L) +/datum/wires/particle_acc/control_box/interactable(mob/user) var/obj/machinery/particle_accelerator/control_box/C = holder if(C.construction_state == 2) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/particle_acc/control_box/UpdatePulsed(var/index) +/datum/wires/particle_acc/control_box/on_pulse(wire) var/obj/machinery/particle_accelerator/control_box/C = holder - switch(index) - - if(PARTICLE_TOGGLE_WIRE) + switch(wire) + if(WIRE_PARTICLE_POWER) C.toggle_power() - if(PARTICLE_STRENGTH_WIRE) + if(WIRE_PARTICLE_STRENGTH) C.add_strength() - if(PARTICLE_INTERFACE_WIRE) + if(WIRE_PARTICLE_INTERFACE) C.interface_control = !C.interface_control - if(PARTICLE_LIMIT_POWER_WIRE) + if(WIRE_PARTICLE_POWER_LIMIT) C.visible_message("[bicon(C)][C] makes a large whirring noise.") -/datum/wires/particle_acc/control_box/UpdateCut(var/index, var/mended) +/datum/wires/particle_acc/control_box/on_cut(wire, mend) var/obj/machinery/particle_accelerator/control_box/C = holder - switch(index) - - if(PARTICLE_TOGGLE_WIRE) - if(C.active == !mended) + switch(wire) + if(WIRE_PARTICLE_POWER) + if(C.active == !mend) C.toggle_power() - if(PARTICLE_STRENGTH_WIRE) - + if(WIRE_PARTICLE_STRENGTH) for(var/i = 1; i < 3; i++) C.remove_strength() - if(PARTICLE_INTERFACE_WIRE) - C.interface_control = mended + if(WIRE_PARTICLE_INTERFACE) + C.interface_control = mend - if(PARTICLE_LIMIT_POWER_WIRE) - C.strength_upper_limit = (mended ? 2 : 3) + if(WIRE_PARTICLE_POWER_LIMIT) + C.strength_upper_limit = (mend ? 2 : 3) if(C.strength_upper_limit < C.strength) C.remove_strength() diff --git a/code/datums/wires/radio.dm b/code/datums/wires/radio.dm index d059a0b091..ddc5110839 100644 --- a/code/datums/wires/radio.dm +++ b/code/datums/wires/radio.dm @@ -1,41 +1,42 @@ /datum/wires/radio holder_type = /obj/item/device/radio wire_count = 3 + proper_name = "Radio" -var/const/WIRE_SIGNAL = 1 -var/const/WIRE_RECEIVE = 2 -var/const/WIRE_TRANSMIT = 4 +/datum/wires/radio/New(atom/_holder) + wires = list(WIRE_RADIO_SIGNAL, WIRE_RADIO_RECEIVER, WIRE_RADIO_TRANSMIT) + return ..() -/datum/wires/radio/CanUse(var/mob/living/L) +/datum/wires/radio/interactable(mob/user) var/obj/item/device/radio/R = holder if(R.b_stat) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/radio/UpdatePulsed(var/index) +/datum/wires/radio/on_pulse(wire) var/obj/item/device/radio/R = holder - switch(index) - if(WIRE_SIGNAL) - R.listening = !R.listening && !IsIndexCut(WIRE_RECEIVE) - R.broadcasting = R.listening && !IsIndexCut(WIRE_TRANSMIT) + switch(wire) + if(WIRE_RADIO_SIGNAL) + R.listening = !R.listening && !is_cut(WIRE_RADIO_RECEIVER) + R.broadcasting = R.listening && !is_cut(WIRE_RADIO_TRANSMIT) - if(WIRE_RECEIVE) - R.listening = !R.listening && !IsIndexCut(WIRE_SIGNAL) + if(WIRE_RADIO_RECEIVER) + R.listening = !R.listening && !is_cut(WIRE_RADIO_SIGNAL) - if(WIRE_TRANSMIT) - R.broadcasting = !R.broadcasting && !IsIndexCut(WIRE_SIGNAL) - SSnanoui.update_uis(holder) + if(WIRE_RADIO_TRANSMIT) + R.broadcasting = !R.broadcasting && !is_cut(WIRE_RADIO_SIGNAL) + ..() -/datum/wires/radio/UpdateCut(var/index, var/mended) +/datum/wires/radio/on_cut(wire, mend) var/obj/item/device/radio/R = holder - switch(index) - if(WIRE_SIGNAL) - R.listening = mended && !IsIndexCut(WIRE_RECEIVE) - R.broadcasting = mended && !IsIndexCut(WIRE_TRANSMIT) + switch(wire) + if(WIRE_RADIO_SIGNAL) + R.listening = mend && !is_cut(WIRE_RADIO_RECEIVER) + R.broadcasting = mend && !is_cut(WIRE_RADIO_TRANSMIT) - if(WIRE_RECEIVE) - R.listening = mended && !IsIndexCut(WIRE_SIGNAL) + if(WIRE_RADIO_RECEIVER) + R.listening = mend && !is_cut(WIRE_RADIO_SIGNAL) - if(WIRE_TRANSMIT) - R.broadcasting = mended && !IsIndexCut(WIRE_SIGNAL) - SSnanoui.update_uis(holder) + if(WIRE_RADIO_TRANSMIT) + R.broadcasting = mend && !is_cut(WIRE_RADIO_SIGNAL) + ..() diff --git a/code/datums/wires/robot.dm b/code/datums/wires/robot.dm index ed87a2b1fe..7beb91437e 100644 --- a/code/datums/wires/robot.dm +++ b/code/datums/wires/robot.dm @@ -1,76 +1,63 @@ /datum/wires/robot - random = 1 + randomize = TRUE holder_type = /mob/living/silicon/robot wire_count = 5 + proper_name = "Cyborg" -var/const/BORG_WIRE_LAWCHECK = 1 -var/const/BORG_WIRE_MAIN_POWER = 2 // The power wires do nothing whyyyyyyyyyyyyy -var/const/BORG_WIRE_LOCKED_DOWN = 4 -var/const/BORG_WIRE_AI_CONTROL = 8 -var/const/BORG_WIRE_CAMERA = 16 +/datum/wires/robot/New(atom/_holder) + wires = list(WIRE_AI_CONTROL, WIRE_BORG_CAMERA, WIRE_BORG_LAWCHECK, WIRE_BORG_LOCKED) + return ..() -/datum/wires/robot/GetInteractWindow() +/datum/wires/robot/get_status() . = ..() var/mob/living/silicon/robot/R = holder - . += show_hint(0x1, R.lawupdate, "The LawSync light is on.", "The LawSync light is off.") - . += show_hint(0x2, R.connected_ai, "The AI link light is on.", "The AI link light is off.") - . += show_hint(0x4, (!isnull(R.camera) && R.camera.status == 1), "The camera light is on.", "The camera light is off.") - . += show_hint(0x8, R.lockdown, "The lockdown light is on.", "The lockdown light is off.") - return . - -/datum/wires/robot/UpdateCut(var/index, var/mended) + . += "The LawSync light is [R.lawupdate ? "on" : "off"]." + . += "The AI link light is [R.connected_ai ? "on" : "off"]." + . += "The Camera light is [(R.camera && R.camera.status == 1) ? "on" : "off"]." + . += "The lockdown light is [R.lockcharge ? "on" : "off"]." +/datum/wires/robot/on_cut(wire, mend) var/mob/living/silicon/robot/R = holder - switch(index) - if(BORG_WIRE_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI - if(!mended) - if (R.lawupdate == 1) + switch(wire) + if(WIRE_BORG_LAWCHECK) //Cut the law wire, and the borg will no longer receive law updates from its AI + if(!mend) + if(R.lawupdate) to_chat(R, "LawSync protocol engaged.") + R.lawsync() R.show_laws() else - if (R.lawupdate == 0 && !R.emagged) - R.lawupdate = 1 + if(!R.lawupdate && !R.emagged) + R.lawupdate = TRUE - if (BORG_WIRE_AI_CONTROL) //Cut the AI wire to reset AI control - if(!mended) + if(WIRE_AI_CONTROL) //Cut the AI wire to reset AI control + if(!mend) R.disconnect_from_ai() - if (BORG_WIRE_CAMERA) + if(WIRE_BORG_CAMERA) if(!isnull(R.camera) && !R.scrambledcodes) - R.camera.status = mended + R.camera.status = mend - if(BORG_WIRE_LAWCHECK) //Forces a law update if the borg is set to receive them. Since an update would happen when the borg checks its laws anyway, not much use, but eh - if (R.lawupdate) - R.lawsync() + if(WIRE_BORG_LOCKED) + R.SetLockdown(!mend) + ..() - if(BORG_WIRE_LOCKED_DOWN) - R.SetLockdown(!mended) - - -/datum/wires/robot/UpdatePulsed(var/index) +/datum/wires/robot/on_pulse(wire) var/mob/living/silicon/robot/R = holder - switch(index) - if (BORG_WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI + switch(wire) + if(WIRE_AI_CONTROL) //pulse the AI wire to make the borg reselect an AI if(!R.emagged) - var/mob/living/silicon/ai/new_ai = select_active_ai(R) - R.connect_to_ai(new_ai) + R.connect_to_ai(select_active_ai(R)) - if (BORG_WIRE_CAMERA) + if(WIRE_BORG_CAMERA) if(!isnull(R.camera) && R.camera.can_use() && !R.scrambledcodes) R.visible_message("[R]'s camera lense focuses loudly.") to_chat(R, "Your camera lense focuses loudly.") - if(BORG_WIRE_LOCKED_DOWN) + if(WIRE_BORG_LOCKED) R.SetLockdown(!R.lockdown) // Toggle -/datum/wires/robot/CanUse(var/mob/living/L) +/datum/wires/robot/interactable(mob/user) var/mob/living/silicon/robot/R = holder if(R.wiresexposed) - return 1 - return 0 - -/datum/wires/robot/proc/IsCameraCut() - return wires_status & BORG_WIRE_CAMERA - -/datum/wires/robot/proc/LockedCut() - return wires_status & BORG_WIRE_LOCKED_DOWN + return TRUE + return FALSE diff --git a/code/datums/wires/seedstorage.dm b/code/datums/wires/seedstorage.dm index 2a0e315a57..19414b6731 100644 --- a/code/datums/wires/seedstorage.dm +++ b/code/datums/wires/seedstorage.dm @@ -1,56 +1,58 @@ -#define SEED_WIRE_SMART 1 -#define SEED_WIRE_CONTRABAND 2 -#define SEED_WIRE_ELECTRIFY 4 -#define SEED_WIRE_LOCKDOWN 8 - /datum/wires/seedstorage holder_type = /obj/machinery/seed_storage wire_count = 4 - random = 1 + randomize = TRUE + proper_name = "Seed Storage" -/datum/wires/seedstorage/CanUse(var/mob/living/L) +/datum/wires/seedstorage/New(atom/_holder) + wires = list(WIRE_SEED_SMART, WIRE_CONTRABAND, WIRE_ELECTRIFY, WIRE_SEED_LOCKDOWN) + return ..() + +/datum/wires/seedstorage/interactable(mob/user) var/obj/machinery/seed_storage/V = holder if(V.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/seedstorage/GetInteractWindow() +/datum/wires/seedstorage/get_status() var/obj/machinery/seed_storage/V = holder - . += ..() - . += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.") - . += show_hint(0x2, V.smart, "The red light is off.", "The red light is blinking.") - . += show_hint(0x4, V.hacked || V.emagged, "The green light is on.", "The green light is off.") - . += show_hint(0x8, V.lockdown, "The keypad lock is deployed.", "The keypad lock is retracted.") + . = ..() + . += "The orange light is [V.seconds_electrified ? "off." : "on."]" + . += "The red light is [V.smart ? "off." : "blinking."]" + . += "The green light is [(V.hacked || V.emagged) ? "on." : "off."]" + . += "The keypad lock light is [V.lockdown ? "deployed." : "retracted."]" -/datum/wires/seedstorage/UpdatePulsed(var/index) +/datum/wires/seedstorage/on_pulse(wire) var/obj/machinery/seed_storage/V = holder - switch(index) - if(SEED_WIRE_SMART) + switch(wire) + if(WIRE_SEED_SMART) V.smart = !V.smart - if(SEED_WIRE_CONTRABAND) + if(WIRE_CONTRABAND) V.hacked = !V.hacked - if(SEED_WIRE_ELECTRIFY) + if(WIRE_ELECTRIFY) V.seconds_electrified = 30 - if(SEED_WIRE_LOCKDOWN) + if(WIRE_SEED_LOCKDOWN) V.lockdown = !V.lockdown + ..() -/datum/wires/seedstorage/UpdateCut(var/index, var/mended) +/datum/wires/seedstorage/on_cut(wire, mend) var/obj/machinery/seed_storage/V = holder - switch(index) - if(SEED_WIRE_SMART) - V.smart = 0 - if(SEED_WIRE_CONTRABAND) - V.hacked = !mended - if(SEED_WIRE_ELECTRIFY) - if(mended) + switch(wire) + if(WIRE_SEED_SMART) + V.smart = FALSE + if(WIRE_CONTRABAND) + V.hacked = !mend + if(WIRE_ELECTRIFY) + if(mend) V.seconds_electrified = 0 else V.seconds_electrified = -1 - if(SEED_WIRE_LOCKDOWN) - if(mended) - V.lockdown = 1 + if(WIRE_SEED_LOCKDOWN) + if(mend) + V.lockdown = TRUE V.req_access = list() V.req_one_access = list() else V.req_access = initial(V.req_access) V.req_one_access = initial(V.req_one_access) + ..() \ No newline at end of file diff --git a/code/datums/wires/shield_generator.dm b/code/datums/wires/shield_generator.dm index 201109de35..9ba0293591 100644 --- a/code/datums/wires/shield_generator.dm +++ b/code/datums/wires/shield_generator.dm @@ -1,46 +1,47 @@ /datum/wires/shield_generator holder_type = /obj/machinery/power/shield_generator wire_count = 5 + proper_name = "Shield Generator" -var/const/SHIELDGEN_WIRE_POWER = 1 // Cut to disable power input into the generator. Pulse does nothing. Mend to restore. -var/const/SHIELDGEN_WIRE_HACK = 2 // Pulse to hack the generator, enabling hacked modes. Cut to unhack. Mend does nothing. -var/const/SHIELDGEN_WIRE_CONTROL = 4 // Cut to lock most shield controls. Mend to unlock them. Pulse does nothing. -var/const/SHIELDGEN_WIRE_AICONTROL = 8 // Cut to disable AI control. Mend to restore. -var/const/SHIELDGEN_WIRE_NOTHING = 16 // A blank wire that doesn't have any specific function +/datum/wires/shield_generator/New(atom/_holder) + wires = list(WIRE_MAIN_POWER1, WIRE_CONTRABAND, WIRE_AI_CONTROL, WIRE_SHIELD_CONTROL) + return ..() -/datum/wires/shield_generator/CanUse(var/mob/living/L) +/datum/wires/shield_generator/interactable(mob/user) var/obj/machinery/power/shield_generator/S = holder if(S.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/shield_generator/GetInteractWindow() +/datum/wires/shield_generator/get_status() var/obj/machinery/power/shield_generator/S = holder - . += ..() - . += show_hint(0x1, S.mode_changes_locked, "The orange light is on.", "The orange light is off.") - . += show_hint(0x2, S.ai_control_disabled, "The blue light is off.", "The blue light is blinking.") - . += show_hint(0x4, S.hacked, "The violet light is pulsing.", "The violet light is steady.") - . += show_hint(0x8, S.input_cut, "The red light is off.", "The red light is on.") + . = ..() + . += "The orange light is [S.mode_changes_locked ? "on." : "off."]" + . += "The blue light is [S.ai_control_disabled ? "off." : "blinking."]" + . += "The violet light is [S.hacked ? "pulsing." : "steady."]" + . += "The red light is [S.input_cut ? "off." : "on."]" -/datum/wires/shield_generator/UpdateCut(index, mended) +/datum/wires/shield_generator/on_cut(wire, mend) var/obj/machinery/power/shield_generator/S = holder - switch(index) - if(SHIELDGEN_WIRE_POWER) - S.input_cut = !mended - if(SHIELDGEN_WIRE_HACK) - if(!mended) - S.hacked = 0 + switch(wire) + if(WIRE_MAIN_POWER1) + S.input_cut = !mend + if(WIRE_CONTRABAND) + if(!mend) + S.hacked = FALSE if(S.check_flag(MODEFLAG_BYPASS)) S.toggle_flag(MODEFLAG_BYPASS) if(S.check_flag(MODEFLAG_OVERCHARGE)) S.toggle_flag(MODEFLAG_OVERCHARGE) - if(SHIELDGEN_WIRE_CONTROL) - S.mode_changes_locked = !mended - if(SHIELDGEN_WIRE_AICONTROL) - S.ai_control_disabled = !mended + if(WIRE_SHIELD_CONTROL) + S.mode_changes_locked = !mend + if(WIRE_AI_CONTROL) + S.ai_control_disabled = !mend + ..() -/datum/wires/shield_generator/UpdatePulsed(var/index) +/datum/wires/shield_generator/on_pulse(wire) var/obj/machinery/power/shield_generator/S = holder - switch(index) - if(SHIELDGEN_WIRE_HACK) - S.hacked = 1 \ No newline at end of file + switch(wire) + if(WIRE_CONTRABAND) + S.hacked = TRUE + ..() \ No newline at end of file diff --git a/code/datums/wires/smartfridge.dm b/code/datums/wires/smartfridge.dm index f69e153bbf..78b82939e2 100644 --- a/code/datums/wires/smartfridge.dm +++ b/code/datums/wires/smartfridge.dm @@ -1,47 +1,52 @@ /datum/wires/smartfridge holder_type = /obj/machinery/smartfridge wire_count = 3 + proper_name = "Smartfridge" + +/datum/wires/smartfridge/New(atom/_holder) + wires = list(WIRE_ELECTRIFY, WIRE_IDSCAN, WIRE_THROW_ITEM) + return ..() /datum/wires/smartfridge/secure - random = 1 - wire_count = 4 + randomize = TRUE + wire_count = 4 // 3 actual, 1 dud. -var/const/SMARTFRIDGE_WIRE_ELECTRIFY = 1 -var/const/SMARTFRIDGE_WIRE_THROW = 2 -var/const/SMARTFRIDGE_WIRE_IDSCAN = 4 - -/datum/wires/smartfridge/CanUse(var/mob/living/L) +/datum/wires/smartfridge/interactable(mob/user) var/obj/machinery/smartfridge/S = holder + if(iscarbon(user) && S.Adjacent(user) && S.seconds_electrified && S.shock(user, 100)) + return FALSE if(S.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/smartfridge/GetInteractWindow() +/datum/wires/smartfridge/get_status() + . = ..() var/obj/machinery/smartfridge/S = holder - . += ..() - . += show_hint(0x1, S.seconds_electrified, "The orange light is off.", "The orange light is on.") - . += show_hint(0x2, S.shoot_inventory, "The red light is off.", "The red light is blinking.") - . += show_hint(0x4, S.scan_id, "A purple light is on.", "A yellow light is on.") + . += "The orange light is [S.seconds_electrified ? "off" : "on"]." + . += "The red light is [S.shoot_inventory ? "off" : "blinking"]." + . += "A [S.scan_id ? "purple" : "yellow"] light is on." -/datum/wires/smartfridge/UpdatePulsed(var/index) +/datum/wires/smartfridge/on_pulse(wire) var/obj/machinery/smartfridge/S = holder - switch(index) - if(SMARTFRIDGE_WIRE_THROW) + switch(wire) + if(WIRE_THROW_ITEM) S.shoot_inventory = !S.shoot_inventory - if(SMARTFRIDGE_WIRE_ELECTRIFY) + if(WIRE_ELECTRIFY) S.seconds_electrified = 30 - if(SMARTFRIDGE_WIRE_IDSCAN) + if(WIRE_IDSCAN) S.scan_id = !S.scan_id + ..() -/datum/wires/smartfridge/UpdateCut(var/index, var/mended) +/datum/wires/smartfridge/on_cut(wire, mend) var/obj/machinery/smartfridge/S = holder - switch(index) - if(SMARTFRIDGE_WIRE_THROW) - S.shoot_inventory = !mended - if(SMARTFRIDGE_WIRE_ELECTRIFY) - if(mended) + switch(wire) + if(WIRE_THROW_ITEM) + S.shoot_inventory = !mend + if(WIRE_ELECTRIFY) + if(mend) S.seconds_electrified = 0 else S.seconds_electrified = -1 - if(SMARTFRIDGE_WIRE_IDSCAN) - S.scan_id = 1 + if(WIRE_IDSCAN) + S.scan_id = TRUE + ..() diff --git a/code/datums/wires/smes.dm b/code/datums/wires/smes.dm index 1751bb6760..ad63c12522 100644 --- a/code/datums/wires/smes.dm +++ b/code/datums/wires/smes.dm @@ -1,59 +1,57 @@ /datum/wires/smes holder_type = /obj/machinery/power/smes/buildable wire_count = 5 + proper_name = "SMES" -var/const/SMES_WIRE_RCON = 1 // Remote control (AI and consoles), cut to disable -var/const/SMES_WIRE_INPUT = 2 // Input wire, cut to disable input, pulse to disable for 60s -var/const/SMES_WIRE_OUTPUT = 4 // Output wire, cut to disable output, pulse to disable for 60s -var/const/SMES_WIRE_GROUNDING = 8 // Cut to quickly discharge causing sparks, pulse to only create few sparks -var/const/SMES_WIRE_FAILSAFES = 16 // Cut to disable failsafes, mend to reenable +/datum/wires/smes/New(atom/_holder) + wires = list(WIRE_SMES_RCON, WIRE_SMES_INPUT, WIRE_SMES_OUTPUT, WIRE_SMES_GROUNDING, WIRE_SMES_FAILSAFES) + return ..() - -/datum/wires/smes/CanUse(var/mob/living/L) +/datum/wires/smes/interactable(mob/user) var/obj/machinery/power/smes/buildable/S = holder if(S.panel_open) - return 1 - return 0 + return TRUE + return FALSE - -/datum/wires/smes/GetInteractWindow() +/datum/wires/smes/get_status() var/obj/machinery/power/smes/buildable/S = holder - . += ..() - . += show_hint(0x1, S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed, "The green light is off.", "The green light is on.") - . += show_hint(0x2, S.safeties_enabled || S.grounding, "The red light is off.", "The red light is blinking.") - . += show_hint(0x4, S.RCon, "The blue light is on.", "The blue light is off.") + . = ..() + . += "The green light is [(S.input_cut || S.input_pulsed || S.output_cut || S.output_pulsed) ? "off" : "on"]." + . += "The red light is [(S.safeties_enabled || S.grounding) ? "off" : "blinking"]." + . += "The blue light is [S.RCon ? "on" : "off"]." -/datum/wires/smes/UpdateCut(var/index, var/mended) +/datum/wires/smes/on_cut(wire, mend) var/obj/machinery/power/smes/buildable/S = holder - switch(index) - if(SMES_WIRE_RCON) - S.RCon = mended - if(SMES_WIRE_INPUT) - S.input_cut = !mended - if(SMES_WIRE_OUTPUT) - S.output_cut = !mended - if(SMES_WIRE_GROUNDING) - S.grounding = mended - if(SMES_WIRE_FAILSAFES) - S.safeties_enabled = mended + switch(wire) + if(WIRE_SMES_RCON) + S.RCon = mend + if(WIRE_SMES_INPUT) + S.input_cut = !mend + if(WIRE_SMES_OUTPUT) + S.output_cut = !mend + if(WIRE_SMES_GROUNDING) + S.grounding = mend + if(WIRE_SMES_FAILSAFES) + S.safeties_enabled = mend + ..() - -/datum/wires/smes/UpdatePulsed(var/index) +/datum/wires/smes/on_pulse(wire) var/obj/machinery/power/smes/buildable/S = holder - switch(index) - if(SMES_WIRE_RCON) + switch(wire) + if(WIRE_SMES_RCON) if(S.RCon) S.RCon = 0 spawn(10) S.RCon = 1 - if(SMES_WIRE_INPUT) + if(WIRE_SMES_INPUT) S.toggle_input() - if(SMES_WIRE_OUTPUT) + if(WIRE_SMES_OUTPUT) S.toggle_output() - if(SMES_WIRE_GROUNDING) + if(WIRE_SMES_GROUNDING) S.grounding = 0 - if(SMES_WIRE_FAILSAFES) + if(WIRE_SMES_FAILSAFES) if(S.safeties_enabled) S.safeties_enabled = 0 spawn(10) - S.safeties_enabled = 1 \ No newline at end of file + S.safeties_enabled = 1 + ..() \ No newline at end of file diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm index fe694d271a..97d3f98c84 100644 --- a/code/datums/wires/suit_storage_unit.dm +++ b/code/datums/wires/suit_storage_unit.dm @@ -1,47 +1,46 @@ /datum/wires/suit_storage_unit holder_type = /obj/machinery/suit_cycler wire_count = 3 + proper_name = "Suit storage unit" -var/const/SUIT_STORAGE_WIRE_ELECTRIFY = 1 -var/const/SUIT_STORAGE_WIRE_SAFETY = 2 -var/const/SUIT_STORAGE_WIRE_LOCKED = 4 +/datum/wires/suit_storage_unit/New(atom/_holder) + wires = list(WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_SAFETY) + return ..() -/datum/wires/suit_storage_unit/CanUse(var/mob/living/L) +/datum/wires/suit_storage_unit/interactable(mob/user) var/obj/machinery/suit_cycler/S = holder - if(!istype(L, /mob/living/silicon)) - if(S.electrified) - if(S.shock(L, 100)) - return 0 + if(iscarbon(user) && S.Adjacent(user) && S.electrified) + return !S.shock(user, 100) if(S.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/suit_storage_unit/GetInteractWindow() - var/obj/machinery/suit_cycler/S = holder - . += ..() - . += show_hint(0x1, S.electrified, "The orange light is off.", "The orange light is on.") - . += show_hint(0x2, S.safeties, "The red light is off.", "The red light is blinking.") - . += show_hint(0x4, S.locked, "The yellow light is on.", "The yellow light is off.") +/datum/wires/suit_storage_unit/get_status() + . = ..() + var/obj/machinery/suit_cycler/A = holder + . += "The orange light is [A.electrified ? "off" : "on"]." + . += "The red light is [A.safeties ? "off" : "blinking"]." + . += "The yellow light is [A.locked ? "on" : "off"]." -/datum/wires/suit_storage_unit/UpdatePulsed(var/index) +/datum/wires/suit_storage_unit/on_pulse(wire) var/obj/machinery/suit_cycler/S = holder - switch(index) - if(SUIT_STORAGE_WIRE_SAFETY) + switch(wire) + if(WIRE_SAFETY) S.safeties = !S.safeties - if(SUIT_STORAGE_WIRE_ELECTRIFY) + if(WIRE_ELECTRIFY) S.electrified = 30 - if(SUIT_STORAGE_WIRE_LOCKED) + if(WIRE_IDSCAN) S.locked = !S.locked -/datum/wires/suit_storage_unit/UpdateCut(var/index, var/mended) +/datum/wires/suit_storage_unit/on_cut(wire, mend) var/obj/machinery/suit_cycler/S = holder - switch(index) - if(SUIT_STORAGE_WIRE_SAFETY) - S.safeties = mended - if(SUIT_STORAGE_WIRE_LOCKED) - S.locked = mended - if(SUIT_STORAGE_WIRE_ELECTRIFY) - if(mended) + switch(wire) + if(WIRE_SAFETY) + S.safeties = mend + if(WIRE_IDSCAN) + S.locked = mend + if(WIRE_ELECTRIFY) + if(mend) S.electrified = 0 else S.electrified = -1 diff --git a/code/datums/wires/tesla_coil.dm b/code/datums/wires/tesla_coil.dm index f176b8f139..30f15539b7 100644 --- a/code/datums/wires/tesla_coil.dm +++ b/code/datums/wires/tesla_coil.dm @@ -1,18 +1,21 @@ /datum/wires/tesla_coil wire_count = 1 holder_type = /obj/machinery/power/tesla_coil + proper_name = "Tesla coil" -var/const/WIRE_ZAP = 1 +/datum/wires/tesla_coil/New(atom/_holder) + wires = list(WIRE_TESLACOIL_ZAP) + return ..() -/datum/wires/tesla_coil/CanUse(mob/living/L) +/datum/wires/tesla_coil/interactable(mob/user) var/obj/machinery/power/tesla_coil/T = holder if(T && T.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/tesla_coil/UpdatePulsed(index) +/datum/wires/tesla_coil/on_pulse(wire) var/obj/machinery/power/tesla_coil/T = holder - switch(index) - if(WIRE_ZAP) + switch(wire) + if(WIRE_TESLACOIL_ZAP) T.zap() ..() diff --git a/code/datums/wires/vending.dm b/code/datums/wires/vending.dm index 61aadf4b1b..33dc26f241 100644 --- a/code/datums/wires/vending.dm +++ b/code/datums/wires/vending.dm @@ -1,49 +1,53 @@ /datum/wires/vending holder_type = /obj/machinery/vending wire_count = 4 + proper_name = "Vending machine" -var/const/VENDING_WIRE_THROW = 1 -var/const/VENDING_WIRE_CONTRABAND = 2 -var/const/VENDING_WIRE_ELECTRIFY = 4 -var/const/VENDING_WIRE_IDSCAN = 8 +/datum/wires/vending/New(atom/_holder) + wires = list(WIRE_THROW_ITEM, WIRE_IDSCAN, WIRE_ELECTRIFY, WIRE_CONTRABAND) + return ..() -/datum/wires/vending/CanUse(var/mob/living/L) +/datum/wires/vending/interactable(mob/user) var/obj/machinery/vending/V = holder + if(iscarbon(user) && V.seconds_electrified && V.shock(user, 100)) + return FALSE if(V.panel_open) - return 1 - return 0 + return TRUE + return FALSE -/datum/wires/vending/GetInteractWindow() +/datum/wires/vending/get_status() var/obj/machinery/vending/V = holder - . += ..() - . += show_hint(0x1, V.seconds_electrified, "The orange light is off.", "The orange light is on.") - . += show_hint(0x2, V.shoot_inventory, "The red light is off.", "The red light is blinking.") - . += show_hint(0x4, V.categories & CAT_HIDDEN, "A green light is on.", "A green light is off.") - . += show_hint(0x8, V.scan_id, "A purple light is on.", "A yellow light is on.") + . = ..() + . += "The orange light is [V.seconds_electrified ? "on" : "off"]." + . += "The red light is [V.shoot_inventory ? "off" : "blinking"]." + . += "The green light is [(V.categories & CAT_HIDDEN) ? "on" : "off"]." + . += "A [V.scan_id ? "purple" : "yellow"] light is on." -/datum/wires/vending/UpdatePulsed(var/index) +/datum/wires/vending/on_pulse(wire) var/obj/machinery/vending/V = holder - switch(index) - if(VENDING_WIRE_THROW) + switch(wire) + if(WIRE_THROW_ITEM) V.shoot_inventory = !V.shoot_inventory - if(VENDING_WIRE_CONTRABAND) + if(WIRE_CONTRABAND) V.categories ^= CAT_HIDDEN - if(VENDING_WIRE_ELECTRIFY) + if(WIRE_ELECTRIFY) V.seconds_electrified = 30 - if(VENDING_WIRE_IDSCAN) + if(WIRE_IDSCAN) V.scan_id = !V.scan_id + ..() -/datum/wires/vending/UpdateCut(var/index, var/mended) +/datum/wires/vending/on_cut(wire, mend) var/obj/machinery/vending/V = holder - switch(index) - if(VENDING_WIRE_THROW) - V.shoot_inventory = !mended - if(VENDING_WIRE_CONTRABAND) + switch(wire) + if(WIRE_THROW_ITEM) + V.shoot_inventory = !mend + if(WIRE_CONTRABAND) V.categories &= ~CAT_HIDDEN - if(VENDING_WIRE_ELECTRIFY) - if(mended) + if(WIRE_ELECTRIFY) + if(mend) V.seconds_electrified = 0 else V.seconds_electrified = -1 - if(VENDING_WIRE_IDSCAN) + if(WIRE_IDSCAN) V.scan_id = 1 + ..() \ No newline at end of file diff --git a/code/datums/wires/wires.dm b/code/datums/wires/wires.dm index 645d7cc043..d37fbff0fe 100644 --- a/code/datums/wires/wires.dm +++ b/code/datums/wires/wires.dm @@ -1,340 +1,460 @@ -// Wire datums. Created by Giacomand. -// Was created to replace a horrible case of copy and pasted code with no care for maintability. -// Goodbye Door wires, Cyborg wires, Vending Machine wires, Autolathe wires -// Protolathe wires, APC wires and Camera wires! - -#define MAX_FLAG 65535 - -var/list/same_wires = list() -// 14 colours, if you're adding more than 14 wires then add more colours here -var/list/wireColours = list("red", "blue", "green", "darkred", "orange", "brown", "gold", "gray", "cyan", "navy", "purple", "pink", "black", "yellow") /datum/wires + /// TRUE if the wires will be different every time a new wire datum is created. + var/randomize = FALSE + /// The atom the wires belong too. For example: an airlock. + var/atom/holder + /// The holder type; used to make sure that the holder is the correct type. + var/holder_type + /// The display name for the TGUI window. For example, given the var is "APC"... + /// When the TGUI window is opened, "wires" will be appended to it's title, and it would become "APC wires". + var/proper_name = "Unknown" + /// The total number of wires that our holder atom has. + var/wire_count = NONE + /// A list of all wires. For a list of valid wires defines that can go here, see `code/__DEFINES/wires.dm` + var/list/wires + /// A list of all cut wires. The same values that can go into `wires` will get added and removed from this list. + var/list/cut_wires + /// An associative list with the wire color as the key, and the wire define as the value. + var/list/colors + /// An associative list of signalers attached to the wires. The wire color is the key, and the signaler object reference is the value. + var/list/assemblies - var/random = 0 // Will the wires be different for every single instance. - var/atom/holder = null // The holder - var/holder_type = null // The holder type; used to make sure that the holder is the correct type. - var/wire_count = 0 // Max is 16 - var/wires_status = 0 // BITFLAG OF WIRES - - var/hint_states = 0 // BITFLAG OF HINT STATES (For tracking if they changed for bolding in UI) - var/hint_states_initialized = FALSE // False until first time window is rendered. - - var/list/wires = list() - var/list/signallers = list() - - var/table_options = " align='center'" - var/row_options1 = " width='80px'" - var/row_options2 = " width='260px'" - var/window_x = 370 - var/window_y = 470 - -// Note: Its assumed states are boolean. If you ever have a multi-state hint, you must implement that yourself. -/datum/wires/proc/show_hint(flag, current_state, true_text, false_text) - var/state_changed = FALSE - if(hint_states_initialized) - if(!(hint_states & flag) != !current_state) // NOT-ing to convert to boolean - state_changed = TRUE - if(current_state) - hint_states |= flag - return state_changed ? "
[true_text]" : "
[true_text]" - else - hint_states &= ~flag - return state_changed ? "
[false_text]" : "
[false_text]" - -/datum/wires/New(var/atom/holder) +/datum/wires/New(atom/_holder) ..() - src.holder = holder - if(!istype(holder, holder_type)) + if(!istype(_holder, holder_type)) CRASH("Our holder is null/the wrong type!") + + holder = _holder + cut_wires = list() + colors = list() + assemblies = list() + + // Add in the appropriate amount of dud wires. + var/wire_len = length(wires) + if(wire_len < wire_count) // If the amount of "real" wires is less than the total we're suppose to have... + add_duds(wire_count - wire_len) // Add in the appropriate amount of duds to reach `wire_count`. + + // If the randomize is true, we need to generate a new set of wires and ignore any wire color directories. + if(randomize) + randomize() return - // Generate new wires - if(random) - GenerateWires() - // Get the same wires + if(!GLOB.wire_color_directory[holder_type]) + randomize() + GLOB.wire_color_directory[holder_type] = colors else - // We don't have any wires to copy yet, generate some and then copy it. - if(!same_wires[holder_type]) - GenerateWires() - same_wires[holder_type] = src.wires.Copy() - else - var/list/wires = same_wires[holder_type] - src.wires = wires // Reference the wires list. + colors = GLOB.wire_color_directory[holder_type] /datum/wires/Destroy() holder = null - signallers.Cut() + for(var/color in colors) + detach_assembly(color) return ..() -/datum/wires/proc/GenerateWires() - var/list/colours_to_pick = wireColours.Copy() // Get a copy, not a reference. - var/list/indexes_to_pick = list() - //Generate our indexes - for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i) - indexes_to_pick += i - colours_to_pick.len = wire_count // Downsize it to our specifications. +/** + * Randomly generates a new set of wires. and corresponding colors from the given pool. Assigns the information as an associative list, to `colors`. + * + * In the `colors` list, the name of the color is the key, and the wire is the value. + * For example: `colors["red"] = WIRE_ELECTRIFY`. This will look like `list("red" = WIRE_ELECTRIFY)` internally. + */ +/datum/wires/proc/randomize() + var/static/list/possible_colors = list("red", "blue", "green", "darkmagenta", "orange", "brown", "gold", "grey", "cyan", "white", "purple", "pink", "darkslategrey", "yellow") + var/list/my_possible_colors = possible_colors.Copy() - while(colours_to_pick.len && indexes_to_pick.len) - // Pick and remove a colour - var/colour = pick_n_take(colours_to_pick) + for(var/wire in shuffle(wires)) + colors[pick_n_take(my_possible_colors)] = wire - // Pick and remove an index - var/index = pick_n_take(indexes_to_pick) +/** + * Proc called when the user attempts to interact with wires UI. + * + * Checks if the user exists, is a mob, the wires are attached to something (`holder`) and makes sure `interactable(user)` returns TRUE. + * If all the checks succeed, open the TGUI interface for the user. + * + * Arugments: + * * user - the mob trying to interact with the wires. + */ +/datum/wires/proc/Interact(mob/user) + if(user && istype(user) && holder && interactable(user)) + tgui_interact(user) - src.wires[colour] = index - //wires = shuffle(wires) +/** + * Base proc, intended to be overriden. Wire datum specific checks you want to run before the TGUI is shown to the user should go here. + */ +/datum/wires/proc/interactable(mob/user) + return TRUE +/// Users will be interacting with our holder object and not the wire datum directly, therefore we need to return the holder. +/datum/wires/tgui_host() + return holder -/datum/wires/proc/Interact(var/mob/living/user) +/datum/wires/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Wires", "[proper_name] wires") + ui.open() - var/html = null - if(holder && CanUse(user)) - html = GetInteractWindow() - hint_states_initialized = TRUE - if(html) - user.set_machine(holder) - else - user.unset_machine() - // No content means no window. - user << browse(null, "window=wires") +/datum/wires/tgui_state(mob/user) + return GLOB.tgui_physical_state + +/datum/wires/tgui_data(mob/user) + var/list/data = list() + var/list/replace_colors + + if(isliving(user)) + var/mob/living/L = user + for(var/datum/modifier/M in L.modifiers) + if(!isnull(M.wire_colors_replace)) + replace_colors = M.wire_colors_replace + break + + var/list/wires_list = list() + + for(var/color in colors) + var/replaced_color = color + var/color_name = color + + if(color in replace_colors) // If this color is one that needs to be replaced using the colorblindness list. + replaced_color = replace_colors[color] + if(replaced_color in LIST_COLOR_RENAME) // If its an ugly written color name like "darkolivegreen", rename it to something like "dark green". + color_name = LIST_COLOR_RENAME[replaced_color] + else + color_name = replaced_color // Else just keep the normal color name + + if(color in LIST_COLOR_RENAME) + color_name = LIST_COLOR_RENAME[color] + + wires_list += list(list( + "seen_color" = replaced_color, // The color of the wire that the mob will see. This will be the same as `color` if the user is NOT colorblind. + "color_name" = color_name, // The wire's name. This will be the same as `color` if the user is NOT colorblind. + "color" = color, // The "real" color of the wire. No replacements. + "wire" = can_see_wire_info(user) && !is_dud_color(color) ? get_wire(color) : null, // Wire define information like "Contraband" or "Door Bolts". + "cut" = is_color_cut(color), // Whether the wire is cut or not. Used to display "cut" or "mend". + "attached" = is_attached(color) // Whether or not a signaler is attached to this wire. + )) + data["wires"] = wires_list + + // Get the information shown at the bottom of wire TGUI window, such as "The red light is blinking", etc. + // If the user is colorblind, we need to replace these colors as well. + var/list/status = get_status() + + if(replace_colors) + var/i + for(i in 1 to length(status)) + for(var/color in replace_colors) + var/new_color = replace_colors[color] + if(new_color in LIST_COLOR_RENAME) + new_color = LIST_COLOR_RENAME[new_color] + if(findtext(status[i], color)) + status[i] = replacetext(status[i], color, new_color) + break + + data["status"] = status + return data + +/datum/wires/tgui_act(action, list/params) + if(..()) return - var/datum/browser/popup = new(user, "wires", holder.name, window_x, window_y) - popup.set_content(html) - popup.set_title_image(user.browse_rsc_icon(holder.icon, holder.icon_state)) - popup.open() - -/datum/wires/proc/GetInteractWindow() - var/html = "
" - html += "

Exposed Wires

" - html += "" - - for(var/colour in wires) - html += "" - html += "[capitalize(colour)]" - html += "" - html += "[IsColourCut(colour) ? "Mend" : "Cut"]" - html += " Pulse" - html += " [IsAttached(colour) ? "Detach" : "Attach"] Signaller" - html += "" - html += "
" - - if (random) - html += "\The [holder] appears to have tamper-resistant electronics installed.

" //maybe this could be more generic? - - return html - -/datum/wires/Topic(href, href_list) - ..() - if(in_range(holder, usr) && isliving(usr)) - - var/mob/living/L = usr - if(CanUse(L) && href_list["action"]) - holder.add_hiddenprint(L) - - var/list/items = L.get_all_held_items() - var/success = FALSE - - if(href_list["cut"]) // Toggles the cut/mend status - for(var/obj/item/I in items) // Paranoid about someone somehow grabbing a non-/obj/item, lets play it safe. - if(I.is_wirecutter()) - var/colour = href_list["cut"] - CutWireColour(colour) - playsound(holder, I.usesound, 20, 1) - success = TRUE - break - if(!success) - to_chat(L, span("warning", "You need wirecutters!")) - - else if(href_list["pulse"]) - for(var/obj/item/I in items) - if(I.is_multitool()) - var/colour = href_list["pulse"] - PulseColour(colour) - playsound(holder, 'sound/weapons/empty.ogg', 20, 1) - success = TRUE - break - if(!success) - to_chat(L, span("warning", "You need a multitool!")) - - else if(href_list["attach"]) - var/colour = href_list["attach"] - // Detach - if(IsAttached(colour)) - var/obj/item/O = Detach(colour) - if(O) - L.put_in_hands(O) - - // Attach - else - var/obj/item/device/assembly/signaler/S = L.is_holding_item_of_type(/obj/item/device/assembly/signaler) - if(istype(S)) - L.drop_from_inventory(S) - Attach(colour, S) - else - to_chat(L, span("warning", "You need a remote signaller!")) - - - - - // Update Window - Interact(usr) - - if(href_list["close"]) - usr << browse(null, "window=wires") - usr.unset_machine(holder) - -// -// Overridable Procs -// - -// Called when wires cut/mended. -/datum/wires/proc/UpdateCut(var/index, var/mended) - return - -// Called when wire pulsed. Add code here. -/datum/wires/proc/UpdatePulsed(var/index) - return - -/datum/wires/proc/CanUse(var/mob/living/L) - return 1 - -// Example of use: -/* - -var/const/BOLTED= 1 -var/const/SHOCKED = 2 -var/const/SAFETY = 4 -var/const/POWER = 8 - -/datum/wires/door/UpdateCut(var/index, var/mended) - var/obj/machinery/door/airlock/A = holder - switch(index) - if(BOLTED) - if(!mended) - A.bolt() - if(SHOCKED) - A.shock() - if(SAFETY ) - A.safety() - -*/ - - -// -// Helper Procs -// - -/datum/wires/proc/PulseColour(var/colour) - PulseIndex(GetIndex(colour)) - -/datum/wires/proc/PulseIndex(var/index) - if(IsIndexCut(index)) + var/mob/user = usr + if(!interactable(user)) return - UpdatePulsed(index) -/datum/wires/proc/GetIndex(var/colour) - if(wires[colour]) - var/index = wires[colour] - return index + var/obj/item/I = user.get_active_hand() + var/color = lowertext(params["wire"]) + holder.add_hiddenprint(user) + + switch(action) + // Toggles the cut/mend status. + if("cut") + // if(!I.is_wirecutter() && !user.can_admin_interact()) + if(!istype(I) || !I.is_wirecutter()) + to_chat(user, "You need wirecutters!") + return + + playsound(holder, I.usesound, 20, 1) + cut_color(color) + return TRUE + + // Pulse a wire. + if("pulse") + // if(!I.is_multitool() && !user.can_admin_interact()) + if(!istype(I) || !I.is_multitool()) + to_chat(user, "You need a multitool!") + return + + playsound(holder, 'sound/weapons/empty.ogg', 20, 1) + pulse_color(color) + + // If they pulse the electrify wire, call interactable() and try to shock them. + if(get_wire(color) == WIRE_ELECTRIFY) + interactable(user) + + return TRUE + + // Attach a signaler to a wire. + if("attach") + if(is_attached(color)) + var/obj/item/O = detach_assembly(color) + if(O) + user.put_in_hands(O) + return TRUE + + if(!istype(I, /obj/item/device/assembly/signaler)) + to_chat(user, "You need a remote signaller!") + return + + if(user.unEquip(I)) + attach_assembly(color, I) + return TRUE + else + to_chat(user, "[I] is stuck to your hand!") + +/** + * Proc called to determine if the user can see wire define information, such as "Contraband", "Door Bolts", etc. + * + * If the user is an admin, or has a multitool which reveals wire information in their active hand, the proc returns TRUE. + * + * Arguments: + * * user - the mob who is interacting with the wires. + */ +/datum/wires/proc/can_see_wire_info(mob/user) + // TODO: Reimplement this if we ever get Advanced Admin Interaction. + // if(user.can_admin_interact()) + // return TRUE + var/obj/item/I = user.get_active_hand() + if(istype(I, /obj/item/device/multitool/alien)) + return TRUE + return FALSE + +/** + * Base proc, intended to be overwritten. Put wire information you'll see at the botton of the TGUI window here, such as "The red light is blinking". + */ +/datum/wires/proc/get_status() + return list() + +/** + * Clears the `colors` list, and randomizes it to a new set of color-to-wire relations. + */ +/datum/wires/proc/shuffle_wires() + colors.Cut() + randomize() + +/** + * Repairs all cut wires. + */ +/datum/wires/proc/repair() + cut_wires.Cut() + +/** + * Adds in dud wires, which do nothing when cut/pulsed. + * + * Arguments: + * * duds - the amount of dud wires to generate. + */ +/datum/wires/proc/add_duds(duds) + while(duds) + var/dud = WIRE_DUD_PREFIX + "[--duds]" + if(dud in wires) + continue + wires += dud + +/** + * Determines if the passed in wire is a dud or not. Returns TRUE if the wire is a dud, FALSE otherwise. + * + * Arugments: + * * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`. + */ +/datum/wires/proc/is_dud(wire) + return findtext(wire, WIRE_DUD_PREFIX, 1, length(WIRE_DUD_PREFIX) + 1) + +/** + * Returns TRUE if the wire that corresponds to the passed in color is a dud. FALSE otherwise. + * + * Arugments: + * * color - a wire color. + */ +/datum/wires/proc/is_dud_color(color) + return is_dud(get_wire(color)) + +/** + * Gets the wire associated with the color passed in. + * + * Arugments: + * * color - a wire color. + */ +/datum/wires/proc/get_wire(color) + return colors[color] + +/** + * Determines if the passed in wire is cut or not. Returns TRUE if it's cut, FALSE otherwise. + * + * Arugments: + * * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`. + */ +/datum/wires/proc/is_cut(wire) + return (wire in cut_wires) + +/** + * Determines if the wire associated with the passed in color, is cut or not. Returns TRUE if it's cut, FALSE otherwise. + * + * Arugments: + * * wire - a wire color. + */ +/datum/wires/proc/is_color_cut(color) + return is_cut(get_wire(color)) + +/** + * Determines if all of the wires are cut. Returns TRUE they're all cut, FALSE otherwise. + */ +/datum/wires/proc/is_all_cut() + return (length(cut_wires) == length(wires)) + +/** + * Cut or mend a wire. Calls `on_cut()`. + * + * Arugments: + * * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`. + */ +/datum/wires/proc/cut(wire) + if(is_cut(wire)) + cut_wires -= wire + on_cut(wire, mend = TRUE) else - CRASH("[colour] is not a key in wires.") + cut_wires += wire + on_cut(wire, mend = FALSE) -// -// Is Index/Colour Cut procs -// +/** + * Cut the wire which corresponds with the passed in color. + * + * Arugments: + * * color - a wire color. + */ +/datum/wires/proc/cut_color(color) + cut(get_wire(color)) -/datum/wires/proc/IsColourCut(var/colour) - var/index = GetIndex(colour) - return IsIndexCut(index) +/** + * Cuts a random wire. + */ +/datum/wires/proc/cut_random() + cut(wires[rand(1, length(wires))]) -/datum/wires/proc/IsIndexCut(var/index) - return (index & wires_status) +/** + * Cuts all wires. + */ +/datum/wires/proc/cut_all() + for(var/wire in wires) + cut(wire) -// -// Signaller Procs -// +/** + * Proc called when any wire is cut. + * + * Base proc, intended to be overriden. + * Place an behavior you want to happen when certain wires are cut, into this proc. + * + * Arugments: + * * wire - a wire define, NOT color. For example 'WIRE_ELECTRIFY'. + * * mend - TRUE if we're mending the wire. FALSE if we're cutting. + */ +/datum/wires/proc/on_cut(wire, mend = FALSE) + return -/datum/wires/proc/IsAttached(var/colour) - if(signallers[colour]) - return 1 - return 0 +/** + * Pulses the given wire. Calls `on_pulse()`. + * + * Arugments: + * * wire - a wire define, NOT a color. For example `WIRE_ELECTRIFY`. + */ +/datum/wires/proc/pulse(wire) + if(is_cut(wire)) + return + on_pulse(wire) -/datum/wires/proc/GetAttached(var/colour) - if(signallers[colour]) - return signallers[colour] +/** + * Pulses the wire associated with the given color. + * + * Arugments: + * * wire - a wire color. + */ +/datum/wires/proc/pulse_color(color) + pulse(get_wire(color)) + +/** + * Proc called when any wire is pulsed. + * + * Base proc, intended to be overriden. + * Place behavior you want to happen when certain wires are pulsed, into this proc. + * + * Arugments: + * * wire - a wire define, NOT color. For example 'WIRE_ELECTRIFY'. + */ +/datum/wires/proc/on_pulse(wire) + return + +/** + * Proc called when an attached signaler receives a signal. + * + * Searches through the `assemblies` list for the wire that the signaler is attached to. Pulses the wire when it's found. + * + * Arugments: + * * S - the attached signaler receiving the signal. + */ +/datum/wires/proc/pulse_assembly(obj/item/device/assembly/signaler/S) + for(var/color in assemblies) + if(S == assemblies[color]) + pulse_color(color) + return TRUE + +/** + * Proc called when a mob tries to attach a signaler to a wire. + * + * Makes sure that `S` is actually a signaler and that something is not already attached to the wire. + * Adds the signaler to the `assemblies` list as a value, with the `color` as a the key. + * + * Arguments: + * * color - the wire color. + * * S - the signaler that a mob is trying to attach. + */ +/datum/wires/proc/attach_assembly(color, obj/item/device/assembly/signaler/S) + if(S && istype(S) && !is_attached(color)) + assemblies[color] = S + S.forceMove(holder) + S.connected = src + return S + +/** + * Proc called when a mob tries to detach a signaler from a wire. + * + * First checks if there is a signaler on the wire. If so, removes the signaler, and clears it from `assemblies` list. + * + * Arguments: + * * color - the wire color. + */ +/datum/wires/proc/detach_assembly(color) + var/obj/item/device/assembly/signaler/S = get_attached(color) + if(S && istype(S)) + assemblies -= color + S.connected = null + S.forceMove(holder.drop_location()) + return S + +/** + * Gets the signaler attached to the given wire color, if there is one. + * + * Arguments: + * * color - the wire color. + */ +/datum/wires/proc/get_attached(color) + if(assemblies[color]) + return assemblies[color] return null -/datum/wires/proc/Attach(var/colour, var/obj/item/device/assembly/signaler/S) - if(colour && S) - if(!IsAttached(colour)) - signallers[colour] = S - S.loc = holder - S.connected = src - return S - -/datum/wires/proc/Detach(var/colour) - if(colour) - var/obj/item/device/assembly/signaler/S = GetAttached(colour) - if(S) - signallers -= colour - S.connected = null - S.loc = holder.loc - return S - - -/datum/wires/proc/Pulse(var/obj/item/device/assembly/signaler/S) - - for(var/colour in signallers) - if(S == signallers[colour]) - PulseColour(colour) - break - - -// -// Cut Wire Colour/Index procs -// - -/datum/wires/proc/CutWireColour(var/colour) - var/index = GetIndex(colour) - CutWireIndex(index) - -/datum/wires/proc/CutWireIndex(var/index) - if(IsIndexCut(index)) - wires_status &= ~index - UpdateCut(index, 1) - else - wires_status |= index - UpdateCut(index, 0) - -/datum/wires/proc/RandomCut() - var/r = rand(1, wires.len) - CutWireIndex(r) - -/datum/wires/proc/RandomCutAll(var/probability = 10) - for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i) - if(prob(probability)) - CutWireIndex(i) - -/datum/wires/proc/CutAll() - for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i) - CutWireIndex(i) - -/datum/wires/proc/IsAllCut() - if(wires_status == (1 << wire_count) - 1) - return 1 - return 0 - -/datum/wires/proc/MendAll() - for(var/i = 1; i < MAX_FLAG && i < (1 << wire_count); i += i) - if(IsIndexCut(i)) - CutWireIndex(i) - -// -//Shuffle and Mend -// - -/datum/wires/proc/Shuffle() - wires_status = 0 - GenerateWires() +/** + * Checks if the given wire has a signaler on it. + * + * Arguments: + * * color - the wire color. + */ +/datum/wires/proc/is_attached(color) + if(assemblies[color]) + return TRUE diff --git a/code/game/area/Space Station 13 areas.dm b/code/game/area/Space Station 13 areas.dm index 1b71535bc4..0a851bed0b 100755 --- a/code/game/area/Space Station 13 areas.dm +++ b/code/game/area/Space Station 13 areas.dm @@ -32,6 +32,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station ambience = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/main.ogg','sound/music/traitor.ogg','sound/ambience/space/space_serithi.ogg','sound/music/freefallin.mid') base_turf = /turf/space ambience = AMBIENCE_SPACE + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/space/atmosalert() return @@ -69,7 +70,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/shuttle requires_power = 0 - flags = RAD_SHIELDED + flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT sound_env = SMALL_ENCLOSED base_turf = /turf/space forbid_events = TRUE @@ -210,6 +211,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Alien base" icon_state = "yellow" requires_power = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT // CENTCOM @@ -218,6 +220,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "centcom" requires_power = 0 dynamic_lighting = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/centcom/control name = "\improper CentCom Control" @@ -295,6 +298,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 0 dynamic_lighting = 0 ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/syndicate_mothership/control name = "\improper Mercenary Control Room" @@ -311,6 +315,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station icon_state = "asteroid" requires_power = 0 sound_env = ASTEROID + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/asteroid/cave // -- TLE name = "\improper Moon - Underground" @@ -334,6 +339,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 0 dynamic_lighting = 0 sound_env = ARENA + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/tdome/tdome1 name = "\improper Thunderdome (Team 1)" @@ -361,6 +367,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station flags = RAD_SHIELDED base_turf = /turf/space ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/syndicate_station/start name = "\improper Mercenary Forward Operating Base" @@ -416,6 +423,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 0 dynamic_lighting = 0 ambience = AMBIENCE_OTHERWORLDLY + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/skipjack_station name = "\improper Skipjack" @@ -423,6 +431,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station requires_power = 0 base_turf = /turf/space ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/skipjack_station/start name = "\improper Skipjack" @@ -457,6 +466,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Prison Station" icon_state = "brig" ambience = AMBIENCE_HIGHSEC + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/prison/arrival_airlock name = "\improper Prison Station Airlock" @@ -642,6 +652,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/maintenance/disposal name = "Waste Disposal" icon_state = "disposal" + flags = AREA_FLAG_IS_NOT_PERSISTENT //If trash items got this far, they can be safely deleted. /area/maintenance/engineering name = "Engineering Maintenance" @@ -955,10 +966,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/heads/hop name = "\improper Command - HoP's Office" icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/crew_quarters/heads/hor name = "\improper Research - RD's Office" icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/crew_quarters/heads/chief name = "\improper Engineering - CE's Office" @@ -971,6 +984,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/crew_quarters/heads/cmo name = "\improper Medbay - CMO's Office" icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/crew_quarters/courtroom name = "\improper Courtroom" @@ -1297,6 +1311,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station dynamic_lighting = 0 sound_env = LARGE_ENCLOSED forbid_events = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/holodeck/alphadeck name = "\improper Holodeck Alpha" @@ -1658,10 +1673,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical/surgery name = "\improper Operating Theatre 1" icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT //This WOULD become a filth pit /area/medical/surgery2 name = "\improper Operating Theatre 2" icon_state = "surgery" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/surgeryobs name = "\improper Operation Observation Room" @@ -1698,6 +1715,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/medical/sleeper name = "\improper Emergency Treatment Centre" icon_state = "exam_room" + flags = AREA_FLAG_IS_NOT_PERSISTENT //Trust me. /area/medical/first_aid_station_starboard name = "\improper Starboard First-Aid Station" @@ -1912,6 +1930,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/quartermaster/delivery name = "\improper Cargo - Delivery Office" icon_state = "quart" + flags = AREA_FLAG_IS_NOT_PERSISTENT //So trash doesn't pile up too hard. /area/quartermaster/miningdock name = "\improper Cargo Mining Dock" @@ -1951,6 +1970,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/rnd/rdoffice name = "\improper Research Director's Office" icon_state = "head_quarters" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/rnd/supermatter name = "\improper Supermatter Lab" @@ -2082,6 +2102,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Derelict Station" icon_state = "storage" ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/derelict/hallway/primary name = "\improper Derelict Primary Hallway" @@ -2182,6 +2203,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/constructionsite name = "\improper Construction Site" icon_state = "storage" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/constructionsite/storage name = "\improper Construction Site Storage Area" @@ -2367,6 +2389,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station /area/wreck ambience = AMBIENCE_RUINS + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/wreck/ai name = "\improper AI Chamber" @@ -2443,6 +2466,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station name = "\improper Strange Location" icon_state = "away" ambience = AMBIENCE_FOREBODING + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/awaymission/gateway name = "\improper Gateway" diff --git a/code/game/area/asteroid_areas.dm b/code/game/area/asteroid_areas.dm index 3d15396046..e43b024ed1 100644 --- a/code/game/area/asteroid_areas.dm +++ b/code/game/area/asteroid_areas.dm @@ -3,6 +3,7 @@ /area/mine icon_state = "mining" sound_env = ASTEROID + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/mine/explored name = "Mine" @@ -27,21 +28,27 @@ /area/outpost/mining_north name = "North Mining Outpost" icon_state = "outpost_mine_north" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/outpost/mining_west name = "West Mining Outpost" icon_state = "outpost_mine_west" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/outpost/abandoned name = "Abandoned Outpost" icon_state = "dark" + flags = AREA_FLAG_IS_NOT_PERSISTENT + //lower level hallway /area/outpost/hall name = "Lower Level Hall" icon_state = "dark" + // Main mining outpost /area/outpost/mining_main icon_state = "outpost_mine_main" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/outpost/mining_main/airlock name = "Mining Outpost Airlock" @@ -93,6 +100,7 @@ // Engineering Outpost /area/outpost/engineering icon_state = "outpost_engine" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/outpost/engineering/hallway name = "Engineering Outpost Hallway" @@ -166,6 +174,7 @@ // Research Outpost /area/outpost/research icon_state = "outpost_research" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/outpost/research/hallway name = "Research Outpost Hallway" diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index 01f5e687d8..09b226a076 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -1,6 +1,6 @@ /atom/movable layer = OBJ_LAYER - appearance_flags = TILE_BOUND|PIXEL_SCALE + appearance_flags = TILE_BOUND|PIXEL_SCALE|KEEP_TOGETHER glide_size = 8 var/last_move = null //The direction the atom last moved var/anchored = 0 @@ -24,7 +24,7 @@ var/datum/riding/riding_datum = null var/does_spin = TRUE // Does the atom spin when thrown (of course it does :P) var/movement_type = NONE - + var/cloaked = FALSE //If we're cloaked or not var/image/cloaked_selfimage //The image we use for our client to let them see where we are @@ -107,7 +107,7 @@ glide_for(movetime) loc = newloc . = TRUE - + // So objects can be informed of z-level changes if (old_z != dest_z) onTransitZ(old_z, dest_z) @@ -133,7 +133,7 @@ var/atom/movable/thing = i // We don't call parent so we are calling this for byond thing.Crossed(src) - + // We're a multi-tile object (multiple locs) else if(. && newloc) . = doMove(newloc) @@ -282,7 +282,7 @@ glide_for(movetime) last_move = isnull(direction) ? 0 : direction loc = destination - + // Unset this in case it was set in some other proc. We're no longer moving diagonally for sure. moving_diagonally = 0 @@ -294,27 +294,27 @@ // If it's not the same area, Exited() it if(old_area && old_area != destarea) old_area.Exited(src, destination) - + // Uncross everything where we left for(var/i in oldloc) var/atom/movable/AM = i if(AM == src) continue AM.Uncrossed(src) - + // Information about turf and z-levels for source and dest collected var/turf/oldturf = get_turf(oldloc) var/turf/destturf = get_turf(destination) var/old_z = (oldturf ? oldturf.z : null) var/dest_z = (destturf ? destturf.z : null) - + // So objects can be informed of z-level changes if (old_z != dest_z) onTransitZ(old_z, dest_z) - + // Destination atom Entered destination.Entered(src, oldloc) - + // Entered() the new area if it's not the same area if(destarea && old_area != destarea) destarea.Entered(src, oldloc) @@ -366,7 +366,7 @@ glide_size = initial(glide_size) else glide_size = initial(glide_size) - + ///////////////////////////////////////////////////////////////// //called when src is thrown into hit_atom @@ -623,7 +623,7 @@ /atom/movable/proc/cloak_animation(var/length = 1 SECOND) //Save these var/initial_alpha = alpha - + //Animate alpha fade animate(src, alpha = 0, time = length) diff --git a/code/game/gamemodes/changeling/changeling_powers.dm b/code/game/gamemodes/changeling/changeling_powers.dm index 93d9ff4289..b03b986bca 100644 --- a/code/game/gamemodes/changeling/changeling_powers.dm +++ b/code/game/gamemodes/changeling/changeling_powers.dm @@ -182,20 +182,20 @@ turf/proc/AdjacentTurfsRangedSting() add = 0 if(add && TurfBlockedNonWindow(t)) add = 0 - for(var/obj/O in t) - if(!O.density) + for(var/obj/O in t) + if(O.density) + add = 0 + break + if(istype(O, /obj/machinery/door)) + //not sure why this doesn't fire on LinkBlocked() + add = 0 + break + for(var/type in allowed) + if (istype(O, type)) add = 1 break - if(istype(O, /obj/machinery/door)) - //not sure why this doesn't fire on LinkBlocked() - add = 0 - break - for(var/type in allowed) - if (istype(O, type)) - add = 1 - break - if(!add) - break + if(!add) + break if(add) L.Add(t) return L diff --git a/code/game/gamemodes/cult/cultify/obj.dm b/code/game/gamemodes/cult/cultify/obj.dm index d7c0cff5ec..3ac41e0047 100644 --- a/code/game/gamemodes/cult/cultify/obj.dm +++ b/code/game/gamemodes/cult/cultify/obj.dm @@ -50,7 +50,7 @@ src.invisibility = INVISIBILITY_MAXIMUM density = 0 -/obj/machinery/cooker/cultify() +/obj/machinery/appliance/cooker/cultify() new /obj/structure/cult/talisman(loc) qdel(src) diff --git a/code/game/jobs/access_datum_vr.dm b/code/game/jobs/access_datum_vr.dm index 506666fdfd..16038248d0 100644 --- a/code/game/jobs/access_datum_vr.dm +++ b/code/game/jobs/access_datum_vr.dm @@ -16,4 +16,15 @@ var/const/access_pilot = 67 id = access_talon desc = "Talon" access_type = ACCESS_TYPE_PRIVATE - \ No newline at end of file + +/var/const/access_xenobotany = 77 +/datum/access/xenobotany + id = access_xenobotany + desc = "Xenobotany Garden" + region = ACCESS_REGION_RESEARCH + +/var/const/access_entertainment = 72 +/datum/access/entertainment + id = access_entertainment + desc = "Entertainment Backstage" + region = ACCESS_REGION_GENERAL \ No newline at end of file diff --git a/code/game/jobs/job/civilian.dm b/code/game/jobs/job/civilian.dm index b48ee239bf..f84e191b54 100644 --- a/code/game/jobs/job/civilian.dm +++ b/code/game/jobs/job/civilian.dm @@ -65,7 +65,7 @@ department_flag = CIVILIAN faction = "Station" total_positions = 2 - spawn_positions = 1 + spawn_positions = 2 supervisors = "the Head of Personnel" selection_color = "#515151" access = list(access_hydroponics, access_bar, access_kitchen) diff --git a/code/game/jobs/job/civilian_vr.dm b/code/game/jobs/job/civilian_vr.dm index dae1ffbfce..4529c7c79a 100644 --- a/code/game/jobs/job/civilian_vr.dm +++ b/code/game/jobs/job/civilian_vr.dm @@ -57,3 +57,39 @@ /datum/job/chaplain pto_type = PTO_CIVILIAN + + +////////////////////////////////// +// Entertainer +////////////////////////////////// + +/datum/job/entertainer + title = "Entertainer" + flag = ENTERTAINER + departments = list(DEPARTMENT_CIVILIAN) + department_flag = CIVILIAN + faction = "Station" + total_positions = 4 + spawn_positions = 4 + supervisors = "the Head of Personnel" + selection_color = "#515151" + access = list(access_entertainment) + minimal_access = list(access_entertainment) + pto_type = PTO_CIVILIAN + + outfit_type = /decl/hierarchy/outfit/job/assistant + job_description = "An entertainer does just that, entertains! Put on plays, play music, sing songs, tell stories, or read your favorite fanfic." + alt_titles = list("Performer" = /datum/alt_title/performer, "Musician" = /datum/alt_title/musician, "Stagehand" = /datum/alt_title/stagehand) + +// Entertainer Alt Titles +/datum/alt_title/performer + title = "Performer" + title_blurb = "A Performer is someone who performs! Acting, dancing, wrestling, etc!" + +/datum/alt_title/musician + title = "Musician" + title_blurb = "A Musician is someone who makes music! Singing, playing instruments, slam poetry, it's your call!" + +/datum/alt_title/stagehand + title = "Stagehand" + title_blurb = "A Stagehand typically performs everything the rest of the entertainers don't. Operate lights, shutters, windows, or narrate through your voicebox!" \ No newline at end of file diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 71159d5b81..1154d487bc 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -39,7 +39,7 @@ // Research Director Alt Titles /datum/alt_title/research_supervisor title = "Research Supervisor" - + ////////////////////////////////// // Scientist ////////////////////////////////// @@ -105,13 +105,15 @@ outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist job_description = "A Xenobiologist studies esoteric lifeforms, usually in the relative safety of their lab. They attempt to find ways to benefit \ from the byproducts of these lifeforms, and their main subject at present is the Giant Slime." +/*VR edit start alt_titles = list("Xenobotanist" = /datum/alt_title/xenobot) -// Xenibiologist Alt Titles + Xenibiologist Alt Titles /datum/alt_title/xenobot title = "Xenobotanist" title_blurb = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \ is both safe and beneficial to the station, they may choose to introduce it to the rest of the crew." +VR edit end*/ ////////////////////////////////// // Roboticist diff --git a/code/game/jobs/job/science_vr.dm b/code/game/jobs/job/science_vr.dm index c1dd0d10b6..62f7b6eadf 100644 --- a/code/game/jobs/job/science_vr.dm +++ b/code/game/jobs/job/science_vr.dm @@ -31,4 +31,28 @@ /datum/job/roboticist total_positions = 3 - pto_type = PTO_SCIENCE \ No newline at end of file + pto_type = PTO_SCIENCE + +////////////////////////////////// +// Xenobotanist +////////////////////////////////// +/datum/job/xenobotanist + title = "Xenobotanist" + flag = XENOBOTANIST + departments = list(DEPARTMENT_RESEARCH) + department_flag = MEDSCI + faction = "Station" + total_positions = 2 + spawn_positions = 2 + supervisors = "the Research Director" + selection_color = "#633D63" + economic_modifier = 7 + access = list(access_robotics, access_tox, access_tox_storage, access_research, access_xenobotany, access_hydroponics) + minimal_access = list(access_research, access_xenobotany, access_hydroponics, access_tox_storage) + pto_type = PTO_SCIENCE + + minimal_player_age = 14 + + outfit_type = /decl/hierarchy/outfit/job/science/xenobiologist + job_description = "A Xenobotanist grows and cares for a variety of abnormal, custom made, and frequently dangerous plant life. When the products of these plants \ + are both safe and beneficial to the station, they may choose to introduce it to the rest of the crew." \ No newline at end of file diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm index 7a68691a56..c6f80c39a5 100644 --- a/code/game/jobs/job/special_vr.dm +++ b/code/game/jobs/job/special_vr.dm @@ -84,10 +84,10 @@ supervisors = "the spirit of laughter" selection_color = "#515151" economic_modifier = 1 - access = list() - minimal_access = list() + access = list(access_entertainment) + minimal_access = list(access_entertainment) job_description = "A Clown is there to entertain the crew and keep high morale using various harmless pranks and ridiculous jokes!" - alt_titles = list("Clown" = /datum/alt_title/clown, "Comedian" = /datum/alt_title/comedian, "Jester" = /datum/alt_title/jester) + alt_titles = list("Clown" = /datum/alt_title/clown, "Jester" = /datum/alt_title/jester) whitelist_only = 1 latejoin_only = 1 outfit_type = /decl/hierarchy/outfit/job/clown @@ -96,9 +96,6 @@ /datum/alt_title/clown title = "Clown" -/datum/alt_title/comedian - title = "Comedian" - /datum/alt_title/jester title = "Jester" @@ -119,10 +116,10 @@ supervisors = "the spirit of performance" selection_color = "#515151" economic_modifier = 1 - access = list() - minimal_access = list() + access = list(access_entertainment) + minimal_access = list(access_entertainment) job_description = "A Mime is there to entertain the crew and keep high morale using unbelievable performances and acting skills!" - alt_titles = list("Mime" = /datum/alt_title/mime, "Performer" = /datum/alt_title/performer, "Interpretive Dancer" = /datum/alt_title/interpretive_dancer) + alt_titles = list("Mime" = /datum/alt_title/mime, "Interpretive Dancer" = /datum/alt_title/interpretive_dancer) whitelist_only = 1 latejoin_only = 1 outfit_type = /decl/hierarchy/outfit/job/mime @@ -131,9 +128,6 @@ /datum/alt_title/mime title = "Mime" -/datum/alt_title/performer - title = "Performer" - /datum/alt_title/interpretive_dancer title = "Interpretive Dancer" diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index 431d038870..13cf82273f 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -28,6 +28,7 @@ var/const/PSYCHIATRIST =(1<<7) var/const/ROBOTICIST =(1<<8) var/const/XENOBIOLOGIST =(1<<9) var/const/PARAMEDIC =(1<<10) +var/const/XENOBOTANIST =(1<<15) //VOREStation Add var/const/CIVILIAN =(1<<2) @@ -46,6 +47,7 @@ var/const/ASSISTANT =(1<<11) var/const/BRIDGE =(1<<12) var/const/CLOWN =(1<<13) //VOREStation Add var/const/MIME =(1<<14) //VOREStation Add +var/const/ENTERTAINER =(1<<15) //VOREStation Add var/list/assistant_occupations = list( ) diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index bf0c8f78dd..dc17042f15 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -773,7 +773,7 @@ to_chat(user, "It does nothing.") return else - if(allowed(usr) && !wires.IsIndexCut(AALARM_WIRE_IDSCAN)) + if(allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) locked = !locked to_chat(user, "You [locked ? "lock" : "unlock"] the Air Alarm interface.") else diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 454025d425..4bd203d0ba 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -42,24 +42,6 @@ var/list/camera_computers_using_this = list() -/obj/machinery/camera/apply_visual(mob/living/carbon/human/M) - if(!M.client) - return - M.overlay_fullscreen("fishbed",/obj/screen/fullscreen/fishbed) - M.overlay_fullscreen("scanlines",/obj/screen/fullscreen/scanline) - M.overlay_fullscreen("whitenoise",/obj/screen/fullscreen/noise) - M.machine_visual = src - return 1 - -/obj/machinery/camera/remove_visual(mob/living/carbon/human/M) - if(!M.client) - return - M.clear_fullscreen("fishbed",0) - M.clear_fullscreen("scanlines") - M.clear_fullscreen("whitenoise") - M.machine_visual = null - return 1 - /obj/machinery/camera/New() wires = new(src) assembly = new(src) @@ -232,12 +214,6 @@ else to_chat(O, "[U] holds \a [itemname] up to one of your cameras ...") O << browse(text("[][]", itemname, info), text("window=[]", itemname)) - for(var/mob/O in player_list) - if (istype(O.machine, /obj/machinery/computer/security)) - var/obj/machinery/computer/security/S = O.machine - if (S.current_camera == src) - to_chat(O, "[U] holds \a [itemname] up to one of the cameras ...") - O << browse(text("[][]", itemname, info), text("window=[]", itemname)) else if (istype(W, /obj/item/weapon/camera_bug)) if (!src.can_use()) @@ -298,7 +274,7 @@ //Used when someone breaks a camera /obj/machinery/camera/proc/destroy() stat |= BROKEN - wires.RandomCutAll() + wires.cut_all() triggerCameraAlarm() update_icon() @@ -333,7 +309,7 @@ camera_alarm.triggerAlarm(loc, src, duration) /obj/machinery/camera/proc/cancelCameraAlarm() - if(wires.IsIndexCut(CAMERA_WIRE_ALARM)) + if(wires.is_cut(WIRE_CAM_ALARM)) return alarm_on = 0 @@ -494,15 +470,12 @@ else cameranet.updateVisibility(src, 0) - invalidateCameraCache() - // Resets the camera's wires to fully operational state. Used by one of Malfunction abilities. /obj/machinery/camera/proc/reset_wires() if(!wires) return if (stat & BROKEN) // Fix the camera stat &= ~BROKEN - wires.CutAll() - wires.MendAll() + wires.repair() update_icon() update_coverage() diff --git a/code/game/machinery/camera/presets.dm b/code/game/machinery/camera/presets.dm index 30dc0db197..58279abec0 100644 --- a/code/game/machinery/camera/presets.dm +++ b/code/game/machinery/camera/presets.dm @@ -189,7 +189,6 @@ var/global/list/engineering_networks = list( var/number = my_area.len c_tag = "[A.name] #[number]" - invalidateCameraCache() /obj/machinery/camera/autoname/Destroy() var/area/A = get_area(src) diff --git a/code/game/machinery/computer/aifixer.dm b/code/game/machinery/computer/aifixer.dm index daca64cc42..c3041344a0 100644 --- a/code/game/machinery/computer/aifixer.dm +++ b/code/game/machinery/computer/aifixer.dm @@ -1,142 +1,132 @@ /obj/machinery/computer/aifixer name = "\improper AI system integrity restorer" - desc = "Restores AI units to working condition, assuming you have one inside!" - icon_keyboard = "rd_key" - icon_screen = "ai-fixer" - light_color = "#a97faa" - circuit = /obj/item/weapon/circuitboard/aifixer + desc = "Used with intelliCards containing nonfunctional AIs to restore them to working order." req_one_access = list(access_robotics, access_heads) - var/mob/living/silicon/ai/occupant = null - var/active = 0 + circuit = /obj/item/weapon/circuitboard/aifixer + icon_keyboard = "tech_key" + icon_screen = "ai-fixer" + light_color = LIGHT_COLOR_PINK + + active_power_usage = 1000 -/obj/machinery/computer/aifixer/New() - ..() - update_icon() - -/obj/machinery/computer/aifixer/proc/load_ai(var/mob/living/silicon/ai/transfer, var/obj/item/device/aicard/card, var/mob/user) - - if(!transfer) - return - - // Transfer over the AI. - to_chat(transfer, "You have been transferred into a stationary terminal. Sadly, there is no remote access from here.") - to_chat(user, "Transfer successful: [transfer.name] placed within stationary terminal.") - - transfer.loc = src - transfer.cancel_camera() - transfer.control_disabled = 1 - occupant = transfer - - if(card) - card.clear() - - update_icon() - -/obj/machinery/computer/aifixer/attackby(I as obj, user as mob) + /// Variable containing transferred AI + var/mob/living/silicon/ai/occupier + /// Variable dictating if we are in the process of restoring the occupier AI + var/restoring = FALSE +/obj/machinery/computer/aifixer/attackby(obj/item/I, mob/living/user) + if(I.is_screwdriver()) + if(occupier) + if(stat & (NOPOWER|BROKEN)) + to_chat(user, "The screws on [name]'s screen won't budge.") + else + to_chat(user, "The screws on [name]'s screen won't budge and it emits a warning beep.") + return if(istype(I, /obj/item/device/aicard)) - if(stat & (NOPOWER|BROKEN)) - to_chat(user, "This terminal isn't functioning right now.") + to_chat(user, "This terminal isn't functioning right now.") + return + if(restoring) + to_chat(user, "Terminal is busy restoring [occupier] right now.") return var/obj/item/device/aicard/card = I - var/mob/living/silicon/ai/comp_ai = locate() in src - var/mob/living/silicon/ai/card_ai = locate() in card + if(occupier) + if(card.grab_ai(occupier, user)) + occupier = null + else if(card.carded_ai) + var/mob/living/silicon/ai/new_occupant = card.carded_ai + to_chat(new_occupant, "You have been transferred into a stationary terminal. Sadly there is no remote access from here.") + to_chat(user, "Transfer Successful: [new_occupant] placed within stationary terminal.") + new_occupant.forceMove(src) + new_occupant.cancel_camera() + new_occupant.control_disabled = TRUE + occupier = new_occupant + card.clear() + update_icon() + else + to_chat(user, "There is no AI loaded onto this computer, and no AI loaded onto [I]. What exactly are you trying to do here?") + return ..() - if(istype(comp_ai)) - if(active) - to_chat(user, "ERROR: Reconstruction in progress.") - return - card.grab_ai(comp_ai, user) - if(!(locate(/mob/living/silicon/ai) in src)) occupant = null - else if(istype(card_ai)) - load_ai(card_ai,card,user) - occupant = locate(/mob/living/silicon/ai) in src - - update_icon() +/obj/machinery/computer/aifixer/attack_hand(mob/user) + if(stat & (NOPOWER|BROKEN)) return - ..() - return + tgui_interact(user) -/obj/machinery/computer/aifixer/attack_ai(var/mob/user as mob) - return attack_hand(user) +/obj/machinery/computer/aifixer/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "AiRestorer", name) + ui.open() -/obj/machinery/computer/aifixer/attack_hand(var/mob/user as mob) +/obj/machinery/computer/aifixer/tgui_data(mob/user) + var/list/data = list() + + data["ejectable"] = FALSE + data["AI_present"] = FALSE + data["error"] = null + if(!occupier) + data["error"] = "Please transfer an AI unit." + else + data["AI_present"] = TRUE + data["name"] = occupier.name + data["restoring"] = restoring + data["health"] = (occupier.health + 100) / 2 + data["isDead"] = occupier.stat == DEAD + var/list/laws = list() + for(var/datum/ai_law/law in occupier.laws.all_laws()) + laws += "[law.get_index()]: [law.law]" + data["laws"] = laws + + return data + +/obj/machinery/computer/aifixer/tgui_act(action, params) if(..()) return + if(!occupier) + restoring = FALSE - user.set_machine(src) - var/dat = "

AI System Integrity Restorer



" + switch(action) + if("PRG_beginReconstruction") + if(occupier?.health < 100) + to_chat(usr, "Reconstruction in progress. This will take several minutes.") + playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 25, FALSE) + restoring = TRUE + var/mob/observer/dead/ghost = occupier.get_ghost() + if(ghost) + ghost.notify_revive("Your core files are being restored!", source = src) + . = TRUE - if (src.occupant) - var/laws - dat += "Stored AI: [src.occupant.name]
System integrity: [src.occupant.hardware_integrity()]%
Backup Capacitor: [src.occupant.backup_capacitor()]%
" +/obj/machinery/computer/aifixer/proc/Fix() + use_power(active_power_usage) + occupier.adjustOxyLoss(-5, 0, FALSE) + occupier.adjustFireLoss(-5, 0, FALSE) + occupier.adjustBruteLoss(-5, 0) + if(occupier.health >= 0 && occupier.stat == DEAD) + occupier.revive() - for (var/datum/ai_law/law in occupant.laws.all_laws()) - laws += "[law.get_index()]: [law.law]
" - - dat += "Laws:
[laws]
" - - if (src.occupant.stat == 2) - dat += "AI nonfunctional" - else - dat += "AI functional" - if (!src.active) - dat += {"

Begin Reconstruction"} - else - dat += "

Reconstruction in process, please wait.
" - dat += {" Close"} - - user << browse(dat, "window=computer;size=400x500") - onclose(user, "computer") - return + return occupier.health < 100 /obj/machinery/computer/aifixer/process() if(..()) - src.updateDialog() - return - -/obj/machinery/computer/aifixer/Topic(href, href_list) - if(..()) - return 1 - if (href_list["fix"]) - src.active = 1 - src.overlays += image(icon, "ai-fixer-on") - while (src.occupant.getOxyLoss() > 0 || src.occupant.getFireLoss() > 0 || src.occupant.getToxLoss() > 0 || src.occupant.getBruteLoss() > 0) - src.occupant.adjustOxyLoss(-1) - src.occupant.adjustFireLoss(-1) - src.occupant.adjustToxLoss(-1) - src.occupant.adjustBruteLoss(-1) - src.occupant.updatehealth() - if (src.occupant.health >= 0 && src.occupant.stat == DEAD) - src.occupant.set_stat(CONSCIOUS) - src.occupant.lying = 0 - dead_mob_list -= src.occupant - living_mob_list += src.occupant - src.overlays -= image(icon, "ai-fixer-404") - src.overlays += image(icon, "ai-fixer-full") - src.occupant.add_ai_verbs() - src.updateUsrDialog() - sleep(10) - src.active = 0 - src.overlays -= image(icon, "ai-fixer-on") - - - src.add_fingerprint(usr) - src.updateUsrDialog() - return - + if(restoring) + var/oldstat = occupier.stat + restoring = Fix() + if(oldstat != occupier.stat) + update_icon() /obj/machinery/computer/aifixer/update_icon() - ..() - if((stat & BROKEN) || (stat & NOPOWER)) + . = ..() + if(stat & (NOPOWER|BROKEN)) return - if(occupant) - if(occupant.stat) - add_overlay("ai-fixer-404") - else - add_overlay("ai-fixer-full") + if(restoring) + . += "ai-fixer-on" + if (occupier) + switch (occupier.stat) + if (CONSCIOUS) + . += "ai-fixer-full" + if (UNCONSCIOUS) + . += "ai-fixer-404" else - add_overlay("ai-fixer-empty") + . += "ai-fixer-empty" \ No newline at end of file diff --git a/code/game/machinery/computer/camera.dm b/code/game/machinery/computer/camera.dm index e695173efd..f87d69a9a7 100644 --- a/code/game/machinery/computer/camera.dm +++ b/code/game/machinery/computer/camera.dm @@ -3,201 +3,44 @@ /obj/machinery/computer/security name = "security camera monitor" desc = "Used to access the various cameras on the station." + icon_keyboard = "security_key" icon_screen = "cameras" light_color = "#a91515" - var/current_network = null - var/obj/machinery/camera/current_camera = null - var/last_pic = 1.0 - var/list/network - var/mapping = 0//For the overview file, interesting bit of code. - var/cache_id = 0 circuit = /obj/item/weapon/circuitboard/security -/obj/machinery/computer/security/New() - if(!network) + var/mapping = 0//For the overview file, interesting bit of code. + var/list/network = list() + + var/datum/tgui_module/camera/camera + +/obj/machinery/computer/security/Initialize() + . = ..() + if(!LAZYLEN(network)) network = using_map.station_networks.Copy() - ..() - if(network.len) - current_network = network[1] + camera = new(src, network) -/obj/machinery/computer/security/attack_ai(var/mob/user as mob) - return attack_hand(user) +/obj/machinery/computer/security/Destroy() + QDEL_NULL(camera) + return ..() -/obj/machinery/computer/security/check_eye(var/mob/user as mob) - if (user.stat || ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded) && !istype(user, /mob/living/silicon))) //user can't see - not sure why canmove is here. - return -1 - if(!current_camera) - return 0 - var/viewflag = current_camera.check_eye(user) - if ( viewflag < 0 ) //camera doesn't work - reset_current() - return viewflag +/obj/machinery/computer/security/tgui_interact(mob/user, datum/tgui/ui = null) + camera.tgui_interact(user, ui) -/obj/machinery/computer/security/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1) - if(stat & (NOPOWER|BROKEN)) return - if(user.stat) return - - var/data[0] - - data["current_camera"] = current_camera ? current_camera.nano_structure() : null - data["current_network"] = current_network - data["networks"] = network ? network : list() - - var/map_levels = using_map.get_map_levels(src.z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - data["map_levels"] = map_levels - - if(current_network) - data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels) - if(current_camera) - switch_to_camera(user, current_camera) - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "sec_camera.tmpl", "Camera Console", 900, 800) - - // adding a template with the key "mapContent" enables the map ui functionality - ui.add_template("mapContent", "sec_camera_map_content.tmpl") - // adding a template with the key "mapHeader" replaces the map header content - ui.add_template("mapHeader", "sec_camera_map_header.tmpl") - - ui.set_initial_data(data) - ui.open() - -/obj/machinery/computer/security/Topic(href, href_list) - if(..()) - return 1 - if(href_list["switch_camera"]) - if(stat&(NOPOWER|BROKEN)) return //VOREStation Edit - Removed zlevel check - if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return - var/obj/machinery/camera/C = locate(href_list["switch_camera"]) in cameranet.cameras - if(!C) - return - if(!(current_network in C.network)) - return - - switch_to_camera(usr, C) - return 1 - else if(href_list["switch_network"]) - if(stat&(NOPOWER|BROKEN)) return //VOREStation Edit - Removed zlevel check - if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return - if(href_list["switch_network"] in network) - current_network = href_list["switch_network"] - return 1 - else if(href_list["reset"]) - if(stat&(NOPOWER|BROKEN)) return //VOREStation Edit - Removed zlevel check - if(usr.stat || ((get_dist(usr, src) > 1 || !( usr.canmove ) || usr.blinded) && !istype(usr, /mob/living/silicon))) return - reset_current() - usr.reset_view(current_camera) - return 1 - else - . = ..() - -/obj/machinery/computer/security/attack_hand(var/mob/user as mob) - if(stat & (NOPOWER|BROKEN)) return - - if(!isAI(user)) - user.set_machine(src) - ui_interact(user) - -/obj/machinery/computer/security/proc/switch_to_camera(var/mob/user, var/obj/machinery/camera/C) - //don't need to check if the camera works for AI because the AI jumps to the camera location and doesn't actually look through cameras. - if(isAI(user)) - var/mob/living/silicon/ai/A = user - // Only allow non-carded AIs to view because the interaction with the eye gets all wonky otherwise. - if(!A.is_in_chassis()) - return 0 - - A.eyeobj.setLoc(get_turf(C)) - A.client.eye = A.eyeobj - return 1 - - if (!C.can_use() || user.stat || (get_dist(user, src) > 1 || user.machine != src || user.blinded || !( user.canmove ) && !istype(user, /mob/living/silicon))) - return 0 - set_current(C) - user.reset_view(current_camera) - check_eye(user) - return 1 - -/obj/machinery/computer/security/relaymove(mob/user,direct) - var/turf/T = get_turf(current_camera) - for(var/i; i < 10; i++) - T = get_step(T, direct) - jump_on_click(user, T) - -//Camera control: moving. -/obj/machinery/computer/security/proc/jump_on_click(var/mob/user,var/A) - if(user.machine != src) +/obj/machinery/computer/security/attack_hand(mob/user) + add_fingerprint(user) + if(stat & (BROKEN|NOPOWER)) return - var/obj/machinery/camera/jump_to - if(istype(A,/obj/machinery/camera)) - jump_to = A - else if(ismob(A)) - if(ishuman(A)) - jump_to = locate() in A:head - else if(isrobot(A)) - jump_to = A:camera - else if(isobj(A)) - jump_to = locate() in A - else if(isturf(A)) - var/best_dist = INFINITY - for(var/obj/machinery/camera/camera in get_area(A)) - if(!camera.can_use()) - continue - if(!can_access_camera(camera)) - continue - var/dist = get_dist(camera,A) - if(dist < best_dist) - best_dist = dist - jump_to = camera - if(isnull(jump_to)) - return - if(can_access_camera(jump_to)) - switch_to_camera(user,jump_to) + tgui_interact(user) -/obj/machinery/computer/security/process() - if(cache_id != camera_repository.camera_cache_id) - cache_id = camera_repository.camera_cache_id - SSnanoui.update_uis(src) +/obj/machinery/computer/security/attack_ai(mob/user) + to_chat(user, "You realise its kind of stupid to access a camera console when you have the entire camera network at your metaphorical fingertips") + return -/obj/machinery/computer/security/proc/can_access_camera(var/obj/machinery/camera/C) - var/list/shared_networks = src.network & C.network - if(shared_networks.len) - return 1 - return 0 - -/obj/machinery/computer/security/proc/set_current(var/obj/machinery/camera/C) - if(current_camera == C) - return - - if(current_camera) - reset_current() - - src.current_camera = C - if(current_camera) - current_camera.camera_computers_using_this.Add(src) - update_use_power(USE_POWER_ACTIVE) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_initiated() - -/obj/machinery/computer/security/proc/reset_current() - if(current_camera) - current_camera.camera_computers_using_this.Remove(src) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_cancelled() - current_camera = null - update_use_power(USE_POWER_IDLE) - -//Camera control: mouse. -/* Oh my god -/atom/DblClick() - ..() - if(istype(usr.machine,/obj/machinery/computer/security)) - var/obj/machinery/computer/security/console = usr.machine - console.jump_on_click(usr,src) -*/ +/obj/machinery/computer/security/proc/set_network(list/new_network) + network = new_network + camera.network = network + camera.access_based = FALSE //Camera control: arrow keys. /obj/machinery/computer/security/telescreen diff --git a/code/game/machinery/computer/camera_circuit.dm b/code/game/machinery/computer/camera_circuit.dm deleted file mode 100644 index 2bbe82ee1b..0000000000 --- a/code/game/machinery/computer/camera_circuit.dm +++ /dev/null @@ -1,116 +0,0 @@ - -//the researchable camera circuit that can connect to any camera network - -/obj/item/weapon/circuitboard/camera - //name = "Circuit board (Camera)" - var/secured = 1 - var/authorised = 0 - var/possibleNets[0] - var/network = "" - build_path = null - -//when adding a new camera network, you should only need to update these two procs - New() - possibleNets["Engineering"] = access_ce - possibleNets["SS13"] = access_hos - possibleNets["Mining"] = access_mining - possibleNets["Cargo"] = access_qm - possibleNets["Research"] = access_rd - possibleNets["Medbay"] = access_cmo - ..() - - proc/updateBuildPath() - build_path = null - if(authorised && secured) - switch(network) - if("SS13") - build_path = /obj/machinery/computer/security - if("Engineering") - build_path = /obj/machinery/computer/security/engineering - if("Mining") - build_path = /obj/machinery/computer/security/mining - if("Research") - build_path = /obj/machinery/computer/security/research - if("Medbay") - build_path = /obj/machinery/computer/security/medbay - if("Cargo") - build_path = /obj/machinery/computer/security/cargo - - attackby(var/obj/item/I, var/mob/user)//if(health > 50) - ..() - else if(I.is_screwdriver()) - secured = !secured - user.visible_message("The [src] can [secured ? "no longer" : "now"] be modified.") - playsound(src, I.usesound, 50, 1) - updateBuildPath() - return - - attack_self(var/mob/user) - if(!secured && ishuman(user)) - user.machine = src - interact(user, 0) - - proc/interact(var/mob/user, var/ai=0) - if(secured) - return - if (!ishuman(user)) - return ..(user) - var/t = "Circuitboard Console - Camera Monitoring Computer
" - t += "Close
" - t += "
Please select a camera network:
" - - for(var/curNet in possibleNets) - if(network == curNet) - t += "- [curNet]
" - else - t += "- [curNet]
" - t += "
" - if(network) - if(authorised) - t += "Authenticated (Clear Auth)
" - else - t += "*Authenticate* (Requires an appropriate access ID)
" - else - t += "*Authenticate* (Requires an appropriate access ID)
" - t += "Close
" - user << browse(t, "window=camcircuit;size=500x400") - onclose(user, "camcircuit") - - Topic(href, href_list) - ..() - if( href_list["close"] ) - usr << browse(null, "window=camcircuit") - usr.machine = null - return - else if(href_list["net"]) - network = href_list["net"] - authorised = 0 - else if( href_list["auth"] ) - var/mob/M = usr - var/obj/item/weapon/card/id/I = M.equipped() - if (istype(I, /obj/item/device/pda)) - var/obj/item/device/pda/pda = I - I = pda.id - if (I && istype(I)) - if(access_captain in I.access) - authorised = 1 - else if (possibleNets[network] in I.access) - authorised = 1 - if(istype(I,/obj/item/weapon/card/emag)) - I.resolve_attackby(src, usr) - else if( href_list["removeauth"] ) - authorised = 0 - updateDialog() - - updateDialog() - if(istype(src.loc,/mob)) - attack_self(src.loc) - -/obj/item/weapon/circuitboard/camera/emag_act(var/remaining_charges, var/mob/user) - if(network) - authorised = 1 - to_chat(user, "You authorised the circuit network!") - updateDialog() - return 1 - else - to_chat(user, "You must select a camera network circuit!") diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index 077c12c451..1af31afe80 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -8,7 +8,7 @@ idle_power_usage = 250 active_power_usage = 500 circuit = /obj/item/weapon/circuitboard/crew - var/datum/nano_module/program/crew_monitor/crew_monitor + var/datum/tgui_module/crew_monitor/crew_monitor /obj/machinery/computer/crew/New() crew_monitor = new(src) @@ -20,16 +20,16 @@ ..() /obj/machinery/computer/crew/attack_ai(mob/user) - ui_interact(user) + attack_hand(user) /obj/machinery/computer/crew/attack_hand(mob/user) add_fingerprint(user) if(stat & (BROKEN|NOPOWER)) return - ui_interact(user) + tgui_interact(user) -/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) - crew_monitor.ui_interact(user, ui_key, ui, force_open) +/obj/machinery/computer/crew/tgui_interact(mob/user, datum/tgui/ui = null) + crew_monitor.tgui_interact(user, ui) /obj/machinery/computer/crew/interact(mob/user) - crew_monitor.ui_interact(user) + crew_monitor.tgui_interact(user) diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 631a998a42..a133aab9b1 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -522,7 +522,7 @@ announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)) //visible_message("\The [initial(name)] hums and hisses as it moves [to_despawn.real_name] into storage.", 3) - visible_message("\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2].", 3) + visible_message("\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]", 3) //VOREStation Edit begin: Dont delete mobs-in-mobs if(to_despawn.client && to_despawn.stat<2) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index ee66c2172a..8f1d7faed7 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -543,10 +543,6 @@ About the new airlock wires panel: return 1 return 0 -/obj/machinery/door/airlock/proc/isWireCut(var/wireIndex) - // You can find the wires in the datum folder. - return wires.IsIndexCut(wireIndex) - /obj/machinery/door/airlock/proc/canAIControl() return ((src.aiControlDisabled!=1) && (!src.isAllPowerLoss())); @@ -559,7 +555,7 @@ About the new airlock wires panel: return (src.main_power_lost_until==0 || src.backup_power_lost_until==0) /obj/machinery/door/airlock/requiresID() - return !(src.isWireCut(AIRLOCK_WIRE_IDSCAN) || aiDisabledIdScanner) + return !(wires.is_cut(WIRE_IDSCAN) || aiDisabledIdScanner) /obj/machinery/door/airlock/proc/isAllPowerLoss() if(stat & (NOPOWER|BROKEN)) @@ -569,10 +565,10 @@ About the new airlock wires panel: return 0 /obj/machinery/door/airlock/proc/mainPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1) || src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2) + return wires.is_cut(WIRE_MAIN_POWER1) || wires.is_cut(WIRE_MAIN_POWER2) /obj/machinery/door/airlock/proc/backupPowerCablesCut() - return src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER1) || src.isWireCut(AIRLOCK_WIRE_BACKUP_POWER2) + return wires.is_cut(WIRE_BACKUP_POWER1) || wires.is_cut(WIRE_BACKUP_POWER2) /obj/machinery/door/airlock/proc/loseMainPower() main_power_lost_until = mainPowerCablesCut() ? -1 : world.time + SecondsToTicks(60) @@ -620,7 +616,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/electrify(var/duration, var/feedback = 0) var/message = "" - if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY) && arePowerSystemsOn()) + if(wires.is_cut(WIRE_ELECTRIFY) && arePowerSystemsOn()) message = text("The electrification wire is cut - Door permanently electrified.") src.electrified_until = -1 else if(duration && !arePowerSystemsOn()) @@ -646,7 +642,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/set_idscan(var/activate, var/feedback = 0) var/message = "" - if(src.isWireCut(AIRLOCK_WIRE_IDSCAN)) + if(wires.is_cut(WIRE_IDSCAN)) message = "The IdScan wire is cut - IdScan feature permanently disabled." else if(activate && src.aiDisabledIdScanner) src.aiDisabledIdScanner = 0 @@ -661,7 +657,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/set_safeties(var/activate, var/feedback = 0) var/message = "" // Safeties! We don't need no stinking safeties! - if (src.isWireCut(AIRLOCK_WIRE_SAFETY)) + if (wires.is_cut(WIRE_SAFETY)) message = text("The safety wire is cut - Cannot enable safeties.") else if (!activate && src.safe) safe = 0 @@ -879,7 +875,7 @@ About the new airlock wires panel: if(!backup_power_lost_until) src.loseBackupPower() if("bolts") - if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) + if(wires.is_cut(WIRE_DOOR_BOLTS)) to_chat(usr, "The door bolt control wire is cut - Door bolts permanently dropped.") else if(activate && src.lock()) to_chat(usr, "The door bolts have been dropped.") @@ -902,7 +898,7 @@ About the new airlock wires panel: set_safeties(!activate, 1) if("timing") // Door speed control - if(src.isWireCut(AIRLOCK_WIRE_SPEED)) + if(wires.is_cut(WIRE_SPEED)) to_chat(usr, "The timing wire is cut - Cannot alter timing.") else if (activate && src.normalspeed) normalspeed = 0 @@ -910,7 +906,7 @@ About the new airlock wires panel: normalspeed = 1 if("lights") // Bolt lights - if(src.isWireCut(AIRLOCK_WIRE_LIGHT)) + if(wires.is_cut(WIRE_BOLT_LIGHT)) to_chat(usr, "The bolt lights wire is cut - The door bolt lights are permanently disabled.") else if (!activate && src.lights) lights = 0 @@ -1076,7 +1072,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/can_open(var/forced=0) if(!forced) - if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) return 0 if(locked || welded) @@ -1089,7 +1085,7 @@ About the new airlock wires panel: if(!forced) //despite the name, this wire is for general door control. - if(!arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_OPEN_DOOR)) + if(!arePowerSystemsOn() || wires.is_cut(WIRE_OPEN_DOOR)) return 0 return ..() @@ -1190,7 +1186,7 @@ About the new airlock wires panel: return if (!forced) - if(operating || !src.arePowerSystemsOn() || isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) return + if(operating || !src.arePowerSystemsOn() || wires.is_cut(WIRE_DOOR_BOLTS)) return src.locked = 0 playsound(src, bolt_up_sound, 30, 0, 3) diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index bcb69d7c79..2697595b59 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -81,6 +81,31 @@ frame_class = FRAME_CLASS_MACHINE frame_size = 4 +/datum/frame/frame_types/oven + name = "Oven" + frame_class = FRAME_CLASS_MACHINE + frame_size = 4 + +/datum/frame/frame_types/fryer + name = "Fryer" + frame_class = FRAME_CLASS_MACHINE + frame_size = 4 + +/datum/frame/frame_types/grill + name = "Grill" + frame_class = FRAME_CLASS_MACHINE + frame_size = 4 + +/datum/frame/frame_types/cerealmaker + name = "Cereal Maker" + frame_class = FRAME_CLASS_MACHINE + frame_size = 4 + +/datum/frame/frame_types/candymachine + name = "Candy Machine" + frame_class = FRAME_CLASS_MACHINE + frame_size = 4 + /datum/frame/frame_types/fax name = "Fax" frame_class = FRAME_CLASS_MACHINE diff --git a/code/game/machinery/vending_machines.dm b/code/game/machinery/vending_machines.dm index 7cfb77d541..59524f869a 100644 --- a/code/game/machinery/vending_machines.dm +++ b/code/game/machinery/vending_machines.dm @@ -365,7 +365,7 @@ /obj/item/weapon/reagent_containers/food/condiment/cornoil = 5, /obj/item/weapon/tray = 8, /obj/item/weapon/material/kitchen/utensil/fork = 6, - /obj/item/weapon/material/knife = 6, + /obj/item/weapon/material/knife/plastic = 6, /obj/item/weapon/material/kitchen/utensil/spoon = 6, /obj/item/weapon/material/knife = 3, /obj/item/weapon/material/kitchen/rollingpin = 2, @@ -383,6 +383,8 @@ /obj/item/weapon/storage/toolbox/lunchbox/cti = 3, /obj/item/weapon/storage/toolbox/lunchbox/nymph = 3, /obj/item/weapon/storage/toolbox/lunchbox/syndicate = 3, + /obj/item/weapon/reagent_containers/cooking_container/oven = 5, + /obj/item/weapon/reagent_containers/cooking_container/fryer = 4, /obj/item/trash/bowl = 10) //VOREStation Add contraband = list(/obj/item/weapon/material/knife/butch = 2) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 2f96fb75cc..57a1731098 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -164,6 +164,8 @@ var/datum/action/innate/mecha/mech_switch_damtype/switch_damtype_action = new var/datum/action/innate/mecha/mech_toggle_phasing/phasing_action = new + var/weapons_only_cycle = FALSE //So combat mechs don't switch to their equipment at times. + /obj/mecha/drain_power(var/drain_check) diff --git a/code/game/mecha/mecha_actions.dm b/code/game/mecha/mecha_actions.dm index 0d2034d790..33307c77d3 100644 --- a/code/game/mecha/mecha_actions.dm +++ b/code/game/mecha/mecha_actions.dm @@ -185,12 +185,15 @@ var/list/available_equipment = list() available_equipment = chassis.equipment + if(chassis.weapons_only_cycle) + available_equipment = chassis.weapon_equipment + if(available_equipment.len == 0) chassis.occupant_message("No equipment available.") return if(!chassis.selected) chassis.selected = available_equipment[1] - chassis.occupant_message("You select [chassis.selected]") + chassis.occupant_message("You select [chassis.selected]") send_byjax(chassis.occupant,"exosuit.browser","eq_list",chassis.get_equipment_list()) button_icon_state = "mech_cycle_equip_on" button.UpdateIcon() @@ -419,3 +422,17 @@ return +/obj/mecha/verb/toggle_weapons_only_cycle() + set category = "Exosuit Interface" + set name = "Toggle weapons only cycling" + set src = usr.loc + set popup_menu = 0 + set_weapons_only_cycle() + +/obj/mecha/proc/set_weapons_only_cycle() + if(usr!=src.occupant) + return + weapons_only_cycle = !weapons_only_cycle + src.occupant_message("En":"#f00\">Dis"]abled weapons only cycling.") + return + diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index ce0f117e5a..ee02464c1e 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -20,6 +20,8 @@ var/global/list/image/splatter_cache=list() var/synthblood = 0 var/list/datum/disease2/disease/virus2 = list() var/amount = 5 + generic_filth = TRUE + persistent = FALSE /obj/effect/decal/cleanable/blood/reveal_blood() if(!fluorescent) diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index 1f49fc9f66..bdc5c9237a 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -5,6 +5,8 @@ icon_state = "gib1" basecolor = SYNTH_BLOOD_COLOUR random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") + generic_filth = FALSE + persistent = FALSE /obj/effect/decal/cleanable/blood/gibs/robot/update_icon() color = "#FFFFFF" @@ -39,6 +41,8 @@ /obj/effect/decal/cleanable/blood/oil basecolor = SYNTH_BLOOD_COLOUR + generic_filth = FALSE + persistent = FALSE /obj/effect/decal/cleanable/blood/oil/dry() return diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index f7965e092d..179b996df9 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,7 +1,22 @@ /obj/effect/decal/cleanable plane = DIRTY_PLANE + var/persistent = FALSE + var/generic_filth = FALSE + var/age = 0 var/list/random_icon_states = list() +/obj/effect/decal/cleanable/Initialize(var/ml, var/_age) + if(!isnull(_age)) + age = _age + if(random_icon_states && length(src.random_icon_states) > 0) + src.icon_state = pick(src.random_icon_states) + SSpersistence.track_value(src, /datum/persistent/filth) + . = ..() + +/obj/effect/decal/cleanable/Destroy() + SSpersistence.forget_value(src, /datum/persistent/filth) + . = ..() + /obj/effect/decal/cleanable/clean_blood(var/ignore = 0) if(!ignore) qdel(src) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 15931b5868..48223c67e2 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -262,6 +262,21 @@ steam.start() -- spawns the effect projectiles -= proj */ +// Burnt Food Smoke (Specialty for Cooking Failures) +/obj/effect/effect/smoke/bad/burntfood + color = "#000000" + time_to_live = 600 + +/obj/effect/effect/smoke/bad/burntfood/process() + for(var/mob/living/L in get_turf(src)) + affect(L) + +/obj/effect/effect/smoke/bad/burntfood/affect(var/mob/living/L) // This stuff is extra-vile. + if (!..()) + return 0 + if(L.needs_to_breathe()) + L.emote("cough") + ///////////////////////////////////////////// // 'Elemental' smoke ///////////////////////////////////////////// @@ -376,6 +391,9 @@ steam.start() -- spawns the effect /datum/effect/effect/system/smoke_spread/bad smoke_type = /obj/effect/effect/smoke/bad + +/datum/effect/effect/system/smoke_spread/bad/burntfood + smoke_type = /obj/effect/effect/smoke/bad/burntfood /datum/effect/effect/system/smoke_spread/noxious smoke_type = /obj/effect/effect/smoke/bad/noxious diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index d6f42bee8f..09cee5bb4c 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -10,7 +10,7 @@ origin_tech = list(TECH_ILLEGAL = 4, TECH_MAGNET = 4) var/can_use = 1 var/obj/effect/dummy/chameleon/active_dummy = null - var/saved_item = /obj/item/weapon/cigbutt + var/saved_item = /obj/item/trash/cigbutt var/saved_icon = 'icons/obj/clothing/masks.dmi' var/saved_icon_state = "cigbutt" var/saved_overlays diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 2049d96a7d..47e71092cf 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -155,8 +155,8 @@ var/global/list/default_medbay_channels = list( data["freq"] = format_frequency(frequency) data["rawfreq"] = num2text(frequency) - data["mic_cut"] = (wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) - data["spk_cut"] = (wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) + data["mic_cut"] = (wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) + data["spk_cut"] = (wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) var/list/chanlist = list_channels(user) if(islist(chanlist) && chanlist.len) @@ -215,12 +215,6 @@ var/global/list/default_medbay_channels = list( /mob/observer/dead/has_internal_radio_channel_access(var/list/req_one_accesses) return can_admin_interact() -/obj/item/device/radio/proc/text_wires() - if (b_stat) - return wires.GetInteractWindow() - return - - /obj/item/device/radio/proc/text_sec_channel(var/chan_name, var/chan_stat) var/list = !!(chan_stat&FREQ_LISTENING)!=0 return {" @@ -229,10 +223,10 @@ var/global/list/default_medbay_channels = list( "} /obj/item/device/radio/proc/ToggleBroadcast() - broadcasting = !broadcasting && !(wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) + broadcasting = !broadcasting && !(wires.is_cut(WIRE_RADIO_TRANSMIT) || wires.is_cut(WIRE_RADIO_SIGNAL)) /obj/item/device/radio/proc/ToggleReception() - listening = !listening && !(wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) + listening = !listening && !(wires.is_cut(WIRE_RADIO_RECEIVER) || wires.is_cut(WIRE_RADIO_SIGNAL)) /obj/item/device/radio/CanUseTopic() if(!on) @@ -337,7 +331,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) // Uncommenting this. To the above comment: // The permacell radios aren't suppose to be able to transmit, this isn't a bug and this "fix" is just making radio wires useless. -Giacom - if(wires.IsIndexCut(WIRE_TRANSMIT)) // The device has to have all its wires and shit intact + if(wires.is_cut(WIRE_RADIO_TRANSMIT)) // The device has to have all its wires and shit intact return FALSE if(!radio_connection) @@ -541,7 +535,7 @@ GLOBAL_DATUM(autospeaker, /mob/living/silicon/ai/announcer) // check if this radio can receive on the given frequency, and if so, // what the range is in which mobs will hear the radio // returns: -1 if can't receive, range otherwise - if(wires.IsIndexCut(WIRE_RECEIVE)) + if(wires.is_cut(WIRE_RADIO_RECEIVER)) return -1 if(!listening) return -1 diff --git a/code/game/objects/items/devices/radio/radiopack.dm b/code/game/objects/items/devices/radio/radiopack.dm index 8f2e849320..5da91422ae 100644 --- a/code/game/objects/items/devices/radio/radiopack.dm +++ b/code/game/objects/items/devices/radio/radiopack.dm @@ -128,7 +128,7 @@ //Only care about megabroadcasts or things that are targeted at us if(!(0 in level)) return -1 - if(wires.IsIndexCut(WIRE_RECEIVE)) + if(wires.is_cut(WIRE_RADIO_RECEIVER)) return -1 if(!listening) return -1 diff --git a/code/game/objects/items/robot/robot_upgrades_vr.dm b/code/game/objects/items/robot/robot_upgrades_vr.dm index 13f09a980d..2bc402b355 100644 --- a/code/game/objects/items/robot/robot_upgrades_vr.dm +++ b/code/game/objects/items/robot/robot_upgrades_vr.dm @@ -6,7 +6,8 @@ R.add_language(LANGUAGE_ECUREUILIAN, 1) R.add_language(LANGUAGE_DAEMON, 1) R.add_language(LANGUAGE_ENOCHIAN, 1) - R.add_language(LANGUAGE_SLAVIC, 1) + R.add_language(LANGUAGE_SLAVIC, 1) + R.add_language(LANGUAGE_DRUDAKAR, 1) return 1 else return 0 diff --git a/code/game/objects/items/trash.dm b/code/game/objects/items/trash.dm index b72a73f34e..aa4b02b284 100644 --- a/code/game/objects/items/trash.dm +++ b/code/game/objects/items/trash.dm @@ -7,6 +7,20 @@ w_class = ITEMSIZE_SMALL desc = "This is rubbish." drop_sound = 'sound/items/drop/wrapper.ogg' + var/age = 0 + +/obj/item/trash/New(var/newloc, var/_age) + ..(newloc) + if(!isnull(_age)) + age = _age + +/obj/item/trash/Initialize() + SSpersistence.track_value(src, /datum/persistent/filth/trash) + . = ..() + +/obj/item/trash/Destroy() + SSpersistence.forget_value(src, /datum/persistent/filth/trash) + . = ..() /obj/item/trash/raisins name = "\improper 4no raisins" @@ -91,5 +105,22 @@ name = "bread tube" icon_state = "tastybread" +// Aurora Food Port +/obj/item/trash/brownies + name = "brownie tray" + icon_state = "brownies" + +/obj/item/trash/snacktray + name = "snacktray" + icon_state = "snacktray" + +/obj/item/trash/dipbowl + name = "dip bowl" + icon_state = "dipbowl" + +/obj/item/trash/chipbasket + name = "empty basket" + icon_state = "chipbasket_empty" + /obj/item/trash/attack(mob/M as mob, mob/living/user as mob) return diff --git a/code/game/objects/items/weapons/RPD_vr.dm b/code/game/objects/items/weapons/RPD_vr.dm index 8444cac574..71f127f92b 100644 --- a/code/game/objects/items/weapons/RPD_vr.dm +++ b/code/game/objects/items/weapons/RPD_vr.dm @@ -33,7 +33,7 @@ var/datum/pipe_recipe/recipe = null // pipe recipie selected for display/construction //YW edit, added = null var/static/datum/pipe_recipe/first_atmos var/static/datum/pipe_recipe/first_disposal - var/static/datum/asset/iconsheet/pipes/icon_assets + var/static/datum/asset/spritesheet/pipes/icon_assets var/static/list/pipe_layers = list( "Regular" = PIPING_LAYER_REGULAR, "Supply" = PIPING_LAYER_SUPPLY, @@ -80,7 +80,7 @@ /obj/item/weapon/pipe_dispenser/interact(mob/user) SetupPipes() if(!icon_assets) - icon_assets = get_asset_datum(/datum/asset/iconsheet/pipes) + icon_assets = get_asset_datum(/datum/asset/spritesheet/pipes) icon_assets.send(user) var/list/lines = list() @@ -370,7 +370,7 @@ if(_dir == p_dir && flipped == p_flipped) attrs += " class=\"linkOn\"" if(icon_state) - var/img_tag = icon_assets.icon_tag(icon_state, _dir) + var/img_tag = icon_assets.icon_tag("[dirtext]-[icon_state]") return "[img_tag]" else return "[noimg]" diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 3577ea0a55..1bd2a4eac8 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -150,7 +150,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM /obj/item/clothing/mask/smokable/examine(mob/user) . = ..() - + if(!is_pipe) var/smoke_percent = round((smoketime / max_smoketime) * 100) switch(smoke_percent) @@ -283,7 +283,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM w_class = ITEMSIZE_TINY slot_flags = SLOT_EARS | SLOT_MASK attack_verb = list("burnt", "singed") - type_butt = /obj/item/weapon/cigbutt + type_butt = /obj/item/trash/cigbutt chem_volume = 15 max_smoketime = 300 smoketime = 300 @@ -341,7 +341,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM name = "premium cigar" desc = "A brown roll of tobacco and... well, you're not quite sure. This thing's huge!" icon_state = "cigar2" - type_butt = /obj/item/weapon/cigbutt/cigarbutt + type_butt = /obj/item/trash/cigbutt/cigarbutt throw_speed = 0.5 item_state = "cigar" max_smoketime = 1500 @@ -369,7 +369,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM chem_volume = 30 nicotine_amt = 10 -/obj/item/weapon/cigbutt +/obj/item/trash/cigbutt name = "cigarette butt" desc = "A manky old cigarette butt." icon = 'icons/obj/clothing/masks.dmi' @@ -379,12 +379,12 @@ CIGARETTE PACKETS ARE IN FANCY.DM slot_flags = SLOT_EARS throwforce = 1 -/obj/item/weapon/cigbutt/Initialize() +/obj/item/trash/cigbutt/Initialize() . = ..() randpixel_xy() transform = turn(transform,rand(0,360)) -/obj/item/weapon/cigbutt/cigarbutt +/obj/item/trash/cigbutt/cigarbutt name = "cigar butt" desc = "A manky old cigar butt." icon_state = "cigarbutt" diff --git a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm index 097f465a51..0648b58627 100644 --- a/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm +++ b/code/game/objects/items/weapons/circuitboards/computer/camera_monitor.dm @@ -12,7 +12,6 @@ /obj/item/weapon/circuitboard/security/New() ..() - network = using_map.station_networks /obj/item/weapon/circuitboard/security/tv name = T_BOARD("security camera monitor - television") @@ -45,7 +44,7 @@ /obj/item/weapon/circuitboard/security/construct(var/obj/machinery/computer/security/C) if (..(C)) - C.network = network.Copy() + C.set_network(network.Copy()) /obj/item/weapon/circuitboard/security/deconstruct(var/obj/machinery/computer/security/C) if (..(C)) diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm index 84c55decb8..85f81b1058 100644 --- a/code/game/objects/items/weapons/circuitboards/frame.dm +++ b/code/game/objects/items/weapons/circuitboards/frame.dm @@ -121,16 +121,6 @@ /obj/item/weapon/stock_parts/motor = 2, /obj/item/stack/cable_coil = 5) -/obj/item/weapon/circuitboard/microwave - name = T_BOARD("microwave") - build_path = /obj/machinery/microwave - board_type = new /datum/frame/frame_types/microwave - matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/motor = 1, - /obj/item/weapon/stock_parts/capacitor = 1) - /obj/item/weapon/circuitboard/recharger name = T_BOARD("recharger") build_path = /obj/machinery/recharger @@ -250,13 +240,3 @@ /obj/item/weapon/stock_parts/spring = 1, /obj/item/stack/cable_coil = 5) -/obj/item/weapon/circuitboard/microwave/advanced - name = T_BOARD("deluxe microwave") - build_path = /obj/machinery/microwave/advanced - board_type = new /datum/frame/frame_types/microwave - matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) - req_components = list( - /obj/item/weapon/stock_parts/console_screen = 1, - /obj/item/weapon/stock_parts/motor = 1, - /obj/item/weapon/stock_parts/capacitor = 1) - diff --git a/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm b/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm new file mode 100644 index 0000000000..1af9476aff --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/machinery/kitchen_appliances.dm @@ -0,0 +1,74 @@ +/obj/item/weapon/circuitboard/microwave + name = T_BOARD("microwave") + desc = "The circuitboard for a microwave." + build_path = /obj/machinery/microwave + board_type = new /datum/frame/frame_types/microwave + contain_parts = 0 + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/capacitor = 3, // Original Capacitor count was 1 + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/oven + name = T_BOARD("oven") + desc = "The circuitboard for an oven." + build_path = /obj/machinery/appliance/cooker/oven + board_type = new /datum/frame/frame_types/oven + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/fryer + name = T_BOARD("deep fryer") + desc = "The circuitboard for a deep fryer." + build_path = /obj/machinery/appliance/cooker/fryer + board_type = new /datum/frame/frame_types/fryer + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/grill + name = T_BOARD("grill") + desc = "The circuitboard for an industrial grill." + build_path = /obj/machinery/appliance/cooker/grill + board_type = new /datum/frame/frame_types/grill + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/cerealmaker + name = T_BOARD("cereal maker") + desc = "The circuitboard for a cereal maker." + build_path = /obj/machinery/appliance/mixer/cereal + board_type = new /datum/frame/frame_types/cerealmaker + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/candymachine + name = T_BOARD("candy machine") + desc = "The circuitboard for a candy machine." + build_path = /obj/machinery/appliance/mixer/candy + board_type = new /datum/frame/frame_types/candymachine + req_components = list( + /obj/item/weapon/stock_parts/capacitor = 3, + /obj/item/weapon/stock_parts/scanning_module = 1, + /obj/item/weapon/stock_parts/matter_bin = 2) + +/obj/item/weapon/circuitboard/microwave/advanced + name = T_BOARD("deluxe microwave") + build_path = /obj/machinery/microwave/advanced + board_type = new /datum/frame/frame_types/microwave + matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) + req_components = list( + /obj/item/weapon/stock_parts/console_screen = 1, + /obj/item/weapon/stock_parts/motor = 1, + /obj/item/weapon/stock_parts/capacitor = 1) \ No newline at end of file diff --git a/code/game/objects/items/weapons/material/ashtray.dm b/code/game/objects/items/weapons/material/ashtray.dm index 5cd017f005..95e558b36a 100644 --- a/code/game/objects/items/weapons/material/ashtray.dm +++ b/code/game/objects/items/weapons/material/ashtray.dm @@ -46,7 +46,7 @@ var/global/list/ashtray_cache = list() /obj/item/weapon/material/ashtray/attackby(obj/item/weapon/W as obj, mob/user as mob) if (health <= 0) return - if (istype(W,/obj/item/weapon/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/weapon/flame/match)) + if (istype(W,/obj/item/trash/cigbutt) || istype(W,/obj/item/clothing/mask/smokable/cigarette) || istype(W, /obj/item/weapon/flame/match)) if (contents.len >= max_butts) to_chat(user, "\The [src] is full.") return diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index 926255c620..f1003c451b 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -209,7 +209,7 @@ throwforce = 2 slot_flags = SLOT_BELT storage_slots = 6 - can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/weapon/cigbutt) + can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter, /obj/item/trash/cigbutt) icon_type = "cigarette" starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 6) var/brand = "\improper Trans-Stellar Duty-free" @@ -316,7 +316,7 @@ throwforce = 2 slot_flags = SLOT_BELT storage_slots = 7 - can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/weapon/cigbutt/cigarbutt) + can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar, /obj/item/trash/cigbutt/cigarbutt) icon_type = "cigar" starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 7) diff --git a/code/game/objects/items/weapons/tape.dm b/code/game/objects/items/weapons/tape.dm index 62153d440b..90b62ed07b 100644 --- a/code/game/objects/items/weapons/tape.dm +++ b/code/game/objects/items/weapons/tape.dm @@ -126,7 +126,7 @@ return 1 /obj/item/weapon/tape_roll/proc/stick(var/obj/item/weapon/W, mob/user) - if(!istype(W, /obj/item/weapon/paper)) + if(!istype(W, /obj/item/weapon/paper) || istype(W, /obj/item/weapon/paper/sticky) || !user.unEquip(W)) return user.drop_from_inventory(W) var/obj/item/weapon/ducttape/tape = new(get_turf(src)) diff --git a/code/game/objects/random/_random.dm b/code/game/objects/random/_random.dm index 8b616c83f5..67f82ea155 100644 --- a/code/game/objects/random/_random.dm +++ b/code/game/objects/random/_random.dm @@ -48,7 +48,6 @@ var/list/random_useful_ if(prob(70)) // Misc. junk if(!random_junk_) random_junk_ = subtypesof(/obj/item/trash) - random_junk_ += typesof(/obj/item/weapon/cigbutt) random_junk_ += /obj/effect/decal/cleanable/spiderling_remains random_junk_ += /obj/effect/decal/remains/mouse random_junk_ += /obj/effect/decal/remains/robot diff --git a/code/game/objects/random/mapping.dm b/code/game/objects/random/mapping.dm index bc6d29a5a5..230b4ff3d2 100644 --- a/code/game/objects/random/mapping.dm +++ b/code/game/objects/random/mapping.dm @@ -34,6 +34,36 @@ /obj/effect/decal/cleanable/dirt, /obj/effect/decal/remains/robot) +/obj/random/crate //Random 'standard' crates for variety in maintenance spawns. + name = "random crate" + desc = "This is a random crate" + icon = 'icons/obj/closets/bases/crate.dmi' + icon_state = "base" + +/obj/random/crate/item_to_spawn() //General crates, excludes some more high-grade and medical brands + return pick (/obj/structure/closet/crate/plastic, + /obj/structure/closet/crate/aether, + /obj/structure/closet/crate/centauri, + /obj/structure/closet/crate/einstein, + /obj/structure/closet/crate/focalpoint, + /obj/structure/closet/crate/gilthari, + /obj/structure/closet/crate/grayson, + /obj/structure/closet/crate/nanotrasen, + /obj/structure/closet/crate/nanothreads, + /obj/structure/closet/crate/oculum, + /obj/structure/closet/crate/ward, + /obj/structure/closet/crate/xion, + /obj/structure/closet/crate/zenghu, + /obj/structure/closet/crate/allico, + /obj/structure/closet/crate/carp, + /obj/structure/closet/crate/galaksi, + /obj/structure/closet/crate/thinktronic, + /obj/structure/closet/crate/ummarcar, + /obj/structure/closet/crate/unathi, + /obj/structure/closet/crate/hydroponics, + /obj/structure/closet/crate/engineering, + /obj/structure/closet/crate) + /obj/random/obstruction //Large objects to block things off in maintenance name = "random obstruction" desc = "This is a random obstruction." diff --git a/code/game/objects/random/misc.dm b/code/game/objects/random/misc.dm index 944c1145ad..07a5d46efb 100644 --- a/code/game/objects/random/misc.dm +++ b/code/game/objects/random/misc.dm @@ -542,8 +542,8 @@ /obj/item/device/assembly/mousetrap/armed, /obj/effect/decal/cleanable/spiderling_remains, /obj/effect/decal/cleanable/ash, - /obj/item/weapon/cigbutt, - /obj/item/weapon/cigbutt/cigarbutt, + /obj/item/trash/cigbutt, + /obj/item/trash/cigbutt/cigarbutt, /obj/effect/decal/remains/mouse) /obj/random/janusmodule diff --git a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm index c158ea0b83..b90a7961e2 100644 --- a/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm +++ b/code/game/objects/structures/crates_lockers/_closets_appearance_definitions.dm @@ -761,8 +761,210 @@ "lid_stripes" = COLOR_NT_RED ) +// Freezers + /decl/closet_appearance/crate/freezer + color = COLOR_OFF_WHITE + +/decl/closet_appearance/crate/freezer/centauri color = COLOR_BABY_BLUE + extra_decals = list( + "centauri" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/freezer/nanotrasen + color = COLOR_BABY_BLUE + extra_decals = list( + "nano" = COLOR_OFF_WHITE + ) + +// Corporate Branding + +/decl/closet_appearance/crate/aether + color = COLOR_YELLOW_GRAY + decals = list( + "crate_stripes" = COLOR_BLUE_LIGHT, + "aether" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/allico + color = COLOR_LIGHT_VIOLET + decals = list( + "crate_stripe" = COLOR_AMBER + ) + +/decl/closet_appearance/crate/carp + color = COLOR_PURPLE + decals = list( + "toptext" = COLOR_OFF_WHITE, + "crate_reticle" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/centauri + color = COLOR_BABY_BLUE + decals = list( + "crate_stripe" = COLOR_LUMINOL + ) + extra_decals = list( + "centauri" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/cybersolutions + color = COLOR_ALUMINIUM + extra_decals = list( + "hazard" = COLOR_DARK_GOLD, + "toptext" = COLOR_DARK_GOLD + ) + +/decl/closet_appearance/crate/einstein + color = COLOR_DARK_BLUE_GRAY + extra_decals = list( + "crate_stripe_left" = COLOR_BEIGE, + "crate_stripe_right" = COLOR_BEIGE, + "einstein" = COLOR_OFF_WHITE, + "hazard" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/focalpoint + color = COLOR_GOLD + extra_decals = list( + "crate_stripe_left" = COLOR_NAVY_BLUE, + "crate_stripe_right" = COLOR_NAVY_BLUE, + "focal" = COLOR_OFF_WHITE, + "hazard" = COLOR_NAVY_BLUE + ) + +/decl/closet_appearance/crate/galaksi + color = COLOR_OFF_WHITE + decals = list( + "lid_stripes" = COLOR_HULL, + "galaksi" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/gilthari + color = COLOR_GRAY20 + extra_decals = list( + "crate_stripe_left" = COLOR_GOLD, + "crate_stripe_right" = COLOR_GOLD, + "gilthari" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/grayson + color = COLOR_STEEL + extra_decals = list( + "crate_stripe_left" = COLOR_MAROON, + "crate_stripe_right" = COLOR_MAROON, + "grayson" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/heph + color = COLOR_GRAY20 + extra_decals = list( + "crate_stripe_left" = COLOR_NT_RED, + "crate_stripe_right" = COLOR_NT_RED, + "heph" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/morpheus + color = COLOR_ALUMINIUM + extra_decals = list( + "hazard" = COLOR_GUNMETAL, + "toptext" = COLOR_GUNMETAL + ) + +/decl/closet_appearance/crate/nanotrasen + color = COLOR_NT_RED + extra_decals = list( + "crate_stripe_left" = COLOR_OFF_WHITE, + "crate_stripe_right" = COLOR_OFF_WHITE, + "nano" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/nanotrasenclothing + color = COLOR_NT_RED + extra_decals = list( + "crate_stripe_left" = COLOR_SEDONA, + "crate_stripe_right" = COLOR_SEDONA, + "nano" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/nanotrasenmedical + color = COLOR_OFF_WHITE + extra_decals = list( + "crate_stripe" = COLOR_NT_RED, + "nano" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/oculum + color = COLOR_SURGERY_BLUE + decals = list( + "crate_stripe_left" = COLOR_OFF_WHITE, + "crate_stripe_right" = COLOR_OFF_WHITE, + "oculum" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/saare + color = COLOR_ALUMINIUM + extra_decals = list( + "hazard" = COLOR_RED, + "xion" = COLOR_GRAY40 + ) + +/decl/closet_appearance/crate/thinktronic + color = COLOR_PALE_PURPLE_GRAY + decals = list( + "toptext" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/ummarcar + color = COLOR_BEIGE + decals = list( + "crate_stripes" = COLOR_OFF_WHITE, + "toptext" = COLOR_GRAY20 + ) + +/decl/closet_appearance/crate/unathiimport + color = COLOR_SILVER + decals = list( + "crate_stripe" = COLOR_RED, + "crate_reticle" = COLOR_RED_GRAY + ) + +/decl/closet_appearance/crate/veymed + color = COLOR_OFF_WHITE + decals = list( + "crate_stripe" = COLOR_PALE_BTL_GREEN + ) + extra_decals = list( + "lid_stripes" = COLOR_RED, + "crate_cross" = COLOR_GREEN + ) + +/decl/closet_appearance/crate/ward + color = COLOR_OFF_WHITE + extra_decals = list( + "crate_stripe_left" = COLOR_COMMAND_BLUE, + "crate_stripe_right" = COLOR_COMMAND_BLUE, + "hazard" = COLOR_OFF_WHITE, + "wt" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/xion + color = COLOR_ORANGE + extra_decals = list( + "crate_stripes" = COLOR_OFF_WHITE, + "xion" = COLOR_OFF_WHITE, + "hazard" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/zenghu + color = COLOR_OFF_WHITE + extra_decals = list( + "crate_stripes" = COLOR_RED, + "zenghu" = COLOR_OFF_WHITE + ) + +// Secure Crates /decl/closet_appearance/crate/secure can_lock = TRUE @@ -775,7 +977,8 @@ extra_decals = list( "crate_stripe_left" = COLOR_OFF_WHITE, "crate_stripe_right" = COLOR_OFF_WHITE, - "toxin" = COLOR_OFF_WHITE + "toxin" = COLOR_OFF_WHITE, + "nano" = COLOR_OFF_WHITE ) /decl/closet_appearance/crate/secure/weapon @@ -789,16 +992,61 @@ "hazard" = COLOR_OFF_WHITE ) -/decl/closet_appearance/crate/secure/heph - color = COLOR_GRAY20 +// Secure corporate branding + +/decl/closet_appearance/crate/secure/aether + color = COLOR_YELLOW_GRAY decals = list( "crate_bracing" ) extra_decals = list( - "crate_stripe_left" = COLOR_NT_RED, - "crate_stripe_right" = COLOR_NT_RED, - "hazard" = COLOR_OFF_WHITE, - "heph" = COLOR_OFF_WHITE + "crate_stripes" = COLOR_BLUE_LIGHT, + "aether" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/bishop + color = COLOR_OFF_WHITE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_SKY_BLUE, + "crate_stripe_right" = COLOR_SKY_BLUE, + "bishop" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/cybersolutions + color = COLOR_ALUMINIUM + decals = list( + "crate_bracing" + ) + extra_decals = list( + "hazard" = COLOR_DARK_GOLD, + "toptext" = COLOR_DARK_GOLD + ) + +/decl/closet_appearance/crate/secure/einstein + color = COLOR_DARK_BLUE_GRAY + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_BEIGE, + "crate_stripe_right" = COLOR_BEIGE, + "einstein" = COLOR_OFF_WHITE, + "hazard" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/focalpoint + color = COLOR_GOLD + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_NAVY_BLUE, + "crate_stripe_right" = COLOR_NAVY_BLUE, + "focal" = COLOR_OFF_WHITE, + "hazard" = COLOR_NAVY_BLUE ) /decl/closet_appearance/crate/secure/gilthari @@ -813,16 +1061,15 @@ "gilthari" = COLOR_OFF_WHITE ) -/decl/closet_appearance/crate/secure/ward - color = COLOR_OFF_WHITE +/decl/closet_appearance/crate/secure/grayson + color = COLOR_STEEL decals = list( "crate_bracing" ) extra_decals = list( - "crate_stripe_left" = COLOR_COMMAND_BLUE, - "crate_stripe_right" = COLOR_COMMAND_BLUE, - "hazard" = COLOR_OFF_WHITE, - "wt" = COLOR_OFF_WHITE + "crate_stripe_left" = COLOR_MAROON, + "crate_stripe_right" = COLOR_MAROON, + "grayson" = COLOR_OFF_WHITE ) /decl/closet_appearance/crate/secure/hedberg @@ -837,6 +1084,18 @@ "hedberg" = COLOR_OFF_WHITE ) +/decl/closet_appearance/crate/secure/heph + color = COLOR_GRAY20 + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_NT_RED, + "crate_stripe_right" = COLOR_NT_RED, + "hazard" = COLOR_OFF_WHITE, + "heph" = COLOR_OFF_WHITE + ) + /decl/closet_appearance/crate/secure/lawson color = COLOR_SAN_MARINO_BLUE decals = list( @@ -849,6 +1108,103 @@ "lawson" = COLOR_OFF_WHITE ) +/decl/closet_appearance/crate/secure/morpheus + color = COLOR_ALUMINIUM + decals = list( + "crate_bracing" + ) + extra_decals = list( + "hazard" = COLOR_GUNMETAL, + "toptext" = COLOR_GUNMETAL + ) + +/decl/closet_appearance/crate/secure/nanotrasen + color = COLOR_NT_RED + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_OFF_WHITE, + "crate_stripe_right" = COLOR_OFF_WHITE, + "nano" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/nanotrasenmedical + color = COLOR_OFF_WHITE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe" = COLOR_NT_RED, + "nano" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/saare + color = COLOR_ALUMINIUM + decals = list( + "crate_bracing" + ) + extra_decals = list( + "hazard" = COLOR_RED, + "xion" = COLOR_GRAY40 + ) + +/decl/closet_appearance/crate/secure/solgov + color = COLOR_SAN_MARINO_BLUE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_OFF_WHITE, + "crate_stripes" = COLOR_OFF_WHITE, + "hazard" = COLOR_OFF_WHITE, + "scg" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/veymed + color = COLOR_OFF_WHITE + decals = list( + "crate_bracing", + "crate_stripe" = COLOR_PALE_BTL_GREEN + ) + extra_decals = list( + "lid_stripes" = COLOR_RED, + "crate_cross" = COLOR_GREEN + ) + +/decl/closet_appearance/crate/secure/ward + color = COLOR_OFF_WHITE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripe_left" = COLOR_COMMAND_BLUE, + "crate_stripe_right" = COLOR_COMMAND_BLUE, + "hazard" = COLOR_OFF_WHITE, + "wt" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/xion + color = COLOR_ORANGE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripes" = COLOR_OFF_WHITE, + "xion" = COLOR_OFF_WHITE, + "hazard" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/crate/secure/zenghu + color = COLOR_OFF_WHITE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "crate_stripes" = COLOR_RED, + "zenghu" = COLOR_OFF_WHITE + ) + /decl/closet_appearance/crate/secure/hydroponics extra_decals = list( "crate_stripe_left" = COLOR_GREEN_GRAY, @@ -869,6 +1225,7 @@ extra_decals = null /decl/closet_appearance/large_crate/critter + color = COLOR_BEIGE decals = list( "airholes" ) @@ -882,6 +1239,42 @@ "text" = COLOR_GREEN_GRAY ) +/decl/closet_appearance/large_crate/aether + color = COLOR_YELLOW_GRAY + decals = list( + "crate_bracing" + ) + extra_decals = list( + "text" = COLOR_BLUE_LIGHT + ) + +/decl/closet_appearance/large_crate/einstein + color = COLOR_DARK_BLUE_GRAY + decals = list( + "crate_bracing" + ) + extra_decals = list( + "text" = COLOR_BEIGE + ) + +/decl/closet_appearance/large_crate/nanotrasen + color = COLOR_NT_RED + decals = list( + "crate_bracing" + ) + extra_decals = list( + "text" = COLOR_OFF_WHITE + ) + +/decl/closet_appearance/large_crate/xion + color = COLOR_ORANGE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "text" = COLOR_OFF_WHITE + ) + /decl/closet_appearance/large_crate/secure can_lock = TRUE @@ -895,6 +1288,46 @@ "text_upper" = COLOR_OFF_WHITE ) +/decl/closet_appearance/large_crate/secure/aether + color = COLOR_YELLOW_GRAY + decals = list( + "crate_bracing" + ) + extra_decals = list( + "marking" = COLOR_OFF_WHITE, + "text_upper" = COLOR_BLUE_LIGHT + ) + +/decl/closet_appearance/large_crate/secure/einstein + color = COLOR_DARK_BLUE_GRAY + decals = list( + "crate_bracing" + ) + extra_decals = list( + "marking" = COLOR_OFF_WHITE, + "text_upper" = COLOR_BEIGE + ) + +/decl/closet_appearance/large_crate/secure/heph + color = COLOR_GRAY20 + decals = list( + "crate_bracing" + ) + extra_decals = list( + "marking" = COLOR_NT_RED, + "text_upper" = COLOR_NT_RED + ) + +/decl/closet_appearance/large_crate/secure/xion + color = COLOR_ORANGE + decals = list( + "crate_bracing" + ) + extra_decals = list( + "marking" = COLOR_OFF_WHITE, + "text_upper" = COLOR_OFF_WHITE + ) + // Cabinets. /decl/closet_appearance/cabinet base_icon = 'icons/obj/closets/bases/cabinet.dmi' diff --git a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm index afb8b1c3ba..e1addc7b2f 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/freezer.dm @@ -4,7 +4,9 @@ starts_with = list( /obj/item/weapon/reagent_containers/food/condiment/flour = 7, - /obj/item/weapon/reagent_containers/food/condiment/sugar = 2) + /obj/item/weapon/reagent_containers/food/condiment/sugar = 2, + /obj/item/weapon/reagent_containers/food/condiment/spacespice = 2 + ) /obj/structure/closet/secure_closet/freezer/kitchen/mining req_access = list() diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 93a4e437e5..d9456d2457 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -6,6 +6,7 @@ icon = 'icons/obj/closets/bases/crate.dmi' closet_appearance = /decl/closet_appearance/crate climbable = 1 + dir = 4 //Spawn facing 'forward' by default. var/points_per_crate = 5 var/rigged = 0 @@ -65,6 +66,26 @@ update_icon() return 1 +/obj/structure/closet/crate/verb/rotate_clockwise() + set name = "Rotate Crate Clockwise" + set category = "Object" + set src in oview(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 270)) + +/obj/structure/closet/crate/verb/rotate_counterclockwise() + set category = "Object" + set name = "Rotate Crate Counterclockwise" + set src in view(1) + + if (usr.stat || usr.restrained() || anchored) + return + + src.set_dir(turn(src.dir, 90)) + /obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob) if(opened) if(isrobot(user)) @@ -280,6 +301,14 @@ var/target_temp = T0C - 40 var/cooling_power = 40 +/obj/structure/closet/crate/freezer/centauri + desc = "A freezer stamped with the logo of Centauri Provisions." + closet_appearance = /decl/closet_appearance/crate/freezer/centauri + +/obj/structure/closet/crate/freezer/nanotrasen + desc = "A freezer stamped with the logo of NanoTrasen." + closet_appearance = /decl/closet_appearance/crate/freezer/nanotrasen + /obj/structure/closet/crate/freezer/return_air() var/datum/gas_mixture/gas = (..()) if(!gas) return null @@ -309,6 +338,11 @@ organ.preserved = 0 ..() +/obj/structure/closet/crate/weapon + name = "weapons crate" + desc = "A barely secured weapons crate." + closet_appearance = /decl/closet_appearance/crate/secure/weapon + /obj/structure/closet/crate/freezer/rations //Fpr use in the escape shuttle name = "emergency rations" desc = "A crate of emergency rations." @@ -316,21 +350,12 @@ starts_with = list( /obj/random/mre = 6) -/obj/structure/closet/crate/freezer/meat //Fpr use in the escape shuttle - name = "Bonfire storage" - desc = "A crate of emergency rations." - - starts_with = list( - /obj/item/weapon/reagent_containers/food/snacks/meat = 6) - - /obj/structure/closet/crate/bin name = "large bin" desc = "A large bin." closet_appearance = null icon = 'icons/obj/closets/largebin.dmi' - /obj/structure/closet/crate/radiation name = "radioactive gear crate" desc = "A crate with a radiation sign on it." @@ -340,27 +365,145 @@ /obj/item/clothing/suit/radiation = 4, /obj/item/clothing/head/radiation = 4) +//TSCs + +/obj/structure/closet/crate/aether + desc = "A crate painted in the colours of Aether Atmospherics and Recycling." + closet_appearance = /decl/closet_appearance/crate/aether + +/obj/structure/closet/crate/centauri + desc = "A crate decorated with the logo of Centauri Provisions." + closet_appearance = /decl/closet_appearance/crate/centauri + +/obj/structure/closet/crate/einstein + desc = "A crate labelled with an Einstein Engines sticker." + closet_appearance = /decl/closet_appearance/crate/einstein + +/obj/structure/closet/crate/focalpoint + desc = "A crate marked with the decal of Focal Point Energistics." + closet_appearance = /decl/closet_appearance/crate/focalpoint + +/obj/structure/closet/crate/gilthari + desc = "A crate embossed with the logo of Gilthari Exports." + closet_appearance = /decl/closet_appearance/crate/gilthari + +/obj/structure/closet/crate/grayson + desc = "A bare metal crate spraypainted with Grayson Manufactories decals." + closet_appearance = /decl/closet_appearance/crate/grayson + +/obj/structure/closet/crate/heph + desc = "A sturdy crate marked with the logo of Hephaestus Industries." + closet_appearance = /decl/closet_appearance/crate/heph + +/obj/structure/closet/crate/morpheus + desc = "A crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." + closet_appearance = /decl/closet_appearance/crate/morpheus + +/obj/structure/closet/crate/nanotrasen + desc = "A crate emblazoned with the standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/crate/nanotrasen + +/obj/structure/closet/crate/nanothreads + desc = "A crate emblazoned with the NanoThreads Garments livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/nanotrasenclothing + +/obj/structure/closet/crate/nanocare + desc = "A crate emblazoned with the NanoCare Medical livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/nanotrasenmedical + +/obj/structure/closet/crate/oculum + desc = "A crate minimally decorated with the logo of media giant Oculum Broadcast." + closet_appearance = /decl/closet_appearance/crate/oculum + +/obj/structure/closet/crate/veymed + desc = "A sterile crate extensively detailed in Veymed colours." + closet_appearance = /decl/closet_appearance/crate/veymed + +/obj/structure/closet/crate/ward + desc = "A crate decaled with the logo of Ward-Takahashi." + closet_appearance = /decl/closet_appearance/crate/ward + +/obj/structure/closet/crate/xion + desc = "A crate painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/crate/xion + +/obj/structure/closet/crate/zenghu + desc = "A sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." + closet_appearance = /decl/closet_appearance/crate/zenghu + +// Brands/subsidiaries + +/obj/structure/closet/crate/allico + desc = "A crate painted in the distinctive cheerful colours of AlliCo. Ltd." + closet_appearance = /decl/closet_appearance/crate/allico + +/obj/structure/closet/crate/carp + desc = "A crate painted with the garish livery of Consolidated Agricultural Resources Plc." + closet_appearance = /decl/closet_appearance/crate/carp + +/obj/structure/closet/crate/hedberg + name = "weapons crate" + desc = "A weapons crate stamped with the logo of Hedberg-Hammarstrom and the lock conspicuously absent." + closet_appearance = /decl/closet_appearance/crate/secure/hedberg + +/obj/structure/closet/crate/galaksi + desc = "A crate printed with the markings of Ward-Takahashi's Galaksi Appliance branding." + closet_appearance = /decl/closet_appearance/crate/galaksi + +/obj/structure/closet/crate/thinktronic + desc = "A crate printed with the markings of Thinktronic Systems." + closet_appearance = /decl/closet_appearance/crate/thinktronic + +/obj/structure/closet/crate/ummarcar + desc = "A flimsy crate marked labelled 'UmMarcar Office Supply'." + closet_appearance = /decl/closet_appearance/crate/ummarcar + +/obj/structure/closet/crate/unathi + name = "import crate" + desc = "A crate painted with the markings of Moghes Imported Sissalik Jerky." + closet_appearance = /decl/closet_appearance/crate/unathiimport + + +// Secure Crates /obj/structure/closet/crate/secure/weapon name = "weapons crate" desc = "A secure weapons crate." closet_appearance = /decl/closet_appearance/crate/secure/weapon +/obj/structure/closet/crate/secure/aether + desc = "A secure crate painted in the colours of Aether Atmospherics and Recycling." + closet_appearance = /decl/closet_appearance/crate/secure/aether + +/obj/structure/closet/crate/secure/bishop + desc = "A secure crate finely decorated with the emblem of Bishop Cybernetics." + closet_appearance = /decl/closet_appearance/crate/secure/bishop + +/obj/structure/closet/crate/secure/cybersolutions + desc = "An unadorned secure metal crate labelled 'Cyber Solutions'." + closet_appearance = /decl/closet_appearance/crate/secure/cybersolutions + +/obj/structure/closet/crate/secure/einstein + desc = "A secure crate labelled with an Einstein Engines sticker." + closet_appearance = /decl/closet_appearance/crate/secure/einstein + +/obj/structure/closet/crate/secure/focalpoint + desc = "A secure crate marked with the decal of Focal Point Energistics." + closet_appearance = /decl/closet_appearance/crate/secure/focalpoint + +/obj/structure/closet/crate/secure/gilthari + desc = "A secure crate embossed with the logo of Gilthari Exports." + closet_appearance = /decl/closet_appearance/crate/secure/gilthari + +/obj/structure/closet/crate/secure/grayson + desc = "A secure bare metal crate spraypainted with Grayson Manufactories decals." + closet_appearance = /decl/closet_appearance/crate/secure/grayson + /obj/structure/closet/crate/secure/hedberg name = "weapons crate" desc = "A secure weapons crate stamped with the logo of Hedberg-Hammarstrom." closet_appearance = /decl/closet_appearance/crate/secure/hedberg -/obj/structure/closet/crate/secure/gilthari - name = "weapons crate" - desc = "A secure weapons crate embossed with the logo of Gilthari Exports." - closet_appearance = /decl/closet_appearance/crate/secure/gilthari - -/obj/structure/closet/crate/secure/ward - name = "weapons crate" - desc = "A secure weapons crate decaled with the logo of Ward-Takahashi." - closet_appearance = /decl/closet_appearance/crate/secure/ward - /obj/structure/closet/crate/secure/heph name = "weapons crate" desc = "A secure weapons crate marked with the logo of Hephaestus Industries." @@ -371,9 +514,47 @@ desc = "A secure weapons crate marked with the logo of Lawson Arms." closet_appearance = /decl/closet_appearance/crate/secure/lawson +/obj/structure/closet/crate/secure/morpheus + desc = "A secure crate crudely imprinted with 'MORPHEUS CYBERKINETICS'." + closet_appearance = /decl/closet_appearance/crate/secure/morpheus + +/obj/structure/closet/crate/secure/nanotrasen + desc = "A secure crate emblazoned with the standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/crate/secure/nanotrasen + +/obj/structure/closet/crate/secure/nanocare + desc = "A secure crate emblazoned with the NanoCare Medical livery, a subsidary of the NanoTrasen Corporation." + closet_appearance = /decl/closet_appearance/crate/secure/nanotrasenmedical + +/obj/structure/closet/crate/secure/scg + name = "weapons crate" + desc = "A secure crate in the official colours of the Solar Confederate Government." + closet_appearance = /decl/closet_appearance/crate/secure/solgov + +/obj/structure/closet/crate/secure/saare + name = "weapons crate" + desc = "A secure weapons crate plainly stamped with the logo of Stealth Assault Enterprises." + closet_appearance = /decl/closet_appearance/crate/secure/saare + +/obj/structure/closet/crate/secure/veymed + desc = "A secure sterile crate extensively detailed in Veymed colours." + closet_appearance = /decl/closet_appearance/crate/secure/veymed + +/obj/structure/closet/crate/secure/ward + desc = "A secure crate decaled with the logo of Ward-Takahashi." + closet_appearance = /decl/closet_appearance/crate/secure/ward + +/obj/structure/closet/crate/secure/xion + desc = "A secure crate painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/crate/secure/xion + +/obj/structure/closet/crate/secure/zenghu + desc = "A secure sterile crate marked with the logo of Zeng-Hu Pharmaceuticals." + closet_appearance = /decl/closet_appearance/crate/secure/zenghu + /obj/structure/closet/crate/secure/phoron name = "phoron crate" - desc = "A secure phoron crate." + desc = "A secure phoron crate painted in standard NanoTrasen livery." closet_appearance = /decl/closet_appearance/crate/secure/hazard /obj/structure/closet/crate/secure/gear @@ -381,27 +562,24 @@ desc = "A secure gear crate." closet_appearance = /decl/closet_appearance/crate/secure/weapon - /obj/structure/closet/crate/secure/hydrosec name = "secure hydroponics crate" desc = "A crate with a lock on it, painted in the scheme of the station's botanists." closet_appearance = /decl/closet_appearance/crate/secure/hydroponics - /obj/structure/closet/crate/secure/engineering desc = "A crate with a lock on it, painted in the scheme of the station's engineers." name = "secure engineering crate" - /obj/structure/closet/crate/secure/science name = "secure science crate" desc = "A crate with a lock on it, painted in the scheme of the station's scientists." - /obj/structure/closet/crate/secure/bin name = "secure bin" desc = "A secure bin." +// Large crates /obj/structure/closet/crate/large name = "large crate" @@ -427,6 +605,30 @@ break return +/obj/structure/closet/crate/large/critter + name = "animal crate" + desc = "A hefty crate for hauling animals." + closet_appearance = /decl/closet_appearance/large_crate/critter + +/obj/structure/closet/crate/large/aether + name = "large atmospherics crate" + desc = "A hefty metal crate, painted in Aether Atmospherics and Recycling colours." + closet_appearance = /decl/closet_appearance/large_crate/aether + +/obj/structure/closet/crate/large/einstein + name = "large crate" + desc = "A hefty metal crate, painted in Einstein Engines colours." + closet_appearance = /decl/closet_appearance/large_crate/einstein + +/obj/structure/closet/crate/large/nanotrasen + name = "large crate" + desc = "A hefty metal crate, painted in standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/large_crate/nanotrasen + +/obj/structure/closet/crate/large/xion + name = "large crate" + desc = "A hefty metal crate, painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/large_crate/xion /obj/structure/closet/crate/secure/large name = "large crate" @@ -454,10 +656,30 @@ return -//fluff variant /obj/structure/closet/crate/secure/large/reinforced desc = "A hefty, reinforced metal crate with an electronic locking system." +/obj/structure/closet/crate/secure/large/aether + name = "secure atmospherics crate" + desc = "A hefty metal crate with an electronic locking system, painted in Aether Atmospherics and Recycling colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/aether + +/obj/structure/closet/crate/secure/large/einstein + desc = "A hefty metal crate with an electronic locking system, painted in Einstein Engines colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/einstein + +/obj/structure/closet/crate/large/secure/heph + desc = "A hefty metal crate with an electronic locking system, marked with Hephaestus Industries colours." + closet_appearance = /decl/closet_appearance/large_crate/secure/heph + +/obj/structure/closet/crate/secure/large/nanotrasen + desc = "A hefty metal crate with an electronic locking system, painted in standard NanoTrasen livery." + closet_appearance = /decl/closet_appearance/large_crate/secure/hazard + +/obj/structure/closet/crate/large/secure/xion + desc = "A hefty metal crate with an electronic locking system, painted in Xion Manufacturing Group orange." + closet_appearance = /decl/closet_appearance/large_crate/secure/xion + /obj/structure/closet/crate/engineering name = "engineering crate" diff --git a/code/game/objects/structures/crates_lockers/largecrate.dm b/code/game/objects/structures/crates_lockers/largecrate.dm index 29f1b231aa..7ed37d0620 100644 --- a/code/game/objects/structures/crates_lockers/largecrate.dm +++ b/code/game/objects/structures/crates_lockers/largecrate.dm @@ -44,8 +44,8 @@ /obj/structure/largecrate/hoverpod name = "\improper Hoverpod assembly crate" - desc = "It comes in a box for the fabricator's sake. Where does the wood come from? ... And why is it lighter?" - icon_state = "mulecrate" + desc = "You aren't sure how this crate is so light, but the Wulf Aeronautics logo might be a hint." + icon_state = "vehiclecrate" /obj/structure/largecrate/hoverpod/attackby(obj/item/weapon/W as obj, mob/user as mob) if(W.is_crowbar()) @@ -60,7 +60,7 @@ /obj/structure/largecrate/vehicle name = "vehicle crate" - desc = "It comes in a box for the consumer's sake. ..How is this lighter?" + desc = "Wulf Aeronautics says it comes in a box for the consumer's sake... How is this so light?" icon_state = "vehiclecrate" /obj/structure/largecrate/vehicle/Initialize() @@ -74,18 +74,22 @@ /obj/structure/largecrate/vehicle/quadbike name = "\improper ATV crate" + desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." starts_with = list(/obj/structure/vehiclecage/quadbike) /obj/structure/largecrate/vehicle/quadtrailer name = "\improper ATV trailer crate" + desc = "A hefty wooden crate proudly displaying the logo of Ward-Takahashi's automotive division." starts_with = list(/obj/structure/vehiclecage/quadtrailer) /obj/structure/largecrate/animal - icon_state = "lisacrate" //VOREStation Edit + icon_state = "crittercrate" + desc = "A hefty wooden crate with air holes. It is marked with the logo of NanoTrasen Pastures and the slogan, '90% less cloning defects* than competing brands**, or your money back***!'" /obj/structure/largecrate/animal/mulebot name = "Mulebot crate" - icon_state = "mulecrate" //VOREStation Edit + desc = "A hefty wooden crate labelled 'Proud Product of the Xion Manufacturing Group'" + icon_state = "mulecrate" starts_with = list(/mob/living/bot/mulebot) /obj/structure/largecrate/animal/corgi diff --git a/code/game/objects/structures/noticeboard.dm b/code/game/objects/structures/noticeboard.dm deleted file mode 100644 index 629bc1c41e..0000000000 --- a/code/game/objects/structures/noticeboard.dm +++ /dev/null @@ -1,98 +0,0 @@ -/obj/structure/noticeboard - name = "notice board" - desc = "A board for pinning important notices upon." - icon = 'icons/obj/stationobjs.dmi' - icon_state = "nboard00" - density = 0 - anchored = 1 - var/notices = 0 - -/obj/structure/noticeboard/New(var/loc, var/dir, var/building = 0) - ..() - - if(building) - if(loc) - src.loc = loc - - pixel_x = (dir & 3)? 0 : (dir == 4 ? -32 : 32) - pixel_y = (dir & 3)? (dir ==1 ? -27 : 27) : 0 - update_icon() - return - -/obj/structure/noticeboard/Initialize() - for(var/obj/item/I in loc) - if(notices > 4) break - if(istype(I, /obj/item/weapon/paper)) - I.loc = src - notices++ - icon_state = "nboard0[notices]" - . = ..() - -//attaching papers!! -/obj/structure/noticeboard/attackby(var/obj/item/weapon/O as obj, var/mob/user as mob) - if(istype(O, /obj/item/weapon/paper)) - if(notices < 5) - O.add_fingerprint(user) - add_fingerprint(user) - user.drop_from_inventory(O) - O.loc = src - notices++ - icon_state = "nboard0[notices]" //update sprite - to_chat(user, "You pin the paper to the noticeboard.") - else - to_chat(user, "You reach to pin your paper to the board but hesitate. You are certain your paper will not be seen among the many others already attached.") - if(O.is_wrench()) - to_chat(user, "You start to unwrench the noticeboard.") - playsound(src, O.usesound, 50, 1) - if(do_after(user, 15 * O.toolspeed)) - to_chat(user, "You unwrench the noticeboard.") - new /obj/item/frame/noticeboard( src.loc ) - qdel(src) - return - -/obj/structure/noticeboard/attack_hand(var/mob/user) - user.examinate(src) - -// Since Topic() never seems to interact with usr on more than a superficial -// level, it should be fine to let anyone mess with the board other than ghosts. -/obj/structure/noticeboard/examine(var/mob/user) - . = ..() - if(Adjacent(user)) - var/dat = "Noticeboard
" - for(var/obj/item/weapon/paper/P in src) - dat += "[P.name] Write Remove
" - user << browse("Notices[dat]","window=noticeboard") - onclose(user, "noticeboard") - -/obj/structure/noticeboard/Topic(href, href_list) - ..() - usr.set_machine(src) - if(href_list["remove"]) - if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["remove"]) - if(P && P.loc == src) - P.loc = get_turf(src) //dump paper on the floor because you're a clumsy fuck - P.add_fingerprint(usr) - add_fingerprint(usr) - notices-- - icon_state = "nboard0[notices]" - if(href_list["write"]) - if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open - return - var/obj/item/P = locate(href_list["write"]) - if((P && P.loc == src)) //ifthe paper's on the board - var/mob/living/M = usr - if(istype(M)) - var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen) - if(E) - add_fingerprint(M) - P.attackby(E, usr) - else - to_chat(M, "You'll need something to write with!") - if(href_list["read"]) - var/obj/item/weapon/paper/P = locate(href_list["read"]) - if((P && P.loc == src)) - usr << browse("[P.name][P.info]", "window=[P.name]") - onclose(usr, "[P.name]") - return diff --git a/code/game/objects/stumble_into_vr.dm b/code/game/objects/stumble_into_vr.dm index 1493323af1..2a747ae563 100644 --- a/code/game/objects/stumble_into_vr.dm +++ b/code/game/objects/stumble_into_vr.dm @@ -89,7 +89,7 @@ ..() bumpopen(M) -/obj/machinery/cooker/fryer/stumble_into(mob/living/M) +/obj/machinery/appliance/cooker/fryer/stumble_into(mob/living/M) visible_message("[M] [pick("ran", "slammed")] into \the [src]!") M.apply_damage(15, BURN) M.Weaken(5) diff --git a/code/game/sound.dm b/code/game/sound.dm index 7b16e0fd80..c5846c39eb 100644 --- a/code/game/sound.dm +++ b/code/game/sound.dm @@ -253,6 +253,10 @@ 'sound/vore/sunesound/prey/death_07.ogg','sound/vore/sunesound/prey/death_08.ogg','sound/vore/sunesound/prey/death_09.ogg', 'sound/vore/sunesound/prey/death_10.ogg') //END VORESTATION EDIT + if ("terminal_type") + soundin = pick('sound/machines/terminal_button01.ogg', 'sound/machines/terminal_button02.ogg', 'sound/machines/terminal_button03.ogg', \ + 'sound/machines/terminal_button04.ogg', 'sound/machines/terminal_button05.ogg', 'sound/machines/terminal_button06.ogg', \ + 'sound/machines/terminal_button07.ogg', 'sound/machines/terminal_button08.ogg') return soundin //Are these even used? diff --git a/code/game/turfs/flooring/flooring.dm b/code/game/turfs/flooring/flooring.dm index a2f2b62b7f..7cdc1569c6 100644 --- a/code/game/turfs/flooring/flooring.dm +++ b/code/game/turfs/flooring/flooring.dm @@ -43,6 +43,7 @@ var/list/flooring_types var/descriptor = "tiles" var/flags var/can_paint + var/can_engrave = FALSE var/list/footstep_sounds = list() // key=species name, value = list of sounds, // For instance, footstep_sounds = list("key" = list(sound.ogg)) var/is_plating = FALSE @@ -320,6 +321,7 @@ var/list/flooring_types flags = TURF_REMOVE_CROWBAR | TURF_CAN_BREAK | TURF_CAN_BURN build_type = /obj/item/stack/tile/floor can_paint = 1 + can_engrave = TRUE footstep_sounds = list("human" = list( 'sound/effects/footstep/floor1.ogg', 'sound/effects/footstep/floor2.ogg', diff --git a/code/game/turfs/initialization/maintenance.dm b/code/game/turfs/initialization/maintenance.dm index 7347ec47db..9f1ed6dc86 100644 --- a/code/game/turfs/initialization/maintenance.dm +++ b/code/game/turfs/initialization/maintenance.dm @@ -28,7 +28,7 @@ var/global/list/random_junk return /obj/effect/decal/cleanable/generic if(!random_junk) random_junk = subtypesof(/obj/item/trash) - random_junk += typesof(/obj/item/weapon/cigbutt) + random_junk += typesof(/obj/item/trash/cigbutt) random_junk += /obj/effect/decal/cleanable/spiderling_remains random_junk += /obj/effect/decal/remains/mouse random_junk += /obj/effect/decal/remains/robot diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index ff2923005f..d5b64f4aad 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -73,6 +73,9 @@ /turf/simulated/floor/proc/make_plating(var/place_product, var/defer_icon_update) cut_overlays() + for(var/obj/effect/decal/writing/W in src) + qdel(W) + name = base_name desc = base_desc icon = base_icon @@ -103,6 +106,9 @@ for(var/obj/O in src) O.hide(O.hides_under_flooring() && floored_over) +/turf/simulated/floor/can_engrave() + return (!flooring || flooring.can_engrave) + /turf/simulated/floor/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) switch(passed_mode) if(RCD_FLOORWALL) diff --git a/code/game/turfs/simulated/floor_attackby.dm b/code/game/turfs/simulated/floor_attackby.dm index df13c2162c..9aa7ecce6d 100644 --- a/code/game/turfs/simulated/floor_attackby.dm +++ b/code/game/turfs/simulated/floor_attackby.dm @@ -1,4 +1,4 @@ -/turf/simulated/floor/attackby(obj/item/C as obj, mob/user as mob) +/turf/simulated/floor/attackby(var/obj/item/C, var/mob/user) if(!C || !user) return 0 @@ -9,6 +9,9 @@ attack_tile(C, L) // Be on help intent if you want to decon something. return + if(!(C.is_screwdriver() && flooring && (flooring.flags & TURF_REMOVE_SCREWDRIVER)) && try_graffiti(user, C)) + return + if(istype(C, /obj/item/stack/tile/roofing)) var/expended_tile = FALSE // To track the case. If a ceiling is built in a multiz zlevel, it also necessarily roofs it against weather var/turf/T = GetAbove(src) diff --git a/code/game/turfs/simulated/wall_attacks.dm b/code/game/turfs/simulated/wall_attacks.dm index 1ef11c40de..20267696f3 100644 --- a/code/game/turfs/simulated/wall_attacks.dm +++ b/code/game/turfs/simulated/wall_attacks.dm @@ -135,9 +135,13 @@ return success_smash(user) return fail_smash(user) -/turf/simulated/wall/attackby(obj/item/weapon/W as obj, mob/user as mob) +/turf/simulated/wall/attackby(var/obj/item/weapon/W, var/mob/user) user.setClickCooldown(user.get_attack_speed(W)) + + if(!construction_stage && try_graffiti(user, W)) + return + if (!user.IsAdvancedToolUser()) to_chat(user, "You don't have the dexterity to do this!") return diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index 1fc49d58a9..20c54b8fea 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -305,6 +305,9 @@ for(var/obj/machinery/door/airlock/phoron/D in range(3,src)) D.ignite(temperature/4) +/turf/simulated/wall/can_engrave() + return (material && material.hardness >= 10 && material.hardness <= 100) + /turf/simulated/wall/rcd_values(mob/living/user, obj/item/weapon/rcd/the_rcd, passed_mode) if(material.integrity > 1000) // Don't decon things like elevatorium. return FALSE diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index e93380d791..626ee68c71 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -42,7 +42,7 @@ //Lighting related luminosity = !(dynamic_lighting) has_opaque_atom |= (opacity) - + //Pathfinding related if(movement_cost && pathweight == 1) // This updates pathweight automatically. pathweight = movement_cost @@ -285,6 +285,47 @@ turf/attackby(obj/item/weapon/W as obj, mob/user as mob) /turf/AllowDrop() return TRUE +/turf/proc/can_engrave() + return FALSE + +/turf/proc/try_graffiti(var/mob/vandal, var/obj/item/tool) + + if(!tool.sharp || !can_engrave()) + return FALSE + + if(jobban_isbanned(vandal, "Graffiti")) + to_chat(vandal, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) + return + + var/too_much_graffiti = 0 + for(var/obj/effect/decal/writing/W in src) + too_much_graffiti++ + if(too_much_graffiti >= 5) + to_chat(vandal, "There's too much graffiti here to add more.") + return FALSE + + var/message = sanitize(input("Enter a message to engrave.", "Graffiti") as null|text, trim = TRUE) + if(!message) + return FALSE + + if(!vandal || vandal.incapacitated() || !Adjacent(vandal) || !tool.loc == vandal) + return FALSE + + vandal.visible_message("\The [vandal] begins carving something into \the [src].") + + if(!do_after(vandal, max(20, length(message)), src)) + return FALSE + + vandal.visible_message("\The [vandal] carves some graffiti into \the [src].") + var/obj/effect/decal/writing/graffiti = new(src) + graffiti.message = message + graffiti.author = vandal.ckey + + if(lowertext(message) == "elbereth") + to_chat(vandal, "You feel much safer.") + + return TRUE + // Returns false if stepping into a tile would cause harm (e.g. open space while unable to fly, water tile while a slime, lava, etc). /turf/proc/is_safe_to_enter(mob/living/L) if(LAZYLEN(dangerous_objects)) diff --git a/code/game/world.dm b/code/game/world.dm index 756c4ab81a..5509180fe1 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -108,6 +108,7 @@ var/world_topic_spam_protect_time = world.timeofday s["version"] = game_version s["mode"] = master_mode s["respawn"] = config.abandon_allowed + s["persistance"] = config.persistence_enabled s["enter"] = config.enter_allowed s["vote"] = config.allow_vote_mode s["ai"] = config.allow_ai @@ -410,6 +411,7 @@ var/world_topic_spam_protect_time = world.timeofday to_world("Rebooting world immediately due to host request") else Master.Shutdown() //run SS shutdowns + //processScheduler.stop() //VOREStation Removal for(var/client/C in GLOB.clients) if(config.server) //if you set a server location in config.txt, it sends you there instead of trying to reconnect to the same world address. -- NeoFite C << link("byond://[config.server]") @@ -527,6 +529,8 @@ var/world_topic_spam_protect_time = world.timeofday features += config.abandon_allowed ? "respawn" : "no respawn" + features += config.persistence_enabled ? "persistence enabled" : "persistence disabled" + if (config && config.allow_vote_mode) features += "vote" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index cf6ea072f0..3ee9ddccb4 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -933,6 +933,20 @@ var/datum/announcement/minor/admin_min_announcer = new world.update_status() feedback_add_details("admin_verb","TR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/datum/admins/proc/togglepersistence() + set category = "Server" + set desc="Whether persistent data will be saved from now on." + set name="Toggle Persistent Data" + config.persistence_enabled = !(config.persistence_enabled) + if(config.persistence_enabled) + to_world("Persistence is now enabled..") + else + to_world("Persistence is no longer enabled.") + message_admins("[key_name_admin(usr)] toggled persistence to [config.persistence_enabled ? "On" : "Off"].", 1) + log_admin("[key_name(usr)] toggled persistence to [config.persistence_enabled ? "On" : "Off"].") + world.update_status() + feedback_add_details("admin_verb","TPD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /datum/admins/proc/toggle_aliens() set category = "Server" set desc="Toggle alien mobs" diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm index 63d02af1f7..b576bec44a 100644 --- a/code/modules/admin/admin_verb_lists.dm +++ b/code/modules/admin/admin_verb_lists.dm @@ -166,6 +166,7 @@ var/list/admin_verbs_server = list( /datum/admins/proc/restart, /datum/admins/proc/delay, /datum/admins/proc/toggleaban, + /datum/admins/proc/togglepersistence, /client/proc/cmd_mod_say, /client/proc/toggle_log_hrefs, /datum/admins/proc/immreboot, @@ -354,6 +355,7 @@ var/list/admin_verbs_mod = list( /client/proc/allow_character_respawn, // Allows a ghost to respawn , /datum/admins/proc/sendFax, /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days, + /datum/admins/proc/view_persistent_data, /datum/admins/proc/view_txt_log, //shows the server log (diary) for today, /datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently, ) diff --git a/code/modules/admin/banjob.dm b/code/modules/admin/banjob.dm index 1a3781b0c5..0bfa4e516a 100644 --- a/code/modules/admin/banjob.dm +++ b/code/modules/admin/banjob.dm @@ -26,14 +26,18 @@ var/jobban_keylist[0] //to store the keys & ranks if(config.usewhitelist && !check_whitelist(M)) return "Whitelisted Job" - for (var/s in jobban_keylist) - if( findtext(s,"[M.ckey] - [rank]") == 1 ) - var/startpos = findtext(s, "## ")+3 - if(startpos && startpos You Cannot issue temporary job-bans!") + to_chat(usr, " You cannot issue temporary job-bans!") return if(config.ban_legacy_system) to_chat(usr, "Your server is using the legacy banning system, which does not support temporary job bans. Consider upgrading. Aborting ban.") diff --git a/code/modules/alarm/alarm.dm b/code/modules/alarm/alarm.dm index f8d853ca8c..30de8cc560 100644 --- a/code/modules/alarm/alarm.dm +++ b/code/modules/alarm/alarm.dm @@ -18,7 +18,6 @@ var/list/sources = new() //List of sources triggering the alarm. Used to determine when the alarm should be cleared. var/list/sources_assoc = new() //Associative list of source triggers. Used to efficiently acquire the alarm source. var/list/cameras //List of cameras that can be switched to, if the player has that capability. - var/cache_id //ID for camera cache, changed by invalidateCameraCache(). var/area/last_area //The last acquired area, used should origin be lost (for example a destroyed borg containing an alarming camera). var/area/last_name //The last acquired name, used should origin be lost var/area/last_camera_area //The last area in which cameras where fetched, used to see if the camera list should be updated. @@ -78,15 +77,10 @@ return last_name /datum/alarm/proc/cameras() - // reset camera cache - if(camera_repository.camera_cache_id != cache_id) - cameras = null - cache_id = camera_repository.camera_cache_id // If the alarm origin has changed area, for example a borg containing an alarming camera, reset the list of cameras - else if(cameras && (last_camera_area != alarm_area())) + if(cameras && (last_camera_area != alarm_area())) cameras = null - // The list of cameras is also reset by /proc/invalidateCameraCache() if(!cameras) cameras = origin ? origin.get_alarm_cameras() : last_area.get_alarm_cameras() diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 3d45fb4e62..ffc0f97738 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -109,8 +109,8 @@ Code: /obj/item/device/assembly/signaler/pulse(var/radio = 0) if(is_jammed(src)) return FALSE - if(src.connected && src.wires) - connected.Pulse(src) + if(connected && wires) + connected.pulse_assembly(src) else if(holder) holder.process_activation(src, 1, 0) else diff --git a/code/modules/asset_cache/asset_cache.dm b/code/modules/asset_cache/asset_cache.dm new file mode 100644 index 0000000000..53a30d4299 --- /dev/null +++ b/code/modules/asset_cache/asset_cache.dm @@ -0,0 +1,110 @@ +/* +Asset cache quick users guide: + +Make a datum in asset_list_items.dm with your assets for your thing. +Checkout asset_list.dm for the helper subclasses +The simple subclass will most like be of use for most cases. +Then call get_asset_datum() with the type of the datum you created and store the return +Then call .send(client) on that stored return value. + +Note: If your code uses output() with assets you will need to call asset_flush on the client and wait for it to return before calling output(). You only need do this if .send(client) returned TRUE +*/ + +//When sending mutiple assets, how many before we give the client a quaint little sending resources message +#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 + +//This proc sends the asset to the client, but only if it needs it. +//This proc blocks(sleeps) unless verify is set to false +/proc/send_asset(client/client, asset_name) + return send_asset_list(client, list(asset_name)) + +/// Sends a list of assets to a client +/// This proc will no longer block, use client.asset_flush() if you to need know when the client has all assets (such as for output()). (This is not required for browse() calls as they use the same message queue as asset sends) +/// client - a client or mob +/// asset_list - A list of asset filenames to be sent to the client. +/// Returns TRUE if any assets were sent. +/proc/send_asset_list(client/client, list/asset_list) + if(!istype(client)) + if(ismob(client)) + var/mob/M = client + if(M.client) + client = M.client + else + return + else + return + + var/list/unreceived = list() + + for (var/asset_name in asset_list) + var/datum/asset_cache_item/asset = SSassets.cache[asset_name] + if (!asset) + continue + var/asset_file = asset.resource + if (!asset_file) + continue + + var/asset_md5 = asset.md5 + if (client.sent_assets[asset_name] == asset_md5) + continue + unreceived[asset_name] = asset_md5 + + if (unreceived.len) + if (unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) + to_chat(client, "Sending Resources...") + + for(var/asset in unreceived) + var/datum/asset_cache_item/ACI + if ((ACI = SSassets.cache[asset])) + log_asset("Sending asset [asset] to client [client]") + client << browse_rsc(ACI.resource, asset) + + client.sent_assets |= unreceived + addtimer(CALLBACK(client, /client/proc/asset_cache_update_json), 1 SECONDS, TIMER_UNIQUE|TIMER_OVERRIDE) + return TRUE + return FALSE + +//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. +//The proc calls procs that sleep for long times. +/proc/getFilesSlow(client/client, list/files, register_asset = TRUE, filerate = 3) + var/startingfilerate = filerate + for(var/file in files) + if (!client) + break + if (register_asset) + register_asset(file, files[file]) + + if (send_asset(client, file)) + if (!(--filerate)) + filerate = startingfilerate + client.asset_flush() + stoplag(0) //queuing calls like this too quickly can cause issues in some client versions + +//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. +//icons and virtual assets get copied to the dyn rsc before use +/proc/register_asset(asset_name, asset) + var/datum/asset_cache_item/ACI = new(asset_name, asset) + + //this is technically never something that was supported and i want metrics on how often it happens if at all. + if (SSassets.cache[asset_name]) + var/datum/asset_cache_item/OACI = SSassets.cache[asset_name] + if (OACI.md5 != ACI.md5) + stack_trace("ERROR: new asset added to the asset cache with the same name as another asset: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]") + else + var/list/stacktrace = gib_stack_trace() + log_asset("WARNING: dupe asset added to the asset cache: [asset_name] existing asset md5: [OACI.md5] new asset md5:[ACI.md5]\n[stacktrace.Join("\n")]") + SSassets.cache[asset_name] = ACI + return ACI + +/// Returns the url of the asset, currently this is just its name, here to allow further work cdn'ing assets. +/// Can be given an asset as well, this is just a work around for buggy edge cases where two assets may have the same name, doesn't matter now, but it will when the cdn comes. +/proc/get_asset_url(asset_name, asset = null) + var/datum/asset_cache_item/ACI = SSassets.cache[asset_name] + return ACI?.url + +//Generated names do not include file extention. +//Used mainly for code that deals with assets in a generic way +//The same asset will always lead to the same asset name +/proc/generate_asset_name(file) + return "asset.[md5(fcopy_rsc(file))]" + diff --git a/code/modules/asset_cache/asset_cache_client.dm b/code/modules/asset_cache/asset_cache_client.dm new file mode 100644 index 0000000000..0f51520f13 --- /dev/null +++ b/code/modules/asset_cache/asset_cache_client.dm @@ -0,0 +1,51 @@ + +/// Process asset cache client topic calls for "asset_cache_confirm_arrival=[INT]" +/client/proc/asset_cache_confirm_arrival(job_id) + var/asset_cache_job = round(text2num(job_id)) + //because we skip the limiter, we have to make sure this is a valid arrival and not somebody tricking us into letting them append to a list without limit. + if (asset_cache_job > 0 && asset_cache_job <= last_asset_job && !(completed_asset_jobs["[asset_cache_job]"])) + completed_asset_jobs["[asset_cache_job]"] = TRUE + last_completed_asset_job = max(last_completed_asset_job, asset_cache_job) + else + return asset_cache_job || TRUE + + +/// Process asset cache client topic calls for "asset_cache_preload_data=[HTML+JSON_STRING] +/client/proc/asset_cache_preload_data(data) + /*var/jsonend = findtextEx(data, "{{{ENDJSONDATA}}}") + if (!jsonend) + CRASH("invalid asset_cache_preload_data, no jsonendmarker")*/ + //var/json = html_decode(copytext(data, 1, jsonend)) + var/json = data + var/list/preloaded_assets = json_decode(json) + + for (var/preloaded_asset in preloaded_assets) + if (copytext(preloaded_asset, findlasttext(preloaded_asset, ".")+1) in list("js", "jsm", "htm", "html")) + preloaded_assets -= preloaded_asset + continue + sent_assets |= preloaded_assets + + +/// Updates the client side stored html/json combo file used to keep track of what assets the client has between restarts/reconnects. +/client/proc/asset_cache_update_json(verify = FALSE, list/new_assets = list()) + if (world.time - connection_time < 10 SECONDS) //don't override the existing data file on a new connection + return + if (!islist(new_assets)) + new_assets = list("[new_assets]" = md5(SSassets.cache[new_assets])) + + src << browse(json_encode(new_assets|sent_assets), "file=asset_data.json&display=0") + +/// Blocks until all currently sending browser assets have been sent. +/// Due to byond limitations, this proc will sleep for 1 client round trip even if the client has no pending asset sends. +/// This proc will return an untrue value if it had to return before confirming the send, such as timeout or the client going away. +/client/proc/asset_flush(timeout = 50) + var/job = ++last_asset_job + var/t = 0 + var/timeout_time = timeout + src << browse({""}, "window=asset_cache_browser&file=asset_cache_send_verify.htm") + + while(!completed_asset_jobs["[job]"] && t < timeout_time) // Reception is handled in Topic() + stoplag(1) // Lock up the caller until this is received. + t++ + if (t < timeout_time) + return TRUE diff --git a/code/modules/asset_cache/asset_cache_item.dm b/code/modules/asset_cache/asset_cache_item.dm new file mode 100644 index 0000000000..5f02e561c6 --- /dev/null +++ b/code/modules/asset_cache/asset_cache_item.dm @@ -0,0 +1,23 @@ +/** + * # asset_cache_item + * + * An internal datum containing info on items in the asset cache. Mainly used to cache md5 info for speed. +**/ +/datum/asset_cache_item + var/name + var/url + var/md5 + var/resource + +/datum/asset_cache_item/New(name, file) + if (!isfile(file)) + file = fcopy_rsc(file) + md5 = md5(file) + if (!md5) + md5 = md5(fcopy_rsc(file)) + if (!md5) + CRASH("invalid asset sent to asset cache") + log_world("asset cache unexpected success of second fcopy_rsc") + src.name = name + url = name + resource = file diff --git a/code/modules/asset_cache/asset_list.dm b/code/modules/asset_cache/asset_list.dm new file mode 100644 index 0000000000..5cc16d06bc --- /dev/null +++ b/code/modules/asset_cache/asset_list.dm @@ -0,0 +1,260 @@ + +//These datums are used to populate the asset cache, the proc "register()" does this. +//Place any asset datums you create in asset_list_items.dm + +//all of our asset datums, used for referring to these later +GLOBAL_LIST_EMPTY(asset_datums) + +//get an assetdatum or make a new one +/proc/get_asset_datum(type) + return GLOB.asset_datums[type] || new type() + +/datum/asset + var/_abstract = /datum/asset + +/datum/asset/New() + GLOB.asset_datums[type] = src + register() + +/datum/asset/proc/get_url_mappings() + return list() + +/datum/asset/proc/register() + return + +/datum/asset/proc/send(client) + return + + +//If you don't need anything complicated. +/datum/asset/simple + _abstract = /datum/asset/simple + var/assets = list() + +/datum/asset/simple/register() + for(var/asset_name in assets) + assets[asset_name] = register_asset(asset_name, assets[asset_name]) + +/datum/asset/simple/send(client) + . = send_asset_list(client, assets) + +/datum/asset/simple/get_url_mappings() + . = list() + for (var/asset_name in assets) + var/datum/asset_cache_item/ACI = assets[asset_name] + if (!ACI) + continue + .[asset_name] = ACI.url + + +// For registering or sending multiple others at once +/datum/asset/group + _abstract = /datum/asset/group + var/list/children + +/datum/asset/group/register() + for(var/type in children) + get_asset_datum(type) + +/datum/asset/group/send(client/C) + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . = A.send(C) || . + +/datum/asset/group/get_url_mappings() + . = list() + for(var/type in children) + var/datum/asset/A = get_asset_datum(type) + . += A.get_url_mappings() + +// spritesheet implementation - coalesces various icons into a single .png file +// and uses CSS to select icons out of that file - saves on transferring some +// 1400-odd individual PNG files +#define SPR_SIZE 1 +#define SPR_IDX 2 +#define SPRSZ_COUNT 1 +#define SPRSZ_ICON 2 +#define SPRSZ_STRIPPED 3 + +/datum/asset/spritesheet + _abstract = /datum/asset/spritesheet + var/name + var/list/sizes = list() // "32x32" -> list(10, icon/normal, icon/stripped) + var/list/sprites = list() // "foo_bar" -> list("32x32", 5) + +/datum/asset/spritesheet/register() + if (!name) + CRASH("spritesheet [type] cannot register without a name") + ensure_stripped() + for(var/size_id in sizes) + var/size = sizes[size_id] + register_asset("[name]_[size_id].png", size[SPRSZ_STRIPPED]) + var/res_name = "spritesheet_[name].css" + var/fname = "data/spritesheets/[res_name]" + fdel(fname) + text2file(generate_css(), fname) + register_asset(res_name, fcopy_rsc(fname)) + fdel(fname) + +/datum/asset/spritesheet/send(client/C) + if (!name) + return + var/all = list("spritesheet_[name].css") + for(var/size_id in sizes) + all += "[name]_[size_id].png" + . = send_asset_list(C, all) + +/datum/asset/spritesheet/get_url_mappings() + if (!name) + return + . = list("spritesheet_[name].css" = get_asset_url("spritesheet_[name].css")) + for(var/size_id in sizes) + .["[name]_[size_id].png"] = get_asset_url("[name]_[size_id].png") + + + +/datum/asset/spritesheet/proc/ensure_stripped(sizes_to_strip = sizes) + for(var/size_id in sizes_to_strip) + var/size = sizes[size_id] + if (size[SPRSZ_STRIPPED]) + continue + + #ifdef RUST_G + // save flattened version + var/fname = "data/spritesheets/[name]_[size_id].png" + fcopy(size[SPRSZ_ICON], fname) + var/error = call(RUST_G, "dmi_strip_metadata")(fname) + if(length(error)) + stack_trace("Failed to strip [name]_[size_id].png: [error]") + size[SPRSZ_STRIPPED] = icon(fname) + fdel(fname) + #else + #warn It looks like you don't have RUST_G enabled. Without RUST_G, the RPD icons will not function, so it strongly recommended you reenable it. + #endif + +/datum/asset/spritesheet/proc/generate_css() + var/list/out = list() + + for (var/size_id in sizes) + var/size = sizes[size_id] + var/icon/tiny = size[SPRSZ_ICON] + out += ".[name][size_id]{display:inline-block;width:[tiny.Width()]px;height:[tiny.Height()]px;background:url('[get_asset_url("[name]_[size_id].png")]') no-repeat;}" + + for (var/sprite_id in sprites) + var/sprite = sprites[sprite_id] + var/size_id = sprite[SPR_SIZE] + var/idx = sprite[SPR_IDX] + var/size = sizes[size_id] + + var/icon/tiny = size[SPRSZ_ICON] + var/icon/big = size[SPRSZ_STRIPPED] + var/per_line = big.Width() / tiny.Width() + var/x = (idx % per_line) * tiny.Width() + var/y = round(idx / per_line) * tiny.Height() + + out += ".[name][size_id].[sprite_id]{background-position:-[x]px -[y]px;}" + + return out.Join("\n") + +/datum/asset/spritesheet/proc/Insert(sprite_name, icon/I, icon_state="", dir=SOUTH, frame=1, moving=FALSE) + I = icon(I, icon_state=icon_state, dir=dir, frame=frame, moving=moving) + if (!I || !length(icon_states(I))) // that direction or state doesn't exist + return + var/size_id = "[I.Width()]x[I.Height()]" + var/size = sizes[size_id] + + if (sprites[sprite_name]) + CRASH("duplicate sprite \"[sprite_name]\" in sheet [name] ([type])") + + if (size) + var/position = size[SPRSZ_COUNT]++ + var/icon/sheet = size[SPRSZ_ICON] + size[SPRSZ_STRIPPED] = null + sheet.Insert(I, icon_state=sprite_name) + sprites[sprite_name] = list(size_id, position) + else + sizes[size_id] = size = list(1, I, null) + sprites[sprite_name] = list(size_id, 0) + +/datum/asset/spritesheet/proc/InsertAll(prefix, icon/I, list/directions) + if (length(prefix)) + prefix = "[prefix]-" + + if (!directions) + directions = list(SOUTH) + + for (var/icon_state_name in icon_states(I)) + for (var/direction in directions) + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]-" : "" + Insert("[prefix][prefix2][icon_state_name]", I, icon_state=icon_state_name, dir=direction) + +/datum/asset/spritesheet/proc/css_tag() + return {""} + +/datum/asset/spritesheet/proc/css_filename() + return get_asset_url("spritesheet_[name].css") + +/datum/asset/spritesheet/proc/icon_tag(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {""} + +/datum/asset/spritesheet/proc/icon_class_name(sprite_name) + var/sprite = sprites[sprite_name] + if (!sprite) + return null + var/size_id = sprite[SPR_SIZE] + return {"[name][size_id] [sprite_name]"} + +#undef SPR_SIZE +#undef SPR_IDX +#undef SPRSZ_COUNT +#undef SPRSZ_ICON +#undef SPRSZ_STRIPPED + + +/datum/asset/spritesheet/simple + _abstract = /datum/asset/spritesheet/simple + var/list/assets + +/datum/asset/spritesheet/simple/register() + for (var/key in assets) + Insert(key, assets[key]) + ..() + +//Generates assets based on iconstates of a single icon +/datum/asset/simple/icon_states + _abstract = /datum/asset/simple/icon_states + var/icon + var/list/directions = list(SOUTH) + var/frame = 1 + var/movement_states = FALSE + + var/prefix = "default" //asset_name = "[prefix].[icon_state_name].png" + var/generic_icon_names = FALSE //generate icon filenames using generate_asset_name() instead the above format + +/datum/asset/simple/icon_states/register(_icon = icon) + for(var/icon_state_name in icon_states(_icon)) + for(var/direction in directions) + var/asset = icon(_icon, icon_state_name, direction, frame, movement_states) + if (!asset) + continue + asset = fcopy_rsc(asset) //dedupe + var/prefix2 = (directions.len > 1) ? "[dir2text(direction)]." : "" + var/asset_name = sanitize_filename("[prefix].[prefix2][icon_state_name].png") + if (generic_icon_names) + asset_name = "[generate_asset_name(asset)].png" + + register_asset(asset_name, asset) + +/datum/asset/simple/icon_states/multiple_icons + _abstract = /datum/asset/simple/icon_states/multiple_icons + var/list/icons + +/datum/asset/simple/icon_states/multiple_icons/register() + for(var/i in icons) + ..(i) + + diff --git a/code/modules/asset_cache/asset_list_items.dm b/code/modules/asset_cache/asset_list_items.dm new file mode 100644 index 0000000000..2b90000ea0 --- /dev/null +++ b/code/modules/asset_cache/asset_list_items.dm @@ -0,0 +1,445 @@ +//DEFINITIONS FOR ASSET DATUMS START HERE. + +/datum/asset/simple/tgui + assets = list( + "tgui.bundle.js" = 'tgui/packages/tgui/public/tgui.bundle.js', + "tgui.bundle.css" = 'tgui/packages/tgui/public/tgui.bundle.css', + ) + +// /datum/asset/simple/headers +// assets = list( +// "alarm_green.gif" = 'icons/program_icons/alarm_green.gif', +// "alarm_red.gif" = 'icons/program_icons/alarm_red.gif', +// "batt_5.gif" = 'icons/program_icons/batt_5.gif', +// "batt_20.gif" = 'icons/program_icons/batt_20.gif', +// "batt_40.gif" = 'icons/program_icons/batt_40.gif', +// "batt_60.gif" = 'icons/program_icons/batt_60.gif', +// "batt_80.gif" = 'icons/program_icons/batt_80.gif', +// "batt_100.gif" = 'icons/program_icons/batt_100.gif', +// "charging.gif" = 'icons/program_icons/charging.gif', +// "downloader_finished.gif" = 'icons/program_icons/downloader_finished.gif', +// "downloader_running.gif" = 'icons/program_icons/downloader_running.gif', +// "ntnrc_idle.gif" = 'icons/program_icons/ntnrc_idle.gif', +// "ntnrc_new.gif" = 'icons/program_icons/ntnrc_new.gif', +// "power_norm.gif" = 'icons/program_icons/power_norm.gif', +// "power_warn.gif" = 'icons/program_icons/power_warn.gif', +// "sig_high.gif" = 'icons/program_icons/sig_high.gif', +// "sig_low.gif" = 'icons/program_icons/sig_low.gif', +// "sig_lan.gif" = 'icons/program_icons/sig_lan.gif', +// "sig_none.gif" = 'icons/program_icons/sig_none.gif', +// "smmon_0.gif" = 'icons/program_icons/smmon_0.gif', +// "smmon_1.gif" = 'icons/program_icons/smmon_1.gif', +// "smmon_2.gif" = 'icons/program_icons/smmon_2.gif', +// "smmon_3.gif" = 'icons/program_icons/smmon_3.gif', +// "smmon_4.gif" = 'icons/program_icons/smmon_4.gif', +// "smmon_5.gif" = 'icons/program_icons/smmon_5.gif', +// "smmon_6.gif" = 'icons/program_icons/smmon_6.gif', +// "borg_mon.gif" = 'icons/program_icons/borg_mon.gif' +// ) + +// /datum/asset/simple/radar_assets +// assets = list( +// "ntosradarbackground.png" = 'icons/UI_Icons/tgui/ntosradar_background.png', +// "ntosradarpointer.png" = 'icons/UI_Icons/tgui/ntosradar_pointer.png', +// "ntosradarpointerS.png" = 'icons/UI_Icons/tgui/ntosradar_pointer_S.png' +// ) + +// /datum/asset/spritesheet/simple/pda +// name = "pda" +// assets = list( +// "atmos" = 'icons/pda_icons/pda_atmos.png', +// "back" = 'icons/pda_icons/pda_back.png', +// "bell" = 'icons/pda_icons/pda_bell.png', +// "blank" = 'icons/pda_icons/pda_blank.png', +// "boom" = 'icons/pda_icons/pda_boom.png', +// "bucket" = 'icons/pda_icons/pda_bucket.png', +// "medbot" = 'icons/pda_icons/pda_medbot.png', +// "floorbot" = 'icons/pda_icons/pda_floorbot.png', +// "cleanbot" = 'icons/pda_icons/pda_cleanbot.png', +// "crate" = 'icons/pda_icons/pda_crate.png', +// "cuffs" = 'icons/pda_icons/pda_cuffs.png', +// "eject" = 'icons/pda_icons/pda_eject.png', +// "flashlight" = 'icons/pda_icons/pda_flashlight.png', +// "honk" = 'icons/pda_icons/pda_honk.png', +// "mail" = 'icons/pda_icons/pda_mail.png', +// "medical" = 'icons/pda_icons/pda_medical.png', +// "menu" = 'icons/pda_icons/pda_menu.png', +// "mule" = 'icons/pda_icons/pda_mule.png', +// "notes" = 'icons/pda_icons/pda_notes.png', +// "power" = 'icons/pda_icons/pda_power.png', +// "rdoor" = 'icons/pda_icons/pda_rdoor.png', +// "reagent" = 'icons/pda_icons/pda_reagent.png', +// "refresh" = 'icons/pda_icons/pda_refresh.png', +// "scanner" = 'icons/pda_icons/pda_scanner.png', +// "signaler" = 'icons/pda_icons/pda_signaler.png', +// "skills" = 'icons/pda_icons/pda_skills.png', +// "status" = 'icons/pda_icons/pda_status.png', +// "dronephone" = 'icons/pda_icons/pda_dronephone.png', +// "emoji" = 'icons/pda_icons/pda_emoji.png' +// ) + +// /datum/asset/spritesheet/simple/paper +// name = "paper" +// assets = list( +// "stamp-clown" = 'icons/stamp_icons/large_stamp-clown.png', +// "stamp-deny" = 'icons/stamp_icons/large_stamp-deny.png', +// "stamp-ok" = 'icons/stamp_icons/large_stamp-ok.png', +// "stamp-hop" = 'icons/stamp_icons/large_stamp-hop.png', +// "stamp-cmo" = 'icons/stamp_icons/large_stamp-cmo.png', +// "stamp-ce" = 'icons/stamp_icons/large_stamp-ce.png', +// "stamp-hos" = 'icons/stamp_icons/large_stamp-hos.png', +// "stamp-rd" = 'icons/stamp_icons/large_stamp-rd.png', +// "stamp-cap" = 'icons/stamp_icons/large_stamp-cap.png', +// "stamp-qm" = 'icons/stamp_icons/large_stamp-qm.png', +// "stamp-law" = 'icons/stamp_icons/large_stamp-law.png', +// "stamp-chap" = 'icons/stamp_icons/large_stamp-chap.png', +// "stamp-mime" = 'icons/stamp_icons/large_stamp-mime.png', +// "stamp-centcom" = 'icons/stamp_icons/large_stamp-centcom.png', +// "stamp-syndicate" = 'icons/stamp_icons/large_stamp-syndicate.png' +// ) + + +// /datum/asset/simple/irv +// assets = list( +// "jquery-ui.custom-core-widgit-mouse-sortable-min.js" = 'html/IRV/jquery-ui.custom-core-widgit-mouse-sortable-min.js', +// ) + +// /datum/asset/group/irv +// children = list( +// /datum/asset/simple/jquery, +// /datum/asset/simple/irv +// ) + +/datum/asset/simple/generic + assets = list( + "search.js" = 'html/search.js', + "panels.css" = 'html/panels.css', + "loading.gif" = 'html/images/loading.gif', + "ntlogo.png" = 'html/images/ntlogo.png', + "sglogo.png" = 'html/images/sglogo.png', + "talisman.png" = 'html/images/talisman.png', + "paper_bg.png" = 'html/images/paper_bg.png', + "no_image32.png" = 'html/images/no_image32.png', + ) + +/datum/asset/simple/changelog + assets = list( + "88x31.png" = 'html/88x31.png', + "bug-minus.png" = 'html/bug-minus.png', + "cross-circle.png" = 'html/cross-circle.png', + "hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png', + "image-minus.png" = 'html/image-minus.png', + "image-plus.png" = 'html/image-plus.png', + "map-pencil.png" = 'html/map-pencil.png', + "music-minus.png" = 'html/music-minus.png', + "music-plus.png" = 'html/music-plus.png', + "tick-circle.png" = 'html/tick-circle.png', + "wrench-screwdriver.png" = 'html/wrench-screwdriver.png', + "spell-check.png" = 'html/spell-check.png', + "burn-exclamation.png" = 'html/burn-exclamation.png', + "chevron.png" = 'html/chevron.png', + "chevron-expand.png" = 'html/chevron-expand.png', + "changelog.css" = 'html/changelog.css', + "changelog.js" = 'html/changelog.js', + "changelog.html" = 'html/changelog.html' + ) + +// /datum/asset/group/goonchat +// children = list( +// /datum/asset/simple/jquery, +// /datum/asset/simple/goonchat, +// /datum/asset/spritesheet/goonchat, +// /datum/asset/simple/fontawesome +// ) + +// /datum/asset/simple/jquery +// assets = list( +// "jquery.min.js" = 'code/modules/goonchat/browserassets/js/jquery.min.js', +// ) + +// /datum/asset/simple/goonchat +// assets = list( +// "json2.min.js" = 'code/modules/goonchat/browserassets/js/json2.min.js', +// "browserOutput.js" = 'code/modules/goonchat/browserassets/js/browserOutput.js', +// "browserOutput.css" = 'code/modules/goonchat/browserassets/css/browserOutput.css', +// "browserOutput_white.css" = 'code/modules/goonchat/browserassets/css/browserOutput_white.css', +// ) + +/datum/asset/simple/fontawesome + assets = list( + "fa-regular-400.eot" = 'html/font-awesome/webfonts/fa-regular-400.eot', + "fa-regular-400.woff" = 'html/font-awesome/webfonts/fa-regular-400.woff', + "fa-solid-900.eot" = 'html/font-awesome/webfonts/fa-solid-900.eot', + "fa-solid-900.woff" = 'html/font-awesome/webfonts/fa-solid-900.woff', + "font-awesome.css" = 'html/font-awesome/css/all.min.css', + "v4shim.css" = 'html/font-awesome/css/v4-shims.min.css' + ) + +// /datum/asset/spritesheet/goonchat +// name = "chat" + +// /datum/asset/spritesheet/goonchat/register() +// InsertAll("emoji", 'icons/emoji.dmi') + +// // pre-loading all lanugage icons also helps to avoid meta +// InsertAll("language", 'icons/misc/language.dmi') +// // catch languages which are pulling icons from another file +// for(var/path in typesof(/datum/language)) +// var/datum/language/L = path +// var/icon = initial(L.icon) +// if (icon != 'icons/misc/language.dmi') +// var/icon_state = initial(L.icon_state) +// Insert("language-[icon_state]", icon, icon_state=icon_state) + +// ..() + +// /datum/asset/simple/permissions +// assets = list( +// "padlock.png" = 'html/padlock.png' +// ) + +// /datum/asset/simple/notes +// assets = list( +// "high_button.png" = 'html/high_button.png', +// "medium_button.png" = 'html/medium_button.png', +// "minor_button.png" = 'html/minor_button.png', +// "none_button.png" = 'html/none_button.png', +// ) + +// /datum/asset/simple/arcade +// assets = list( +// "boss1.gif" = 'icons/UI_Icons/Arcade/boss1.gif', +// "boss2.gif" = 'icons/UI_Icons/Arcade/boss2.gif', +// "boss3.gif" = 'icons/UI_Icons/Arcade/boss3.gif', +// "boss4.gif" = 'icons/UI_Icons/Arcade/boss4.gif', +// "boss5.gif" = 'icons/UI_Icons/Arcade/boss5.gif', +// "boss6.gif" = 'icons/UI_Icons/Arcade/boss6.gif', +// ) + +// /datum/asset/spritesheet/simple/achievements +// name ="achievements" +// assets = list( +// "default" = 'icons/UI_Icons/Achievements/default.png', +// "basemisc" = 'icons/UI_Icons/Achievements/basemisc.png', +// "baseboss" = 'icons/UI_Icons/Achievements/baseboss.png', +// "baseskill" = 'icons/UI_Icons/Achievements/baseskill.png', +// "bbgum" = 'icons/UI_Icons/Achievements/Boss/bbgum.png', +// "colossus" = 'icons/UI_Icons/Achievements/Boss/colossus.png', +// "hierophant" = 'icons/UI_Icons/Achievements/Boss/hierophant.png', +// "legion" = 'icons/UI_Icons/Achievements/Boss/legion.png', +// "miner" = 'icons/UI_Icons/Achievements/Boss/miner.png', +// "swarmer" = 'icons/UI_Icons/Achievements/Boss/swarmer.png', +// "tendril" = 'icons/UI_Icons/Achievements/Boss/tendril.png', +// "featofstrength" = 'icons/UI_Icons/Achievements/Misc/featofstrength.png', +// "helbital" = 'icons/UI_Icons/Achievements/Misc/helbital.png', +// "jackpot" = 'icons/UI_Icons/Achievements/Misc/jackpot.png', +// "meteors" = 'icons/UI_Icons/Achievements/Misc/meteors.png', +// "timewaste" = 'icons/UI_Icons/Achievements/Misc/timewaste.png', +// "upgrade" = 'icons/UI_Icons/Achievements/Misc/upgrade.png', +// "clownking" = 'icons/UI_Icons/Achievements/Misc/clownking.png', +// "clownthanks" = 'icons/UI_Icons/Achievements/Misc/clownthanks.png', +// "rule8" = 'icons/UI_Icons/Achievements/Misc/rule8.png', +// "snail" = 'icons/UI_Icons/Achievements/Misc/snail.png', +// "mining" = 'icons/UI_Icons/Achievements/Skills/mining.png', +// ) + +// /datum/asset/spritesheet/simple/pills +// name ="pills" +// assets = list( +// "pill1" = 'icons/UI_Icons/Pills/pill1.png', +// "pill2" = 'icons/UI_Icons/Pills/pill2.png', +// "pill3" = 'icons/UI_Icons/Pills/pill3.png', +// "pill4" = 'icons/UI_Icons/Pills/pill4.png', +// "pill5" = 'icons/UI_Icons/Pills/pill5.png', +// "pill6" = 'icons/UI_Icons/Pills/pill6.png', +// "pill7" = 'icons/UI_Icons/Pills/pill7.png', +// "pill8" = 'icons/UI_Icons/Pills/pill8.png', +// "pill9" = 'icons/UI_Icons/Pills/pill9.png', +// "pill10" = 'icons/UI_Icons/Pills/pill10.png', +// "pill11" = 'icons/UI_Icons/Pills/pill11.png', +// "pill12" = 'icons/UI_Icons/Pills/pill12.png', +// "pill13" = 'icons/UI_Icons/Pills/pill13.png', +// "pill14" = 'icons/UI_Icons/Pills/pill14.png', +// "pill15" = 'icons/UI_Icons/Pills/pill15.png', +// "pill16" = 'icons/UI_Icons/Pills/pill16.png', +// "pill17" = 'icons/UI_Icons/Pills/pill17.png', +// "pill18" = 'icons/UI_Icons/Pills/pill18.png', +// "pill19" = 'icons/UI_Icons/Pills/pill19.png', +// "pill20" = 'icons/UI_Icons/Pills/pill20.png', +// "pill21" = 'icons/UI_Icons/Pills/pill21.png', +// "pill22" = 'icons/UI_Icons/Pills/pill22.png', +// ) + +// //this exists purely to avoid meta by pre-loading all language icons. +// /datum/asset/language/register() +// for(var/path in typesof(/datum/language)) +// set waitfor = FALSE +// var/datum/language/L = new path () +// L.get_icon() + +/datum/asset/spritesheet/pipes + name = "pipes" + +/datum/asset/spritesheet/pipes/register() + for(var/each in list('icons/obj/pipe-item.dmi', 'icons/obj/pipes/disposal.dmi')) + InsertAll("", each, global.alldirs) + ..() + +// // Representative icons for each research design +// /datum/asset/spritesheet/research_designs +// name = "design" + +// /datum/asset/spritesheet/research_designs/register() +// for (var/path in subtypesof(/datum/design)) +// var/datum/design/D = path + +// var/icon_file +// var/icon_state +// var/icon/I + +// if(initial(D.research_icon) && initial(D.research_icon_state)) //If the design has an icon replacement skip the rest +// icon_file = initial(D.research_icon) +// icon_state = initial(D.research_icon_state) +// if(!(icon_state in icon_states(icon_file))) +// warning("design [D] with icon '[icon_file]' missing state '[icon_state]'") +// continue +// I = icon(icon_file, icon_state, SOUTH) + +// else +// // construct the icon and slap it into the resource cache +// var/atom/item = initial(D.build_path) +// if (!ispath(item, /atom)) +// // biogenerator outputs to beakers by default +// if (initial(D.build_type) & BIOGENERATOR) +// item = /obj/item/reagent_containers/glass/beaker/large +// else +// continue // shouldn't happen, but just in case + +// // circuit boards become their resulting machines or computers +// if (ispath(item, /obj/item/circuitboard)) +// var/obj/item/circuitboard/C = item +// var/machine = initial(C.build_path) +// if (machine) +// item = machine + +// icon_file = initial(item.icon) +// icon_state = initial(item.icon_state) + +// if(!(icon_state in icon_states(icon_file))) +// warning("design [D] with icon '[icon_file]' missing state '[icon_state]'") +// continue +// I = icon(icon_file, icon_state, SOUTH) + +// // computers (and snowflakes) get their screen and keyboard sprites +// if (ispath(item, /obj/machinery/computer) || ispath(item, /obj/machinery/power/solar_control)) +// var/obj/machinery/computer/C = item +// var/screen = initial(C.icon_screen) +// var/keyboard = initial(C.icon_keyboard) +// var/all_states = icon_states(icon_file) +// if (screen && (screen in all_states)) +// I.Blend(icon(icon_file, screen, SOUTH), ICON_OVERLAY) +// if (keyboard && (keyboard in all_states)) +// I.Blend(icon(icon_file, keyboard, SOUTH), ICON_OVERLAY) + +// Insert(initial(D.id), I) +// return ..() + +// /datum/asset/spritesheet/vending +// name = "vending" + +// /datum/asset/spritesheet/vending/register() +// for (var/k in GLOB.vending_products) +// var/atom/item = k +// if (!ispath(item, /atom)) +// continue + +// var/icon_file = initial(item.icon) +// var/icon_state = initial(item.icon_state) +// var/icon/I + +// var/icon_states_list = icon_states(icon_file) +// if(icon_state in icon_states_list) +// I = icon(icon_file, icon_state, SOUTH) +// var/c = initial(item.color) +// if (!isnull(c) && c != "#FFFFFF") +// I.Blend(c, ICON_MULTIPLY) +// else +// var/icon_states_string +// for (var/an_icon_state in icon_states_list) +// if (!icon_states_string) +// icon_states_string = "[json_encode(an_icon_state)](\ref[an_icon_state])" +// else +// icon_states_string += ", [json_encode(an_icon_state)](\ref[an_icon_state])" +// stack_trace("[item] does not have a valid icon state, icon=[icon_file], icon_state=[json_encode(icon_state)](\ref[icon_state]), icon_states=[icon_states_string]") +// I = icon('icons/turf/floors.dmi', "", SOUTH) + +// var/imgid = replacetext(replacetext("[item]", "/obj/item/", ""), "/", "-") + +// Insert(imgid, I) +// return ..() + +// /datum/asset/simple/genetics +// assets = list( +// "dna_discovered.gif" = 'html/dna_discovered.gif', +// "dna_undiscovered.gif" = 'html/dna_undiscovered.gif', +// "dna_extra.gif" = 'html/dna_extra.gif' +// ) + +// /datum/asset/simple/orbit +// assets = list( +// "ghost.png" = 'html/ghost.png' +// ) + +// /datum/asset/simple/vv +// assets = list( +// "view_variables.css" = 'html/admin/view_variables.css' +// ) + +// /datum/asset/spritesheet/sheetmaterials +// name = "sheetmaterials" + +// /datum/asset/spritesheet/sheetmaterials/register() +// InsertAll("", 'icons/obj/stack_objects.dmi') + +// // Special case to handle Bluespace Crystals +// Insert("polycrystal", 'icons/obj/telescience.dmi', "polycrystal") +// ..() + +/datum/asset/nanoui + var/list/common = list() + + var/list/common_dirs = list( + "nano/css/", + "nano/images/", + "nano/images/modular_computers/", + "nano/js/" + ) + var/list/template_dirs = list( + "nano/templates/" + ) + +/datum/asset/nanoui/register() + // Crawl the directories to find files. + for(var/path in common_dirs) + var/list/filenames = flist(path) + for(var/filename in filenames) + if(copytext(filename, length(filename)) != "/") // Ignore directories. + if(fexists(path + filename)) + common[filename] = fcopy_rsc(path + filename) + register_asset(filename, common[filename]) + // Combine all templates into a single bundle. + var/list/template_data = list() + for(var/path in template_dirs) + var/list/filenames = flist(path) + for(var/filename in filenames) + if(copytext(filename, length(filename) - 4) == ".tmpl") // Ignore directories. + template_data[filename] = file2text(path + filename) + var/template_bundle = "function nanouiTemplateBundle(){return [json_encode(template_data)];}" + var/fname = "data/nano_templates_bundle.js" + fdel(fname) + text2file(template_bundle, fname) + register_asset("nano_templates_bundle.js", fcopy_rsc(fname)) + fdel(fname) + +/datum/asset/nanoui/send(client) + send_asset_list(client, common) diff --git a/code/modules/asset_cache/validate_assets.html b/code/modules/asset_cache/validate_assets.html new file mode 100644 index 0000000000..b27a266c00 --- /dev/null +++ b/code/modules/asset_cache/validate_assets.html @@ -0,0 +1,29 @@ + + + + + + + + + + \ No newline at end of file diff --git a/code/modules/client/asset_cache.dm b/code/modules/client/asset_cache.dm deleted file mode 100644 index 2317cab19e..0000000000 --- a/code/modules/client/asset_cache.dm +++ /dev/null @@ -1,309 +0,0 @@ -/* -Asset cache quick users guide: - -Make a datum at the bottom of this file with your assets for your thing. -The simple subsystem will most like be of use for most cases. -Then call get_asset_datum() with the type of the datum you created and store the return -Then call .send(client) on that stored return value. - -You can set verify to TRUE if you want send() to sleep until the client has the assets. -*/ - - -// Amount of time(ds) MAX to send per asset, if this get exceeded we cancel the sleeping. -// This is doubled for the first asset, then added per asset after -#define ASSET_CACHE_SEND_TIMEOUT 7 - -//When sending mutiple assets, how many before we give the client a quaint little sending resources message -#define ASSET_CACHE_TELL_CLIENT_AMOUNT 8 - -//When passively preloading assets, how many to send at once? Too high creates noticable lag where as too low can flood the client's cache with "verify" files -#define ASSET_CACHE_PRELOAD_CONCURRENT 3 - -/client - var/list/cache = list() // List of all assets sent to this client by the asset cache. - var/list/completed_asset_jobs = list() // List of all completed jobs, awaiting acknowledgement. - var/list/sending = list() - var/last_asset_job = 0 // Last job done. - -//This proc sends the asset to the client, but only if it needs it. -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset(var/client/client, var/asset_name, var/verify = TRUE) - client = CLIENT_FROM_VAR(client) // Will get client from a mob, or accept a client, or return null - if(!istype(client)) - return 0 - - if(client.cache.Find(asset_name) || client.sending.Find(asset_name)) - return 0 - - client << browse_rsc(SSassets.cache[asset_name], asset_name) - if(!verify) // Can't access the asset cache browser, rip. - client.cache += asset_name - return 1 - - client.sending |= asset_name - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = (ASSET_CACHE_SEND_TIMEOUT * client.sending.len) + ASSET_CACHE_SEND_TIMEOUT - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= asset_name - client.cache |= asset_name - client.completed_asset_jobs -= job - - return 1 - -//This proc blocks(sleeps) unless verify is set to false -/proc/send_asset_list(var/client/client, var/list/asset_list, var/verify = TRUE) - client = CLIENT_FROM_VAR(client) // Will get client from a mob, or accept a client, or return null - if(!istype(client)) - return 0 - - var/list/unreceived = asset_list - (client.cache + client.sending) - if(!unreceived || !unreceived.len) - return 0 - if(unreceived.len >= ASSET_CACHE_TELL_CLIENT_AMOUNT) - to_chat(client, "Sending Resources...") - for(var/asset in unreceived) - if(asset in SSassets.cache) - client << browse_rsc(SSassets.cache[asset], asset) - - if(!verify) // Can't access the asset cache browser, rip. - client.cache += unreceived - return 1 - - client.sending |= unreceived - var/job = ++client.last_asset_job - - client << browse({" - - "}, "window=asset_cache_browser") - - var/t = 0 - var/timeout_time = ASSET_CACHE_SEND_TIMEOUT * client.sending.len - while(client && !client.completed_asset_jobs.Find(job) && t < timeout_time) // Reception is handled in Topic() - sleep(1) // Lock up the caller until this is received. - t++ - - if(client) - client.sending -= unreceived - client.cache |= unreceived - client.completed_asset_jobs -= job - - return 1 - -//This proc will download the files without clogging up the browse() queue, used for passively sending files on connection start. -//The proc calls procs that sleep for long times. -/proc/getFilesSlow(var/client/client, var/list/files, var/register_asset = TRUE) - var/concurrent_tracker = 1 - for(var/file in files) - if(!client) - break - if(register_asset) - register_asset(file, files[file]) - if(concurrent_tracker >= ASSET_CACHE_PRELOAD_CONCURRENT) - concurrent_tracker = 1 - send_asset(client, file) - else - concurrent_tracker++ - send_asset(client, file, verify = FALSE) - sleep(0) //queuing calls like this too quickly can cause issues in some client versions - -//This proc "registers" an asset, it adds it to the cache for further use, you cannot touch it from this point on or you'll fuck things up. -//if it's an icon or something be careful, you'll have to copy it before further use. -/proc/register_asset(var/asset_name, var/asset) - SSassets.cache[asset_name] = asset - -//These datums are used to populate the asset cache, the proc "register()" does this. - -//all of our asset datums, used for referring to these later -/var/global/list/asset_datums = list() - -//get a assetdatum or make a new one -/proc/get_asset_datum(var/type) - if(!(type in asset_datums)) - return new type() - return asset_datums[type] - -/datum/asset - var/_abstract = /datum/asset // Marker so we don't instanatiate abstract types - -/datum/asset/New() - asset_datums[type] = src - register() - -/datum/asset/proc/register() - return - -/datum/asset/proc/send(client) - return - -//If you don't need anything complicated. -/datum/asset/simple - _abstract = /datum/asset/simple - var/assets = list() - var/verify = FALSE - -/datum/asset/simple/register() - for(var/asset_name in assets) - register_asset(asset_name, assets[asset_name]) -/datum/asset/simple/send(client) - send_asset_list(client,assets,verify) - -// -// iconsheet Assets - For making lots of icon states available at once without sending a thousand tiny files. -// -/datum/asset/iconsheet - _abstract = /datum/asset/iconsheet - var/name // Name of the iconsheet. Asset will be named after this. - var/verify = FALSE - -/datum/asset/iconsheet/register(var/list/sprites) - if (!name) - CRASH("iconsheet [type] cannot register without a name") - if (!islist(sprites)) - CRASH("iconsheet [type] cannot register without a sprites list") - - var/res_name = "iconsheet_[name].css" - var/fname = "data/iconsheets/[res_name]" - fdel(fname) - text2file(generate_css(sprites), fname) - register_asset(res_name, fcopy_rsc(fname)) - fdel(fname) - -/datum/asset/iconsheet/send(client/C) - if (!name) - return - send_asset_list(C, list("iconsheet_[name].css"), verify) - -/datum/asset/iconsheet/proc/generate_css(var/list/sprites) - var/list/out = list(".[name]{display:inline-block;}") - for(var/sprite_id in sprites) - var/icon/I = sprites[sprite_id] - var/data_url = "'data:image/png;base64,[icon2base64(I)]'" - out += ".[name].[sprite_id]{width:[I.Width()]px;height:[I.Height()]px;background-image:url([data_url]);}" - return out.Join("\n") - -/datum/asset/iconsheet/proc/build_sprite_list(icon/I, list/directions, prefix = null) - if (length(prefix)) - prefix = "[prefix]-" - - if (!directions) - directions = list(SOUTH) - - var/sprites = list() - for (var/icon_state_name in cached_icon_states(I)) - for (var/direction in directions) - var/suffix = (directions.len > 1) ? "-[dir2text(direction)]" : "" - var/sprite_name = "[prefix][icon_state_name][suffix]" - var/icon/sprite = icon(I, icon_state=icon_state_name, dir=direction, frame=1, moving=FALSE) - if (!sprite || !length(cached_icon_states(sprite))) // that direction or state doesn't exist - continue - sprites[sprite_name] = sprite - return sprites - -// Get HTML link tag for including the iconsheet css file. -/datum/asset/iconsheet/proc/css_tag() - return "" - -// get HTML tag for showing an icon -/datum/asset/iconsheet/proc/icon_tag(icon_state, dir = SOUTH) - return "" - -//DEFINITIONS FOR ASSET DATUMS START HERE. -/datum/asset/simple/generic - assets = list( - "search.js" = 'html/search.js', - "panels.css" = 'html/panels.css', - "loading.gif" = 'html/images/loading.gif', - "ntlogo.png" = 'html/images/ntlogo.png', - "sglogo.png" = 'html/images/sglogo.png', - "talisman.png" = 'html/images/talisman.png', - "paper_bg.png" = 'html/images/paper_bg.png', - "no_image32.png" = 'html/images/no_image32.png', - ) - -/datum/asset/simple/changelog - assets = list( - "88x31.png" = 'html/88x31.png', - "bug-minus.png" = 'html/bug-minus.png', - "cross-circle.png" = 'html/cross-circle.png', - "hard-hat-exclamation.png" = 'html/hard-hat-exclamation.png', - "image-minus.png" = 'html/image-minus.png', - "image-plus.png" = 'html/image-plus.png', - "map-pencil.png" = 'html/map-pencil.png', - "music-minus.png" = 'html/music-minus.png', - "music-plus.png" = 'html/music-plus.png', - "tick-circle.png" = 'html/tick-circle.png', - "wrench-screwdriver.png" = 'html/wrench-screwdriver.png', - "spell-check.png" = 'html/spell-check.png', - "burn-exclamation.png" = 'html/burn-exclamation.png', - "chevron.png" = 'html/chevron.png', - "chevron-expand.png" = 'html/chevron-expand.png', - "changelog.css" = 'html/changelog.css', - "changelog.js" = 'html/changelog.js', - "changelog.html" = 'html/changelog.html' - ) - -/datum/asset/nanoui - var/list/common = list() - - var/list/common_dirs = list( - "nano/css/", - "nano/images/", - "nano/images/modular_computers/", - "nano/js/" - ) - var/list/template_dirs = list( - "nano/templates/" - ) - -/datum/asset/nanoui/register() - // Crawl the directories to find files. - for(var/path in common_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename)) != "/") // Ignore directories. - if(fexists(path + filename)) - common[filename] = fcopy_rsc(path + filename) - register_asset(filename, common[filename]) - // Combine all templates into a single bundle. - var/list/template_data = list() - for(var/path in template_dirs) - var/list/filenames = flist(path) - for(var/filename in filenames) - if(copytext(filename, length(filename) - 4) == ".tmpl") // Ignore directories. - template_data[filename] = file2text(path + filename) - var/template_bundle = "function nanouiTemplateBundle(){return [json_encode(template_data)];}" - var/fname = "data/nano_templates_bundle.js" - fdel(fname) - text2file(template_bundle, fname) - register_asset("nano_templates_bundle.js", fcopy_rsc(fname)) - fdel(fname) - -/datum/asset/nanoui/send(client) - send_asset_list(client, common) - - -// VOREStation Add Start - pipes iconsheet asset -/datum/asset/iconsheet/pipes - name = "pipes" - -/datum/asset/iconsheet/pipes/register() - var/list/sprites = list() - for (var/each in list('icons/obj/pipe-item.dmi', 'icons/obj/pipes/disposal.dmi')) - sprites += build_sprite_list(each, global.alldirs) - ..(sprites) -// VOREStation Add End diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 17c858d3a7..b55f8ce21b 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -59,3 +59,18 @@ preload_rsc = PRELOAD_RSC var/global/obj/screen/click_catcher/void + + // List of all asset filenames sent to this client by the asset cache, along with their assoicated md5s + var/list/sent_assets = list() + /// List of all completed blocking send jobs awaiting acknowledgement by send_asset + var/list/completed_asset_jobs = list() + /// Last asset send job id. + var/last_asset_job = 0 + var/last_completed_asset_job = 0 + + ///world.time they connected + var/connection_time + ///world.realtime they connected + var/connection_realtime + ///world.timeofday they connected + var/connection_timeofday diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 5bbc7f9b80..548ceaa74d 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -34,10 +34,12 @@ #endif + // asset_cache + var/asset_cache_job if(href_list["asset_cache_confirm_arrival"]) - var/job = text2num(href_list["asset_cache_confirm_arrival"]) - completed_asset_jobs += job - return + asset_cache_job = asset_cache_confirm_arrival(href_list["asset_cache_confirm_arrival"]) + if (!asset_cache_job) + return //search the href for script injection if( findtext(href," || [hsrc ? "[hsrc] " : ""][href]") + //byond bug ID:2256651 + if (asset_cache_job && (asset_cache_job in completed_asset_jobs)) + to_chat(src, "An error has been detected in how your client is receiving resources. Attempting to correct.... (If you keep seeing these messages you might want to close byond and reconnect)") + src << browse("...", "window=asset_cache_browser") + return + if (href_list["asset_cache_preload_data"]) + asset_cache_preload_data(href_list["asset_cache_preload_data"]) + return + switch(href_list["_src_"]) if("holder") hsrc = holder if("usr") hsrc = mob @@ -182,6 +197,10 @@ . = ..() //calls mob.Login() prefs.sanitize_preferences() + connection_time = world.time + connection_realtime = world.realtime + connection_timeofday = world.timeofday + if(custom_event_msg && custom_event_msg != "") to_chat(src, "

Custom Event

") to_chat(src, "

A custom event is taking place. OOC Info:

") @@ -409,8 +428,12 @@ //send resources to the client. It's here in its own proc so we can move it around easiliy if need be /client/proc/send_resources() spawn (10) //removing this spawn causes all clients to not get verbs. + + //load info on what assets the client has + src << browse('code/modules/asset_cache/validate_assets.html', "window=asset_cache_browser") + //Precache the client with all other assets slowly, so as to not block other browse() calls - getFilesSlow(src, SSassets.preload, register_asset = FALSE) + addtimer(CALLBACK(GLOBAL_PROC, /proc/getFilesSlow, src, SSassets.preload, FALSE), 5 SECONDS) mob/proc/MayRespawn() return 0 diff --git a/code/modules/client/preference_setup/global/01_ui.dm b/code/modules/client/preference_setup/global/01_ui.dm index a40155d2d5..4bb05121e1 100644 --- a/code/modules/client/preference_setup/global/01_ui.dm +++ b/code/modules/client/preference_setup/global/01_ui.dm @@ -9,6 +9,8 @@ S["ooccolor"] >> pref.ooccolor S["tooltipstyle"] >> pref.tooltipstyle S["client_fps"] >> pref.client_fps + S["tgui_fancy"] >> pref.tgui_fancy + S["tgui_lock"] >> pref.tgui_lock /datum/category_item/player_setup_item/player_global/ui/save_preferences(var/savefile/S) S["UI_style"] << pref.UI_style @@ -17,6 +19,8 @@ S["ooccolor"] << pref.ooccolor S["tooltipstyle"] << pref.tooltipstyle S["client_fps"] << pref.client_fps + S["tgui_fancy"] << pref.tgui_fancy + S["tgui_lock"] << pref.tgui_lock /datum/category_item/player_setup_item/player_global/ui/sanitize_preferences() pref.UI_style = sanitize_inlist(pref.UI_style, all_ui_styles, initial(pref.UI_style)) @@ -25,20 +29,24 @@ pref.ooccolor = sanitize_hexcolor(pref.ooccolor, initial(pref.ooccolor)) pref.tooltipstyle = sanitize_inlist(pref.tooltipstyle, all_tooltip_styles, initial(pref.tooltipstyle)) pref.client_fps = sanitize_integer(pref.client_fps, 0, MAX_CLIENT_FPS, initial(pref.client_fps)) + pref.tgui_fancy = sanitize_integer(pref.tgui_fancy, 0, 1, initial(pref.tgui_fancy)) + pref.tgui_lock = sanitize_integer(pref.tgui_lock, 0, 1, initial(pref.tgui_lock)) /datum/category_item/player_setup_item/player_global/ui/content(var/mob/user) . = "UI Style: [pref.UI_style]
" . += "Custom UI (recommended for White UI):
" - . += "-Color: [pref.UI_style_color] [color_square(hex = pref.UI_style_color)] reset
" - . += "-Alpha(transparency): [pref.UI_style_alpha] reset
" + . += "-Color: [pref.UI_style_color]�[color_square(hex = pref.UI_style_color)]�reset
" + . += "-Alpha(transparency): [pref.UI_style_alpha]�reset
" . += "Tooltip Style: [pref.tooltipstyle]
" . += "Client FPS: [pref.client_fps]
" + . += "tgui Window Mode: [(pref.tgui_fancy) ? "Fancy (default)" : "Compatible (slower)"]
" + . += "tgui Window Placement: [(pref.tgui_lock) ? "Primary Monitor" : "Free (default)"]
" if(can_select_ooc_color(user)) - . += "OOC Color: " + . += "OOC Color:�" if(pref.ooccolor == initial(pref.ooccolor)) . += "Using Default
" else - . += "[pref.ooccolor] [color_square(hex = pref.ooccolor)] reset
" + . += "[pref.ooccolor] [color_square(hex = pref.ooccolor)]�reset
" /datum/category_item/player_setup_item/player_global/ui/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["select_style"]) @@ -80,6 +88,14 @@ pref.client.fps = fps_new return TOPIC_REFRESH + else if(href_list["tgui_fancy"]) + pref.tgui_fancy = !pref.tgui_fancy + return TOPIC_REFRESH + + else if(href_list["tgui_lock"]) + pref.tgui_lock = !pref.tgui_lock + return TOPIC_REFRESH + else if(href_list["reset"]) switch(href_list["reset"]) if("ui") diff --git a/code/modules/client/preference_setup/loadout/loadout_mask.dm b/code/modules/client/preference_setup/loadout/loadout_mask.dm index 5ae0b96e2b..716cdb4268 100644 --- a/code/modules/client/preference_setup/loadout/loadout_mask.dm +++ b/code/modules/client/preference_setup/loadout/loadout_mask.dm @@ -20,4 +20,8 @@ /datum/gear/mask/sterile display_name = "sterile mask" path = /obj/item/clothing/mask/surgical - cost = 2 \ No newline at end of file + cost = 2 + +/datum/gear/mask/veil + display_name = "black veil" + path = /obj/item/clothing/mask/veil \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index b5be918c11..6cb522c319 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -556,4 +556,28 @@ /datum/gear/uniform/haltertop display_name = "halter top" - path = /obj/item/clothing/under/haltertop \ No newline at end of file + path = /obj/item/clothing/under/haltertop + +/datum/gear/uniform/revealingdress + display_name = "revealing dress" + path = /obj/item/clothing/under/dress/revealingdress + +/datum/gear/uniform/rippedpunk + display_name = "ripped punk jeans" + path = /obj/item/clothing/under/rippedpunk + +/datum/gear/uniform/gothic + display_name = "gothic dress" + path = /obj/item/clothing/under/dress/gothic + +/datum/gear/uniform/formalred + display_name = "formal red dress" + path = /obj/item/clothing/under/dress/formalred + +/datum/gear/uniform/pentagram + display_name = "pentagram dress" + path = /obj/item/clothing/under/dress/pentagram + +/datum/gear/uniform/yellowswoop + display_name = "yellow swooped dress" + path = /obj/item/clothing/under/dress/yellowswoop \ No newline at end of file diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 4d2157306f..f930096134 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -24,6 +24,9 @@ datum/preferences var/tooltipstyle = "Midnight" //Style for popup tooltips var/client_fps = 0 + var/tgui_fancy = TRUE + var/tgui_lock = FALSE + //character preferences var/real_name //our character's name var/be_random_name = 0 //whether we are a random name every round diff --git a/code/modules/clothing/glasses/hud_vr.dm b/code/modules/clothing/glasses/hud_vr.dm index 04a1025d0e..7b79566d2d 100644 --- a/code/modules/clothing/glasses/hud_vr.dm +++ b/code/modules/clothing/glasses/hud_vr.dm @@ -7,6 +7,8 @@ icon_state = "glasses" var/datum/nano_module/arscreen var/arscreen_path + var/datum/tgui_module/tgarscreen + var/tgarscreen_path var/flash_prot = 0 //0 for none, 1 for flash weapon protection, 2 for welder protection enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_AUGMENTED) plane_slots = list(slot_glasses) @@ -15,21 +17,33 @@ ..() if(arscreen_path) arscreen = new arscreen_path(src) + if(tgarscreen_path) + tgarscreen = new tgarscreen_path(src) /obj/item/clothing/glasses/omnihud/Destroy() QDEL_NULL(arscreen) + QDEL_NULL(tgarscreen) . = ..() /obj/item/clothing/glasses/omnihud/dropped() if(arscreen) SSnanoui.close_uis(src) + if(tgarscreen) + SStgui.close_uis(src) ..() /obj/item/clothing/glasses/omnihud/emp_act(var/severity) + if(arscreen) + SSnanoui.close_uis(src) + if(tgarscreen) + SStgui.close_uis(src) var/disconnect_ar = arscreen + var/disconnect_tgar = tgarscreen arscreen = null + tgarscreen = null spawn(20 SECONDS) arscreen = disconnect_ar + tgarscreen = disconnect_tgar ..() /obj/item/clothing/glasses/omnihud/proc/flashed() @@ -70,12 +84,12 @@ These have been upgraded with medical records access and virus database integration." mode = "med" action_button_name = "AR Console (Crew Monitor)" - arscreen_path = /datum/nano_module/program/crew_monitor + tgarscreen_path = /datum/tgui_module/crew_monitor/glasses enables_planes = list(VIS_CH_ID,VIS_CH_HEALTH_VR,VIS_CH_STATUS_R,VIS_CH_BACKUP,VIS_AUGMENTED) ar_interact(var/mob/living/carbon/human/user) - if(arscreen) - arscreen.ui_interact(user,"main",null,1,glasses_state) + if(tgarscreen) + tgarscreen.tgui_interact(user) return 1 /obj/item/clothing/glasses/omnihud/sec diff --git a/code/modules/clothing/masks/miscellaneous.dm b/code/modules/clothing/masks/miscellaneous.dm index eab03a3c2e..d972cf82cc 100644 --- a/code/modules/clothing/masks/miscellaneous.dm +++ b/code/modules/clothing/masks/miscellaneous.dm @@ -288,3 +288,10 @@ desc = "A fine black bandana with nanotech lining and a skull emblem. Can be worn on the head or face." icon_state = "bandskull" item_state_slots = list(slot_r_hand_str = "bandskull", slot_l_hand_str = "bandskull") + +/obj/item/clothing/mask/veil + name = "black veil" + desc = "A black veil, typically worn at funerals or by goths." + w_class = ITEMSIZE_TINY + body_parts_covered = FACE + icon_state = "veil" \ No newline at end of file diff --git a/code/modules/clothing/spacesuits/rig/rig_wiring.dm b/code/modules/clothing/spacesuits/rig/rig_wiring.dm index 98f8a13702..c7fec3c5d6 100644 --- a/code/modules/clothing/spacesuits/rig/rig_wiring.dm +++ b/code/modules/clothing/spacesuits/rig/rig_wiring.dm @@ -1,13 +1,11 @@ /datum/wires/rig - random = 1 + randomize = TRUE holder_type = /obj/item/weapon/rig wire_count = 5 -#define RIG_SECURITY 1 -#define RIG_AI_OVERRIDE 2 -#define RIG_SYSTEM_CONTROL 4 -#define RIG_INTERFACE_LOCK 8 -#define RIG_INTERFACE_SHOCK 16 +/datum/wires/rig/New(atom/_holder) + wires = list(WIRE_RIG_SECURITY, WIRE_RIG_AI_OVERRIDE, WIRE_RIG_SYSTEM_CONTROL, WIRE_RIG_INTERFACE_LOCK, WIRE_RIG_INTERFACE_SHOCK) + return ..() /* * Rig security can be snipped to disable ID access checks on rig. * Rig AI override can be pulsed to toggle whether or not the AI can take control of the suit. @@ -15,43 +13,41 @@ * Interface lock can be pulsed to toggle whether or not the interface can be accessed. */ -/datum/wires/rig/UpdateCut(var/index, var/mended) - +/datum/wires/rig/on_cut(wire, mend) var/obj/item/weapon/rig/rig = holder - switch(index) - if(RIG_SECURITY) - if(mended) + switch(wire) + if(WIRE_RIG_SECURITY) + if(mend) rig.req_access = initial(rig.req_access) rig.req_one_access = initial(rig.req_one_access) - if(RIG_INTERFACE_SHOCK) - rig.electrified = mended ? 0 : -1 + if(WIRE_RIG_INTERFACE_SHOCK) + rig.electrified = mend ? 0 : -1 rig.shock(usr,100) -/datum/wires/rig/UpdatePulsed(var/index) - +/datum/wires/rig/on_pulse(wire) var/obj/item/weapon/rig/rig = holder - switch(index) - if(RIG_SECURITY) + switch(wire) + if(WIRE_RIG_SECURITY) rig.security_check_enabled = !rig.security_check_enabled rig.visible_message("\The [rig] twitches as several suit locks [rig.security_check_enabled?"close":"open"].") - if(RIG_AI_OVERRIDE) + if(WIRE_RIG_AI_OVERRIDE) rig.ai_override_enabled = !rig.ai_override_enabled rig.visible_message("A small red light on [rig] [rig.ai_override_enabled?"goes dead":"flickers on"].") - if(RIG_SYSTEM_CONTROL) + if(WIRE_RIG_SYSTEM_CONTROL) rig.malfunctioning += 10 if(rig.malfunction_delay <= 0) rig.malfunction_delay = 20 rig.shock(usr,100) - if(RIG_INTERFACE_LOCK) + if(WIRE_RIG_INTERFACE_LOCK) rig.interface_locked = !rig.interface_locked rig.visible_message("\The [rig] clicks audibly as the software interface [rig.interface_locked?"darkens":"brightens"].") - if(RIG_INTERFACE_SHOCK) + if(WIRE_RIG_INTERFACE_SHOCK) if(rig.electrified != -1) rig.electrified = 30 rig.shock(usr,100) -/datum/wires/rig/CanUse(var/mob/living/L) +/datum/wires/rig/interactable(mob/user) var/obj/item/weapon/rig/rig = holder if(rig.open) - return 1 - return 0 \ No newline at end of file + return TRUE + return FALSE \ No newline at end of file diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 800ba8e3ec..1fcddc2b77 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -535,6 +535,37 @@ desc = "A red and white dress themed after some winter holidays. Tastefully festive!" icon_state = "festivedress" +/obj/item/clothing/under/dress/revealingdress + name = "revealing dress" + desc = "A very revealing black and blue dress. Is this work appropriate?" + icon_state = "revealingdress" + index = 1 + +/obj/item/clothing/under/dress/gothic + name = "gothic dress" + desc = "A black dress with a sheer mesh over it, tastefully old school goth." + icon_state = "gothic" + index = 1 + +/obj/item/clothing/under/dress/formalred + name = "formal red dress" + desc = "A very formal red dress, for those fancy galas." + icon_state = "formalred" + flags_inv = HIDESHOES + index = 1 + +/obj/item/clothing/under/dress/pentagram + name = "pentagram dress" + desc = "A black dress with straps over the chest in the shape of a pentagram." + icon_state = "pentagram" + index = 1 + +obj/item/clothing/under/dress/yellowswoop + name = "yellow swooped dress" + desc = "A yellow dress that swoops to the side." + icon_state = "yellowswoop" + index = 1 + /* * wedding stuff */ @@ -767,6 +798,12 @@ Uniforms and such desc = "Jean shorts and a black halter top. Perfect for casual Fridays!" icon_state = "haltertop" +/obj/item/clothing/under/rippedpunk + name = "ripped punk jeans" + desc = "Black ripped jeans and a fishnet top. How punk." + icon_state = "rippedpunk" + index = 1 + /* * swimsuit */ diff --git a/code/modules/events/camera_damage.dm b/code/modules/events/camera_damage.dm index 6a86581b70..596bc348a8 100644 --- a/code/modules/events/camera_damage.dm +++ b/code/modules/events/camera_damage.dm @@ -17,9 +17,9 @@ if(prob(2*severity)) cam.destroy() else - cam.wires.UpdateCut(CAMERA_WIRE_POWER, 0) + cam.wires.cut(WIRE_MAIN_POWER1) if(prob(5*severity)) - cam.wires.UpdateCut(CAMERA_WIRE_ALARM, 0) + cam.wires.cut(WIRE_CAM_ALARM) /datum/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) if(!cameranet.cameras.len) diff --git a/code/modules/food/food/condiment.dm b/code/modules/food/food/condiment.dm index 657946d019..e005d71330 100644 --- a/code/modules/food/food/condiment.dm +++ b/code/modules/food/food/condiment.dm @@ -115,6 +115,17 @@ desc = "This is what you use to make bread fluffy." icon_state = "yeast" center_of_mass = list("x"=16, "y"=6) + if("spacespice") + name = "bottle of space spice" + desc = "An exotic blend of spices for cooking. Definitely not worms." + icon = 'icons/obj/food_syn.dmi' + icon_state = "spacespicebottle" + center_of_mass = list("x"=16, "y"=6) + if("barbecue") + name = "barbecue sauce" + desc = "Barbecue sauce, it's labeled 'sweet and spicy'." + icon_state = "barbecue" + center_of_mass = list("x"=16, "y"=6) else name = "Misc Condiment Bottle" if (reagents.reagent_list.len==1) @@ -408,6 +419,7 @@ desc = "A big bag of flour. Good for baking!" icon = 'icons/obj/food.dmi' icon_state = "flour" + volume = 220 center_of_mass = list("x"=16, "y"=8) /obj/item/weapon/reagent_containers/food/condiment/flour/on_reagent_change() @@ -415,5 +427,21 @@ /obj/item/weapon/reagent_containers/food/condiment/flour/Initialize() . = ..() - reagents.add_reagent("flour", 30) - randpixel_xy() \ No newline at end of file + reagents.add_reagent("flour", 200) + randpixel_xy() + +/obj/item/weapon/reagent_containers/food/condiment/spacespice + name = "space spices" + desc = "An exotic blend of spices for cooking. Definitely not worms." + icon = 'icons/obj/food_syn.dmi' + icon_state = "spacespicebottle" + possible_transfer_amounts = list(1,40) //for clown turning the lid off + amount_per_transfer_from_this = 1 + volume = 40 + +/obj/item/weapon/reagent_containers/food/condiment/spacespice/on_reagent_change() + return + +/obj/item/weapon/reagent_containers/food/condiment/spacespice/Initialize() + . = ..() + reagents.add_reagent("spacespice", 40) \ No newline at end of file diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 72ac7787ce..9557434372 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -14,6 +14,12 @@ var/survivalfood = FALSE var/nutriment_amt = 0 var/list/nutriment_desc = list("food" = 1) + var/datum/reagent/nutriment/coating/coating = null + var/icon/flat_icon = null //Used to cache a flat icon generated from dipping in batter. This is used again to make the cooked-batter-overlay + var/do_coating_prefix = 1 //If 0, we wont do "battered thing" or similar prefixes. Mainly for recipes that include batter but have a special name + var/cooked_icon = null //Used for foods that are "cooked" without being made into a specific recipe or combination. + //Generally applied during modification cooking with oven/fryer + //Used to stop deepfried meat from looking like slightly tanned raw meat, and make it actually look cooked center_of_mass = list("x"=16, "y"=16) w_class = ITEMSIZE_SMALL force = 0 @@ -150,6 +156,8 @@ /obj/item/weapon/reagent_containers/food/snacks/examine(mob/user) . = ..() if(Adjacent(user)) + if(coating) + to_chat(user, "It's coated in [coating.name]!") if(bitecount==0) return . else if (bitecount==1) @@ -161,7 +169,7 @@ /obj/item/weapon/reagent_containers/food/snacks/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/storage)) - ..() // -> item/attackby() + . = ..() // -> item/attackby() return // Eating with forks @@ -273,8 +281,8 @@ // name = "Xenoburger" //Name that displays in the UI. // desc = "Smells caustic. Tastes like heresy." //Duh // icon_state = "xburger" //Refers to an icon in food.dmi -// New() //Don't mess with this. -// ..() //Same here. +// Initialize() //Don't mess with this. (We use Initialize now instead of New()) +// . = ..() //Same here. // reagents.add_reagent("xenomicrobes", 10) //This is what is in the food item. you may copy/paste // reagents.add_reagent("nutriment", 2) // this line of code for all the contents. // bitesize = 3 //This is the amount each bite consumes. @@ -349,7 +357,7 @@ nutriment_desc = list("candy corn" = 4) /obj/item/weapon/reagent_containers/food/snacks/candy_corn/Initialize() - ..() + . = ..() reagents.add_reagent("sugar", 2) bitesize = 2 @@ -589,7 +597,7 @@ /obj/item/weapon/reagent_containers/food/snacks/egg/afterattack(obj/O as obj, mob/user as mob, proximity) if(istype(O,/obj/machinery/microwave)) - return ..() + return . = ..() if(!(proximity && O.is_open_container())) return to_chat(user, "You crack \the [src] into \the [O].") @@ -598,7 +606,7 @@ qdel(src) /obj/item/weapon/reagent_containers/food/snacks/egg/throw_impact(atom/hit_atom) - ..() + . = ..() new/obj/effect/decal/cleanable/egg_smudge(src.loc) src.reagents.splash(hit_atom, reagents.total_volume) src.visible_message("[src.name] has been squashed.","You hear a smack.") @@ -616,7 +624,7 @@ to_chat(usr, "You color \the [src] [clr]") icon_state = "egg-[clr]" else - ..() + . = ..() /obj/item/weapon/reagent_containers/food/snacks/egg/blue icon_state = "egg-blue" @@ -1116,7 +1124,7 @@ bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/pie/throw_impact(atom/hit_atom) - ..() + . = ..() new/obj/effect/decal/cleanable/pie_smudge(src.loc) src.visible_message("\The [src.name] splats.","You hear a splat.") qdel(src) @@ -1234,7 +1242,7 @@ nutriment_desc = list("sweetness" = 3, "mushroom" = 3, "pie" = 2) /obj/item/weapon/reagent_containers/food/snacks/amanita_pie/Initialize() - ..() + . = ..() reagents.add_reagent("amatoxin", 3) reagents.add_reagent("psilocybin", 1) bitesize = 3 @@ -1249,7 +1257,7 @@ nutriment_desc = list("heartiness" = 2, "mushroom" = 3, "pie" = 3) /obj/item/weapon/reagent_containers/food/snacks/plump_pie/Initialize() - ..() + . = ..() if(prob(10)) name = "exceptional plump pie" desc = "Microwave is taken by a fey mood! It has cooked an exceptional plump pie!" @@ -1363,7 +1371,7 @@ if(prob(unpopped)) //lol ...what's the point? to_chat(usr, "You bite down on an un-popped kernel!") unpopped = max(0, unpopped-1) - ..() + . = ..() /obj/item/weapon/reagent_containers/food/snacks/sosjerky name = "Scaredy's Private Reserve Beef Jerky" @@ -1374,7 +1382,7 @@ center_of_mass = list("x"=15, "y"=9) /obj/item/weapon/reagent_containers/food/snacks/sosjerky/Initialize() - ..() + . = ..() reagents.add_reagent("protein", 4) bitesize = 2 @@ -1389,7 +1397,7 @@ nutriment_desc = list("dried raisins" = 6) /obj/item/weapon/reagent_containers/food/snacks/no_raisin/Initialize() - ..() + . = ..() reagents.add_reagent("nutriment", 6) /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie @@ -1663,7 +1671,7 @@ /obj/item/weapon/reagent_containers/food/snacks/slimesoup name = "slime soup" desc = "If no water is available, you may substitute tears." - icon_state = "rorosoup" //nonexistant? - 3/1/2020 FIXED. roro's live on. + icon_state = "slimesoup" //nonexistant? - 3/1/2020 FIXED. roro's live on. - 7/14/2020 - The fuck are you smoking, roro's is stupid, name it slimesoup so it's clear wtf it is. filling_color = "#C4DBA0" /obj/item/weapon/reagent_containers/food/snacks/slimesoup/Initialize() @@ -2404,9 +2412,9 @@ reagents.add_reagent("peanutbutter", 5) /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore - name = "Boiled slime Core" + name = "Boiled Slime Core" desc = "A boiled red thing." - icon_state = "boiledslimecore" //nonexistant? + icon_state = "boiledslimecore" /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore/Initialize() . = ..() @@ -3437,7 +3445,7 @@ update_icon() return - ..() + . = ..() /obj/item/pizzabox/margherita/Initialize() pizza = new /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita(src) @@ -3576,7 +3584,7 @@ qdel(src) return else - ..() + . = ..() // Human Burger + cheese wedge = cheeseburger /obj/item/weapon/reagent_containers/food/snacks/human/burger/attackby(obj/item/weapon/reagent_containers/food/snacks/cheesewedge/W as obj, mob/user as mob) @@ -3587,7 +3595,7 @@ qdel(src) return else - ..() + . = ..() /obj/item/weapon/reagent_containers/food/snacks/bunbun name = "\improper Bun Bun" @@ -3693,7 +3701,7 @@ to_chat(user, "You remove the seeds from the flower, slightly damaging them.") qdel(src) else - ..() + . = ..() /obj/item/weapon/reagent_containers/food/snacks/rawsticks name = "raw potato sticks" @@ -3767,7 +3775,7 @@ center_of_mass = list("x"=16, "y"=15) /obj/item/weapon/reagent_containers/food/snacks/liquidprotein/Initialize() - ..() + . = ..() reagents.add_reagent("protein", 30) reagents.add_reagent("iron", 3) bitesize = 4 @@ -3782,7 +3790,7 @@ center_of_mass = list("x"=16, "y"=15) /obj/item/weapon/reagent_containers/food/snacks/liquidvitamin/Initialize() - ..() + . = ..() reagents.add_reagent("flour", 20) reagents.add_reagent("tricordrazine", 5) reagents.add_reagent("paracetamol", 5) @@ -3838,10 +3846,10 @@ center_of_mass = list("x"=15, "y"=9) /obj/item/weapon/reagent_containers/food/snacks/unajerky/Initialize() - ..() - reagents.add_reagent("protein", 8) - reagents.add_reagent("capsaicin", 2) - bitesize = 2 + . =..() + reagents.add_reagent("protein", 8) + reagents.add_reagent("capsaicin", 2) + bitesize = 2 /obj/item/weapon/reagent_containers/food/snacks/croissant name = "croissant" @@ -3869,7 +3877,7 @@ /obj/item/weapon/reagent_containers/food/snacks/sashimi name = "carp sashimi" - desc = "Expertly prepared. Hopefully toxin got removed though." + desc = "Expertly prepared. Hopefully the toxins got removed." filling_color = "#FFDEFE" icon_state = "sashimi" nutriment_amt = 6 @@ -3922,7 +3930,7 @@ filling_color = "#E0CF9B" center_of_mass = list("x"=17, "y"=4) nutriment_amt = 6 - nutriment_desc = list("sweetness" = 2, "muffin" = 2) + nutriment_desc = list("sweetness" = 2, "muffin" = 2, "berries" = 2) /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/Initialize() . = ..() @@ -4341,3 +4349,1687 @@ if(pixel_x || pixel_y) A.pixel_x = pixel_x A.pixel_y = pixel_y + +/obj/item/weapon/reagent_containers/food/snacks/macncheese + name = "macaroni and cheese" + desc = "The perfect combination of noodles and dairy." + icon = 'icons/obj/food.dmi' + icon_state = "macncheese" + trash = /obj/item/trash/snack_bowl + center_of_mass = list("x"=16, "y"=16) + nutriment_amt = 9 + nutriment_desc = list("Cheese" = 5, "pasta" = 4, "happiness" = 1) + +/obj/item/weapon/reagent_containers/food/snacks/macncheese/Initialize() + . = ..() + bitesize = 3 + +//Code for dipping food in batter +/obj/item/weapon/reagent_containers/food/snacks/afterattack(obj/O as obj, mob/user as mob, proximity) + if(O.is_open_container() && O.reagents && !(istype(O, /obj/item/weapon/reagent_containers/food)) && proximity) + for (var/r in O.reagents.reagent_list) + + var/datum/reagent/R = r + if (istype(R, /datum/reagent/nutriment/coating)) + if (apply_coating(R, user)) + return 1 + + return . = ..() + +//This proc handles drawing coatings out of a container when this food is dipped into it +/obj/item/weapon/reagent_containers/food/snacks/proc/apply_coating(var/datum/reagent/nutriment/coating/C, var/mob/user) + if (coating) + to_chat(user, "The [src] is already coated in [coating.name]!") + return 0 + + //Calculate the reagents of the coating needed + var/req = 0 + for (var/r in reagents.reagent_list) + var/datum/reagent/R = r + if (istype(R, /datum/reagent/nutriment)) + req += R.volume * 0.2 + else + req += R.volume * 0.1 + + req += w_class*0.5 + + if (!req) + //the food has no reagents left, its probably getting deleted soon + return 0 + + if (C.volume < req) + to_chat("There's not enough [C.name] to coat the [src]!") + return 0 + + var/id = C.id + + //First make sure there's space for our batter + if (reagents.get_free_space() < req+5) + var/extra = req+5 - reagents.get_free_space() + reagents.maximum_volume += extra + + //Suck the coating out of the holder + C.holder.trans_to_holder(reagents, req) + + //We're done with C now, repurpose the var to hold a reference to our local instance of it + C = reagents.get_reagent(id) + if (!C) + return + + coating = C + //Now we have to do the witchcraft with masking images + //var/icon/I = new /icon(icon, icon_state) + + if (!flat_icon) + flat_icon = getFlatIcon(src) + var/icon/I = flat_icon + color = "#FFFFFF" //Some fruits use the color var. Reset this so it doesnt tint the batter + I.Blend(new /icon('icons/obj/food_custom.dmi', rgb(255,255,255)),ICON_ADD) + I.Blend(new /icon('icons/obj/food_custom.dmi', coating.icon_raw),ICON_MULTIPLY) + var/image/J = image(I) + J.alpha = 200 + J.blend_mode = BLEND_OVERLAY + J.tag = "coating" + overlays += J + + if (user) + user.visible_message(span("notice", "[user] dips \the [src] into \the [coating.name]"), span("notice", "You dip \the [src] into \the [coating.name]")) + + return 1 + + +//Called by cooking machines. This is mainly intended to set properties on the food that differ between raw/cooked +/obj/item/weapon/reagent_containers/food/snacks/proc/cook() + if (coating) + var/list/temp = overlays.Copy() + for (var/i in temp) + if (istype(i, /image)) + var/image/I = i + if (I.tag == "coating") + temp.Remove(I) + break + + overlays = temp + //Carefully removing the old raw-batter overlay + + if (!flat_icon) + flat_icon = getFlatIcon(src) + var/icon/I = flat_icon + color = "#FFFFFF" //Some fruits use the color var + I.Blend(new /icon('icons/obj/food_custom.dmi', rgb(255,255,255)),ICON_ADD) + I.Blend(new /icon('icons/obj/food_custom.dmi', coating.icon_cooked),ICON_MULTIPLY) + var/image/J = image(I) + J.alpha = 200 + J.tag = "coating" + overlays += J + + + if (do_coating_prefix == 1) + name = "[coating.coated_adj] [name]" + + for (var/r in reagents.reagent_list) + var/datum/reagent/R = r + if (istype(R, /datum/reagent/nutriment/coating)) + var/datum/reagent/nutriment/coating/C = R + C.data["cooked"] = 1 + C.name = C.cooked_name + +/obj/item/weapon/reagent_containers/food/snacks/proc/on_consume(var/mob/eater, var/mob/feeder = null) + if(!reagents.total_volume) + eater.visible_message("[eater] finishes eating \the [src].","You finish eating \the [src].") + + if (!feeder) + feeder = eater + + feeder.drop_from_inventory(src) //so icons update :[ //what the fuck is this???? + + if(trash) + if(ispath(trash,/obj/item)) + var/obj/item/TrashItem = new trash(feeder) + feeder.put_in_hands(TrashItem) + else if(istype(trash,/obj/item)) + feeder.put_in_hands(trash) + qdel(src) + return +//////////////////////////////////////////////////////////////////////////////// +/// FOOD END +//////////////////////////////////////////////////////////////////////////////// + +/mob/living + var/composition_reagent + var/composition_reagent_quantity + +/mob/living/simple_mob/adultslime + composition_reagent = "slimejelly" + +/mob/living/carbon/slime + composition_reagent = "slimejelly" + +/mob/living/carbon/alien/diona + composition_reagent = "nutriment"//Dionae are plants, so eating them doesn't give animal protein + +/mob/living/simple_mob/slime + composition_reagent = "slimejelly" + +/mob/living/simple_mob + var/kitchen_tag = "animal" //Used for cooking with animals + +/mob/living/simple_mob/mouse + kitchen_tag = "rodent" + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel + slices_num = 8 + +/obj/item/weapon/reagent_containers/food/snacks/sausage/battered + name = "battered sausage" + desc = "A piece of mixed, long meat, battered and then deepfried." + icon = 'icons/obj/food_syn.dmi' + icon_state = "batteredsausage" + filling_color = "#DB0000" + center_of_mass = list("x"=16, "y"=16) + do_coating_prefix = 0 + New() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("batter", 1.7) + reagents.add_reagent("oil", 1.5) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers + name = "jalapeno popper" + desc = "A battered, deep-fried chilli pepper." + icon = 'icons/obj/food_syn.dmi' + icon_state = "popper" + filling_color = "#00AA00" + center_of_mass = list("x"=10, "y"=6) + do_coating_prefix = 0 + nutriment_amt = 2 + nutriment_desc = list("chilli pepper" = 2) + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers/Initialize() + . = ..() + reagents.add_reagent("batter", 2) + reagents.add_reagent("oil", 2) + +/obj/item/weapon/reagent_containers/food/snacks/mouseburger + name = "mouse burger" + desc = "Squeaky and a little furry." + icon = 'icons/obj/food_syn.dmi' + icon_state = "ratburger" + center_of_mass = list("x"=16, "y"=11) + New() + . = ..() + reagents.add_reagent("protein", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu + name = "chicken katsu" + desc = "A Terran delicacy consisting of chicken fried in a light beer batter." + icon = 'icons/obj/food_syn.dmi' + icon_state = "katsu" + trash = /obj/item/trash/plate + filling_color = "#E9ADFF" + center_of_mass = list("x"=16, "y"=16) + do_coating_prefix = 0 + +/obj/item/weapon/reagent_containers/food/snacks/chickenkatsu/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("beerbatter", 2) + reagents.add_reagent("oil", 1) + bitesize = 1.5 + +/obj/item/weapon/reagent_containers/food/snacks/fries + nutriment_amt = 4 + nutriment_desc = list("fries" = 4) + +/obj/item/weapon/reagent_containers/food/snacks/fries/Initialize() + . = ..() + reagents.add_reagent("oil", 1.2)//This is mainly for the benefit of adminspawning + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/microchips + name = "micro chips" + desc = "Soft and rubbery, should have fried them. Good for smaller crewmembers, maybe?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "microchips" + trash = /obj/item/trash/plate + filling_color = "#EDDD00" + nutriment_amt = 4 + nutriment_desc = list("soggy fries" = 4) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/microchips/Initialize() + . = ..() + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/ovenchips + name = "oven chips" + desc = "Dark and crispy, but a bit dry." + icon = 'icons/obj/food_syn.dmi' + icon_state = "ovenchips" + trash = /obj/item/trash/plate + filling_color = "#EDDD00" + nutriment_amt = 4 + nutriment_desc = list("crisp, dry fries" = 4) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/ovenchips/Initialize() + . = ..() + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/meatsteak/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("triglyceride", 2) + reagents.add_reagent("sodiumchloride", 1) + reagents.add_reagent("blackpepper", 1) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch + name = "pizza crunch" + desc = "This was once a normal pizza, but it has been coated in batter and deep-fried. Whatever toppings it once had are a mystery, but they're still under there, somewhere..." + icon = 'icons/obj/food_syn.dmi' + icon_state = "pizzacrunch" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice + slices_num = 6 + nutriment_amt = 25 + nutriment_desc = list("fried pizza" = 25) + center_of_mass = list("x"=16, "y"=11) + + New() + . = ..() + reagents.add_reagent("batter", 6.5) + coating = reagents.get_reagent("batter") + reagents.add_reagent("oil", 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/pizzacrunchslice + name = "pizza crunch" + desc = "A little piece of a heart attack. It's toppings are a mystery, hidden under batter" + icon = 'icons/obj/food_syn.dmi' + icon_state = "pizzacrunchslice" + filling_color = "#BAA14C" + bitesize = 2 + center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/funnelcake + name = "funnel cake" + desc = "Funnel cakes rule!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "funnelcake" + filling_color = "#Ef1479" + center_of_mass = list("x"=16, "y"=12) + do_coating_prefix = 0 + +/obj/item/weapon/reagent_containers/food/snacks/funnelcake/Initialize() + . = ..() + reagents.add_reagent("batter", 10) + reagents.add_reagent("sugar", 5) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/spreads + name = "nutri-spread" + desc = "A stick of plant-based nutriments in a semi-solid form. I can't believe it's not margarine!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "marge" + bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("margarine" = 1) + nutriment_amt = 20 + +/obj/item/weapon/reagent_containers/food/snacks/spreads/butter + name = "butter" + desc = "A stick of pure butterfat made from milk products." + icon = 'icons/obj/food_syn.dmi' + icon_state = "butter" + bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("butter" = 1) + nutriment_amt = 0 + +/obj/item/weapon/reagent_containers/food/snacks/spreads/Initialize() + . = ..() + reagents.add_reagent("triglyceride", 20) + reagents.add_reagent("sodiumchloride",1) + +/obj/item/weapon/reagent_containers/food/snacks/rawcutlet/attackby(obj/item/weapon/W as obj, mob/user as mob) + if(istype(W,/obj/item/weapon/material/knife)) + new /obj/item/weapon/reagent_containers/food/snacks/rawbacon(src) + new /obj/item/weapon/reagent_containers/food/snacks/rawbacon(src) + to_chat(user, "You slice the cutlet into thin strips of bacon.") + qdel(src) + else + . = ..() + +/obj/item/weapon/reagent_containers/food/snacks/rawbacon + name = "raw bacon" + desc = "A very thin piece of raw meat, cut from beef." + icon = 'icons/obj/food_syn.dmi' + icon_state = "rawbacon" + bitesize = 1 + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/rawbacon/Initialize() + . = ..() + reagents.add_reagent("protein", 0.33) + +/obj/item/weapon/reagent_containers/food/snacks/bacon + name = "bacon" + desc = "A tasty meat slice. You don't see any pigs on this station, do you?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "bacon" + bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/bacon/microwave + name = "microwaved bacon" + desc = "A tasty meat slice. You don't see any pigs on this station, do you?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "bacon" + bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/bacon/oven + name = "oven-cooked bacon" + desc = "A tasty meat slice. You don't see any pigs on this station, do you?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "bacon" + bitesize = 2 + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/bacon/Initialize() + . = ..() + reagents.add_reagent("protein", 0.33) + reagents.add_reagent("triglyceride", 1) + +/obj/item/weapon/reagent_containers/food/snacks/bacon_stick + name = "eggpop" + desc = "A bacon wrapped boiled egg, conviently skewered on a wooden stick." + icon = 'icons/obj/food_syn.dmi' + icon_state = "bacon_stick" + +/obj/item/weapon/reagent_containers/food/snacks/bacon_stick/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("egg", 1) + +/obj/item/weapon/reagent_containers/food/snacks/chilied_eggs + name = "chilied eggs" + desc = "Three deviled eggs floating in a bowl of meat chili. A popular lunchtime meal for Unathi in Ouerea." + icon_state = "chilied_eggs" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/chilied_eggs/Initialize() + . = ..() + reagents.add_reagent("egg", 6) + reagents.add_reagent("protein", 2) + + +/obj/item/weapon/reagent_containers/food/snacks/cheese_cracker + name = "supreme cheese toast" + desc = "A piece of toast lathered with butter, cheese, spices, and herbs." + icon = 'icons/obj/food_syn.dmi' + icon_state = "cheese_cracker" + nutriment_desc = list("cheese toast" = 8) + nutriment_amt = 8 + +/obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs + name = "bacon and eggs" + desc = "A piece of bacon and two fried eggs." + icon = 'icons/obj/food_syn.dmi' + icon_state = "bacon_and_eggs" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("egg", 1) + +/obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour + name = "sweet and sour pork" + desc = "A traditional ancient sol recipe with a few liberties taken with meat selection." + icon = 'icons/obj/food_syn.dmi' + icon_state = "sweet_and_sour" + nutriment_desc = list("sweet and sour" = 6) + nutriment_amt = 6 + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + +/obj/item/weapon/reagent_containers/food/snacks/corn_dog + name = "corn dog" + desc = "A cornbread covered sausage deepfried in oil." + icon = 'icons/obj/food_syn.dmi' + icon_state = "corndog" + nutriment_desc = list("corn batter" = 4) + nutriment_amt = 4 + +/obj/item/weapon/reagent_containers/food/snacks/corn_dog/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + +/obj/item/weapon/reagent_containers/food/snacks/truffle + name = "chocolate truffle" + desc = "Rich bite-sized chocolate." + icon = 'icons/obj/food_syn.dmi' + icon_state = "truffle" + nutriment_amt = 0 + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/truffle/Initialize() + . = ..() + reagents.add_reagent("coco", 6) + +/obj/item/weapon/reagent_containers/food/snacks/truffle/random + name = "mystery chocolate truffle" + desc = "Rich bite-sized chocolate with a mystery filling!" + +/obj/item/weapon/reagent_containers/food/snacks/truffle/random/Initialize() + . = ..() + var/reagent_string = pick(list("cream","cherryjelly","mint","frostoil","capsaicin","cream","coffee","milkshake")) + reagents.add_reagent(reagent_string, 4) + +/obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread + name = "bacon cheese flatbread" + desc = "Not a pizza." + icon_state = "bacon_pizza" + icon = 'icons/obj/food_syn.dmi' + nutriment_desc = list("flatbread" = 5) + nutriment_amt = 5 + +/obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread/Initialize() + . = ..() + reagents.add_reagent("protein", 5) + +/obj/item/weapon/reagent_containers/food/snacks/meat_pocket + name = "meat pocket" + desc = "Meat and cheese stuffed in a flatbread pocket, grilled to perfection." + icon = 'icons/obj/food_syn.dmi' + icon_state = "meat_pocket" + nutriment_desc = list("flatbread" = 3) + nutriment_amt = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meat_pocket/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + +/obj/item/weapon/reagent_containers/food/snacks/fish_taco + name = "carp taco" + desc = "A questionably cooked fish taco decorated with herbs, spices, and special sauce." + icon = 'icons/obj/food_syn.dmi' + icon_state = "fish_taco" + nutriment_desc = list("flatbread" = 3) + nutriment_amt = 3 + +/obj/item/weapon/reagent_containers/food/snacks/fish_taco/Initialize() + . = ..() + reagents.add_reagent("seafood",3) + +/obj/item/weapon/reagent_containers/food/snacks/nt_muffin + name = "\improper NtMuffin" + desc = "A NanoTrasen sponsered biscuit with egg, cheese, and sausage." + icon = 'icons/obj/food_syn.dmi' + icon_state = "nt_muffin" + nutriment_desc = list("biscuit" = 3) + nutriment_amt = 3 + +/obj/item/weapon/reagent_containers/food/snacks/nt_muffin/Initialize() + . = ..() + reagents.add_reagent("protein",5) + +/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring + name = "pineapple ring" + desc = "What the hell is this?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "pineapple_ring" + nutriment_desc = list("sweetness" = 2) + nutriment_amt = 2 + +/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring/Initialize() + . = ..() + reagents.add_reagent("pineapplejuice",3) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple + name = "ham & pineapple pizza" + desc = "One of the most debated pizzas in existence." + icon = 'icons/obj/food_syn.dmi' + icon_state = "pineapple_pizza" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/pineappleslice + slices_num = 6 + center_of_mass = list("x"=16, "y"=11) + nutriment_desc = list("pizza crust" = 10, "tomato" = 10, "ham" = 10) + nutriment_amt = 30 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("cheese", 5) + reagents.add_reagent("tomatojuice", 6) + +/obj/item/weapon/reagent_containers/food/snacks/pineappleslice + name = "ham & pineapple pizza slice" + desc = "A slice of contraband." + icon = 'icons/obj/food_syn.dmi' + icon_state = "pineapple_pizza_slice" + filling_color = "#BAA14C" + bitesize = 2 + center_of_mass = list("x"=18, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/pineappleslice/filled + nutriment_desc = list("pizza crust" = 5, "tomato" = 5) + nutriment_amt = 5 + +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon + name = "bacon burger" + desc = "The cornerstone of every nutritious breakfast, now with bacon!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "baconburger" + filling_color = "#D63C3C" + center_of_mass = list("x"=16, "y"=11) + nutriment_desc = list("bun" = 2) + nutriment_amt = 3 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/burger/bacon/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/blt + name = "BLT" + desc = "Bacon, lettuce, tomatoes. The perfect lunch." + icon = 'icons/obj/food_syn.dmi' + icon_state = "blt" + filling_color = "#D63C3C" + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("bread" = 4) + nutriment_amt = 4 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/blt/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/onionrings + name = "onion rings" + desc = "Like circular fries but better." + icon = 'icons/obj/food_syn.dmi' + icon_state = "onionrings" + trash = /obj/item/trash/plate + filling_color = "#eddd00" + center_of_mass = list("x"=16,"y"=11) + nutriment_desc = list("fried onions" = 5) + nutriment_amt = 5 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/berrymuffin + name = "berry muffin" + desc = "A delicious and spongy little cake, with berries." + icon = 'icons/obj/food_syn.dmi' + icon_state = "berrymuffin" + filling_color = "#E0CF9B" + center_of_mass = list("x"=17, "y"=4) + nutriment_amt = 5 + nutriment_desc = list("sweetness" = 1, "muffin" = 2, "berries" = 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/soup/onion + name = "onion soup" + desc = "A soup with layers." + icon = 'icons/obj/food_syn.dmi' + icon_state = "onionsoup" + trash = /obj/item/trash/snack_bowl + filling_color = "#E0C367" + center_of_mass = list("x"=16, "y"=7) + nutriment_amt = 5 + nutriment_desc = list("onion" = 2, "soup" = 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/porkbowl + name = "pork bowl" + desc = "A bowl of fried rice with cuts of meat." + icon = 'icons/obj/food_syn.dmi' + icon_state = "porkbowl" + trash = /obj/item/trash/snack_bowl + filling_color = "#FFFBDB" + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/porkbowl/Initialize() + . = ..() + reagents.add_reagent("rice", 6) + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/mashedpotato + name = "mashed potato" + desc = "Pillowy mounds of mashed potato." + icon = 'icons/obj/food_syn.dmi' + icon_state = "mashedpotato" + trash = /obj/item/trash/plate + filling_color = "#EDDD00" + center_of_mass = list("x"=16, "y"=11) + nutriment_amt = 4 + nutriment_desc = list("mashed potatoes" = 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/croissant + name = "croissant" + desc = "True french cuisine." + icon = 'icons/obj/food_syn.dmi' + filling_color = "#E3D796" + icon_state = "croissant" + nutriment_amt = 4 + nutriment_desc = list("french bread" = 4) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/crabmeat + name = "crab legs" + desc = "... Coffee? Is that you?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "crabmeat" + bitesize = 1 + +/obj/item/weapon/reagent_containers/food/snacks/crabmeat/Initialize() + . = ..() + reagents.add_reagent("seafood", 2) + +/obj/item/weapon/reagent_containers/food/snacks/crab_legs + name = "steamed crab legs" + desc = "Crab legs steamed and buttered to perfection. One day when the boss gets hungry..." + icon = 'icons/obj/food_syn.dmi' + icon_state = "crablegs" + nutriment_amt = 2 + nutriment_desc = list("savory butter" = 2) + bitesize = 2 + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/crab_legs/Initialize() + . = ..() + reagents.add_reagent("seafood", 6) + reagents.add_reagent("sodiumchloride", 1) + +/obj/item/weapon/reagent_containers/food/snacks/pancakes + name = "pancakes" + desc = "Pancakes with berries, delicious." + icon = 'icons/obj/food_syn.dmi' + icon_state = "pancakes" + trash = /obj/item/trash/plate + center_of_mass = list("x"=15, "y"=11) + nutriment_desc = list("pancake" = 8) + nutriment_amt = 8 + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/nugget + name = "chicken nugget" + icon = 'icons/obj/food_syn.dmi' + icon_state = "nugget_lump" + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/nugget/Initialize() + . = ..() + var/shape = pick("lump", "star", "lizard", "corgi") + desc = "A chicken nugget vaguely shaped like a [shape]." + icon_state = "nugget_[shape]" + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich + name = "ice cream sandwich" + desc = "Portable ice cream in its own packaging." + icon = 'icons/obj/food_syn.dmi' + icon_state = "icecreamsandwich" + filling_color = "#343834" + center_of_mass = list("x"=15, "y"=4) + nutriment_desc = list("ice cream" = 4) + nutriment_amt = 4 + +/obj/item/weapon/reagent_containers/food/snacks/honeybun + name = "honey bun" + desc = "A sticky pastry bun glazed with honey." + icon = 'icons/obj/food_syn.dmi' + icon_state = "honeybun" + nutriment_desc = list("pastry" = 1) + nutriment_amt = 3 + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/honeybun/Initialize() + . = ..() + reagents.add_reagent("honey", 3) + +// Moved /bun/attackby() from /code/modules/food/food/snacks.dm +/obj/item/weapon/reagent_containers/food/snacks/bun/attackby(obj/item/weapon/W as obj, mob/user as mob) + var/obj/item/weapon/reagent_containers/food/snacks/result = null + // Bun + meatball = burger + if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/meatball)) + result = new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(W) + qdel(src) + + // Bun + cutlet = hamburger + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/cutlet)) + result = new /obj/item/weapon/reagent_containers/food/snacks/monkeyburger(src) + to_chat(user, "You make a burger.") + qdel(W) + qdel(src) + + // Bun + sausage = hotdog + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/sausage)) + result = new /obj/item/weapon/reagent_containers/food/snacks/hotdog(src) + to_chat(user, "You make a hotdog.") + qdel(W) + qdel(src) + + // Bun + mouse = mouseburger + else if(istype(W,/obj/item/weapon/reagent_containers/food/snacks/variable/mob)) + var/obj/item/weapon/reagent_containers/food/snacks/variable/mob/MF = W + + switch (MF.kitchen_tag) + if ("rodent") + result = new /obj/item/weapon/reagent_containers/food/snacks/mouseburger(src) + to_chat(user, "You make a mouseburger!") + + if (result) + if (W.reagents) + //Reagents of reuslt objects will be the sum total of both. Except in special cases where nonfood items are used + //Eg robot head + result.reagents.clear_reagents() + W.reagents.trans_to(result, W.reagents.total_volume) + reagents.trans_to(result, reagents.total_volume) + + //If the bun was in your hands, the result will be too + if (loc == user) + user.drop_from_inventory(src) + user.put_in_hands(result) + +// Chip update. +/obj/item/weapon/reagent_containers/food/snacks/tortilla + name = "tortilla" + desc = "A thin, flour-based tortilla that can be used in a variety of dishes, or can be served as is." + icon = 'icons/obj/food_syn.dmi' + icon_state = "tortilla" + bitesize = 3 + nutriment_desc = list("tortilla" = 1) + center_of_mass = list("x"=16, "y"=16) + nutriment_amt = 6 + +//chips +/obj/item/weapon/reagent_containers/food/snacks/chip + name = "chip" + desc = "A portion sized chip good for dipping." + icon = 'icons/obj/food_syn.dmi' + icon_state = "chip" + var/bitten_state = "chip_half" + bitesize = 1 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("nacho chips" = 1) + nutriment_amt = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chip/on_consume(mob/M as mob) + if(reagents && reagents.total_volume) + icon_state = bitten_state + . = ..() + +/obj/item/weapon/reagent_containers/food/snacks/chip/salsa + name = "salsa chip" + desc = "A portion sized chip good for dipping. This one has salsa on it." + icon_state = "chip_salsa" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/guac + name = "guac chip" + desc = "A portion sized chip good for dipping. This one has guac on it." + icon_state = "chip_guac" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/cheese + name = "cheese chip" + desc = "A portion sized chip good for dipping. This one has cheese sauce on it." + icon_state = "chip_cheese" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho + name = "nacho chip" + desc = "A nacho ship stray from a plate of cheesy nachos." + icon_state = "chip_nacho" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/salsa + name = "nacho chip" + desc = "A nacho ship stray from a plate of cheesy nachos. This one has salsa on it." + icon_state = "chip_nacho_salsa" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac + name = "nacho chip" + desc = "A nacho ship stray from a plate of cheesy nachos. This one has guac on it." + icon_state = "chip_nacho_guac" + bitten_state = "chip_half" + +/obj/item/weapon/reagent_containers/food/snacks/chip/nacho/cheese + name = "nacho chip" + desc = "A nacho ship stray from a plate of cheesy nachos. This one has extra cheese on it." + icon_state = "chip_nacho_cheese" + bitten_state = "chip_half" + +// chip plates +/obj/item/weapon/reagent_containers/food/snacks/chipplate + name = "basket of chips" + desc = "A plate of chips intended for dipping." + icon = 'icons/obj/food_syn.dmi' + icon_state = "chip_basket" + trash = /obj/item/trash/chipbasket + var/vendingobject = /obj/item/weapon/reagent_containers/food/snacks/chip + nutriment_desc = list("tortilla chips" = 10) + bitesize = 1 + nutriment_amt = 10 + +/obj/item/weapon/reagent_containers/food/snacks/chipplate/attack_hand(mob/user as mob) + var/obj/item/weapon/reagent_containers/food/snacks/returningitem = new vendingobject(loc) + returningitem.reagents.clear_reagents() + reagents.trans_to(returningitem, bitesize) + returningitem.bitesize = bitesize/2 + user.put_in_hands(returningitem) + if (reagents && reagents.total_volume) + to_chat(user, "You take a chip from the plate.") + else + to_chat(user, "You take the last chip from the plate.") + var/obj/waste = new trash(loc) + if (loc == user) + user.put_in_hands(waste) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/chipplate/MouseDrop(mob/user) //Dropping the chip onto the user + if(istype(user) && user == usr) + user.put_in_active_hand(src) + src.pickup(user) + return + . = ..() + +/obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos + name = "plate of nachos" + desc = "A very cheesy nacho plate." + icon_state = "nachos" + trash = /obj/item/trash/plate + vendingobject = /obj/item/weapon/reagent_containers/food/snacks/chip/nacho + nutriment_desc = list("tortilla chips" = 10) + bitesize = 1 + nutriment_amt = 10 + +//dips +/obj/item/weapon/reagent_containers/food/snacks/dip + name = "queso dip" + desc = "A simple, cheesy dip consisting of tomatos, cheese, and spices." + var/nachotrans = /obj/item/weapon/reagent_containers/food/snacks/chip/nacho/cheese + var/chiptrans = /obj/item/weapon/reagent_containers/food/snacks/chip/cheese + icon = 'icons/obj/food_syn.dmi' + icon_state = "dip_cheese" + trash = /obj/item/trash/dipbowl + bitesize = 1 + nutriment_desc = list("queso" = 20) + center_of_mass = list("x"=16, "y"=16) + nutriment_amt = 20 + +/obj/item/weapon/reagent_containers/food/snacks/dip/attackby(obj/item/weapon/reagent_containers/food/snacks/item as obj, mob/user as mob) + . = ..() + var/obj/item/weapon/reagent_containers/food/snacks/returningitem + if(istype(item,/obj/item/weapon/reagent_containers/food/snacks/chip/nacho) && item.icon_state == "chip_nacho") + returningitem = new nachotrans(src) + else if (istype(item,/obj/item/weapon/reagent_containers/food/snacks/chip) && (item.icon_state == "chip" || item.icon_state == "chip_half")) + returningitem = new chiptrans(src) + if(returningitem) + returningitem.reagents.clear_reagents() //Clear the new chip + var/memed = 0 + item.reagents.trans_to(returningitem, item.reagents.total_volume) //Old chip to new chip + if(item.icon_state == "chip_half") + returningitem.icon_state = "[returningitem.icon_state]_half" + returningitem.bitesize = clamp(returningitem.reagents.total_volume,1,10) + else if(prob(1)) + memed = 1 + to_chat(user, "You scoop up some dip with the chip, but mid-scop, the chip breaks off into the dreadful abyss of dip, never to be seen again...") + returningitem.icon_state = "[returningitem.icon_state]_half" + returningitem.bitesize = clamp(returningitem.reagents.total_volume,1,10) + else + returningitem.bitesize = clamp(returningitem.reagents.total_volume*0.5,1,10) + qdel(item) + reagents.trans_to(returningitem, bitesize) //Dip to new chip + user.put_in_hands(returningitem) + + if (reagents && reagents.total_volume) + if(!memed) + to_chat(user, "You scoop up some dip with the chip.") + else + if(!memed) + to_chat(user, "You scoop up the remaining dip with the chip.") + var/obj/waste = new trash(loc) + if (loc == user) + user.put_in_hands(waste) + qdel(src) + +/obj/item/weapon/reagent_containers/food/snacks/dip/salsa + name = "salsa dip" + desc = "Traditional Sol chunky salsa dip containing tomatos, peppers, and spices." + nachotrans = /obj/item/weapon/reagent_containers/food/snacks/chip/nacho/salsa + chiptrans = /obj/item/weapon/reagent_containers/food/snacks/chip/salsa + icon_state = "dip_salsa" + nutriment_desc = list("salsa" = 20) + nutriment_amt = 20 + +/obj/item/weapon/reagent_containers/food/snacks/dip/guac + name = "guac dip" + desc = "A recreation of the ancient Sol 'Guacamole' dip using tofu, limes, and spices. This recreation obviously leaves out mole meat." + nachotrans = /obj/item/weapon/reagent_containers/food/snacks/chip/nacho/guac + chiptrans = /obj/item/weapon/reagent_containers/food/snacks/chip/guac + icon_state = "dip_guac" + nutriment_desc = list("guacmole" = 20) + nutriment_amt = 20 + +//burritos +/obj/item/weapon/reagent_containers/food/snacks/burrito + name = "meat burrito" + desc = "Meat wrapped in a flour tortilla. It's a burrito by definition." + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + + +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan + name = "vegan burrito" + desc = "Tofu wrapped in a flour tortilla." + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito_vegan" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito_vegan/Initialize() + . = ..() + reagents.add_reagent("tofu", 6) + +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy + name = "spicy meat burrito" + desc = "Meat and chilis wrapped in a flour tortilla." + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito_spicy" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito_spicy/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese + name = "meat cheese burrito" + desc = "Meat and melted cheese wrapped in a flour tortilla." + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito_cheese" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy + name = "spicy cheese meat burrito" + desc = "Meat, melted cheese, and chilis wrapped in a flour tortilla." + icon_state = "burrito_cheese_spicy" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell + name = "el diablo" + desc = "Meat and an insane amount of chilis packed in a flour tortilla. The Chaplain will see you now." + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito_hell" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("hellfire" = 6) + nutriment_amt = 24// 10 Chilis is a lot. + +/obj/item/weapon/reagent_containers/food/snacks/breakfast_wrap + name = "breakfast wrap" + desc = "Bacon, eggs, cheese, and tortilla grilled to perfection." + icon = 'icons/obj/food_syn.dmi' + icon_state = "breakfast_wrap" + bitesize = 4 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("tortilla" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/burrito_hell/Initialize() + . = ..() + reagents.add_reagent("protein", 9) + reagents.add_reagent("condensedcapsaicin", 20) //what could possibly go wrong + +/obj/item/weapon/reagent_containers/food/snacks/burrito_mystery + name = "mystery meat burrito" + desc = "The mystery is, why aren't you BSAing it?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "burrito_mystery" + bitesize = 5 + center_of_mass = list("x"=16, "y"=16) + nutriment_desc = list("regret" = 6) + nutriment_amt = 6 + +/obj/item/weapon/reagent_containers/food/snacks/hatchling_suprise + name = "hatchling suprise" + desc = "A poached egg on top of three slices of bacon. A typical breakfast for hungry Unathi children." + icon = 'icons/obj/food_syn.dmi' + icon_state = "hatchling_suprise" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/hatchling_suprise/Initialize() + . = ..() + reagents.add_reagent("egg", 2) + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/red_sun_special + name = "red sun special" + desc = "One lousy piece of sausage sitting on melted cheese curds. A cheap meal for the Unathi peasants of Moghes." + icon = 'icons/obj/food_syn.dmi' + icon_state = "red_sun_special" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/red_sun_special/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + +/obj/item/weapon/reagent_containers/food/snacks/riztizkzi_sea + name = "moghesian sea delight" + desc = "Three raw eggs floating in a sea of blood. An authentic replication of an ancient Unathi delicacy." + icon = 'icons/obj/food_syn.dmi' + icon_state = "riztizkzi_sea" + trash = /obj/item/trash/snack_bowl + +/obj/item/weapon/reagent_containers/food/snacks/riztizkzi_sea/Initialize() + . = ..() + reagents.add_reagent("egg", 4) + +/obj/item/weapon/reagent_containers/food/snacks/father_breakfast + name = "breakfast of champions" + desc = "A sausage and an omelette on top of a grilled steak." + icon = 'icons/obj/food_syn.dmi' + icon_state = "father_breakfast" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/father_breakfast/Initialize() + . = ..() + reagents.add_reagent("egg", 4) + reagents.add_reagent("protein", 6) + +/obj/item/weapon/reagent_containers/food/snacks/stuffed_meatball + name = "stuffed meatball" //YES + desc = "A meatball loaded with cheese." + icon = 'icons/obj/food_syn.dmi' + icon_state = "stuffed_meatball" + +/obj/item/weapon/reagent_containers/food/snacks/stuffed_meatball/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/egg_pancake + name = "meat pancake" + desc = "An omelette baked on top of a giant meat patty. This monstrousity is typically shared between four people during a dinnertime meal." + icon = 'icons/obj/food_syn.dmi' + icon_state = "egg_pancake" + trash = /obj/item/trash/plate + +/obj/item/weapon/reagent_containers/food/snacks/egg_pancake/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("egg", 2) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp + name = "korlaaskak" + desc = "A well-dressed carp, seared to perfection and adorned with herbs and spices. Can be sliced into proper serving sizes." + icon = 'icons/obj/food_syn.dmi' + icon_state = "grilled_carp" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/grilled_carp_slice + slices_num = 6 + trash = /obj/item/trash/snacktray + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp/Initialize() + . = ..() + reagents.add_reagent("seafood", 12) + +/obj/item/weapon/reagent_containers/food/snacks/grilled_carp_slice + name = "korlaaskak slice" + desc = "A well-dressed fillet of carp, seared to perfection and adorned with herbs and spices." + icon = 'icons/obj/food_syn.dmi' + icon_state = "grilled_carp_slice" + trash = /obj/item/trash/plate + + +// SYNNONO MEME FOODS EXPANSION - Credit to Synnono from Aurorastation. Come play here sometime :( + +/obj/item/weapon/reagent_containers/food/snacks/redcurry + name = "red curry" + gender = PLURAL + desc = "A bowl of creamy red curry with meat and rice. This one looks savory." + icon = 'icons/obj/food_syn.dmi' + icon_state = "redcurry" + trash = /obj/item/trash/snack_bowl + filling_color = "#f73333" + nutriment_amt = 8 + nutriment_desc = list("savory meat and rice" = 8) + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/snacks/redcurry/Initialize() + . = ..() + reagents.add_reagent("protein", 7) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/greencurry + name = "green curry" + gender = PLURAL + desc = "A bowl of creamy green curry with tofu, hot peppers and rice. This one looks spicy!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "greencurry" + trash = /obj/item/trash/snack_bowl + filling_color = "#58b76c" + nutriment_amt = 12 + nutriment_desc = list("tofu and rice" = 12) + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/snacks/greencurry/Initialize() + . = ..() + reagents.add_reagent("protein", 1) + reagents.add_reagent("capsaicin", 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/yellowcurry + name = "yellow curry" + gender = PLURAL + desc = "A bowl of creamy yellow curry with potatoes, peanuts and rice. This one looks mild." + icon = 'icons/obj/food_syn.dmi' + icon_state = "yellowcurry" + trash = /obj/item/trash/snack_bowl + filling_color = "#bc9509" + nutriment_amt = 13 + nutriment_desc = list("rice and potatoes" = 13) + center_of_mass = list("x"=16, "y"=8) + +/obj/item/weapon/reagent_containers/food/snacks/yellowcurry/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/bearburger + name = "bearburger" + desc = "The solution to your unbearable hunger." + icon = 'icons/obj/food_syn.dmi' + icon_state = "bearburger" + filling_color = "#5d5260" + center_of_mass = list("x"=15, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/bearburger/Initialize() + . = ..() + reagents.add_reagent("protein", 4) //So spawned burgers will not be empty I guess? + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/bearchili + name = "bear chili" + gender = PLURAL + desc = "A dark, hearty chili. Can you bear the heat?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "bearchili" + trash = /obj/item/trash/snack_bowl + filling_color = "#702708" + nutriment_amt = 3 + nutriment_desc = list("dark, hearty chili" = 3) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/bearchili/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("capsaicin", 3) + reagents.add_reagent("tomatojuice", 2) + reagents.add_reagent("hyperzine", 5) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/bearstew + name = "bear stew" + gender = PLURAL + desc = "A thick, dark stew of bear meat and vegetables." + icon = 'icons/obj/food_syn.dmi' + icon_state = "bearstew" + filling_color = "#9E673A" + nutriment_amt = 6 + nutriment_desc = list("hearty stew" = 6) + center_of_mass = list("x"=16, "y"=5) + +/obj/item/weapon/reagent_containers/food/snacks/bearstew/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + reagents.add_reagent("hyperzine", 5) + reagents.add_reagent("tomatojuice", 5) + reagents.add_reagent("imidazoline", 5) + reagents.add_reagent("water", 5) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/bibimbap + name = "bibimbap bowl" + desc = "A traditional Korean meal of meat and mixed vegetables. It's served on a bed of rice, and topped with a fried egg." + icon = 'icons/obj/food_syn.dmi' + icon_state = "bibimbap" + trash = /obj/item/trash/snack_bowl + filling_color = "#4f2100" + nutriment_amt = 10 + nutriment_desc = list("egg" = 5, "vegetables" = 5) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/bibimbap/Initialize() + . = ..() + reagents.add_reagent("protein", 10) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/lomein + name = "lo mein" + gender = PLURAL + desc = "A popular Chinese noodle dish. Chopsticks optional." + icon = 'icons/obj/food_syn.dmi' + icon_state = "lomein" + trash = /obj/item/trash/plate + filling_color = "#FCEE81" + nutriment_amt = 8 + nutriment_desc = list("noodles" = 6, "sesame sauce" = 2) + center_of_mass = list("x"=16, "y"=10) + +/obj/item/weapon/reagent_containers/food/snacks/lomein/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/friedrice + name = "fried rice" + gender = PLURAL + desc = "A less-boring dish of less-boring rice!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "friedrice" + trash = /obj/item/trash/snack_bowl + filling_color = "#FFFBDB" + nutriment_amt = 7 + nutriment_desc = list("rice" = 7) + center_of_mass = list("x"=17, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/friedrice/Initialize() + . = ..() + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet + name = "chicken fillet sandwich" + desc = "Fried chicken, in sandwich format. Beauty is simplicity." + icon = 'icons/obj/food_syn.dmi' + icon_state = "chickenfillet" + filling_color = "#E9ADFF" + nutriment_amt = 4 + nutriment_desc = list("breading" = 4) + center_of_mass = list("x"=16, "y"=16) + +/obj/item/weapon/reagent_containers/food/snacks/chickenfillet/Initialize() + . = ..() + reagents.add_reagent("protein", 8) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/chilicheesefries + name = "chili cheese fries" + gender = PLURAL + desc = "A mighty plate of fries, drowned in hot chili and cheese sauce. Because your arteries are overrated." + icon = 'icons/obj/food_syn.dmi' + icon_state = "chilicheesefries" + trash = /obj/item/trash/plate + filling_color = "#EDDD00" + nutriment_amt = 8 + nutriment_desc = list("hearty, cheesy fries" = 8) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/chilicheesefries/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("capsaicin", 2) + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/friedmushroom + name = "fried mushroom" + desc = "A tender, beer-battered plump helmet, fried to crispy perfection." + icon = 'icons/obj/food_syn.dmi' + icon_state = "friedmushroom" + filling_color = "#EDDD00" + nutriment_amt = 4 + nutriment_desc = list("alcoholic mushrooms" = 4) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/friedmushroom/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/pisanggoreng + name = "pisang goreng" + gender = PLURAL + desc = "Crispy, starchy, sweet banana fritters. Popular street food in parts of Sol." + icon = 'icons/obj/food_syn.dmi' + icon_state = "pisanggoreng" + trash = /obj/item/trash/plate + filling_color = "#301301" + nutriment_amt = 8 + nutriment_desc = list("sweet bananas" = 8) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/pisanggoreng/Initialize() + . = ..() + reagents.add_reagent("protein", 1) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/meatbun + name = "meat bun" + desc = "A soft, fluffy flour bun also known as baozi. This one is filled with a spiced meat filling." + icon = 'icons/obj/food_syn.dmi' + icon_state = "meatbun" + filling_color = "#edd7d7" + nutriment_amt = 5 + nutriment_desc = list("spice" = 5) + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/meatbun/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + bitesize = 5 + +/obj/item/weapon/reagent_containers/food/snacks/custardbun + name = "custard bun" + desc = "A soft, fluffy flour bun also known as baozi. This one is filled with an egg custard." + icon = 'icons/obj/food_syn.dmi' + icon_state = "meatbun" + nutriment_amt = 6 + nutriment_desc = list("egg custard" = 6) + filling_color = "#ebedc2" + center_of_mass = list("x"=16, "y"=11) + +/obj/item/weapon/reagent_containers/food/snacks/custardbun/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 6 + +/obj/item/weapon/reagent_containers/food/snacks/chickenmomo + name = "chicken momo" + gender = PLURAL + desc = "A plate of spiced and steamed chicken dumplings. The style originates from south Asia." + icon = 'icons/obj/food_syn.dmi' + icon_state = "momo" + trash = /obj/item/trash/snacktray + filling_color = "#edd7d7" + nutriment_amt = 9 + nutriment_desc = list("spiced chicken" = 9) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/chickenmomo/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/veggiemomo + name = "veggie momo" + gender = PLURAL + desc = "A plate of spiced and steamed vegetable dumplings. The style originates from south Asia." + icon = 'icons/obj/food_syn.dmi' + icon_state = "momo" + trash = /obj/item/trash/snacktray + filling_color = "#edd7d7" + nutriment_amt = 13 + nutriment_desc = list("spiced vegetables" = 13) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/veggiemomo/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/risotto + name = "risotto" + gender = PLURAL + desc = "A creamy, savory rice dish from southern Europe, typically cooked slowly with wine and broth. This one has bits of mushroom." + icon = 'icons/obj/food_syn.dmi' + icon_state = "risotto" + trash = /obj/item/trash/snack_bowl + filling_color = "#edd7d7" + nutriment_amt = 9 + nutriment_desc = list("savory rice" = 6, "cream" = 3) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/risotto/Initialize() + . = ..() + reagents.add_reagent("protein", 1) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/risottoballs + name = "risotto balls" + gender = PLURAL + desc = "Mushroom risotto that has been battered and deep fried. The best use of leftovers!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "risottoballs" + trash = /obj/item/trash/snack_bowl + filling_color = "#edd7d7" + nutriment_amt = 1 + nutriment_desc = list("batter" = 1) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/risottoballs/Initialize() + . = ..() + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/honeytoast + name = "piece of honeyed toast" + desc = "For those who like their breakfast sweet." + icon = 'icons/obj/food_syn.dmi' + icon_state = "honeytoast" + trash = /obj/item/trash/plate + filling_color = "#EDE5AD" + nutriment_amt = 1 + nutriment_desc = list("sweet, crunchy bread" = 1) + center_of_mass = list("x"=16, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/honeytoast/Initialize() + . = ..() + bitesize = 4 + +/obj/item/weapon/reagent_containers/food/snacks/poachedegg + name = "poached egg" + desc = "A delicately poached egg with a runny yolk. Healthier than its fried counterpart." + icon = 'icons/obj/food_syn.dmi' + icon_state = "poachedegg" + trash = /obj/item/trash/plate + filling_color = "#FFDF78" + nutriment_amt = 1 + nutriment_desc = list("egg" = 1) + center_of_mass = list("x"=16, "y"=14) + +/obj/item/weapon/reagent_containers/food/snacks/poachedegg/Initialize() + . = ..() + reagents.add_reagent("protein", 3) + reagents.add_reagent("blackpepper", 1) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/ribplate + name = "plate of ribs" + desc = "A half-rack of ribs, brushed with some sort of honey-glaze. Why are there no napkins on board?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "ribplate" + trash = /obj/item/trash/plate + filling_color = "#7A3D11" + nutriment_amt = 6 + nutriment_desc = list("barbecue" = 6) + center_of_mass = list("x"=16, "y"=13) + +/obj/item/weapon/reagent_containers/food/snacks/ribplate/Initialize() + . = ..() + reagents.add_reagent("protein", 6) + reagents.add_reagent("triglyceride", 2) + reagents.add_reagent("blackpepper", 1) + reagents.add_reagent("honey", 5) + bitesize = 4 + +// SLICEABLE FOODS - SYNNONO MEME FOOD EXPANSION - Credit to Synnono from Aurorastation (again) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie + name = "key lime pie" + desc = "A tart, sweet dessert. What's a key lime, anyway?" + icon = 'icons/obj/food_syn.dmi' + icon_state = "keylimepie" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/keylimepieslice + slices_num = 5 + filling_color = "#F5B951" + nutriment_amt = 16 + nutriment_desc = list("lime" = 12, "graham crackers" = 4) + center_of_mass = list("x"=16, "y"=10) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie/Initialize() + . = ..() + reagents.add_reagent("protein", 4) + +/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice + name = "slice of key lime pie" + desc = "A slice of tart pie, with whipped cream on top." + icon = 'icons/obj/food_syn.dmi' + icon_state = "keylimepieslice" + trash = /obj/item/trash/plate + filling_color = "#F5B951" + bitesize = 3 + nutriment_desc = list("lime" = 1) + center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/keylimepieslice/filled + nutriment_amt = 1 + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche + name = "quiche" + desc = "Real men eat this, contrary to popular belief." + icon = 'icons/obj/food_syn.dmi' + icon_state = "quiche" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/quicheslice + slices_num = 5 + filling_color = "#F5B951" + nutriment_amt = 10 + nutriment_desc = list("cheese" = 5, "egg" = 5) + center_of_mass = list("x"=16, "y"=10) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche/Initialize() + . = ..() + reagents.add_reagent("protein", 10) + +/obj/item/weapon/reagent_containers/food/snacks/quicheslice + name = "slice of quiche" + desc = "A slice of delicious quiche. Eggy, cheesy goodness." + icon = 'icons/obj/food_syn.dmi' + icon_state = "quicheslice" + trash = /obj/item/trash/plate + filling_color = "#F5B951" + bitesize = 3 + nutriment_desc = list("cheesy eggs" = 1) + center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/quicheslice/filled + nutriment_amt = 1 + +/obj/item/weapon/reagent_containers/food/snacks/quicheslice/filled/Initialize() + . = ..() + reagents.add_reagent("protein", 1) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies + name = "brownies" + gender = PLURAL + desc = "Halfway to fudge, or halfway to cake? Who cares!" + icon = 'icons/obj/food_syn.dmi' + icon_state = "brownies" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/browniesslice + slices_num = 4 + trash = /obj/item/trash/brownies + filling_color = "#301301" + nutriment_amt = 8 + nutriment_desc = list("fudge" = 8) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + bitesize = 2 + +/obj/item/weapon/reagent_containers/food/snacks/browniesslice + name = "brownie" + desc = "a dense, decadent chocolate brownie." + icon = 'icons/obj/food_syn.dmi' + icon_state = "browniesslice" + trash = /obj/item/trash/plate + filling_color = "#F5B951" + bitesize = 2 + nutriment_desc = list("fudge" = 1) + center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/browniesslice/filled + nutriment_amt = 1 + +/obj/item/weapon/reagent_containers/food/snacks/browniesslice/filled/Initialize() + . = ..() + reagents.add_reagent("protein", 1) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies + name = "cosmic brownies" + gender = PLURAL + desc = "Like, ultra-trippy. Brownies HAVE no gender, man." //Except I had to add one! + icon = 'icons/obj/food_syn.dmi' + icon_state = "cosmicbrownies" + slice_path = /obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice + slices_num = 4 + trash = /obj/item/trash/brownies + filling_color = "#301301" + nutriment_amt = 8 + nutriment_desc = list("fudge" = 8) + center_of_mass = list("x"=15, "y"=9) + +/obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies/Initialize() + . = ..() + reagents.add_reagent("protein", 2) + reagents.add_reagent("space_drugs", 2) + reagents.add_reagent("bicaridine", 1) + reagents.add_reagent("kelotane", 1) + reagents.add_reagent("toxin", 1) + bitesize = 3 + +/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice + name = "cosmic brownie" + desc = "a dense, decadent and fun-looking chocolate brownie." + icon = 'icons/obj/food_syn.dmi' + icon_state = "cosmicbrowniesslice" + trash = /obj/item/trash/plate + filling_color = "#F5B951" + bitesize = 3 + nutriment_desc = list("fudge" = 1) + center_of_mass = list("x"=16, "y"=12) + +/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled + nutriment_amt = 1 + +/obj/item/weapon/reagent_containers/food/snacks/cosmicbrowniesslice/filled/Initialize() + . = ..() + reagents.add_reagent("protein", 1) \ No newline at end of file diff --git a/code/modules/food/food/snacks/meat.dm b/code/modules/food/food/snacks/meat.dm index c2c5753eda..394a8b9fc6 100644 --- a/code/modules/food/food/snacks/meat.dm +++ b/code/modules/food/food/snacks/meat.dm @@ -8,8 +8,19 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/Initialize() . = ..() - reagents.add_reagent("protein", 9) - src.bitesize = 3 + reagents.add_reagent("protein", 6) + reagents.add_reagent("triglyceride", 2) + src.bitesize = 1.5 + +/obj/item/weapon/reagent_containers/food/snacks/meat/cook() + + if (!isnull(cooked_icon)) + icon_state = cooked_icon + flat_icon = null //Force regenating the flat icon for coatings, since we've changed the icon of the thing being coated + ..() + + if (name == initial(name)) + name = "cooked [name]" /obj/item/weapon/reagent_containers/food/snacks/meat/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W,/obj/item/weapon/material/knife)) @@ -34,4 +45,16 @@ /obj/item/weapon/reagent_containers/food/snacks/meat/corgi name = "Corgi meat" - desc = "Tastes like... well, you know." \ No newline at end of file + desc = "Tastes like... well, you know." + +/obj/item/weapon/reagent_containers/food/snacks/meat/chicken + name = "chicken" + icon = 'icons/obj/food_syn.dmi' + icon_state = "chickenbreast" + cooked_icon = "chickenbreast_cooked" + filling_color = "#BBBBAA" + +/obj/item/weapon/reagent_containers/food/snacks/meat/chicken/Initialize() + . = ..() + reagents.remove_reagent("triglyceride", INFINITY) + //Chicken is low fat. Less total calories than other meats \ No newline at end of file diff --git a/code/modules/food/food/thecake.dm b/code/modules/food/food/thecake.dm index 6c5b1ad580..05f5ef6440 100644 --- a/code/modules/food/food/thecake.dm +++ b/code/modules/food/food/thecake.dm @@ -1,6 +1,6 @@ // Chaos cake -/datum/recipe/microwave/chaoscake_layerone +/datum/recipe/chaoscake_layerone reagents = list("flour" = 300,"milk" = 200, "sugar" = 100, "egg" = 30) fruit = list("poisonberries" = 15, "cherries" = 15) items = list( @@ -11,7 +11,7 @@ ) result = /obj/structure/chaoscake -/datum/recipe/microwave/chaoscake_layertwo +/datum/recipe/chaoscake_layertwo reagents = list("flour" = 300, "milk" = 200, "sugar" = 100, "egg" = 30, ) fruit = list("vanilla" = 15, "banana" = 15) items = list( @@ -22,7 +22,7 @@ ) result = /obj/item/weapon/chaoscake_layer -/datum/recipe/microwave/chaoscake_layerthree +/datum/recipe/chaoscake_layerthree reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "deathbell" = 100) fruit = list("grapes" = 30) items = list( @@ -32,7 +32,7 @@ ) result = /obj/item/weapon/chaoscake_layer/three -/datum/recipe/microwave/chaoscake_layerfour +/datum/recipe/chaoscake_layerfour reagents = list("flour" = 240, "milk" = 150, "sugar" = 80, "egg" = 24, "milkshake" = 300) fruit = list("rice" = 30) items = list( @@ -42,13 +42,13 @@ ) result = /obj/item/weapon/chaoscake_layer/four -/datum/recipe/microwave/chaoscake_layerfive +/datum/recipe/chaoscake_layerfive reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "blood" = 300) fruit = list("tomato" = 20) items = list() //supposed to be made with lobster, still has to be ported. result = /obj/item/weapon/chaoscake_layer/five -/datum/recipe/microwave/chaoscake_layersix +/datum/recipe/chaoscake_layersix reagents = list("flour" = 180, "milk" = 100, "sugar" = 60, "egg" = 18, "sprinkles" = 10) fruit = list("apple" = 30) items = list( @@ -61,7 +61,7 @@ ) result = /obj/item/weapon/chaoscake_layer/six -/datum/recipe/microwave/chaoscake_layerseven +/datum/recipe/chaoscake_layerseven reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "devilskiss" = 200) fruit = list("potato" = 10) items = list( @@ -71,7 +71,7 @@ ) result = /obj/item/weapon/chaoscake_layer/seven -/datum/recipe/microwave/chaoscake_layereight +/datum/recipe/chaoscake_layereight reagents = list("flour" = 120, "milk" = 50, "sugar" = 40, "egg" = 12, "cream" = 200) fruit = list("lemon" = 10) items = list( @@ -81,7 +81,7 @@ ) result = /obj/item/weapon/chaoscake_layer/eight -/datum/recipe/microwave/chaoscake_layernine +/datum/recipe/chaoscake_layernine reagents = list("water" = 100, "blood" = 100) fruit = list("goldapple" = 50) items = list() diff --git a/code/modules/food/kitchen/cooking_machines/_appliance.dm b/code/modules/food/kitchen/cooking_machines/_appliance.dm new file mode 100644 index 0000000000..265b0c95bc --- /dev/null +++ b/code/modules/food/kitchen/cooking_machines/_appliance.dm @@ -0,0 +1,732 @@ +// This folder contains code that was originally ported from Apollo Station and then refactored/optimized/changed. + +// Tracks precooked food to stop deep fried baked grilled grilled grilled diona nymph cereal. +/obj/item/weapon/reagent_containers/food/snacks + var/tmp/list/cooked = list() + +// Root type for cooking machines. See following files for specific implementations. +/obj/machinery/appliance + name = "cooker" + desc = "You shouldn't be seeing this!" + icon = 'icons/obj/cooking_machines.dmi' + var/appliancetype = 0 + density = 1 + anchored = 1 + + use_power = USE_POWER_IDLE + idle_power_usage = 5 // Power used when turned on, but not processing anything + active_power_usage = 1000 // Power used when turned on and actively cooking something + + var/cooking_power = 0 // Effectiveness/speed at cooking + var/cooking_coeff = 0 // Optimal power * proximity to optimal temp; used to calc. cooking power. + var/heating_power = 1000 // Effectiveness at heating up; not used for mixers, should be equal to active_power_usage + var/max_contents = 1 // Maximum number of things this appliance can simultaneously cook + var/on_icon // Icon state used when cooking. + var/off_icon // Icon state used when not cooking. + var/cooking = FALSE // Whether or not the machine is currently operating. + var/cook_type // A string value used to track what kind of food this machine makes. + var/can_cook_mobs // Whether or not this machine accepts grabbed mobs. + var/mobdamagetype = BRUTE // Burn damage for cooking appliances, brute for cereal/candy + var/food_color // Colour of resulting food item. + var/cooked_sound = 'sound/machines/ding.ogg' // Sound played when cooking completes. + var/can_burn_food = FALSE // Can the object burn food that is left inside? + var/burn_chance = 10 // How likely is the food to burn? + var/list/cooking_objs = list() // List of things being cooked + + // If the machine has multiple output modes, define them here. + var/selected_option + var/list/output_options = list() + var/list/datum/recipe/available_recipes + + var/container_type = null + + var/combine_first = FALSE // If TRUE, this appliance will do combination cooking before checking recipes + +/obj/machinery/appliance/Initialize() + . = ..() + + default_apply_parts() + + if(output_options.len) + verbs += /obj/machinery/appliance/proc/choose_output + + if (!available_recipes) + available_recipes = new + + for (var/type in subtypesof(/datum/recipe)) + var/datum/recipe/test = new type + if ((appliancetype & test.appliance)) + available_recipes += test + else + qdel(test) + +/obj/machinery/appliance/Destroy() + for (var/a in cooking_objs) + var/datum/cooking_item/CI = a + qdel(CI.container)//Food is fragile, it probably doesnt survive the destruction of the machine + cooking_objs -= CI + qdel(CI) + return ..() + +/obj/machinery/appliance/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + . += list_contents(user) + +/obj/machinery/appliance/proc/list_contents(var/mob/user) + if (cooking_objs.len) + var/string = "Contains..." + for (var/a in cooking_objs) + var/datum/cooking_item/CI = a + string += "-\a [CI.container.label(null, CI.combine_target)], [report_progress(CI)]
" + to_chat(user, string) + else + to_chat(user, "") + +/obj/machinery/appliance/proc/report_progress(var/datum/cooking_item/CI) + if (!CI || !CI.max_cookwork) + return null + + if (!CI.cookwork) + return "It is cold." + var/progress = CI.cookwork / CI.max_cookwork + + if (progress < 0.25) + return "It's barely started cooking." + if (progress < 0.75) + return "It's cooking away nicely." + if (progress < 1) + return "It's almost ready!" + + var/half_overcook = (CI.overcook_mult - 1)*0.5 + if (progress < 1+half_overcook) + return "It is done !" + if (progress < CI.overcook_mult) + return "It looks overcooked, get it out!" + else + return "It is burning!" + +/obj/machinery/appliance/update_icon() + if (!stat && cooking_objs.len) + icon_state = on_icon + + else + icon_state = off_icon + +/obj/machinery/appliance/verb/toggle_power() + set name = "Toggle Power" + set category = "Object" + set src in view() + + attempt_toggle_power(usr) + +/obj/machinery/appliance/proc/attempt_toggle_power(mob/user) + if (!isliving(user)) + return + + if (!user.IsAdvancedToolUser()) + to_chat(user, "You lack the dexterity to do that!") + return + + if (user.stat || user.restrained() || user.incapacitated()) + return + + if (!Adjacent(user) && !issilicon(user)) + to_chat(user, "You can't reach [src] from here.") + return + + if (stat & POWEROFF)//Its turned off + stat &= ~POWEROFF + use_power = 1 + user.visible_message("[user] turns [src] on.", "You turn on [src].") + + else //Its on, turn it off + stat |= POWEROFF + use_power = 0 + user.visible_message("[user] turns [src] off.", "You turn off [src].") + cooking = FALSE // Stop cooking here, too, just in case. + + playsound(src, 'sound/machines/click.ogg', 40, 1) + update_icon() + +/obj/machinery/appliance/AICtrlClick(mob/user) + attempt_toggle_power(user) + +/obj/machinery/appliance/proc/choose_output() + set src in view() + set name = "Choose output" + set category = "Object" + + if (!isliving(usr)) + return + + if (!usr.IsAdvancedToolUser()) + to_chat(usr, "You lack the dexterity to do that!") + return + + if (usr.stat || usr.restrained() || usr.incapacitated()) + return + + if (!Adjacent(usr) && !issilicon(usr)) + to_chat(usr, "You can't adjust the [src] from this distance, get closer!") + return + + if(output_options.len) + var/choice = input("What specific food do you wish to make with \the [src]?") as null|anything in output_options+"Default" + if(!choice) + return + if(choice == "Default") + selected_option = null + to_chat(usr, "You decide not to make anything specific with \the [src].") + else + selected_option = choice + to_chat(usr, "You prepare \the [src] to make \a [selected_option] with the next thing you put in. Try putting several ingredients in a container!") + +//Handles all validity checking and error messages for inserting things +/obj/machinery/appliance/proc/can_insert(var/obj/item/I, var/mob/user) + if (istype(I.loc, /mob/living/silicon)) + return 0 + else if (istype(I.loc, /obj/item/rig_module)) + return 0 + + // We are trying to cook a grabbed mob. + var/obj/item/weapon/grab/G = I + if(istype(G)) + + if(!can_cook_mobs) + to_chat(user, "That's not going to fit.") + return 0 + + if(!isliving(G.affecting)) + to_chat(user, "You can't cook that.") + return 0 + + return 2 + + + if (!has_space(I)) + to_chat(user, "There's no room in [src] for that!") + return 0 + + + if (container_type && istype(I, container_type)) + return 1 + + // We're trying to cook something else. Check if it's valid. + var/obj/item/weapon/reagent_containers/food/snacks/check = I + if(istype(check) && islist(check.cooked) && (cook_type in check.cooked)) + to_chat(user, "\The [check] has already been [cook_type].") + return 0 + else if(istype(check, /obj/item/weapon/reagent_containers/glass)) + to_chat(user, "That would probably break [src].") + return 0 + else if(istype(check, /obj/item/weapon/disk/nuclear)) + to_chat(user, "You can't cook that.") + return 0 + else if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer)) // You can't cook tools, dummy. + return 0 + else if(!istype(check) && !istype(check, /obj/item/weapon/holder)) + to_chat(user, "That's not edible.") + return 0 + + return 1 + + +//This function is overridden by cookers that do stuff with containers +/obj/machinery/appliance/proc/has_space(var/obj/item/I) + if (cooking_objs.len >= max_contents) + return FALSE + + else return TRUE + +/obj/machinery/appliance/attackby(var/obj/item/I, var/mob/user) + if(!cook_type || (stat & (BROKEN))) + to_chat(user, "\The [src] is not working.") + return + + var/result = can_insert(I, user) + if(!result) + if(default_deconstruction_screwdriver(user, I)) + return + else if(default_part_replacement(user, I)) + return + else + return + + if(result == 2) + var/obj/item/weapon/grab/G = I + if (G && istype(G) && G.affecting) + cook_mob(G.affecting, user) + return + + //From here we can start cooking food + add_content(I, user) + update_icon() + +//Override for container mechanics +/obj/machinery/appliance/proc/add_content(var/obj/item/I, var/mob/user) + if(!user.unEquip(I)) + return + + var/datum/cooking_item/CI = has_space(I) + if (istype(I, /obj/item/weapon/reagent_containers/cooking_container) && CI == 1) + var/obj/item/weapon/reagent_containers/cooking_container/CC = I + CI = new /datum/cooking_item/(CC) + I.forceMove(src) + cooking_objs.Add(CI) + user.visible_message("\The [user] puts \the [I] into \the [src].") + if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing. + return + else + if (CI && istype(CI)) + I.forceMove(CI.container) + + else //Something went wrong + return + + if (selected_option) + CI.combine_target = selected_option + + // We can actually start cooking now. + user.visible_message("\The [user] puts \the [I] into \the [src].") + + get_cooking_work(CI) + cooking = TRUE + return CI + +/obj/machinery/appliance/proc/get_cooking_work(var/datum/cooking_item/CI) + for (var/obj/item/J in CI.container) + cookwork_by_item(J, CI) + + for (var/r in CI.container.reagents.reagent_list) + var/datum/reagent/R = r + if (istype(R, /datum/reagent/nutriment)) + CI.max_cookwork += R.volume *2//Added reagents contribute less than those in food items due to granular form + + //Nonfat reagents will soak oil + if (!istype(R, /datum/reagent/nutriment/triglyceride)) + CI.max_oil += R.volume * 0.25 + else + CI.max_cookwork += R.volume + CI.max_oil += R.volume * 0.10 + + //Rescaling cooking work to avoid insanely long times for large things + var/buffer = CI.max_cookwork + CI.max_cookwork = 0 + var/multiplier = 1 + var/step = 4 + while (buffer > step) + buffer -= step + CI.max_cookwork += step*multiplier + multiplier *= 0.95 + + CI.max_cookwork += buffer*multiplier + +//Just a helper to save code duplication in the above +/obj/machinery/appliance/proc/cookwork_by_item(var/obj/item/I, var/datum/cooking_item/CI) + var/obj/item/weapon/reagent_containers/food/snacks/S = I + var/work = 0 + if (istype(S)) + if (S.reagents) + for (var/r in S.reagents.reagent_list) + var/datum/reagent/R = r + if (istype(R, /datum/reagent/nutriment)) + work += R.volume *3//Core nutrients contribute much more than peripheral chemicals + + //Nonfat reagents will soak oil + if (!istype(R, /datum/reagent/nutriment/triglyceride)) + CI.max_oil += R.volume * 0.35 + else + work += R.volume + CI.max_oil += R.volume * 0.15 + + + else if(istype(I, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = I + if (H.held_mob) + work += ((H.held_mob.mob_size * H.held_mob.size_multiplier) * (H.held_mob.mob_size * H.held_mob.size_multiplier) * 2)+2 + + CI.max_cookwork += work + +//Called every tick while we're cooking something +/obj/machinery/appliance/proc/do_cooking_tick(var/datum/cooking_item/CI) + if (!istype(CI) || !CI.max_cookwork) + return FALSE + + var/was_done = FALSE + if (CI.cookwork >= CI.max_cookwork) + was_done = TRUE + + CI.cookwork += cooking_power + + if (!was_done && CI.cookwork >= CI.max_cookwork) + //If cookwork has gone from above to below 0, then this item finished cooking + finish_cooking(CI) + + else if (!CI.burned && CI.cookwork > min(CI.max_cookwork * CI.overcook_mult, CI.max_cookwork + 30)) + burn_food(CI) + + // Gotta hurt. + for(var/obj/item/weapon/holder/H in CI.container.contents) + var/mob/living/M = H.held_mob + if(M) + M.apply_damage(rand(1,3) * (1/M.size_multiplier), mobdamagetype, pick(BP_ALL)) + + return TRUE + +/obj/machinery/appliance/process() + if(cooking_power > 0 && cooking) + var/all_done_cooking = TRUE + for(var/datum/cooking_item/CI in cooking_objs) + do_cooking_tick(CI) + if(CI.max_cookwork > 0) + all_done_cooking = FALSE + if(all_done_cooking) + cooking = FALSE + update_icon() + + +/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI) + + src.visible_message("\The [src] pings!") + if(cooked_sound) + playsound(get_turf(src), cooked_sound, 50, 1) + //Check recipes first, a valid recipe overrides other options + var/datum/recipe/recipe = null + var/atom/C = null + if (CI.container) + C = CI.container + else + C = src + recipe = select_recipe(available_recipes,C) + + if (recipe) + CI.result_type = 4//Recipe type, a specific recipe will transform the ingredients into a new food + var/list/results = recipe.make_food(C) + + var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes + + for (var/atom/movable/AM in results) + AM.forceMove(temp) + + //making multiple copies of a recipe from one container. For example, tons of fries + while (select_recipe(available_recipes,C) == recipe) + var/list/TR = list() + TR += recipe.make_food(C) + for (var/atom/movable/AM in TR) //Move results to buffer + AM.forceMove(temp) + results += TR + + + for (var/r in results) + var/obj/item/weapon/reagent_containers/food/snacks/R = r + R.forceMove(C) //Move everything from the buffer back to the container + R.cooked |= cook_type + + QDEL_NULL(temp) //delete buffer object + . = 1 //None of the rest of this function is relevant for recipe cooking + + else if(CI.combine_target) + CI.result_type = 3//Combination type. We're making something out of our ingredients + . = combination_cook(CI) + + + else + //Otherwise, we're just doing standard modification cooking. change a color + name + for (var/obj/item/i in CI.container) + modify_cook(i, CI) + + //Final step. Cook function just cooks batter for now. + for (var/obj/item/weapon/reagent_containers/food/snacks/S in CI.container) + S.cook() + + +//Combination cooking involves combining the names and reagents of ingredients into a predefined output object +//The ingredients represent flavours or fillings. EG: donut pizza, cheese bread +/obj/machinery/appliance/proc/combination_cook(var/datum/cooking_item/CI) + var/cook_path = output_options[CI.combine_target] + + var/list/words = list() + var/list/cooktypes = list() + var/datum/reagents/buffer = new /datum/reagents(1000) + var/totalcolour + + for (var/obj/item/I in CI.container) + var/obj/item/weapon/reagent_containers/food/snacks/S + if (istype(I, /obj/item/weapon/holder)) + S = create_mob_food(I, CI) + else if (istype(I, /obj/item/weapon/reagent_containers/food/snacks)) + S = I + + if (!S) + continue + + words |= text2list(S.name," ") + cooktypes |= S.cooked + + if (S.reagents && S.reagents.total_volume > 0) + if (S.filling_color) + if (!totalcolour || !buffer.total_volume) + totalcolour = S.filling_color + else + var/t = buffer.total_volume + S.reagents.total_volume + t = buffer.total_volume / y + totalcolour = BlendRGB(totalcolour, S.filling_color, t) + //Blend colours in order to find a good filling color + + + S.reagents.trans_to_holder(buffer, S.reagents.total_volume) + //Cleanup these empty husk ingredients now + if (I) + qdel(I) + if (S) + qdel(S) + + CI.container.reagents.trans_to_holder(buffer, CI.container.reagents.total_volume) + + var/obj/item/weapon/reagent_containers/food/snacks/result = new cook_path(CI.container) + buffer.trans_to(result, buffer.total_volume) + + //Filling overlay + var/image/I = image(result.icon, "[result.icon_state]_filling") + I.color = totalcolour + result.add_overlay(I) + result.filling_color = totalcolour + + //Set the name. + words -= list("and", "the", "in", "is", "bar", "raw", "sticks", "boiled", "fried", "deep", "-o-", "warm", "two", "flavored") + //Remove common connecting words and unsuitable ones from the list. Unsuitable words include those describing + //the shape, cooked-ness/temperature or other state of an ingredient which doesn't apply to the finished product + words.Remove(result.name) + shuffle(words) + var/num = 6 //Maximum number of words + while (num > 0) + num-- + if (!words.len) + break + //Add prefixes from the ingredients in a random order until we run out or hit limit + result.name = "[pop(words)] [result.name]" + + //This proc sets the size of the output result + result.update_icon() + return result + +//Helper proc for standard modification cooking +/obj/machinery/appliance/proc/modify_cook(var/obj/item/input, var/datum/cooking_item/CI) + var/obj/item/weapon/reagent_containers/food/snacks/result + if (istype(input, /obj/item/weapon/holder)) + result = create_mob_food(input, CI) + else if (istype(input, /obj/item/weapon/reagent_containers/food/snacks)) + result = input + else + //Nonviable item + return + + if (!result) + return + + result.cooked |= cook_type + + // Set icon and appearance. + change_product_appearance(result, CI) + + // Update strings. + change_product_strings(result, CI) + +/obj/machinery/appliance/proc/burn_food(var/datum/cooking_item/CI) + // You dun goofed. + CI.burned = 1 + CI.container.clear() + new /obj/item/weapon/reagent_containers/food/snacks/badrecipe(CI.container) + + // Produce nasty smoke. + visible_message("\The [src] vomits a gout of rancid smoke!") + var/datum/effect/effect/system/smoke_spread/bad/burntfood/smoke = new /datum/effect/effect/system/smoke_spread/bad/burntfood + playsound(src, 'sound/effects/smoke.ogg', 20, 1) + smoke.attach(src) + smoke.set_up(10, 0, get_turf(src), 300) + smoke.start() + + // Set off fire alarms! + var/obj/machinery/firealarm/FA = locate() in get_area(src) + if(FA) + FA.alarm() + +/obj/machinery/appliance/attack_hand(var/mob/user) + if (cooking_objs.len) + if (removal_menu(user)) + return + else + ..() + +/obj/machinery/appliance/proc/removal_menu(var/mob/user) + if (can_remove_items(user)) + var/list/menuoptions = list() + for (var/a in cooking_objs) + var/datum/cooking_item/CI = a + if (CI.container) + menuoptions[CI.container.label(menuoptions.len)] = CI + + var/selection = input(user, "Which item would you like to remove?", "Remove ingredients") as null|anything in menuoptions + if (selection) + var/datum/cooking_item/CI = menuoptions[selection] + eject(CI, user) + update_icon() + return 1 + return 0 + +/obj/machinery/appliance/proc/can_remove_items(var/mob/user) + if (!Adjacent(user)) + return 0 + + if (isanimal(user)) + return 0 + + return 1 + +/obj/machinery/appliance/proc/eject(var/datum/cooking_item/CI, var/mob/user = null) + var/obj/item/thing + var/delete = 1 + var/status = CI.container.check_contents() + if (status == 1)//If theres only one object in a container then we extract that + thing = locate(/obj/item) in CI.container + delete = 0 + else//If the container is empty OR contains more than one thing, then we must extract the container + thing = CI.container + if (!user || !user.put_in_hands(thing)) + thing.forceMove(get_turf(src)) + + if (delete) + cooking_objs -= CI + qdel(CI) + else + CI.reset()//reset instead of deleting if the container is left inside + +/obj/machinery/appliance/proc/cook_mob(var/mob/living/victim, var/mob/user) + return + +/obj/machinery/appliance/proc/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) + product.name = "[cook_type] [product.name]" + product.desc = "[product.desc]\nIt has been [cook_type]." + + +/obj/machinery/appliance/proc/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) + if (!product.coating) //Coatings change colour through a new sprite + product.color = food_color + product.filling_color = food_color + +/mob/living/proc/calculate_composition() // moved from devour.dm on aurora's side + if (!composition_reagent)//if no reagent has been set, then we'll set one + if (isSynthetic()) + src.composition_reagent = "iron" + else + if(istype(src, /mob/living/carbon/human/diona) || istype(src, /mob/living/carbon/alien/diona)) + src.composition_reagent = "nutriment" // diona are plants, not meat + else + src.composition_reagent = "protein" + if(istype(src, /mob/living/carbon/human)) + var/mob/living/carbon/human/H = src + if(istype(H.species, /datum/species/diona)) + src.composition_reagent = "nutriment" + + //if the mob is a simple animal - MOB NOT ANIMAL - with a defined meat quantity + if (istype(src, /mob/living/simple_mob)) + var/mob/living/simple_mob/SA = src + if(SA.meat_amount) + src.composition_reagent_quantity = SA.meat_amount*2*9 + + //The quantity of protein is based on the meat_amount, but multiplied by 2 + + var/size_reagent = (src.mob_size * src.mob_size) * 3//The quantity of protein is set to 3x mob size squared + if (size_reagent > src.composition_reagent_quantity)//We take the larger of the two + src.composition_reagent_quantity = size_reagent + +//This function creates a food item which represents a dead mob +/obj/machinery/appliance/proc/create_mob_food(var/obj/item/weapon/holder/H, var/datum/cooking_item/CI) + if (!istype(H) || !H.held_mob) + qdel(H) + return null + var/mob/living/victim = H.held_mob + if (victim.stat != DEAD) + return null //Victim somehow survived the cooking, they do not become food + + victim.calculate_composition() + + var/obj/item/weapon/reagent_containers/food/snacks/variable/mob/result = new /obj/item/weapon/reagent_containers/food/snacks/variable/mob(CI.container) + result.w_class = victim.mob_size + result.reagents.add_reagent(victim.composition_reagent, victim.composition_reagent_quantity) + + if (victim.reagents) + victim.reagents.trans_to_holder(result.reagents, victim.reagents.total_volume) + + if (isanimal(victim)) + var/mob/living/simple_mob/SA = victim + result.kitchen_tag = SA.kitchen_tag + + result.appearance = victim + + var/matrix/M = matrix() + M.Turn(45) + M.Translate(1,-2) + result.transform = M + + // all done, now delete the old objects + H.held_mob = null + qdel(victim) + victim = null + qdel(H) + H = null + + return result + +/datum/cooking_item + var/max_cookwork + var/cookwork + var/overcook_mult = 3 // How long it takes to overcook. This is max_cookwork x overcook mult. If you're changing this, mind that at 3x, a max_cookwork of 30 becomes 90 ticks for the purpose of burning, and a max_cookwork of 4 only has 12 before burning! + var/result_type = 0 + var/obj/item/weapon/reagent_containers/cooking_container/container = null + var/combine_target = null + + //Result type is one of the following: + //0 unfinished, no result yet + //1 Standard modification cooking. eg Fried Donk Pocket, Baked wheat, etc + //2 Modification but with a new object that's an inert copy of the old. Generally used for deepfried mice + //3 Combination cooking, EG Donut Bread, Donk pocket pizza, etc + //4:Specific recipe cooking. EG: Turning raw potato sticks into fries + + var/burned = 0 + + var/oil = 0 + var/max_oil = 0//Used for fryers. + +/datum/cooking_item/New(var/obj/item/I) + container = I + +//This is called for containers whose contents are ejected without removing the container +/datum/cooking_item/proc/reset() + max_cookwork = 0 + cookwork = 0 + result_type = 0 + burned = 0 + max_oil = 0 + oil = 0 + combine_target = null + //Container is not reset + +/obj/machinery/appliance/RefreshParts() + ..() + var/scan_rating = 0 + var/cap_rating = 0 + + for(var/obj/item/weapon/stock_parts/P in src.component_parts) + if(istype(P, /obj/item/weapon/stock_parts/scanning_module)) + scan_rating += P.rating - 1 // Default parts shouldn't mess with stats + // to_world("RefreshParts returned scan rating of [scan_rating] during this step.") // Debug lines, uncomment if you need to test. + else if(istype(P, /obj/item/weapon/stock_parts/capacitor)) + cap_rating += P.rating - 1 // Default parts shouldn't mess with stats + // to_world("RefreshParts returned cap rating of [cap_rating] during this step.") // Debug lines, uncomment if you need to test. + + active_power_usage = initial(active_power_usage) - scan_rating * 25 + heating_power = initial(heating_power) + cap_rating * 25 + cooking_power = cooking_coeff * (1 + (scan_rating + cap_rating) / 20) // 100% eff. becomes 120%, 140%, 160% w/ better parts, thus rewarding upgrading the appliances during your shift. + // to_world("RefreshParts returned cooking power of [cooking_power] during this step.") // Debug lines, uncomment if you need to test. diff --git a/code/modules/food/kitchen/cooking_machines/_cooker.dm b/code/modules/food/kitchen/cooking_machines/_cooker.dm index f0716e015f..1e7193f166 100644 --- a/code/modules/food/kitchen/cooking_machines/_cooker.dm +++ b/code/modules/food/kitchen/cooking_machines/_cooker.dm @@ -1,261 +1,146 @@ -// This folder contains code that was originally ported from Apollo Station and then refactored/optimized/changed. +/obj/machinery/appliance/cooker + var/temperature = T20C + var/min_temp = 80 + T0C //Minimum temperature to do any cooking + var/optimal_temp = 200 + T0C //Temperature at which we have 100% efficiency. efficiency is lowered on either side of this + var/optimal_power = 0.6 //cooking power at 100% - This variable determines the MAXIMUM increase in do_cooking_ticks, once math goes through. If you want ticks of 0.5, set it to 0.5, etc. -// Tracks precooked food to stop deep fried baked grilled grilled grilled diona nymph cereal. -/obj/item/weapon/reagent_containers/food/snacks/var/list/cooked + var/loss = 1 //Temp lost per proc when equalising + var/resistance = 32000 //Resistance to heating. combines with heating power to determine how long heating takes. 32k by default. -// Root type for cooking machines. See following files for specific implementations. -/obj/machinery/cooker - name = "cooker" - desc = "You shouldn't be seeing this!" - icon = 'icons/obj/cooking_machines.dmi' - density = 1 - anchored = 1 - use_power = USE_POWER_IDLE - idle_power_usage = 5 + var/light_x = 0 + var/light_y = 0 + cooking_coeff = 0 + cooking_power = 0 + mobdamagetype = BURN + can_burn_food = TRUE - var/on_icon // Icon state used when cooking. - var/off_icon // Icon state used when not cooking. - var/cooking // Whether or not the machine is currently operating. - var/cook_type // A string value used to track what kind of food this machine makes. - var/cook_time = 200 // How many ticks the cooking will take. - var/can_cook_mobs // Whether or not this machine accepts grabbed mobs. - var/food_color // Colour of resulting food item. - var/cooked_sound // Sound played when cooking completes. - var/can_burn_food // Can the object burn food that is left inside? - var/burn_chance = 10 // How likely is the food to burn? - var/obj/item/cooking_obj // Holder for the currently cooking object. - - // If the machine has multiple output modes, define them here. - var/selected_option - var/list/output_options = list() - -/obj/machinery/cooker/Destroy() - if(cooking_obj) - qdel(cooking_obj) - cooking_obj = null - return ..() - -/obj/machinery/cooker/proc/set_cooking(new_setting) - cooking = new_setting - icon_state = new_setting ? on_icon : off_icon - -/obj/machinery/cooker/examine(mob/user) +/obj/machinery/appliance/cooker/examine(var/mob/user) . = ..() - if(cooking_obj && Adjacent(user)) - . += "You can see \a [cooking_obj] inside." - -/obj/machinery/cooker/attackby(var/obj/item/I, var/mob/user) - - if(!cook_type || (stat & (NOPOWER|BROKEN))) - to_chat(user, "\The [src] is not working.") - return - - if(cooking) - to_chat(user, "\The [src] is running!") - return - - if(default_unfasten_wrench(user, I, 20)) - return - - // We are trying to cook a grabbed mob. - var/obj/item/weapon/grab/G = I - if(istype(G)) - - if(!can_cook_mobs) - to_chat(user, "That's not going to fit.") - return - - if(!isliving(G.affecting)) - to_chat(user, "You can't cook that.") - return - - cook_mob(G.affecting, user) - return - - // We're trying to cook something else. Check if it's valid. - var/obj/item/weapon/reagent_containers/food/snacks/check = I - if(istype(check) && islist(check.cooked) && (cook_type in check.cooked)) - to_chat(user, "\The [check] has already been [cook_type].") - return 0 - else if(istype(check, /obj/item/weapon/reagent_containers/glass)) - to_chat(user, "That would probably break [src].") - return 0 - else if(istype(check, /obj/item/weapon/disk/nuclear)) - to_chat(user, "Central Command would kill you if you [cook_type] that.") - return 0 - else if(!istype(check) && !istype(check, /obj/item/weapon/holder) && !istype(check, /obj/item/organ)) //Gripper check has to go here, else it still just cuts it off. ~Mechoid - // Is it a borg using a gripper? - if(istype(check, /obj/item/weapon/gripper)) // Grippers. ~Mechoid. - var/obj/item/weapon/gripper/B = check //B, for Borg. - if(!B.wrapped) - to_chat(user, "\The [B] is not holding anything.") - return 0 + if(.) //no need to duplicate adjacency check + if(!stat) + if (temperature < min_temp) + to_chat(user, "\The [src] is still heating up and is too cold to cook anything yet.") else - var/B_held = B.wrapped - to_chat(user, "You use \the [B] to put \the [B_held] into \the [src].") - return 0 + to_chat(user, "It is running at [round(get_efficiency(), 0.1)]% efficiency!") + to_chat(user, "Temperature: [round(temperature - T0C, 0.1)]C / [round(optimal_temp - T0C, 0.1)]C") else - to_chat(user, "That's not edible.") - return 0 - - if(istype(I, /obj/item/organ)) - var/obj/item/organ/O = I - if(O.robotic) - to_chat(user, "That would probably break [src].") - return - - // Gotta hurt. - if(istype(cooking_obj, /obj/item/weapon/holder)) - for(var/mob/living/M in cooking_obj.contents) - M.apply_damage(rand(30,40), BURN, "chest") - - // Not sure why a food item that passed the previous checks would fail to drop, but safety first. (Hint: Borg grippers. That is why. ~Mechoid.) - if(!user.unEquip(I) && !istype(user,/mob/living/silicon/robot)) - return - - // We can actually start cooking now. - user.visible_message("\The [user] puts \the [I] into \the [src].") - cooking_obj = I - cooking_obj.forceMove(src) - set_cooking(TRUE) - icon_state = on_icon - - // Doop de doo. Jeopardy theme goes here. - sleep(cook_time) - - // Sanity checks. - if(!cooking_obj || cooking_obj.loc != src) - cooking_obj = null - icon_state = off_icon - set_cooking(FALSE) - return - - // RIP slow-moving held mobs. - if(istype(cooking_obj, /obj/item/weapon/holder)) - for(var/mob/living/M in cooking_obj.contents) - M.death() - qdel(M) - - // Cook the food. - var/cook_path - if(selected_option && output_options.len) - cook_path = output_options[selected_option] - if(!cook_path) - cook_path = /obj/item/weapon/reagent_containers/food/snacks/variable - var/obj/item/weapon/reagent_containers/food/snacks/result = new cook_path(src) //Holy typepaths, Batman. - - // Set icon and appearance. - change_product_appearance(result) - - // Update strings. - change_product_strings(result) - - // Copy reagents over. trans_to_obj must be used, as trans_to fails for snacks due to is_open_container() failing. - if(cooking_obj.reagents && cooking_obj.reagents.total_volume) - cooking_obj.reagents.trans_to_obj(result, cooking_obj.reagents.total_volume) - - // Set cooked data. - var/obj/item/weapon/reagent_containers/food/snacks/food_item = cooking_obj - if(istype(food_item) && islist(food_item.cooked)) - result.cooked = food_item.cooked.Copy() + to_chat(user, "It is switched off.") + +/obj/machinery/appliance/cooker/list_contents(var/mob/user) + if (cooking_objs.len) + var/string = "Contains...
" + var/num = 0 + for (var/a in cooking_objs) + num++ + var/datum/cooking_item/CI = a + if (CI && CI.container) + string += "- [CI.container.label(num)], [report_progress(CI)]
" + to_chat(user, string) else - result.cooked = list() - result.cooked |= cook_type + to_chat(user, "It's empty.") + +/obj/machinery/appliance/cooker/proc/get_efficiency() + // to_world("Our cooking_power is [cooking_power] and our efficiency is [(cooking_power / optimal_power) * 100].") // Debug lines, uncomment if you need to test. + return (cooking_power / optimal_power) * 100 - // Reset relevant variables. - qdel(cooking_obj) - src.visible_message("\The [src] pings!") - if(cooked_sound) - playsound(src, cooked_sound, 50, 1) +/obj/machinery/appliance/cooker/Initialize() + . = ..() + loss = (active_power_usage / resistance)*0.5 + cooking_objs = list() + for (var/i = 0, i < max_contents, i++) + cooking_objs.Add(new /datum/cooking_item/(new container_type(src))) + cooking = FALSE - if(!can_burn_food) - icon_state = off_icon - set_cooking(FALSE) - result.forceMove(get_turf(src)) - cooking_obj = null + update_icon() // this probably won't cause issues, but Aurora used SSIcons and queue_icon_update() instead + +/obj/machinery/appliance/cooker/update_icon() + cut_overlays() + var/image/light + if(use_power == 1 && !stat) + light = image(icon, "light_idle") + else if(use_power == 2 && !stat) + light = image(icon, "light_preheating") else - var/failed - var/overcook_period = max(FLOOR(cook_time/5, 1),1) - cooking_obj = result - var/count = overcook_period - while(1) - sleep(overcook_period) - count += overcook_period - if(!cooking || !result || result.loc != src) - failed = 1 - else if(prob(burn_chance) || count == cook_time) //Fail before it has a chance to cook again. - // You dun goofed. - qdel(cooking_obj) - cooking_obj = new /obj/item/weapon/reagent_containers/food/snacks/badrecipe(src) - // Produce nasty smoke. - visible_message("\The [src] vomits a gout of rancid smoke!") - var/datum/effect/effect/system/smoke_spread/bad/smoke = new /datum/effect/effect/system/smoke_spread/bad() - smoke.attach(src) - smoke.set_up(10, 0, usr.loc) - smoke.start() - failed = 1 - - if(failed) - set_cooking(FALSE) - icon_state = off_icon - break - -/obj/machinery/cooker/attack_hand(var/mob/user) - - if(cooking_obj && user.Adjacent(src)) //Fixes borgs being able to teleport food in these machines to themselves. - to_chat(user, "You grab \the [cooking_obj] from \the [src].") - user.put_in_hands(cooking_obj) - set_cooking(FALSE) - cooking_obj = null - icon_state = off_icon - return - - if(output_options.len) - - if(cooking) - to_chat(user, "\The [src] is in use!") - return - - var/choice = input("What specific food do you wish to make with \the [src]?") as null|anything in output_options+"Default" - if(!choice) - return - if(choice == "Default") - selected_option = null - to_chat(user, "You decide not to make anything specific with \the [src].") - else - selected_option = choice - to_chat(user, "You prepare \the [src] to make \a [selected_option].") + light = image(icon, "light_off") + light.pixel_x = light_x + light.pixel_y = light_y + add_overlay(light) +/obj/machinery/appliance/cooker/process() + if (!stat) + heat_up() + else + var/turf/T = get_turf(src) + if (temperature > T.temperature) + equalize_temperature() ..() - -/obj/machinery/cooker/proc/cook_mob(var/mob/living/victim, var/mob/user) - return - -/obj/machinery/cooker/proc/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product) - if(product.type == /obj/item/weapon/reagent_containers/food/snacks/variable) // Base type, generic. - product.name = "[cook_type] [cooking_obj.name]" - product.desc = "[cooking_obj.desc] It has been [cook_type]." + +/obj/machinery/appliance/cooker/power_change() + . = ..() + update_icon() // this probably won't cause issues, but Aurora used SSIcons and queue_icon_update() instead + +/obj/machinery/appliance/cooker/proc/update_cooking_power() + var/temp_scale = 0 + if(temperature > min_temp) + if(temperature >= optimal_temp) // If we're at or above optimal temp, then we're going to be at 1 for temp scale. No use penalizing you for the cookers increasing heat constantly (until we implement setting a temp on the oven via a menu.) + temp_scale = 1 + else + temp_scale = (temperature - min_temp) / (optimal_temp - min_temp) // If we're between min and optimal this will yield a value in the range 0-1 + + /* // old code for reference, will be useful if/when we implement ovens with configurable temperatures - TODO recipes with optimal temps for cooking per-recipe?? + temp_scale = (temperature - min_temp) / (optimal_temp - min_temp) // If we're between min and optimal this will yield a value in the range 0-1 + + if(temp_scale > 1) // We're above optimal, efficiency goes down as we pass too much over it + if(temp_scale >= 2) + temp_scale = 0 + else + temp_scale = 1 - (temp_scale - 1) + */ + + cooking_coeff = optimal_power * temp_scale + // to_world("Our cooking_power is [cooking_power] and our tempscale is [temp_scale], and our cooking_coeff is [cooking_coeff] before RefreshParts.") // Debug lines, uncomment if you need to test. + RefreshParts() + // to_world("Our cooking_power is [cooking_power] after RefreshParts.") // Debug lines, uncomment if you need to test. + +/obj/machinery/appliance/cooker/proc/heat_up() + if(temperature < optimal_temp) + if(use_power == 1 && ((optimal_temp - temperature) > 5)) + playsound(src, 'sound/machines/click.ogg', 20, 1) + use_power = 2.//If we're heating we use the active power + update_icon() + temperature += heating_power / resistance + update_cooking_power() + return 1 else - product.name = "[cooking_obj.name] [product.name]" + if(use_power == 2) + use_power = 1 + playsound(src, 'sound/machines/click.ogg', 20, 1) + update_icon() + //We're holding steady. temperature falls more slowly + if(prob(25)) + equalize_temperature() + return -1 -/obj/machinery/cooker/proc/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) - if(product.type == /obj/item/weapon/reagent_containers/food/snacks/variable) // Base type, generic. - product.appearance = cooking_obj - product.color = food_color - product.filling_color = food_color +/obj/machinery/appliance/cooker/proc/equalize_temperature() + temperature -= loss//Temperature will fall somewhat slowly + update_cooking_power() - // Make 'em into a corpse. - if(istype(cooking_obj, /obj/item/weapon/holder)) - var/matrix/M = matrix() - M.Turn(90) - M.Translate(1,-6) - product.transform = M +//Cookers do differently, they use containers +/obj/machinery/appliance/cooker/has_space(var/obj/item/I) + if(istype(I, /obj/item/weapon/reagent_containers/cooking_container)) + //Containers can go into an empty slot + if(cooking_objs.len < max_contents) + return 1 else - var/image/I = image(product.icon, "[product.icon_state]_filling") - if(istype(cooking_obj, /obj/item/weapon/reagent_containers/food/snacks)) - var/obj/item/weapon/reagent_containers/food/snacks/S = cooking_obj - I.color = S.filling_color - if(!I.color) - I.color = food_color - product.overlays += I + //Any food items directly added need an empty container. A slot without a container cant hold food + for (var/datum/cooking_item/CI in cooking_objs) + if (CI.container.check_contents() == 0) + return CI + return 0 + +/obj/machinery/appliance/cooker/add_content(var/obj/item/I, var/mob/user) + var/datum/cooking_item/CI = ..() + if (CI && CI.combine_target) + to_chat(user, "\The [I] will be used to make a [selected_option]. Output selection is returned to default for future items.") + selected_option = null \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/_cooker_output.dm b/code/modules/food/kitchen/cooking_machines/_cooker_output.dm index cb4dcd15ed..07f7870bc6 100644 --- a/code/modules/food/kitchen/cooking_machines/_cooker_output.dm +++ b/code/modules/food/kitchen/cooking_machines/_cooker_output.dm @@ -1,72 +1,160 @@ -// Wrapper obj for cooked food. Appearance is set in the cooking code, not on spawn. -/obj/item/weapon/reagent_containers/food/snacks/variable - name = "cooked food" - icon = 'icons/obj/food_custom.dmi' - desc = "If you can see this description then something is wrong. Please report the bug on the tracker." - nutriment_amt = 5 - bitesize = 2 - -/obj/item/weapon/reagent_containers/food/snacks/variable/pizza - name = "personal pizza" - desc = "A personalized pan pizza meant for only one person." - icon_state = "personal_pizza" - -/obj/item/weapon/reagent_containers/food/snacks/variable/bread - name = "bread" - desc = "Tasty bread." - icon_state = "breadcustom" - -/obj/item/weapon/reagent_containers/food/snacks/variable/pie - name = "pie" - desc = "Tasty pie." - icon_state = "piecustom" - -/obj/item/weapon/reagent_containers/food/snacks/variable/cake - name = "cake" - desc = "A popular band." - icon_state = "cakecustom" - -/obj/item/weapon/reagent_containers/food/snacks/variable/pocket - name = "hot pocket" - desc = "You wanna put a bangin- oh, nevermind." - icon_state = "donk" - -/obj/item/weapon/reagent_containers/food/snacks/variable/kebab - name = "kebab" - desc = "Remove this!" - icon_state = "kabob" - -/obj/item/weapon/reagent_containers/food/snacks/variable/waffles - name = "waffles" - desc = "Made with love." - icon_state = "waffles" - -/obj/item/weapon/reagent_containers/food/snacks/variable/cookie - name = "cookie" - desc = "Sugar snap!" - icon_state = "cookie" - -/obj/item/weapon/reagent_containers/food/snacks/variable/donut - name = "filled donut" - desc = "Donut eat this!" // kill me - icon_state = "donut" - -/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker - name = "flavored jawbreaker" - desc = "It's like cracking a molar on a rainbow." - icon_state = "jawbreaker" - -/obj/item/weapon/reagent_containers/food/snacks/variable/candybar - name = "flavored chocolate bar" - desc = "Made in a factory downtown." - icon_state = "bar" - -/obj/item/weapon/reagent_containers/food/snacks/variable/sucker - name = "flavored sucker" - desc = "Suck, suck, suck." - icon_state = "sucker" - -/obj/item/weapon/reagent_containers/food/snacks/variable/jelly - name = "jelly" - desc = "All your friends will be jelly." - icon_state = "jellycustom" +// Wrapper obj for cooked food. Appearance is set in the cooking code, not on spawn. +/obj/item/weapon/reagent_containers/food/snacks/variable + name = "cooked food" + icon = 'icons/obj/food_custom.dmi' + desc = "If you can see this description then something is wrong. Please report the bug on the tracker." + bitesize = 2 + + var/size = 5 //The quantity of reagents which is considered "normal" for this kind of food + //These objects will change size depending on the ratio of reagents to this value + var/min_scale = 0.5 + var/max_scale = 2 + var/scale = 1 + + w_class = 2 + var/prefix + +/obj/item/weapon/reagent_containers/food/snacks/variable/Initialize() + . = ..() + if (reagents) + reagents.maximum_volume = size*8 + 10 + else + create_reagents(size*8 + 10) + +/obj/item/weapon/reagent_containers/food/snacks/variable/update_icon() + if (reagents && reagents.total_volume) + var/ratio = reagents.total_volume / size + + scale = ratio**(1/3) //Scaling factor is square root of desired area + scale = clamp(scale, min_scale, max_scale) + else + scale = min_scale + + var/matrix/M = matrix() + M.Scale(scale) + src.transform = M + + w_class *= scale + if (!prefix) + if (scale == min_scale) + prefix = "tiny" + else if (scale <= 0.8) + prefix = "small" + + else + if (scale >= 1.2) + prefix = "large" + if (scale >= 1.4) + prefix = "extra large" + if (scale >= 1.6) + prefix = "huge" + if (scale >= max_scale) + prefix = "massive" + + name = "[prefix] [name]" + + +/obj/item/weapon/reagent_containers/food/snacks/variable/pizza + name = "personal pizza" + desc = "A personalized pan pizza meant for only one person." + icon_state = "personal_pizza" + size = 20 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/bread + name = "bread" + desc = "Tasty bread." + icon_state = "breadcustom" + size = 40 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/pie + name = "pie" + desc = "Tasty pie." + icon_state = "piecustom" + size = 25 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cake + name = "cake" + desc = "A popular band." + icon_state = "cakecustom" + size = 40 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/pocket + name = "hot pocket" + desc = "You wanna put a bangin- oh, nevermind." + icon_state = "donk" + size = 8 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/kebab + name = "kebab" + desc = "Remove this!" + icon_state = "kabob" + size = 10 + +/obj/item/weapon/reagent_containers/food/snacks/variable/waffles + name = "waffles" + desc = "Made with love." + icon_state = "waffles" + size = 12 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cookie + name = "cookie" + desc = "Sugar snap!" + icon_state = "cookie" + size = 6 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/donut + name = "filled donut" + desc = "Donut eat this!" // kill me + icon_state = "donut" + size = 8 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker + name = "flavored jawbreaker" + desc = "It's like cracking a molar on a rainbow." + icon_state = "jawbreaker" + size = 4 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/candybar + name = "flavored chocolate bar" + desc = "Made in a factory downtown." + icon_state = "bar" + size = 6 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/sucker + name = "flavored sucker" + desc = "Suck, suck, suck." + icon_state = "sucker" + size = 4 + w_class = 1 + +/obj/item/weapon/reagent_containers/food/snacks/variable/jelly + name = "jelly" + desc = "All your friends will be jelly." + icon_state = "jellycustom" + size = 8 + + +/obj/item/weapon/reagent_containers/food/snacks/variable/cereal + name = "cereal" + desc = "Crispy and flaky" + icon_state = "cereal_box" + size = 30 + w_class = 3 + +/obj/item/weapon/reagent_containers/food/snacks/variable/cereal/Initialize() + . =..() + name = pick(list("flakes", "krispies", "crunch", "pops", "O's", "crisp", "loops", "jacks", "clusters")) + +/obj/item/weapon/reagent_containers/food/snacks/variable/mob + desc = "Poor little thing." + size = 5 + w_class = 1 + var/kitchen_tag = "animal" \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/_mixer.dm b/code/modules/food/kitchen/cooking_machines/_mixer.dm new file mode 100644 index 0000000000..18b75998d9 --- /dev/null +++ b/code/modules/food/kitchen/cooking_machines/_mixer.dm @@ -0,0 +1,142 @@ +/* +The mixer subtype is used for the candymaker and cereal maker. They are similar to cookers but with a few +fundamental differences +1. They have a single container which cant be removed. it will eject multiple contents +2. Items can't be added or removed once the process starts +3. Items are all placed in the same container when added directly +4. They do combining mode only. And will always combine the entire contents of the container into an output +*/ + +/obj/machinery/appliance/mixer + max_contents = 1 + stat = POWEROFF + cooking_coeff = 0.75 // Original value 0.4 + active_power_usage = 3000 + idle_power_usage = 50 + +/obj/machinery/appliance/mixer/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + to_chat(user, "It is currently set to make a [selected_option]") + +/obj/machinery/appliance/mixer/Initialize() + . = ..() + cooking_objs += new /datum/cooking_item(new /obj/item/weapon/reagent_containers/cooking_container(src)) + cooking = FALSE + selected_option = pick(output_options) + +//Mixers cannot-not do combining mode. So the default option is removed from this. A combine target must be chosen +/obj/machinery/appliance/mixer/choose_output() + set src in oview(1) + set name = "Choose output" + set category = "Object" + + if (!isliving(usr)) + return + + if (!usr.IsAdvancedToolUser()) + to_chat(usr, "You can't operate [src].") + return + + if(output_options.len) + var/choice = input("What specific food do you wish to make with \the [src]?") as null|anything in output_options + if(!choice) + return + else + selected_option = choice + to_chat(usr, "You prepare \the [src] to make \a [selected_option].") + var/datum/cooking_item/CI = cooking_objs[1] + CI.combine_target = selected_option + + +/obj/machinery/appliance/mixer/has_space(var/obj/item/I) + var/datum/cooking_item/CI = cooking_objs[1] + if (!CI || !CI.container) + return 0 + + if (CI.container.can_fit(I)) + return CI + + return 0 + + +/obj/machinery/appliance/mixer/can_remove_items(var/mob/user) + if (stat) + return 1 + else + to_chat(user, "You can't remove ingredients while it's turned on! Turn it off first or wait for it to finish.") + +//Container is not removable +/obj/machinery/appliance/mixer/removal_menu(var/mob/user) + if (can_remove_items(user)) + var/list/menuoptions = list() + for (var/a in cooking_objs) + var/datum/cooking_item/CI = a + if (CI.container) + if (!CI.container.check_contents()) + to_chat(user, "There's nothing in [src] you can remove!") + return + + for (var/obj/item/I in CI.container) + menuoptions[I.name] = I + + var/selection = input(user, "Which item would you like to remove? If you want to remove chemicals, use an empty beaker.", "Remove ingredients") as null|anything in menuoptions + if (selection) + var/obj/item/I = menuoptions[selection] + if (!user || !user.put_in_hands(I)) + I.forceMove(get_turf(src)) + update_icon() + return 1 + return 0 + + +/obj/machinery/appliance/mixer/toggle_power() + set src in view() + set name = "Toggle Power" + set category = "Object" + + var/datum/cooking_item/CI = cooking_objs[1] + if(!CI.container.check_contents()) + to_chat("There's nothing in it! Add ingredients before turning [src] on!") + return + + if(stat & POWEROFF)//Its turned off + stat &= ~POWEROFF + if(usr) + usr.visible_message("[usr] turns the [src] on", "You turn on \the [src].") + get_cooking_work(CI) + use_power = 2 + else //Its on, turn it off + stat |= POWEROFF + use_power = 0 + if(usr) + usr.visible_message("[usr] turns the [src] off", "You turn off \the [src].") + playsound(src, 'sound/machines/click.ogg', 40, 1) + update_icon() + +/obj/machinery/appliance/mixer/can_insert(var/obj/item/I, var/mob/user) + if(!stat) + to_chat(user, ",You can't add items while \the [src] is running. Wait for it to finish or turn the power off to abort.") + return 0 + else + return ..() + +/obj/machinery/appliance/mixer/finish_cooking(var/datum/cooking_item/CI) + ..() + stat |= POWEROFF + playsound(src, 'sound/machines/click.ogg', 40, 1) + use_power = 0 + CI.reset() + update_icon() + +/obj/machinery/appliance/mixer/update_icon() + if (!stat) + icon_state = on_icon + else + icon_state = off_icon + + +/obj/machinery/appliance/mixer/process() + if (!stat) + for (var/i in cooking_objs) + do_cooking_tick(i) \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/candy.dm b/code/modules/food/kitchen/cooking_machines/candy.dm index 075769e34e..af63c5759c 100644 --- a/code/modules/food/kitchen/cooking_machines/candy.dm +++ b/code/modules/food/kitchen/cooking_machines/candy.dm @@ -1,11 +1,13 @@ -/obj/machinery/cooker/candy +/obj/machinery/appliance/mixer/candy name = "candy machine" desc = "Get yer candied cheese wheels here!" icon_state = "mixer_off" off_icon = "mixer_off" on_icon = "mixer_on" cook_type = "candied" - cooked_sound = 'sound/machines/ding.ogg' + appliancetype = CANDYMAKER + circuit = /obj/item/weapon/circuitboard/candymachine + cooking_coeff = 1.0 // Original Value 0.6 output_options = list( "Jawbreaker" = /obj/item/weapon/reagent_containers/food/snacks/variable/jawbreaker, @@ -14,6 +16,6 @@ "Jelly" = /obj/item/weapon/reagent_containers/food/snacks/variable/jelly ) -/obj/machinery/cooker/candy/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/cooked/product) +/obj/machinery/appliance/mixer/candy/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/cooked/product) food_color = get_random_colour(1) . = ..() diff --git a/code/modules/food/kitchen/cooking_machines/cereal.dm b/code/modules/food/kitchen/cooking_machines/cereal.dm index e764d37cc5..f1f5210cbb 100644 --- a/code/modules/food/kitchen/cooking_machines/cereal.dm +++ b/code/modules/food/kitchen/cooking_machines/cereal.dm @@ -1,4 +1,4 @@ -/obj/machinery/cooker/cereal +/obj/machinery/appliance/mixer/cereal name = "cereal maker" desc = "Now with Dann O's available!" icon = 'icons/obj/cooking_machines.dmi' @@ -6,21 +6,58 @@ cook_type = "cerealized" on_icon = "cereal_on" off_icon = "cereal_off" - cooked_sound = 'sound/machines/ding.ogg' + appliancetype = CEREALMAKER + circuit = /obj/item/weapon/circuitboard/cerealmaker -/obj/machinery/cooker/cereal/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product) + output_options = list( + "Cereal" = /obj/item/weapon/reagent_containers/food/snacks/variable/cereal + ) + +/* +/obj/machinery/appliance/mixer/cereal/change_product_strings(var/obj/item/weapon/reagent_containers/food/snacks/product, var/datum/cooking_item/CI) . = ..() - product.name = "box of [cooking_obj.name] cereal" + product.name = "box of [CI.object.name] cereal" -/obj/machinery/cooker/cereal/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) +/obj/machinery/appliance/mixer/cereal/change_product_appearance(var/obj/item/weapon/reagent_containers/food/snacks/product) product.icon = 'icons/obj/food.dmi' product.icon_state = "cereal_box" - product.filling_color = cooking_obj.color + product.filling_color = CI.object.color - var/image/food_image = image(cooking_obj.icon, cooking_obj.icon_state) - food_image.color = cooking_obj.color - food_image.overlays += cooking_obj.overlays + var/image/food_image = image(CI.object.icon, CI.object.icon_state) + food_image.color = CI.object.color + food_image.overlays += CI.object.overlays food_image.transform *= 0.7 product.overlays += food_image +*/ +/obj/machinery/appliance/mixer/cereal/combination_cook(var/datum/cooking_item/CI) + + var/list/images = list() + var/num = 0 + for(var/obj/item/I in CI.container) + if (istype(I, /obj/item/weapon/reagent_containers/food/snacks/variable/cereal)) + //Images of cereal boxes on cereal boxes is dumb + continue + + var/image/food_image = image(I.icon, I.icon_state) + food_image.color = I.color + food_image.add_overlay(I.overlays) + food_image.transform *= 0.7 - (num * 0.05) + food_image.pixel_x = rand(-2,2) + food_image.pixel_y = rand(-3,5) + + + if (!images[I.icon_state]) + images[I.icon_state] = food_image + num++ + + if (num > 3) + continue + + + var/obj/item/weapon/reagent_containers/food/snacks/result = ..() + + result.color = result.filling_color + for (var/i in images) + result.overlays += images[i] diff --git a/code/modules/food/kitchen/cooking_machines/container.dm b/code/modules/food/kitchen/cooking_machines/container.dm new file mode 100644 index 0000000000..2ebb2ed7f0 --- /dev/null +++ b/code/modules/food/kitchen/cooking_machines/container.dm @@ -0,0 +1,172 @@ +//Cooking containers are used in ovens and fryers, to hold multiple ingredients for a recipe. +//They work fairly similar to the microwave - acting as a container for objects and reagents, +//which can be checked against recipe requirements in order to cook recipes that require several things + +/obj/item/weapon/reagent_containers/cooking_container + icon = 'icons/obj/cooking_machines.dmi' + var/shortname + var/max_space = 20//Maximum sum of w-classes of foods in this container at once + var/max_reagents = 80//Maximum units of reagents + flags = OPENCONTAINER | NOREACT + var/list/insertable = list( + /obj/item/weapon/reagent_containers/food/snacks, + /obj/item/weapon/holder, + /obj/item/weapon/paper + ) + +/obj/item/weapon/reagent_containers/cooking_container/Initialize() + . = ..() + create_reagents(max_reagents) + flags |= OPENCONTAINER | NOREACT + + +/obj/item/weapon/reagent_containers/cooking_container/examine(var/mob/user) + . = ..() + if (contents.len) + var/string = "It contains....
" + for (var/atom/movable/A in contents) + string += "[A.name]
" + . += "[string]" + if (reagents.total_volume) + . += "It contains [reagents.total_volume]u of reagents." + + +/obj/item/weapon/reagent_containers/cooking_container/attackby(var/obj/item/I as obj, var/mob/user as mob) + for (var/possible_type in insertable) + if (istype(I, possible_type)) + if (!can_fit(I)) + to_chat(user, "There's no more space in the [src] for that!") + return 0 + + if(!user.unEquip(I)) + return + I.forceMove(src) + to_chat(user, "You put the [I] into the [src].") + return + +/obj/item/weapon/reagent_containers/cooking_container/verb/empty() + set src in oview(1) + set name = "Empty Container" + set category = "Object" + set desc = "Removes items from the container, excluding reagents." + + do_empty(usr) + +/obj/item/weapon/reagent_containers/cooking_container/proc/do_empty(mob/user) + if (!isliving(user)) + //Here we only check for ghosts. Animals are intentionally allowed to remove things from oven trays so they can eat it + return + + if (user.stat || user.restrained()) + to_chat(user, "You are in no fit state to do this.") + return + + if (!Adjacent(user)) + to_chat(user, "You can't reach [src] from here.") + return + + if (!contents.len) + to_chat(user, "There's nothing in the [src] you can remove!") + return + + for (var/atom/movable/A in contents) + A.forceMove(get_turf(src)) + + to_chat(user, "You remove all the solid items from the [src].") + +/obj/item/weapon/reagent_containers/cooking_container/proc/check_contents() + if (contents.len == 0) + if (!reagents || reagents.total_volume == 0) + return 0//Completely empty + else if (contents.len == 1) + if (!reagents || reagents.total_volume == 0) + return 1//Contains only a single object which can be extracted alone + return 2//Contains multiple objects and/or reagents + +/obj/item/weapon/reagent_containers/cooking_container/AltClick(var/mob/user) + do_empty(user) + +//Deletes contents of container. +//Used when food is burned, before replacing it with a burned mess +/obj/item/weapon/reagent_containers/cooking_container/proc/clear() + for (var/atom/a in contents) + qdel(a) + + if (reagents) + reagents.clear_reagents() + +/obj/item/weapon/reagent_containers/cooking_container/proc/label(var/number, var/CT = null) + //This returns something like "Fryer basket 1 - empty" + //The latter part is a brief reminder of contents + //This is used in the removal menu + . = shortname + if (!isnull(number)) + .+= " [number]" + .+= " - " + if (CT) + .+=CT + else if (contents.len) + for (var/obj/O in contents) + .+=O.name//Just append the name of the first object + return + else if (reagents && reagents.total_volume > 0) + var/datum/reagent/R = reagents.get_master_reagent() + .+=R.name//Append name of most voluminous reagent + return + else + . += "empty" + + +/obj/item/weapon/reagent_containers/cooking_container/proc/can_fit(var/obj/item/I) + var/total = 0 + for (var/obj/item/J in contents) + total += J.w_class + + if((max_space - total) >= I.w_class) + return 1 + + +//Takes a reagent holder as input and distributes its contents among the items in the container +//Distribution is weighted based on the volume already present in each item +/obj/item/weapon/reagent_containers/cooking_container/proc/soak_reagent(var/datum/reagents/holder) + var/total = 0 + var/list/weights = list() + for (var/obj/item/I in contents) + if (I.reagents && I.reagents.total_volume) + total += I.reagents.total_volume + weights[I] = I.reagents.total_volume + + if (total > 0) + for (var/obj/item/I in contents) + if (weights[I]) + holder.trans_to(I, weights[I] / total) + + +/obj/item/weapon/reagent_containers/cooking_container/oven + name = "oven dish" + shortname = "shelf" + desc = "Put ingredients in this; designed for use with an oven. Warranty void if used incorrectly." + icon_state = "ovendish" + max_space = 30 + max_reagents = 120 + +/obj/item/weapon/reagent_containers/cooking_container/oven/Initialize() + . = ..() + + // We add to the insertable list specifically for the oven trays, to allow specialty cakes. + insertable += list( + /obj/item/clothing/head/cakehat, // This is because we want to allow birthday cakes to be makeable. + /obj/item/organ/internal/brain // As before, needed for braincake + ) + +/obj/item/weapon/reagent_containers/cooking_container/fryer + name = "fryer basket" + shortname = "basket" + desc = "Put ingredients in this; designed for use with a deep fryer. Warranty void if used incorrectly." + icon_state = "basket" + +/obj/item/weapon/reagent_containers/cooking_container/grill + name = "grill rack" + shortname = "rack" + desc = "Put ingredients 'in'/on this; designed for use with a grill. Warranty void if used incorrectly." + icon_state = "grillrack" \ No newline at end of file diff --git a/code/modules/food/kitchen/cooking_machines/fryer.dm b/code/modules/food/kitchen/cooking_machines/fryer.dm index e3753f0f48..f3ab3df0bb 100644 --- a/code/modules/food/kitchen/cooking_machines/fryer.dm +++ b/code/modules/food/kitchen/cooking_machines/fryer.dm @@ -1,4 +1,4 @@ -/obj/machinery/cooker/fryer +/obj/machinery/appliance/cooker/fryer name = "deep fryer" desc = "Deep fried everything." icon_state = "fryer_off" @@ -9,77 +9,246 @@ food_color = "#FFAD33" cooked_sound = 'sound/machines/ding.ogg' var/datum/looping_sound/deep_fryer/fry_loop + circuit = /obj/item/weapon/circuitboard/fryer + appliancetype = FRYER + active_power_usage = 12 KILOWATTS + heating_power = 12000 + + min_temp = 140 + T0C // Same as above, increasing this to just under 2x to make the % increase on efficiency not quite so painful as it would be at 80. + optimal_temp = 400 + T0C // Increasing this to be 2x Oven to allow for a much higher/realistic frying temperatures. Doesn't really do anything but make heating the fryer take a bit longer. + optimal_power = 0.95 // .35 higher than the default to give fryers faster cooking speed. + + idle_power_usage = 3.6 KILOWATTS + // Power used to maintain temperature once it's heated. + // Going with 25% of the active power. This is a somewhat arbitrary value. -/obj/machinery/cooker/fryer/Initialize() + resistance = 60000 // Approx. 10 minutes to heat up. + + max_contents = 2 + container_type = /obj/item/weapon/reagent_containers/cooking_container/fryer + + stat = POWEROFF // Starts turned off + + var/datum/reagents/oil + var/optimal_oil = 9000 //90 litres of cooking oil + +/obj/machinery/appliance/cooker/fryer/Initialize() + . = ..() fry_loop = new(list(src), FALSE) - return ..() + + oil = new/datum/reagents(optimal_oil * 1.25, src) + var/variance = rand()*0.15 + // Fryer is always a little below full, but its usually negligible -/obj/machinery/cooker/fryer/Destroy() + if(prob(20)) + // Sometimes the fryer will start with much less than full oil, significantly impacting efficiency until filled + variance = rand()*0.5 + oil.add_reagent("cornoil", optimal_oil*(1 - variance)) + +/obj/machinery/appliance/cooker/fryer/Destroy() QDEL_NULL(fry_loop) + QDEL_NULL(oil) return ..() + +/obj/machinery/appliance/cooker/fryer/examine(var/mob/user) + . = ..() + if(Adjacent(user)) + to_chat(user, "Oil Level: [oil.total_volume]/[optimal_oil]") + +/obj/machinery/appliance/cooker/fryer/heat_up() + if (..()) + //Set temperature of oil reagent + var/datum/reagent/nutriment/triglyceride/oil/OL = oil.get_master_reagent() + if (OL && istype(OL)) + OL.data["temperature"] = temperature -/obj/machinery/cooker/fryer/set_cooking(new_setting) - ..() - if(new_setting) - fry_loop.start() +/obj/machinery/appliance/cooker/fryer/equalize_temperature() + if (..()) + //Set temperature of oil reagent + var/datum/reagent/nutriment/triglyceride/oil/OL = oil.get_master_reagent() + if (OL && istype(OL)) + OL.data["temperature"] = temperature + +/obj/machinery/appliance/cooker/fryer/update_cooking_power() + ..()//In addition to parent temperature calculation + //Fryer efficiency also drops when oil levels arent optimal + var/oil_level = 0 + var/datum/reagent/nutriment/triglyceride/oil/OL = oil.get_master_reagent() + if(OL && istype(OL)) + oil_level = OL.volume + + var/oil_efficiency = 0 + if(oil_level) + oil_efficiency = oil_level / optimal_oil + + if(oil_efficiency > 1) + //We're above optimal, efficiency goes down as we pass too much over it + oil_efficiency = 1 - (oil_efficiency - 1) + + + cooking_power *= oil_efficiency + +/obj/machinery/appliance/cooker/fryer/update_icon() + if(!stat) + ..() + if(cooking == TRUE) + icon_state = on_icon + if(fry_loop) + fry_loop.start(src) + else + icon_state = off_icon + if(fry_loop) + fry_loop.stop(src) else - fry_loop.stop() + icon_state = off_icon + if(fry_loop) + fry_loop.stop(src) + ..() + +//Fryer gradually infuses any cooked food with oil. Moar calories +//This causes a slow drop in oil levels, encouraging refill after extended use +/obj/machinery/appliance/cooker/fryer/do_cooking_tick(var/datum/cooking_item/CI) + if(..() && (CI.oil < CI.max_oil) && prob(20)) + var/datum/reagents/buffer = new /datum/reagents(2) + oil.trans_to_holder(buffer, min(0.5, CI.max_oil - CI.oil)) + CI.oil += buffer.total_volume + CI.container.soak_reagent(buffer) -/obj/machinery/cooker/fryer/cook_mob(var/mob/living/victim, var/mob/user) + +//To solve any odd logic problems with results having oil as part of their compiletime ingredients. +//Upon finishing a recipe the fryer will analyse any oils in the result, and replace them with our oil +//As well as capping the total to the max oil +/obj/machinery/appliance/cooker/fryer/finish_cooking(var/datum/cooking_item/CI) + ..() + var/total_oil = 0 + var/total_our_oil = 0 + var/total_removed = 0 + var/datum/reagent/our_oil = oil.get_master_reagent() + + for (var/obj/item/I in CI.container) + if (I.reagents && I.reagents.total_volume) + for (var/datum/reagent/R in I.reagents.reagent_list) + if (istype(R, /datum/reagent/nutriment/triglyceride/oil)) + total_oil += R.volume + if (R.id != our_oil.id) + total_removed += R.volume + I.reagents.remove_reagent(R.id, R.volume) + else + total_our_oil += R.volume + + + if (total_removed > 0 || total_oil != CI.max_oil) + total_oil = min(total_oil, CI.max_oil) + + if (total_our_oil < total_oil) + //If we have less than the combined total, then top up from our reservoir + var/datum/reagents/buffer = new /datum/reagents(INFINITY) + oil.trans_to_holder(buffer, total_oil - total_our_oil) + CI.container.soak_reagent(buffer) + else if (total_our_oil > total_oil) + + //If we have more than the maximum allowed then we delete some. + //This could only happen if one of the objects spawns with the same type of oil as ours + var/portion = 1 - (total_oil / total_our_oil) //find the percentage to remove + for (var/obj/item/I in CI.container) + if (I.reagents && I.reagents.total_volume) + for (var/datum/reagent/R in I.reagents.reagent_list) + if (R.id == our_oil.id) + I.reagents.remove_reagent(R.id, R.volume*portion) + +/obj/machinery/appliance/cooker/fryer/cook_mob(var/mob/living/victim, var/mob/user) if(!istype(victim)) return - user.visible_message("\The [user] starts pushing \the [victim] into \the [src]!") - icon_state = on_icon - cooking = 1 - fry_loop.start() + // user.visible_message("\The [user] starts pushing \the [victim] into \the [src]!") + + //Removed delay on this action in favour of a cooldown after it + //If you can lure someone close to the fryer and grab them then you deserve success. + //And a delay on this kind of niche action just ensures it never happens + //Cooldown ensures it can't be spammed to instakill someone + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN*3) + + fry_loop.start(src) if(!do_mob(user, victim, 20)) - cooking = 0 + cooking = FALSE icon_state = off_icon - fry_loop.stop() + fry_loop.stop(src) return if(!victim || !victim.Adjacent(user)) to_chat(user, "Your victim slipped free!") - cooking = 0 + cooking = FALSE icon_state = off_icon - fry_loop.stop() + fry_loop.stop(src) return + var/damage = rand(7,13) // Though this damage seems reduced, some hot oil is transferred to the victim and will burn them for a while after + + var/datum/reagent/nutriment/triglyceride/oil/OL = oil.get_master_reagent() + damage *= OL.heatdamage(victim) + var/obj/item/organ/external/E var/nopain if(ishuman(victim) && user.zone_sel.selecting != "groin" && user.zone_sel.selecting != "chest") var/mob/living/carbon/human/H = victim - if(H.species.flags & NO_PAIN) - nopain = 2 E = H.get_organ(user.zone_sel.selecting) - if(E.robotic >= ORGAN_ROBOT) + if(!E || E.species.flags & NO_PAIN) + nopain = 2 + else if(E.robotic >= ORGAN_ROBOT) nopain = 1 user.visible_message("\The [user] shoves \the [victim][E ? "'s [E.name]" : ""] into \the [src]!") + if (damage > 0) + if(E) + if(E.children && E.children.len) + for(var/obj/item/organ/external/child in E.children) + if(nopain && nopain < 2 && !(child.robotic >= ORGAN_ROBOT)) + nopain = 0 + child.take_damage(0, damage) + damage -= (damage*0.5)//IF someone's arm is plunged in, the hand should take most of it + E.take_damage(0, damage) + else + victim.apply_damage(damage, BURN, user.zone_sel.selecting) - if(E) - E.take_damage(0, rand(20,30)) - if(E.children && E.children.len) - for(var/obj/item/organ/external/child in E.children) - if(nopain && nopain < 2 && !(child.robotic >= ORGAN_ROBOT)) - nopain = 0 - child.take_damage(0, rand(20,30)) - else - victim.apply_damage(rand(30,40), BURN, user.zone_sel.selecting) + if(!nopain) + to_chat(victim, "Agony consumes you as searing hot oil scorches your [E ? E.name : "flesh"] horribly!") + victim.emote("scream") + else + to_chat(victim, "Searing hot oil scorches your [E ? E.name : "flesh"]!") - if(!nopain) - to_chat(victim, "Agony consumes you as searing hot oil scorches your [E ? E.name : "flesh"] horribly!") - victim.emote("scream") - else - to_chat(victim, "Searing hot oil scorches your [E ? E.name : "flesh"]!") + user.attack_log += text("\[[time_stamp()]\] Has [cook_type] \the [victim] ([victim.ckey]) in \a [src]") + victim.attack_log += text("\[[time_stamp()]\] Has been [cook_type] in \a [src] by [user.name] ([user.ckey])") + msg_admin_attack("[key_name_admin(user)] [cook_type] \the [victim] ([victim.ckey]) in \a [src]. (JMP)") - if(victim.client) - add_attack_logs(user,victim,"[cook_type] in [src]") - - icon_state = off_icon - cooking = 0 + //Coat the victim in some oil + oil.trans_to(victim, 40) + fry_loop.stop() - return + +/obj/machinery/appliance/cooker/fryer/attackby(var/obj/item/I, var/mob/user) + if(istype(I, /obj/item/weapon/reagent_containers/glass) && I.reagents) + if (I.reagents.total_volume <= 0 && oil) + //Its empty, handle scooping some hot oil out of the fryer + oil.trans_to(I, I.reagents.maximum_volume) + user.visible_message("[user] scoops some oil out of \the [src].", span("notice","You scoop some oil out of \the [src].")) + return 1 + else + //It contains stuff, handle pouring any oil into the fryer + //Possibly in future allow pouring non-oil reagents in, in order to sabotage it and poison food. + //That would really require coding some sort of filter or better replacement mechanism first + //So for now, restrict to oil only + var/amount = 0 + for (var/datum/reagent/R in I.reagents.reagent_list) + if (istype(R, /datum/reagent/nutriment/triglyceride/oil)) + var/delta = oil.get_free_space() + delta = min(delta, R.volume) + oil.add_reagent(R.id, delta) + I.reagents.remove_reagent(R.id, delta) + amount += delta + if (amount > 0) + user.visible_message("[user] pours some oil into \the [src].", span("notice","You pour [amount]u of oil into \the [src]."), "You hear something viscous being poured into a metal container.") + return 1 + //If neither of the above returned, then call parent as normal + ..() diff --git a/code/modules/food/kitchen/cooking_machines/grill.dm b/code/modules/food/kitchen/cooking_machines/grill.dm index ddf346101d..787e8b3d78 100644 --- a/code/modules/food/kitchen/cooking_machines/grill.dm +++ b/code/modules/food/kitchen/cooking_machines/grill.dm @@ -1,11 +1,102 @@ -/obj/machinery/cooker/grill +/obj/machinery/appliance/cooker/grill name = "grill" desc = "Backyard grilling, IN SPACE." icon_state = "grill_off" cook_type = "grilled" - cook_time = 100 + appliancetype = GRILL food_color = "#A34719" on_icon = "grill_on" off_icon = "grill_off" - can_burn_food = 1 - cooked_sound = 'sound/machines/ding.ogg' \ No newline at end of file + can_burn_food = TRUE + circuit = /obj/item/weapon/circuitboard/grill + active_power_usage = 4 KILOWATTS + heating_power = 4000 + idle_power_usage = 2 KILOWATTS + + optimal_power = 1.2 // Things on the grill cook .6 faster - this is now the fastest appliance to heat and to cook on. BURGERS GO SIZZLE. + + stat = POWEROFF // Starts turned off. + + // Grill is faster to heat and setup than the rest. + optimal_temp = 120 + T0C + min_temp = 60 + T0C + resistance = 8 KILOWATTS // Very fast to heat up. + + max_contents = 3 // Arbitrary number, 3 grill 'racks' + container_type = /obj/item/weapon/reagent_containers/cooking_container/grill + +/* // Test Comment this out too, /cooker does this for us, and this path '/obj/machinery/appliance/grill' is invalid anyways, meaning it does jack shit. - Updated the paths, but I'm basically commenting all this shit out and if the grill works as-normal, none of this stuff is needed. +/obj/machinery/appliance/grill/toggle_power() + set src in view() + set name = "Toggle Power" + set category = "Object" + + var/datum/cooking_item/CI = cooking_objs[1] + + if (stat & POWEROFF)//Its turned off + stat &= ~POWEROFF + if (usr) + usr.visible_message("[usr] turns \the [src] on", "You turn on \the [src].") + get_cooking_work(CI) + use_power = 2 + else //It's on, turn it off + stat |= POWEROFF + use_power = 0 + if (usr) + usr.visible_message("[usr] turns \the [src] off", "You turn off \the [src].") + playsound(src, 'sound/machines/click.ogg', 40, 1) + update_icon() + + +/obj/machinery/appliance/cooker/grill/Initialize() + . = ..() + // cooking_objs += new /datum/cooking_item(new /obj/item/weapon/reagent_containers/cooking_container(src)) + cooking = FALSE + +/obj/machinery/appliance/cooker/grill/has_space(var/obj/item/I) + var/datum/cooking_item/CI = cooking_objs[1] + if (!CI || !CI.container) + return 0 + + if (CI.container.can_fit(I)) + return CI + + return 0 +*/ +/* // Test comment this out, I don't think this is doing shit anyways. +//Container is not removable +/obj/machinery/appliance/grill/removal_menu(var/mob/user) + if (can_remove_items(user)) + var/list/menuoptions = list() + for (var/a in cooking_objs) + var/datum/cooking_item/CI = a + if (CI.container) + if (!CI.container.check_contents()) + to_chat(user, "There's nothing in the [src] you can remove!") + return + + for (var/obj/item/I in CI.container) + menuoptions[I.name] = I + + var/selection = input(user, "Which item would you like to remove? If you want to remove chemicals, use an empty beaker.", "Remove ingredients") as null|anything in menuoptions + if (selection) + var/obj/item/I = menuoptions[selection] + if (!user || !user.put_in_hands(I)) + I.forceMove(get_turf(src)) + update_icon() + return 1 + return 0 +*/ + +/obj/machinery/appliance/grill/update_icon() // TODO: Cooking icon + if(!stat) + icon_state = on_icon + else + icon_state = off_icon + +/* // Test remove this too. +/obj/machinery/appliance/grill/process() + if (!stat) + for (var/i in cooking_objs) + do_cooking_tick(i) +*/ diff --git a/code/modules/food/kitchen/cooking_machines/oven.dm b/code/modules/food/kitchen/cooking_machines/oven.dm index d5934939cd..2c0c8b6c2e 100644 --- a/code/modules/food/kitchen/cooking_machines/oven.dm +++ b/code/modules/food/kitchen/cooking_machines/oven.dm @@ -1,24 +1,134 @@ -/obj/machinery/cooker/oven +/obj/machinery/appliance/cooker/oven name = "oven" desc = "Cookies are ready, dear." icon = 'icons/obj/cooking_machines.dmi' - icon_state = "oven_off" - on_icon = "oven_on" - off_icon = "oven_off" + icon_state = "ovenopen" cook_type = "baked" - cook_time = 300 + appliancetype = OVEN food_color = "#A34719" - can_burn_food = 1 - cooked_sound = 'sound/machines/ding.ogg' + can_burn_food = TRUE + circuit = /obj/item/weapon/circuitboard/oven + active_power_usage = 6 KILOWATTS + heating_power = 6000 + //Based on a double deck electric convection oven + + resistance = 30000 // Approx. 12 minutes to heat up. + idle_power_usage = 2 KILOWATTS + //uses ~30% power to stay warm + optimal_power = 0.8 // Oven cooks .2 faster than the default speed. + + light_x = 2 + max_contents = 5 + container_type = /obj/item/weapon/reagent_containers/cooking_container/oven + + stat = POWEROFF //Starts turned off + + var/open = FALSE // Start closed just so people don't try to preheat with it open, lol. output_options = list( - "Personal Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza, + "Pizza" = /obj/item/weapon/reagent_containers/food/snacks/variable/pizza, "Bread" = /obj/item/weapon/reagent_containers/food/snacks/variable/bread, "Pie" = /obj/item/weapon/reagent_containers/food/snacks/variable/pie, - "Small Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake, + "Cake" = /obj/item/weapon/reagent_containers/food/snacks/variable/cake, "Hot Pocket" = /obj/item/weapon/reagent_containers/food/snacks/variable/pocket, "Kebab" = /obj/item/weapon/reagent_containers/food/snacks/variable/kebab, "Waffles" = /obj/item/weapon/reagent_containers/food/snacks/variable/waffles, "Cookie" = /obj/item/weapon/reagent_containers/food/snacks/variable/cookie, "Donut" = /obj/item/weapon/reagent_containers/food/snacks/variable/donut, - ) \ No newline at end of file + ) + +/obj/machinery/appliance/cooker/oven/update_icon() + if(!open) + if(!stat) + icon_state = "ovenclosed_on" + if(cooking == TRUE) + icon_state = "ovenclosed_cooking" + else + icon_state = "ovenclosed_on" + else + icon_state = "ovenclosed_off" + else + icon_state = "ovenopen" + ..() + +/obj/machinery/appliance/cooker/oven/AltClick(var/mob/user) + try_toggle_door(user) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + +/obj/machinery/appliance/cooker/oven/verb/toggle_door() + set src in oview(1) + set category = "Object" + set name = "Open/close oven door" + + try_toggle_door(usr) + +/obj/machinery/appliance/cooker/oven/proc/try_toggle_door(mob/user) + if(!isliving(usr) || isAI(user)) + return + + if(!usr.IsAdvancedToolUser()) + to_chat(user, "You lack the dexterity to do that.") + return + + if(!Adjacent(usr)) + to_chat(user, "You can't reach the [src] from there, get closer!") + return + + if(open) + open = FALSE + loss = (heating_power / resistance) * 0.5 + cooking = TRUE + else + open = TRUE + loss = (heating_power / resistance) * 4 + //When the oven door is opened, heat is lost MUCH faster and you stop cooking (because the door is open) + cooking = FALSE + + playsound(src, 'sound/machines/hatch_open.ogg', 20, 1) + update_icon() + +/obj/machinery/appliance/cooker/oven/proc/manip(var/obj/item/I) + // check if someone's trying to manipulate the machine + + if(I.is_crowbar() || I.is_screwdriver() || istype(I, /obj/item/weapon/storage/part_replacer)) + return TRUE + else + return FALSE + +/obj/machinery/appliance/cooker/oven/can_insert(var/obj/item/I, var/mob/user) + if(!open && !manip(I)) + to_chat(user, "You can't put anything in while the door is closed!") + return 0 + + else + return ..() + + +//If an oven's door is open it will lose heat every proc, even if it also gained it +//But dont call equalize twice in one stack. A return value of -1 from the parent indicates equalize was already called +/obj/machinery/appliance/cooker/oven/heat_up() + .=..() + if(open && . != -1) + var/turf/T = get_turf(src) + if(temperature > T.temperature) + equalize_temperature() + +/obj/machinery/appliance/cooker/oven/can_remove_items(var/mob/user) + if(!open) + to_chat(user, "You can't take anything out while the door is closed!") + return 0 + + else + return ..() + + +//Oven has lots of recipes and combine options. The chance for interference is high, so +//If a combine target is set the oven will do it instead of checking recipes +/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI) + if(CI.combine_target) + CI.result_type = 3//Combination type. We're making something out of our ingredients + visible_message("\The [src] pings!") + combination_cook(CI) + return + else + ..() diff --git a/code/modules/food/kitchen/microwave.dm b/code/modules/food/kitchen/microwave.dm index 8f27afe2b1..3e40412b1b 100644 --- a/code/modules/food/kitchen/microwave.dm +++ b/code/modules/food/kitchen/microwave.dm @@ -1,13 +1,14 @@ /obj/machinery/microwave - name = "microwave" + name = "Microwave" desc = "Studies are inconclusive on whether pressing your face against the glass is harmful." icon = 'icons/obj/kitchen.dmi' icon_state = "mw" + layer = 2.9 density = 1 anchored = 1 use_power = USE_POWER_IDLE idle_power_usage = 5 - active_power_usage = 100 + active_power_usage = 2000 clicksound = "button" clickvol = "30" flags = OPENCONTAINER | NOREACT @@ -18,9 +19,11 @@ var/circuit_item_capacity = 1 //how many items does the circuit add to max number of items var/item_level = 0 // items microwave can handle, 0 foodstuff, 1 materials var/global/list/acceptable_items // List of the items you can put in - var/global/list/datum/recipe/microwave/available_recipes // List of the recipes you can use + var/global/list/available_recipes // List of the recipes you can use var/global/list/acceptable_reagents // List of the reagents you can put in - var/global/max_n_of_items = 0 + + var/global/max_n_of_items = 20 + var/appliancetype = MICROWAVE var/datum/looping_sound/microwave/soundloop @@ -32,24 +35,26 @@ /obj/machinery/microwave/Initialize() . = ..() + reagents = new/datum/reagents(100) reagents.my_atom = src default_apply_parts() - if (!available_recipes) + if(!available_recipes) available_recipes = new - for (var/type in (typesof(/datum/recipe/microwave)-/datum/recipe/microwave)) - available_recipes+= new type + for(var/T in (typesof(/datum/recipe)-/datum/recipe)) + var/datum/recipe/type = T + if((initial(type.appliance) & appliancetype)) + available_recipes += new type + acceptable_items = new acceptable_reagents = new - for (var/datum/recipe/microwave/recipe in available_recipes) + for (var/datum/recipe/recipe in available_recipes) for (var/item in recipe.items) acceptable_items |= item for (var/reagent in recipe.reagents) acceptable_reagents |= reagent - if (recipe.items) - max_n_of_items = max(max_n_of_items,recipe.items.len) // This will do until I can think of a fun recipe to use dionaea in - // will also allow anything using the holder item to be microwaved into // impure carbon. ~Z @@ -95,16 +100,10 @@ src.icon_state = "mw" src.broken = 0 // Fix it! src.dirty = 0 // just to be sure - src.flags = OPENCONTAINER | NOREACT + src.flags = OPENCONTAINER else to_chat(user, "It's broken!") return 1 - else if(default_deconstruction_screwdriver(user, O)) - return - else if(default_deconstruction_crowbar(user, O)) - return - else if(default_unfasten_wrench(user, O, 10)) - return else if(src.dirty==100) // The microwave is all dirty so can't be used! if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them @@ -120,12 +119,12 @@ src.dirty = 0 // It's clean! src.broken = 0 // just to be sure src.icon_state = "mw" - src.flags = OPENCONTAINER | NOREACT + src.flags = OPENCONTAINER else //Otherwise bad luck!! to_chat(user, "It's dirty!") return 1 else if(is_type_in_list(O,acceptable_items)) - if (contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var. + if(contents.len>=(max_n_of_items + component_parts.len + circuit_item_capacity)) //Adds component_parts to the maximum number of items. changed 1 to actually just be the circuit item capacity var. to_chat(user, "This [src] is full of ingredients, you cannot put more.") return 1 if(istype(O, /obj/item/stack) && O:get_amount() > 1) // This is bad, but I can't think of how to change it @@ -137,9 +136,8 @@ "You add one of [O] to \the [src].") return else - // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - user.drop_item() - O.loc = src + // user.remove_from_mob(O) //This just causes problems so far as I can tell. -Pete - Man whoever you are, it's been years. o7 + user.drop_from_inventory(O,src) user.visible_message( \ "\The [user] has added \the [O] to \the [src].", \ "You add \the [O] to \the [src].") @@ -159,6 +157,27 @@ var/obj/item/weapon/grab/G = O to_chat(user, "This is ridiculous. You can not fit \the [G.affecting] in this [src].") return 1 + else if(O.is_screwdriver()) + default_deconstruction_screwdriver(user, O) + return + else if(O.is_crowbar()) + if(default_deconstruction_crowbar(user, O)) + return + else + user.visible_message( \ + "\The [user] begins [src.anchored ? "unsecuring" : "securing"] the microwave.", \ + "You attempt to [src.anchored ? "unsecure" : "secure"] the microwave." + ) + if (do_after(user,20/O.toolspeed)) + user.visible_message( \ + "\The [user] [src.anchored ? "unsecures" : "secures"] the microwave.", \ + "You [src.anchored ? "unsecure" : "secure"] the microwave." + ) + src.anchored = !src.anchored + else + to_chat(user, "You decide not to do that.") + else if(default_part_replacement(user, O)) + return else to_chat(user, "You have no idea what you can cook with this [O].") ..() @@ -248,64 +267,98 @@ if(stat & (NOPOWER|BROKEN)) return start() - if (reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run - if (!wzhzhzh(5)) //VOREStation Edit - Quicker Microwaves + if(reagents.total_volume==0 && !(locate(/obj) in ((contents - component_parts) - circuit))) //dry run + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) abort() return abort() return - var/datum/recipe/microwave/recipe = select_recipe(available_recipes,src) + var/datum/recipe/recipe = select_recipe(available_recipes,src) var/obj/cooked - if (!recipe) + if(!recipe) dirty += 1 - if (prob(max(10,dirty*5))) - if (!wzhzhzh(2)) //VOREStation Edit - Quicker Microwaves + if(prob(max(10,dirty*5))) + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) abort() return muck_start() - wzhzhzh(2) //VOREStation Edit - Quicker Microwaves + wzhzhzh(2) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) muck_finish() cooked = fail() - cooked.loc = src.loc - return - else if (has_extra_item()) - if (!wzhzhzh(2)) //VOREStation Edit - Quicker Microwaves + cooked.forceMove(src.loc) + else if(has_extra_item()) + if(!wzhzhzh(16)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 2) abort() return broke() cooked = fail() - cooked.loc = src.loc - return + cooked.forceMove(src.loc) else - if (!wzhzhzh(5)) //VOREStation Edit - Quicker Microwaves + if(!wzhzhzh(40)) //VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was 5) abort() return - abort() + stop() cooked = fail() - cooked.loc = src.loc - return - else - var/halftime = round(recipe.time/20/2) //VOREStation Edit - Quicker Microwaves - if (!wzhzhzh(halftime)) - abort() - return - if (!wzhzhzh(halftime)) - abort() - cooked = fail() - cooked.loc = src.loc - return - cooked = recipe.make_food(src) - abort() - if(cooked) - cooked.loc = src.loc + cooked.forceMove(src.loc) return + + //Making multiple copies of a recipe + var/halftime = round(recipe.time*4/10/2) // VOREStation Edit - Quicker Microwaves (Undone during Auroraport, left note in case of reversion, was round(recipe.time/20/2)) + if(!wzhzhzh(halftime)) + abort() + return + recipe.before_cook(src) + if(!wzhzhzh(halftime)) + abort() + cooked = fail() + cooked.forceMove(loc) + recipe.after_cook(src) + return + + var/result = recipe.result + var/valid = 1 + var/list/cooked_items = list() + var/obj/temp = new /obj(src) //To prevent infinite loops, all results will be moved into a temporary location so they're not considered as inputs for other recipes + while(valid) + var/list/things = list() + things.Add(recipe.make_food(src)) + cooked_items += things + //Move cooked things to the buffer so they're not considered as ingredients + for(var/atom/movable/AM in things) + AM.forceMove(temp) + + valid = 0 + recipe.after_cook(src) + recipe = select_recipe(available_recipes,src) + if(recipe && recipe.result == result) + valid = 1 + sleep(2) + + for(var/r in cooked_items) + var/atom/movable/R = r + R.forceMove(src) //Move everything from the buffer back to the container + + QDEL_NULL(temp)//Delete buffer object + + //Any leftover reagents are divided amongst the foods + var/total = reagents.total_volume + for(var/obj/item/weapon/reagent_containers/food/snacks/S in cooked_items) + reagents.trans_to_holder(S.reagents, total/cooked_items.len) + + for(var/obj/item/weapon/reagent_containers/food/snacks/S in contents) + S.cook() + + dispose(0) //clear out anything left + stop() + + return /obj/machinery/microwave/proc/wzhzhzh(var/seconds as num) // Whoever named this proc is fucking literally Satan. ~ Z for (var/i=1 to seconds) if (stat & (NOPOWER|BROKEN)) return 0 - use_power(500) + use_power(active_power_usage) sleep(5) //VOREStation Edit - Quicker Microwaves return 1 @@ -339,17 +392,27 @@ /obj/machinery/microwave/proc/abort() operating = FALSE // Turn it off again aferwards - icon_state = "mw" + if(icon_state == "mw1") + icon_state = "mw" + updateUsrDialog() + soundloop.stop() + +/obj/machinery/microwave/proc/stop() + playsound(src.loc, 'sound/machines/ding.ogg', 50, 1) + operating = FALSE // Turn it off again aferwards + if(icon_state == "mw1") + icon_state = "mw" updateUsrDialog() soundloop.stop() -/obj/machinery/microwave/proc/dispose() - for (var/obj/O in ((contents-component_parts)-circuit)) - O.loc = src.loc +/obj/machinery/microwave/proc/dispose(var/message = 1) + for (var/atom/movable/A in ((contents-component_parts)-circuit)) + A.forceMove(loc) if (src.reagents.total_volume) src.dirty++ src.reagents.clear_reagents() - to_chat(usr, "You dispose of the microwave contents.") + if(message) + to_chat(usr, "You dispose of the microwave contents.") src.updateUsrDialog() /obj/machinery/microwave/proc/muck_start() @@ -383,10 +446,14 @@ var/amount = 0 for (var/obj/O in (((contents - ffuu) - component_parts) - circuit)) amount++ - if (O.reagents) + if(O.reagents) var/id = O.reagents.get_master_reagent_id() - if (id) + if(id) amount+=O.reagents.get_reagent_amount(id) + if(istype(O, /obj/item/weapon/holder)) + var/obj/item/weapon/holder/H = O + if(H.held_mob) + qdel(H.held_mob) qdel(O) src.reagents.clear_reagents() ffuu.reagents.add_reagent("carbon", amount) @@ -409,6 +476,36 @@ if ("dispose") dispose() return + +/obj/machinery/microwave/verb/Eject() + set src in oview(1) + set category = "Object" + set name = "Eject content" + usr.visible_message( + "[usr] tries to open [src] and remove its contents." , + "You try to open [src] and remove its contents." + ) + + if(!do_after(usr, 1 SECONDS, target = src)) + return + + if(operating) + to_chat(usr, "You can't do that, [src] door is locked!") + return + + usr.visible_message( + "[usr] opened [src] and has taken out [english_list(((contents-component_parts)-circuit))]." , + "You have opened [src] and taken out [english_list(((contents-component_parts)-circuit))]." + ) + dispose() + +/obj/machinery/microwave/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) + if(!mover) + return 1 + if(mover.checkpass(PASSTABLE)) + //Animals can run under them, lots of empty space + return 1 + return ..() /obj/machinery/microwave/advanced // specifically for complex recipes name = "deluxe microwave" @@ -421,3 +518,32 @@ /obj/machinery/microwave/advanced/Initialize() ..() reagents.maximum_volume = 1000 + +/datum/recipe/splat // We use this to handle cooking micros (or mice, etc) in a microwave. Janky but it works better than snowflake code to handle the same thing. + items = list( + /obj/item/weapon/holder + ) + result = /obj/effect/decal/cleanable/blood/gibs + +/datum/recipe/splat/before_cook(obj/container) + if(istype(container, /obj/machinery/microwave)) + var/obj/machinery/microwave/M = container + M.muck_start() + playsound(container.loc, 'sound/items/drop/flesh.ogg', 100, 1) + . = ..() + +/datum/recipe/splat/make_food(obj/container) + for(var/obj/item/weapon/holder/H in container) + if(H.held_mob) + to_chat(H.held_mob, "You hear an earsplitting humming and your head aches!") + qdel(H.held_mob) + H.held_mob = null + qdel(H) + + . = ..() + +/datum/recipe/splat/after_cook(obj/container) + if(istype(container, /obj/machinery/microwave)) + var/obj/machinery/microwave/M = container + M.muck_finish() + . = ..() \ No newline at end of file diff --git a/code/modules/food/recipe.dm b/code/modules/food/recipe.dm new file mode 100644 index 0000000000..e5b5a02eb0 --- /dev/null +++ b/code/modules/food/recipe.dm @@ -0,0 +1,327 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * /datum/recipe by rastaf0 13 apr 2011 * + * * * * * * * * * * * * * * * * * * * * * * * * * * + * This is powerful and flexible recipe system. + * It exists not only for food. + * supports both reagents and objects as prerequisites. + * In order to use this system you have to define a deriative from /datum/recipe + * * reagents are reagents. Acid, milc, booze, etc. + * * items are objects. Fruits, tools, circuit boards. + * * result is type to create as new object + * * time is optional parameter, you shall use in in your machine, + default /datum/recipe/ procs does not rely on this parameter. + * + * Functions you need: + * /datum/recipe/proc/make(var/obj/container as obj) + * Creates result inside container, + * deletes prerequisite reagents, + * transfers reagents from prerequisite objects, + * deletes all prerequisite objects (even not needed for recipe at the moment). + * + * /proc/select_recipe(list/datum/recipe/available_recipes, obj/obj as obj, exact = 1) + * Wonderful function that select suitable recipe for you. + * obj is a machine (or magik hat) with prerequisites, + * exact = 0 forces algorithm to ignore superfluous stuff. + * + * + * Functions you do not need to call directly but could: + * /datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) + * /datum/recipe/proc/check_items(var/obj/container as obj) + * + * */ + +// Recipe type defines. Used to determine what machine makes them. +#define MICROWAVE 0x1 +#define FRYER 0x2 +#define OVEN 0x4 +#define GRILL 0x8 +#define CANDYMAKER 0x10 +#define CEREALMAKER 0x20 + +/datum/recipe + var/list/reagents // Example: = list("berryjuice" = 5) // do not list same reagent twice + var/list/items // Example: = list(/obj/item/weapon/tool/crowbar, /obj/item/weapon/welder) // place /foo/bar before /foo + var/list/fruit // Example: = list("fruit" = 3) + var/coating = null // Required coating on all items in the recipe. The default value of null explitly requires no coating + // A value of -1 is permissive and cares not for any coatings + // Any typepath indicates a specific coating that should be present + // Coatings are used for batter, breadcrumbs, beer-batter, colonel's secret coating, etc + + var/result // Example: = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + var/result_quantity = 1 // Number of instances of result that are created. + var/time = 100 // 1/10 part of second + + #define RECIPE_REAGENT_REPLACE 0 //Reagents in the ingredients are discarded. + //Only the reagents present in the result at compiletime are used + #define RECIPE_REAGENT_MAX 1 //The result will contain the maximum of each reagent present between the two pools. Compiletime result, and sum of ingredients + #define RECIPE_REAGENT_MIN 2 //As above, but the minimum, ignoring zero values. + #define RECIPE_REAGENT_SUM 3 //The entire quantity of the ingredients are added to the result + + var/reagent_mix = RECIPE_REAGENT_MAX //How to handle reagent differences between the ingredients and the results + + var/appliance = MICROWAVE // Which apppliances this recipe can be made in. New Recipes will DEFAULT to using the Microwave, as a catch-all (and just in case) + // List of defines is in _defines/misc.dm. But for reference they are: + /* + MICROWAVE + FRYER + OVEN + CANDYMAKER + CEREALMAKER + */ + // This is a bitfield, more than one type can be used + // Grill is presently unused and not listed + +/datum/recipe/proc/check_reagents(var/datum/reagents/avail_reagents) + if(!reagents || !reagents.len) + return 1 + + if(!avail_reagents) + return 0 + + . = 1 + for(var/r_r in reagents) + var/aval_r_amnt = avail_reagents.get_reagent_amount(r_r) + if(aval_r_amnt - reagents[r_r] >= 0) + if(aval_r_amnt>reagents[r_r]) + . = 0 + else + return -1 + + if((reagents?(reagents.len):(0)) < avail_reagents.reagent_list.len) + return 0 + return . + +/datum/recipe/proc/check_fruit(var/obj/container) + if (!fruit || !fruit.len) + return 1 + + . = 1 + if(fruit && fruit.len) + var/list/checklist = list() + // You should trust Copy(). + checklist = fruit.Copy() + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) + continue + if(check_coating(G)) + checklist[G.seed.kitchen_tag]-- + for(var/ktag in checklist) + if(!isnull(checklist[ktag])) + if(checklist[ktag] < 0) + . = 0 + else if(checklist[ktag] > 0) + . = -1 + break + return . + +/datum/recipe/proc/check_items(var/obj/container as obj) + if(!items || !items.len) + return 1 + + . = 1 + if(items && items.len) + var/list/checklist = list() + checklist = items.Copy() // You should really trust Copy + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for(var/obj/O in ((machine.contents - machine.component_parts) - machine.circuit)) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + checklist.Cut(i, i+1) + found = 1 + break + if(!found) + . = 0 + else + for(var/obj/O in container.contents) + if(istype(O,/obj/item/weapon/reagent_containers/food/snacks/grown)) + continue // Fruit is handled in check_fruit(). + var/found = 0 + for(var/i = 1; i < checklist.len+1; i++) + var/item_type = checklist[i] + if (istype(O,item_type)) + if(check_coating(O)) + checklist.Cut(i, i+1) + found = 1 + break + if (!found) + . = 0 + if(checklist.len) + . = -1 + return . + +//This is called on individual items within the container. +/datum/recipe/proc/check_coating(var/obj/O) + if(!istype(O,/obj/item/weapon/reagent_containers/food/snacks)) + return 1//Only snacks can be battered + + if (coating == -1) + return 1 //-1 value doesnt care + + var/obj/item/weapon/reagent_containers/food/snacks/S = O + if (!S.coating) + if (!coating) + return 1 + return 0 + else if (S.coating.type == coating) + return 1 + + return 0 + +//general version +/datum/recipe/proc/make(var/obj/container as obj) + var/obj/result_obj = new result(container) + if(istype(container, /obj/machinery)) + var/obj/machinery/machine = container + for (var/obj/O in ((machine.contents-result_obj - machine.component_parts) - machine.circuit)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + else + for (var/obj/O in (container.contents-result_obj)) + O.reagents.trans_to_obj(result_obj, O.reagents.total_volume) + qdel(O) + container.reagents.clear_reagents() + return result_obj + +// food-related +// This proc is called under the assumption that the container has already been checked and found to contain the necessary ingredients +/datum/recipe/proc/make_food(var/obj/container as obj) + if(!result) + log_runtime(EXCEPTION("Recipe [type] is defined without a result, please bug report this.")) + return + + +//We will subtract all the ingredients from the container, and transfer their reagents into a holder +//We will not touch things which are not required for this recipe. They will be left behind for the caller +//to decide what to do. They may be used again to make another recipe or discarded, or merged into the results, +//thats no longer the concern of this proc + var/datum/reagents/buffer = new /datum/reagents(10000000000, null)// + + + //Find items we need + if (items && items.len) + for (var/i in items) + var/obj/item/I = locate(i) in container + if (I && I.reagents) + I.reagents.trans_to_holder(buffer,I.reagents.total_volume) + qdel(I) + + //Find fruits + if (fruit && fruit.len) + var/list/checklist = list() + checklist = fruit.Copy() + + for(var/obj/item/weapon/reagent_containers/food/snacks/grown/G in container) + if(!G.seed || !G.seed.kitchen_tag || isnull(checklist[G.seed.kitchen_tag])) + continue + + if (checklist[G.seed.kitchen_tag] > 0) + //We found a thing we need + checklist[G.seed.kitchen_tag]-- + if (G && G.reagents) + G.reagents.trans_to_holder(buffer,G.reagents.total_volume) + qdel(G) + + //And lastly deduct necessary quantities of reagents + if (reagents && reagents.len) + for (var/r in reagents) + //Doesnt matter whether or not there's enough, we assume that check is done before + container.reagents.trans_type_to(buffer, r, reagents[r]) + + /* + Now we've removed all the ingredients that were used and we have the buffer containing the total of + all their reagents. + Next up we create the result, and then handle the merging of reagents depending on the mix setting + */ + var/tally = 0 + + /* + If we have multiple results, holder will be used as a buffer to hold reagents for the result objects. + If, as in the most common case, there is only a single result, then it will just be a reference to + the single-result's reagents + */ + var/datum/reagents/holder = new/datum/reagents(10000000000) + var/list/results = list() + while (tally < result_quantity) + var/obj/result_obj = new result(container) + results.Add(result_obj) + + if (!result_obj.reagents)//This shouldn't happen + //If the result somehow has no reagents defined, then create a new holder + result_obj.reagents = new /datum/reagents(buffer.total_volume*1.5, result_obj) + + if (result_quantity == 1) + qdel(holder) + holder = result_obj.reagents + else + result_obj.reagents.trans_to(holder, result_obj.reagents.total_volume) + tally++ + + + switch(reagent_mix) + if (RECIPE_REAGENT_REPLACE) + //We do no transferring + if (RECIPE_REAGENT_SUM) + //Sum is easy, just shove the entire buffer into the result + buffer.trans_to_holder(holder, buffer.total_volume) + if (RECIPE_REAGENT_MAX) + //We want the highest of each. + //Iterate through everything in buffer. If the target has less than the buffer, then top it up + for (var/datum/reagent/R in buffer.reagent_list) + var/rvol = holder.get_reagent_amount(R.id) + if (rvol < R.volume) + //Transfer the difference + buffer.trans_type_to(holder, R.id, R.volume-rvol) + + if (RECIPE_REAGENT_MIN) + //Min is slightly more complex. We want the result to have the lowest from each side + //But zero will not count. Where a side has zero its ignored and the side with a nonzero value is used + for (var/datum/reagent/R in buffer.reagent_list) + var/rvol = holder.get_reagent_amount(R.id) + if (rvol == 0) //If the target has zero of this reagent + buffer.trans_type_to(holder, R.id, R.volume) + //Then transfer all of ours + + else if (rvol > R.volume) + //if the target has more than ours + //Remove the difference + holder.remove_reagent(R.id, rvol-R.volume) + + + if (results.len > 1) + //If we're here, then holder is a buffer containing the total reagents for all the results. + //So now we redistribute it among them + var/total = holder.total_volume + for (var/i in results) + var/atom/a = i //optimisation + holder.trans_to(a, total / results.len) + + return results + +// When exact is false, extraneous ingredients are ignored +// When exact is true, extraneous ingredients will fail the recipe +// In both cases, the full complement of required inredients is still needed +/proc/select_recipe(var/list/datum/recipe/available_recipes, var/obj/obj as obj, var/exact) + var/list/datum/recipe/possible_recipes = list() + for (var/datum/recipe/recipe in available_recipes) + if((recipe.check_reagents(obj.reagents) < exact) || (recipe.check_items(obj) < exact) || (recipe.check_fruit(obj) < exact)) + continue + possible_recipes |= recipe + if (!possible_recipes.len) + return null + else if (possible_recipes.len == 1) + return possible_recipes[1] + else //okay, let's select the most complicated recipe + sortTim(possible_recipes, /proc/cmp_recipe_complexity_dsc) + return possible_recipes[1] + +// Both of these are just placeholders to allow special behavior for mob holders, but you can do other things in here later if you feel like it. +/datum/recipe/proc/before_cook(obj/container) // Called Before the Microwave starts delays and cooking stuff + + +/datum/recipe/proc/after_cook(obj/container) // Called When the Microwave is finished. + diff --git a/code/modules/food/recipe_dump.dm b/code/modules/food/recipe_dump.dm index d70fc09bfd..45f4c3e4ae 100644 --- a/code/modules/food/recipe_dump.dm +++ b/code/modules/food/recipe_dump.dm @@ -16,7 +16,7 @@ qdel(CR) //////////////////////// FOOD - var/list/food_recipes = typesof(/datum/recipe/microwave) - /datum/recipe/microwave + var/list/food_recipes = typesof(/datum/recipe) - /datum/recipe //Build a useful list for(var/Rp in food_recipes) //Lists don't work with datum-stealing no-instance initial() so we have to. @@ -32,6 +32,7 @@ "Reagents" = R.reagents, "Fruit" = R.fruit, "Ingredients" = R.items, + "Appliance" = R.appliance, "Image" = result_icon ) @@ -69,6 +70,9 @@ for(var/Rp in food_recipes) for(var/rid in food_recipes[Rp]["Reagents"]) var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran. + log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!")) + continue // This allows the dump to still continue, and it will skip the invalid recipes. var/R_name = Rd.name var/amt = food_recipes[Rp]["Reagents"][rid] food_recipes[Rp]["Reagents"] -= rid @@ -76,17 +80,36 @@ for(var/Rp in drink_recipes) for(var/rid in drink_recipes[Rp]["Reagents"]) var/datum/reagent/Rd = SSchemistry.chemical_reagents[rid] + if(!Rd) // Leaving this here in the event that if rd is ever invalid or there's a recipe issue, it'll be skipped and recipe dumps can still be ran. + log_runtime(EXCEPTION("Food \"[Rp]\" had an invalid RID: \"[rid]\"! Check your reagents list for a missing or mistyped reagent!")) + continue // This allows the dump to still continue, and it will skip the invalid recipes. var/R_name = Rd.name var/amt = drink_recipes[Rp]["Reagents"][rid] drink_recipes[Rp]["Reagents"] -= rid drink_recipes[Rp]["Reagents"][R_name] = amt + + //We can also change the appliance to its proper name. + for(var/Rp in food_recipes) + switch(food_recipes[Rp]["Appliance"]) + if(1) + food_recipes[Rp]["Appliance"] = "Microwave" + if(2) + food_recipes[Rp]["Appliance"] = "Fryer" + if(4) + food_recipes[Rp]["Appliance"] = "Oven" + if(8) + food_recipes[Rp]["Appliance"] = "Grill" + if(16) + food_recipes[Rp]["Appliance"] = "Candy Maker" + if(32) + food_recipes[Rp]["Appliance"] = "Cereal Maker" //////////////////////// SORTING var/list/foods_to_paths = list() var/list/drinks_to_paths = list() - for(var/Rp in food_recipes) - foods_to_paths["[food_recipes[Rp]["Result"]] [Rp]"] = Rp //Append recipe datum path to keep uniqueness + for(var/Rp in food_recipes) // "Appliance" will sort the list by APPLIANCES first. Items without an appliance will append to the top of the list. The old method was "Result", which sorts the list by the name of the result. + foods_to_paths["[food_recipes[Rp]["Appliance"]] [Rp]"] = Rp //Append recipe datum path to keep uniqueness for(var/Rp in drink_recipes) drinks_to_paths["[drink_recipes[Rp]["Result"]] [Rp]"] = Rp @@ -119,7 +142,7 @@ html += "

Food Recipes (as of [time2text(world.realtime,"MMM DD, YYYY")])


" html += "" - html += "" + html += "" for(var/Rp in food_recipes) //Open this row html += "" @@ -135,6 +158,9 @@ //Name html += "" + + //Appliance + html += "" //Ingredients html += "" + else + . = "" \ No newline at end of file diff --git a/code/modules/persistence/datum/datum_paper.dm b/code/modules/persistence/datum/datum_paper.dm new file mode 100644 index 0000000000..e572faea01 --- /dev/null +++ b/code/modules/persistence/datum/datum_paper.dm @@ -0,0 +1,56 @@ +/datum/persistent/paper + name = "paper" + tokens_per_line = 7 + entries_expire_at = 50 + has_admin_data = TRUE + var/paper_type = /obj/item/weapon/paper + var/requires_noticeboard = TRUE + +/datum/persistent/paper/LabelTokens(var/list/tokens) + var/list/labelled_tokens = ..() + var/entries = LAZYLEN(labelled_tokens) + labelled_tokens["author"] = tokens[entries+1] + labelled_tokens["message"] = tokens[entries+2] + labelled_tokens["title"] = tokens[entries+3] + return labelled_tokens + +/datum/persistent/paper/CheckTurfContents(var/turf/T, var/list/tokens) + if(requires_noticeboard && !(locate(/obj/structure/noticeboard) in T)) + new /obj/structure/noticeboard(T) + . = ..() + +/datum/persistent/paper/CreateEntryInstance(var/turf/creating, var/list/tokens) + var/obj/structure/noticeboard/board = locate() in creating + if(requires_noticeboard && LAZYLEN(board.notices) >= board.max_notices) + return + var/obj/item/weapon/paper/paper = new paper_type(creating) + paper.set_content(tokens["message"], tokens["title"]) + paper.last_modified_ckey = tokens["author"] + if(requires_noticeboard) + board.add_paper(paper) + SSpersistence.track_value(paper, type) + return paper + +/datum/persistent/paper/GetEntryAge(var/atom/entry) + var/obj/item/weapon/paper/paper = entry + return paper.age + +/datum/persistent/paper/CompileEntry(var/atom/entry, var/write_file) + . = ..() + var/obj/item/weapon/paper/paper = entry + LAZYADD(., "[paper.last_modified_ckey ? paper.last_modified_ckey : "unknown"]") + LAZYADD(., "[paper.info]") + LAZYADD(., "[paper.name]") + +/datum/persistent/paper/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) + var/obj/item/weapon/paper/paper = thing + if(can_modify) + . = "" + else + . = "" + +/datum/persistent/paper/RemoveValue(var/atom/value) + var/obj/structure/noticeboard/board = value.loc + if(istype(board)) + board.remove_paper(value) + qdel(value) \ No newline at end of file diff --git a/code/modules/persistence/datum/datum_paper_sticky.dm b/code/modules/persistence/datum/datum_paper_sticky.dm new file mode 100644 index 0000000000..1871eb4a03 --- /dev/null +++ b/code/modules/persistence/datum/datum_paper_sticky.dm @@ -0,0 +1,28 @@ +/datum/persistent/paper/sticky + name = "stickynotes" + paper_type = /obj/item/weapon/paper/sticky + requires_noticeboard = FALSE + tokens_per_line = 10 + +/datum/persistent/paper/sticky/LabelTokens(var/list/tokens) + var/list/labelled_tokens = ..() + var/entries = LAZYLEN(labelled_tokens) + labelled_tokens["offset_x"] = tokens[entries+1] + labelled_tokens["offset_y"] = tokens[entries+2] + labelled_tokens["color"] = tokens[entries+3] + return labelled_tokens + +/datum/persistent/paper/sticky/CreateEntryInstance(var/turf/creating, var/list/tokens) + var/atom/paper = ..() + if(paper) + paper.pixel_x = text2num(tokens["offset_x"]) + paper.pixel_y = text2num(tokens["offset_y"]) + paper.color = tokens["color"] + return paper + +/datum/persistent/paper/sticky/CompileEntry(var/atom/entry, var/write_file) + . = ..() + var/obj/item/weapon/paper/sticky/paper = entry + LAZYADD(., "[paper.pixel_x]") + LAZYADD(., "[paper.pixel_y]") + LAZYADD(., "[paper.color]") \ No newline at end of file diff --git a/code/modules/persistence/datum/datum_trash.dm b/code/modules/persistence/datum/datum_trash.dm new file mode 100644 index 0000000000..951e9858af --- /dev/null +++ b/code/modules/persistence/datum/datum_trash.dm @@ -0,0 +1,17 @@ +/datum/persistent/filth/trash + name = "trash" + +/datum/persistent/filth/trash/CheckTurfContents(var/turf/T, var/list/tokens) + var/too_much_trash = 0 + for(var/obj/item/trash/trash in T) + too_much_trash++ + if(too_much_trash >= 5) + return FALSE + return TRUE + +/datum/persistent/filth/trash/GetEntryAge(var/atom/entry) + var/obj/item/trash/trash = entry + return trash.age + +/datum/persistent/filth/trash/GetEntryPath(var/atom/entry) + return entry.type \ No newline at end of file diff --git a/code/modules/persistence/datum/persistence_datum.dm b/code/modules/persistence/datum/persistence_datum.dm new file mode 100644 index 0000000000..8a409404cd --- /dev/null +++ b/code/modules/persistence/datum/persistence_datum.dm @@ -0,0 +1,160 @@ +// This is a set of datums instantiated by SSpersistence. +// They basically just handle loading, processing and saving specific forms +// of persistent data like graffiti and round to round filth. + +/datum/persistent + var/name + var/filename + var/tokens_per_line + var/entries_expire_at + var/entries_decay_at + var/entry_decay_weight = 0.5 + var/file_entry_split_character = "\t" + var/file_entry_substitute_character = " " + var/file_line_split_character = "\n" + var/has_admin_data + +/datum/persistent/New() + SetFilename() + ..() + +/datum/persistent/proc/SetFilename() + if(name) + filename = "data/persistent/[lowertext(using_map.name)]-[lowertext(name)].txt" + if(!isnull(entries_decay_at) && !isnull(entries_expire_at)) + entries_decay_at = round(entries_expire_at * entries_decay_at) + +/datum/persistent/proc/LabelTokens(var/list/tokens) + var/list/labelled_tokens = list() + labelled_tokens["x"] = text2num(tokens[1]) + labelled_tokens["y"] = text2num(tokens[2]) + labelled_tokens["z"] = text2num(tokens[3]) + labelled_tokens["age"] = text2num(tokens[4]) + return labelled_tokens + +/datum/persistent/proc/GetValidTurf(var/turf/T, var/list/tokens) + if(T && CheckTurfContents(T, tokens)) + return T + +/datum/persistent/proc/CheckTurfContents(var/turf/T, var/list/tokens) + return TRUE + +/datum/persistent/proc/CheckTokenSanity(var/list/tokens) + return ( \ + !isnull(tokens["x"]) && \ + !isnull(tokens["y"]) && \ + !isnull(tokens["z"]) && \ + !isnull(tokens["age"]) && \ + tokens["age"] <= entries_expire_at \ + ) + +/datum/persistent/proc/CreateEntryInstance(var/turf/creating, var/list/tokens) + return + +/datum/persistent/proc/ProcessAndApplyTokens(var/list/tokens) + + // If it's old enough we start to trim down any textual information and scramble strings. + if(tokens["message"] && !isnull(entries_decay_at) && !isnull(entry_decay_weight)) + var/_n = tokens["age"] + var/_message = tokens["message"] + if(_n >= entries_decay_at) + var/decayed_message = "" + for(var/i = 1 to length(_message)) + var/char = copytext(_message, i, i + 1) + if(prob(round(_n * entry_decay_weight))) + if(prob(99)) + decayed_message += pick(".",",","-","'","\\","/","\"",":",";") + else + decayed_message += char + _message = decayed_message + if(length(_message)) + tokens["message"] = _message + else + return + + var/_z = tokens["z"] + if(_z in using_map.station_levels) + . = GetValidTurf(locate(tokens["x"], tokens["y"], _z), tokens) + if(.) + CreateEntryInstance(., tokens) + +/datum/persistent/proc/IsValidEntry(var/atom/entry) + if(!istype(entry)) + return FALSE + if(GetEntryAge(entry) >= entries_expire_at) + return FALSE + var/turf/T = get_turf(entry) + if(!T || !(T.z in using_map.station_levels) ) + return FALSE + var/area/A = get_area(T) + if(!A || (A.flags & AREA_FLAG_IS_NOT_PERSISTENT)) + return FALSE + return TRUE + +/datum/persistent/proc/GetEntryAge(var/atom/entry) + return 0 + +/datum/persistent/proc/CompileEntry(var/atom/entry) + var/turf/T = get_turf(entry) + . = list( + T.x, + T.y, + T.z, + GetEntryAge(entry) + ) + +/datum/persistent/proc/Initialize() + if(fexists(filename)) + for(var/entry_line in file2list(filename, file_line_split_character)) + if(!entry_line) + continue + var/list/tokens = splittext(entry_line, file_entry_split_character) + if(LAZYLEN(tokens) < tokens_per_line) + continue + tokens = LabelTokens(tokens) + if(!CheckTokenSanity(tokens)) + continue + ProcessAndApplyTokens(tokens) + +/datum/persistent/proc/Shutdown() + if(fexists(filename)) + fdel(filename) + var/write_file = file(filename) + for(var/thing in SSpersistence.tracking_values[type]) + if(IsValidEntry(thing)) + var/list/entry = CompileEntry(thing) + if(LAZYLEN(entry) == tokens_per_line) + for(var/i = 1 to LAZYLEN(entry)) + if(istext(entry[i])) + entry[i] = replacetext(entry[i], file_entry_split_character, file_entry_substitute_character) + to_file(write_file, jointext(entry, file_entry_split_character)) + +/datum/persistent/proc/RemoveValue(var/atom/value) + qdel(value) + +/datum/persistent/proc/GetAdminSummary(var/mob/user, var/can_modify) + . = list("") + . += "" + for(var/thing in SSpersistence.tracking_values[type]) + . += "[GetAdminDataStringFor(thing, can_modify, user)]" + . += "" + + +/datum/persistent/proc/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) + if(can_modify) + . = "" + else + . = "" + +/datum/persistent/Topic(var/href, var/href_list) + . = ..() + if(!.) + if(href_list["remove_entry"]) + var/datum/value = locate(href_list["remove_entry"]) + if(istype(value)) + RemoveValue(value) + . = TRUE + if(.) + var/mob/user = locate(href_list["caller"]) + if(user) + SSpersistence.show_info(user) \ No newline at end of file diff --git a/code/modules/persistence/filth.dm b/code/modules/persistence/filth.dm new file mode 100644 index 0000000000..2eea824f83 --- /dev/null +++ b/code/modules/persistence/filth.dm @@ -0,0 +1,12 @@ +/obj/effect/decal/cleanable/filth + name = "filth" + desc = "Disgusting. Someone from last shift didn't do their job properly." + icon = 'icons/effects/blood.dmi' + icon_state = "mfloor1" + random_icon_states = list("mfloor1", "mfloor2", "mfloor3", "mfloor4", "mfloor5", "mfloor6", "mfloor7") + color = "#464f33" + persistent = TRUE + +/obj/effect/decal/cleanable/filth/Initialize() + . = ..() + alpha = rand(180,220) \ No newline at end of file diff --git a/code/modules/persistence/graffiti.dm b/code/modules/persistence/graffiti.dm new file mode 100644 index 0000000000..d6a56b75f1 --- /dev/null +++ b/code/modules/persistence/graffiti.dm @@ -0,0 +1,64 @@ +/obj/effect/decal/writing + name = "hand graffiti" + icon_state = "writing1" + icon = 'icons/effects/writing.dmi' + desc = "It looks like someone has scratched something here." + plane = DIRTY_PLANE + gender = PLURAL + blend_mode = BLEND_MULTIPLY + color = "#000000" + alpha = 120 + + var/message + var/graffiti_age = 0 + var/author = "unknown" + +/obj/effect/decal/writing/New(var/newloc, var/_age, var/_message, var/_author) + ..(newloc) + if(!isnull(_age)) + graffiti_age = _age + message = _message + if(!isnull(author)) + author = _author + +/obj/effect/decal/writing/Initialize() + var/list/random_icon_states = icon_states(icon) + for(var/obj/effect/decal/writing/W in loc) + random_icon_states.Remove(W.icon_state) + if(random_icon_states.len) + icon_state = pick(random_icon_states) + SSpersistence.track_value(src, /datum/persistent/graffiti) + . = ..() + +/obj/effect/decal/writing/Destroy() + SSpersistence.forget_value(src, /datum/persistent/graffiti) + . = ..() + +/obj/effect/decal/writing/examine(mob/user) + . = ..() + to_chat(user, "It reads \"[message]\".") + +/obj/effect/decal/writing/attackby(var/obj/item/thing, var/mob/user) + if(is_hot(thing)) + var/obj/item/weapon/weldingtool/welder = thing + if(welder.isOn() && welder.remove_fuel(0,user) && do_after(user, 5, src) && !QDELETED(src)) + playsound(src.loc, 'sound/items/Welder2.ogg', 50, 1) + user.visible_message("\The [user] clears away some graffiti.") + qdel(src) + else if(thing.sharp) + + if(jobban_isbanned(user, "Graffiti")) + to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) + return + + var/_message = sanitize(input("Enter an additional message to engrave.", "Graffiti") as null|text, trim = TRUE) + if(_message && loc && user && !user.incapacitated() && user.Adjacent(loc) && thing.loc == user) + user.visible_message("\The [user] begins carving something into \the [loc].") + if(do_after(user, max(20, length(_message)), src) && loc) + user.visible_message("\The [user] carves some graffiti into \the [loc].") + message = "[message] [_message]" + author = user.ckey + if(lowertext(message) == "elbereth") + to_chat(user, "You feel much safer.") + else + . = ..() \ No newline at end of file diff --git a/code/modules/persistence/noticeboard.dm b/code/modules/persistence/noticeboard.dm new file mode 100644 index 0000000000..ad8cfef590 --- /dev/null +++ b/code/modules/persistence/noticeboard.dm @@ -0,0 +1,221 @@ +/obj/structure/noticeboard + name = "notice board" + desc = "A board for pinning important notices upon." + icon = 'icons/obj/stationobjs.dmi' + icon_state = "nboard00" + density = 0 + anchored = 1 + var/list/notices + var/base_icon_state = "nboard0" + var/const/max_notices = 5 + +/obj/structure/noticeboard/Initialize() + . = ..() + + // Grab any mapped notices. + notices = list() + for(var/obj/item/weapon/paper/note in get_turf(src)) + note.forceMove(src) + LAZYADD(notices, note) + if(LAZYLEN(notices) >= max_notices) + break + + // Automatically place noticeboards that aren't mapped to specific positions. + if(pixel_x == 0 && pixel_y == 0) + + var/turf/here = get_turf(src) + var/placing = 0 + for(var/checkdir in GLOB.cardinal) + var/turf/T = get_step(here, checkdir) + if(T.density) + placing = checkdir + break + for(var/thing in T) + var/atom/A = thing + if(A.simulated && !A.CanPass(src, T)) + placing = checkdir + break + + switch(placing) + if(NORTH) + pixel_x = 0 + pixel_y = 32 + if(SOUTH) + pixel_x = 0 + pixel_y = -32 + if(EAST) + pixel_x = 32 + pixel_y = 0 + if(WEST) + pixel_x = -32 + pixel_y = 0 + + update_icon() + +/obj/structure/noticeboard/proc/add_paper(var/atom/movable/paper, var/skip_icon_update) + if(istype(paper)) + LAZYDISTINCTADD(notices, paper) + paper.forceMove(src) + if(!skip_icon_update) + update_icon() + +/obj/structure/noticeboard/proc/remove_paper(var/atom/movable/paper, var/skip_icon_update) + if(istype(paper) && paper.loc == src) + paper.dropInto(loc) + LAZYREMOVE(notices, paper) + SSpersistence.forget_value(paper, /datum/persistent/paper) + if(!skip_icon_update) + update_icon() + +/obj/structure/noticeboard/proc/dismantle() + for(var/thing in notices) + remove_paper(thing, skip_icon_update = TRUE) + new /obj/item/stack/material/wood(get_turf(src)) + qdel(src) + +/obj/structure/noticeboard/Destroy() + QDEL_NULL_LIST(notices) + . = ..() + +/obj/structure/noticeboard/ex_act(var/severity) + dismantle() + +/obj/structure/noticeboard/update_icon() + icon_state = "[base_icon_state][LAZYLEN(notices)]" + +/obj/structure/noticeboard/attackby(var/obj/item/weapon/thing, var/mob/user) + if(thing.is_screwdriver()) + var/choice = input("Which direction do you wish to place the noticeboard?", "Noticeboard Offset") as null|anything in list("North", "South", "East", "West") + if(choice && Adjacent(user) && thing.loc == user && !user.incapacitated()) + playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) + switch(choice) + if("North") + pixel_x = 0 + pixel_y = 32 + if("South") + pixel_x = 0 + pixel_y = -32 + if("East") + pixel_x = 32 + pixel_y = 0 + if("West") + pixel_x = -32 + pixel_y = 0 + return + else if(thing.is_wrench()) + visible_message(SPAN_WARNING("\The [user] begins dismantling \the [src].")) + playsound(loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, 50, src)) + visible_message(SPAN_DANGER("\The [user] has dismantled \the [src]!")) + dismantle() + return + else if(istype(thing, /obj/item/weapon/paper) || istype(thing, /obj/item/weapon/photo)) + if(jobban_isbanned(user, "Graffiti")) + to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) + else + if(LAZYLEN(notices) < max_notices && user.unEquip(thing, src)) + add_fingerprint(user) + add_paper(thing) + to_chat(user, SPAN_NOTICE("You pin \the [thing] to \the [src].")) + SSpersistence.track_value(thing, /datum/persistent/paper) + else + to_chat(user, SPAN_WARNING("You hesitate, certain \the [thing] will not be seen among the many others already attached to \the [src].")) + return + ..() + +/obj/structure/noticeboard/attack_ai(var/mob/user) + examine(user) + +/obj/structure/noticeboard/attack_hand(var/mob/user) + examine(user) + +/obj/structure/noticeboard/examine(var/mob/user) + . = ..() + if(.) + var/list/dat = list("
IconNameIngredients
IconNameApplianceIngredients
[food_recipes[Rp]["Result"]][food_recipes[Rp]["Appliance"]]
    " diff --git a/code/modules/food/recipes_fryer.dm b/code/modules/food/recipes_fryer.dm new file mode 100644 index 0000000000..b0347d154d --- /dev/null +++ b/code/modules/food/recipes_fryer.dm @@ -0,0 +1,180 @@ +/datum/recipe/fries + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsticks + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fries + +/datum/recipe/cheesyfries + items = list( + /obj/item/weapon/reagent_containers/food/snacks/fries, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries + +/datum/recipe/jpoppers + appliance = FRYER + fruit = list("chili" = 1) + coating = /datum/reagent/nutriment/coating/batter + result = /obj/item/weapon/reagent_containers/food/snacks/jalapeno_poppers + +/datum/recipe/risottoballs + appliance = FRYER + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/risotto) + coating = /datum/reagent/nutriment/coating/batter + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/risottoballs + + +//Meaty Recipes +//==================== +/datum/recipe/cubancarp + appliance = FRYER + fruit = list("chili" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp + +/datum/recipe/batteredsausage + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sausage/battered + coating = /datum/reagent/nutriment/coating/batter + + +/datum/recipe/katsu + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu + coating = /datum/reagent/nutriment/coating/beerbatter + + +/datum/recipe/pizzacrunch_1 + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch + coating = /datum/reagent/nutriment/coating/batter + +//Alternate pizza crunch recipe for combination pizzas made in oven +/datum/recipe/pizzacrunch_2 + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/variable/pizza + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/crunch + coating = /datum/reagent/nutriment/coating/batter + +/datum/recipe/friedmushroom + appliance = FRYER + fruit = list("plumphelmet" = 1) + coating = /datum/reagent/nutriment/coating/beerbatter + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/friedmushroom + + +//Sweet Recipes. +//================== +// All donuts were given reagents of 5 to equal old recipes and make for faster cook times. +/datum/recipe/jellydonut + appliance = FRYER + reagents = list("berryjuice" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly + result_quantity = 2 + +/datum/recipe/jellydonut/poisonberry + reagents = list("poisonberryjuice" = 5, "sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry + +/datum/recipe/jellydonut/slime + appliance = FRYER + reagents = list("slimejelly" = 5, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly + +/datum/recipe/jellydonut/cherry + appliance = FRYER + reagents = list("cherryjelly" = 5, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly + +/datum/recipe/donut + appliance = FRYER + reagents = list("sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal + result_quantity = 2 + +/datum/recipe/chaosdonut + appliance = FRYER + reagents = list("frostoil" = 10, "capsaicin" = 10, "sugar" = 10) + reagent_mix = RECIPE_REAGENT_REPLACE //This creates its own reagents + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos + result_quantity = 2 + +/datum/recipe/funnelcake + appliance = FRYER + reagents = list("sugar" = 5, "batter" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/funnelcake + +/datum/recipe/pisanggoreng + appliance = FRYER + fruit = list("banana" = 2) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/pisanggoreng + coating = /datum/reagent/nutriment/coating/batter + +/datum/recipe/corn_dog + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + fruit = list("corn" = 1) + coating = /datum/reagent/nutriment/coating/batter + result = /obj/item/weapon/reagent_containers/food/snacks/corn_dog + +/datum/recipe/sweet_and_sour + appliance = FRYER + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + reagents = list("soysauce" = 5, "batter" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/sweet_and_sour + +/datum/recipe/generalschicken + appliance = FRYER + reagents = list("capsaicin" = 2, "sugar" = 2, "batter" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken + +/datum/recipe/chickenwings + appliance = FRYER + reagents = list("capsaicin" = 5, "batter" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box. \ No newline at end of file diff --git a/code/modules/food/recipes_grill.dm b/code/modules/food/recipes_grill.dm new file mode 100644 index 0000000000..86c7998e90 --- /dev/null +++ b/code/modules/food/recipes_grill.dm @@ -0,0 +1,231 @@ +/datum/recipe/humanburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/human/burger + +/datum/recipe/plainburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/humanburger + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger + +/datum/recipe/syntiburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger + +/datum/recipe/brainburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/organ/internal/brain + ) + result = /obj/item/weapon/reagent_containers/food/snacks/brainburger + +/datum/recipe/roburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/robot_parts/head + ) + result = /obj/item/weapon/reagent_containers/food/snacks/roburger + +/datum/recipe/xenoburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger + +/datum/recipe/fishburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fishburger + +/datum/recipe/tofuburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofuburger + +/datum/recipe/ghostburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/ectoplasm //where do you even find this stuff + ) + result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger + +/datum/recipe/clownburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/clothing/mask/gas/clown_hat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/clownburger + +/datum/recipe/mimeburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/clothing/head/beret + ) + result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger + +/datum/recipe/mouseburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/holder/mouse + ) + result = /obj/item/weapon/reagent_containers/food/snacks/mouseburger + +/datum/recipe/bunbun + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bunbun + +/datum/recipe/hotdog + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/sausage + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hotdog + +/datum/recipe/humankabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + /obj/item/weapon/reagent_containers/food/snacks/meat/human, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob + +/datum/recipe/kabob //Do not put before humankabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/monkeykabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey, + /obj/item/weapon/reagent_containers/food/snacks/meat/monkey + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/syntikabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob + +/datum/recipe/tofukabob + appliance = GRILL + items = list( + /obj/item/stack/rods, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob + +/datum/recipe/fakespellburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/clothing/head/wizard/fake, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spellburger + +/datum/recipe/spellburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/clothing/head/wizard, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/spellburger + +/datum/recipe/bigbiteburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + ) + reagents = list("egg" = 3) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger + +/datum/recipe/superbiteburger + appliance = GRILL + fruit = list("tomato" = 1) + reagents = list("sodiumchloride" = 5, "blackpepper" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg, + ) + result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger + +/datum/recipe/slimeburger + appliance = GRILL + reagents = list("slimejelly" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime + +/datum/recipe/jellyburger + appliance = GRILL + reagents = list("cherryjelly" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry + +/datum/recipe/bearburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/bearmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bearburger + +/datum/recipe/baconburger + appliance = GRILL + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bun, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burger/bacon \ No newline at end of file diff --git a/code/modules/food/recipes_microwave.dm b/code/modules/food/recipes_microwave.dm index 0877869870..c9190ca259 100644 --- a/code/modules/food/recipes_microwave.dm +++ b/code/modules/food/recipes_microwave.dm @@ -3,7 +3,7 @@ /* No telebacon. just no... -/datum/recipe/microwave/telebacon +/datum/recipe/telebacon items = list( /obj/item/weapon/reagent_containers/food/snacks/meat, /obj/item/device/assembly/signaler @@ -11,7 +11,7 @@ result = /obj/item/weapon/reagent_containers/food/snacks/telebacon I said no! -/datum/recipe/microwave/syntitelebacon +/datum/recipe/syntitelebacon items = list( /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, /obj/item/device/assembly/signaler @@ -19,21 +19,22 @@ I said no! result = /obj/item/weapon/reagent_containers/food/snacks/telebacon */ -/datum/recipe/microwave/friedegg +/datum/recipe/friedegg reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/friedegg -/datum/recipe/microwave/boiledegg +/datum/recipe/boiledegg reagents = list("water" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE items = list( /obj/item/weapon/reagent_containers/food/snacks/egg ) result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg -/datum/recipe/microwave/devilledegg +/datum/recipe/devilledegg fruit = list("chili" = 1) reagents = list("sodiumchloride" = 2, "mayo" = 5) items = list( @@ -42,132 +43,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/devilledegg -/datum/recipe/microwave/dionaroast - fruit = list("apple" = 1) - reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though. - items = list(/obj/item/weapon/holder/diona) - result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast - -/datum/recipe/microwave/jellydonut - reagents = list("berryjuice" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/jelly - -/datum/recipe/microwave/jellydonut/poisonberry - reagents = list("poisonberryjuice" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/poisonberry - -/datum/recipe/microwave/jellydonut/slime - reagents = list("slimejelly" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/slimejelly - -/datum/recipe/microwave/jellydonut/cherry - reagents = list("cherryjelly" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/cherryjelly - -/datum/recipe/microwave/donut - reagents = list("sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/normal - -/datum/recipe/microwave/humanburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/human/burger - -/datum/recipe/microwave/plainburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/meat //do not place this recipe before /datum/recipe/microwave/humanburger - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger - -/datum/recipe/microwave/brainburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/organ/internal/brain - ) - result = /obj/item/weapon/reagent_containers/food/snacks/brainburger - -/datum/recipe/microwave/roburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/robot_parts/head - ) - result = /obj/item/weapon/reagent_containers/food/snacks/roburger - -/datum/recipe/microwave/xenoburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/xenoburger - -/datum/recipe/microwave/fishburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fishburger - -/datum/recipe/microwave/tofuburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofuburger - -/datum/recipe/microwave/ghostburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/ectoplasm //where do you even find this stuff - ) - result = /obj/item/weapon/reagent_containers/food/snacks/ghostburger - -/datum/recipe/microwave/clownburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/clothing/mask/gas/clown_hat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/clownburger - -/datum/recipe/microwave/mimeburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/clothing/head/beret - ) - result = /obj/item/weapon/reagent_containers/food/snacks/mimeburger - -/datum/recipe/microwave/bunbun - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bunbun - -/datum/recipe/microwave/hotdog - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun, - /obj/item/weapon/reagent_containers/food/snacks/sausage - ) - result = /obj/item/weapon/reagent_containers/food/snacks/hotdog - -/datum/recipe/microwave/waffles +/datum/recipe/waffles reagents = list("sugar" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, @@ -175,7 +51,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/waffles -/datum/recipe/microwave/donkpocket +/datum/recipe/donkpocket items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, /obj/item/weapon/reagent_containers/food/snacks/meatball @@ -184,77 +60,36 @@ I said no! proc/warm_up(var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked) being_cooked.heat() make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = ..(container) - warm_up(being_cooked) - return being_cooked + . = ..(container) + for (var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/D in .) + if (!D.warm) + warm_up(D) -/datum/recipe/microwave/donkpocket/warm +/datum/recipe/donkpocket/warm reagents = list() //This is necessary since this is a child object of the above recipe and we don't want donk pockets to need flour items = list( /obj/item/weapon/reagent_containers/food/snacks/donkpocket ) result = /obj/item/weapon/reagent_containers/food/snacks/donkpocket //SPECIAL - make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/donkpocket/being_cooked = locate() in container - if(being_cooked && !being_cooked.warm) - warm_up(being_cooked) - return being_cooked -/datum/recipe/microwave/meatbread +/datum/recipe/omelette items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread - -/datum/recipe/microwave/xenomeatbread - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread - -/datum/recipe/microwave/bananabread - fruit = list("banana" = 1) - reagents = list("milk" = 5, "sugar" = 15) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread - -/datum/recipe/microwave/omelette - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, ) + reagents = list("egg" = 6) + reagent_mix = RECIPE_REAGENT_REPLACE result = /obj/item/weapon/reagent_containers/food/snacks/omelette -/datum/recipe/microwave/muffin +/datum/recipe/muffin reagents = list("milk" = 5, "sugar" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, ) result = /obj/item/weapon/reagent_containers/food/snacks/muffin -/datum/recipe/microwave/eggplantparm +/datum/recipe/eggplantparm fruit = list("eggplant" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, @@ -262,218 +97,102 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/eggplantparm -/datum/recipe/microwave/soylenviridians +/datum/recipe/soylenviridians fruit = list("soybeans" = 1) reagents = list("flour" = 10) + reagent_mix = RECIPE_REAGENT_REPLACE result = /obj/item/weapon/reagent_containers/food/snacks/soylenviridians -/datum/recipe/microwave/soylentgreen +/datum/recipe/soylentgreen reagents = list("flour" = 10) + reagent_mix = RECIPE_REAGENT_REPLACE items = list( /obj/item/weapon/reagent_containers/food/snacks/meat/human, /obj/item/weapon/reagent_containers/food/snacks/meat/human ) result = /obj/item/weapon/reagent_containers/food/snacks/soylentgreen -/datum/recipe/microwave/meatpie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/meatpie - -/datum/recipe/microwave/tofupie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofupie - -/datum/recipe/microwave/xemeatpie - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie - -/datum/recipe/microwave/pie - fruit = list("banana" = 1) - reagents = list("sugar" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/pie - -/datum/recipe/microwave/cherrypie - fruit = list("cherries" = 1) - reagents = list("sugar" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie - -/datum/recipe/microwave/berryclafoutis +/datum/recipe/berryclafoutis fruit = list("berries" = 1) items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough ) result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/berry -/datum/recipe/microwave/poisonberryclafoutis +/datum/recipe/poisonberryclafoutis fruit = list("poisonberries" = 1) items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough ) result = /obj/item/weapon/reagent_containers/food/snacks/berryclafoutis/poison -/datum/recipe/microwave/wingfangchu +/datum/recipe/wingfangchu reagents = list("soysauce" = 5) items = list( - /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat ) result = /obj/item/weapon/reagent_containers/food/snacks/wingfangchu -/datum/recipe/microwave/chaosdonut - reagents = list("frostoil" = 5, "capsaicin" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donut/chaos - -/datum/recipe/microwave/humankabob - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - /obj/item/weapon/reagent_containers/food/snacks/meat/human, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob - -/datum/recipe/microwave/kabob //Do not put before humankabob - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob - -/datum/recipe/microwave/tofukabob - items = list( - /obj/item/stack/rods, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/tofukabob - -/datum/recipe/microwave/tofubread - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread - -/datum/recipe/microwave/loadedbakedpotato +/datum/recipe/loadedbakedpotato fruit = list("potato" = 1) items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) result = /obj/item/weapon/reagent_containers/food/snacks/loadedbakedpotato + +/datum/recipe/microchips + appliance = MICROWAVE + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsticks + ) + result = /obj/item/weapon/reagent_containers/food/snacks/microchips -/datum/recipe/microwave/mashedpotato +/datum/recipe/mashedpotato fruit = list("potato" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/mashedpotato -/datum/recipe/microwave/bangersandmash +/datum/recipe/bangersandmash items = list( /obj/item/weapon/reagent_containers/food/snacks/mashedpotato, /obj/item/weapon/reagent_containers/food/snacks/sausage, ) result = /obj/item/weapon/reagent_containers/food/snacks/bangersandmash -/datum/recipe/microwave/cheesymash +/datum/recipe/cheesymash items = list( /obj/item/weapon/reagent_containers/food/snacks/mashedpotato, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, ) result = /obj/item/weapon/reagent_containers/food/snacks/cheesymash -/datum/recipe/microwave/blackpudding +/datum/recipe/blackpudding reagents = list("blood" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/sausage, ) result = /obj/item/weapon/reagent_containers/food/snacks/blackpudding -/datum/recipe/microwave/cheesyfries - items = list( - /obj/item/weapon/reagent_containers/food/snacks/fries, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cheesyfries - -/datum/recipe/microwave/cubancarp - fruit = list("chili" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/carpmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cubancarp - -/datum/recipe/microwave/popcorn +/datum/recipe/popcorn fruit = list("corn" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/popcorn -/datum/recipe/microwave/cookie - reagents = list("milk" = 5, "sugar" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cookie - -/datum/recipe/microwave/fortunecookie +/datum/recipe/fortunecookie reagents = list("sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/doughslice, /obj/item/weapon/paper, ) result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie - make_food(var/obj/container as obj) - var/obj/item/weapon/paper/paper = locate() in container - paper.loc = null //prevent deletion - var/obj/item/weapon/reagent_containers/food/snacks/fortunecookie/being_cooked = ..(container) - paper.loc = being_cooked - being_cooked.trash = paper //so the paper is left behind as trash without special-snowflake(TM Nodrak) code ~carn - return being_cooked - check_items(var/obj/container as obj) - . = ..() - if (.) - var/obj/item/weapon/paper/paper = locate() in container - if (!paper) - return 0 - if (!paper.info) - return 0 - return . -/datum/recipe/microwave/meatsteak +/datum/recipe/meatsteak reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak + +/datum/recipe/syntisteak + reagents = list("sodiumchloride" = 1, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh) + result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak -/datum/recipe/microwave/pizzamargherita - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita - -/datum/recipe/microwave/pizzahawaiian +/datum/recipe/pizzahawaiian fruit = list("tomato" = 1, "pineapple" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, @@ -482,160 +201,56 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple -/datum/recipe/microwave/meatpizza - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza - -/datum/recipe/microwave/mushroompizza - fruit = list("mushroom" = 5, "tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza - -/datum/recipe/microwave/vegetablepizza - fruit = list("eggplant" = 1, "carrot" = 1, "corn" = 1, "tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza - -/datum/recipe/microwave/spacylibertyduff +/datum/recipe/spacylibertyduff reagents = list("water" = 5, "vodka" = 5, "psilocybin" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/spacylibertyduff -/datum/recipe/microwave/amanitajelly +/datum/recipe/amanitajelly reagents = list("water" = 5, "vodka" = 5, "amatoxin" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/amanitajelly make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked = ..(container) - being_cooked.reagents.del_reagent("amatoxin") - return being_cooked + . = ..(container) + for(var/obj/item/weapon/reagent_containers/food/snacks/amanitajelly/being_cooked in .) + being_cooked.reagents.del_reagent("amatoxin") -/datum/recipe/microwave/meatballsoup +/datum/recipe/meatballsoup fruit = list("carrot" = 1, "potato" = 1) reagents = list("water" = 10) items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball) result = /obj/item/weapon/reagent_containers/food/snacks/meatballsoup -/datum/recipe/microwave/vegetablesoup +/datum/recipe/vegetablesoup fruit = list("carrot" = 1, "potato" = 1, "corn" = 1, "eggplant" = 1) reagents = list("water" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/vegetablesoup -/datum/recipe/microwave/nettlesoup +/datum/recipe/nettlesoup fruit = list("nettle" = 1, "potato" = 1) - reagents = list("water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) + reagents = list("water" = 10, "egg" = 3) result = /obj/item/weapon/reagent_containers/food/snacks/nettlesoup -/datum/recipe/microwave/wishsoup +/datum/recipe/wishsoup reagents = list("water" = 20) result= /obj/item/weapon/reagent_containers/food/snacks/wishsoup -/datum/recipe/microwave/hotchili +/datum/recipe/hotchili fruit = list("chili" = 1, "tomato" = 1) items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/hotchili -/datum/recipe/microwave/coldchili +/datum/recipe/coldchili fruit = list("icechili" = 1, "tomato" = 1) items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/coldchili -/datum/recipe/microwave/amanita_pie - reagents = list("amatoxin" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie - -/datum/recipe/microwave/plump_pie - fruit = list("plumphelmet" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) - result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie - -/datum/recipe/microwave/spellburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/clothing/head/wizard/fake, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/spellburger - -/datum/recipe/microwave/spellburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/clothing/head/wizard, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/spellburger - -/datum/recipe/microwave/bigbiteburger - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeyburger, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/egg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger - -/datum/recipe/microwave/enchiladas - fruit = list("chili" = 2, "corn" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet) - result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas - -/datum/recipe/microwave/creamcheesebread - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread - -/datum/recipe/microwave/monkeysdelight - fruit = list("banana" = 1) - reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/monkeycube - ) - result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight - -/datum/recipe/microwave/baguette - reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "yeast" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/dough, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/baguette - -/datum/recipe/microwave/croissant - reagents = list("sodiumchloride" = 1, "water" = 5, "milk" = 5, "yeast" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) - result = /obj/item/weapon/reagent_containers/food/snacks/croissant - -/datum/recipe/microwave/fishandchips +/datum/recipe/fishandchips items = list( /obj/item/weapon/reagent_containers/food/snacks/fries, /obj/item/weapon/reagent_containers/food/snacks/carpmeat, ) result = /obj/item/weapon/reagent_containers/food/snacks/fishandchips -/datum/recipe/microwave/bread - reagents = list("yeast" = 5) - items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread - -/datum/recipe/microwave/sandwich +/datum/recipe/sandwich items = list( /obj/item/weapon/reagent_containers/food/snacks/meatsteak, /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -644,13 +259,13 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/sandwich -/datum/recipe/microwave/toastedsandwich +/datum/recipe/toastedsandwich items = list( /obj/item/weapon/reagent_containers/food/snacks/sandwich ) result = /obj/item/weapon/reagent_containers/food/snacks/toastedsandwich -/datum/recipe/microwave/peanutbutterjellysandwich +/datum/recipe/peanutbutterjellysandwich reagents = list("cherryjelly" = 5, "peanutbutter" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -658,7 +273,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/peanutbutter -/datum/recipe/microwave/grilledcheese +/datum/recipe/grilledcheese items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -666,12 +281,12 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/grilledcheese -/datum/recipe/microwave/tomatosoup +/datum/recipe/tomatosoup fruit = list("tomato" = 2) reagents = list("water" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/tomatosoup -/datum/recipe/microwave/rofflewaffles +/datum/recipe/rofflewaffles reagents = list("psilocybin" = 5, "sugar" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, @@ -679,27 +294,27 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/rofflewaffles -/datum/recipe/microwave/stew +/datum/recipe/stew fruit = list("potato" = 1, "tomato" = 1, "carrot" = 1, "eggplant" = 1, "mushroom" = 1) reagents = list("water" = 10) items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) result = /obj/item/weapon/reagent_containers/food/snacks/stew -/datum/recipe/microwave/slimetoast +/datum/recipe/slimetoast reagents = list("slimejelly" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, ) result = /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/slime -/datum/recipe/microwave/jelliedtoast +/datum/recipe/jelliedtoast reagents = list("cherryjelly" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, ) result = /obj/item/weapon/reagent_containers/food/snacks/jelliedtoast/cherry -/datum/recipe/microwave/milosoup +/datum/recipe/milosoup reagents = list("water" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/soydope, @@ -709,7 +324,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/milosoup -/datum/recipe/microwave/stewedsoymeat +/datum/recipe/stewedsoymeat fruit = list("carrot" = 1, "tomato" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/soydope, @@ -717,39 +332,28 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/stewedsoymeat -/*/datum/recipe/microwave/spagetti We have the processor now - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result= /obj/item/weapon/reagent_containers/food/snacks/spagetti*/ - -/datum/recipe/microwave/boiledspagetti +/datum/recipe/boiledspagetti reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/spagetti, ) result = /obj/item/weapon/reagent_containers/food/snacks/boiledspagetti -/datum/recipe/microwave/boiledrice +/datum/recipe/boiledrice reagents = list("water" = 5, "rice" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/boiledrice -/datum/recipe/microwave/ricepudding +/datum/recipe/ricepudding reagents = list("milk" = 5, "rice" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/ricepudding -/datum/recipe/microwave/pastatomato +/datum/recipe/pastatomato fruit = list("tomato" = 2) reagents = list("water" = 5) items = list(/obj/item/weapon/reagent_containers/food/snacks/spagetti) result = /obj/item/weapon/reagent_containers/food/snacks/pastatomato -/datum/recipe/microwave/poppypretzel - fruit = list("poppy" = 1) - items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) - result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel - -/datum/recipe/microwave/meatballspagetti +/datum/recipe/meatballspagetti reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/spagetti, @@ -758,7 +362,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/meatballspagetti -/datum/recipe/microwave/spesslaw +/datum/recipe/spesslaw reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/spagetti, @@ -769,43 +373,17 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/spesslaw -/datum/recipe/microwave/superbiteburger - fruit = list("tomato" = 1) - reagents = list("sodiumchloride" = 5, "blackpepper" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bigbiteburger, - /obj/item/weapon/reagent_containers/food/snacks/dough, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/boiledegg, - ) - result = /obj/item/weapon/reagent_containers/food/snacks/superbiteburger - -/datum/recipe/microwave/candiedapple +/datum/recipe/candiedapple fruit = list("apple" = 1) reagents = list("water" = 5, "sugar" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/candiedapple -/datum/recipe/microwave/applepie +/datum/recipe/applepie fruit = list("apple" = 1) items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) result = /obj/item/weapon/reagent_containers/food/snacks/applepie -/datum/recipe/microwave/slimeburger - reagents = list("slimejelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/slime - -/datum/recipe/microwave/jellyburger - reagents = list("cherryjelly" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/bun - ) - result = /obj/item/weapon/reagent_containers/food/snacks/jellyburger/cherry - -/datum/recipe/microwave/twobread +/datum/recipe/twobread reagents = list("wine" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -813,7 +391,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/twobread -/datum/recipe/microwave/slimesandwich +/datum/recipe/slimesandwich reagents = list("slimejelly" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -821,7 +399,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/slime -/datum/recipe/microwave/cherrysandwich +/datum/recipe/cherrysandwich reagents = list("cherryjelly" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/slice/bread, @@ -829,45 +407,46 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/jellysandwich/cherry -/datum/recipe/microwave/bloodsoup +/datum/recipe/bloodsoup reagents = list("blood" = 30) result = /obj/item/weapon/reagent_containers/food/snacks/bloodsoup -/datum/recipe/microwave/slimesoup +/datum/recipe/slimesoup reagents = list("water" = 10, "slimejelly" = 5) items = list() result = /obj/item/weapon/reagent_containers/food/snacks/slimesoup -/datum/recipe/microwave/boiledslimeextract +/datum/recipe/boiledslimeextract reagents = list("water" = 5) items = list( /obj/item/slime_extract, ) result = /obj/item/weapon/reagent_containers/food/snacks/boiledslimecore -/datum/recipe/microwave/chocolateegg +/datum/recipe/chocolateegg items = list( /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, ) result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg -/datum/recipe/microwave/sausage +/datum/recipe/sausage items = list( /obj/item/weapon/reagent_containers/food/snacks/meatball, /obj/item/weapon/reagent_containers/food/snacks/cutlet, ) result = /obj/item/weapon/reagent_containers/food/snacks/sausage + result_quantity = 2 -/datum/recipe/microwave/fishfingers - reagents = list("flour" = 10) +/datum/recipe/fishfingers + reagents = list("flour" = 10, "egg" = 3) items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/carpmeat, ) result = /obj/item/weapon/reagent_containers/food/snacks/fishfingers + reagent_mix = RECIPE_REAGENT_REPLACE -/datum/recipe/microwave/zestfish +/datum/recipe/zestfish fruit = list("lemon" = 1) reagents = list("sodiumchloride" = 3) items = list( @@ -875,7 +454,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/zestfish -/datum/recipe/microwave/limezestfish +/datum/recipe/limezestfish fruit = list("lime" = 1) reagents = list("sodiumchloride" = 3) items = list( @@ -883,7 +462,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/zestfish -/datum/recipe/microwave/kudzudonburi +/datum/recipe/kudzudonburi fruit = list("kudzu" = 1) reagents = list("rice" = 10) items = list( @@ -891,32 +470,28 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/kudzudonburi -/datum/recipe/microwave/mysterysoup - reagents = list("water" = 10) +/datum/recipe/mysterysoup + reagents = list("water" = 10, "egg" = 3) items = list( /obj/item/weapon/reagent_containers/food/snacks/badrecipe, /obj/item/weapon/reagent_containers/food/snacks/tofu, - /obj/item/weapon/reagent_containers/food/snacks/egg, /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, ) + reagent_mix = RECIPE_REAGENT_REPLACE result = /obj/item/weapon/reagent_containers/food/snacks/mysterysoup -/datum/recipe/microwave/pumpkinpie - fruit = list("pumpkin" = 1) - reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie - -/datum/recipe/microwave/plumphelmetbiscuit +/datum/recipe/plumphelmetbiscuit fruit = list("plumphelmet" = 1) reagents = list("water" = 5, "flour" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit -/datum/recipe/microwave/mushroomsoup +/datum/recipe/mushroomsoup fruit = list("mushroom" = 1) reagents = list("water" = 5, "milk" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE result = /obj/item/weapon/reagent_containers/food/snacks/mushroomsoup -/datum/recipe/microwave/chawanmushi +/datum/recipe/chawanmushi fruit = list("mushroom" = 1) reagents = list("water" = 5, "soysauce" = 5) items = list( @@ -925,85 +500,85 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/chawanmushi -/datum/recipe/microwave/beetsoup +/datum/recipe/beetsoup fruit = list("whitebeet" = 1, "cabbage" = 1) reagents = list("water" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/beetsoup -/datum/recipe/microwave/appletart - fruit = list("goldapple" = 1) - reagents = list("sugar" = 5, "milk" = 5, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/egg - ) - result = /obj/item/weapon/reagent_containers/food/snacks/appletart - -/datum/recipe/microwave/tossedsalad +/datum/recipe/tossedsalad fruit = list("cabbage" = 2, "tomato" = 1, "carrot" = 1, "apple" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/tossedsalad -/datum/recipe/microwave/flowersalad +/datum/recipe/flowersalad fruit = list("harebell" = 1, "poppy" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/flowerchildsalad -/datum/recipe/microwave/rosesalad +/datum/recipe/rosesalad fruit = list("harebell" = 1, "rose" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/rosesalad -/datum/recipe/microwave/aesirsalad +/datum/recipe/aesirsalad fruit = list("goldapple" = 1, "ambrosiadeus" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/aesirsalad -/datum/recipe/microwave/validsalad +/datum/recipe/validsalad fruit = list("potato" = 1, "ambrosia" = 3) items = list(/obj/item/weapon/reagent_containers/food/snacks/meatball) result = /obj/item/weapon/reagent_containers/food/snacks/validsalad make_food(var/obj/container as obj) - var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked = ..(container) - being_cooked.reagents.del_reagent("toxin") - return being_cooked -/datum/recipe/microwave/cracker - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice - ) - result = /obj/item/weapon/reagent_containers/food/snacks/cracker + . = ..(container) + for (var/obj/item/weapon/reagent_containers/food/snacks/validsalad/being_cooked in .) + being_cooked.reagents.del_reagent("toxin") -/datum/recipe/microwave/stuffing +/datum/recipe/stuffing reagents = list("water" = 5, "sodiumchloride" = 1, "blackpepper" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread, ) result = /obj/item/weapon/reagent_containers/food/snacks/stuffing -/datum/recipe/microwave/tofurkey +/datum/recipe/tofurkey items = list( /obj/item/weapon/reagent_containers/food/snacks/tofu, /obj/item/weapon/reagent_containers/food/snacks/tofu, /obj/item/weapon/reagent_containers/food/snacks/stuffing, ) result = /obj/item/weapon/reagent_containers/food/snacks/tofurkey + +/datum/recipe/mashedpotato + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spreads/butter // to prevent conflicts with yellow curry + ) + fruit = list("potato" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/mashedpotato + +/datum/recipe/icecreamsandwich + reagents = list("milk" = 5, "ice" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/icecream + ) + result = /obj/item/weapon/reagent_containers/food/snacks/icecreamsandwich // Fuck Science! -/datum/recipe/microwave/ruinedvirusdish +/datum/recipe/ruinedvirusdish items = list( /obj/item/weapon/virusdish ) result = /obj/item/weapon/ruinedvirusdish -/datum/recipe/microwave/onionrings +/datum/recipe/onionrings fruit = list("onion" = 1) reagents = list("flour" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/onionrings -/datum/recipe/microwave/onionsoup +/datum/recipe/onionsoup fruit = list("onion" = 1) reagents = list("water" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/onionsoup @@ -1012,7 +587,7 @@ I said no! // bs12 food port stuff ////////////////////////////////////////// -/datum/recipe/microwave/taco +/datum/recipe/taco items = list( /obj/item/weapon/reagent_containers/food/snacks/doughslice, /obj/item/weapon/reagent_containers/food/snacks/cutlet, @@ -1020,56 +595,50 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/taco -/datum/recipe/microwave/bun +/datum/recipe/microwavebun items = list( /obj/item/weapon/reagent_containers/food/snacks/dough ) result = /obj/item/weapon/reagent_containers/food/snacks/bun -/datum/recipe/microwave/flatbread +/datum/recipe/microwaveflatbread items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough ) result = /obj/item/weapon/reagent_containers/food/snacks/flatbread -/datum/recipe/microwave/meatball +/datum/recipe/meatball items = list( /obj/item/weapon/reagent_containers/food/snacks/rawmeatball ) result = /obj/item/weapon/reagent_containers/food/snacks/meatball -/datum/recipe/microwave/cutlet +/datum/recipe/cutlet items = list( /obj/item/weapon/reagent_containers/food/snacks/rawcutlet ) result = /obj/item/weapon/reagent_containers/food/snacks/cutlet -/datum/recipe/microwave/fries - items = list( - /obj/item/weapon/reagent_containers/food/snacks/rawsticks - ) - result = /obj/item/weapon/reagent_containers/food/snacks/fries - -/datum/recipe/microwave/roastedsunflowerseeds +/datum/recipe/roastedsunflowerseeds reagents = list("sodiumchloride" = 1, "cornoil" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/rawsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower -/datum/recipe/microwave/roastedpeanutsunflowerseeds +/datum/recipe/roastedpeanutsunflowerseeds reagents = list("sodiumchloride" = 1, "peanutoil" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/rawsunflower ) result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower -/datum/recipe/microwave/roastedpeanuts +/datum/recipe/roastedpeanuts fruit = list("peanut" = 2) reagents = list("sodiumchloride" = 2, "cornoil" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts -/datum/recipe/microwave/mint +/datum/recipe/mint reagents = list("sugar" = 5, "frostoil" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/mint @@ -1077,7 +646,7 @@ I said no! // TGstation food ports //////////////////////// -/datum/recipe/microwave/meatbun +/datum/recipe/meatbun fruit = list("cabbage" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/meatball, @@ -1085,14 +654,14 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/meatbun -/datum/recipe/microwave/sashimi +/datum/recipe/sashimi reagents = list("soysauce" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/carpmeat ) result = /obj/item/weapon/reagent_containers/food/snacks/sashimi -/datum/recipe/microwave/benedict +/datum/recipe/benedict items = list( /obj/item/weapon/reagent_containers/food/snacks/cutlet, /obj/item/weapon/reagent_containers/food/snacks/friedegg, @@ -1100,19 +669,19 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/benedict -/datum/recipe/microwave/bakedbeans +/datum/recipe/bakedbeans fruit = list("soybeans" = 2) reagents = list("ketchup" = 5) result = /obj/item/weapon/reagent_containers/food/snacks/beans -/datum/recipe/microwave/sugarcookie +/datum/recipe/sugarcookie items = list( /obj/item/weapon/reagent_containers/food/snacks/dough ) reagents = list("sugar" = 5, "egg" = 3) result = /obj/item/weapon/reagent_containers/food/snacks/sugarcookie -/datum/recipe/microwave/berrymuffin +/datum/recipe/berrymuffin reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough @@ -1120,7 +689,7 @@ I said no! fruit = list("berries" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/berry -/datum/recipe/microwave/poisonberrymuffin +/datum/recipe/poisonberrymuffin reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough @@ -1128,7 +697,7 @@ I said no! fruit = list("poisonberries" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/berrymuffin/poison -/datum/recipe/microwave/ghostmuffin +/datum/recipe/ghostmuffin reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, @@ -1137,7 +706,7 @@ I said no! fruit = list("berries" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/berry -/datum/recipe/microwave/poisonghostmuffin +/datum/recipe/poisonghostmuffin reagents = list("milk" = 5, "sugar" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/dough, @@ -1146,7 +715,7 @@ I said no! fruit = list("poisonberries" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/ghostmuffin/poison -/datum/recipe/microwave/eggroll +/datum/recipe/eggroll reagents = list("soysauce" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/friedegg @@ -1154,28 +723,28 @@ I said no! fruit = list("cabbage" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/eggroll -/datum/recipe/microwave/fruitsalad +/datum/recipe/fruitsalad fruit = list("orange" = 1, "apple" = 1, "grapes" = 1, "watermelon" = 1) result = /obj/item/weapon/reagent_containers/food/snacks/fruitsalad -/datum/recipe/microwave/eggbowl +/datum/recipe/eggbowl reagents = list("water" = 5, "rice" = 10, "egg" = 3) result = /obj/item/weapon/reagent_containers/food/snacks/eggbowl -/datum/recipe/microwave/porkbowl +/datum/recipe/porkbowl reagents = list("water" = 5, "rice" = 10) items = list( /obj/item/weapon/reagent_containers/food/snacks/cutlet ) result = /obj/item/weapon/reagent_containers/food/snacks/porkbowl -/datum/recipe/microwave/tortilla +/datum/recipe/tortilla items = list( /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough ) result = /obj/item/weapon/reagent_containers/food/snacks/tortilla -/datum/recipe/microwave/meatburrito +/datum/recipe/meatburrito fruit = list("soybeans" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/tortilla, @@ -1184,7 +753,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/meatburrito -/datum/recipe/microwave/cheeseburrito +/datum/recipe/cheeseburrito fruit = list("soybeans" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/tortilla, @@ -1193,21 +762,21 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/cheeseburrito -/datum/recipe/microwave/fuegoburrito +/datum/recipe/fuegoburrito fruit = list("soybeans" = 1, "chili" = 2) items = list( /obj/item/weapon/reagent_containers/food/snacks/tortilla ) result = /obj/item/weapon/reagent_containers/food/snacks/fuegoburrito -/datum/recipe/microwave/nachos +/datum/recipe/nachos reagents = list("sodiumchloride" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/tortilla ) result = /obj/item/weapon/reagent_containers/food/snacks/nachos -/datum/recipe/microwave/cheesenachos +/datum/recipe/cheesenachos reagents = list("sodiumchloride" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/tortilla, @@ -1215,7 +784,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/cheesenachos -/datum/recipe/microwave/cubannachos +/datum/recipe/cubannachos fruit = list("chili" = 1) reagents = list("ketchup" = 5) items = list( @@ -1223,84 +792,26 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/cubannachos -/datum/recipe/microwave/curryrice +/datum/recipe/curryrice fruit = list("chili" = 1) reagents = list("rice" = 10) result = /obj/item/weapon/reagent_containers/food/snacks/curryrice -/datum/recipe/microwave/piginblanket +/datum/recipe/piginblanket items = list( /obj/item/weapon/reagent_containers/food/snacks/doughslice, /obj/item/weapon/reagent_containers/food/snacks/sausage ) result = /obj/item/weapon/reagent_containers/food/snacks/piginblanket -// Cakes. -/datum/recipe/microwave/cake - reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9, "vanilla" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake - -/datum/recipe/microwave/cake/carrot - fruit = list("carrot" = 1) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake - -/datum/recipe/microwave/cake/cheese - reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake - -/datum/recipe/microwave/cake/peanut - fruit = list("peanut" = 3) - reagents = list("milk" = 5, "flour" = 10, "sugar" = 5, "egg" = 6, "peanutbutter" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake - -/datum/recipe/microwave/cake/orange - fruit = list("orange" = 1) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake - -/datum/recipe/microwave/cake/lime - fruit = list("lime" = 1) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake - -/datum/recipe/microwave/cake/lemon - fruit = list("lemon" = 1) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake - -/datum/recipe/microwave/cake/chocolate - items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake - -/datum/recipe/microwave/cake/birthday - reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) - items = list(/obj/item/clothing/head/cakehat) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake - -/datum/recipe/microwave/cake/apple - fruit = list("apple" = 1) - reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake - -/datum/recipe/microwave/cake/brain - reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) - items = list(/obj/item/organ/internal/brain) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake - -/datum/recipe/microwave/bagelplain +/datum/recipe/bagelplain reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun ) result = /obj/item/weapon/reagent_containers/food/snacks/bagelplain -/datum/recipe/microwave/bagelsunflower +/datum/recipe/bagelsunflower reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, @@ -1308,7 +819,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/bagelsunflower -/datum/recipe/microwave/bagelcheese +/datum/recipe/bagelcheese reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, @@ -1316,7 +827,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/bagelcheese -/datum/recipe/microwave/bagelraisin +/datum/recipe/bagelraisin reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, @@ -1324,7 +835,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/bagelraisin -/datum/recipe/microwave/bagelpoppy +/datum/recipe/bagelpoppy fruit = list("poppy" = 1) reagents = list("water" = 5) items = list( @@ -1332,7 +843,7 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/bagelpoppy -/datum/recipe/microwave/bageleverything +/datum/recipe/bageleverything reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, @@ -1340,10 +851,543 @@ I said no! ) result = /obj/item/weapon/reagent_containers/food/snacks/bageleverything -/datum/recipe/microwave/bageltwo +/datum/recipe/bageltwo reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/bun, /obj/item/device/soulstone ) result = /obj/item/weapon/reagent_containers/food/snacks/bageltwo + +///////////////////////////////////////////////////////////// +//Synnono Meme Foods +// +//Most recipes replace reagents with RECIPE_REAGENT_REPLACE +//to simplify the end product and balance the amount of reagents +//in some foods. Many require the space spice reagent/condiment +//to reduce the risk of future recipe conflicts. +///////////////////////////////////////////////////////////// + + +/datum/recipe/redcurry + reagents = list("cream" = 5, "spacespice" = 2, "rice" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/redcurry + +/datum/recipe/greencurry + reagents = list("cream" = 5, "spacespice" = 2, "rice" = 5) + fruit = list("chili" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/greencurry + +/datum/recipe/yellowcurry + reagents = list("cream" = 5, "spacespice" = 2, "rice" = 5) + fruit = list("peanut" = 2, "potato" = 1) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/yellowcurry + +/datum/recipe/bearchili + fruit = list("chili" = 1, "tomato" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/bearmeat) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/bearchili + +/datum/recipe/bearstew + fruit = list("potato" = 1, "tomato" = 1, "carrot" = 1, "eggplant" = 1, "mushroom" = 1) + reagents = list("water" = 10) + items = list(/obj/item/weapon/reagent_containers/food/snacks/bearmeat) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/bearstew + +/datum/recipe/bibimbap + fruit = list("carrot" = 1, "cabbage" = 1, "mushroom" = 1) + reagents = list("rice" = 5, "spacespice" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/bibimbap + +/datum/recipe/friedrice + reagents = list("water" = 5, "rice" = 10, "soysauce" = 5) + fruit = list("carrot" = 1, "cabbage" = 1) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/friedrice + +/datum/recipe/lomein + reagents = list("water" = 5, "soysauce" = 5) + fruit = list("carrot" = 1, "cabbage" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spagetti + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/lomein + +/datum/recipe/chickenfillet //Also just combinable, like burgers and hot dogs. + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chickenkatsu, + /obj/item/weapon/reagent_containers/food/snacks/bun + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chickenfillet + +/datum/recipe/chilicheesefries + items = list( + /obj/item/weapon/reagent_containers/food/snacks/fries, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/hotchili + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/chilicheesefries + +/datum/recipe/meatbun + reagents = list("spacespice" = 1, "water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/rawcutlet + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Water used up in cooking + result = /obj/item/weapon/reagent_containers/food/snacks/meatbun + +/datum/recipe/custardbun + reagents = list("spacespice" = 1, "water" = 5, "egg" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Water, egg used up in cooking + result = /obj/item/weapon/reagent_containers/food/snacks/custardbun + +/datum/recipe/chickenmomo + reagents = list("spacespice" = 2, "water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/chickenmomo + +/datum/recipe/veggiemomo + reagents = list("spacespice" = 2, "water" = 5) + fruit = list("carrot" = 1, "cabbage" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here + result = /obj/item/weapon/reagent_containers/food/snacks/veggiemomo + +/datum/recipe/risotto + reagents = list("wine" = 5, "rice" = 10, "spacespice" = 1) + fruit = list("mushroom" = 1) + reagent_mix = RECIPE_REAGENT_REPLACE //Get that rice and wine outta here + result = /obj/item/weapon/reagent_containers/food/snacks/risotto + +/datum/recipe/poachedegg + reagents = list("spacespice" = 1, "sodiumchloride" = 1, "blackpepper" = 1, "water" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Get that water outta here + result = /obj/item/weapon/reagent_containers/food/snacks/poachedegg + +/datum/recipe/honeytoast + reagents = list("honey" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/slice/bread + ) + reagent_mix = RECIPE_REAGENT_REPLACE //Simplify end product + result = /obj/item/weapon/reagent_containers/food/snacks/honeytoast + + +/datum/recipe/donerkebab + fruit = list("tomato" = 1, "cabbage" = 1) + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meatsteak, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab + + +/datum/recipe/sashimi + reagents = list("soysauce" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sashimi + + +/datum/recipe/nugget + reagents = list("flour" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/chicken + ) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/nugget + +// Chip update +/datum/recipe/tortila + reagents = list("flour" = 5,"water" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/tortilla + reagent_mix = RECIPE_REAGENT_REPLACE //no gross flour or water + +/datum/recipe/taconew + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tortilla, + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/taco + +/datum/recipe/chips + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tortilla + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chipplate + +/datum/recipe/nachos + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chipplate, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chipplate/nachos + +/datum/recipe/salsa + fruit = list("chili" = 1, "tomato" = 1, "lime" = 1) + reagents = list("spacespice" = 1, "blackpepper" = 1,"sodiumchloride" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/dip/salsa + reagent_mix = RECIPE_REAGENT_REPLACE //Ingredients are mixed together. + +/datum/recipe/guac + fruit = list("chili" = 1, "lime" = 1) + reagents = list("spacespice" = 1, "blackpepper" = 1,"sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/dip/guac + reagent_mix = RECIPE_REAGENT_REPLACE //Ingredients are mixed together. + +/datum/recipe/cheesesauce + fruit = list("chili" = 1, "tomato" = 1) + reagents = list("spacespice" = 1, "blackpepper" = 1,"sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/dip + reagent_mix = RECIPE_REAGENT_REPLACE //Ingredients are mixed together. + +/datum/recipe/burrito + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tortilla, + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/meatball + ) + reagents = list("spacespice" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito + +/datum/recipe/burrito_vegan + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tortilla, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_vegan + +/datum/recipe/burrito_spicy + fruit = list("chili" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/burrito + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_spicy + +/datum/recipe/burrito_cheese + items = list( + /obj/item/weapon/reagent_containers/food/snacks/burrito, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_cheese + +/datum/recipe/burrito_cheese_spicy + fruit = list("chili" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/burrito, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_cheese_spicy + +/datum/recipe/burrito_hell + fruit = list("chili" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/burrito_spicy + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_hell + reagent_mix = RECIPE_REAGENT_REPLACE //Already hot sauce + +/datum/recipe/breakfast_wrap + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/tortilla, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/breakfast_wrap + +/datum/recipe/burrito_mystery + items = list( + /obj/item/weapon/reagent_containers/food/snacks/burrito, + /obj/item/weapon/reagent_containers/food/snacks/mysterysoup + ) + result = /obj/item/weapon/reagent_containers/food/snacks/burrito_mystery + +//Ligger food, and also bacon. + +/datum/recipe/bacon + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawbacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon + +/datum/recipe/chilied_eggs + items = list( + /obj/item/weapon/reagent_containers/food/snacks/hotchili, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/chilied_eggs + +/datum/recipe/red_sun_special + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + + ) + result = /obj/item/weapon/reagent_containers/food/snacks/red_sun_special + +/datum/recipe/hatchling_suprise + items = list( + /obj/item/weapon/reagent_containers/food/snacks/poachedegg, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hatchling_suprise + +/datum/recipe/riztizkzi_sea + items = list( + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/egg + ) + reagents = list("blood" = 15) + result = /obj/item/weapon/reagent_containers/food/snacks/riztizkzi_sea + +/datum/recipe/father_breakfast + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sausage, + /obj/item/weapon/reagent_containers/food/snacks/omelette, + /obj/item/weapon/reagent_containers/food/snacks/meatsteak + ) + result = /obj/item/weapon/reagent_containers/food/snacks/father_breakfast + +/datum/recipe/stuffed_meatball + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + fruit = list("cabbage" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/stuffed_meatball + +/datum/recipe/egg_pancake + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/omelette + ) + result = /obj/item/weapon/reagent_containers/food/snacks/egg_pancake + +/datum/recipe/grilled_carp + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/carpmeat + ) + reagents = list("spacespice" = 1) + fruit = list("cabbage" = 1, "lime" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/grilled_carp + +/datum/recipe/bacon_stick + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/boiledegg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon_stick + +/datum/recipe/cheese_cracker + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spreads/butter, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + reagents = list("spacespice" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/cheese_cracker + result_quantity = 4 + +/datum/recipe/bacon_and_eggs + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/friedegg + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon_and_eggs + +/datum/recipe/ntmuffin + items = list( + /obj/item/weapon/reagent_containers/food/snacks/plumphelmetbiscuit, + /obj/item/weapon/reagent_containers/food/snacks/sausage, + /obj/item/weapon/reagent_containers/food/snacks/friedegg, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/nt_muffin + +/datum/recipe/fish_taco + fruit = list("chili" = 1, "lemon" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/carpmeat, + /obj/item/weapon/reagent_containers/food/snacks/tortilla + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fish_taco + +/datum/recipe/blt + fruit = list("tomato" = 1, "cabbage" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/slice/bread, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/blt + +/datum/recipe/onionrings + fruit = list("onion" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/onionrings + +/datum/recipe/berrymuffin + reagents = list("milk" = 5, "sugar" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + fruit = list("berries" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/muffin + +/datum/recipe/onionsoup + fruit = list("onion" = 1) + reagents = list("water" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/soup/onion + +/datum/recipe/porkbowl + reagents = list("water" = 5, "rice" = 10) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list( + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/porkbowl + +/datum/recipe/sushi + fruit = list("cabbage" = 1) + reagents = list("rice" = 20) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi + +/datum/recipe/goulash + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/spagetti + ) + result = /obj/item/weapon/reagent_containers/food/snacks/goulash + +/datum/recipe/donerkebab + fruit = list("tomato" = 1, "cabbage" = 1) + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meatsteak, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab + +/datum/recipe/roastbeef + fruit = list("carrot" = 2, "potato" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/roastbeef + +/datum/recipe/reishicup + reagents = list("psilocybin" = 3, "sugar" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + result = /obj/item/weapon/reagent_containers/food/snacks/reishicup + +/datum/recipe/hotandsoursoup + fruit = list("cabbage" = 1, "mushroom" = 1) + reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "water" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup + +/datum/recipe/kitsuneudon + reagents = list("egg" = 3) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spagetti, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon + +/datum/recipe/pillbugball + reagents = list("carbon" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bugball + +/datum/recipe/mammi + fruit = list("orange" = 1) + reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/mammi + +/datum/recipe/makaroni + reagents = list("flour" = 15, "milk" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat, + /obj/item/weapon/reagent_containers/food/snacks/egg, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/makaroni + diff --git a/code/modules/food/recipes_microwave_vr.dm b/code/modules/food/recipes_microwave_vr.dm index 74511cac5b..aba09d186c 100644 --- a/code/modules/food/recipes_microwave_vr.dm +++ b/code/modules/food/recipes_microwave_vr.dm @@ -1,5 +1,5 @@ /* -/datum/recipe/microwave/unique_name +/datum/recipe/unique_name fruit = list("example_fruit1" = 1, "example_fruit2" = 2) reagents = list("example_reagent1" = 10, "example_reagent2" = 5) items = list( @@ -8,24 +8,9 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/path_to_some_food */ +// All of this shit needs to be gone through and reorganized into different recipes per machine - Rykka 7/16/2020 -/datum/recipe/microwave/jellydonut - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice) - -/datum/recipe/microwave/jellydonut/slime - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice) - -/datum/recipe/microwave/jellydonut/cherry - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice) - -/datum/recipe/microwave/donut - items = list( - /obj/item/weapon/reagent_containers/food/snacks/doughslice) - -/datum/recipe/microwave/sushi +/datum/recipe/carpsushi fruit = list("cabbage" = 1) reagents = list("rice" = 20) items = list( @@ -35,152 +20,55 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/sushi -/datum/recipe/microwave/lasagna - fruit = list("tomato" = 2, "eggplant" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/lasagna - -/datum/recipe/microwave/goulash - fruit = list("tomato" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/cutlet, - /obj/item/weapon/reagent_containers/food/snacks/spagetti - ) - result = /obj/item/weapon/reagent_containers/food/snacks/goulash - -/datum/recipe/microwave/donerkebab - fruit = list("tomato" = 1, "cabbage" = 1) - reagents = list("sodiumchloride" = 1) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meatsteak, - /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/donerkebab - -/datum/recipe/microwave/roastbeef - fruit = list("carrot" = 2, "potato" = 2) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/roastbeef - -/datum/recipe/microwave/reishicup - reagents = list("psilocybin" = 3, "sugar" = 3) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/chocolatebar - ) - result = /obj/item/weapon/reagent_containers/food/snacks/reishicup - -/datum/recipe/microwave/chickenwings - reagents = list("capsaicin" = 5, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat - ) - result = /obj/item/weapon/storage/box/wings //This is kinda like the donut box. - -/datum/recipe/microwave/hotandsoursoup - fruit = list("cabbage" = 1, "mushroom" = 1) - reagents = list("sodiumchloride" = 2, "blackpepper" = 2, "water" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/hotandsoursoup - -/datum/recipe/microwave/kitsuneudon - reagents = list("egg" = 3) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/spagetti, - /obj/item/weapon/reagent_containers/food/snacks/tofu - ) - result = /obj/item/weapon/reagent_containers/food/snacks/kitsuneudon - -/datum/recipe/microwave/generalschicken - reagents = list("capsaicin" = 2, "sugar" = 2, "flour" = 10) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat, - /obj/item/weapon/reagent_containers/food/snacks/meat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/generalschicken - -/datum/recipe/microwave/chocroizegg +/datum/recipe/chocroizegg items = list( /obj/item/weapon/reagent_containers/food/snacks/chocolatebar, /obj/item/weapon/reagent_containers/food/snacks/egg/roiz ) result = /obj/item/weapon/reagent_containers/food/snacks/chocolateegg/roiz -/datum/recipe/microwave/friedroizegg +/datum/recipe/friedroizegg reagents = list("sodiumchloride" = 1, "blackpepper" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/egg/roiz ) result = /obj/item/weapon/reagent_containers/food/snacks/friedegg/roiz -/datum/recipe/microwave/boiledroizegg +/datum/recipe/boiledroizegg reagents = list("water" = 5) items = list( /obj/item/weapon/reagent_containers/food/snacks/egg/roiz ) result = /obj/item/weapon/reagent_containers/food/snacks/boiledegg/roiz -/datum/recipe/microwave/pillbugball - reagents = list("carbon" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat - ) - result = /obj/item/weapon/reagent_containers/food/snacks/bugball - -/datum/recipe/microwave/mammi - fruit = list("orange" = 1) - reagents = list("water" = 10, "flour" = 10, "milk" = 5, "sodiumchloride" = 1) - result = /obj/item/weapon/reagent_containers/food/snacks/mammi - -/datum/recipe/microwave/makaroni - reagents = list("flour" = 15, "milk" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/meat/grubmeat, - /obj/item/weapon/reagent_containers/food/snacks/egg, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, - /obj/item/weapon/reagent_containers/food/snacks/cheesewedge - ) - result = /obj/item/weapon/reagent_containers/food/snacks/makaroni - -/datum/recipe/microwave/lobster +/datum/recipe/lobster fruit = list("lemon" = 1, "cabbage" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/lobster ) result = /obj/item/weapon/reagent_containers/food/snacks/lobstercooked -/datum/recipe/microwave/cuttlefish +/datum/recipe/cuttlefish items = list( /obj/item/weapon/reagent_containers/food/snacks/cuttlefish ) result = /obj/item/weapon/reagent_containers/food/snacks/cuttlefishcooked -/datum/recipe/microwave/monkfish +/datum/recipe/monkfish fruit = list("chili" = 1, "onion" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/monkfishfillet ) result = /obj/item/weapon/reagent_containers/food/snacks/monkfishcooked -/datum/recipe/microwave/sharksteak +/datum/recipe/sharksteak reagents = list("blackpepper"= 1, "sodiumchloride" = 1) items = list( /obj/item/weapon/reagent_containers/food/snacks/carpmeat/fish/sharkmeat ) result = /obj/item/weapon/reagent_containers/food/snacks/sharkmeatcooked -/datum/recipe/microwave/sharkdip +/datum/recipe/sharkdip reagents = list("sodiumchloride" = 1) fruit = list("chili" = 1) items = list( @@ -188,7 +76,7 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sharkmeatdip -/datum/recipe/microwave/sharkcubes +/datum/recipe/sharkcubes reagents = list("soysauce" = 5, "sodiumchloride" = 1) fruit = list("potato" = 1) items = list( @@ -196,46 +84,9 @@ ) result = /obj/item/weapon/reagent_containers/food/snacks/sharkmeatcubes -/* -/datum/recipe/microwave/margheritapizzacargo - reagents = list() - items = list( - /obj/item/weapon/reagent_containers/food/snacks/pizza/margfrozen - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margcargo - -/datum/recipe/microwave/mushroompizzacargo - reagents = list() - items = list( - /obj/item/weapon/reagent_containers/food/snacks/pizza/mushfrozen - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushcargo - -/datum/recipe/microwave/meatpizzacargo - reagents = list() - items = list( - /obj/item/weapon/reagent_containers/food/snacks/pizza/meatfrozen - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatcargo - -/datum/recipe/microwave/vegtablepizzacargo - reagents = list() - items = list( - /obj/item/weapon/reagent_containers/food/snacks/pizza/vegfrozen - ) - result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegcargo -*/ - //// food cubes -/datum/recipe/microwave/foodcubes +/datum/recipe/foodcubes reagents = list("enzyme" = 20, "virusfood" = 5, "nutriment" = 15, "protein" = 15) // labor intensive items = list() result = /obj/item/weapon/storage/box/wings/tray - -/datum/recipe/microwave/honeybun - reagents = list("milk" = 5, "egg" = 3,"honey" = 5) - items = list( - /obj/item/weapon/reagent_containers/food/snacks/dough - ) - result = /obj/item/weapon/reagent_containers/food/snacks/honeybun \ No newline at end of file diff --git a/code/modules/food/recipes_oven.dm b/code/modules/food/recipes_oven.dm new file mode 100644 index 0000000000..f34a668122 --- /dev/null +++ b/code/modules/food/recipes_oven.dm @@ -0,0 +1,552 @@ +/datum/recipe/ovenchips + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawsticks + ) + result = /obj/item/weapon/reagent_containers/food/snacks/ovenchips + + + +/datum/recipe/dionaroast + appliance = OVEN + fruit = list("apple" = 1) + reagents = list("pacid" = 5) //It dissolves the carapace. Still poisonous, though. + items = list(/obj/item/weapon/holder/diona) + result = /obj/item/weapon/reagent_containers/food/snacks/dionaroast + reagent_mix = RECIPE_REAGENT_REPLACE //No eating polyacid + + +/datum/recipe/ribplate //Putting this here for not seeing a roast section. + appliance = OVEN + reagents = list("honey" = 5, "spacespice" = 2, "blackpepper" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/meat) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/ribplate + + + + +//Predesigned breads +//================================ +/datum/recipe/bread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + reagents = list("sodiumchloride" = 1, "yeast" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bread + +/datum/recipe/baguette + appliance = OVEN + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "yeast" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/baguette + + +/datum/recipe/tofubread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/tofu, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/tofubread + + +/datum/recipe/creamcheesebread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/creamcheesebread + +/datum/recipe/flatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/flatbread + +/datum/recipe/meatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread + +/datum/recipe/syntibread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread + +/datum/recipe/xenomeatbread + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/xenomeatbread + +/datum/recipe/bananabread + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("milk" = 5, "sugar" = 15) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/bananabread + + +/datum/recipe/bun + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bun + +//Predesigned pies +//======================= + +/datum/recipe/meatpie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meatpie + +/datum/recipe/tofupie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/tofu + ) + result = /obj/item/weapon/reagent_containers/food/snacks/tofupie + +/datum/recipe/xemeatpie + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/xenomeat + ) + result = /obj/item/weapon/reagent_containers/food/snacks/xemeatpie + +/datum/recipe/pie + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("sugar" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/pie + +/datum/recipe/cherrypie + appliance = OVEN + fruit = list("cherries" = 1) + reagents = list("sugar" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cherrypie + + +/datum/recipe/amanita_pie + appliance = OVEN + reagents = list("amatoxin" = 5) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/amanita_pie + +/datum/recipe/plump_pie + appliance = OVEN + fruit = list("plumphelmet" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough) + result = /obj/item/weapon/reagent_containers/food/snacks/plump_pie + + +/datum/recipe/pumpkinpie + appliance = OVEN + fruit = list("pumpkin" = 1) + reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pumpkinpie + reagent_mix = RECIPE_REAGENT_REPLACE //We dont want raw egg in the result + +/datum/recipe/appletart + appliance = OVEN + fruit = list("goldapple" = 1) + reagents = list("sugar" = 5, "milk" = 5, "flour" = 10, "egg" = 3) + result = /obj/item/weapon/reagent_containers/food/snacks/appletart + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/keylimepie + appliance = OVEN + fruit = list("lime" = 2) + reagents = list("milk" = 5, "sugar" = 5, "egg" = 3, "flour" = 10) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/keylimepie + reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise + +/datum/recipe/quiche + appliance = OVEN + reagents = list("milk" = 5, "egg" = 9, "flour" = 10) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cheesewedge) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/quiche + reagent_mix = RECIPE_REAGENT_REPLACE //No raw egg in finished product, protein after cooking causes magic meatballs otherwise + +//Baked sweets: +//--------------- + +/datum/recipe/cookie + appliance = OVEN + reagents = list("milk" = 10, "sugar" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough, + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cookie + result_quantity = 4 + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/ovenfortunecookie + appliance = OVEN + reagents = list("sugar" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice, + /obj/item/weapon/paper + ) + result = /obj/item/weapon/reagent_containers/food/snacks/fortunecookie + +/datum/recipe/poppypretzel + appliance = OVEN + fruit = list("poppy" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) + result = /obj/item/weapon/reagent_containers/food/snacks/poppypretzel + result_quantity = 2 + + +/datum/recipe/cracker + appliance = OVEN + reagents = list("sodiumchloride" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/doughslice + ) + result = /obj/item/weapon/reagent_containers/food/snacks/cracker + +/datum/recipe/brownies + appliance = OVEN + reagents = list("browniemix" = 10, "egg" = 3) + reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/brownies + + +/datum/recipe/cosmicbrownies + appliance = OVEN + reagents = list("browniemix" = 10, "egg" = 3) + fruit = list("ambrosia" = 1) + reagent_mix = RECIPE_REAGENT_REPLACE //No egg or mix in final recipe + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cosmicbrownies + + + + +//Pizzas +//========================= +/datum/recipe/pizzamargherita + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/margherita + +/datum/recipe/meatpizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/meat, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza + +/datum/recipe/syntipizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza + +/datum/recipe/mushroompizza + appliance = OVEN + fruit = list("mushroom" = 5, "tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + + reagent_mix = RECIPE_REAGENT_REPLACE //No vomit taste in finished product from chanterelles + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/mushroompizza + +/datum/recipe/vegetablepizza + appliance = OVEN + fruit = list("eggplant" = 1, "carrot" = 1, "corn" = 1, "tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/vegetablepizza + +/datum/recipe/pineapplepizza + appliance = OVEN + fruit = list("tomato" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring, + /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/pineapple + +//Spicy +//================ +/datum/recipe/enchiladas + appliance = OVEN + fruit = list("chili" = 2, "corn" = 1) + items = list(/obj/item/weapon/reagent_containers/food/snacks/cutlet) + result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas + +/datum/recipe/monkeysdelight + appliance = OVEN + fruit = list("banana" = 1) + reagents = list("sodiumchloride" = 1, "blackpepper" = 1, "flour" = 10) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/monkeycube + ) + result = /obj/item/weapon/reagent_containers/food/snacks/monkeysdelight + reagent_mix = RECIPE_REAGENT_REPLACE + + + + + +// Cakes. +//============ +/datum/recipe/cake + appliance = OVEN + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9, "vanilla" = 1) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/plaincake + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/cake/carrot + appliance = OVEN + fruit = list("carrot" = 3) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/carrotcake + +/datum/recipe/cake/cheese + appliance = OVEN + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesecake + +/datum/recipe/cake/peanut + fruit = list("peanut" = 3) + reagents = list("milk" = 5, "flour" = 10, "sugar" = 5, "egg" = 6, "peanutbutter" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/peanutcake + +/datum/recipe/cake/orange + appliance = OVEN + fruit = list("orange" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/orangecake + +/datum/recipe/cake/lime + appliance = OVEN + fruit = list("lime" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "limejuice" = 3, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/limecake + +/datum/recipe/cake/lemon + appliance = OVEN + fruit = list("lemon" = 1) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "lemonjuice" = 3, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/lemoncake + +/datum/recipe/cake/chocolate + appliance = OVEN + items = list(/obj/item/weapon/reagent_containers/food/snacks/chocolatebar) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9, "coco" = 4, "sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/chocolatecake + +/datum/recipe/cake/birthday + appliance = OVEN + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) + items = list(/obj/item/clothing/head/cakehat) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/birthdaycake + +/datum/recipe/cake/apple + appliance = OVEN + fruit = list("apple" = 2) + reagents = list("milk" = 5, "flour" = 15, "egg" = 9,"sugar" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/applecake + +/datum/recipe/cake/brain + appliance = OVEN + reagents = list("milk" = 5, "flour" = 15, "sugar" = 15, "egg" = 9) + items = list(/obj/item/organ/internal/brain) + result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/braincake + +/datum/recipe/pancakes + appliance = OVEN + fruit = list("blueberries" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough + ) + result = /obj/item/weapon/reagent_containers/food/snacks/pancakes + +/datum/recipe/lasagna + appliance = OVEN + fruit = list("tomato" = 2, "eggplant" = 1) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/cutlet + ) + result = /obj/item/weapon/reagent_containers/food/snacks/lasagna + reagent_mix = RECIPE_REAGENT_REPLACE + +/datum/recipe/honeybun + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/dough + ) + reagents = list("milk" = 5, "egg" = 3,"honey" = 5) + result = /obj/item/weapon/reagent_containers/food/snacks/honeybun + +/datum/recipe/enchiladas_new + appliance = OVEN + fruit = list("chili" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/cutlet, + /obj/item/weapon/reagent_containers/food/snacks/tortilla + ) + result = /obj/item/weapon/reagent_containers/food/snacks/enchiladas + +//Bacon +/datum/recipe/bacon_oven + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/rawbacon, + /obj/item/weapon/reagent_containers/food/snacks/spreads + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon/oven + result_quantity = 6 + +/datum/recipe/meat_pocket + appliance = OVEN + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/meatball, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/meat_pocket + result_quantity = 2 + +/datum/recipe/bacon_flatbread + appliance = OVEN + fruit = list("tomato" = 2) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon, + /obj/item/weapon/reagent_containers/food/snacks/bacon + ) + result = /obj/item/weapon/reagent_containers/food/snacks/bacon_flatbread + +/datum/recipe/truffle + appliance = OVEN + reagents = list("sugar" = 5, "cream" = 5) + items = list( + /obj/item/weapon/reagent_containers/food/snacks/chocolatebar + ) + reagent_mix = RECIPE_REAGENT_REPLACE + result = /obj/item/weapon/reagent_containers/food/snacks/truffle + result_quantity = 4 + +/datum/recipe/croissant + appliance = OVEN + reagents = list("sodiumchloride" = 1, "water" = 5, "milk" = 5, "yeast" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list(/obj/item/weapon/reagent_containers/food/snacks/dough) + result = /obj/item/weapon/reagent_containers/food/snacks/croissant + +/datum/recipe/macncheese + appliance = OVEN + reagents = list("milk" = 5) + reagent_mix = RECIPE_REAGENT_REPLACE + items = list( + /obj/item/weapon/reagent_containers/food/snacks/spagetti, + /obj/item/weapon/reagent_containers/food/snacks/cheesewedge + ) + result = /obj/item/weapon/reagent_containers/food/snacks/macncheese \ No newline at end of file diff --git a/code/modules/gamemaster/event2/events/engineering/camera_damage.dm b/code/modules/gamemaster/event2/events/engineering/camera_damage.dm index c24fbb06f3..c6c1516130 100644 --- a/code/modules/gamemaster/event2/events/engineering/camera_damage.dm +++ b/code/modules/gamemaster/event2/events/engineering/camera_damage.dm @@ -19,9 +19,9 @@ for(var/obj/machinery/camera/cam in range(camera_range, C)) if(is_valid_camera(cam)) - cam.wires.UpdateCut(CAMERA_WIRE_POWER, 0) + cam.wires.cut(WIRE_MAIN_POWER1) if(prob(25)) - cam.wires.UpdateCut(CAMERA_WIRE_ALARM, 0) + cam.wires.cut(WIRE_CAM_ALARM) /datum/event2/event/camera_damage/proc/acquire_random_camera(var/remaining_attempts = 5) if(!cameranet.cameras.len) diff --git a/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm b/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm index 0645d2cfe3..0611e1b290 100644 --- a/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm +++ b/code/modules/gamemaster/event2/events/everyone/electrical_fault.dm @@ -77,7 +77,7 @@ // This will actually protect it from further damage. if(prob(25)) A.energy_fail(rand(60, 120)) - log_debug("ELECTRICAL EVENT: Disabled \the [A]'s power for a temporary amount of time.") +// log_debug("ELECTRICAL EVENT: Disabled \the [A]'s power for a temporary amount of time.") playsound(A, 'sound/machines/defib_success.ogg', 50, 1) apcs_disabled++ return @@ -85,7 +85,7 @@ // Decent chance to overload lighting circuit. if(prob(30)) A.overload_lighting() - log_debug("ELECTRICAL EVENT: Overloaded \the [A]'s lighting.") +// log_debug("ELECTRICAL EVENT: Overloaded \the [A]'s lighting.") playsound(A, 'sound/effects/lightningshock.ogg', 50, 1) apcs_overloaded++ @@ -93,7 +93,7 @@ if(prob(5)) A.emagged = TRUE A.update_icon() - log_debug("ELECTRICAL EVENT: Emagged \the [A].") +// log_debug("ELECTRICAL EVENT: Emagged \the [A].") playsound(A, 'sound/machines/chime.ogg', 50, 1) apcs_emagged++ diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index 99f0be8aa4..1caf83608b 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -177,10 +177,10 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f dat += {"1. View General Inventory
    2. View Checked Out Inventory
    3. Check out a Book
    - 4. Connect to External Archive
    + 4. Connect to Internal Archive
    //VOREStation Edit 5. Upload New Title to Archive
    6. Print a Bible
    - 8. Access NT Internal Archive
    "} + 8. Access External Archive
    "} //VOREStation Edit if(src.emagged) dat += "7. Access the Forbidden Lore Vault
    " if(src.arcanecheckout) @@ -226,26 +226,20 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f (Commit Entry)
    (Return to main menu)
    "} if(4) - dat += "

    External Archive

    " //VOREStation Edit - establish_old_db_connection() - -// dat += "

    Warning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.

    " //VOREStation Removal TFF 29/1/20 - Redundant warning, we're not removing our library entries. - - if(!dbcon_old.IsConnected()) - dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + dat += "

    Internal Archive

    " + if(!all_books || !all_books.len) + dat += "ERROR Something has gone seriously wrong. Contact System Administrator for more information." else - dat += {"(Order book by SS13BN)

    - + dat += {"
    " + for(var/name in all_books) + var/obj/item/weapon/book/masterbook = all_books[name] + var/id = masterbook.type + var/author = masterbook.author + var/title = masterbook.name + var/category = masterbook.libcategory + dat += "" dat += "
    TITLE\[Order\]
    [author][title][category]\[Order\]
    " dat += "
    (Return to main menu)
    " if(5) @@ -278,20 +272,26 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f Yes.
    No.
    "} if(8) - dat += "

    NT Internal Archive

    " - if(!all_books || !all_books.len) - dat += "ERROR Something has gone seriously wrong. Contact System Administrator for more information." - else - dat += {" - " + //dat += "

    Warning: System Administrator has slated this archive for removal. Personal uploads should be taken to the NT board of internal literature.

    " //VOREStation Removal + + if(!dbcon_old.IsConnected()) + dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." + else + dat += {"(Order book by SS13BN)

    +
    TITLE\[Order\]
    + " dat += "
    TITLE\[Order\]
    " dat += "
    (Return to main menu)
    " diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index fbb842a422..a5079be720 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -159,6 +159,7 @@ recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE) recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE) //VOREStation Add + recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1) /material/wood/log/generate_recipes() recipes = list() diff --git a/code/modules/metric/activity.dm b/code/modules/metric/activity.dm index 5bdc33f47a..c33c88adca 100644 --- a/code/modules/metric/activity.dm +++ b/code/modules/metric/activity.dm @@ -40,13 +40,13 @@ var/list/activity = list() for(var/department in departments) activity[department] = assess_department(department) - log_debug("Assessing department [department]. They have activity of [activity[department]].") +// log_debug("Assessing department [department]. They have activity of [activity[department]].") var/list/most_active_departments = list() // List of winners. var/highest_activity = null // Department who is leading in activity, if one exists. var/highest_number = 0 // Activity score needed to beat to be the most active department. for(var/i = 1, i <= cutoff_number, i++) - log_debug("Doing [i]\th round of counting.") +// log_debug("Doing [i]\th round of counting.") for(var/department in activity) if(department in department_blacklist) // Blacklisted? continue @@ -57,7 +57,7 @@ if(highest_activity) // Someone's a winner. most_active_departments.Add(highest_activity) // Add to the list of most active. activity.Remove(highest_activity) // Remove them from the other list so they don't win more than once. - log_debug("[highest_activity] has won the [i]\th round of activity counting.") +// log_debug("[highest_activity] has won the [i]\th round of activity counting.") highest_activity = null // Now reset for the next round. highest_number = 0 //todo: finish diff --git a/code/modules/mob/_modifiers/modifiers.dm b/code/modules/mob/_modifiers/modifiers.dm index 72da563a22..af463d6f32 100644 --- a/code/modules/mob/_modifiers/modifiers.dm +++ b/code/modules/mob/_modifiers/modifiers.dm @@ -20,6 +20,7 @@ var/light_intensity = null // Ditto. Not implemented yet. var/mob_overlay_state = null // Icon_state for an overlay to apply to a (human) mob while this exists. This is actually implemented. var/client_color = null // If set, the client will have the world be shown in this color, from their perspective. + var/wire_colors_replace = null // If set, the client will have wires replaced by the given replacement list. For colorblindness. // Now for all the different effects. // Percentage modifiers are expressed as a multipler. (e.g. +25% damage should be written as 1.25) diff --git a/code/modules/mob/_modifiers/traits.dm b/code/modules/mob/_modifiers/traits.dm index b15ece941e..ea21ae007b 100644 --- a/code/modules/mob/_modifiers/traits.dm +++ b/code/modules/mob/_modifiers/traits.dm @@ -127,33 +127,39 @@ desc = "You have a form of red-green colorblindness. You cannot see reds, and have trouble distinguishing them from yellows and greens." client_color = MATRIX_Protanopia + wire_colors_replace = PROTANOPIA_COLOR_REPLACE /datum/modifier/trait/colorblind_deuteranopia name = "Deuteranopia" desc = "You have a form of red-green colorblindness. You cannot see greens, and have trouble distinguishing them from yellows and reds." client_color = MATRIX_Deuteranopia + wire_colors_replace = DEUTERANOPIA_COLOR_REPLACE /datum/modifier/trait/colorblind_tritanopia name = "Tritanopia" desc = "You have a form of blue-yellow colorblindness. You have trouble distinguishing between blues, greens, and yellows, and see blues and violets as dim." client_color = MATRIX_Tritanopia + wire_colors_replace = TRITANOPIA_COLOR_REPLACE /datum/modifier/trait/colorblind_taj name = "Colorblind - Blue-red" desc = "You are colorblind. You have a minor issue with blue colors and have difficulty recognizing them from red colors." client_color = MATRIX_Taj_Colorblind + wire_colors_replace = TRITANOPIA_COLOR_REPLACE /datum/modifier/trait/colorblind_vulp name = "Colorblind - Red-green" desc = "You are colorblind. You have a severe issue with green colors and have difficulty recognizing them from red colors." client_color = MATRIX_Vulp_Colorblind + wire_colors_replace = PROTANOPIA_COLOR_REPLACE /datum/modifier/trait/colorblind_monochrome name = "Monochromacy" desc = "You are fully colorblind. Your condition is rare, but you can see no colors at all." client_color = MATRIX_Monochromia + wire_colors_replace = GREYSCALE_COLOR_REPLACE \ No newline at end of file diff --git a/code/modules/mob/freelook/ai/update_triggers.dm b/code/modules/mob/freelook/ai/update_triggers.dm index c0b4adf0f6..9fd28344df 100644 --- a/code/modules/mob/freelook/ai/update_triggers.dm +++ b/code/modules/mob/freelook/ai/update_triggers.dm @@ -37,7 +37,6 @@ /obj/machinery/camera/deactivate(user as mob, var/choice = 1) ..(user, choice) - invalidateCameraCache() if(src.can_use()) cameranet.addCamera(src) else diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index d788f9099e..c778470b19 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -192,9 +192,9 @@ var/list/slot_equipment_priority = list( \ //This differs from remove_from_mob() in that it checks if the item can be unequipped first. /mob/proc/unEquip(obj/item/I, force = 0, var/atom/target) //Force overrides NODROP for things like wizarditis and admin undress. if(!(force || canUnEquip(I))) - return + return FALSE drop_from_inventory(I, target) - return 1 + return TRUE //Attemps to remove an object on a mob. diff --git a/code/modules/mob/language/station_vr.dm b/code/modules/mob/language/station_vr.dm index feab8979a2..85db436c39 100644 --- a/code/modules/mob/language/station_vr.dm +++ b/code/modules/mob/language/station_vr.dm @@ -119,6 +119,21 @@ "ver", "stv", "pro", "ski" ) +/datum/language/drudakar + name = LANGUAGE_DRUDAKAR + desc = "The native language of the D'Rudak'Ar, a loosely tied together community of dragons and demi-dragons based in the Diul system. Features include many hard consonants and rolling 'r's." + speech_verb = "gaos" + ask_verb = "gaos" + exclaim_verb = "GAOS" + whisper_verb = "gaos" + colour = "drudakar" + key = "K" + syllables = list( + "gok", "rha", "rou", "gao", "do", "ra", "bo", "lah", "draz", "khi", "zah", "lah", "ora", "ille", + "ghlas", "ghlai", "tyur", "vah", "bao", "raag", "drag", "zhi", "dahl", "tiyr", "vahl", "nyem", + "roar", "hyaa", "ma", "ha", "ya", "shi", "yo", "go" + ) + /datum/language/unathi flags = 0 /datum/language/tajaran diff --git a/code/modules/mob/living/bot/medbot.dm b/code/modules/mob/living/bot/medbot.dm index a67440e013..d0c63faa56 100644 --- a/code/modules/mob/living/bot/medbot.dm +++ b/code/modules/mob/living/bot/medbot.dm @@ -1,3 +1,13 @@ +// Medbot Info + +#define MEDBOT_PANIC_NONE 0 +#define MEDBOT_PANIC_LOW 15 +#define MEDBOT_PANIC_MED 35 +#define MEDBOT_PANIC_HIGH 55 +#define MEDBOT_PANIC_FUCK 70 +#define MEDBOT_PANIC_ENDING 90 +#define MEDBOT_PANIC_END 100 + /mob/living/bot/medbot name = "Medibot" desc = "A little medical robot. He looks somewhat underwhelmed." @@ -23,6 +33,15 @@ var/treatment_virus = "spaceacillin" var/treatment_emag = "toxin" var/declare_treatment = 0 //When attempting to treat a patient, should it notify everyone wearing medhuds? + + // Are we tipped over? + var/is_tipped = FALSE + //How panicked we are about being tipped over (why would you do this?) + var/tipped_status = MEDBOT_PANIC_NONE + //The name we got when we were tipped + var/tipper_name + //The last time we were tipped/righted and said a voice line, to avoid spam + var/last_tipping_action_voice = 0 /mob/living/bot/medbot/mysterious name = "\improper Mysterious Medibot" @@ -34,6 +53,9 @@ treatment_tox = "anti_toxin" /mob/living/bot/medbot/handleIdle() + if(is_tipped) // Don't handle idle things if we're incapacitated! + return + if(vocal && prob(1)) var/message_options = list( "Radar, put a mask on!" = 'sound/voice/medbot/mradar.ogg', @@ -47,6 +69,9 @@ playsound(src, message_options[message], 50, 0) /mob/living/bot/medbot/handleAdjacentTarget() + if(is_tipped) // Don't handle targets if we're incapacitated! + return + UnarmedAttack(target) /mob/living/bot/medbot/handlePanic() // Speed modification based on alert level. @@ -76,6 +101,9 @@ return . /mob/living/bot/medbot/lookForTargets() + if(is_tipped) // Don't look for targets if we're incapacitated! + return + for(var/mob/living/carbon/human/H in view(7, src)) // Time to find a patient! if(confirmTarget(H)) target = H @@ -162,7 +190,28 @@ else icon_state = "medibot[on]" -/mob/living/bot/medbot/attack_hand(var/mob/user) +/mob/living/bot/medbot/attack_hand(mob/living/carbon/human/H) + if(H.a_intent == I_DISARM && !is_tipped) + H.visible_message("[H] begins tipping over [src].", "You begin tipping over [src]...") + + if(world.time > last_tipping_action_voice + 15 SECONDS) + last_tipping_action_voice = world.time // message for tipping happens when we start interacting, message for righting comes after finishing + var/list/messagevoice = list("Hey, wait..." = 'sound/voice/medbot/hey_wait.ogg',"Please don't..." = 'sound/voice/medbot/please_dont.ogg',"I trusted you..." = 'sound/voice/medbot/i_trusted_you.ogg', "Nooo..." = 'sound/voice/medbot/nooo.ogg', "Oh fuck-" = 'sound/voice/medbot/oh_fuck.ogg') + var/message = pick(messagevoice) + say(message) + playsound(src, messagevoice[message], 70, FALSE) + + if(do_after(H, 3 SECONDS, target=src)) + tip_over(H) + + else if(H.a_intent == I_HELP && is_tipped) + H.visible_message("[H] begins righting [src].", "You begin righting [src]...") + if(do_after(H, 3 SECONDS, target=src)) + set_right(H) + else + interact() + +/mob/living/bot/medbot/proc/interact(mob/user) var/dat dat += "Automatic Medical Unit v1.0

    " dat += "Status: [on ? "On" : "Off"]
    " @@ -300,6 +349,89 @@ s.start() qdel(src) return + +/mob/living/bot/medbot/handleRegular() + . = ..() + + if(is_tipped) + handle_panic() + return + +/mob/living/bot/medbot/proc/tip_over(mob/user) + playsound(src, 'sound/machines/warning-buzzer.ogg', 50) + user.visible_message("[user] tips over [src]!", "You tip [src] over!") + is_tipped = TRUE + tipper_name = user.name + var/matrix/mat = transform + transform = mat.Turn(180) + +/mob/living/bot/medbot/proc/set_right(mob/user) + var/list/messagevoice + if(user) + user.visible_message("[user] sets [src] right-side up!", "You set [src] right-side up!") + if(user.name == tipper_name) + messagevoice = list("I forgive you." = 'sound/voice/medbot/forgive.ogg') + else + messagevoice = list("Thank you!" = 'sound/voice/medbot/thank_you.ogg', "You are a good person." = 'sound/voice/medbot/youre_good.ogg') + else + visible_message("[src] manages to [pick("writhe", "wriggle", "wiggle")] enough to right itself.") + messagevoice = list("Fuck you." = 'sound/voice/medbot/fuck_you.ogg', "Your behavior has been reported, have a nice day." = 'sound/voice/medbot/reported.ogg') + + tipper_name = null + if(world.time > last_tipping_action_voice + 15 SECONDS) + last_tipping_action_voice = world.time + var/message = pick(messagevoice) + say(message) + playsound(src, messagevoice[message], 70) + tipped_status = MEDBOT_PANIC_NONE + is_tipped = FALSE + transform = matrix() + +// if someone tipped us over, check whether we should ask for help or just right ourselves eventually +/mob/living/bot/medbot/proc/handle_panic() + tipped_status++ + var/list/messagevoice + switch(tipped_status) + if(MEDBOT_PANIC_LOW) + messagevoice = list("I require assistance." = 'sound/voice/medbot/i_require_asst.ogg') + if(MEDBOT_PANIC_MED) + messagevoice = list("Please put me back." = 'sound/voice/medbot/please_put_me_back.ogg') + if(MEDBOT_PANIC_HIGH) + messagevoice = list("Please, I am scared!" = 'sound/voice/medbot/please_im_scared.ogg') + if(MEDBOT_PANIC_FUCK) + messagevoice = list("I don't like this, I need help!" = 'sound/voice/medbot/dont_like.ogg', "This hurts, my pain is real!" = 'sound/voice/medbot/pain_is_real.ogg') + if(MEDBOT_PANIC_ENDING) + messagevoice = list("Is this the end?" = 'sound/voice/medbot/is_this_the_end.ogg', "Nooo!" = 'sound/voice/medbot/nooo.ogg') + if(MEDBOT_PANIC_END) + global_announcer.autosay("PSYCH ALERT: Crewmember [tipper_name] recorded displaying antisocial tendencies torturing bots in [get_area(src)]. Please schedule psych evaluation.", "[src]", "Medical") + set_right() // strong independent medbot + + // if(prob(tipped_status)) // Commented out pending introduction of jitter stuff from /tg/ + // do_jitter_animation(tipped_status * 0.1) + + if(messagevoice) + var/message = pick(messagevoice) + say(message) + playsound(src, messagevoice[message], 70) + else if(prob(tipped_status * 0.2)) + playsound(src, 'sound/machines/warning-buzzer.ogg', 30, extrarange=-2) + +/mob/living/bot/medbot/examine(mob/user) + . = ..() + if(tipped_status == MEDBOT_PANIC_NONE) + return + + switch(tipped_status) + if(MEDBOT_PANIC_NONE to MEDBOT_PANIC_LOW) + . += "It appears to be tipped over, and is quietly waiting for someone to set it right." + if(MEDBOT_PANIC_LOW to MEDBOT_PANIC_MED) + . += "It is tipped over and requesting help." + if(MEDBOT_PANIC_MED to MEDBOT_PANIC_HIGH) + . += "They are tipped over and appear visibly distressed." // now we humanize the medbot as a they, not an it + if(MEDBOT_PANIC_HIGH to MEDBOT_PANIC_FUCK) + . += "They are tipped over and visibly panicking!" + if(MEDBOT_PANIC_FUCK to INFINITY) + . += "They are freaking out from being tipped over!" /mob/living/bot/medbot/confirmTarget(var/mob/living/carbon/human/H) if(!..()) @@ -430,3 +562,12 @@ S.name = created_name user.drop_from_inventory(src) qdel(src) + +// Undefine these. +#undef MEDBOT_PANIC_NONE +#undef MEDBOT_PANIC_LOW +#undef MEDBOT_PANIC_MED +#undef MEDBOT_PANIC_HIGH +#undef MEDBOT_PANIC_FUCK +#undef MEDBOT_PANIC_ENDING +#undef MEDBOT_PANIC_END diff --git a/code/modules/mob/living/carbon/human/appearance.dm b/code/modules/mob/living/carbon/human/appearance.dm index 57206c05e2..eae3c47335 100644 --- a/code/modules/mob/living/carbon/human/appearance.dm +++ b/code/modules/mob/living/carbon/human/appearance.dm @@ -48,6 +48,21 @@ update_hair() return 1 + +/mob/living/carbon/human/proc/change_hair_gradient(var/hair_gradient) + if(!hair_gradient) + return + + if(grad_style == hair_gradient) + return + + if(!(hair_gradient in GLOB.hair_gradients)) + return + + grad_style = hair_gradient + + update_hair() + return 1 /mob/living/carbon/human/proc/change_facial_hair(var/facial_hair_style) if(!facial_hair_style) @@ -104,6 +119,17 @@ update_hair() return 1 + +/mob/living/carbon/human/proc/change_grad_color(var/red, var/green, var/blue) + if(red == r_grad && green == g_grad && blue == b_grad) + return + + r_grad = red + g_grad = green + b_grad = blue + + update_hair() + return 1 /mob/living/carbon/human/proc/change_facial_hair_color(var/red, var/green, var/blue) if(red == r_facial && green == g_facial && blue == b_facial) diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 6c5cdd9fc2..d7a9741471 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -146,6 +146,10 @@ message = "rumbles their throat, puffs their cheeks and croaks." m_type = 2 playsound(src, 'sound/voice/Croak.ogg', 50, 0, preference = /datum/client_preference/emote_noises) + if("gao") + message = "lets out a gao." + m_type = 2 + playsound(src, 'sound/voice/gao.ogg', 50, 0, preference = /datum/client_preference/emote_noises) if("nsay") nsay() return TRUE diff --git a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm index 6629a96a9f..bc39e16310 100644 --- a/code/modules/mob/living/carbon/human/species/species_shapeshift.dm +++ b/code/modules/mob/living/carbon/human/species/species_shapeshift.dm @@ -88,6 +88,7 @@ var/list/wrapped_species_by_ref = list() var/list/valid_hairstyles = list() var/list/valid_facialhairstyles = list() + var/list/valid_gradstyles = GLOB.hair_gradients for(var/hairstyle in hair_styles_list) var/datum/sprite_accessory/S = hair_styles_list[hairstyle] if(gender == MALE && S.gender == FEMALE) @@ -112,6 +113,9 @@ var/list/wrapped_species_by_ref = list() if(valid_hairstyles.len) var/new_hair = input("Select a hairstyle.", "Shapeshifter Hair") as null|anything in valid_hairstyles change_hair(new_hair ? new_hair : "Bald") + if(valid_gradstyles.len) + var/new_hair = input("Select a hair gradient style.", "Shapeshifter Hair") as null|anything in valid_gradstyles + change_hair_gradient(new_hair ? new_hair : "None") if(valid_facialhairstyles.len) var/new_hair = input("Select a facial hair style.", "Shapeshifter Hair") as null|anything in valid_facialhairstyles change_facial_hair(new_hair ? new_hair : "Shaved") @@ -216,6 +220,10 @@ var/list/wrapped_species_by_ref = list() if(!new_hair) return shapeshifter_set_hair_color(new_hair) + var/new_grad = input("Please select a new hair gradient color.", "Hair Gradient Colour") as color + if(!new_grad) + return + shapeshifter_set_grad_color(new_grad) var/new_fhair = input("Please select a new facial hair color.", "Facial Hair Color") as color if(!new_fhair) return @@ -225,6 +233,10 @@ var/list/wrapped_species_by_ref = list() change_hair_color(hex2num(copytext(new_hair, 2, 4)), hex2num(copytext(new_hair, 4, 6)), hex2num(copytext(new_hair, 6, 8))) +/mob/living/carbon/human/proc/shapeshifter_set_grad_color(var/new_grad) + + change_grad_color(hex2num(copytext(new_grad, 2, 4)), hex2num(copytext(new_grad, 4, 6)), hex2num(copytext(new_grad, 6, 8))) + /mob/living/carbon/human/proc/shapeshifter_set_facial_color(var/new_fhair) change_facial_hair_color(hex2num(copytext(new_fhair, 2, 4)), hex2num(copytext(new_fhair, 4, 6)), hex2num(copytext(new_fhair, 6, 8))) diff --git a/code/modules/mob/living/carbon/human/species/station/alraune.dm b/code/modules/mob/living/carbon/human/species/station/alraune.dm index 8a0d93243a..b8dc646517 100644 --- a/code/modules/mob/living/carbon/human/species/station/alraune.dm +++ b/code/modules/mob/living/carbon/human/species/station/alraune.dm @@ -58,6 +58,8 @@ flesh_color = "#9ee02c" blood_color = "#edf4d0" //sap! base_color = "#1a5600" + + reagent_tag = IS_ALRAUNE blurb = "Alraunes are a rare sight in space. Their bodies are reminiscent of that of plants, and yet they share many\ traits with other humanoid beings.\ diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm index 4401434f97..f747e1e47d 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/negative.dm @@ -185,6 +185,7 @@ ..(S,H) H.add_modifier(/datum/modifier/trait/colorblind_taj) YW comment finish*/ + // YW Addition /datum/trait/light_sensitivity name = "Photosensitivity" @@ -207,4 +208,4 @@ YW comment finish*/ /datum/trait/haemophilia/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.add_modifier(/datum/modifier/trait/haemophilia) -// YW Addition End \ No newline at end of file +// YW Addition End diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index f611132d3a..3723f672bc 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -65,6 +65,22 @@ excludes = list(/datum/trait/hot_blood, /datum/trait/cold_blood) // YW Addition End +/* YW Commented out will be moved to Positive/Negative for map balance +/datum/trait/coldadapt + name = "Cold-Adapted" + desc = "You are able to withstand much colder temperatures than other species, and can even be comfortable in extremely cold environments. You are also more vulnerable to hot environments as a consequence of these adaptations." + cost = 0 + var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295) + excludes = list(/datum/trait/hotadapt) + +/datum/trait/hotadapt + name = "Heat-Adapted" + desc = "You are able to withstand much hotter temperatures than other species, and can even be comfortable in extremely hot environments. You are also more vulnerable to cold environments as a consequence of these adaptations." + cost = 0 + var_changes = list("heat_level_1" = 420, "heat_level_2" = 460, "heat_level_3" = 1100, "breath_heat_level_1" = 440, "breath_heat_level_2" = 510, "breath_heat_level_3" = 1500, "heat_discomfort_level" = 390, "cold_level_1" = 280, "cold_level_2" = 220, "cold_level_3" = 140, "breath_cold_level_1" = 260, "breath_cold_level_2" = 240, "breath_cold_level_3" = 120, "cold_discomfort_level" = 280) + excludes = list(/datum/trait/coldadapt) +YW change end */ + /datum/trait/autohiss_unathi name = "Autohiss (Unathi)" desc = "You roll your S's and x's" diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm index 2e2396edfe..a7c3da8a40 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/positive.dm @@ -225,4 +225,25 @@ /datum/trait/sonar/apply(var/datum/species/S,var/mob/living/carbon/human/H) ..(S,H) H.verbs |= /mob/living/carbon/human/proc/sonar_ping + + +/datum/trait/coldadapt + name = "Cold-Adapted" + desc = "You are able to withstand much colder temperatures than other species, and can even be comfortable in extremely cold environments. You are also more vulnerable to hot environments as a consequence of these adaptations." + cost = 2 + var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295) + excludes = list(/datum/trait/hotadapt) + +/datum/trait/hotadapt + name = "Heat-Adapted" + desc = "You are able to withstand much hotter temperatures than other species, and can even be comfortable in extremely hot environments. You are also more vulnerable to cold environments as a consequence of these adaptations." + cost = 2 + var_changes = list("heat_level_1" = 420, "heat_level_2" = 460, "heat_level_3" = 1100, "breath_heat_level_1" = 440, "breath_heat_level_2" = 510, "breath_heat_level_3" = 1500, "heat_discomfort_level" = 390, "cold_level_1" = 280, "cold_level_2" = 220, "cold_level_3" = 140, "breath_cold_level_1" = 260, "breath_cold_level_2" = 240, "breath_cold_level_3" = 120, "cold_discomfort_level" = 280) + excludes = list(/datum/trait/coldadapt) // YW Addition end + +/datum/trait/snowwalker + name = "Snow Walker" + desc = "You are able to move unhindered on snow." + cost = 2 //YW EDIT + var_changes = list("snow_movement" = -2) diff --git a/code/modules/mob/living/silicon/ai/ai_vr.dm b/code/modules/mob/living/silicon/ai/ai_vr.dm index 2f22d0e788..3234d7269e 100644 --- a/code/modules/mob/living/silicon/ai/ai_vr.dm +++ b/code/modules/mob/living/silicon/ai/ai_vr.dm @@ -6,6 +6,7 @@ add_language(LANGUAGE_ECUREUILIAN, 1) add_language(LANGUAGE_DAEMON, 1) add_language(LANGUAGE_ENOCHIAN, 1) + add_language(LANGUAGE_DRUDAKAR, 1) /mob/AIize(var/move = TRUE) . = ..() @@ -14,4 +15,5 @@ add_language(LANGUAGE_CANILUNZT, 1) add_language(LANGUAGE_ECUREUILIAN, 1) add_language(LANGUAGE_DAEMON, 1) - add_language(LANGUAGE_ENOCHIAN, 1) \ No newline at end of file + add_language(LANGUAGE_ENOCHIAN, 1) + add_language(LANGUAGE_DRUDAKAR, 1) \ No newline at end of file diff --git a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm index ae59e957b6..3f1c60170e 100644 --- a/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm +++ b/code/modules/mob/living/silicon/robot/dogborg/dog_sleeper_vr.dm @@ -673,7 +673,7 @@ name = "Digestive Analyzer" desc = "A mounted destructive analyzer unit with fuel processor." icon_state = "analyzer" - max_item_count = 1 + max_item_count = 10 startdrain = 100 analyzer = TRUE diff --git a/code/modules/mob/living/silicon/robot/drone/drone_items.dm b/code/modules/mob/living/silicon/robot/drone/drone_items.dm index b52028d542..02da9be049 100644 --- a/code/modules/mob/living/silicon/robot/drone/drone_items.dm +++ b/code/modules/mob/living/silicon/robot/drone/drone_items.dm @@ -153,7 +153,9 @@ /obj/item/weapon/reagent_containers/glass, /obj/item/weapon/reagent_containers/food, /obj/item/seeds, - /obj/item/weapon/grown + /obj/item/weapon/grown, + /obj/item/trash, + /obj/item/weapon/reagent_containers/cooking_container ) /obj/item/weapon/gripper/gravekeeper //Used for handling grave things, flowers, etc. @@ -467,7 +469,7 @@ for(var/obj/W in T) //Different classes of items give different commodities. - if(istype(W,/obj/item/weapon/cigbutt)) + if(istype(W,/obj/item/trash/cigbutt)) if(plastic) plastic.add_charge(500) else if(istype(W,/obj/effect/spider/spiderling)) diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index 5076e1eec2..423d91a6e1 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -144,7 +144,7 @@ playsound(src, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises) m_type = 2 else - src << "You're not a dog!" + to_chat(src, "You're not a dog!") //Vorestation addition end diff --git a/code/modules/mob/living/silicon/robot/inventory.dm b/code/modules/mob/living/silicon/robot/inventory.dm index c8b623e517..96daaf9af7 100644 --- a/code/modules/mob/living/silicon/robot/inventory.dm +++ b/code/modules/mob/living/silicon/robot/inventory.dm @@ -52,6 +52,7 @@ module_state_3 = null inv3.icon_state = "inv3" updateicon() + hud_used.update_robot_modules_display() /mob/living/silicon/robot/proc/uneq_all() module_active = null diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 74aad9bae0..1e57f825a9 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -69,7 +69,7 @@ /mob/living/silicon/robot/handle_regular_status_updates() if(src.camera && !scrambledcodes) - if(src.stat == 2 || wires.IsIndexCut(BORG_WIRE_CAMERA)) + if(src.stat == 2 || wires.is_cut(WIRE_BORG_CAMERA)) src.camera.set_status(0) else src.camera.set_status(1) diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 235879e6da..79a7e135e3 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -124,7 +124,7 @@ camera = new /obj/machinery/camera(src) camera.c_tag = real_name camera.replace_networks(list(NETWORK_DEFAULT,NETWORK_ROBOTS)) - if(wires.IsIndexCut(BORG_WIRE_CAMERA)) + if(wires.is_cut(WIRE_BORG_CAMERA)) camera.status = 0 init() @@ -536,7 +536,7 @@ to_chat(user, "You close the cover.") opened = 0 updateicon() - else if(wiresexposed && wires.IsAllCut()) + else if(wiresexposed && wires.is_all_cut()) //Cell is out, wires are exposed, remove MMI, produce damaged chassis, baleet original mob. if(!mmi) to_chat(user, "\The [src] has no brain to remove.") @@ -934,7 +934,7 @@ /mob/living/silicon/robot/proc/SetLockdown(var/state = 1) // They stay locked down if their wire is cut. - if(wires.LockedCut()) + if(wires.is_cut(WIRE_BORG_LOCKED)) state = 1 if(state) throw_alert("locked", /obj/screen/alert/locked) diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index 78d741b012..41a47b0e7e 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -296,7 +296,7 @@ // Copied over from paper's rename verb // see code\modules\paperwork\paper.dm line 62 -/obj/item/weapon/pen/robopen/proc/RenamePaper(mob/user as mob,obj/paper as obj) +/obj/item/weapon/pen/robopen/proc/RenamePaper(mob/user, obj/item/weapon/paper/paper) if ( !user || !paper ) return var/n_name = sanitizeSafe(input(user, "What would you like to label the paper?", "Paper Labelling", null) as text, 32) @@ -306,6 +306,7 @@ //n_name = copytext(n_name, 1, 32) if(( get_dist(user,paper) <= 1 && user.stat == 0)) paper.name = "paper[(n_name ? text("- '[n_name]'") : null)]" + paper.last_modified_ckey = user.ckey add_fingerprint(user) return diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 27523c88d4..34d5d81448 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -12,7 +12,8 @@ LANGUAGE_CANILUNZT = 0, LANGUAGE_ECUREUILIAN= 0, LANGUAGE_DAEMON = 0, - LANGUAGE_ENOCHIAN = 0 + LANGUAGE_ENOCHIAN = 0, + LANGUAGE_DRUDAKAR = 0 ) var/vr_sprites = list() var/pto_type = null @@ -34,7 +35,8 @@ LANGUAGE_CANILUNZT = 1, LANGUAGE_ECUREUILIAN= 1, LANGUAGE_DAEMON = 1, - LANGUAGE_ENOCHIAN = 1 + LANGUAGE_ENOCHIAN = 1, + LANGUAGE_DRUDAKAR = 1 ) /hook/startup/proc/robot_modules_vr() diff --git a/code/modules/mob/living/silicon/subystems.dm b/code/modules/mob/living/silicon/subystems.dm index b03ab5eeb2..e5d50d5824 100644 --- a/code/modules/mob/living/silicon/subystems.dm +++ b/code/modules/mob/living/silicon/subystems.dm @@ -2,7 +2,7 @@ var/register_alarms = 1 var/datum/nano_module/alarm_monitor/all/alarm_monitor var/datum/nano_module/atmos_control/atmos_control - var/datum/nano_module/program/crew_monitor/crew_monitor + var/datum/tgui_module/crew_monitor/robot/crew_monitor var/datum/nano_module/law_manager/law_manager var/datum/nano_module/power_monitor/power_monitor var/datum/nano_module/rcon/rcon @@ -67,7 +67,7 @@ set category = "Subystems" set name = "Crew Monitor" - crew_monitor.ui_interact(usr, state = self_state) + crew_monitor.tgui_interact(usr) /**************** * Law Manager * diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 12b70f6048..0918c1b8ae 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -11,6 +11,8 @@ maxHealth = 5 health = 5 + movement_cooldown = 1.5 + mob_size = MOB_MINISCULE pass_flags = PASSTABLE // can_pull_size = ITEMSIZE_TINY @@ -101,15 +103,13 @@ /mob/living/simple_mob/animal/passive/mouse/rat name = "rat" + body_color = "rat" + icon_state = "mouse_rat" maxHealth = 20 health = 20 ai_holder_type = /datum/ai_holder/simple_mob/melee/evasive -/mob/living/simple_mob/animal/passive/mouse/rat/Initialize() - ..() - adjust_scale(1.2) - //TOM IS ALIVE! SQUEEEEEEEE~K :) /mob/living/simple_mob/animal/passive/mouse/brown/Tom name = "Tom" diff --git a/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dmglass.dm b/code/modules/mob/living/simple_mob/subtypes/mechanical/mecha/phazon.dmglass.dm new file mode 100644 index 0000000000..e69de29bb2 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm index 23c6c4b1d3..16fa33596a 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/panther.dm @@ -5,6 +5,7 @@ icon_state = "panther" icon_living = "panther" + icon_rest = "panther-rest" icon_dead = "panther-dead" icon = 'icons/mob/vore64x64.dmi' vis_height = 64 diff --git a/code/modules/mob/logout.dm b/code/modules/mob/logout.dm index 49ab504956..ffaeef3c09 100644 --- a/code/modules/mob/logout.dm +++ b/code/modules/mob/logout.dm @@ -1,5 +1,6 @@ /mob/Logout() SSnanoui.user_logout(src) // this is used to clean up (remove) this user's Nano UIs + SStgui.on_logout(src) // Cleanup any TGUIs the user has open player_list -= src disconnect_time = world.realtime //VOREStation Addition: logging when we disappear. update_client_z(null) diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index db15e841ca..97b4cfe851 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -163,6 +163,7 @@ idle_threads.Add(active_program) active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs SSnanoui.close_uis(active_program.NM ? active_program.NM : active_program) + SStgui.close_uis(active_program.TM ? active_program.TM : active_program) active_program = null update_icon() if(istype(user)) @@ -202,7 +203,6 @@ minimize_program(user) if(P.run_program(user)) - active_program = P update_icon() return 1 diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index ef7eece062..7a63d49576 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -5,8 +5,13 @@ var/required_access = null // List of required accesses to run/download the program. var/requires_access_to_run = 1 // Whether the program checks for required_access when run. var/requires_access_to_download = 1 // Whether the program checks for required_access when downloading. + // NanoModule var/datum/nano_module/NM = null // If the program uses NanoModule, put it here and it will be automagically opened. Otherwise implement ui_interact. var/nanomodule_path = null // Path to nanomodule, make sure to set this if implementing new program. + // TGUIModule + var/datum/tgui_module/TM = null // If the program uses TGUIModule, put it here and it will be automagically opened. Otherwise implement tgui_interact. + var/tguimodule_path = null // Path to tguimodule, make sure to set this if implementing new program. + // Etc Program stuff var/program_state = PROGRAM_STATE_KILLED// PROGRAM_STATE_KILLED or PROGRAM_STATE_BACKGROUND or PROGRAM_STATE_ACTIVE - specifies whether this program is running. var/obj/item/modular_computer/computer // Device that runs this program. var/filedesc = "Unknown Program" // User-friendly name of this program. @@ -125,9 +130,14 @@ // When implementing new program based device, use this to run the program. /datum/computer_file/program/proc/run_program(var/mob/living/user) if(can_run(user, 1) || !requires_access_to_run) + computer.active_program = src if(nanomodule_path) NM = new nanomodule_path(src, new /datum/topic_manager/program(src), src) NM.using_access = user.GetAccess() + if(tguimodule_path) + TM = new tguimodule_path(src) + TM.using_access = user.GetAccess() + TM.tgui_interact(user) if(requires_ntnet && network_destination) generate_network_log("Connection opened to [network_destination].") program_state = PROGRAM_STATE_ACTIVE @@ -139,9 +149,11 @@ program_state = PROGRAM_STATE_KILLED if(network_destination) generate_network_log("Connection to [network_destination] closed.") - if(NM) - qdel(NM) - NM = null + QDEL_NULL(NM) + if(TM) + SStgui.close_uis(TM) + qdel(TM) + TM = null return 1 // This is called every tick when the program is enabled. Ensure you do parent call if you override it. If parent returns 1 continue with UI initialisation. @@ -154,9 +166,11 @@ if(istype(NM)) NM.ui_interact(user, ui_key, null, force_open) return 0 + if(istype(TM)) + TM.tgui_interact(user) + return 0 return 1 - // CONVENTIONS, READ THIS WHEN CREATING NEW PROGRAM AND OVERRIDING THIS PROC: // Topic calls are automagically forwarded from NanoModule this program contains. // Calls beginning with "PRG_" are reserved for programs handling. diff --git a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm b/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm index 27e5a26c3f..4c1b153734 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/hacked_camera.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/camera_monitor/hacked filename = "camcrypt" filedesc = "Camera Decryption Tool" - nanomodule_path = /datum/nano_module/camera_monitor/hacked + tguimodule_path = /datum/tgui_module/camera/ntos/hacked program_icon_state = "hostile" program_key_state = "security_key" program_menu_icon = "zoomin" @@ -15,25 +15,8 @@ if(program_state != PROGRAM_STATE_ACTIVE) // Background programs won't trigger alarms. return - var/datum/nano_module/camera_monitor/hacked/HNM = NM - // The program is active and connected to one of the station's networks. Has a very small chance to trigger IDS alarm every tick. - if(HNM && HNM.current_network && (HNM.current_network in using_map.station_networks) && prob(0.1)) + if(prob(0.1)) if(ntnet_global.intrusion_detection_enabled) - ntnet_global.add_log("IDS WARNING - Unauthorised access detected to camera network [HNM.current_network] by device with NID [computer.network_card.get_network_tag()]") + ntnet_global.add_log("IDS WARNING - Unauthorised access detected to camera network by device with NID [computer.network_card.get_network_tag()]") ntnet_global.intrusion_detection_alarm = 1 - - -/datum/nano_module/camera_monitor/hacked - name = "Hacked Camera Monitoring Program" - //available_to_ai = FALSE - -/datum/nano_module/camera_monitor/hacked/can_access_network(var/mob/user, var/network_access) - return 1 - -// The hacked variant has access to all commonly used networks. -/datum/nano_module/camera_monitor/hacked/modify_networks_list(var/list/networks) - networks.Add(list(list("tag" = NETWORK_MERCENARY, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_ERT, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_CRESCENT, "has_access" = 1))) - return networks \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/generic/camera.dm b/code/modules/modular_computers/file_system/programs/generic/camera.dm index 52c275d3bb..57948d6e8a 100644 --- a/code/modules/modular_computers/file_system/programs/generic/camera.dm +++ b/code/modules/modular_computers/file_system/programs/generic/camera.dm @@ -30,7 +30,7 @@ /datum/computer_file/program/camera_monitor filename = "cammon" filedesc = "Camera Monitoring" - nanomodule_path = /datum/nano_module/camera_monitor + tguimodule_path = /datum/tgui_module/camera/ntos program_icon_state = "cameras" program_key_state = "generic_key" program_menu_icon = "search" @@ -39,163 +39,11 @@ available_on_ntnet = 1 requires_ntnet = 1 -/datum/nano_module/camera_monitor - name = "Camera Monitoring program" - var/obj/machinery/camera/current_camera = null - var/current_network = null - -/datum/nano_module/camera_monitor/ui_interact(mob/user, ui_key = "main", datum/nanoui/ui = null, force_open = 1, state = default_state) - var/list/data = host.initial_data() - - data["current_camera"] = current_camera ? current_camera.nano_structure() : null - data["current_network"] = current_network - - var/list/all_networks[0] - for(var/network in using_map.station_networks) - if(can_access_network(user, get_camera_access(network), 1)) - all_networks.Add(list(list( - "tag" = network, - "has_access" = 1 - ))) - for(var/network in using_map.secondary_networks) - if(can_access_network(user, get_camera_access(network), 0)) - all_networks.Add(list(list( - "tag" = network, - "has_access" = 1 - ))) - - all_networks = modify_networks_list(all_networks) - - data["networks"] = all_networks - - var/list/map_levels = using_map.get_map_levels(get_z(nano_host()), TRUE, om_range = DEFAULT_OVERMAP_RANGE) - - if(current_network) - data["cameras"] = camera_repository.cameras_in_network(current_network, map_levels) - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if (!ui) - ui = new(user, src, ui_key, "mod_sec_camera.tmpl", "Camera Monitoring", 900, 800) - // ui.auto_update_layout = 1 // Disabled as with suit sensors monitor - breaks the UI map. Re-enable once it's fixed somehow. - - ui.add_template("mapContent", "sec_camera_map_content.tmpl") - ui.add_template("mapHeader", "mod_sec_camera_map_header.tmpl") - ui.set_initial_data(data) - ui.open() - -// Intended to be overriden by subtypes to manually add non-station networks to the list. -/datum/nano_module/camera_monitor/proc/modify_networks_list(var/list/networks) - return networks - -/datum/nano_module/camera_monitor/proc/can_access_network(var/mob/user, var/network_access, var/station_network = 0) - // No access passed, or 0 which is considered no access requirement. Allow it. - if(!network_access) - return 1 - - if(station_network) - return check_access(user, network_access) || check_access(user, access_security) || check_access(user, access_heads) - else - return check_access(user, network_access) - -/datum/nano_module/camera_monitor/Topic(href, href_list) - if(..()) - return 1 - - if(href_list["switch_camera"]) - var/obj/machinery/camera/C = locate(href_list["switch_camera"]) in cameranet.cameras - if(!C) - return - if(!(current_network in C.network)) - return - - switch_to_camera(usr, C) - return 1 - - else if(href_list["switch_network"]) - // Either security access, or access to the specific camera network's department is required in order to access the network. - if(can_access_network(usr, get_camera_access(href_list["switch_network"]), (href_list["switch_network"] in using_map.station_networks))) - current_network = href_list["switch_network"] - else - to_chat(usr, "\The [nano_host()] shows an \"Network Access Denied\" error message.") - return 1 - - else if(href_list["reset"]) - reset_current() - usr.reset_view(current_camera) - return 1 - -/datum/nano_module/camera_monitor/proc/switch_to_camera(var/mob/user, var/obj/machinery/camera/C) - //don't need to check if the camera works for AI because the AI jumps to the camera location and doesn't actually look through cameras. - if(isAI(user)) - var/mob/living/silicon/ai/A = user - // Only allow non-carded AIs to view because the interaction with the eye gets all wonky otherwise. - if(!A.is_in_chassis()) - return 0 - - A.eyeobj.setLoc(get_turf(C)) - A.client.eye = A.eyeobj - return 1 - - set_current(C) - user.machine = nano_host() - user.reset_view(C) - return 1 - -/datum/nano_module/camera_monitor/proc/set_current(var/obj/machinery/camera/C) - if(current_camera == C) - return - - if(current_camera) - reset_current() - - current_camera = C - if(current_camera) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_initiated() - -/datum/nano_module/camera_monitor/proc/reset_current() - if(current_camera) - var/mob/living/L = current_camera.loc - if(istype(L)) - L.tracking_cancelled() - current_camera = null - -/datum/nano_module/camera_monitor/check_eye(var/mob/user as mob) - if(!current_camera) - return 0 - var/viewflag = current_camera.check_eye(user) - if ( viewflag < 0 ) //camera doesn't work - reset_current() - return viewflag - - // ERT Variant of the program /datum/computer_file/program/camera_monitor/ert filename = "ntcammon" filedesc = "Advanced Camera Monitoring" extended_desc = "This program allows remote access to the camera system. Some camera networks may have additional access requirements. This version has an integrated database with additional encrypted keys." size = 14 - nanomodule_path = /datum/nano_module/camera_monitor/ert + tguimodule_path = /datum/tgui_module/camera/ntos/ert available_on_ntnet = 0 - -/datum/nano_module/camera_monitor/ert - name = "Advanced Camera Monitoring Program" - //available_to_ai = FALSE - -// The ERT variant has access to ERT and crescent cams, but still checks for accesses. ERT members should be able to use it. -/datum/nano_module/camera_monitor/ert/modify_networks_list(var/list/networks) - ..() - networks.Add(list(list("tag" = NETWORK_ERT, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_CRESCENT, "has_access" = 1))) - return networks - -/datum/nano_module/camera_monitor/apply_visual(mob/M) - if(current_camera) - current_camera.apply_visual(M) - else - remove_visual(M) - -/datum/nano_module/camera_monitor/remove_visual(mob/M) - if(current_camera) - current_camera.remove_visual(M) diff --git a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm index 83e6584e8c..9b94707eb2 100644 --- a/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm +++ b/code/modules/modular_computers/file_system/programs/medical/suit_sensors.dm @@ -1,7 +1,7 @@ /datum/computer_file/program/suit_sensors filename = "sensormonitor" filedesc = "Suit Sensors Monitoring" - nanomodule_path = /datum/nano_module/program/crew_monitor + tguimodule_path = /datum/tgui_module/crew_monitor/ntos program_icon_state = "crew" program_key_state = "med_key" program_menu_icon = "heart" @@ -10,68 +10,3 @@ requires_ntnet = 1 network_destination = "crew lifesigns monitoring system" size = 11 - - -/datum/nano_module/program/crew_monitor - name = "Crew monitor" - -/datum/nano_module/program/crew_monitor/Topic(href, href_list) - if(..()) return 1 - var/turf/T = get_turf(nano_host()) // TODO: Allow setting any using_map.contact_levels from the interface. - if (!T || !(T.z in using_map.player_levels)) - to_chat(usr, "Unable to establish a connection: You're too far away from the station!") - return 0 - if(href_list["track"]) - if(isAI(usr)) - var/mob/living/silicon/ai/AI = usr - var/mob/living/carbon/human/H = locate(href_list["track"]) in mob_list - if(hassensorlevel(H, SUIT_SENSOR_TRACKING)) - AI.ai_actual_track(H) - return 1 - -/datum/nano_module/program/crew_monitor/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - var/list/data = host.initial_data() - - data["isAI"] = isAI(user) - - var/z = get_z(nano_host()) - var/list/map_levels = using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) - data["map_levels"] = map_levels - - data["crewmembers"] = list() - for(var/zlevel in map_levels) - data["crewmembers"] += crew_repository.health_data(zlevel) - - if(!data["map_levels"].len) - to_chat(user, "The crew monitor doesn't seem like it'll work here.") - if(program) - program.kill_program() - if(ui) - ui.close() - return - - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) - if(!ui) - ui = new(user, src, ui_key, "crew_monitor.tmpl", "Crew Monitoring Computer", 900, 800, state = state) - - // adding a template with the key "mapContent" enables the map ui functionality - ui.add_template("mapContent", "crew_monitor_map_content.tmpl") - // adding a template with the key "mapHeader" replaces the map header content - ui.add_template("mapHeader", "crew_monitor_map_header.tmpl") - if(!(ui.map_z_level in data["map_levels"])) - ui.set_map_z_level(data["map_levels"][1]) - - ui.set_initial_data(data) - ui.open() - - // should make the UI auto-update; doesn't seem to? - ui.set_auto_update(1) - -/*/datum/nano_module/program/crew_monitor/proc/scan() - for(var/mob/living/carbon/human/H in mob_list) - if(istype(H.w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/C = H.w_uniform - if (C.has_sensor) - tracked |= C - return 1 -*/ \ No newline at end of file diff --git a/code/modules/nifsoft/nif_softshop.dm b/code/modules/nifsoft/nif_softshop.dm index 3bb661678b..d802abde4c 100644 --- a/code/modules/nifsoft/nif_softshop.dm +++ b/code/modules/nifsoft/nif_softshop.dm @@ -227,11 +227,9 @@ /datum/wires/vending/no_contraband -/datum/wires/vending/no_contraband/UpdatePulsed(index) //Can't hack for contraband, need emag. - if(index != VENDING_WIRE_CONTRABAND) +/datum/wires/vending/no_contraband/on_pulse(index) //Can't hack for contraband, need emag. + if(index != WIRE_CONTRABAND) ..(index) - else - return /obj/machinery/vending/nifsoft_shop/emag_act(remaining_charges, mob/user) //Yeees, YEEES! Give me that black market tech. if(!emagged || !(categories & CAT_HIDDEN)) diff --git a/code/modules/nifsoft/software/06_screens.dm b/code/modules/nifsoft/software/06_screens.dm index 97f4c272a9..64a1faac5c 100644 --- a/code/modules/nifsoft/software/06_screens.dm +++ b/code/modules/nifsoft/software/06_screens.dm @@ -5,7 +5,7 @@ access = access_medical cost = 625 p_drain = 0.025 - var/datum/nano_module/program/crew_monitor/arscreen + var/datum/tgui_module/crew_monitor/nif/arscreen New() ..() @@ -17,7 +17,7 @@ activate() if((. = ..())) - arscreen.ui_interact(nif.human,"main",null,1,nif_state) + arscreen.tgui_interact(nif.human) return TRUE deactivate() diff --git a/code/modules/paperwork/paper.dm b/code/modules/paperwork/paper.dm index 908967a79e..84537f4900 100644 --- a/code/modules/paperwork/paper.dm +++ b/code/modules/paperwork/paper.dm @@ -32,6 +32,8 @@ var/list/offset_y[0] //usage by the photocopier var/rigged = 0 var/spam_flag = 0 + var/age = 0 + var/last_modified_ckey var/const/deffont = "Verdana" var/const/signfont = "Times New Roman" @@ -248,6 +250,15 @@ H.lip_style = null H.update_icons_body() //YW Edit End +/obj/item/weapon/paper/proc/set_content(text,title) + if(title) + name = title + info = html_encode(text) + info = parsepencode(text) + update_icon() + update_space(info) + updateinfolinks() + /obj/item/weapon/paper/proc/addtofield(var/id, var/text, var/links = 0) var/locid = 0 var/laststart = 1 @@ -482,6 +493,8 @@ info += t // Oh, he wants to edit to the end of the file, let him. updateinfolinks() + last_modified_ckey = usr.ckey + update_space(t) usr << browse("[name][info_links][stamps]", "window=[name]") // Update the window diff --git a/code/modules/paperwork/paper_sticky.dm b/code/modules/paperwork/paper_sticky.dm new file mode 100644 index 0000000000..e2904aba37 --- /dev/null +++ b/code/modules/paperwork/paper_sticky.dm @@ -0,0 +1,137 @@ +/obj/item/sticky_pad + name = "sticky note pad" + desc = "A pad of densely packed sticky notes." + color = COLOR_YELLOW + icon = 'icons/obj/stickynotes.dmi' + icon_state = "pad_full" + item_state = "paper" + w_class = ITEMSIZE_SMALL + + var/papers = 50 + var/written_text + var/written_by + var/paper_type = /obj/item/weapon/paper/sticky + +/obj/item/sticky_pad/update_icon() + if(papers <= 15) + icon_state = "pad_empty" + else if(papers <= 50) + icon_state = "pad_used" + else + icon_state = "pad_full" + if(written_text) + icon_state = "[icon_state]_writing" + +/obj/item/sticky_pad/attackby(var/obj/item/weapon/thing, var/mob/user) + if(istype(thing, /obj/item/weapon/pen)) + + if(jobban_isbanned(user, "Graffiti")) + to_chat(user, SPAN_WARNING("You are banned from leaving persistent information across rounds.")) + return + + var/writing_space = MAX_MESSAGE_LEN - length(written_text) + if(writing_space <= 0) + to_chat(user, SPAN_WARNING("There is no room left on \the [src].")) + return + var/text = sanitizeSafe(input("What would you like to write?") as text, writing_space) + if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated()) + return + user.visible_message(SPAN_NOTICE("\The [user] jots a note down on \the [src].")) + written_by = user.ckey + if(written_text) + written_text = "[written_text] [text]" + else + written_text = text + update_icon() + return + ..() + +/obj/item/sticky_pad/examine(var/mob/user) + . = ..() + if(.) + to_chat(user, SPAN_NOTICE("It has [papers] sticky note\s left.")) + to_chat(user, SPAN_NOTICE("You can click it on grab intent to pick it up.")) + +/obj/item/sticky_pad/attack_hand(var/mob/user) + if(user.a_intent == I_GRAB) + ..() + else + var/obj/item/weapon/paper/paper = new paper_type(get_turf(src)) + paper.set_content(written_text, "sticky note") + paper.last_modified_ckey = written_by + paper.color = color + written_text = null + user.put_in_hands(paper) + to_chat(user, SPAN_NOTICE("You pull \the [paper] off \the [src].")) + papers-- + if(papers <= 0) + qdel(src) + else + update_icon() + +/obj/item/sticky_pad/random/Initialize() + . = ..() + color = pick(COLOR_YELLOW, COLOR_LIME, COLOR_CYAN, COLOR_ORANGE, COLOR_PINK) + +/obj/item/weapon/paper/sticky + name = "sticky note" + desc = "Note to self: buy more sticky notes." + icon = 'icons/obj/stickynotes.dmi' + color = COLOR_YELLOW + slot_flags = 0 + +/obj/item/weapon/paper/sticky/Initialize() + . = ..() + GLOB.moved_event.register(src, src, /obj/item/weapon/paper/sticky/proc/reset_persistence_tracking) + +/obj/item/weapon/paper/sticky/proc/reset_persistence_tracking() + SSpersistence.forget_value(src, /datum/persistent/paper/sticky) + pixel_x = 0 + pixel_y = 0 + +/obj/item/weapon/paper/sticky/Destroy() + reset_persistence_tracking() + GLOB.moved_event.unregister(src, src) + . = ..() + +/obj/item/weapon/paper/sticky/update_icon() + if(icon_state != "scrap") + icon_state = info ? "paper_words" : "paper" + +// Copied from duct tape. +/obj/item/weapon/paper/sticky/attack_hand() + . = ..() + if(!istype(loc, /turf)) + reset_persistence_tracking() + +/obj/item/weapon/paper/sticky/afterattack(var/A, var/mob/user, var/flag, var/params) + + if(!in_range(user, A) || istype(A, /obj/machinery/door) || icon_state == "scrap") + return + + var/turf/target_turf = get_turf(A) + var/turf/source_turf = get_turf(user) + + var/dir_offset = 0 + if(target_turf != source_turf) + dir_offset = get_dir(source_turf, target_turf) + if(!(dir_offset in GLOB.cardinal)) + to_chat(user, SPAN_WARNING("You cannot reach that from here.")) + return + + if(user.unEquip(src, source_turf)) + SSpersistence.track_value(src, /datum/persistent/paper/sticky) + if(params) + var/list/mouse_control = params2list(params) + if(mouse_control["icon-x"]) + pixel_x = text2num(mouse_control["icon-x"]) - 16 + if(dir_offset & EAST) + pixel_x += 32 + else if(dir_offset & WEST) + pixel_x -= 32 + if(mouse_control["icon-y"]) + pixel_y = text2num(mouse_control["icon-y"]) - 16 + if(dir_offset & NORTH) + pixel_y += 32 + else if(dir_offset & SOUTH) + pixel_y -= 32 \ No newline at end of file diff --git a/code/modules/persistence/datum/datum_filth.dm b/code/modules/persistence/datum/datum_filth.dm new file mode 100644 index 0000000000..f41fffcfb7 --- /dev/null +++ b/code/modules/persistence/datum/datum_filth.dm @@ -0,0 +1,35 @@ +/datum/persistent/filth + name = "filth" + tokens_per_line = 5 + entries_expire_at = 5 + +/datum/persistent/filth/LabelTokens(var/list/tokens) + var/list/labelled_tokens = ..() + labelled_tokens["path"] = text2path(tokens[LAZYLEN(labelled_tokens)+1]) + return labelled_tokens + +/datum/persistent/filth/IsValidEntry(var/atom/entry) + . = ..() && entry.invisibility == 0 + +/datum/persistent/filth/CheckTokenSanity(var/list/tokens) + return ..() && ispath(tokens["path"]) + +/datum/persistent/filth/CheckTurfContents(var/turf/T, var/list/tokens) + var/_path = tokens["path"] + return (locate(_path) in T) ? FALSE : TRUE + +/datum/persistent/filth/CreateEntryInstance(var/turf/creating, var/list/tokens) + var/_path = tokens["path"] + new _path(creating, tokens["age"]+1) + +/datum/persistent/filth/GetEntryAge(var/atom/entry) + var/obj/effect/decal/cleanable/filth = entry + return filth.age + +/datum/persistent/filth/proc/GetEntryPath(var/atom/entry) + var/obj/effect/decal/cleanable/filth = entry + return filth.generic_filth ? /obj/effect/decal/cleanable/filth : filth.type + +/datum/persistent/filth/CompileEntry(var/atom/entry) + . = ..() + LAZYADD(., "[GetEntryPath(entry)]") \ No newline at end of file diff --git a/code/modules/persistence/datum/datum_graffiti.dm b/code/modules/persistence/datum/datum_graffiti.dm new file mode 100644 index 0000000000..b70b7f9475 --- /dev/null +++ b/code/modules/persistence/datum/datum_graffiti.dm @@ -0,0 +1,51 @@ +/datum/persistent/graffiti + name = "graffiti" + tokens_per_line = 6 + entries_expire_at = 50 + has_admin_data = TRUE + +/datum/persistent/graffiti/LabelTokens(var/list/tokens) + var/list/labelled_tokens = ..() + var/entries = LAZYLEN(labelled_tokens) + labelled_tokens["author"] = tokens[entries+1] + labelled_tokens["message"] = tokens[entries+2] + return labelled_tokens + +/datum/persistent/graffiti/GetValidTurf(var/turf/T, var/list/tokens) + var/turf/checking_turf = ..() + if(istype(checking_turf) && checking_turf.can_engrave()) + return checking_turf + +/datum/persistent/graffiti/CheckTurfContents(var/turf/T, var/list/tokens) + var/too_much_graffiti = 0 + for(var/obj/effect/decal/writing/W in .) + too_much_graffiti++ + if(too_much_graffiti >= 5) + return FALSE + return TRUE + +/datum/persistent/graffiti/CreateEntryInstance(var/turf/creating, var/list/tokens) + new /obj/effect/decal/writing(creating, tokens["age"]+1, tokens["message"], tokens["author"]) + +/datum/persistent/graffiti/IsValidEntry(var/atom/entry) + . = ..() + if(.) + var/turf/T = entry.loc + . = T.can_engrave() + +/datum/persistent/graffiti/GetEntryAge(var/atom/entry) + var/obj/effect/decal/writing/save_graffiti = entry + return save_graffiti.graffiti_age + +/datum/persistent/graffiti/CompileEntry(var/atom/entry, var/write_file) + . = ..() + var/obj/effect/decal/writing/save_graffiti = entry + LAZYADD(., "[save_graffiti.author ? save_graffiti.author : "unknown"]") + LAZYADD(., "[save_graffiti.message]") + +/datum/persistent/graffiti/GetAdminDataStringFor(var/thing, var/can_modify, var/mob/user) + var/obj/effect/decal/writing/save_graffiti = thing + if(can_modify) + . = "
[save_graffiti.message][save_graffiti.author]Destroy[save_graffiti.message][save_graffiti.author][paper.info][paper.name][paper.last_modified_ckey]Destroy[paper.info][paper.name][paper.last_modified_ckey]
[capitalize(name)]


[thing]Destroy[thing]
") + for(var/thing in notices) + LAZYADD(dat, "") + var/datum/browser/popup = new(user, "noticeboard-\ref[src]", "Noticeboard") + popup.set_content(jointext(dat, null)) + popup.open() + +/obj/structure/noticeboard/Topic(var/mob/user, var/list/href_list) + if(href_list["read"]) + var/obj/item/weapon/paper/P = locate(href_list["read"]) + if(P && P.loc == src) + P.show_content(user) + . = TOPIC_HANDLED + + if(href_list["look"]) + var/obj/item/weapon/photo/P = locate(href_list["look"]) + if(P && P.loc == src) + P.show(user) + . = TOPIC_HANDLED + + if(href_list["remove"]) + remove_paper(locate(href_list["remove"])) + add_fingerprint(user) + . = TOPIC_REFRESH + + if(href_list["write"]) + if((usr.stat || usr.restrained())) //For when a player is handcuffed while they have the notice window open + return + var/obj/item/P = locate(href_list["write"]) + if((P && P.loc == src)) //ifthe paper's on the board + var/mob/living/M = usr + if(istype(M)) + var/obj/item/weapon/pen/E = M.get_type_in_hands(/obj/item/weapon/pen) + if(E) + add_fingerprint(M) + P.attackby(E, usr) + else + to_chat(M, "You'll need something to write with!") + . = TOPIC_REFRESH + + if(. == TOPIC_REFRESH) + interact(user) + +/obj/structure/noticeboard/anomaly + notices = 5 + icon_state = "nboard05" + +/obj/structure/noticeboard/anomaly/New() + var/obj/item/weapon/paper/P = new() + P.name = "Memo RE: proper analysis procedure" + P.info = "
We keep test dummies in pens here for a reason, so standard procedure should be to activate newfound alien artifacts and place the two in close proximity. Promising items I might even approve monkey testing on." + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Memo RE: materials gathering" + P.info = "Corasang,
the hands-on approach to gathering our samples may very well be slow at times, but it's safer than allowing the blundering miners to roll willy-nilly over our dig sites in their mechs, destroying everything in the process. And don't forget the escavation tools on your way out there!
- R.W" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Memo RE: ethical quandaries" + P.info = "Darion-

I don't care what his rank is, our business is that of science and knowledge - questions of moral application do not come into this. Sure, so there are those who would employ the energy-wave particles my modified device has managed to abscond for their own personal gain, but I can hardly see the practical benefits of some of these artifacts our benefactors left behind. Ward--" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "READ ME! Before you people destroy any more samples" + P.info = "how many times do i have to tell you people, these xeno-arch samples are del-i-cate, and should be handled so! careful application of a focussed, concentrated heat or some corrosive liquids should clear away the extraneous carbon matter, while application of an energy beam will most decidedly destroy it entirely - like someone did to the chemical dispenser! W, the one who signs your paychecks" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P + + P = new() + P.name = "Reminder regarding the anomalous material suits" + P.info = "Do you people think the anomaly suits are cheap to come by? I'm about a hair trigger away from instituting a log book for the damn things. Only wear them if you're going out for a dig, and for god's sake don't go tramping around in them unless you're field testing something, R" + P.stamped = list(/obj/item/weapon/stamp/rd) + P.overlays = list("paper_stamped_rd") + src.contents += P \ No newline at end of file diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index 72fc9f2cf8..c03fe9ebe7 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -697,7 +697,7 @@ GLOBAL_LIST_EMPTY(apcs) else if(hacker) to_chat(user, "Access denied.") else - if(src.allowed(usr) && !isWireCut(APC_WIRE_IDSCAN)) + if(src.allowed(usr) && !wires.is_cut(WIRE_IDSCAN)) locked = !locked to_chat(user, "You [ locked ? "lock" : "unlock"] the APC interface.") update_icon() @@ -726,9 +726,9 @@ GLOBAL_LIST_EMPTY(apcs) return 1 /obj/machinery/power/apc/blob_act() - if(!wires.IsAllCut()) + if(!wires.is_all_cut()) wiresexposed = TRUE - wires.CutAll() + wires.cut_all() update_icon() /obj/machinery/power/apc/attack_hand(mob/user) @@ -747,7 +747,7 @@ GLOBAL_LIST_EMPTY(apcs) user.visible_message("[user.name] slashes at the [src.name]!", "You slash at the [src.name]!") playsound(src, 'sound/weapons/slash.ogg', 100, 1) - var/allcut = wires.IsAllCut() + var/allcut = wires.is_all_cut() if(beenhit >= pick(3, 4) && wiresexposed != 1) wiresexposed = 1 @@ -755,7 +755,7 @@ GLOBAL_LIST_EMPTY(apcs) src.visible_message("The [src.name]'s cover flies open, exposing the wires!") else if(wiresexposed == 1 && allcut == 0) - wires.CutAll() + wires.cut_all() src.update_icon() src.visible_message("The [src.name]'s wires are shredded!") else @@ -878,10 +878,6 @@ GLOBAL_LIST_EMPTY(apcs) // to_world("[area.power_equip]") area.power_change() -/obj/machinery/power/apc/proc/isWireCut(var/wireIndex) - return wires.IsIndexCut(wireIndex) - - /obj/machinery/power/apc/proc/can_use(mob/user as mob, var/loud = 0) //used by attack_hand() and Topic() if(!user.client) return 0 diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index b8281aa867..bcb72061f4 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -91,17 +91,17 @@ return if(href_list["togglep"]) - if(!wires.IsIndexCut(PARTICLE_TOGGLE_WIRE)) + if(!wires.is_cut(WIRE_PARTICLE_POWER)) toggle_power() else if(href_list["scan"]) part_scan() else if(href_list["strengthup"]) - if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE)) + if(!wires.is_cut(WIRE_PARTICLE_STRENGTH)) add_strength() else if(href_list["strengthdown"]) - if(!wires.IsIndexCut(PARTICLE_STRENGTH_WIRE)) + if(!wires.is_cut(WIRE_PARTICLE_STRENGTH)) remove_strength() updateDialog() diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 47c774a70b..4d54410eba 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -283,6 +283,34 @@ trans_to(target, amount, multiplier, copy) +/datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1) + if (!target) + return + + var/datum/reagent/transfering_reagent = get_reagent(rtype) + + if (istype(target, /atom)) + var/atom/A = target + if (!A.reagents || !A.simulated) + return + + amount = min(amount, transfering_reagent.volume) + + if(!amount) + return + + + var/datum/reagents/F = new /datum/reagents(amount) + var/tmpdata = get_data(rtype) + F.add_reagent(rtype, amount, tmpdata) + remove_reagent(rtype, amount) + + + if (istype(target, /atom)) + return F.trans_to(target, amount) // Let this proc check the atom's type + else if (istype(target, /datum/reagents)) + return F.trans_to_holder(target, amount) + /datum/reagents/proc/trans_id_to(var/atom/target, var/id, var/amount = 1) if (!target || !target.reagents) return @@ -396,4 +424,62 @@ /* Atom reagent creation - use it all the time */ /atom/proc/create_reagents(var/max_vol) - reagents = new/datum/reagents(max_vol, src) \ No newline at end of file + reagents = new/datum/reagents(max_vol, src) + +// Aurora Cooking Port +/datum/reagents/proc/get_reagent(var/id) // Returns reference to reagent matching passed ID + for(var/datum/reagent/A in reagent_list) + if (A.id == id) + return A + + return null + +//Spreads the contents of this reagent holder all over the vicinity of the target turf. +/datum/reagents/proc/splash_area(var/turf/epicentre, var/range = 3, var/portion = 1.0, var/multiplier = 1, var/copy = 0) + var/list/things = dview(range, epicentre, INVISIBILITY_LIGHTING) + var/list/turfs = list() + for (var/turf/T in things) + turfs += T + if (!turfs.len) + return//Nowhere to splash to, somehow + //Create a temporary holder to hold all the amount that will be spread + var/datum/reagents/R = new /datum/reagents(total_volume * portion * multiplier) + trans_to_holder(R, total_volume * portion, multiplier, copy) + //The exact amount that will be given to each turf + var/turfportion = R.total_volume / turfs.len + for (var/turf/T in turfs) + var/datum/reagents/TR = new /datum/reagents(turfportion) + R.trans_to_holder(TR, turfportion, 1, 0) + TR.splash_turf(T) + qdel(R) + + +//Spreads the contents of this reagent holder all over the target turf, dividing among things in it. +//50% is divided between mobs, 20% between objects, and whatever is left on the turf itself +/datum/reagents/proc/splash_turf(var/turf/T, var/amount = null, var/multiplier = 1, var/copy = 0) + if (isnull(amount)) + amount = total_volume + else + amount = min(amount, total_volume) + if (amount <= 0) + return + var/list/mobs = list() + for (var/mob/M in T) + mobs += M + var/list/objs = list() + for (var/obj/O in T) + objs += O + if (objs.len) + var/objportion = (amount * 0.2) / objs.len + for (var/o in objs) + var/obj/O = o + trans_to(O, objportion, multiplier, copy) + amount = min(amount, total_volume) + if (mobs.len) + var/mobportion = (amount * 0.5) / mobs.len + for (var/m in mobs) + var/mob/M = m + trans_to(M, mobportion, multiplier, copy) + trans_to(T, total_volume, multiplier, copy) + if (total_volume <= 0) + qdel(src) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index d528f7bda5..a70f477779 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -50,6 +50,192 @@ M.adjust_nutrition(nutriment_factor * removed) // For hunger and fatness M.add_chemical_effect(CE_BLOODRESTORE, 4 * removed) +// Aurora Cooking Port Insertion Begin + +/* + Coatings are used in cooking. Dipping food items in a reagent container with a coating in it + allows it to be covered in that, which will add a masked overlay to the sprite. + Coatings have both a raw and a cooked image. Raw coating is generally unhealthy + Generally coatings are intended for deep frying foods +*/ +/datum/reagent/nutriment/coating + nutriment_factor = 6 //Less dense than the food itself, but coatings still add extra calories + var/messaged = 0 + var/icon_raw + var/icon_cooked + var/coated_adj = "coated" + var/cooked_name = "coating" + +/datum/reagent/nutriment/coating/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + + //We'll assume that the batter isnt going to be regurgitated and eaten by someone else. Only show this once + if (data["cooked"] != 1) + if (!messaged) + to_chat(M, "Ugh, this raw [name] tastes disgusting.") + nutriment_factor *= 0.5 + messaged = 1 + + //Raw coatings will sometimes cause vomiting + if (prob(1)) + M.vomit() + ..() + +/datum/reagent/nutriment/coating/initialize_data(var/newdata) // Called when the reagent is created. + ..() + if (!data) + data = list() + else + if (isnull(data["cooked"])) + data["cooked"] = 0 + return + data["cooked"] = 0 + if (holder && holder.my_atom && istype(holder.my_atom,/obj/item/weapon/reagent_containers/food/snacks)) + data["cooked"] = 1 + name = cooked_name + + //Batter which is part of objects at compiletime spawns in a cooked state + + +//Handles setting the temperature when oils are mixed +/datum/reagent/nutriment/coating/mix_data(var/newdata, var/newamount) + if (!data) + data = list() + + data["cooked"] = newdata["cooked"] + +/datum/reagent/nutriment/coating/batter + name = "batter mix" + cooked_name = "batter" + id = "batter" + color = "#f5f4e9" + reagent_state = LIQUID + icon_raw = "batter_raw" + icon_cooked = "batter_cooked" + coated_adj = "battered" + +/datum/reagent/nutriment/coating/beerbatter + name = "beer batter mix" + cooked_name = "beer batter" + id = "beerbatter" + color = "#f5f4e9" + reagent_state = LIQUID + icon_raw = "batter_raw" + icon_cooked = "batter_cooked" + coated_adj = "beer-battered" + +/datum/reagent/nutriment/coating/beerbatter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + ..() + M.add_chemical_effect(CE_ALCOHOL, 0.02) //Very slightly alcoholic + +//========================= +//Fats +//========================= +/datum/reagent/nutriment/triglyceride + name = "triglyceride" + id = "triglyceride" + description = "More commonly known as fat, the third macronutrient, with over double the energy content of carbs and protein" + + reagent_state = SOLID + nutriment_factor = 27//The caloric ratio of carb/protein/fat is 4:4:9 + color = "#CCCCCC" + +/datum/reagent/nutriment/triglyceride/oil + //Having this base class incase we want to add more variants of oil + name = "Oil" + id = "oil" + description = "Oils are liquid fats." + reagent_state = LIQUID + color = "#c79705" + touch_met = 1.5 + var/lastburnmessage = 0 + +/datum/reagent/nutriment/triglyceride/oil/touch_turf(var/turf/simulated/T) + if(!istype(T)) + return + + var/hotspot = (locate(/obj/fire) in T) + if(hotspot && !istype(T, /turf/space)) + var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) + lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) + lowertemp.react() + T.assume_air(lowertemp) + qdel(hotspot) + + if(volume >= 3) + T.wet_floor(2) + +/datum/reagent/nutriment/triglyceride/oil/initialize_data(var/newdata) // Called when the reagent is created. + ..() + if (!data) + data = list("temperature" = T20C) + +//Handles setting the temperature when oils are mixed +/datum/reagent/nutriment/triglyceride/oil/mix_data(var/newdata, var/newamount) + + if (!data) + data = list() + + var/ouramount = volume - newamount + if (ouramount <= 0 || !data["temperature"] || !volume) + //If we get here, then this reagent has just been created, just copy the temperature exactly + data["temperature"] = newdata["temperature"] + + else + //Our temperature is set to the mean of the two mixtures, taking volume into account + var/total = (data["temperature"] * ouramount) + (newdata["temperature"] * newamount) + data["temperature"] = total / volume + + return ..() + + +//Calculates a scaling factor for scalding damage, based on the temperature of the oil and creature's heat resistance +/datum/reagent/nutriment/triglyceride/oil/proc/heatdamage(var/mob/living/carbon/M) + var/threshold = 360//Human heatdamage threshold + var/datum/species/S = M.get_species(1) + if (S && istype(S)) + threshold = S.heat_level_1 + + //If temperature is too low to burn, return a factor of 0. no damage + if (data["temperature"] < threshold) + return 0 + + //Step = degrees above heat level 1 for 1.0 multiplier + var/step = 60 + if (S && istype(S)) + step = (S.heat_level_2 - S.heat_level_1)*1.5 + + . = data["temperature"] - threshold + . /= step + . = min(., 2.5)//Cap multiplier at 2.5 + +/datum/reagent/nutriment/triglyceride/oil/affect_touch(var/mob/living/carbon/M, var/alien, var/removed) + var/dfactor = heatdamage(M) + if (dfactor) + M.take_organ_damage(0, removed * 1.5 * dfactor) + data["temperature"] -= (6 * removed) / (1 + volume*0.1)//Cools off as it burns you + if (lastburnmessage+100 < world.time ) + to_chat(M, "Searing hot oil burns you, wash it off quick!") + lastburnmessage = world.time + +/datum/reagent/nutriment/triglyceride/oil/corn + name = "Corn Oil" + id = "cornoil" + description = "An oil derived from various types of corn." + taste_description = "oil" + taste_mult = 0.1 + reagent_state = LIQUID + +/datum/reagent/nutriment/triglyceride/oil/peanut + name = "Peanut Oil" + id = "peanutoil" + description = "An oil derived from various types of nuts." + taste_description = "nuts" + taste_mult = 0.3 + nutriment_factor = 15 + color = "#4F3500" + +// Aurora Cooking Port Insertion End + /datum/reagent/nutriment/glucose name = "Glucose" id = "glucose" @@ -85,6 +271,24 @@ return ..() +/datum/reagent/nutriment/protein/tofu + name = "tofu protein" + id = "tofu" + color = "#fdffa8" + taste_description = "tofu" + +/datum/reagent/nutriment/protein/seafood + name = "seafood protein" + id = "seafood" + color = "#f5f4e9" + taste_description = "fish" + +/datum/reagent/nutriment/protein/cheese // Also bad for skrell. + name = "cheese" + id = "cheese" + color = "#EDB91F" + taste_description = "cheese" + /datum/reagent/nutriment/protein/egg // Also bad for skrell. name = "egg yolk" id = "egg" @@ -257,56 +461,6 @@ nutriment_factor = 1 color = "#801E28" -/datum/reagent/nutriment/cornoil - name = "Corn Oil" - id = "cornoil" - description = "An oil derived from various types of corn." - taste_description = "slime" - taste_mult = 0.1 - reagent_state = LIQUID - nutriment_factor = 20 - color = "#302000" - -/datum/reagent/nutriment/cornoil/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - - var/hotspot = (locate(/obj/fire) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - if(volume >= 3) - T.wet_floor() - -/datum/reagent/nutriment/peanutoil - name = "Peanut Oil" - id = "peanutoil" - description = "An oil derived from various types of nuts." - taste_description = "nuts" - taste_mult = 0.3 - reagent_state = LIQUID - nutriment_factor = 15 - color = "#4F3500" - -/datum/reagent/nutriment/peanutoil/touch_turf(var/turf/simulated/T) - if(!istype(T)) - return - - var/hotspot = (locate(/obj/fire) in T) - if(hotspot && !istype(T, /turf/space)) - var/datum/gas_mixture/lowertemp = T.remove_air(T:air:total_moles) - lowertemp.temperature = max(min(lowertemp.temperature-2000, lowertemp.temperature / 2), 0) - lowertemp.react() - T.assume_air(lowertemp) - qdel(hotspot) - - if(volume >= 5) - T.wet_floor() - /datum/reagent/nutriment/peanutbutter name = "Peanut Butter" id = "peanutbutter" @@ -430,6 +584,22 @@ reagent_state = LIQUID color = "#365E30" overdose = REAGENTS_OVERDOSE + +//SYNNONO MEME FOODS EXPANSION - Credit to Synnono + +/datum/reagent/spacespice + name = "Space Spice" + id = "spacespice" + description = "An exotic blend of spices for cooking. Definitely not worms." + reagent_state = SOLID + color = "#e08702" + +/datum/reagent/browniemix + name = "Brownie Mix" + id = "browniemix" + description = "A dry mix for making delicious brownies." + reagent_state = SOLID + color = "#441a03" /datum/reagent/frostoil name = "Frost Oil" @@ -475,6 +645,11 @@ /datum/reagent/capsaicin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) return + if(alien == IS_ALRAUNE) // VOREStation Edit: It wouldn't affect plants that much. + if(prob(5)) + to_chat(M, "You feel a pleasant sensation in your mouth.") + M.bodytemperature += rand(10, 25) + return if(ishuman(M)) var/mob/living/carbon/human/H = M if(!H.can_feel_pain()) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index b2591d992f..8074d45972 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -2619,3 +2619,52 @@ required_reagents = list("radium" = 1, "spidertoxin" = 1, "sifsap" = 1) catalysts = list("sifsap" = 10) result_amount = 2 + +/* +==================== + Aurora Food +==================== +*/ +/datum/chemical_reaction/dough + inhibitors = list("water" = 1, "beer" = 1) //To prevent it messing with batter recipes + +/datum/chemical_reaction/coating/batter + name = "Batter" + id = "batter" + result = "batter" + required_reagents = list("egg" = 3, "flour" = 10, "water" = 5, "sodiumchloride" = 2) + result_amount = 20 + +/datum/chemical_reaction/coating/beerbatter + name = "Beer Batter" + id = "beerbatter" + result = "beerbatter" + required_reagents = list("egg" = 3, "flour" = 10, "beer" = 5, "sodiumchloride" = 2) + result_amount = 20 + +/datum/chemical_reaction/browniemix + name = "Brownie Mix" + id = "browniemix" + result = "browniemix" + required_reagents = list("flour" = 5, "coco" = 5, "sugar" = 5) + result_amount = 15 + +/datum/chemical_reaction/butter + name = "Butter" + id = "butter" + result = null + required_reagents = list("cream" = 20, "sodiumchloride" = 1) + result_amount = 1 + +/datum/chemical_reaction/butter/on_reaction(var/datum/reagents/holder, var/created_volume) + var/location = get_turf(holder.my_atom) + for(var/i = 1, i <= created_volume, i++) + new /obj/item/weapon/reagent_containers/food/snacks/spreads/butter(location) + return + +/datum/chemical_reaction/browniemix + name = "Brownie Mix" + id = "browniemix" + result = "browniemix" + required_reagents = list("flour" = 5, "coco" = 5, "sugar" = 5) + result_amount = 15 \ No newline at end of file diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index afe42f1c10..222e16bc88 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -433,3 +433,27 @@ obj/structure/reagent_dispensers/beerkeg/vat /obj/structure/reagent_dispensers/acid/Initialize() . = ..() reagents.add_reagent("sacid", 1000) + +//Cooking oil refill tank +/obj/structure/reagent_dispensers/cookingoil + name = "cooking oil tank" + desc = "A fifty-litre tank of commercial-grade corn oil, intended for use in large scale deep fryers. Store in a cool, dark place" + icon = 'icons/obj/objects.dmi' + icon_state = "oiltank" + amount_per_transfer_from_this = 120 + +/obj/structure/reagent_dispensers/cookingoil/New() + ..() + reagents.add_reagent("cornoil",5000) + +/obj/structure/reagent_dispensers/cookingoil/bullet_act(var/obj/item/projectile/Proj) + if(Proj.get_structure_damage()) + explode() + +/obj/structure/reagent_dispensers/cookingoil/ex_act() + explode() + +/obj/structure/reagent_dispensers/cookingoil/proc/explode() + reagents.splash_area(get_turf(src), 3) + visible_message(span("danger", "The [src] bursts open, spreading oil all over the area.")) + qdel(src) diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index e8eaa809fe..fa19b46e1f 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -212,7 +212,6 @@ // leave the disposal /obj/machinery/disposal/proc/go_out(mob/user) - if (user.client) user.client.eye = user.client.mob user.client.perspective = MOB_PERSPECTIVE @@ -222,11 +221,11 @@ // ai as human but can't flush /obj/machinery/disposal/attack_ai(mob/user as mob) - interact(user, 1) + add_hiddenprint(user) + tgui_interact(user) // human interact with machine /obj/machinery/disposal/attack_hand(mob/user as mob) - if(stat & BROKEN) return @@ -236,91 +235,147 @@ // Clumsy folks can only flush it. if(user.IsAdvancedToolUser(1)) - interact(user, 0) + tgui_interact(user) else flush = !flush update() return // user interaction -/obj/machinery/disposal/interact(mob/user, var/ai=0) +/obj/machinery/disposal/tgui_interact(mob/user, datum/tgui/ui = null) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "DisposalBin") + ui.open() - src.add_fingerprint(user) - if(stat & BROKEN) - user.unset_machine() +/obj/machinery/disposal/tgui_data(mob/user) + var/list/data = list() + + data["isAI"] = isAI(user) + data["flushing"] = flush + data["mode"] = mode + data["pressure"] = round(clamp(100* air_contents.return_pressure() / (SEND_PRESSURE), 0, 100),1) + + return data + +/obj/machinery/disposal/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + if(..()) + return + + if(usr.loc == src) + to_chat(usr, "You cannot reach the controls from inside.") return - var/dat = "Waste Disposal UnitWaste Disposal Unit
" + if(mode==-1 && action != "eject") // If the mode is -1, only allow ejection + to_chat(usr, "The disposal units power is disabled.") + return + + if(stat & BROKEN) + return + + add_fingerprint(usr) - if(!ai) // AI can't pull flush handle - if(flush) - dat += "Disposal handle: Disengage Engaged" - else - dat += "Disposal handle: Disengaged Engage" + if(flushing) + return + + if(isturf(loc)) + if(action == "pumpOn") + mode = 1 + update() + if(action == "pumpOff") + mode = 0 + update() - dat += "

Eject contents
" + if(!issilicon(usr)) + if(action == "engageHandle") + flush = 1 + update() + if(action == "disengageHandle") + flush = 0 + update() - if(mode <= 0) - dat += "Pump: Off On
" - else if(mode == 1) - dat += "Pump: Off On (pressurizing)
" - else - dat += "Pump: Off On (idle)
" + if(action == "eject") + eject() + + return TRUE + - var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE) + // src.add_fingerprint(user) + // if(stat & BROKEN) + // user.unset_machine() + // return - dat += "Pressure: [round(per, 1)]%
" + // var/dat = "Waste Disposal UnitWaste Disposal Unit
" + + // if(!ai) // AI can't pull flush handle + // if(flush) + // dat += "Disposal handle: Disengage Engaged" + // else + // dat += "Disposal handle: Disengaged Engage" + + // dat += "

Eject contents
" + + // if(mode <= 0) + // dat += "Pump: Off On
" + // else if(mode == 1) + // dat += "Pump: Off On (pressurizing)
" + // else + // dat += "Pump: Off On (idle)
" + + // var/per = 100* air_contents.return_pressure() / (SEND_PRESSURE) + + // dat += "Pressure: [round(per, 1)]%
" - user.set_machine(src) - user << browse(dat, "window=disposal;size=360x170") - onclose(user, "disposal") + // user.set_machine(src) + // user << browse(dat, "window=disposal;size=360x170") + // onclose(user, "disposal") // handle machine interaction -/obj/machinery/disposal/Topic(href, href_list) - if(usr.loc == src) - to_chat(usr, "You cannot reach the controls from inside.") - return +// /obj/machinery/disposal/Topic(href, href_list) +// if(usr.loc == src) +// to_chat(usr, "You cannot reach the controls from inside.") +// return - if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1 - to_chat(usr, "The disposal units power is disabled.") - return - if(..()) - return +// if(mode==-1 && !href_list["eject"]) // only allow ejecting if mode is -1 +// to_chat(usr, "The disposal units power is disabled.") +// return +// if(..()) +// return - if(stat & BROKEN) - return - if(usr.stat || usr.restrained() || src.flushing) - return +// if(stat & BROKEN) +// return +// if(usr.stat || usr.restrained() || src.flushing) +// return - if(istype(src.loc, /turf)) - usr.set_machine(src) +// if(istype(src.loc, /turf)) +// usr.set_machine(src) - if(href_list["close"]) - usr.unset_machine() - usr << browse(null, "window=disposal") - return +// if(href_list["close"]) +// usr.unset_machine() +// usr << browse(null, "window=disposal") +// return - if(href_list["pump"]) - if(text2num(href_list["pump"])) - mode = 1 - else - mode = 0 - update() +// if(href_list["pump"]) +// if(text2num(href_list["pump"])) +// mode = 1 +// else +// mode = 0 +// update() - if(!isAI(usr)) - if(href_list["handle"]) - flush = text2num(href_list["handle"]) - update() +// if(!isAI(usr)) +// if(href_list["handle"]) +// flush = text2num(href_list["handle"]) +// update() - if(href_list["eject"]) - eject() - else - usr << browse(null, "window=disposal") - usr.unset_machine() - return - return +// if(href_list["eject"]) +// eject() +// else +// usr << browse(null, "window=disposal") +// usr.unset_machine() +// return +// return // eject the contents of the disposal unit /obj/machinery/disposal/proc/eject() diff --git a/code/modules/research/designs/circuits/circuits.dm b/code/modules/research/designs/circuits/circuits.dm index 4717e14bdc..28e76ceac9 100644 --- a/code/modules/research/designs/circuits/circuits.dm +++ b/code/modules/research/designs/circuits/circuits.dm @@ -583,13 +583,48 @@ CIRCUITS BELOW req_tech = list(TECH_DATA = 4, TECH_BIO = 3) build_path = /obj/item/weapon/circuitboard/aicore sort_string = "XAAAA" +// Cooking Appliances +/datum/design/circuit/microwave + name = "microwave board" + id = "microwave_board" + req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/microwave + sort_string = "HACAM" + +/datum/design/circuit/oven + name = "oven board" + id = "oven_board" + req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/oven + sort_string = "HACAN" + +/datum/design/circuit/fryer + name = "deep fryer board" + id = "fryer_board" + req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/fryer + sort_string = "HACAO" + +/datum/design/circuit/cerealmaker + name = "cereal maker board" + id = "cerealmaker_board" + req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/cerealmaker + sort_string = "HACAP" + +/datum/design/circuit/candymaker + name = "candy machine board" + id = "candymachine_board" + req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2) + build_path = /obj/item/weapon/circuitboard/candymachine + sort_string = "HACAQ" /datum/design/circuit/microwave/advanced name = "deluxe microwave" id = "deluxe microwave" req_tech = list(TECH_DATA = 5, TECH_ENGINEERING = 5, TECH_BLUESPACE = 4) build_path = /obj/item/weapon/circuitboard/microwave/advanced - sort_string = "MAAAC" + sort_string = "HACAA" /datum/design/circuit/shield_generator name = "shield generator" diff --git a/code/modules/tgui/external.dm b/code/modules/tgui/external.dm new file mode 100644 index 0000000000..7e75f9343c --- /dev/null +++ b/code/modules/tgui/external.dm @@ -0,0 +1,191 @@ +/** + * tgui external + * + * Contains all external tgui declarations. + */ + +/** + * public + * + * Used to open and update UIs. + * If this proc is not implemented properly, the UI will not update correctly. + * + * required user mob The mob who opened/is using the UI. + * optional ui datum/tgui The UI to be updated, if it exists. + */ + +/datum/proc/tgui_interact(mob/user, datum/tgui/ui = null) + return FALSE // Not implemented. + +/** + * public + * + * Data to be sent to the UI. + * This must be implemented for a UI to work. + * + * required user mob The mob interacting with the UI. + * + * return list Data to be sent to the UI. + */ +/datum/proc/tgui_data(mob/user) + return list() // Not implemented. + +/** + * public + * + * Static Data to be sent to the UI. + * Static data differs from normal data in that it's large data that should be + * sent infrequently. This is implemented optionally for heavy uis that would + * be sending a lot of redundant data frequently. Gets squished into one + * object on the frontend side, but the static part is cached. + * + * required user mob The mob interacting with the UI. + * + * return list Statuic Data to be sent to the UI. + */ +/datum/proc/tgui_static_data(mob/user) + return list() + +/** + * public + * + * Forces an update on static data. Should be done manually whenever something + * happens to change static data. + * + * required user the mob currently interacting with the ui + * optional ui ui to be updated + */ +/datum/proc/update_tgui_static_data(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + // If there was no ui to update, there's no static data to update either. + if(!ui) + ui = SStgui.get_open_ui(user, src) + if(ui) + ui.send_full_update() + +/** + * public + * + * Called on a UI when the UI receieves a href. + * Think of this as Topic(). + * + * required action string The action/button that has been invoked by the user. + * required params list A list of parameters attached to the button. + * + * return bool If the UI should be updated or not. + */ +/datum/proc/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + // If UI is not interactive or usr calling Topic is not the UI user, bail. + if(!ui || ui.status != STATUS_INTERACTIVE) + return TRUE + +/** + * public + * + * Called on an object when a tgui object is being created, allowing you to + * push various assets to tgui, for examples spritesheets. + * + * return list List of asset datums or file paths. + */ +/datum/proc/ui_assets(mob/user) + return list() + +/** + * private + * + * The UI's host object (usually src_object). + * This allows modules/datums to have the UI attached to them, + * and be a part of another object. + */ +/datum/proc/tgui_host(mob/user) + return src // Default src. + +/** + * private + * + * The UI's state controller to be used for created uis + * This is a proc over a var for memory reasons + */ +/datum/proc/tgui_state(mob/user) + return GLOB.tgui_default_state + +/** + * global + * + * Associative list of JSON-encoded shared states that were set by + * tgui clients. + */ + +/datum/var/list/tgui_shared_states + +/** + * global + * + * Tracks open UIs for a user. + */ +/mob/var/list/tgui_open_uis = list() + +/** + * global + * + * Tracks open windows for a user. + */ +/client/var/list/tgui_windows = list() + +/** + * public + * + * Called on a UI's object when the UI is closed, not to be confused with + * client/verb/uiclose(), which closes the ui window + */ +/datum/proc/tgui_close(mob/user) + +/** + * verb + * + * Called by UIs when they are closed. + * Must be a verb so winset() can call it. + * + * required uiref ref The UI that was closed. + */ +/client/verb/tguiclose(window_id as text) + // Name the verb, and hide it from the user panel. + set name = "uiclose" + set hidden = TRUE + + var/mob/user = src && src.mob + if(!user) + return + // Close all tgui datums based on window_id. + SStgui.force_close_window(user, window_id) + +/** + * Middleware for /client/Topic. + * + * return bool Whether the topic is passed (TRUE), or cancelled (FALSE). + */ +/proc/tgui_Topic(href_list) + // Skip non-tgui topics + if(!href_list["tgui"]) + return TRUE + var/type = href_list["type"] + // Unconditionally collect tgui logs + if(type == "log") + log_tgui(usr, href_list["message"]) + // Locate window + var/window_id = href_list["window_id"] + var/datum/tgui_window/window + if(window_id) + window = usr.client.tgui_windows[window_id] + if(!window) + log_tgui(usr, "Error: Couldn't find the window datum, force closing.") + SStgui.force_close_window(usr, window_id) + return FALSE + // Decode payload + var/payload + if(href_list["payload"]) + payload = json_decode(href_list["payload"]) + // Pass message to window + if(window) + window.on_message(type, payload, href_list) + return FALSE diff --git a/code/modules/tgui/modules/_base.dm b/code/modules/tgui/modules/_base.dm new file mode 100644 index 0000000000..23b12b8bd1 --- /dev/null +++ b/code/modules/tgui/modules/_base.dm @@ -0,0 +1,46 @@ +/* +TGUI MODULES + +This allows for datum-based TGUIs that can be hooked into objects. +This is useful for things such as the power monitor, which needs to exist on a physical console in the world, but also as a virtual device the AI can use + +Code is pretty much ripped verbatim from nano modules, but with un-needed stuff removed +*/ +/datum/tgui_module + var/name + var/datum/host + var/list/using_access + + var/tgui_id + +/datum/tgui_module/New(var/host) + src.host = host + +/datum/tgui_module/tgui_host() + return host ? host : src + +/datum/tgui_module/tgui_close(mob/user) + if(host) + host.tgui_close(user) + +/datum/tgui_module/proc/check_access(mob/user, access) + if(!access) + return 1 + + if(using_access) + if(access in using_access) + return 1 + else + return 0 + + if(!istype(user)) + return 0 + + var/obj/item/weapon/card/id/I = user.GetIdCard() + if(!I) + return 0 + + if(access in I.access) + return 1 + + return 0 \ No newline at end of file diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm new file mode 100644 index 0000000000..301d43d9d5 --- /dev/null +++ b/code/modules/tgui/modules/camera.dm @@ -0,0 +1,295 @@ +/datum/tgui_module/camera + name = "Security Cameras" + tgui_id = "CameraConsole" + + var/access_based = FALSE + var/list/network = list() + var/list/additional_networks = list() + + var/obj/machinery/camera/active_camera + var/list/concurrent_users = list() + + // Stuff needed to render the map + var/map_name + var/const/default_map_size = 15 + var/obj/screen/map_view/cam_screen + /// All the plane masters that need to be applied. + var/list/cam_plane_masters + var/obj/screen/background/cam_background + var/obj/screen/background/cam_foreground + var/obj/screen/skybox/local_skybox + // Needed for moving camera support + var/camera_diff_x = -1 + var/camera_diff_y = -1 + var/camera_diff_z = -1 + +/datum/tgui_module/camera/New(host, list/network_computer) + . = ..() + if(!LAZYLEN(network_computer)) + access_based = TRUE + else + network = network_computer + map_name = "camera_console_[REF(src)]_map" + // Initialize map objects + cam_screen = new + cam_screen.name = "screen" + cam_screen.assigned_map = map_name + cam_screen.del_on_map_removal = FALSE + cam_screen.screen_loc = "[map_name]:1,1" + cam_plane_masters = list() + + for(var/plane in subtypesof(/obj/screen/plane_master)) + var/obj/screen/instance = new plane() + instance.assigned_map = map_name + instance.del_on_map_removal = FALSE + instance.screen_loc = "[map_name]:CENTER" + cam_plane_masters += instance + + local_skybox = new() + local_skybox.assigned_map = map_name + local_skybox.del_on_map_removal = FALSE + local_skybox.screen_loc = "[map_name]:CENTER,CENTER" + cam_plane_masters += local_skybox + + cam_background = new + cam_background.assigned_map = map_name + cam_background.del_on_map_removal = FALSE + + var/mutable_appearance/scanlines = mutable_appearance('icons/effects/static.dmi', "scanlines") + scanlines.alpha = 50 + scanlines.layer = FULLSCREEN_LAYER + + var/mutable_appearance/noise = mutable_appearance('icons/effects/static.dmi', "1 light") + noise.layer = FULLSCREEN_LAYER + + cam_foreground = new + cam_foreground.assigned_map = map_name + cam_foreground.del_on_map_removal = FALSE + cam_foreground.plane = PLANE_FULLSCREEN + cam_foreground.add_overlay(scanlines) + cam_foreground.add_overlay(noise) + +/datum/tgui_module/camera/Destroy() + qdel(cam_screen) + QDEL_LIST(cam_plane_masters) + qdel(cam_background) + qdel(cam_foreground) + return ..() + +/datum/tgui_module/camera/tgui_interact(mob/user, datum/tgui/ui = null) + // Update UI + ui = SStgui.try_update_ui(user, src, ui) + // Show static if can't use the camera + if(!active_camera?.can_use()) + show_camera_static() + if(!ui) + var/user_ref = REF(user) + var/is_living = isliving(user) + // Ghosts shouldn't count towards concurrent users, which produces + // an audible terminal_on click. + if(is_living) + concurrent_users += user_ref + // Turn on the console + if(length(concurrent_users) == 1 && is_living) + playsound(tgui_host(), 'sound/machines/terminal_on.ogg', 25, FALSE) + // Register map objects + user.client.register_map_obj(cam_screen) + for(var/plane in cam_plane_masters) + user.client.register_map_obj(plane) + user.client.register_map_obj(cam_background) + user.client.register_map_obj(cam_foreground) + // Open UI + ui = new(user, src, tgui_id, name) + ui.open() + +/datum/tgui_module/camera/tgui_data() + var/list/data = list() + data["activeCamera"] = null + if(active_camera) + differential_check() + data["activeCamera"] = list( + name = active_camera.c_tag, + status = active_camera.status, + ) + return data + +/datum/tgui_module/camera/tgui_static_data(mob/user) + var/list/data = list() + data["mapRef"] = map_name + var/list/cameras = get_available_cameras(user) + data["cameras"] = list() + data["allNetworks"] = list() + for(var/i in cameras) + var/obj/machinery/camera/C = cameras[i] + data["cameras"] += list(list( + name = C.c_tag, + networks = C.network + )) + data["allNetworks"] |= C.network + return data + +/datum/tgui_module/camera/tgui_act(action, params) + if(..()) + return + + if(action == "switch_camera") + var/c_tag = params["name"] + var/list/cameras = get_available_cameras(usr) + var/obj/machinery/camera/C = cameras["[ckey(c_tag)]"] + active_camera = C + playsound(tgui_host(), get_sfx("terminal_type"), 25, FALSE) + + reload_cameraview() + + return TRUE + +/datum/tgui_module/camera/proc/differential_check() + var/turf/T = get_turf(active_camera) + if(T) + var/new_x = T.x + var/new_y = T.y + var/new_z = T.z + if((new_x != camera_diff_x) || (new_y != camera_diff_y) || (new_z != camera_diff_z)) + reload_cameraview() + +/datum/tgui_module/camera/proc/reload_cameraview() + // Show static if can't use the camera + if(!active_camera?.can_use()) + show_camera_static() + return TRUE + + var/turf/camTurf = get_turf(active_camera) + + camera_diff_x = camTurf.x + camera_diff_y = camTurf.y + camera_diff_z = camTurf.z + + var/list/visible_turfs = list() + for(var/turf/T in (active_camera.isXRay() \ + ? range(active_camera.view_range, camTurf) \ + : view(active_camera.view_range, camTurf))) + visible_turfs += T + + var/list/bbox = get_bbox_of_atoms(visible_turfs) + var/size_x = bbox[3] - bbox[1] + 1 + var/size_y = bbox[4] - bbox[2] + 1 + + cam_screen.vis_contents = visible_turfs + cam_background.icon_state = "clear" + cam_background.fill_rect(1, 1, size_x, size_y) + + cam_foreground.fill_rect(1, 1, size_x, size_y) + + local_skybox.cut_overlays() + local_skybox.add_overlay(SSskybox.get_skybox(get_z(camTurf))) + local_skybox.scale_to_view(size_x) + local_skybox.set_position("CENTER", "CENTER", (world.maxx>>1) - camTurf.x, (world.maxy>>1) - camTurf.y) + +// Returns the list of cameras accessible from this computer +// This proc operates in two distinct ways depending on the context in which the module is created. +// It can either return a list of cameras sharing the same the internal `network` variable, or +// It can scan all station networks and determine what cameras to show based on the access of the user. +/datum/tgui_module/camera/proc/get_available_cameras(mob/user) + var/list/all_networks = list() + // Access Based + if(access_based) + for(var/network in using_map.station_networks) + if(can_access_network(user, get_camera_access(network), 1)) + all_networks.Add(network) + for(var/network in using_map.secondary_networks) + if(can_access_network(user, get_camera_access(network), 0)) + all_networks.Add(network) + // Network Based + else + all_networks = network.Copy() + + if(additional_networks) + all_networks += additional_networks + + var/list/D = list() + for(var/obj/machinery/camera/C in cameranet.cameras) + if(!C.network) + stack_trace("Camera in a cameranet has no camera network") + continue + if(!(islist(C.network))) + stack_trace("Camera in a cameranet has a non-list camera network") + continue + var/list/tempnetwork = C.network & all_networks + if(tempnetwork.len) + D["[ckey(C.c_tag)]"] = C + return D + +/datum/tgui_module/camera/proc/can_access_network(mob/user, network_access, station_network = 0) + // No access passed, or 0 which is considered no access requirement. Allow it. + if(!network_access) + return 1 + + if(station_network) + return check_access(user, network_access) || check_access(user, access_security) || check_access(user, access_heads) + else + return check_access(user, network_access) + +/datum/tgui_module/camera/proc/show_camera_static() + cam_screen.vis_contents.Cut() + cam_background.icon_state = "scanline2" + cam_background.fill_rect(1, 1, default_map_size, default_map_size) + local_skybox.cut_overlays() + +/datum/tgui_module/camera/tgui_close(mob/user) + . = ..() + var/user_ref = REF(user) + var/is_living = isliving(user) + // living creature or not, we remove you anyway. + concurrent_users -= user_ref + // Unregister map objects + if(user.client) + user.client.clear_map(map_name) + // Turn off the console + if(length(concurrent_users) == 0 && is_living) + active_camera = null + playsound(tgui_host(), 'sound/machines/terminal_off.ogg', 25, FALSE) + +// NTOS Version +// Please note, this isn't a very good replacement for converting modular computers 100% to TGUI +// If/when that is done, just move all the PC_ specific data and stuff to the modular computers themselves +// instead of copying this approach here. +/datum/tgui_module/camera/ntos + tgui_id = "NtosCameraConsole" + +/datum/tgui_module/camera/ntos/tgui_state() + return GLOB.tgui_ntos_state + +/datum/tgui_module/camera/ntos/tgui_static_data() + . = ..() + + var/datum/computer_file/program/host = tgui_host() + if(istype(host) && host.computer) + . += host.computer.get_header_data() + +/datum/tgui_module/camera/ntos/tgui_act(action, params) + if(..()) + return + + var/datum/computer_file/program/host = tgui_host() + if(istype(host) && host.computer) + if(action == "PC_exit") + host.computer.kill_program() + return TRUE + if(action == "PC_shutdown") + host.computer.shutdown_computer() + return TRUE + if(action == "PC_minimize") + host.computer.minimize_program(usr) + return TRUE + +// ERT Version provides some additional networks. +/datum/tgui_module/camera/ntos/ert + additional_networks = list(NETWORK_ERT, NETWORK_CRESCENT) + +// Hacked version also provides some additional networks, +// but we want it to show *all* the networks 24/7, so we convert it into a non-access-based UI. +/datum/tgui_module/camera/ntos/hacked + additional_networks = list(NETWORK_MERCENARY, NETWORK_ERT, NETWORK_CRESCENT) + +/datum/tgui_module/camera/ntos/hacked/New(host) + . = ..(host, using_map.station_networks.Copy()) diff --git a/code/modules/tgui/modules/crew_monitor.dm b/code/modules/tgui/modules/crew_monitor.dm new file mode 100644 index 0000000000..f4be8c87c1 --- /dev/null +++ b/code/modules/tgui/modules/crew_monitor.dm @@ -0,0 +1,100 @@ +/datum/tgui_module/crew_monitor + name = "Crew monitor" + tgui_id = "CrewMonitor" + +/datum/tgui_module/crew_monitor/tgui_act(action, params, datum/tgui/ui) + if(..()) + return TRUE + + var/turf/T = get_turf(usr) + if(!T || !(T.z in using_map.player_levels)) + to_chat(usr, "Unable to establish a connection: You're too far away from the station!") + return FALSE + + switch(action) + if("track") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + var/mob/living/carbon/human/H = locate(params["track"]) in mob_list + if(hassensorlevel(H, SUIT_SENSOR_TRACKING)) + AI.ai_actual_track(H) + return TRUE + if("setZLevel") + ui.set_map_z_level(params["mapZLevel"]) + SStgui.update_uis(src) + +/datum/tgui_module/crew_monitor/tgui_interact(mob/user, datum/tgui/ui = null) + var/z = get_z(user) + var/list/map_levels = using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE) + + if(!map_levels.len) + to_chat(user, "The crew monitor doesn't seem like it'll work here.") + if(ui) + ui.close() + return null + + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, tgui_id, name) + ui.autoupdate = TRUE + ui.open() + + +/datum/tgui_module/crew_monitor/tgui_data(mob/user, ui_key = "main", datum/tgui_state/state = GLOB.tgui_default_state) + var/data[0] + + data["isAI"] = isAI(user) + + var/z = get_z(user) + var/list/map_levels = uniquelist(using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE)) + data["map_levels"] = map_levels + + data["crewmembers"] = list() + for(var/zlevel in map_levels) + data["crewmembers"] += crew_repository.health_data(zlevel) + + return data + +/datum/tgui_module/crew_monitor/ntos + tgui_id = "NtosCrewMonitor" + +/datum/tgui_module/crew_monitor/ntos/tgui_state(mob/user) + return GLOB.tgui_ntos_state + +/datum/tgui_module/crew_monitor/ntos/tgui_static_data() + . = ..() + + var/datum/computer_file/program/host = tgui_host() + if(istype(host) && host.computer) + . += host.computer.get_header_data() + +/datum/tgui_module/crew_monitor/ntos/tgui_act(action, params) + if(..()) + return + + var/datum/computer_file/program/host = tgui_host() + if(istype(host) && host.computer) + if(action == "PC_exit") + host.computer.kill_program() + return TRUE + if(action == "PC_shutdown") + host.computer.shutdown_computer() + return TRUE + if(action == "PC_minimize") + host.computer.minimize_program(usr) + return TRUE + +// Subtype for glasses_state +/datum/tgui_module/crew_monitor/glasses +/datum/tgui_module/crew_monitor/glasses/tgui_state(mob/user) + return GLOB.tgui_glasses_state + +// Subtype for self_state +/datum/tgui_module/crew_monitor/robot +/datum/tgui_module/crew_monitor/robot/tgui_state(mob/user) + return GLOB.tgui_self_state + +// Subtype for nif_state +/datum/tgui_module/crew_monitor/nif +/datum/tgui_module/crew_monitor/nif/tgui_state(mob/user) + return GLOB.tgui_nif_state diff --git a/code/modules/tgui/states.dm b/code/modules/tgui/states.dm new file mode 100644 index 0000000000..111ee9e30b --- /dev/null +++ b/code/modules/tgui/states.dm @@ -0,0 +1,125 @@ +/** + * Base state and helpers for states. Just does some sanity checks, + * implement a proper state for in-depth checks. + */ + +/** + * public + * + * Checks the UI state for a mob. + * + * required user mob The mob who opened/is using the UI. + * required state datum/ui_state The state to check. + * + * return UI_state The state of the UI. + */ +/datum/proc/tgui_status(mob/user, datum/tgui_state/state) + var/src_object = tgui_host(user) + . = STATUS_CLOSE + if(!state) + return + + if(isobserver(user)) + // // If they turn on ghost AI control, admins can always interact. + // if(user.client.advanced_admin_interaction) + // . = max(., STATUS_INTERACTIVE) + + // Regular ghosts can always at least view if in range. + if(user.client) + var/clientviewlist = getviewsize(user.client.view) + if(get_dist(src_object, user) < max(clientviewlist[1], clientviewlist[2])) + . = max(., STATUS_UPDATE) + + // Check if the state allows interaction + var/result = state.can_use_topic(src_object, user) + . = max(., result) + +/** + * private + * + * Checks if a user can use src_object's UI, and returns the state. + * Can call a mob proc, which allows overrides for each mob. + * + * required src_object datum The object/datum which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ +/datum/tgui_state/proc/can_use_topic(src_object, mob/user) + // Don't allow interaction by default. + return STATUS_CLOSE + +/** + * public + * + * Standard interaction/sanity checks. Different mob types may have overrides. + * + * return UI_state The state of the UI. + */ +/mob/proc/shared_tgui_interaction(src_object) + // Close UIs if mindless. + if(!client) + return STATUS_CLOSE + // Disable UIs if unconcious. + else if(stat) + return STATUS_DISABLED + // Update UIs if incapicitated but concious. + else if(incapacitated()) + return STATUS_UPDATE + return STATUS_INTERACTIVE + +/mob/living/silicon/ai/shared_tgui_interaction(src_object) + // Disable UIs if the AI is unpowered. + if(lacks_power()) + return STATUS_DISABLED + return ..() + +/mob/living/silicon/robot/shared_tgui_interaction(src_object) + // Disable UIs if the Borg is unpowered or locked. + if(!cell || cell.charge <= 0 || lockcharge) + return STATUS_DISABLED + return ..() + +/** + * public + * + * Check the distance for a living mob. + * Really only used for checks outside the context of a mob. + * Otherwise, use shared_living_ui_distance(). + * + * required src_object The object which owns the UI. + * required user mob The mob who opened/is using the UI. + * + * return UI_state The state of the UI. + */ +/atom/proc/contents_tgui_distance(src_object, mob/living/user) + // Just call this mob's check. + return user.shared_living_tgui_distance(src_object) + +/** + * public + * + * Distance versus interaction check. + * + * required src_object atom/movable The object which owns the UI. + * + * return UI_state The state of the UI. + */ +/mob/living/proc/shared_living_tgui_distance(atom/movable/src_object, viewcheck = TRUE) + // If the object is obscured, close it. + if(viewcheck && !(src_object in view(src))) + return STATUS_CLOSE + + var/dist = get_dist(src_object, src) + if(dist <= 1) // Open and interact if 1-0 tiles away. + return STATUS_INTERACTIVE + else if(dist <= 2) // View only if 2-3 tiles away. + return STATUS_UPDATE + else if(dist <= 5) // Disable if 5 tiles away. + return STATUS_DISABLED + return STATUS_CLOSE // Otherwise, we got nothing. + +/mob/living/carbon/human/shared_living_tgui_distance(atom/movable/src_object) + if((TK in mutations) && (get_dist(src, src_object) <= 2)) + return STATUS_INTERACTIVE + return ..() diff --git a/code/modules/tgui/states/admin.dm b/code/modules/tgui/states/admin.dm new file mode 100644 index 0000000000..6d1c680927 --- /dev/null +++ b/code/modules/tgui/states/admin.dm @@ -0,0 +1,12 @@ + /** + * tgui state: admin_state + * + * Checks that the user is an admin, end-of-story. + **/ + +GLOBAL_DATUM_INIT(tgui_admin_state, /datum/tgui_state/admin_state, new) + +/datum/tgui_state/admin_state/can_use_topic(src_object, mob/user) + if(check_rights_for(user.client, R_ADMIN)) + return STATUS_INTERACTIVE + return STATUS_CLOSE diff --git a/code/modules/tgui/states/always.dm b/code/modules/tgui/states/always.dm new file mode 100644 index 0000000000..3091578544 --- /dev/null +++ b/code/modules/tgui/states/always.dm @@ -0,0 +1,11 @@ + + /** + * tgui state: always_state + * + * Always grants the user UI_INTERACTIVE. Period. + **/ + +GLOBAL_DATUM_INIT(tgui_always_state, /datum/tgui_state/always_state, new) + +/datum/tgui_state/always_state/can_use_topic(src_object, mob/user) + return STATUS_INTERACTIVE diff --git a/code/modules/tgui/states/conscious.dm b/code/modules/tgui/states/conscious.dm new file mode 100644 index 0000000000..6bc0c7ec03 --- /dev/null +++ b/code/modules/tgui/states/conscious.dm @@ -0,0 +1,12 @@ + /** + * tgui state: conscious_state + * + * Only checks if the user is conscious. + **/ + +GLOBAL_DATUM_INIT(tgui_conscious_state, /datum/tgui_state/conscious_state, new) + +/datum/tgui_state/conscious_state/can_use_topic(src_object, mob/user) + if(user.stat == CONSCIOUS) + return STATUS_INTERACTIVE + return STATUS_CLOSE diff --git a/code/modules/tgui/states/contained.dm b/code/modules/tgui/states/contained.dm new file mode 100644 index 0000000000..c2fbd0b6b0 --- /dev/null +++ b/code/modules/tgui/states/contained.dm @@ -0,0 +1,12 @@ + /** + * tgui state: contained_state + * + * Checks that the user is inside the src_object. + **/ + +GLOBAL_DATUM_INIT(tgui_contained_state, /datum/tgui_state/contained_state, new) + +/datum/tgui_state/contained_state/can_use_topic(atom/src_object, mob/user) + if(!src_object.contains(user)) + return STATUS_CLOSE + return user.shared_tgui_interaction(src_object) diff --git a/code/modules/tgui/states/deep_inventory.dm b/code/modules/tgui/states/deep_inventory.dm new file mode 100644 index 0000000000..137f262a0e --- /dev/null +++ b/code/modules/tgui/states/deep_inventory.dm @@ -0,0 +1,12 @@ + /** + * tgui state: deep_inventory_state + * + * Checks that the src_object is in the user's deep (backpack, box, toolbox, etc) inventory. + **/ + +GLOBAL_DATUM_INIT(tgui_deep_inventory_state, /datum/tgui_state/deep_inventory_state, new) + +/datum/tgui_state/deep_inventory_state/can_use_topic(src_object, mob/user) + if(!user.contains(src_object)) + return STATUS_CLOSE + return user.shared_tgui_interaction(src_object) diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm new file mode 100644 index 0000000000..9ccc9c751e --- /dev/null +++ b/code/modules/tgui/states/default.dm @@ -0,0 +1,63 @@ + /** + * tgui state: default_state + * + * Checks a number of things -- mostly physical distance for humans and view for robots. + **/ + +GLOBAL_DATUM_INIT(tgui_default_state, /datum/tgui_state/default, new) + +/datum/tgui_state/default/can_use_topic(src_object, mob/user) + return user.default_can_use_tgui_topic(src_object) // Call the individual mob-overridden procs. + +/mob/proc/default_can_use_tgui_topic(src_object) + return STATUS_CLOSE // Don't allow interaction by default. + +/mob/living/default_can_use_tgui_topic(src_object) + . = shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE && loc) + . = min(., loc.contents_tgui_distance(src_object, src)) // Check the distance... + if(. == STATUS_INTERACTIVE) // Non-human living mobs can only look, not touch. + return STATUS_UPDATE + +/mob/living/carbon/human/default_can_use_tgui_topic(src_object) + . = shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + . = min(., shared_living_tgui_distance(src_object)) // Check the distance... + +/mob/living/silicon/robot/default_can_use_tgui_topic(src_object) + . = shared_tgui_interaction(src_object) + if(. <= STATUS_DISABLED) + return + + // Robots can interact with anything they can see. + var/list/clientviewlist = getviewsize(client.view) + if((src_object in view(src)) && (get_dist(src, src_object) <= min(clientviewlist[1],clientviewlist[2]))) + return STATUS_INTERACTIVE + return STATUS_DISABLED // Otherwise they can keep the UI open. + +/mob/living/silicon/ai/default_can_use_tgui_topic(src_object) + . = shared_tgui_interaction(src_object) + if(. < STATUS_INTERACTIVE) + return + + // The AI can interact with anything it can see nearby, or with cameras while wireless control is enabled. + if(!control_disabled && can_see(src_object)) + return STATUS_INTERACTIVE + return STATUS_CLOSE + +/mob/living/simple_animal/default_can_use_tgui_topic(src_object) + . = shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + . = min(., shared_living_tgui_distance(src_object)) //simple animals can only use things they're near. + +/mob/living/silicon/pai/default_can_use_tgui_topic(src_object) + // pAIs can only use themselves and the owner's radio. + if((src_object == src || src_object == radio) && !stat) + return STATUS_INTERACTIVE + else + return ..() + +/mob/observer/dead/default_can_use_tgui_topic() + if(check_rights(R_ADMIN, 0, src)) + return STATUS_INTERACTIVE // Admins are more equal + return STATUS_UPDATE // Ghosts can view updates diff --git a/code/modules/tgui/states/hands.dm b/code/modules/tgui/states/hands.dm new file mode 100644 index 0000000000..0981b5d6ec --- /dev/null +++ b/code/modules/tgui/states/hands.dm @@ -0,0 +1,25 @@ + /** + * tgui state: hands_state + * + * Checks that the src_object is in the user's hands. + **/ + +GLOBAL_DATUM_INIT(tgui_hands_state, /datum/tgui_state/hands_state, new) + +/datum/tgui_state/hands_state/can_use_topic(src_object, mob/user) + . = user.shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + return min(., user.hands_can_use_tgui_topic(src_object)) + +/mob/proc/hands_can_use_tgui_topic(src_object) + return STATUS_CLOSE + +/mob/living/hands_can_use_tgui_topic(src_object) + if(src_object in get_all_held_items()) + return STATUS_INTERACTIVE + return STATUS_CLOSE + +/mob/living/silicon/robot/hands_can_use_tgui_topic(src_object) + if(activated(src_object)) + return STATUS_INTERACTIVE + return STATUS_CLOSE diff --git a/code/modules/tgui/states/human_adjacent.dm b/code/modules/tgui/states/human_adjacent.dm new file mode 100644 index 0000000000..8164d5f9ce --- /dev/null +++ b/code/modules/tgui/states/human_adjacent.dm @@ -0,0 +1,17 @@ + + /** + * tgui state: human_adjacent_state + * + * In addition to default checks, only allows interaction for a + * human adjacent user. + **/ + +GLOBAL_DATUM_INIT(tgui_human_adjacent_state, /datum/tgui_state/human_adjacent_state, new) + +/datum/tgui_state/human_adjacent_state/can_use_topic(src_object, mob/user) + . = user.default_can_use_tgui_topic(src_object) + + var/dist = get_dist(src_object, user) + if((dist > 1) || (!ishuman(user))) + // Can't be used unless adjacent and human, even with TK + . = min(., STATUS_UPDATE) diff --git a/code/modules/tgui/states/inventory.dm b/code/modules/tgui/states/inventory.dm new file mode 100644 index 0000000000..92274cc1f2 --- /dev/null +++ b/code/modules/tgui/states/inventory.dm @@ -0,0 +1,12 @@ + /** + * tgui state: inventory_state + * + * Checks that the src_object is in the user's top-level (hand, ear, pocket, belt, etc) inventory. + **/ + +GLOBAL_DATUM_INIT(tgui_inventory_state, /datum/tgui_state/inventory_state, new) + +/datum/tgui_state/inventory_state/can_use_topic(src_object, mob/user) + if(!(src_object in user)) + return STATUS_CLOSE + return user.shared_tgui_interaction(src_object) diff --git a/code/modules/tgui/states/inventory_vr.dm b/code/modules/tgui/states/inventory_vr.dm new file mode 100644 index 0000000000..b8e3ea224c --- /dev/null +++ b/code/modules/tgui/states/inventory_vr.dm @@ -0,0 +1,26 @@ +GLOBAL_DATUM_INIT(tgui_glasses_state, /datum/tgui_state/glasses_state, new) +/datum/tgui_state/glasses_state/can_use_topic(var/src_object, var/mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.glasses == src_object) + return user.shared_tgui_interaction() + + return STATUS_CLOSE + +GLOBAL_DATUM_INIT(tgui_nif_state, /datum/tgui_state/nif_state, new) +/datum/tgui_state/nif_state/can_use_topic(var/src_object, var/mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.nif && H.nif.stat == NIF_WORKING && src_object == H.nif) + return user.shared_tgui_interaction() + + return STATUS_CLOSE + +GLOBAL_DATUM_INIT(tgui_commlink_state, /datum/tgui_state/commlink_state, new) +/datum/tgui_state/commlink_state/can_use_topic(var/src_object, var/mob/user) + if(ishuman(user)) + var/mob/living/carbon/human/H = user + if(H.nif && H.nif.stat == NIF_WORKING && H.nif.comm == src_object) + return user.shared_tgui_interaction() + + return STATUS_CLOSE diff --git a/code/modules/tgui/states/not_incapacitated.dm b/code/modules/tgui/states/not_incapacitated.dm new file mode 100644 index 0000000000..1185b51647 --- /dev/null +++ b/code/modules/tgui/states/not_incapacitated.dm @@ -0,0 +1,29 @@ + /** + * tgui state: not_incapacitated_state + * + * Checks that the user isn't incapacitated + **/ + +GLOBAL_DATUM_INIT(tgui_not_incapacitated_state, /datum/tgui_state/not_incapacitated_state, new) + + /** + * tgui state: not_incapacitated_turf_state + * + * Checks that the user isn't incapacitated and that their loc is a turf + **/ + +GLOBAL_DATUM_INIT(tgui_not_incapacitated_turf_state, /datum/tgui_state/not_incapacitated_state, new(no_turfs = TRUE)) + +/datum/tgui_state/not_incapacitated_state + var/turf_check = FALSE + +/datum/tgui_state/not_incapacitated_state/New(loc, no_turfs = FALSE) + ..() + turf_check = no_turfs + +/datum/tgui_state/not_incapacitated_state/can_use_topic(src_object, mob/user) + if(user.stat) + return STATUS_CLOSE + if(user.incapacitated() || (turf_check && !isturf(user.loc))) + return STATUS_DISABLED + return STATUS_INTERACTIVE diff --git a/code/modules/tgui/states/notcontained.dm b/code/modules/tgui/states/notcontained.dm new file mode 100644 index 0000000000..01811d427f --- /dev/null +++ b/code/modules/tgui/states/notcontained.dm @@ -0,0 +1,26 @@ + /** + * tgui state: notcontained_state + * + * Checks that the user is not inside src_object, and then makes the default checks. + **/ + +GLOBAL_DATUM_INIT(tgui_notcontained_state, /datum/tgui_state/notcontained_state, new) + +/datum/tgui_state/notcontained_state/can_use_topic(atom/src_object, mob/user) + . = user.shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + return min(., user.notcontained_can_use_tgui_topic(src_object)) + +/mob/proc/notcontained_can_use_tgui_topic(src_object) + return STATUS_CLOSE + +/mob/living/notcontained_can_use_tgui_topic(atom/src_object) + if(src_object.contains(src)) + return STATUS_CLOSE // Close if we're inside it. + return default_can_use_tgui_topic(src_object) + +/mob/living/silicon/notcontained_can_use_tgui_topic(src_object) + return default_can_use_tgui_topic(src_object) // Silicons use default bevhavior. + +/mob/living/simple_animal/drone/notcontained_can_use_tgui_topic(src_object) + return default_can_use_tgui_topic(src_object) // Drones use default bevhavior. diff --git a/code/modules/tgui/states/ntos.dm b/code/modules/tgui/states/ntos.dm new file mode 100644 index 0000000000..d6a5533e1e --- /dev/null +++ b/code/modules/tgui/states/ntos.dm @@ -0,0 +1,15 @@ + /** + * tgui state: ntos_state + * + * Checks a number of things -- mostly physical distance for humans and view for robots. + * This is basically the same as default, except instead of src_object, it uses the computer + * it's attached to. + **/ + +GLOBAL_DATUM_INIT(tgui_ntos_state, /datum/tgui_state/ntos, new) + +/datum/tgui_state/ntos/can_use_topic(src_object, mob/user) + var/datum/computer_file/program/P = src_object + if(!istype(P) || !P.computer) + return FALSE + return user.default_can_use_tgui_topic(P.computer) // Call the individual mob-overridden procs. diff --git a/code/modules/tgui/states/observer.dm b/code/modules/tgui/states/observer.dm new file mode 100644 index 0000000000..bf98f44465 --- /dev/null +++ b/code/modules/tgui/states/observer.dm @@ -0,0 +1,15 @@ + /** + * tgui state: observer_state + * + * Checks that the user is an observer/ghost. + **/ + +GLOBAL_DATUM_INIT(tgui_observer_state, /datum/tgui_state/observer_state, new) + +/datum/tgui_state/observer_state/can_use_topic(src_object, mob/user) + if(isobserver(user)) + return STATUS_INTERACTIVE + if(check_rights(R_ADMIN, 0, src)) + return STATUS_INTERACTIVE + return STATUS_CLOSE + diff --git a/code/modules/tgui/states/physical.dm b/code/modules/tgui/states/physical.dm new file mode 100644 index 0000000000..a57a321e95 --- /dev/null +++ b/code/modules/tgui/states/physical.dm @@ -0,0 +1,24 @@ + /** + * tgui state: physical_state + * + * Short-circuits the default state to only check physical distance. + **/ + +GLOBAL_DATUM_INIT(tgui_physical_state, /datum/tgui_state/physical, new) + +/datum/tgui_state/physical/can_use_topic(src_object, mob/user) + . = user.shared_tgui_interaction(src_object) + if(. > STATUS_CLOSE) + return min(., user.physical_can_use_tgui_topic(src_object)) + +/mob/proc/physical_can_use_tgui_topic(src_object) + return STATUS_CLOSE + +/mob/living/physical_can_use_tgui_topic(src_object) + return shared_living_tgui_distance(src_object) + +/mob/living/silicon/physical_can_use_tgui_topic(src_object) + return max(STATUS_UPDATE, shared_living_tgui_distance(src_object)) // Silicons can always see. + +/mob/living/silicon/ai/physical_can_use_tgui_topic(src_object) + return STATUS_UPDATE // AIs are not physical. diff --git a/code/modules/tgui/states/self.dm b/code/modules/tgui/states/self.dm new file mode 100644 index 0000000000..109fd6ae44 --- /dev/null +++ b/code/modules/tgui/states/self.dm @@ -0,0 +1,12 @@ + /** + * tgui state: self_state + * + * Only checks that the user and src_object are the same. + **/ + +GLOBAL_DATUM_INIT(tgui_self_state, /datum/tgui_state/self_state, new) + +/datum/tgui_state/self_state/can_use_topic(src_object, mob/user) + if(src_object != user) + return STATUS_CLOSE + return user.shared_tgui_interaction(src_object) diff --git a/code/modules/tgui/states/zlevel.dm b/code/modules/tgui/states/zlevel.dm new file mode 100644 index 0000000000..a589a4b64d --- /dev/null +++ b/code/modules/tgui/states/zlevel.dm @@ -0,0 +1,14 @@ + /** + * tgui state: z_state + * + * Only checks that the Z-level of the user and src_object are the same. + **/ + +GLOBAL_DATUM_INIT(tgui_z_state, /datum/tgui_state/z_state, new) + +/datum/tgui_state/z_state/can_use_topic(src_object, mob/user) + var/turf/turf_obj = get_turf(src_object) + var/turf/turf_usr = get_turf(user) + if(turf_obj && turf_usr && turf_obj.z == turf_usr.z) + return STATUS_INTERACTIVE + return STATUS_CLOSE diff --git a/code/modules/tgui/tgui.dm b/code/modules/tgui/tgui.dm new file mode 100644 index 0000000000..9af1296ab0 --- /dev/null +++ b/code/modules/tgui/tgui.dm @@ -0,0 +1,304 @@ +/** + * tgui + * + * /tg/station user interface library + */ + +/** + * tgui datum (represents a UI). + */ +/datum/tgui + /// The mob who opened/is using the UI. + var/mob/user + /// The object which owns the UI. + var/datum/src_object + /// The title of te UI. + var/title + /// The window_id for browse() and onclose(). + var/datum/tgui_window/window + /// Key that is used for remembering the window geometry. + var/window_key + /// Deprecated: Window size. + var/window_size + /// The interface (template) to be used for this UI. + var/interface + /// Update the UI every MC tick. + var/autoupdate = TRUE + /// If the UI has been initialized yet. + var/initialized = FALSE + /// Time of opening the window. + var/opened_at + /// Stops further updates when close() was called. + var/closing = FALSE + /// The status/visibility of the UI. + var/status = STATUS_INTERACTIVE + /// Topic state used to determine status/interactability. + var/datum/tgui_state/state = null + // The map z-level to display. + var/map_z_level = 1 + +/** + * public + * + * Create a new UI. + * + * required user mob The mob who opened/is using the UI. + * required src_object datum The object or datum which owns the UI. + * required interface string The interface used to render the UI. + * optional title string The title of the UI. + * optional ui_x int Deprecated: Window width. + * optional ui_y int Deprecated: Window height. + * + * return datum/tgui The requested UI. + */ +/datum/tgui/New(mob/user, datum/src_object, interface, title, ui_x, ui_y) + src.user = user + src.src_object = src_object + src.window_key = "[REF(src_object)]-main" + src.interface = interface + if(title) + src.title = title + src.state = src_object.tgui_state() + // Deprecated + if(ui_x && ui_y) + src.window_size = list(ui_x, ui_y) + +/** + * public + * + * Open this UI (and initialize it with data). + */ +/datum/tgui/proc/open() + if(!user.client) + return null + if(window) + return null + process_status() + if(status < STATUS_UPDATE) + return null + window = SStgui.request_pooled_window(user) + if(!window) + return null + opened_at = world.time + window.acquire_lock(src) + if(!window.is_ready()) + window.initialize(inline_assets = list( + get_asset_datum(/datum/asset/simple/tgui) + )) + else + window.send_message("ping") + window.send_asset(get_asset_datum(/datum/asset/simple/fontawesome)) + for(var/datum/asset/asset in src_object.ui_assets(user)) + window.send_asset(asset) + window.send_message("update", get_payload( + with_data = TRUE, + with_static_data = TRUE)) + SStgui.on_open(src) + +/** + * public + * + * Close the UI, and all its children. + */ +/datum/tgui/proc/close(can_be_suspended = TRUE) + if(closing) + return + closing = TRUE + // If we don't have window_id, open proc did not have the opportunity + // to finish, therefore it's safe to skip this whole block. + if(window) + // Windows you want to keep are usually blue screens of death + // and we want to keep them around, to allow user to read + // the error message properly. + window.release_lock() + window.close(can_be_suspended) + src_object.tgui_close(user) + SStgui.on_close(src) + state = null + qdel(src) + +/** + * public + * + * Enable/disable auto-updating of the UI. + * + * required autoupdate bool Enable/disable auto-updating. + */ +/datum/tgui/proc/set_autoupdate(autoupdate) + src.autoupdate = autoupdate + +/** + * public + * + * Replace current ui.state with a new one. + * + * required state datum/ui_state/state Next state + */ +/datum/tgui/proc/set_state(datum/tgui_state/state) + src.state = state + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + */ +/datum/tgui/proc/send_asset(datum/asset/asset) + if(!window) + CRASH("send_asset() can only be called after open().") + window.send_asset(asset) + +/** + * public + * + * Send a full update to the client (includes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. + */ +/datum/tgui/proc/send_full_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= STATUS_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data, + with_static_data = TRUE)) + +/** + * public + * + * Send a partial update to the client (excludes static data). + * + * optional custom_data list Custom data to send instead of ui_data. + * optional force bool Send an update even if UI is not interactive. + */ +/datum/tgui/proc/send_update(custom_data, force) + if(!user.client || !initialized || closing) + return + var/should_update_data = force || status >= STATUS_UPDATE + window.send_message("update", get_payload( + custom_data, + with_data = should_update_data)) + +/** + * private + * + * Package the data to send to the UI, as JSON. + * + * return list + */ +/datum/tgui/proc/get_payload(custom_data, with_data, with_static_data) + var/list/json_data = list() + json_data["config"] = list( + "title" = title, + "status" = status, + "interface" = interface, + "map" = (using_map && using_map.path) ? using_map.path : "Unknown", + "mapZLevel" = map_z_level, + "window" = list( + "key" = window_key, + "size" = window_size, + "fancy" = user.client.prefs.tgui_fancy, + "locked" = user.client.prefs.tgui_lock, + ), + "user" = list( + "name" = "[user]", + "ckey" = "[user.ckey]", + "observer" = isobserver(user), + ), + ) + var/data = custom_data || with_data && src_object.tgui_data(user) + if(data) + json_data["data"] = data + var/static_data = with_static_data && src_object.tgui_static_data(user) + if(static_data) + json_data["static_data"] = static_data + if(src_object.tgui_shared_states) + json_data["shared"] = src_object.tgui_shared_states + return json_data + +/** + * private + * + * Run an update cycle for this UI. Called internally by SStgui + * every second or so. + */ +/datum/tgui/process(force = FALSE) + if(closing) + return + var/datum/host = src_object.tgui_host(user) + // If the object or user died (or something else), abort. + if(!src_object || !host || !user || !window) + close(can_be_suspended = FALSE) + return + // Validate ping + if(!initialized && world.time - opened_at > TGUI_PING_TIMEOUT) + log_tgui(user, \ + "Error: Zombie window detected, killing it with fire.\n" \ + + "window_id: [window.id]\n" \ + + "opened_at: [opened_at]\n" \ + + "world.time: [world.time]") + close(can_be_suspended = FALSE) + return + // Update through a normal call to ui_interact + if(status != STATUS_DISABLED && (autoupdate || force)) + src_object.tgui_interact(user, src) + return + // Update status only + var/needs_update = process_status() + if(status <= STATUS_CLOSE) + close() + return + if(needs_update) + window.send_message("update", get_payload()) + +/** + * private + * + * Updates the status, and returns TRUE if status has changed. + */ +/datum/tgui/proc/process_status() + var/prev_status = status + status = src_object.tgui_status(user, state) + return prev_status != status + +/datum/tgui/proc/log_message(message) + log_tgui("[user] ([user.ckey]) using \"[title]\":\n[message]") + +/datum/tgui/proc/set_map_z_level(nz) + map_z_level = nz + +/** + * private + * + * Handle clicks from the UI. + * Call the src_object's ui_act() if status is UI_INTERACTIVE. + * If the src_object's ui_act() returns 1, update all UIs attacked to it. + */ +/datum/tgui/proc/on_message(type, list/payload, list/href_list) + // Pass act type messages to tgui_act + if(type && copytext(type, 1, 5) == "act/") + process_status() + if(src_object.tgui_act(copytext(type, 5), payload, src, state)) + SStgui.update_uis(src_object) + return FALSE + switch(type) + if("ready") + initialized = TRUE + if("pingReply") + initialized = TRUE + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) + if("log") + if(href_list["fatal"]) + close(can_be_suspended = FALSE) + if("setSharedState") + if(status != STATUS_INTERACTIVE) + return + LAZYINITLIST(src_object.tgui_shared_states) + src_object.tgui_shared_states[href_list["key"]] = href_list["value"] + SStgui.update_uis(src_object) \ No newline at end of file diff --git a/code/modules/tgui/tgui_window.dm b/code/modules/tgui/tgui_window.dm new file mode 100644 index 0000000000..18cf715368 --- /dev/null +++ b/code/modules/tgui/tgui_window.dm @@ -0,0 +1,238 @@ +/** + * Copyright (c) 2020 Aleksej Komarov + * SPDX-License-Identifier: MIT + */ + +/datum/tgui_window + var/id + var/client/client + var/pooled + var/pool_index + var/status = TGUI_WINDOW_CLOSED + var/locked = FALSE + var/datum/tgui/locked_by + var/fatally_errored = FALSE + var/message_queue + var/sent_assets = list() + +/** + * public + * + * Create a new tgui window. + * + * required client /client + * required id string A unique window identifier. + */ +/datum/tgui_window/New(client/client, id, pooled = FALSE) + src.id = id + src.client = client + src.pooled = pooled + if(pooled) + client.tgui_windows[id] = src + src.pool_index = TGUI_WINDOW_INDEX(id) + +/** + * public + * + * Initializes the window with a fresh page. Puts window into the "loading" + * state. You can begin sending messages right after initializing. Messages + * will be put into the queue until the window finishes loading. + * + * optional inline_assets list List of assets to inline into the html. + */ +/datum/tgui_window/proc/initialize(inline_assets = list()) + log_tgui(client, "[id]/initialize") + if(!client) + return + status = TGUI_WINDOW_LOADING + fatally_errored = FALSE + message_queue = null + // Build window options + var/options = "file=[id].html;can_minimize=0;auto_format=0;" + // Remove titlebar and resize handles for a fancy window + if(client.prefs.tgui_fancy) + options += "titlebar=0;can_resize=0;" + else + options += "titlebar=1;can_resize=1;" + // Generate page html + var/html = SStgui.basehtml + html = replacetextEx(html, "\[tgui:windowId]", id) + // Process inline assets + var/inline_styles = "" + var/inline_scripts = "" + for(var/datum/asset/asset in inline_assets) + var/mappings = asset.get_url_mappings() + for(var/name in mappings) + var/url = mappings[name] + // Not urlencoding since asset strings are considered safe + if(copytext(name, -4) == ".css") + inline_styles += "\n" + else if(copytext(name, -3) == ".js") + inline_scripts += "\n" + asset.send() + html = replacetextEx(html, "\n", inline_styles) + html = replacetextEx(html, "\n", inline_scripts) + // Open the window + client << browse(html, "window=[id];[options]") + // Instruct the client to signal UI when the window is closed. + winset(client, id, "on-close=\"uiclose [id]\"") + +/** + * public + * + * Checks if the window is ready to receive data. + * + * return bool + */ +/datum/tgui_window/proc/is_ready() + return status == TGUI_WINDOW_READY + +/** + * public + * + * Checks if the window can be sanely suspended. + * + * return bool + */ +/datum/tgui_window/proc/can_be_suspended() + return !fatally_errored \ + && pooled \ + && pool_index > 0 \ + && pool_index <= TGUI_WINDOW_SOFT_LIMIT \ + && status == TGUI_WINDOW_READY + +/** + * public + * + * Acquire the window lock. Pool will not be able to provide this window + * to other UIs for the duration of the lock. + * + * Can be given an optional tgui datum, which will hook its on_message + * callback into the message stream. + * + * optional ui /datum/tgui + */ +/datum/tgui_window/proc/acquire_lock(datum/tgui/ui) + locked = TRUE + locked_by = ui + +/** + * Release the window lock. + */ +/datum/tgui_window/proc/release_lock() + // Clean up assets sent by tgui datum which requested the lock + if(locked) + sent_assets = list() + locked = FALSE + locked_by = null + +/** + * public + * + * Close the UI. + * + * optional can_be_suspended bool + */ +/datum/tgui_window/proc/close(can_be_suspended = TRUE) + if(!client) + return + if(can_be_suspended && can_be_suspended()) + log_tgui(client, "[id]/close: suspending") + status = TGUI_WINDOW_READY + send_message("suspend") + return + log_tgui(client, "[id]/close") + release_lock() + status = TGUI_WINDOW_CLOSED + message_queue = null + // Do not close the window to give user some time + // to read the error message. + if(!fatally_errored) + client << browse(null, "window=[id]") + +/** + * public + * + * Sends a message to tgui window. + * + * required type string Message type + * required payload list Message payload + * optional force bool Send regardless of the ready status. + */ +/datum/tgui_window/proc/send_message(type, list/payload, force) + if(!client) + return + var/message = json_encode(list( + "type" = type, + "payload" = payload, + )) + // Strip #255/improper. + message = replacetext(message, "\proper", "") + message = replacetext(message, "\improper", "") + // Pack for sending via output() + message = url_encode(message) + // Place into queue if window is still loading + if(!force && status != TGUI_WINDOW_READY) + if(!message_queue) + message_queue = list() + message_queue += list(message) + return + client << output(message, "[id].browser:update") + +/** + * public + * + * Makes an asset available to use in tgui. + * + * required asset datum/asset + */ +/datum/tgui_window/proc/send_asset(datum/asset/asset) + if(!client || !asset) + return + // if(istype(asset, /datum/asset/spritesheet)) + // var/datum/asset/spritesheet/spritesheet = asset + // send_message("asset/stylesheet", spritesheet.css_filename()) + send_message("asset/mappings", asset.get_url_mappings()) + sent_assets += list(asset) + asset.send(client) + +/** + * private + * + * Sends queued messages if the queue wasn't empty. + */ +/datum/tgui_window/proc/flush_message_queue() + if(!client || !message_queue) + return + for(var/message in message_queue) + client << output(message, "[id].browser:update") + message_queue = null + +/** + * private + * + * Callback for handling incoming tgui messages. + */ +/datum/tgui_window/proc/on_message(type, list/payload, list/href_list) + switch(type) + if("ready") + // Status can be READY if user has refreshed the window. + if(status == TGUI_WINDOW_READY) + // Resend the assets + for(var/asset in sent_assets) + send_asset(asset) + status = TGUI_WINDOW_READY + if("log") + if(href_list["fatal"]) + fatally_errored = TRUE + // Pass message to UI that requested the lock + if(locked && locked_by) + locked_by.on_message(type, payload, href_list) + flush_message_queue() + return + // If not locked, handle these message types + switch(type) + if("suspend") + close(can_be_suspended = TRUE) + if("close") + close(can_be_suspended = FALSE) diff --git a/code/modules/vchat/css/ss13styles.css b/code/modules/vchat/css/ss13styles.css index 873cf0d61b..206719676a 100644 --- a/code/modules/vchat/css/ss13styles.css +++ b/code/modules/vchat/css/ss13styles.css @@ -162,6 +162,7 @@ h1.alert, h2.alert {color: #000000;} .vulpkanin {color: #B97A57;} .enochian {color: #848A33; letter-spacing:-1pt; word-spacing:4pt; font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;} .daemon {color: #5E339E; letter-spacing:-1pt; word-spacing:0pt; font-family: "Courier New", Courier, monospace;} +.drudakar {color: #bb2463; word-spacing:0pt; font-family: "High Tower Text", monospace;} .bug {color: #9e9e39;} .vox {color: #AA00AA;} .promethean {color: #5A5A5A; font-family:"Comic Sans MS","Comic Sans",cursive;} diff --git a/code/modules/vore/eating/bellymodes_datum_vr.dm b/code/modules/vore/eating/bellymodes_datum_vr.dm index 19deb66621..04f96becd4 100644 --- a/code/modules/vore/eating/bellymodes_datum_vr.dm +++ b/code/modules/vore/eating/bellymodes_datum_vr.dm @@ -165,12 +165,16 @@ GLOBAL_LIST_INIT(digest_modes, list()) B.change_tail_nocolor(H) B.change_wing_nocolor(H) B.change_species(H, 1, 1) // ,1) preserves coloring + H.species.create_organs(H) + H.sync_organ_dna() return null if(changes_ears_tail_wing_color && (B.check_ears(H) || B.check_tail(H) || B.check_wing(H) || B.check_species(H))) B.change_ears(H) B.change_tail(H) B.change_wing(H) B.change_species(H, 1, 2) // ,2) does not preserve coloring. + H.species.create_organs(H) + H.sync_organ_dna() return null if(changes_gender && B.check_gender(H, changes_gender_to)) B.change_gender(H, changes_gender_to, 1) diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 9ffb5d9627..82030314a0 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -18,6 +18,7 @@ var/revive_ready = REVIVING_READY // Only used for creatures that have the xenochimera regen ability, so far. var/metabolism = 0.0015 var/vore_taste = null // What the character tastes like + var/vore_smell = null // What the character smells like var/no_vore = FALSE // If the character/mob can vore. var/noisy = FALSE // Toggle audible hunger. var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr. @@ -38,6 +39,7 @@ /hook/living_new/proc/vore_setup(mob/living/M) M.verbs += /mob/living/proc/escapeOOC M.verbs += /mob/living/proc/lick + M.verbs += /mob/living/proc/smell M.verbs += /mob/living/proc/switch_scaling if(M.no_vore) //If the mob isn't supposed to have a stomach, let's not give it an insidepanel so it can make one for itself, or a stomach. return TRUE @@ -231,6 +233,7 @@ P.digest_leave_remains = src.digest_leave_remains P.allowmobvore = src.allowmobvore P.vore_taste = src.vore_taste + P.vore_smell = src.vore_smell P.permit_healbelly = src.permit_healbelly P.can_be_drop_prey = src.can_be_drop_prey P.can_be_drop_pred = src.can_be_drop_pred @@ -261,6 +264,7 @@ digest_leave_remains = P.digest_leave_remains allowmobvore = P.allowmobvore vore_taste = P.vore_taste + vore_smell = P.vore_smell permit_healbelly = P.permit_healbelly can_be_drop_prey = P.can_be_drop_prey can_be_drop_pred = P.can_be_drop_pred @@ -356,6 +360,43 @@ var/datum/reagent/R = H.touching.reagent_list[1] taste_message += " You also get the flavor of [R.taste_description] from something on them" return taste_message + + + +//This is just the above proc but switched about. +/mob/living/proc/smell(mob/living/smelled in living_mobs(1)) + set name = "Smell" + set category = "IC" + set desc = "Smell someone nearby!" + set popup_menu = FALSE + + if(!istype(smelled)) + return + if(!checkClickCooldown() || incapacitated(INCAPACITATION_ALL)) + return + + setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + visible_message("[src] smell [smelled]!","You smells [smelled]. They smell like [smelled.get_smell_message()].","Sniff!") + +/mob/living/proc/get_smell_message(allow_generic = 1) + if(!vore_smell && !allow_generic) + return FALSE + + var/smell_message = "" + if(vore_smell && (vore_smell != "")) + smell_message += "[vore_smell]" + else + if(ishuman(src)) + var/mob/living/carbon/human/H = src + smell_message += "a normal [H.custom_species ? H.custom_species : H.species.name]" + else + smell_message += "a plain old normal [src]" + + return smell_message + + + + // // OOC Escape code for pref-breaking or AFK preds // @@ -599,7 +640,7 @@ to_chat(src, "You can taste the flavor of spicy cardboard.") else if(istype(I,/obj/item/device/flashlight/glowstick)) to_chat(src, "You found out the glowy juice only tastes like regret.") - else if(istype(I,/obj/item/weapon/cigbutt)) + else if(istype(I,/obj/item/trash/cigbutt)) to_chat(src, "You can taste the flavor of bitter ash. Classy.") else if(istype(I,/obj/item/clothing/mask/smokable)) var/obj/item/clothing/mask/smokable/C = I diff --git a/code/modules/vore/eating/vore_vr.dm b/code/modules/vore/eating/vore_vr.dm index 9aaa4b0cef..416a125f49 100644 --- a/code/modules/vore/eating/vore_vr.dm +++ b/code/modules/vore/eating/vore_vr.dm @@ -51,6 +51,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE var/allowmobvore = TRUE var/list/belly_prefs = list() var/vore_taste = "nothing in particular" + var/vore_smell = "nothing in particular" var/permit_healbelly = TRUE var/can_be_drop_prey = FALSE var/can_be_drop_pred = FALSE @@ -123,6 +124,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE digest_leave_remains = json_from_file["digest_leave_remains"] allowmobvore = json_from_file["allowmobvore"] vore_taste = json_from_file["vore_taste"] + vore_smell = json_from_file["vore_smell"] permit_healbelly = json_from_file["permit_healbelly"] can_be_drop_prey = json_from_file["can_be_drop_prey"] can_be_drop_pred = json_from_file["can_be_drop_pred"] @@ -166,6 +168,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE "digest_leave_remains" = digest_leave_remains, "allowmobvore" = allowmobvore, "vore_taste" = vore_taste, + "vore_smell" = vore_smell, "permit_healbelly" = permit_healbelly, "can_be_drop_prey" = can_be_drop_prey, "can_be_drop_pred" = can_be_drop_pred, diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 78d18a2edf..709138c47e 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -351,6 +351,7 @@ dat += jointext(nightmare_list, null) //AAAA dat += "
Set Your Taste" + dat += "
Set Your Smell" dat += "
Toggle Hunger Noises" //Under the last HR, save and stuff. @@ -905,6 +906,17 @@ return FALSE user.vore_taste = new_flavor + if(href_list["setsmell"]) + var/new_smell = html_encode(input(usr,"What your character smells like (40ch limit). This text will be printed to the pred after 'X smells of...' so just put something like 'strawberries and cream':","Character Smell",user.vore_smell) as text|null) + if(!new_smell) + return FALSE + + new_smell = readd_quotes(new_smell) + if(length(new_smell) > FLAVOR_MAX) + alert("Entered perfume/smell text too long. [FLAVOR_MAX] character limit.","Error!") + return FALSE + user.vore_smell = new_smell + if(href_list["toggle_dropnom_pred"]) var/choice = alert(user, "This toggle is for spontaneous, environment related vore as a predator, including drop-noms, teleporters, etc. You are currently [user.can_be_drop_pred ? " able to eat prey that you encounter by environmental actions." : "avoiding eating prey encountered in the environment."]", "", "Be Pred", "Cancel", "Don't be Pred") switch(choice) diff --git a/code/modules/xenoarcheaology/misc.dm b/code/modules/xenoarcheaology/misc.dm index 38de366259..d46d3656e6 100644 --- a/code/modules/xenoarcheaology/misc.dm +++ b/code/modules/xenoarcheaology/misc.dm @@ -1,3 +1,5 @@ +//YW change start +//TODO /obj/structure/noticeboard/anomaly notices = 5 icon_state = "nboard05" @@ -115,6 +117,7 @@ P.overlays = list("paper_stamped_rd") src.contents += P +//YW Change stop /obj/structure/bookcase/manuals/xenoarchaeology name = "Xenoarchaeology Manuals bookcase" diff --git a/code/modules/xenobio/items/extracts.dm b/code/modules/xenobio/items/extracts.dm index 6368f68e15..159bb0f151 100644 --- a/code/modules/xenobio/items/extracts.dm +++ b/code/modules/xenobio/items/extracts.dm @@ -616,7 +616,7 @@ /obj/item/slime_extract/pink name = "pink slime extract" icon_state = "pink slime extract" - description_info = "This extract will create 20u of blood clotting agent if injected with blood. It can also create 20u of bone binding agent if injected \ + description_info = "This extract will create 30u of blood clotting agent if injected with blood. It can also create 30u of bone binding agent if injected \ with phoron. When injected with water, it will create an organ-mending agent. The slime medications have a very low threshold for overdosage, however." diff --git a/config/alienwhitelist.txt b/config/alienwhitelist.txt index d182272b99..43f188c8b1 100644 --- a/config/alienwhitelist.txt +++ b/config/alienwhitelist.txt @@ -9,22 +9,28 @@ aruis - Xenochimera amarewolf - Xenochimera azmodan412 - Xenochimera bothnevarbackwards - Diona +bricker98 - Protean crossexonar - Protean chillyfang - Black-Eyed Shadekin +cgr - Protean flaktual - Vox funnyman2003 - Xenochimera +flurriee - Protean hawkerthegreat - Vox hollifex - Diona inuzari - Diona jademanique - Xenochimera jemli - Gutter ktccd - Diona +khanivore - Protean mewchild - Diona mewchild - Vox mrsebbi - Xenochimera natje - Xenochimera +nerdass - Protean oreganovulgaris - Xenochimera paradoxspace - Xenochimera +phoenixx0 - Vox rapidvalj - Vox rapidvalj - Common Skrellian rapidvalj - High Skrellian @@ -32,31 +38,27 @@ rikaru19xjenkins - Xenochimera rixunie - Diona rixunie - Gutter rykkastormheart - Xenochimera +rubyflamewing - Protean +radiantaurora - Protean seiga - Vox sepulchre - Vox silvertalismen - Diona silvertalismen - Vox silvertalismen - Xenochimera singo - Gutter +storesund97 - Protean +sharplight - Protean tastypred - Black-Eyed Shadekin tastypred - Xenochimera +tastypred - Protean timidvi - Diona varonis - Xenochimera verkister - Xenochimera +vitoras - Protean +voidalynx - Protean wickedtemp - Shadekin Empathy xioen - Diona xioen - Xenochimera -zalvine - Shadekin Empathy -zammyman215 - Vox -bricker98 - Protean -cgr - Protean -khanivore - Protean -storesund97 - Protean -tastypred - Protean -vitoras - Protean -voidalynx - Protean -nerdass - Protean xonkon - Protean -phoenixx0 - Vox -rubyflamewing - Protean -radiantaurora - Protean +zalvine - Shadekin Empathy +zammyman215 - Vox \ No newline at end of file diff --git a/html/changelogs/cerebulon - persistence.yml b/html/changelogs/cerebulon - persistence.yml new file mode 100644 index 0000000000..3b12f41967 --- /dev/null +++ b/html/changelogs/cerebulon - persistence.yml @@ -0,0 +1,38 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Cerebulon + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Added sticky notes, orderable from cargo" + -rscadd: "You can now carve graffiti into suitable walls/floors with sharp objects." + - rscadd: "Trash, graffiti, dirt (Not blood), noticeboards and stickynotes are now persistent across rounds. This is admin-toggleable." diff --git a/html/font-awesome/README.MD b/html/font-awesome/README.MD new file mode 100644 index 0000000000..7d693c36f0 --- /dev/null +++ b/html/font-awesome/README.MD @@ -0,0 +1,6 @@ +Due to the fact browse_rsc can't create subdirectories, every time you update font-awesome you'll need to change relative webfont references in all.min.css +eg ../webfonts/fa-regular-400.ttf => fa-regular-400.ttf (or whatever you call it in asset datum) + +Second change is ripping out file types other than woff and eot(ie8) from the css + +Finally, removing brand related css. \ No newline at end of file diff --git a/html/font-awesome/css/all.min.css b/html/font-awesome/css/all.min.css new file mode 100644 index 0000000000..e7cdfffe75 --- /dev/null +++ b/html/font-awesome/css/all.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa,.fab,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{animation:fa-spin 2s infinite linear}.fa-pulse{animation:fa-spin 1s infinite steps(8)}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-handshake:before{content:"\f2b5"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-wizard:before{content:"\f6e8"}.fa-haykal:before{content:"\f666"}.fa-hdd:before{content:"\f0a0"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:auto;src:url(fa-regular-400.eot);src:url(fa-regular-400.eot?#iefix) format("embedded-opentype"),url(fa-regular-400.woff) format("woff")}.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:auto;src:url(fa-solid-900.eot);src:url(fa-solid-900.eot?#iefix) format("embedded-opentype"),url(fa-solid-900.woff) format("woff")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/html/font-awesome/css/v4-shims.min.css b/html/font-awesome/css/v4-shims.min.css new file mode 100644 index 0000000000..5f3fdc598c --- /dev/null +++ b/html/font-awesome/css/v4-shims.min.css @@ -0,0 +1,5 @@ +/*! + * Font Awesome Free 5.9.0 by @fontawesome - https://fontawesome.com + * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) + */ +.fa.fa-glass:before{content:"\f000"}.fa.fa-meetup{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-star-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-file-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-pencil:before{content:"\f303"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-share-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart:before{content:"\f080"}.fa.fa-bar-chart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bar-chart-o:before{content:"\f080"}.fa.fa-facebook-square,.fa.fa-twitter-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-lemon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-scissors:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-google-plus,.fa.fa-google-plus-square,.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f3fd"}.fa.fa-comment-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard,.fa.fa-paste{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paste:before{content:"\f328"}.fa.fa-lightbulb-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f381"}.fa.fa-cloud-upload:before{content:"\f382"}.fa.fa-bell-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-o:before{content:"\f089"}.fa.fa-star-half-empty{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-empty:before{content:"\f089"}.fa.fa-star-half-full{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-star-half-full:before{content:"\f089"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before{content:"\f127"}.fa.fa-shield:before{content:"\f3ed"}.fa.fa-calendar-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ticket:before{content:"\f3ff"}.fa.fa-minus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\f155"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\f156"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f15e"}.fa.fa-sort-amount-asc:before{content:"\f160"}.fa.fa-sort-amount-desc:before{content:"\f161"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f163"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube,.fa.fa-youtube-play,.fa.fa-youtube-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\f195"}.fa.fa-plus-square-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-google,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle,.fa.fa-yahoo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-spoon:before{content:"\f2e5"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-envelope-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-deviantart,.fa.fa-soundcloud{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-life-bouy,.fa.fa-life-ring{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-bouy:before{content:"\f1cd"}.fa.fa-life-buoy{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-buoy:before{content:"\f1cd"}.fa.fa-life-saver{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-life-saver:before{content:"\f1cd"}.fa.fa-support{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git,.fa.fa-git-square,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-sliders:before{content:"\f1de"}.fa.fa-futbol-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-angellist,.fa.fa-ioxhost,.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-meanpath{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-meanpath:before{content:"\f2b4"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before{content:"\f224"}.fa.fa-facebook-official{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-clone,.fa.fa-hourglass-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-chrome,.fa.fa-creative-commons,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-internet-explorer,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square,.fa.fa-opera,.fa.fa-safari,.fa.fa-tripadvisor,.fa.fa-wikipedia-w{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-snapchat,.fa.fa-snapchat-ghost,.fa.fa-snapchat-square,.fa.fa-themeisle,.fa.fa-viadeo,.fa.fa-viadeo-square,.fa.fa-yoast{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 5 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 5 Free";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-spotify,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 5 Brands";font-weight:400} \ No newline at end of file diff --git a/html/font-awesome/webfonts/fa-regular-400.eot b/html/font-awesome/webfonts/fa-regular-400.eot new file mode 100644 index 0000000000..d62be2fad8 Binary files /dev/null and b/html/font-awesome/webfonts/fa-regular-400.eot differ diff --git a/html/font-awesome/webfonts/fa-regular-400.woff b/html/font-awesome/webfonts/fa-regular-400.woff new file mode 100644 index 0000000000..43b1a9ae49 Binary files /dev/null and b/html/font-awesome/webfonts/fa-regular-400.woff differ diff --git a/html/font-awesome/webfonts/fa-solid-900.eot b/html/font-awesome/webfonts/fa-solid-900.eot new file mode 100644 index 0000000000..c77baa8d46 Binary files /dev/null and b/html/font-awesome/webfonts/fa-solid-900.eot differ diff --git a/html/font-awesome/webfonts/fa-solid-900.woff b/html/font-awesome/webfonts/fa-solid-900.woff new file mode 100644 index 0000000000..77c1786227 Binary files /dev/null and b/html/font-awesome/webfonts/fa-solid-900.woff differ diff --git a/icons/effects/writing.dmi b/icons/effects/writing.dmi new file mode 100644 index 0000000000..bbf4055bce Binary files /dev/null and b/icons/effects/writing.dmi differ diff --git a/icons/mob/animal.dmi b/icons/mob/animal.dmi index 0c0dce59bc..e42df29d4b 100644 Binary files a/icons/mob/animal.dmi and b/icons/mob/animal.dmi differ diff --git a/icons/mob/items/lefthand_holder.dmi b/icons/mob/items/lefthand_holder.dmi index d629c657ce..14cd2406f0 100644 Binary files a/icons/mob/items/lefthand_holder.dmi and b/icons/mob/items/lefthand_holder.dmi differ diff --git a/icons/mob/items/righthand_holder.dmi b/icons/mob/items/righthand_holder.dmi index c1e0563ec4..19bb1967f6 100644 Binary files a/icons/mob/items/righthand_holder.dmi and b/icons/mob/items/righthand_holder.dmi differ diff --git a/icons/mob/map_backgrounds.dmi b/icons/mob/map_backgrounds.dmi new file mode 100644 index 0000000000..dc6e3e46b1 Binary files /dev/null and b/icons/mob/map_backgrounds.dmi differ diff --git a/icons/mob/uniform_1.dmi b/icons/mob/uniform_1.dmi index cd1b4d1e4e..32b15484a0 100644 Binary files a/icons/mob/uniform_1.dmi and b/icons/mob/uniform_1.dmi differ diff --git a/icons/obj/closets/bases/crate.dmi b/icons/obj/closets/bases/crate.dmi index e8946f3b35..83500acb3b 100644 Binary files a/icons/obj/closets/bases/crate.dmi and b/icons/obj/closets/bases/crate.dmi differ diff --git a/icons/obj/closets/bases/large_crate.dmi b/icons/obj/closets/bases/large_crate.dmi index 1cdac27783..fd3400ed72 100644 Binary files a/icons/obj/closets/bases/large_crate.dmi and b/icons/obj/closets/bases/large_crate.dmi differ diff --git a/icons/obj/closets/decals/crate.dmi b/icons/obj/closets/decals/crate.dmi index 533bf20728..1fce07d882 100644 Binary files a/icons/obj/closets/decals/crate.dmi and b/icons/obj/closets/decals/crate.dmi differ diff --git a/icons/obj/closets/decals/large_crate.dmi b/icons/obj/closets/decals/large_crate.dmi index 4876570265..2a9ff64380 100644 Binary files a/icons/obj/closets/decals/large_crate.dmi and b/icons/obj/closets/decals/large_crate.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 03a5e7fb09..998d31b2f8 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/uniforms_1.dmi b/icons/obj/clothing/uniforms_1.dmi index 35eb06f7a2..47b06c8b29 100644 Binary files a/icons/obj/clothing/uniforms_1.dmi and b/icons/obj/clothing/uniforms_1.dmi differ diff --git a/icons/obj/cooking_machines.dmi b/icons/obj/cooking_machines.dmi index 666a31b9d0..2badbd97e9 100644 Binary files a/icons/obj/cooking_machines.dmi and b/icons/obj/cooking_machines.dmi differ diff --git a/icons/obj/food.dmi b/icons/obj/food.dmi index 64f4753b7b..a4f740f88e 100644 Binary files a/icons/obj/food.dmi and b/icons/obj/food.dmi differ diff --git a/icons/obj/food_syn.dmi b/icons/obj/food_syn.dmi new file mode 100644 index 0000000000..f794f3f7de Binary files /dev/null and b/icons/obj/food_syn.dmi differ diff --git a/icons/obj/stickynotes.dmi b/icons/obj/stickynotes.dmi new file mode 100644 index 0000000000..8ca70a4149 Binary files /dev/null and b/icons/obj/stickynotes.dmi differ diff --git a/icons/obj/storage.dmi b/icons/obj/storage.dmi index 9b7ad90e8f..5bf804c9bc 100644 Binary files a/icons/obj/storage.dmi and b/icons/obj/storage.dmi differ diff --git a/interface/skin.dmf b/interface/skin.dmf index a88f8f7a39..d91096dc12 100644 --- a/interface/skin.dmf +++ b/interface/skin.dmf @@ -1194,6 +1194,7 @@ window "mapwindow" text-color = none is-default = true saved-params = "icon-size" + zoom-mode = "distort" on-show = ".winset\"mainwindow.mainvsplit.left=mapwindow\"" on-hide = ".winset\"mainwindow.mainvsplit.left=\"" diff --git a/maps/northern_star/polaris-1.dmm b/maps/northern_star/polaris-1.dmm index 63b9b7e3ef..99eb412e6d 100644 --- a/maps/northern_star/polaris-1.dmm +++ b/maps/northern_star/polaris-1.dmm @@ -4612,12 +4612,12 @@ "bKJ" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/hydroponics) "bKK" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/item/weapon/book/manual/chef_recipes,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Port"; dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bKL" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bKM" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/fryer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bKN" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/grill,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bKM" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/fryer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bKN" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/grill,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bKO" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bKP" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bKQ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bKR" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bKR" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bKS" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bKT" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bKU" = (/turf/simulated/wall/r_wall,/area/medical/chemistry) @@ -4716,7 +4716,7 @@ "bMJ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/start{name = "Chef"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bMK" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bML" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bMM" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/candy,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bMM" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/mixer/candy,/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bMN" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bMO" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) "bMP" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) @@ -4817,7 +4817,7 @@ "bOG" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bOH" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bOI" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/material/knife/butch,/obj/item/weapon/material/kitchen/rollingpin,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bOJ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/cereal,/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Starboard"; dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bOJ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/mixer/cereal,/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Starboard"; dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bOK" = (/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/item/stack/material/phoron,/obj/structure/table/reinforced,/obj/machinery/button/remote/blast_door{id = "chemcounter"; name = "Pharmacy Counter Lockdown Control"; pixel_y = 14},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/corner/beige{dir = 9},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bOL" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/chemistry) "bOM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/simulated/floor/tiled/white,/area/medical/chemistry) diff --git a/maps/southern_cross/datums/supplypacks/munitions.dm b/maps/southern_cross/datums/supplypacks/munitions.dm index fa24358ceb..ee51fc4f0c 100644 --- a/maps/southern_cross/datums/supplypacks/munitions.dm +++ b/maps/southern_cross/datums/supplypacks/munitions.dm @@ -10,7 +10,7 @@ /obj/item/ammo_magazine/clip/c762/hunter = 6 ) cost = 50 - containertype = /obj/structure/closet/crate/secure/weapon + containertype = /obj/structure/closet/crate/secure/hedberg containername = "Hunting Rifle crate" access = access_explorer @@ -20,7 +20,7 @@ /obj/item/weapon/gun/energy/phasegun = 2, ) cost = 25 - containertype = /obj/structure/closet/crate/secure/weapon + containertype = /obj/structure/closet/crate/secure/ward containername = "Phase Carbine crate" access = access_explorer @@ -30,6 +30,6 @@ /obj/item/weapon/gun/energy/phasegun/rifle = 2, ) cost = 50 - containertype = /obj/structure/closet/crate/secure/weapon + containertype = /obj/structure/closet/crate/secure/ward containername = "Phase Rifle crate" access = access_explorer \ No newline at end of file diff --git a/maps/southern_cross/southern_cross-1.dmm b/maps/southern_cross/southern_cross-1.dmm index b276f58b45..1bf367399d 100644 --- a/maps/southern_cross/southern_cross-1.dmm +++ b/maps/southern_cross/southern_cross-1.dmm @@ -302,7 +302,7 @@ "afP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/universal{dir = 4},/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afR" = (/obj/machinery/atmospherics/valve/shutoff{name = "Deck 1 Fore Starboard automatic shutoff valve"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) -"afS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/closet/crate,/obj/item/weapon/toy/xmas_cracker,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) +"afS" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/weapon/toy/xmas_cracker,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "afT" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/item/device/paicard,/turf/simulated/floor/plating,/area/construction/firstdeck/construction5) "afU" = (/obj/effect/decal/cleanable/blood/oil/streak{amount = 0},/obj/item/weapon/tool/wirecutters,/turf/simulated/floor/tiled,/area/construction/firstdeck/construction5) "afV" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/shower{dir = 4; icon_state = "shower"; pixel_x = 5; pixel_y = -1},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/toilet/firstdeck) @@ -318,8 +318,8 @@ "agf" = (/obj/machinery/firealarm{dir = 2; pixel_y = 24},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "agg" = (/obj/structure/filingcabinet/security{name = "Security Records"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "agh" = (/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) -"agi" = (/obj/structure/closet/crate,/obj/item/weapon/storage/backpack,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) -"agj" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/clean,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/item/toy/xmastree,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) +"agi" = (/obj/item/weapon/storage/backpack,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) +"agj" = (/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/clean,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/item/toy/xmastree,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "agk" = (/obj/structure/table/rack,/obj/item/weapon/flame/lighter/random,/obj/random/maintenance/clean,/obj/random/cigarettes,/obj/random/maintenance/clean,/obj/effect/floor_decal/industrial/warning{dir = 4},/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "agl" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/plating,/area/hangar/three) "agm" = (/turf/simulated/floor/reinforced,/area/hangar/three) @@ -350,7 +350,7 @@ "agL" = (/obj/structure/closet/crate,/obj/item/stack/material/gold,/obj/item/weapon/storage/belt/champion,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/gold,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/obj/item/stack/material/silver,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "agM" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/hologram/holopad,/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) "agN" = (/obj/structure/filingcabinet/medical{desc = "A large cabinet with hard copy medical records."; name = "Medical Records"},/turf/simulated/floor/tiled/dark,/area/security/nuke_storage) -"agO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) +"agO" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "agP" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) "agQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "agR" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) @@ -531,7 +531,7 @@ "akk" = (/obj/structure/bed/chair{dir = 1},/obj/structure/closet/walllocker/emerglocker{pixel_x = -28},/obj/effect/shuttle_landmark/southern_cross/escape_pod1/station{base_area = /area/hallway/primary/firstdeck/auxdockfore},/turf/simulated/shuttle/floor,/area/shuttle/escape_pod1/station) "akl" = (/obj/machinery/door/airlock/voidcraft/vertical{frequency = 1380; id_tag = "shuttle1_outer"; name = "External Access"},/obj/machinery/access_button{command = "cycle_exterior"; frequency = 1380; master_tag = "shuttle1_shuttle"; name = "exterior access button"; pixel_x = 0; pixel_y = 26; req_access = null},/turf/simulated/shuttle/floor/black,/area/shuttle/shuttle1/start) "akm" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/foreport) -"akn" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/random/maintenance/cargo,/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/firstdeck/foreport) +"akn" = (/obj/structure/cable{d2 = 8; icon_state = "0-8"},/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor,/area/maintenance/firstdeck/foreport) "ako" = (/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter) "akp" = (/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter) "akq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/firstdeck/fpcenter) @@ -564,7 +564,7 @@ "akR" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 1; frequency = 1380; id_tag = "shuttle1_pump"},/obj/structure/closet/emcloset,/turf/simulated/shuttle/floor/black,/area/shuttle/shuttle1/start) "akS" = (/obj/machinery/shuttle_sensor{dir = 5; id_tag = "shuttle1sens_exp"},/turf/simulated/shuttle/wall/voidcraft/blue,/area/shuttle/shuttle1/start) "akT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/spot{dir = 4},/obj/machinery/camera/network/first_deck{c_tag = "Hangar One - Aft Starboard"; dir = 8},/turf/simulated/floor/tiled/monotile,/area/hangar/one) -"akU" = (/obj/structure/closet/crate,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/maintenance/clean,/obj/random/toy,/obj/item/weapon/toy/xmas_cracker,/turf/simulated/floor,/area/maintenance/firstdeck/foreport) +"akU" = (/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/action_figure,/obj/random/maintenance/clean,/obj/random/toy,/obj/item/weapon/toy/xmas_cracker,/obj/random/crate,/turf/simulated/floor,/area/maintenance/firstdeck/foreport) "akV" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter) "akW" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter) "akX" = (/obj/effect/floor_decal/borderfloor,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/green/bordercorner2,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fpcenter) @@ -584,7 +584,7 @@ "all" = (/obj/effect/floor_decal/borderfloor,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/corner/green/border,/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) "alm" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) "aln" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) -"alo" = (/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/obj/random/toolbox,/obj/effect/decal/cleanable/molten_item,/obj/structure/closet/crate,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/structure/catwalk,/turf/simulated/floor,/area/maintenance/firstdeck/forestarboard) +"alo" = (/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/obj/random/toolbox,/obj/effect/decal/cleanable/molten_item,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/structure/catwalk,/obj/random/crate,/turf/simulated/floor,/area/maintenance/firstdeck/forestarboard) "alp" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/spot{dir = 8},/obj/machinery/camera/network/first_deck{c_tag = "Hangar Three - Aft Port"; dir = 4},/turf/simulated/floor/tiled/monotile,/area/hangar/three) "alq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light/spot{dir = 4},/obj/machinery/camera/network/first_deck{c_tag = "Hangar Three - Aft Starboard"; dir = 8},/turf/simulated/floor/tiled/monotile,/area/hangar/three) "alr" = (/turf/simulated/wall/r_wall,/area/maintenance/firstdeck/centralstarboard) @@ -661,8 +661,8 @@ "amK" = (/turf/simulated/wall,/area/tcomm/computer) "amL" = (/obj/machinery/firealarm{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/fscenter) "amM" = (/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) -"amN" = (/obj/structure/closet/crate/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/firstdeck/forestarboard) -"amO" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/hangar/three) +"amN" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle1/start) +"amO" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle1/start) "amP" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hangar/three) "amQ" = (/turf/simulated/floor/airless,/area/rnd/xenobiology/xenoflora) "amR" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = -28; pixel_y = 0},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod2/station) @@ -693,7 +693,7 @@ "anq" = (/obj/structure/cable/cyan{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/atmospherics/pipe/manifold/hidden{dir = 4; icon_state = "map"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/tcomm/computer) "anr" = (/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) "ans" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/fscenter) -"ant" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) +"ant" = (/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor,/area/maintenance/firstdeck/forestarboard) "anu" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/space_heater,/turf/simulated/floor/tiled,/area/hangar/three) "anv" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/monotile,/area/hangar/three) "anw" = (/obj/effect/floor_decal/borderfloorblack/corner{dir = 4},/obj/effect/floor_decal/industrial/danger/corner{dir = 4},/turf/simulated/floor/tiled,/area/hangar/three) @@ -704,7 +704,7 @@ "anB" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 2; external_pressure_bound = 140; external_pressure_bound_default = 140; icon_state = "map_vent_out"; pressure_checks = 1; pressure_checks_default = 1; use_power = 1},/turf/simulated/floor/airless,/area/rnd/xenobiology/xenoflora) "anC" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/rnd/xenobiology/xenoflora_isolation) "anD" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "large_escape_pod_2_hatch"; locked = 1; name = "Large Escape Pod Hatch 2"; req_access = list(13)},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station) -"anE" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle1/start) +"anE" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/random/crate,/turf/simulated/floor/tiled,/area/hangar/three) "anF" = (/obj/machinery/space_heater,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hangar/one) "anG" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/turf/simulated/floor/tiled/monotile,/area/hangar/one) "anH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled/monotile,/area/hangar/one) @@ -726,7 +726,7 @@ "anX" = (/obj/machinery/telecomms/bus/preset_two/southerncross,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) "anY" = (/obj/machinery/telecomms/relay/preset/southerncross/d1,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) "anZ" = (/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) -"aoa" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle1/start) +"aoa" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/forestarboard) "aob" = (/obj/machinery/telecomms/bus/preset_four,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) "aoc" = (/obj/machinery/telecomms/processor/preset_four,/turf/simulated/floor/tiled/dark{nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) "aod" = (/obj/machinery/atmospherics/pipe/simple/hidden/black,/turf/simulated/floor/bluegrid{name = "Mainframe Base"; nitrogen = 100; oxygen = 0; temperature = 80},/area/tcomm/chamber) @@ -847,7 +847,7 @@ "aqo" = (/turf/simulated/floor/plating,/area/construction/firstdeck/construction4) "aqp" = (/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/turf/simulated/floor/wood,/area/construction/firstdeck/construction4) "aqq" = (/turf/simulated/floor/wood,/area/construction/firstdeck/construction4) -"aqr" = (/obj/random/drinkbottle,/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/drinkbottle,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/turf/simulated/floor/wood,/area/construction/firstdeck/construction4) +"aqr" = (/obj/random/drinkbottle,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/drinkbottle,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/random/crate,/turf/simulated/floor/wood,/area/construction/firstdeck/construction4) "aqs" = (/obj/structure/closet/emcloset,/obj/machinery/ai_status_display{pixel_y = 32},/obj/effect/floor_decal/borderfloor{dir = 9},/obj/effect/floor_decal/corner/red/border{dir = 9},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1) "aqt" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/white/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1) "aqu" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 2; icon_state = "0-2"; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/red/border{dir = 1},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard1) @@ -1286,7 +1286,7 @@ "ayL" = (/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/turf/simulated/floor/tiled/dark,/area/hallway/primary/firstdeck/starboard) "ayM" = (/obj/turbolift_map_holder/southern_cross/starboard,/turf/unsimulated/mask,/area/hallway/primary/firstdeck/starboard) "ayN" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralstarboard) -"ayO" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) +"ayO" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/structure/catwalk,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) "ayP" = (/obj/structure/closet/emcloset,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) "ayQ" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) "ayR" = (/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) @@ -1301,7 +1301,7 @@ "aza" = (/obj/item/frame,/obj/machinery/light_construct,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/maintenance/firstdeck/aftport) "azb" = (/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/maintenance/firstdeck/aftport) "azc" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) -"azd" = (/obj/structure/closet/crate,/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/item/weapon/storage/backpack,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) +"azd" = (/obj/item/device/multitool,/obj/item/device/multitool,/obj/item/device/assembly/prox_sensor,/obj/item/device/flashlight,/obj/item/weapon/storage/backpack,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) "aze" = (/obj/structure/reagent_dispensers/fueltank,/turf/simulated/floor,/area/maintenance/firstdeck/aftport) "azf" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor,/area/maintenance/firstdeck/aftport) "azg" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) @@ -1415,7 +1415,7 @@ "aBk" = (/obj/structure/door_assembly/door_assembly_ext,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) "aBl" = (/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/random/maintenance/clean,/obj/random/tech_supply,/obj/random/tech_supply,/obj/item/weapon/airlock_electronics,/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) "aBm" = (/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "crglockdown"; name = "Cargo Lockdown"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/firstdeck/centralport) -"aBn" = (/obj/item/device/flashlight,/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) +"aBn" = (/obj/item/device/flashlight,/obj/random/crate,/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) "aBo" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) "aBp" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tool/powermaint,/turf/simulated/floor,/area/construction/firstdeck/construction2) "aBq" = (/obj/machinery/alarm{dir = 1; icon_state = "alarm0"; pixel_y = -22},/obj/structure/table/steel,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/turf/simulated/floor/plating,/area/construction/firstdeck/construction2) @@ -1459,7 +1459,7 @@ "aCc" = (/obj/machinery/computer/crew{dir = 8},/turf/simulated/floor/tiled/techmaint,/area/medical/first_aid_station/firstdeck) "aCd" = (/obj/structure/table/reinforced,/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled,/area/hangar/twocontrol) "aCe" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/obj/structure/table/steel,/turf/simulated/floor/plating,/area/construction/firstdeck/construction3) -"aCf" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/structure/closet/crate,/turf/simulated/floor,/area/construction/firstdeck/construction3) +"aCf" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/random/crate,/turf/simulated/floor,/area/construction/firstdeck/construction3) "aCg" = (/obj/structure/cable,/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/turf/simulated/floor/plating,/area/construction/firstdeck/construction3) "aCh" = (/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/turf/simulated/floor/tiled/steel,/area/construction/firstdeck/construction3) "aCi" = (/obj/structure/closet/emcloset,/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/red/border{dir = 10},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_starboard2) @@ -1531,9 +1531,9 @@ "aDw" = (/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/quartermaster/storage) "aDx" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/storage) "aDy" = (/obj/machinery/light/spot{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"aDz" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"aDA" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) -"aDB" = (/obj/machinery/firealarm{pixel_y = 24},/obj/structure/closet/crate/freezer,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) +"aDz" = (/obj/structure/extinguisher_cabinet{pixel_y = 30},/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/random/crate,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"aDA" = (/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/random/crate,/turf/simulated/floor/tiled,/area/quartermaster/storage) +"aDB" = (/obj/machinery/firealarm{pixel_y = 24},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/obj/random/crate,/turf/simulated/floor/tiled,/area/quartermaster/storage) "aDC" = (/obj/structure/table/steel_reinforced,/obj/machinery/cell_charger,/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) "aDD" = (/obj/structure/table/steel_reinforced,/obj/item/clothing/accessory/armband/cargo,/obj/item/device/retail_scanner/cargo,/obj/machinery/requests_console{department = "Cargo Bay"; departmentType = 2; pixel_x = 0; pixel_y = 28},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/storage) "aDE" = (/obj/structure/table/steel_reinforced,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/stamp/cargo,/obj/effect/floor_decal/borderfloor{dir = 5},/obj/effect/floor_decal/corner/brown/border{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/storage) @@ -1690,7 +1690,7 @@ "aGz" = (/obj/machinery/computer/telecomms/monitor{dir = 4; network = "tcommsat"},/obj/structure/cable/cyan{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/black{dir = 4},/turf/simulated/floor/tiled/dark,/area/tcomm/computer) "aGA" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "propulsion_l"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) "aGB" = (/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/effect/floor_decal/industrial/danger{dir = 8},/turf/simulated/floor/tiled,/area/hangar/two) -"aGC" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/hangar/two) +"aGC" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) "aGD" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/pipe/simple/visible,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station) "aGE" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor/white,/area/shuttle/large_escape_pod1/station) "aGF" = (/obj/structure/grille,/obj/structure/shuttle/window,/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/station) @@ -1723,7 +1723,7 @@ "aHg" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) "aHh" = (/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/tiled,/area/hallway/primary/firstdeck/ascenter) "aHi" = (/obj/machinery/floodlight,/turf/simulated/floor,/area/maintenance/firstdeck/aftstarboard) -"aHj" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/structure/closet/crate,/turf/simulated/floor/tiled,/area/hangar/two) +"aHj" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle2/start) "aHk" = (/turf/simulated/shuttle/wall/voidcraft/no_join,/area/shuttle/shuttle2/start) "aHl" = (/turf/simulated/shuttle/wall/voidcraft,/area/shuttle/shuttle2/start) "aHm" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/closet/emcloset,/turf/simulated/floor/tiled/steel,/area/hangar/two) @@ -1758,7 +1758,7 @@ "aHP" = (/turf/simulated/floor/tiled,/area/tcomm/entrance) "aHQ" = (/obj/machinery/atmospherics/pipe/simple/visible{dir = 4},/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/shuttle/shuttle2/start) "aHR" = (/obj/machinery/teleport/station,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tcomm/entrance) -"aHS" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) +"aHS" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle2/start) "aHT" = (/obj/machinery/teleport/hub,/obj/effect/floor_decal/industrial/hatch/yellow,/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/tiled/techfloor,/area/tcomm/entrance) "aHU" = (/turf/simulated/shuttle/wall/voidcraft/hard_corner,/area/shuttle/shuttle2/start) "aHV" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/shuttle/plating,/area/shuttle/shuttle2/start) @@ -1929,7 +1929,7 @@ "aLe" = (/obj/machinery/light/small{dir = 8},/obj/structure/ore_box,/turf/simulated/floor/plating,/area/maintenance/substation/firstdeck/cargo) "aLf" = (/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/maintenance/substation/firstdeck/cargo) "aLg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/alarm{dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/substation/firstdeck/cargo) -"aLh" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/lights/mixed,/obj/item/stack/cable_coil/random,/obj/machinery/light_construct,/obj/machinery/light_construct,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) +"aLh" = (/obj/structure/extinguisher_cabinet{pixel_x = 25},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/random/crate,/turf/simulated/floor/tiled,/area/hangar/two) "aLi" = (/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) "aLj" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = list(12)},/turf/simulated/floor/plating,/area/storage/emergency_storage/firstdeck/ap_emergency) "aLk" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/storage/emergency_storage/firstdeck/ap_emergency) @@ -1993,7 +1993,7 @@ "aMq" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/powered/scrubber,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMr" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{dir = 10; icon_state = "intact"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMs" = (/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) -"aMt" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_r"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle2/start) +"aMt" = (/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/obj/random/crate,/turf/simulated/floor/tiled,/area/hangar/two) "aMu" = (/obj/machinery/space_heater,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMv" = (/obj/machinery/portable_atmospherics/hydroponics,/obj/machinery/atmospherics/portables_connector,/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/tiled/white,/area/rnd/xenobiology/xenoflora_isolation) "aMw" = (/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 4; icon_state = "intact"},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) @@ -2027,7 +2027,7 @@ "aMY" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red,/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aMZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/structure/bed/chair/office/dark{dir = 4},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aNa" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/red{icon_state = "intact"; dir = 4},/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/engineering/auxiliary_engineering) -"aNb" = (/turf/simulated/floor/reinforced,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion_l"; dir = 1},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/shuttle2/start) +"aNb" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "propulsion_r"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) "aNc" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/atmospherics/pipe/simple/visible/cyan,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aNd" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 4},/obj/machinery/space_heater,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) "aNe" = (/obj/machinery/atmospherics/pipe/simple/visible/red{icon_state = "intact"; dir = 10},/obj/effect/floor_decal/rust,/turf/simulated/floor/tiled/steel_dirty,/area/engineering/auxiliary_engineering) @@ -2271,7 +2271,7 @@ "aRI" = (/turf/simulated/floor/airless,/area/hallway/secondary/escape/firstdeck/ep_aftport) "aRJ" = (/turf/simulated/shuttle/wall,/area/shuttle/escape_pod3/station) "aRK" = (/turf/simulated/shuttle/wall/no_join{base_state = "orange"; icon = 'icons/turf/shuttle_orange.dmi'; icon_state = "orange"},/area/shuttle/escape_pod3/station) -"aRL" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{dir = 8; icon_state = "propulsion_r"},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/large_escape_pod1/station) +"aRL" = (/obj/item/weapon/storage/box/lights/mixed,/obj/item/stack/cable_coil/random,/obj/machinery/light_construct,/obj/machinery/light_construct,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/firstdeck/aftport) "aRM" = (/turf/simulated/wall,/area/hallway/secondary/escape/firstdeck/ep_aftport) "aRN" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftport) "aRO" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/escape/firstdeck/ep_aftport) @@ -3510,7 +3510,7 @@ "bpz" = (/obj/machinery/atmospherics/valve/digital/open,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "bpA" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/security_starboard) "bpB" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/maintenance/security_starboard) -"bpC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/machinery/meter,/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/floor/plating,/area/maintenance/security_starboard) +"bpC" = (/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/machinery/meter,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/security_starboard) "bpD" = (/obj/effect/floor_decal/corner/black/full,/obj/machinery/camera/network/engineering{c_tag = "Atmospherics Tank - Carbon Dioxide"; dir = 4},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "bpE" = (/obj/effect/floor_decal/corner/black/full{dir = 4},/obj/machinery/atmospherics/unary/vent_pump{dir = 4; external_pressure_bound = 0; external_pressure_bound_default = 0; frequency = 1441; icon_state = "map_vent_in"; id_tag = "co2_out"; initialize_directions = 1; internal_pressure_bound = 4000; internal_pressure_bound_default = 4000; pressure_checks = 2; pressure_checks_default = 2; pump_direction = 0; use_power = 1},/turf/simulated/floor/reinforced/carbon_dioxide,/area/engineering/atmos) "bpF" = (/obj/machinery/atmospherics/pipe/simple/visible/green{icon_state = "intact"; dir = 4},/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/obj/machinery/meter,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "atmoslockdown"; name = "Atmospherics Lockdown"; opacity = 0},/turf/simulated/floor,/area/engineering/atmos) @@ -4027,7 +4027,7 @@ "bzw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/fore) "bzx" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/red/bordercorner{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/fore) "bzy" = (/obj/machinery/door/firedoor/glass,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = list(5,12,19)},/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/seconddeck/fore) -"bzz" = (/obj/structure/closet/crate,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/tech_supply,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/research) +"bzz" = (/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/medical,/obj/random/medical/lite,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/research) "bzA" = (/obj/structure/closet/jcloset,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/item/weapon/soap/nanotrasen,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled,/area/janitor) "bzB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/tiled,/area/janitor) "bzC" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/janitor) @@ -4115,7 +4115,7 @@ "bBg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research) "bBh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/maintenance/research) "bBi" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/maintenance/research) -"bBj" = (/obj/structure/closet/crate/plastic,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/medical,/obj/random/medical/lite,/obj/random/bomb_supply,/obj/random/bomb_supply,/turf/simulated/floor/plating,/area/maintenance/research) +"bBj" = (/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/research) "bBk" = (/obj/structure/closet,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/random/maintenance/security,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/research,/turf/simulated/floor/plating,/area/maintenance/research) "bBl" = (/turf/simulated/wall/r_wall,/area/crew_quarters/heads/sc/hor) "bBm" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/obj/machinery/meter,/turf/simulated/floor/plating,/area/maintenance/research) @@ -5131,7 +5131,7 @@ "bUI" = (/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/navbeacon/patrol{location = "CH11"; next_patrol = "CH12"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/fscenter) "bUJ" = (/obj/structure/flora/ausbushes/sparsegrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/fscenter) "bUK" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/research) -"bUL" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/research) +"bUL" = (/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/research) "bUM" = (/obj/machinery/r_n_d/protolathe,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/lab) "bUN" = (/turf/simulated/floor/tiled,/area/rnd/lab) "bUO" = (/obj/machinery/r_n_d/destructive_analyzer,/obj/effect/floor_decal/industrial/outline/yellow,/turf/simulated/floor/tiled,/area/rnd/lab) @@ -5501,7 +5501,7 @@ "cbO" = (/obj/structure/flora/ausbushes/fullgrass,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/fscenter) "cbP" = (/obj/machinery/portable_atmospherics/hydroponics/soil,/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Center Two"; dir = 8},/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/fscenter) "cbQ" = (/obj/structure/closet/emcloset,/turf/simulated/floor/plating,/area/maintenance/research) -"cbR" = (/obj/structure/closet/crate,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/turf/simulated/floor/plating,/area/maintenance/research) +"cbR" = (/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/powercell,/obj/random/powercell,/obj/random/powercell,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/research) "cbS" = (/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/clipboard,/obj/item/weapon/folder/white,/obj/item/weapon/pen,/obj/machinery/newscaster{pixel_x = -30; pixel_y = 0},/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/purple/border{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/lab) "cbT" = (/obj/item/weapon/folder/white,/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/tech_disk{pixel_x = 0; pixel_y = 0},/obj/item/weapon/disk/design_disk,/obj/item/weapon/disk/design_disk,/obj/item/weapon/reagent_containers/dropper{pixel_y = -4},/obj/machinery/firealarm{dir = 1; pixel_x = 0; pixel_y = -24},/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/lab) "cbU" = (/obj/machinery/recharger{pixel_y = 0},/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/console_screen,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/matter_bin,/obj/item/weapon/stock_parts/micro_laser,/obj/item/weapon/stock_parts/micro_laser,/obj/machinery/ai_status_display{pixel_y = -32},/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/purple/border,/turf/simulated/floor/tiled/white,/area/rnd/lab) @@ -5582,13 +5582,13 @@ "cdr" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/recharge_station,/obj/machinery/camera/network/research{c_tag = "SCI - Mech Bay"; dir = 8},/obj/structure/extinguisher_cabinet{pixel_y = -30},/obj/machinery/ai_status_display{pixel_x = 32; pixel_y = 0},/turf/simulated/floor/tiled/techmaint,/area/assembly/chargebay) "cds" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "Biohazard"; name = "Biohazard Shutter"; opacity = 0},/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdt" = (/turf/simulated/wall/r_wall,/area/maintenance/research_medical) -"cdu" = (/obj/structure/closet/crate,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tool,/turf/simulated/floor/plating,/area/maintenance/research_medical) +"cdu" = (/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/item/stack/tile/floor/white,/obj/random/powercell,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tool,/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdv" = (/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdw" = (/obj/item/stack/cable_coil,/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdx" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/item/stack/cable_coil,/obj/item/weapon/coin/silver,/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdy" = (/obj/structure/table/rack{dir = 1},/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdz" = (/obj/structure/table/glass,/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/purple/border{dir = 8},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway) -"cdA" = (/obj/structure/closet/crate,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/tech_supply,/obj/random/technology_scanner,/obj/random/tool,/turf/simulated/floor/plating,/area/maintenance/research_medical) +"cdA" = (/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/bomb_supply,/obj/random/tech_supply,/obj/random/technology_scanner,/obj/random/tool,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/research_medical) "cdB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway) "cdC" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/rnd/research/firstdeck/hallway) "cdD" = (/obj/machinery/camera/network/research{c_tag = "SCI - Research Hallway Aft"; dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner{dir = 4},/obj/effect/floor_decal/corner/purple/bordercorner{dir = 4},/turf/simulated/floor/tiled/white,/area/rnd/research) @@ -5634,7 +5634,7 @@ "cer" = (/obj/effect/floor_decal/industrial/hatch/yellow,/obj/machinery/door/blast/regular{density = 0; dir = 1; icon_state = "pdoor0"; id = "englockdown"; name = "Engineering Lockdown"; opacity = 0},/obj/structure/sign/warning/secure_area{pixel_x = 32},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/port) "ces" = (/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/engineering) "cet" = (/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/engineering) -"ceu" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/maintenance/engineering) +"ceu" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/engineering) "cev" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/firedoor/border_only,/obj/structure/disposalpipe/segment,/obj/machinery/door/airlock/engineering{name = "Utility Down"; req_one_access = list(11,24)},/turf/simulated/floor/plating,/area/maintenance/engineering) "cew" = (/obj/structure/disposalpipe/broken{dir = 1},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/engineering) "cex" = (/obj/machinery/vending/coffee{dir = 4},/turf/simulated/floor/tiled/hydro,/area/hallway/primary/seconddeck/fpcenter) @@ -6354,7 +6354,7 @@ "csj" = (/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) "csk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/apcenter) "csl" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) -"csm" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/effect/decal/cleanable/dirt,/obj/structure/closet/crate,/obj/random/maintenance/medical,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/central) +"csm" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/medical,/obj/random/maintenance/research,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/central) "csn" = (/obj/machinery/atmospherics/pipe/simple/visible/universal,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/central) "cso" = (/obj/machinery/lapvend,/obj/machinery/light{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell) "csp" = (/obj/structure/table/glass,/obj/machinery/firealarm{pixel_y = 24},/obj/machinery/recharger{pixel_y = 0},/obj/machinery/camera/network/second_deck{c_tag = "Second Deck - Center Stair Access"; dir = 2},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/stairwell) @@ -6809,7 +6809,7 @@ "cAW" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cAX" = (/obj/machinery/disposal,/obj/item/device/radio/intercom{dir = 4; name = "Station Intercom (General)"; pixel_x = 21},/obj/structure/disposalpipe/trunk,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cAY" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/bar) -"cAZ" = (/obj/structure/closet/crate,/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/machinery/light/small{dir = 1},/turf/simulated/floor/plating,/area/maintenance/bar) +"cAZ" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/item/weapon/tank/emergency/oxygen/double,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/machinery/light/small{dir = 1},/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "cBa" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/bar) "cBb" = (/turf/simulated/floor/plating,/area/maintenance/bar) "cBc" = (/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/bar) @@ -6888,7 +6888,7 @@ "cCx" = (/obj/effect/floor_decal/borderfloor/corner{dir = 8},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/qm) "cCy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled,/area/quartermaster/qm) "cCz" = (/obj/structure/closet/secure_closet/quartermaster,/obj/structure/disposalpipe/segment,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 22},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/qm) -"cCA" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/boxing/green,/obj/item/clothing/gloves/boxing,/turf/simulated/floor/plating,/area/maintenance/bar) +"cCA" = (/obj/item/clothing/gloves/boxing/green,/obj/item/clothing/gloves/boxing,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "cCB" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/table/steel,/obj/random/medical,/obj/random/medical/lite,/obj/random/medical/lite,/turf/simulated/floor/plating,/area/maintenance/bar) "cCC" = (/obj/structure/disposalpipe/segment{dir = 2; icon_state = "pipe-c"},/turf/simulated/floor/plating,/area/maintenance/bar) "cCD" = (/obj/structure/flora/ausbushes/lavendergrass,/obj/structure/flora/ausbushes/brflowers,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/apcenter) @@ -6912,7 +6912,7 @@ "cCV" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/obj/machinery/navbeacon/patrol{location = "CH8"; next_patrol = "CH9"},/turf/simulated/floor/tiled/dark,/area/hallway/primary/seconddeck/ascenter) "cCW" = (/obj/effect/floor_decal/borderfloor/corner,/obj/effect/floor_decal/corner/green/bordercorner,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/ascenter) "cCX" = (/obj/structure/flora/ausbushes/fullgrass,/obj/structure/flora/ausbushes/ywflowers,/turf/simulated/floor/grass,/area/hallway/primary/seconddeck/ascenter) -"cCY" = (/obj/structure/closet/crate,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/medical,/obj/random/medical,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cCY" = (/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/random/medical,/obj/random/medical,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/medbay) "cCZ" = (/obj/structure/closet/secure_closet/medical1,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/machinery/light_switch{pixel_x = -36},/obj/random/medical,/obj/random/medical,/obj/random/medical,/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/status_display{pixel_x = 0; pixel_y = -32},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay) "cDa" = (/obj/structure/cable/green{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/pink/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 10},/obj/effect/floor_decal/corner/pink/bordercorner2{dir = 10},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) "cDb" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/pink/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/pink/bordercorner2{dir = 5},/turf/simulated/floor/tiled/white,/area/medical/medbay_emt_bay) @@ -7037,12 +7037,12 @@ "cFq" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Disposal Access"; req_access = list(12)},/turf/simulated/floor,/area/maintenance/disposal) "cFr" = (/obj/structure/disposalpipe/segment,/obj/machinery/vending/medical,/turf/simulated/wall,/area/medical/medbay_primary_storage) "cFs" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"},/turf/simulated/floor,/area/maintenance/cargo) -"cFt" = (/obj/structure/closet/crate,/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/cargo) +"cFt" = (/obj/random/maintenance/engineering,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor,/area/maintenance/cargo) "cFu" = (/obj/random/obstruction,/turf/simulated/floor/plating,/area/maintenance/cargo) "cFv" = (/obj/effect/floor_decal/corner/brown/full{dir = 8},/obj/structure/table/rack{dir = 8; layer = 2.9},/turf/simulated/floor/tiled/steel,/area/maintenance/cargo) "cFw" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/turf/simulated/floor/tiled/steel,/area/maintenance/cargo) "cFx" = (/turf/simulated/floor/tiled/steel,/area/maintenance/cargo) -"cFy" = (/obj/structure/disposalpipe/sortjunction/untagged{dir = 1},/obj/effect/decal/cleanable/cobweb,/obj/structure/closet/crate,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) +"cFy" = (/obj/structure/disposalpipe/sortjunction/untagged{dir = 1},/obj/effect/decal/cleanable/cobweb,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/obj/random/crate,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cFz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cFA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/alarm{pixel_y = 23},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/brown/border{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cFB" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/wall,/area/quartermaster/delivery) @@ -7118,7 +7118,7 @@ "cGT" = (/turf/simulated/wall,/area/maintenance/cargo) "cGU" = (/obj/structure/table/rack{dir = 8; layer = 2.9},/obj/effect/floor_decal/corner/brown/full{dir = 8},/turf/simulated/floor/tiled/steel,/area/maintenance/cargo) "cGV" = (/obj/effect/floor_decal/corner/brown{dir = 1},/turf/simulated/floor/tiled/steel,/area/maintenance/cargo) -"cGW" = (/obj/structure/disposalpipe/tagger/partial{dir = 1; name = "Sorting Office"; sort_tag = "Sorting Office"},/obj/structure/closet/crate,/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) +"cGW" = (/obj/structure/disposalpipe/tagger/partial{dir = 1; name = "Sorting Office"; sort_tag = "Sorting Office"},/obj/structure/extinguisher_cabinet{pixel_x = -28; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/obj/random/crate,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cGX" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cGY" = (/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/brown/bordercorner{dir = 4},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) "cGZ" = (/obj/machinery/light/small{dir = 1},/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/brown/border{dir = 1},/turf/simulated/floor/tiled/steel,/area/quartermaster/warehouse) @@ -7213,7 +7213,7 @@ "cIK" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/cargo) "cIL" = (/obj/effect/floor_decal/corner/brown{dir = 1},/obj/item/frame/light/small,/turf/simulated/floor/tiled,/area/maintenance/cargo) "cIM" = (/turf/simulated/floor/plating,/area/maintenance/cargo) -"cIN" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/structure/closet/crate,/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Warehouse"; dir = 4; name = "security camera"},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) +"cIN" = (/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/obj/machinery/camera/network/cargo{c_tag = "CRG - Cargo Warehouse"; dir = 4; name = "security camera"},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/brown/border{dir = 8},/obj/random/crate,/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cIO" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 5},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cIP" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) "cIQ" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/turf/simulated/floor/tiled,/area/quartermaster/warehouse) @@ -7448,7 +7448,7 @@ "cNl" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/plating,/area/maintenance/substation/cargo) "cNm" = (/obj/machinery/light/small{dir = 1},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/structure/cable/green{d2 = 4; icon_state = "0-4"},/obj/machinery/power/sensor{name = "Powernet Sensor - Cargo Subgrid"; name_tag = "Cargo Subgrid"},/obj/machinery/alarm{pixel_y = 22},/obj/effect/floor_decal/industrial/warning/corner,/turf/simulated/floor/plating,/area/maintenance/substation/cargo) "cNn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/effect/floor_decal/industrial/warning,/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/structure/cable/green,/obj/structure/railing,/turf/simulated/floor/plating,/area/maintenance/substation/cargo) -"cNo" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/item/weapon/material/knife,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/plating,/area/maintenance/bar) +"cNo" = (/obj/random/contraband,/obj/random/contraband,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/cargo) "cNp" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/steel,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/maintenance/engineering,/obj/random/tool/powermaint,/turf/simulated/floor/tiled/steel,/area/construction/seconddeck/construction1) "cNq" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/turf/simulated/floor/plating,/area/maintenance/engineering) "cNr" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock{name = "Emergency Storage"},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/ap_emergency) @@ -7569,7 +7569,7 @@ "cPC" = (/obj/machinery/atmospherics/pipe/manifold/hidden,/obj/effect/floor_decal/industrial/warning,/turf/simulated/floor,/area/maintenance/cargo) "cPD" = (/obj/machinery/atmospherics/unary/vent_pump/high_volume{dir = 8; frequency = 1379; id_tag = "crg_aft_pump"},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor,/area/maintenance/cargo) "cPE" = (/obj/item/weapon/storage/toolbox/mechanical,/turf/simulated/floor/plating,/area/maintenance/cargo) -"cPF" = (/obj/structure/closet/crate,/obj/random/contraband,/obj/random/contraband,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cPF" = (/obj/random/toy,/obj/random/plushie,/obj/random/plushie,/obj/random/action_figure,/obj/machinery/alarm{pixel_y = 22},/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/medbay) "cPG" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Cargo Maintenance"; req_access = list(50)},/turf/simulated/floor/plating,/area/quartermaster/office) "cPH" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/navbeacon/delivery/north{location = "QM #1"},/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/office) "cPI" = (/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/navbeacon/delivery/north{location = "QM #2"},/mob/living/bot/mulebot,/turf/simulated/floor/tiled,/area/quartermaster/office) @@ -7599,7 +7599,7 @@ "cQg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/medbay) "cQh" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/item/inflatable/door/torn,/turf/simulated/floor/plating,/area/maintenance/engineering) "cQi" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/maintenance/engineering) -"cQj" = (/obj/structure/closet/crate,/obj/random/toy,/obj/random/plushie,/obj/random/plushie,/obj/random/action_figure,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/plating,/area/maintenance/medbay) +"cQj" = (/obj/random/drinkbottle,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/action_figure,/obj/random/plushie,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "cQk" = (/obj/structure/table/steel,/obj/item/device/t_scanner,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/alarm{pixel_y = 23},/obj/random/cash,/turf/simulated/floor/plating,/area/maintenance/bar) "cQl" = (/obj/structure/table/steel,/obj/item/weapon/storage/box/lights/mixed,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/medbay) "cQm" = (/obj/structure/closet/hydrant{pixel_y = -32},/obj/item/clothing/glasses/meson,/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plating,/area/storage/emergency_storage/seconddeck/as_emergency) @@ -7634,7 +7634,7 @@ "cQP" = (/obj/structure/table/steel,/obj/machinery/cell_charger,/obj/item/clothing/head/soft,/obj/item/clothing/head/soft,/obj/machinery/light,/turf/simulated/floor/tiled/dark,/area/quartermaster/office) "cQQ" = (/obj/structure/table/steel,/obj/machinery/recharger,/obj/item/weapon/stamp{pixel_x = -3; pixel_y = 3},/obj/item/weapon/hand_labeler,/turf/simulated/floor/tiled/dark,/area/quartermaster/office) "cQR" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"},/turf/simulated/floor/tiled/steel_grid,/area/medical/patient_wing) -"cQS" = (/obj/structure/closet/crate,/obj/random/drinkbottle,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/action_figure,/obj/random/plushie,/obj/effect/floor_decal/industrial/warning/corner{dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) +"cQS" = (/obj/random/maintenance/cargo,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/clean,/obj/structure/catwalk,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "cQT" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/effect/floor_decal/industrial/warning{dir = 1},/turf/simulated/floor/plating,/area/maintenance/bar) "cQU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/turf/simulated/floor/plating,/area/maintenance/bar) "cQV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/bar) @@ -7646,7 +7646,7 @@ "cRb" = (/obj/structure/closet/gmcloset{name = "formal wardrobe"},/obj/item/glass_jar,/obj/item/device/retail_scanner/civilian,/obj/item/device/retail_scanner/civilian,/obj/machinery/camera/network/civilian{c_tag = "CIV - Bar Storage"; dir = 2},/obj/machinery/firealarm{pixel_y = 24},/obj/item/clothing/head/that{pixel_x = 4; pixel_y = 6},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/wood,/area/crew_quarters/bar) "cRc" = (/obj/machinery/smartfridge/drinks,/obj/machinery/light{dir = 1},/turf/simulated/floor/lino,/area/crew_quarters/bar) "cRd" = (/obj/machinery/light/small,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) -"cRe" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/clean,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/bar) +"cRe" = (/obj/effect/floor_decal/industrial/warning/corner{icon_state = "warningcorner"; dir = 1},/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/item/weapon/material/knife,/obj/item/weapon/storage/mre/random,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "cRf" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = -21},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) "cRg" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/light,/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) "cRh" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/apcenter) @@ -7874,7 +7874,7 @@ "cVv" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/glass_medical{name = "Patient Ward"; req_access = list(5)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/steel_grid,/area/medical/patient_wing) "cVw" = (/turf/simulated/wall/r_wall,/area/medical/patient_wing) "cVx" = (/obj/structure/closet/wardrobe/grey,/obj/item/weapon/storage/backpack,/obj/item/weapon/storage/backpack,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/cargo) -"cVy" = (/obj/structure/closet/crate,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/drinkbottle,/turf/simulated/floor/plating,/area/maintenance/cargo) +"cVy" = (/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/drinkbottle,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/cargo) "cVz" = (/obj/item/weapon/material/ashtray/glass,/obj/structure/table/steel,/turf/simulated/floor/plating,/area/maintenance/cargo) "cVA" = (/obj/structure/bed/chair/comfy/beige,/turf/simulated/floor/plating,/area/maintenance/cargo) "cVB" = (/obj/structure/table/steel,/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks,/obj/item/weapon/reagent_containers/food/drinks/glass2/rocks,/turf/simulated/floor/plating,/area/maintenance/cargo) @@ -7964,7 +7964,7 @@ "cXh" = (/obj/structure/disposalpipe/segment,/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable,/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/green/border{dir = 8},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "cXi" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) "cXj" = (/obj/item/weapon/stool/padded,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/vistor_room_1) -"cXk" = (/obj/random/contraband,/obj/random/contraband,/obj/structure/closet/crate,/obj/random/contraband,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cXk" = (/obj/random/contraband,/obj/random/contraband,/obj/random/contraband,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/medbay) "cXl" = (/obj/machinery/meter,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"},/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/medbay) "cXm" = (/obj/effect/floor_decal/industrial/warning{dir = 5},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 1},/turf/simulated/floor/plating,/area/maintenance/medbay) "cXn" = (/obj/machinery/door/blast/regular{density = 0; icon_state = "pdoor0"; id = "medbayquar"; name = "Medbay Emergency Lockdown Shutters"; opacity = 0},/obj/machinery/atmospherics/valve{dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) @@ -8032,7 +8032,7 @@ "cYx" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Unisex Restrooms"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/locker/locker_toilet) "cYy" = (/obj/item/device/radio/intercom{desc = "Talk... listen through this."; dir = 2; name = "Station Intercom (Brig Radio)"; pixel_x = 0; pixel_y = -21; wires = 7},/obj/structure/closet/secure_closet/personal,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/vistor_room_1) "cYz" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/carpet,/area/crew_quarters/sleep/vistor_room_1) -"cYA" = (/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/contraband,/turf/simulated/floor/plating,/area/maintenance/medbay) +"cYA" = (/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/contraband,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/medbay) "cYB" = (/obj/machinery/atmospherics/pipe/tank/air{dir = 1; start_pressure = 4559.63},/obj/machinery/light/small,/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/turf/simulated/floor/plating,/area/maintenance/medbay) "cYC" = (/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -24},/obj/structure/closet/secure_closet/personal,/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 11; pixel_y = -24},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/vistor_room_1) "cYD" = (/obj/item/device/radio/intercom{desc = "Talk... listen through this."; dir = 2; name = "Station Intercom (Brig Radio)"; pixel_x = 0; pixel_y = -21; wires = 7},/obj/structure/closet/secure_closet/personal,/obj/item/clothing/head/kitty,/obj/item/clothing/head/kitty,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/carpet,/area/crew_quarters/sleep/vistor_room_2) @@ -8095,7 +8095,7 @@ "cZI" = (/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/locker) "cZJ" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/machinery/atmospherics/unary/vent_pump/on,/obj/effect/floor_decal/borderfloor/corner2{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "cZK" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"cZL" = (/obj/machinery/cooker/fryer,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"cZL" = (/obj/machinery/appliance/cooker/fryer,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "cZM" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/obj/machinery/firealarm{dir = 2; layer = 3.3; pixel_x = 0; pixel_y = 26},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "cZN" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "cZO" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/crew_quarters/locker) @@ -8130,7 +8130,7 @@ "dar" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(5,12,25,27,28,35)},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/crew_quarters/locker) "das" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/maintenance/locker) "dat" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 10},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/locker) -"dau" = (/obj/machinery/cooker/candy,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"dau" = (/obj/machinery/appliance/mixer/candy,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/firealarm{dir = 8; pixel_x = -24},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "dav" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "daw" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/closet,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/bar) "dax" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) @@ -8186,7 +8186,7 @@ "dbv" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/effect/floor_decal/borderfloor/corner2{dir = 9},/obj/effect/floor_decal/corner/green/bordercorner2{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "dbw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/structure/disposalpipe/segment,/turf/simulated/floor/plating,/area/maintenance/bar) "dbx" = (/obj/machinery/atmospherics/pipe/simple/visible/universal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/bar) -"dby" = (/obj/machinery/cooker/cereal,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"dby" = (/obj/machinery/appliance/mixer/cereal,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/ai_status_display{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "dbz" = (/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 10; icon_state = "intact"},/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/maintenance/bar) "dbA" = (/obj/item/weapon/stool/padded,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/effect/landmark/start{name = "Chef"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 8},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "dbB" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -8257,7 +8257,7 @@ "dcO" = (/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/crew_quarters/locker) "dcP" = (/obj/machinery/meter,/obj/machinery/atmospherics/pipe/simple/hidden/cyan{dir = 6; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 9},/turf/simulated/floor/plating,/area/maintenance/bar) "dcQ" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"dcR" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/structure/closet/crate,/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/random/powercell,/obj/random/maintenance,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/bar) +"dcR" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/weapon/storage/mre/random,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/locker) "dcS" = (/obj/machinery/light,/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/closet/medical_wall{pixel_x = 0; pixel_y = -31},/obj/item/roller,/obj/item/bodybag/cryobag,/obj/item/weapon/storage/firstaid/regular,/obj/item/weapon/storage/pill_bottle/spaceacillin,/turf/simulated/floor/tiled/white,/area/medical/first_aid_station/seconddeck/fore) "dcT" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{pixel_x = -3; pixel_y = 0},/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{pixel_x = 3},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "dcU" = (/obj/machinery/washing_machine,/turf/simulated/floor/tiled/dark,/area/crew_quarters/locker) @@ -8316,7 +8316,7 @@ "ddV" = (/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloorwhite,/obj/effect/floor_decal/corner/pink/border,/turf/simulated/floor/tiled/white,/area/medical/surgery2) "ddW" = (/obj/machinery/camera/network/medbay{c_tag = "MED - Operating Theatre 2"; dir = 1},/obj/machinery/vending/wallmed1{pixel_y = -30},/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/pink/border{dir = 6},/obj/structure/closet/secure_closet/medical_wall/anesthetics{pixel_x = 32},/turf/simulated/floor/tiled/white,/area/medical/surgery2) "ddX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/turf/simulated/floor/plating,/area/maintenance/bar) -"ddY" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/closet/crate/plastic,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/weapon/storage/mre/random,/turf/simulated/floor/plating,/area/maintenance/locker) +"ddY" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 1},/obj/machinery/light/small{dir = 4; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/cyan{dir = 4},/obj/item/weapon/reagent_containers/food/drinks/flask/barflask,/obj/random/powercell,/obj/random/maintenance,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "ddZ" = (/turf/simulated/floor/reinforced{name = "Holodeck Projector Floor"},/area/holodeck/alphadeck) "dea" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/catwalk,/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/turf/simulated/floor/plating,/area/maintenance/locker) "deb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 1},/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/camera/network/civilian{c_tag = "CIV - Cafeteria Port"; dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) @@ -8345,11 +8345,11 @@ "dey" = (/obj/effect/floor_decal/borderfloor/corner{dir = 4},/obj/effect/floor_decal/corner/green/bordercorner{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "dez" = (/obj/effect/floor_decal/borderfloor{dir = 1},/obj/effect/floor_decal/corner/green/border{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 1},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "deA" = (/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/crew_quarters/locker) -"deB" = (/obj/structure/closet/crate/plastic,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor/plating,/area/maintenance/bar) -"deC" = (/obj/machinery/cooker/grill,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"deB" = (/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) +"deC" = (/obj/machinery/appliance/cooker/grill,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "deD" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "deE" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 5},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 8},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"deF" = (/obj/machinery/cooker/oven,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"deF" = (/obj/machinery/appliance/cooker/oven,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "deG" = (/obj/structure/closet/lasertag/red,/obj/item/stack/flag/red,/obj/structure/window/reinforced,/turf/simulated/floor/tiled/dark,/area/crew_quarters/locker) "deH" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) "deI" = (/obj/structure/flora/pottedplant,/obj/machinery/computer/guestpass{pixel_x = 0; pixel_y = -30},/turf/simulated/floor/wood,/area/crew_quarters/cafeteria) @@ -8361,7 +8361,7 @@ "deO" = (/obj/structure/cable/green{d1 = 1; d2 = 4; icon_state = "1-4"},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/structure/disposalpipe/segment,/obj/machinery/firealarm{dir = 8; pixel_x = -24},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/universal,/turf/simulated/floor,/area/maintenance/substation/command) "deP" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 6},/turf/simulated/floor/tiled,/area/crew_quarters/locker) "deQ" = (/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/obj/effect/floor_decal/borderfloor/corner{dir = 1},/obj/effect/floor_decal/corner/green/bordercorner{dir = 1},/turf/simulated/floor/tiled,/area/hallway/primary/seconddeck/aft) -"deR" = (/obj/structure/closet/crate/hydroponics,/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/turf/simulated/floor/plating,/area/maintenance/bar) +"deR" = (/obj/random/maintenance,/obj/random/maintenance,/obj/random/maintenance,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/bar) "deS" = (/obj/machinery/smartfridge,/obj/structure/disposalpipe/segment,/turf/simulated/wall/r_wall,/area/hydroponics) "deT" = (/turf/simulated/wall,/area/hydroponics) "deU" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/hydroponics) @@ -8907,7 +8907,7 @@ "dpo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/light{dir = 1},/obj/item/weapon/camera_assembly,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dpp" = (/obj/machinery/floodlight,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dpq" = (/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) -"dpr" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/obj/structure/closet/crate,/turf/simulated/floor,/area/construction/seconddeck/construction2) +"dpr" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/cryo/station) "dps" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/chapel) "dpt" = (/obj/machinery/embedded_controller/radio/simple_docking_controller/escape_pod{frequency = 1380; id_tag = "cryostorage_shuttle"; name = "cryostorage controller"; pixel_x = -26; pixel_y = 0; req_access = list(19); tag_door = "cryostorage_shuttle_hatch"},/obj/effect/landmark{name = "JoinLateCryo"},/turf/simulated/shuttle/floor,/area/shuttle/cryo/station) "dpu" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/green/border{dir = 4},/turf/simulated/floor/tiled,/area/hallway/secondary/docking_hallway2) @@ -8955,7 +8955,7 @@ "dqk" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dql" = (/obj/structure/table/standard,/obj/item/weapon/towel,/obj/item/weapon/towel,/turf/simulated/floor/tiled/freezer,/area/construction/seconddeck/construction2) "dqm" = (/obj/structure/extinguisher_cabinet{pixel_x = 28; pixel_y = 0},/turf/simulated/floor/tiled/freezer,/area/construction/seconddeck/construction2) -"dqn" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/cryo/station) +"dqn" = (/obj/item/clothing/gloves/rainbow,/obj/item/clothing/head/soft/rainbow,/obj/item/clothing/shoes/rainbow,/obj/item/clothing/under/color/rainbow,/obj/item/weapon/bedsheet/rainbow,/obj/item/weapon/pen/crayon/rainbow,/obj/random/crate,/turf/simulated/floor,/area/construction/seconddeck/construction2) "dqo" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/tiled/monotile,/area/hallway/primary/seconddeck/aft) "dqp" = (/obj/item/weapon/stool/padded,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dqq" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/obj/item/weapon/stool,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) @@ -9013,7 +9013,7 @@ "drq" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/turf/simulated/floor/tiled,/area/storage/primary) "drr" = (/obj/structure/table/standard,/obj/machinery/recharger{pixel_y = 0},/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/random/tech_supply,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled,/area/storage/primary) "drs" = (/obj/machinery/computer/secure_data{dir = 4},/obj/item/device/radio/intercom/department/security{dir = 4; icon_override = "secintercom"; pixel_x = -21},/obj/effect/floor_decal/borderfloor{dir = 8},/obj/effect/floor_decal/corner/red/border{dir = 8},/turf/simulated/floor/tiled,/area/security/checkpoint2) -"drt" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/cryo/station) +"drt" = (/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/clothing/suit/storage/hazardvest,/obj/random/crate,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dru" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 5},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/hologram/holopad,/obj/effect/floor_decal/industrial/outline/grey,/turf/simulated/floor/tiled,/area/security/checkpoint2) "drv" = (/obj/structure/bed/chair/office/dark{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) "drw" = (/obj/structure/table/reinforced,/obj/machinery/door/window/brigdoor/westleft{name = "Security Checkpoint"; req_access = list(1)},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/tiled,/area/security/checkpoint2) @@ -9048,7 +9048,7 @@ "drZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled,/area/security/checkpoint2) "dsa" = (/obj/structure/table/reinforced,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/tool/crowbar,/obj/item/weapon/pen,/obj/item/device/flash,/obj/machinery/camera/network/security{c_tag = "SEC - Arrival Checkpoint"; dir = 8},/obj/machinery/light{dir = 4},/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/red/border{dir = 4},/turf/simulated/floor/tiled,/area/security/checkpoint2) "dsb" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/table/gamblingtable,/obj/item/weapon/deck/cards,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) -"dsc" = (/obj/structure/closet/crate,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/obj/item/clothing/suit/storage/hazardvest,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) +"dsc" = (/turf/simulated/floor/airless,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 4},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/cryo/station) "dsd" = (/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/effect/floor_decal/industrial/outline/yellow,/obj/machinery/light/small{dir = 8},/turf/simulated/floor/plating,/area/maintenance/chapel) "dse" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 10; icon_state = "intact"},/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/chapel) "dsf" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock/maintenance{name = "Firefighting equipment"; req_access = list(12)},/turf/simulated/floor/plating,/area/maintenance/chapel) @@ -9578,7 +9578,7 @@ "dCj" = (/obj/machinery/alarm{pixel_y = 22},/obj/machinery/portable_atmospherics/powered/pump/filled,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dCk" = (/obj/machinery/portable_atmospherics/powered/scrubber,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dCl" = (/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) -"dCm" = (/obj/structure/closet/crate,/obj/item/weapon/storage/box/lights/mixed,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) +"dCm" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/random/crate,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dCn" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/reinforced/airless,/area/thirddeck/roof) "dCo" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/reinforced/airless,/area/thirddeck/roof) "dCp" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/wall/r_wall,/area/ai) @@ -9843,7 +9843,7 @@ "dHo" = (/obj/structure/table/standard,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/folder/white_rd,/obj/item/weapon/pen/multi,/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = -32; pixel_y = 0},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hor/quarters) "dHp" = (/obj/structure/bed/chair/office/dark{dir = 1},/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hor/quarters) "dHq" = (/obj/machinery/power/apc{dir = 4; name = "east bump"; pixel_x = 24},/obj/structure/cable/green{d2 = 8; icon_state = "0-8"},/obj/machinery/light_switch{pixel_x = 36; pixel_y = -6},/obj/machinery/button/windowtint{id = "rdquarters"; pixel_x = 36; pixel_y = 6},/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hor/quarters) -"dHr" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) +"dHr" = (/obj/item/weapon/storage/box/lights/mixed,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/maintenance/security,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dHs" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) "dHt" = (/obj/machinery/door/firedoor/border_only,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/airlock/maintenance{name = "Maintenance Access"; req_one_access = list(12,19)},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden,/turf/simulated/floor/plating,/area/maintenance/thirddeck/foreport) "dHu" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/machinery/alarm{dir = 4; pixel_x = -22; pixel_y = 0},/obj/structure/dogbed,/turf/simulated/floor/carpet,/area/crew_quarters/heads/sc/hop/quarters) @@ -10206,7 +10206,7 @@ "dOn" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/door/firedoor/border_only,/obj/machinery/door/airlock{name = "Bathroom"},/turf/simulated/floor/tiled/steel_grid,/area/crew_quarters/heads/sc/sd) "dOo" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) "dOp" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/unary/vent_pump/on{dir = 8},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) -"dOq" = (/obj/structure/closet/crate,/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) +"dOq" = (/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/research,/obj/random/maintenance/research,/obj/random/maintenance/cargo,/obj/random/maintenance/cargo,/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/thirddeck/forestarboard) "dOr" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9; pixel_y = 0},/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dOs" = (/obj/structure/table/steel,/obj/random/maintenance/engineering,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) "dOt" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) @@ -10237,7 +10237,7 @@ "dOS" = (/obj/structure/toilet{dir = 1},/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) "dOT" = (/obj/machinery/shower{dir = 1},/obj/structure/curtain/open/shower,/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/machinery/door/window/northright,/obj/item/weapon/bikehorn/rubberducky,/turf/simulated/floor/tiled/freezer,/area/crew_quarters/heads/sc/sd) "dOU" = (/obj/machinery/door/firedoor/border_only,/obj/effect/wingrille_spawn/reinforced,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) -"dOV" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/maintenance/thirddeck/aftstarboard) +"dOV" = (/obj/item/clothing/mask/gas,/obj/item/device/flashlight,/obj/item/device/flashlight,/obj/effect/decal/cleanable/dirt,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/random/crate,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dOW" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftstarboard) "dOX" = (/obj/machinery/power/apc{dir = 8; name = "west bump"; pixel_x = -24},/obj/structure/cable/green,/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/catwalk,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) "dOY" = (/obj/structure/table/steel,/obj/random/tech_supply,/turf/simulated/floor/plating,/area/maintenance/thirddeck/aftport) @@ -10557,7 +10557,7 @@ "dVa" = (/obj/item/weapon/camera_assembly,/turf/simulated/floor/tiled,/area/construction/seconddeck/construction2) "dVb" = (/obj/machinery/light,/obj/item/stack/material/plastic,/obj/item/stack/material/plastic,/obj/item/stack/material/plastic,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dVc" = (/obj/machinery/computer/security/telescreen/entertainment{icon_state = "frame"; pixel_x = 0; pixel_y = -32},/obj/item/stack/cable_coil{pixel_x = 3; pixel_y = 3},/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) -"dVd" = (/obj/item/clothing/head/soft/mime,/obj/item/clothing/mask/gas/mime,/obj/item/clothing/shoes/mime,/obj/item/clothing/under/mime,/obj/structure/closet/crate,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) +"dVd" = (/obj/item/stack/cable_coil/random,/obj/item/stack/cable_coil/random,/obj/item/weapon/tool/crowbar,/obj/item/weapon/tool/wirecutters,/obj/random/maintenance/medical,/obj/random/maintenance/medical,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/random/crate,/turf/simulated/floor,/area/maintenance/thirddeck/aftstarboard) "dVe" = (/obj/item/frame/light,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dVf" = (/obj/structure/bed,/obj/item/weapon/bedsheet/mime,/turf/simulated/floor/plating,/area/construction/seconddeck/construction2) "dVg" = (/obj/machinery/door/firedoor/border_only,/obj/machinery/atmospherics/pipe/simple/hidden/universal,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/door/airlock/maintenance{req_access = null; req_one_access = list(12,25,27,28,35)},/turf/simulated/floor/plating,/area/maintenance/chapel) @@ -11021,7 +11021,7 @@ "edW" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced,/obj/item/weapon/clipboard,/obj/item/weapon/folder/yellow,/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled,/area/engineering/foyer) "edX" = (/obj/machinery/atmospherics/pipe/manifold/hidden/red{dir = 8},/turf/simulated/floor/tiled,/area/engineering/foyer) "edY" = (/obj/machinery/atmospherics/pipe/simple/hidden/red{dir = 5; icon_state = "intact"},/turf/simulated/floor/tiled,/area/engineering/foyer) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11141,8 +11141,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLakLakLakLakLakLakLakLakLakLakLakLaeFaeFakMakgafFafGalzakOakNakNakPakQakRakSafFafKakTaeFaeFaeFaioakUadlaaaaaaaaaaaaajpajpakoakVakWakWakXakYakZalaalbalcaldalealfalgalhalialjalkallalmalmalnakIajxajxaaaaaaaaaaaaadFaloaiyaeZaeZaeZalpaiAagmagmagmagmagmagmagmagmagmagmagmagValqaeZaeZdVQdVSdVRapiaqzdVUdVTdVVdVTdVVdVWdVYdVXdWadVZdVVdVVdVVdVVdWbbmqdWddWcdWedWcdWcdWfdWgaowaafaafaafaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltalualtaltalualtaltaltalvaeFalwalxakgafFafGalAalBaAxalCaAyalBaDdafGafFafKalDalEaeFahcaioadladlaaaaaaaaaajpajpakoakoalFakoalGalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalJakIalKakIakIajxajxaaaaaaaaaadFadFaiyaikaeZalLalMaiAagmagmagmagmagmagmagmagmagmagmagmagValNaijaeZambdfZcYadWibmqdWkdWjdWmdWldWodWndWqdWpdWsdWrdWudWtdWwdWvdWxbmqdWzdWydWBdWAbHAdWCdWDaowaaaaaaaaaaaaaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRalSalTalUalValWalXalYalZamaamraeFamcajEafEafFaiDaiDahBafFafFafFahBaiDaiDafFafKajEamdaeFameaioadLaaaaaaaaaaaaajpakoakVakWamfamgalHalHalHalHalHalHalHalHalHalHalHalHalHalIalIalIalIamhamialmalnakIajxaaaaaaaaaaaaaejaiyamjaeZaiSamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfagpaeZamsdWGdWFdWHbmqdWIarMdWJarMbmqbmqdWLdWKdWNdWMbmqarMdWJarMdWObmqdWQdWPdWSdWRdWUdWTdWVaowaaaaaaaaaaaaaafaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaamraeFamqajEafEafFanEaoaafFafFafFafFafFanEaoaafFafKajEamtaeFamudWWadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyamNaeZamOamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZapTdWZdWYdXbdXadXddXcdXbdXbdXfdXedXhdXgdXjdXidXkdXbdXmdXldXnaSNdXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRamRamSamTaSjamUamVamWamXamaamraeFamYamZanaanbanbanbanbanbanbanbanbanbanbanbancandaneaeFanfaioadLaaaaaaaaaajoanganhalFalGanianianialHalHanjanjanjanjanjankanlanmanmannanoanpanqalIalIalIalJalKanransajwaaaaaaaaaaejaiyantaeZanuanvanwanxanxanxanxanxanxanxanxanxanxanxanyanzanAaeZdXpdXrdXqdXqdXsdXudXtdXwdXvdXxdXvdXzdXydXBdXAdXDdXCdXFdXEdXHdXGdXodXIdXKdXJdXMdXLdXKdXNdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsammamnamoamoamoamoamoamoamoampamaamraeFamqajEafEafFamNamOafFafFafFafFafFamNamOafFafKajEamtaeFamudWWadLaaaaaaaaaajoajoamvalFakoamwamxalHalHalHamyamzamAamBamCamDamEamBamFamGamHamIamJalIamKamLakIalKamMajwajwaaaaaaaaaaejaiyantaeZanEamkaiAagmagmagmagmagmagmagmagmagmagmagmagVakfamPaeZapTdWZdWYdXbdXadXddXcdXbdXbdXfdXedXhdXgdXjdXidXkdXbdXmdXldXnaSNdXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsaltalRamRamSamTaSjamUamVamWamXamaamraeFamYamZanaanbanbanbanbanbanbanbanbanbanbanbancandaneaeFanfaioadLaaaaaaaaaajoanganhalFalGanianianialHalHanjanjanjanjanjankanlanmanmannanoanpanqalIalIalIalJalKanransajwaaaaaaaaaaejaiyaoaaeZanuanvanwanxanxanxanxanxanxanxanxanxanxanxanyanzanAaeZdXpdXrdXqdXqdXsdXudXtdXwdXvdXxdXvdXzdXydXBdXAdXDdXCdXFdXEdXHdXGdXodXIdXKdXJdXMdXLdXKdXNdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaalsalsaltaltaltaluanDanDalualtaltaltaoTaeFanFanGanHanHanIanHanHanJanKanLanManNanNanNanNanOamtaeFanPaioadladlaaaaaaajpanQanRanSanianiaoJaoKanialHanVanWanXanYanZanZaEyaobaocaodaoealIaofalIaogalIalIaohaoiaojajxaaaaaaadFadFaiyaokaeZaolaomaonaonaonaonaooaopaoqaoraosaosaotaosaosaouaovaeZdXOdXQdXPdXRapiatLdXSapidXUdXWdXVdXXaSNaSNdXYaSNaZYdXZcfodXHdYadXodYbdYcdXJdXMdXLdXKdYddXodXodYfdYedXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaakLatTatTakLakLakLakLaoxaoxaoyaoyaoyaoyaoyaeFaeFaeFaeFaeFaeFaeFaeFaozahcaoAaeFaoBaoBaoBaeFaeFaeFaeFafMaoCaoDadlaaaaaaajpaoEaoFaoGaoHaoIapOarganialHanjaoLaoMaoNaxjanZaoOaoPaoQaoRaoSaGeaoUaoVaoWaoXalIaoYaoZapaajxaaaaaaadFapbapcapdaeZaeZaeZaikapeapeapeaikapfaikapgaikaeZaeZaeZaeZaeZaeZaeZaphaphaphaphaphdYgdYgalralralralralralrdYidYhalralrdXZdYjdYkdWHdXodYldXKdXJdXMdXLdXKdYldXodYmdYodYndXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafakLakLapjapkaplapmapnakLapoapoappapqaprapsaptapuapvapwapxapyapyapzapuapAapAapBapCapDapEapFapCapGafMadlapHapIapJadlaaaaaaajpapKapLapManiapNaNGaNHanialHanjanjanjanjanjapPapQapQapQapRapSaGzapUapVapWapXalIapYapZaqaajxaaaaaaadFaqbaghaqcaqdaqeaqfaqgaqhaqiaqjaqgaqkaqlaqlaqmaqnaqoaqoaqpaqqaqraqmaqsaqtaquaqvaqwaqxaqxalraqydYpaqAaqBaqCalOdYqatMalrdYtdYsdXodXodXodYudYwdYvdYydYxdYAdYzdXodYBdYDdYCdYFdYEdYGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11158,16 +11158,16 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafakLakLaBfaBfaBgaBhaBiaBjaBkaBlaxTaBmaBmaBmaxVayQaBnayRaBoayRaBpaBqaxVaBraBsaBsaBtaBtaBtaBtaBtaBtaBtaBtaBuaBvaBwaybaaaaaaaBxaByaBzaBAaBDaAqaAmaBCaBBaBGaBHaBIaBJaBJaBKaBJaBEaBFaAvaCWaBOaBPaBQaBRaBSaBTaAzaBUaBVaBWaBXaaaaaaayxaBYazBaAIaBZaCaaCaayyaCbaFDaCdayyaqkaqlaqlayDaCeaCfayDaCgaARaChayDaCiaCjaCkaClaCmaCnaCnalraCoalOaCpaCqaCralralraafaaaaaaaaadXodXodXoeaVeaXeaWdYyeaYebaeaZdXodZbdZbdZbebbdXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaakLakLaBfaCsaCsaCsaCsaCtaCtaCsaCsaCuaCsaCsaCsaCsaCsaCsaCsaCsaCsaCvaCwaCxaCyaBtaCzaCAaCBaCCaCDaCEaBtaybaCFaCGaybaaaaaaaBxaCHaCIaCJauAaBLaBMaCZaCKaCLaCPaCQaCRaCSaCTaCUaCVaCXaAvaGpaCYaDbaDadVsaDcaHbaAzaDeaDfaDgaBXaaaaaaayxaDhaDiaAIaDjaDjaDjaDkaDlaDlaDlaDkaDmaDkaDnaDkaDjaDjaDjaDjaDjaDjaDjazUazUazUazUazUaDoaDoalralralralravpavpalraaaaaaaaaaaaaaaaaaaaadXodYldXKdXKdYydXKdXKdYldXoebcebeebddXodXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaDpaDqaDraDsaDtaDuaDvaDwaDxaDtaDyaDzaDAaDBaDCaDDaDEaDFaDGaDHaDIaDJaDKaDLaDMaDMaDMaDNaBtaDOaDPaybaybaaaaaaaBxaDQaCMaDSaCNaCNaykaykaykaykaDUaDVaDWaDXaDYaDZaEaaEbaEcaEdaEeaEfaAzaEgaEhaAzaAzaEiaEjaEkaBXaaaaaaayxayxaElaEmaDjaEnaEoaEpaEpaEpaEpaEqaEraEsaEtaEuaEuaEvaEuaEuaEwaExaDjaGAaEzaEzaEzaEAaEBaEBaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaadXodYbdZBdXKdYydXKdXKdYddXodXodYfdYedXoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaEFaEGaEHaEHaEIaEJaEJaEKaELaEMaENaENaEOaEPaEQaERaESaETaEUaEVaEWaEXaEYaEZaDMaDMaFaaFbaDOaDPaFcaaaaaaaaaaAeaFdaFeaFfaFgauHauHaFhaFhaDTaFiaFjaCUaCUaCUaFkaCVaFlaFmaFnaFoaFpaAzaAzaAzaAzaFqaFraFsaFtaAGaaaaaaaaaaFuaElaFvaDjaFwaFxaFyaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFAaFBaFCaDjaHSaFEaFFaFGaFHaFIaSBaFKaFLaFMaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaadXoebfdXKdXKdYydXKdXKebgdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaFSaEPaEPaFTaEPaEPaFUaFVaFWaFXaFYaFZaGaaDMaGbaGcaGdaHYaBtaDOaDPaFcaaaaaaaaaaAeaAeaGfaFfaFfaGgaDTauHaFhaDTaGhaGiaGjaGkaCUaGlaGmaGnaAvaHdaHcaHPaGqaAzaGraGsaGtaFraGuaAGaAGaaaaaaaaaaFuaElaGvaDjaEnaGwaGxaGyaMtaNbaGyaGyaGyaGyaGyaMtaNbaGyaGBaGwaGCaDjaHSaFEaGDaFJaFJaFJaFJaFJaFJaFJaGEaGFaEDaaaaaaaaaaaaaaaaaaaaaaaadXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaGGaEPaEPaFTaEPaEPaGHaCxaGIaGJaGKaGLaGMaGNaGOaGPaGQaGRaBtaybaGSaFcaaaaaaaaaaaaaBxaFfaFfaFfaFfaGTauHauHauHaGUauHaGVaGWaGXaCUaGYaGZaHaaOeaHRaHTaAvaAvaHeaHfaHgaHhaGtaBXaaaaaaaaaaaaaFuaElaHiaDjaHjaGwaGxaGyaHkaHkaHlaGyaGyaGyaHlaHkaHkaGyaGBaGwaHmaDjaHSaFEaHnaHoaHpaHqaHraHsaHtaHuaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaHvaFOaFPaFPaFPaFPaFPaFPaFPaHwaHxaHxaHxaFTaEPaEPaHyaCxaHzaHAaHBaEWaEWaGLaHCaEWaEWaEWaEWaHDazhaybaybaaaaaaaaaaBxaBxaFfaFfaFfaFfaFgaHEaHFaHFaHFaHGaHHaHIaHJaHKaHLaAvaAvaAvaAvaAvaFqaGtaFraGtaGtaBXaBXaaaaaaaaaayxayxaElaDkaDjaHMaHNaGxaGyaHOaHVaHQbqBaMzbskaHQbsmaHOaGyaGBaHWaHXaDjaRLaEzaEzaEzaEAaEzaEzaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaEFaEGaEHaEHaEIaEJaEJaEKaELaEMaENaENaEOaEPaEQaERaESaETaEUaEVaEWaEXaEYaEZaDMaDMaFaaFbaDOaDPaFcaaaaaaaaaaAeaFdaFeaFfaFgauHauHaFhaFhaDTaFiaFjaCUaCUaCUaFkaCVaFlaFmaFnaFoaFpaAzaAzaAzaAzaFqaFraFsaFtaAGaaaaaaaaaaFuaElaFvaDjaFwaFxaFyaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFzaFAaFBaFCaDjaGCaFEaFFaFGaFHaFIaSBaFKaFLaFMaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaadXoebfdXKdXKdYydXKdXKebgdXobhgbhgaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaFSaEPaEPaFTaEPaEPaFUaFVaFWaFXaFYaFZaGaaDMaGbaGcaGdaHYaBtaDOaDPaFcaaaaaaaaaaAeaAeaGfaFfaFfaGgaDTauHaFhaDTaGhaGiaGjaGkaCUaGlaGmaGnaAvaHdaHcaHPaGqaAzaGraGsaGtaFraGuaAGaAGaaaaaaaaaaFuaElaGvaDjaEnaGwaGxaGyaHjaHSaGyaGyaGyaGyaGyaHjaHSaGyaGBaGwaLhaDjaGCaFEaGDaFJaFJaFJaFJaFJaFJaFJaGEaGFaEDaaaaaaaaaaaaaaaaaaaaaaaadXodXodXodXodXodXodXodXodXoaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaGGaEPaEPaFTaEPaEPaGHaCxaGIaGJaGKaGLaGMaGNaGOaGPaGQaGRaBtaybaGSaFcaaaaaaaaaaaaaBxaFfaFfaFfaFfaGTauHauHauHaGUauHaGVaGWaGXaCUaGYaGZaHaaOeaHRaHTaAvaAvaHeaHfaHgaHhaGtaBXaaaaaaaaaaaaaFuaElaHiaDjaMtaGwaGxaGyaHkaHkaHlaGyaGyaGyaHlaHkaHkaGyaGBaGwaHmaDjaGCaFEaHnaHoaHpaHqaHraHsaHtaHuaFNaEzaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaxTalsaCtaHvaFOaFPaFPaFPaFPaFPaFPaFPaHwaHxaHxaHxaFTaEPaEPaHyaCxaHzaHAaHBaEWaEWaGLaHCaEWaEWaEWaEWaHDazhaybaybaaaaaaaaaaBxaBxaFfaFfaFfaFfaFgaHEaHFaHFaHFaHGaHHaHIaHJaHKaHLaAvaAvaAvaAvaAvaFqaGtaFraGtaGtaBXaBXaaaaaaaaaayxayxaElaDkaDjaHMaHNaGxaGyaHOaHVaHQbqBaMzbskaHQbsmaHOaGyaGBaHWaHXaDjaNbaEzaEzaEzaEAaEzaEzaECaEzaEzaEzaEDaEDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaakLakLaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaHZaHZaHZaIaaFTaEPaEPaIbaESaIcaHAaIdaIeaIfaDHaIgaESaDOaIhaIiaAcazhaIjaybaaaaaaaaaaaaaBxaBxaFfaFfaFfaFfaIkaIlaImaInazlaIoaIpaIqaIraIsaItaIuaIvaIwaIxaHgaHgaHhaGtaBXaBXaaaaaaaaaaaaayxaIyaElaDjaDjaDjaIzaGxaGyaIAaIBaICaIDaIEaIEaIFbwsaHOaGyaGBaIGaDjaDjalralralralralralralralralralralralralraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCOaEEaFOaFPaFPaFPaFPaFPaFPaFPaIHaIIaIJaIIaIKaENaENaILaIMaINaIOaIPaIQaIRaIQaISaITaDOaIhaAcaAcaIUaIVaybaaaaaaaaaaaaaaaaBxaBxaFfaIWaIXaIYaIZaJaaJbaJcaJdaJeaJfaJgaJhaJiaJjaJkaJlaJmaJnaJoaGtaBXaBXaaaaaaaaaaaaaaaayxaJpaJqaDkaDjaJraGwaGxaGyaJsaTJaJuaJvaJwaJwaJwaJwaJxaGyaGBaGwaJyaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaDRaJzaFOaFPaFPaFPaFPaFPaUcaFPaFRaEPaEPaJAaFTaJBaJCaJDaJEaJFaJGaJHaJIaJJaJKaJLaESaDOaJMaJNaAcazhaJOaybaaaaaaaaaaabaaaaaaaBxaBxaAeaJPaJQaJRaJSaInazlaIoaJTaJUaJVaJWaJXaJYaJZaKaaKbaKcaAGaBXaBXaaaaaaaabaaaaaaaaaayxaKdaElaKeaDjaJraGwaGxaGyaHOaKfaKgaKhaJwaKiaKjaKkaKlaGyaGBaGwaJyaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaKmaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCOaEEaFOaFPaFPaFPaFPaFPaFPaFPaHwaHxaKnaHxaKoaCsaCsaCsaCvaCvaCvaKpaKqaKraKqaKqaESaybaybaybaybazhaKsaKtaKtaKtaaaaaaaaaaaaaaaaaaaAeaAeaBxaBxaBxaAeaAeaKuaKvaJUaKwaKxaAGaAGaBXaBXaBXaAGaAGaaaaaaaaaaaaaaaaaaaKyaKyaKyaKzaElaKAaDjaKBaKCaGxaGyaHOaHOaHlaHkaKDaKhaHlaHOaHOaGyaGBaKEaKFaDjaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaKGaKGaKGaKHaKIaCsaKJaKJaKJaKJaKJaKpaKKaKLaKMaKqaKNaKNaKNaKNaybazhaKsaKOaKPaKtaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaKRaKSaJUaKTaKUaKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaKyaKVaKWaKzaElaKXaDjaJraKYaGxaGyaGyaHOaKZaLaaJwaLbaLcaHOaGyaGyaGBaKYaJyaDjaaaaaaaaaaaaaaaaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaIHaIIaIIaIIaFTaLdaKJaKJaKJaKJaKJaKpaLeaLfaLgaKqaLhaAcaAcaAcaLiazhaLjaLkaLlaLmaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaLnaLoaLpaLqaLraKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaLsaLtaLuaLvaElaLwaDjaJraLxaGxaGyaGyaHkaLyaJwaJwaJwaLzaHkaGyaGyaGBaLxaJyaDjaDkaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaIHaIIaIIaIIaFTaLdaKJaKJaKJaKJaKJaKpaLeaLfaLgaKqaRLaAcaAcaAcaLiazhaLjaLkaLlaLmaKtaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKQaLnaLoaLpaLqaLraKQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaKyaLsaLtaLuaLvaElaLwaDjaJraLxaGxaGyaGyaHkaLyaJwaJwaJwaLzaHkaGyaGyaGBaLxaJyaDjaDkaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaLAaFOaFPaFPaFPaFPaFPaFPaFPaFRaEPaEPaEPaLBaLCaKJaKJaKJaKJaKJaKpaLDaLEaLFaKqaAcaAcaAcaLGaybaLHaKsaLIaLlaLJaKtaaaaaaaaaaaaaLKaLLaLMaLLaLNaaaaaaaLOaLOaLPaJUaLQaLRaLRaLRaLRaLRaLRaLSaLSaLSaLRaLRaLRaLRaKyaLTaLtaLUaKzaElaDkaDjaDjaLVaLWaGyaGyaKhaLXaLXaJwaLXaLXaKhaGyaGyaGBaLYaDjaDjaDjaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaLZaEPaEPaFTaMaaKJaKJaKJaKJaKJaKpaKqaMbaKqaKqaMcaMdaMeaMfaMfaMgaKsaMhaLlaMiaKtaaaaaaaaaaaaaMjaMkaMlaMmaMjaaaaaaaaaaLOaMnaJUaMoaMpaMqaMraMsaSbaLSaMuebhaMwaMxaMybCFaLRaMAaMBaLtaLuaKzaMCaDjaDjaMDaMEaLWaGyaGyaHOaMFaKhaMGaKhaHlaHOaGyaGyaGBaMHaMIaDjaDkaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaCsaEEaFOaFPaFPaFPaFPaFPaFPaFPaFRaMJaMKaMLaMMaCsaMNaKJaKJaKJaKJaMfaDOaDOaDOaybaybaybaybaMfaMOaLHaKsaKsaMPaKsaKtaMQaMQaMQaMRaMjaMSaMTaMUaMjaMVaMQaMQaMQaMWaMXaMWaLRaMqaMYaMZaTgaNaaNdaNcaNfaNeaNgbCFaLRaKzaKzaNhaKzaKzaNiaDkaDjaNjaNkaLWaGyaGyaKhaNlaNmaJwaNmaNnaKhaGyaGyaGBaNkaJyaDjaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11386,9 +11386,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadJaaaaaaaaabgvbsRbZMbsSbpFbpGbtibxTbxWbxUbxUbxVbxYbxZbwwbxXbycbydbyabybbyfbygbyebwBbzebuwbyhbwObwPbwQbwRbCqbYsbwUbwUbwUbwUbwUbwUbwVbwWbwXbrbbwYbvNbwZbvNbvPbrbbvNbxabrbbvNbxbbrbbvNbxcbrbbxdbxebxfbxgbxhclfclgcnebuWbxkbxlbxmbxnbxobuWbxpbxqbxrbxsbxtbuZbxubxvbvZbxwbxibxxbvgaaaaaaaaaaaaaaabvgbvgbvibvibvibvgbxybxzbxAbxBbxCbxDbxEbxFcePccVcdkbxHbxHbxIbxIaafaafaafbhgaafaafaafaafbxJbxKbxLbhgbxMbxNbxObxPbxQaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabgvbgvbgvbgvbgvaaabqCbumbqEbzhbzfbzgbzjbAnbzibAqbArbAsbTHbXDbzibnLbAtbAubBQbuwbAvbyibyjbuwbvCbxGcozbuxbuxbuxbuxbuxbuxbuxbymbynbrbbyobvNbypbyqbvPbrbbyrbysbrbbyrbytbrbbyrbyubrbbyvbywbyxbxgbxhcnfcoUcJZbuWbyybyzbyAbyBbyCbuWbyDbxqbyEbxqbyFbuZbyGbxvbvZbvZbyHbvZbvZbvgbvgbvgbvgbvgbvgebsbyIbyJbyKbyKbyLbyMbyMbyLbyNcePbyOcqUcyVcqTbyTbxHbyUbyVbxIbxIaaaaaabhgaaaaaaaaaaafbyWbyXbyYbyZbzabyZbyWbzbbyWaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaaabkHbzcbzdbBRbkAbkAbBTbBVbzkbuvbBWbzlbwwbuvbuvbDpbBYbDobqIbuwbuwbzmbuwbuwbuxbAObzobzpbuxbzqbzrbzsbztbuxbymbynbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbrbbzubzvbzwbzxbxhcOBdcSdfrbuWbzAbzBbzCbzDbzEbuWbzFbzGbzHbxqbzIbuZbzJbzKbzLbzMbzNbzNbzNbzNbzNbzNbzObzNbzNbzNbzNbzPbzQbzRbzSbzTbzUbzVbzWbyObyPcHvbyObzYbzZbAabAbbAcbAdbxIaaaaaabhgaaaaaaaaaaaabyWbAebFdbAfbAgbAhbyWbAibyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjaaaaaaaaaaaaaaabAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAkbAkbAkbAkbAkbAkbAkbAkbAkbAlbAmbDvbDqbApbETbFhbELbEMbAwbGFbGmbEMbAxbAybAzbAAbABbACbvCcKMbAEbAFbuxbDJbymbymbymbAGbAHbAIbwUbAJbAKbALbAMbwUbwUbwUbwUcNqcOFcQhcOEcOFcQibAQbuxbARbASbATbxhbxhbxhbxhbuWbAVbAWbAXbAYbAZbuWbBabBbbBcbBdbBebuZbBfbxibBgbBhbBibBjbBkbxibxibBlbBlbBlbBlbBlbBlbBlbBmbBnbBobBpbBqbBrbBrbBrbBrbBsbBsbBsbBsbBsbBtbBubBvbBwbBwbBxbBwbBxbBwbBxbBwbBwbBybBzbBAbBBbBCbyWbBDbyWbyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjaaaaaaaaaaaaaaabAjaaaaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabAkbAkbAkbAkbAkbAkbAkbAkbAkbAlbAmbDvbDqbApbETbFhbELbEMbAwbGFbGmbEMbAxbAybAzbAAbABbACbvCcKMbAEbAFbuxbDJbymbymbymbAGbAHbAIbwUbAJbAKbALbAMbwUbwUbwUbwUcNqcOFcQhcOEcOFcQibAQbuxbARbASbATbxhbxhbxhbxhbuWbAVbAWbAXbAYbAZbuWbBabBbbBcbBdbBebuZbBfbxibBgbBhbBibzzbBkbxibxibBlbBlbBlbBlbBlbBlbBlbBmbBnbBobBpbBqbBrbBrbBrbBrbBsbBsbBsbBsbBsbBtbBubBvbBwbBwbBxbBwbBxbBwbBxbBwbBwbBybBzbBAbBBbBCbyWbBDbyWbyWaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaaaaabAjbAjbAjbAjbAjbAjbAjaaaaaaaaabAjecAbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaabBEbBFbBGbBHbAkbBIbBJbBKbBLbBMbBMbBNbAkbBObBPbIobGJbBSbJSbBSbIqbBSbLjbBXbJUbBZbCabCbbCcbCdbCebCfbvCbCgbzobChbuxbCibCjbymbymbuxbCkbClbymbCmbCnbuxbuxbCobuxbuxbCpcRncgecSBcRocSBcSEbuxbuxbCsbCtbCubvZbvZbCvbyJbuWbCwbCxbuWbuWbuWbuWbuZbuZbCybuZbuZbuZbBfbxibCzbCAbBibwnbCBbCCbCDbBlbCEcaRbCGbCHbCIbBlbCJbCJbCKbCJbCJbBrbCLbCMebubBsbCObBsbCPbBsbCQbCRbCSbBwbCTbCUbCVbCVbCWbCXbCYbBwbCZbDabDbbDcbDdbDebDfbDgbyWaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbNkbPTbLlbDrbDsbDtbCfbDuedNbDwecRbDubDybDybDzbDAbDBbDybuxbDCbDDbFebuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibzzbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbFMbEhebvbEjbEkbElbBrebwbEndgGbBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbFUbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaabaaaaaaaaabBEbDhbDhbDibAkbDjbDjbDjbDkbBMbDlbDmbAkbDnbNkbPTbLlbDrbDsbDtbCfbDuedNbDwecRbDubDybDybDzbDAbDBbDybuxbDCbDDbFebuxbuxbuxbDFbymbuxbCrbDGbDGbDHbDGbDGbDIbymbImbuxbDKbymbDLbuxbvFbymbCrbymbuxbDMbDNbDObvZbxibxibBjbDPbxibDQbAUbAUbAUbAUbBgbDRbDSbDTbDUbDVbDWbDXbDYbvZbDZbDZbDZbDZbEabBlbEbbEcbEdbEebEfbFMbEhebvbEjbEkbElbBrebwbEndgGbBsbEpbBsbEqbBsbBsbErbEsbEtbEubEvbCVbEwbExbEybEzbBwbEAbEAbEAbFUbEAbEAbEAbEAbEAbEAaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaabAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaadaadaagaadaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaabBEbECbEDbEEbAkbEFbEGbEGbEHbEGbEIbEJbAkbEKbNkedObENbEObEPbEQbERbESbOXbEUedPbEWbEXbEYbEZbFabFbbFcbuxbGSbGTbFfbFgcbEbuxbvGbvFbuxbFibDGbFjbFkbFlbDGbFmbFnbChbuxbzpbymbFobuxbvGbymbFpbFqbFrbFsbFtbFubFvbDTbFwbDTbFxbDTbFybDTbDTbDTbDTbFzbFAbFBbFBbFBbFBbFBbFBbFCbFDbDZbFEebxbFGbEabFHbFIbFJbFKbFLbFVbFMbFNbFObFPbEjbHxbKtebzebybFTbGbbGibFWbFXbFYbBsbFZbGabHybGcbGdbGebGdbGfbGgbGhbKrbGjbGkbGlbGpbGqbGnbGobJpbGrbGsaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaabBEbGtbGubGvbAkbGwbEGbEGbGxbGybGzbGAbGBbGCbGDedRedQcFcbGGbGHbERbGIbXNbGKedSbGMbEXbGNbGObGPbGQbGRbuxbGUbVfbuxbGVcbEbuxbAQbAQbuxbGWbDGbGXbFkbGYbDGbuxbuxbuxbuxbGZbGZbGZbuxbuxbuxbuxbuxbHabHbbHcbHdbHabvZbvZbvZbvZbvZbvibvibvibvZbvZbvZbvZbFBbHebHfbHgbHhbFBbHibHjbHkbHlbHmbHnbEabHobHpbEcbHqbHrbHsbEgbHtebBebCebAbFQbBrebFebDebEbBsbHCbHDbHEbHFbBsbHGbHHbBwbHIbHJbHKbHJbHKbHJbHLebGbHMbHNbHObHPbHQbHRbHSbHTbHUbHVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaabAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjbAjaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaaaafaaabHWbHWbHWbHWbHWbHWbHWbHXbHXbBEbHYbHZbDibAkbIabIabIbbIcbIdbIebIfbAkbIgbIhbIibIjbIkbIlccMbCfbInedUbIpedTbIrbDybIsbItbIubIvbIwbIxbIxbIybIxbIxbIxbIxbuxbuxbuxbIzbDGbIAbIBbICbDGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabIDbIEbIFbIGbIHbIIbIDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFBbIJbIKbILbILbIMbINbBqbDZbIObIPbIQbEabIRbISbITbIUbIVbIWbEgbEjebIbIXebHbIZbBrbBrbBrbBrbBsbJdbJebJfbJgbBsbJhbJibBwbBwbJjbJkbJlbJjbJmbJjbBxbJnbJobKFbJqbJrbJsbJtbJqbJubJvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11427,9 +11427,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafcLzcLAcDHcLBcLCcLDcDHcKqcLEcLFcLGcLHcLIcLJcLKcLLcGTcLMcIMcIMcDUcLNcLOcKzcLPcLQcDUcLRcLScHgecoecpecpecpcLScLVcKGcLWcLWcLWcLWcLWcLXcLYcLYcLZcLYcoVcoVcoVedbedccKNcMacMbcMccKNcKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcMdcMecMfcMgcMhctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcKRcMicMjcKRcMkcKVcMlcMmcMncKTcMocMpcMqcMrcMscKZcMtcMucMvcMwcMxcLbcMycMzcMAcMBcMCcLhcMDcMEcMFcMGcMHcMIcMJcMKcMLcMMcMNcMOcMOcMOcMOcMOcMOcMPcMQcMRcMScMTcMUcMVaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaacMWcDHcFpcFpcDHcDHcMXcMYcMYcMXcMZcNacMXcMXcLLcGTcIMcIMcIMcDUcNbcNccNdcNecNfcDUcNgcHgcHgcNhcNicHgcHgcHgcNjcNkcLWcLWcLWcLWcLWcLXcNlcNmcNncLYcCwcQkcoVcTDedgcNrcNscNscNtcNucKNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaactUcNvcNwcNxcNycNzctUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacKRcNAcNBcNCcKRcNDcKVcNEcNFcNGcKTcNHcNIcNJcNKcNLcNMcNNcNOcNPcNQcNRcLccNScNTcNUcNVcNWcNXcNYcNZcOacObcOccLhcOdcOecOfcOgcOhcMOcOicOjcOkcPucMOcOmcOncLucOocOpcOqcLyaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcOrcOscOtcMXcLLcGTcIMcIMcIMcDUcDUcDUcDUcDUcDUcDUcOucOvcHgcHgcOwcOwcOwcHgcOxcOycLWcLWcLWcLWcLWcLXcOzcOAdUVcLYcOCcBbcODedhedicKNcPVcOHcOIcOJcKNcoVcoVcoVcoVczlczlczlcoVcoVcoVcoVcoVcOKcOLcMfcOMcOKcpkcpkcpkcpkcpkczCczCczCcpkcpkcpkcpkcKRcONcOOcOPcKRecqcKVcORcOScOTcKTcOUcOVcOWcOXcOYcKZcOZcPacPbcPccPdcLfcNScNTcPecPfcPgcPhcPicPjcPkcPlcPmcLhcPncPocPpcPqcPrcMOcPscPtcPtcSLcMOcPvcPwcPxcPycPzcPAcKlaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcPFcGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPWcHwcHwcQacQacPYcQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcURcTHcpkcQjcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcKUcLYcLYcoVcoVcoVcQScQTcQUcHwcQVcQWcQXcHwcHxcBbcBbcBbcBbcQYcQZcAYcPUcPUcRdcRecoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcWecWcedmedpedpedocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcUgcRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvecscSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScNocBbcSucSvcSwcSucSucSucSucSucSucSucSucSucSucSxcSycSzcSAcSAcSAcSKcSAcSAcSAcSAdaMedvedredvedtcSFcSGcSHcSDcSDcSIcSJcTucTycSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaacMXcPBcPCcPDcMXcLLcGTcGTcPEcIMcFucFucIMcIMcIMcNocGTcEacPGcEacEacPHcPIcPJcPKcPLcPMcLWcLWcLWcLWcLWcLXcPNcPOcPPcLYcPQcPRcoVcPScPTcKNcKNcKNcKNcKNcKNcPWcHwcHwcQacQacPYcQacQacQacQacQacQacQbcQccQdcQecQfcQgcQgcQgcQgcQgcQgcURcTHcpkcPFcSpcQlcKRcQmcOOcQncKRcQocKVcKVcQpcKVcKTcQqcQrcQscQtcQucKXcQvcQwcQxcQycPdcLccNScQzcQAcQBcQCcQDcQEcQFcQGcQHcQIcLhcLlcLlcLlcLlcLlcMOcPscQJcQKcSLcMOcQLcQMcKlcKlcKlcKlcKlaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaafaaaaaaaaaaaacMXcQNcQNcMXcMXcLLcIMcGTcGTcFucFucGTcGTcGTcGTcGTcGTcQOcQOcQOcEacEacEacEacQPcQQcKGcLWcLWcLWcLWcLWcLXcLYcKUcLYcLYcoVcoVcoVcQjcQTcQUcHwcQVcQWcQXcHwcHxcBbcBbcBbcBbcQYcQZcAYcPUcPUcRdcQScoVcRfcRgcRhcpkcRicRjcRicRkcRlcRmcWecWcedmedpedpedocKRcKRcRpcKRcKRcQocpkcGjcRqcRrcLacRscRtcUgcRvcRwcKZcRxcRycRzcRAcRBcLbcRCcRDcREcRFcRGcRHcRIcRJcRKcRLcRMcRNcROcRPcRQcRRcRScMOcRTcRUcPtcRVcMOcRWcRXcpwaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaadaadaaaaaaaaacMXcRYcRZcSacMXcSbcKvecscSdcSecSfcSgcShcIMcSicIMcSjcSkcSkcSkcSlcSmcSmcEacEacEacKGcKGcKGcKGcKGcKGcKGcQOcSncQOcGTcSocGTdTdcBbcFUcBbcSqcSrcPScRecBbcSucSvcSwcSucSucSucSucSucSucSucSucSucSucSxcSycSzcSAcSAcSAcSKcSAcSAcSAcSAdaMedvedredvedtcSFcSGcSHcSDcSDcSIcSJcTucTycSMcLacLacLacLacLacLacLacSNcLbcLbcLbcSOcLbcSPcSQcSRcSScSPcLhcSTcLhcLhcLhcMIcSUcSVcSWcSXcSYcSZcTacPtcTbcTccTdcTecTfcTgcpwaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabfGaafaafaafaafaaaaaaaaacMXcMXcSbcKucKucKucThcTicTicTicTjcTicTicTicTkcKucKucKucKucThcKucKucKucKucKucKucKucKucTlcTmcTncTocTpcKucTqcTrcTscTtcTJcTJcTJcTJcTJcVYcSucTvcTwcRbcRacSucStcTxcUCcRccSscTEcSucTzcTAcXacSAcTGcTIcUucUvcUvcUMcSAcUNcSAcpkcpkcpkcpkcpkcpkcpkcpkcpkcTKcsFcTLcTMcTNcTOcTPcTQcTQcTRcTScTTcTUcTVcTWcTXcSRcTYcTZcUacUbcUccSRcUdcTWcTVcTUcUecSUcUfcXCcUhcUicUjcMOcUkcUlcUmcUncUocUpcUqcpwaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaaaaacMXcMXcMYcMYcMYcMXcMXcMXcMYcMYcMYcMXcMXcMXcMXcMXcMXcMXcMXcIMcIMcIMecucIMcIMcIMcIMcIMcIMcIMcMXcMXcMXcMXcUrdaPcUtcTJcUycUwcUxcUYcUZcSucUzcTwcUDcUAcUBcUGcUHcUEcUFcUIcUScSucUJcUKdfkcSAcSAcSAcUOcUPcUQcUTcSAcUUcUXcVacVbcVccWdcWfcWkcWncWocpkcpkcpkcTLcVfcVhcVdcVecVgcWbcGjcTScVicUacVjcVkcVlcSRcVmcVncVocVpcVqcSRcVrcVkcVjcUacVscSUcSUcSUcSUcVtcSUcMOcMOcMOcMOcMOcMOcVucVvcVwaafaafaafabcaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacMXcMXcVxcVycVzcVAcVBcVCcVDcVEcVFcMXcMXaaaaaaaaaczledbcVHcVKcVIcVIcVJcVNcVOcSucVLcVQcVRcVPcSucVTcVUcVScVMcWacUVcSucVVcVWcVXcSAcWpcWqcWrcWWcXbcXccXdcXecXfcVacXgcXjcYrcWfcYscYtcYvcpkcXkcpkcTLcWlcWmcWmcWlcXlcXmcXncXocWscWtcWucWvcWwcWxcWycWzcWAcWycWycWxcWAcWBcWCcWycWDcWEcQRcWGcWHcWIcWJcWKcWLcWMcWNcWOcWPcWQcWRcWSaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11437,9 +11437,9 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaafaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaabaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcVGcXrcTJcTJcTJcTJcXucTJcTJcXscXxcYjcXvcXwcYncYocYkcYmcYpcYqddAcYucUKddzdhacZwcZzcZBdhacYFcYGcSAcUNcSAcVacVacZCcVacWfcWfcZDcWfcpkdmFdmFcZEcYLcYMcYNcYOczCczCcTRcTScTScYPcYQcYRcYScYRcSPcYTcYUcYVcSPcYWcYXcYYcYZcYYcZacZbcZbcZbcZccZdcZccZecZfcZgcZfcZhcZicZjcZicWSaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaagaadaadabcaagaagaadaadaadaadaafaaeaaaaafaagaadaadaadaadaadaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrcUscZkcZncTJcYIcZPcZmcYJcWhcZlcZqcZrcYmcZpcZtcZucZscYqcZvcYqddAcZxcZycZAdaQdaRdaSdaTdhacZFcYGcZGcZHcZIcZJcZMcZNcZGcZOcZQcZRdaqdardasdasdatcTRcZTcZTcTRaaaaafaaaaaaaaacYPcZUcZVcZWcZXcZYcZYcZZcZYcZYdaadabdacdaddaedafdagdahcZbdaidajdakcZedaldamdancZhcWScYicWScVwaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaacUrdaodapdawdaxdaudavdaAdavdaydazdaGdaHdaBdaCdaKdaLdaIdaJdaNdaOdfUdaDdaEdaFdcIdcJdcMddrdhadaUdaVdaYdbvdbMdbOdbPdbQdbPdbRdbSdbYdbZcYHdiUdnMdcEcTRdaWdaXdcHaaaaafaaaaaaaaacYPdaZdbadbbdbcdbddbedbfdbgdbhdbidbjdbkdblcYYdbmdbndbocZbdbpdbqdbrcZedbsdbtdbucZhaaaaaaaaaaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafabcaagaadaafaaaaaaaaaaadaadaadaaaaaaaaaaaaaaacUrdbwdbxdbzcTJdbyddFdbBdbCdbAcZKdbDdbEcYmcZpdbGdbHcYqdbFdbJcYqdkmdbKcUKddzdaQddwdegdexdhadcNcYGdcOdcUdcZddsddBddCddDddEddDddDddDcYHddMddYdeadmGaaaaaaaaaaaaaafaaaaaaaaacYPdcadcbdccdcddbddcedcfdcgdbhdchdcidcjdckcYYdcldcmdcncZbdcodcpdcqcZedcrdcsdctcZhaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafabcaagaadaafaaaaaaaaaaadaadaadaaaaaaaaaaaaaaacUrdbwdbxdbzcTJdbyddFdbBdbCdbAcZKdbDdbEcYmcZpdbGdbHcYqdbFdbJcYqdkmdbKcUKddzdaQddwdegdexdhadcNcYGdcOdcUdcZddsddBddCddDddEddDddDddDcYHddMdcRdeadmGaaaaaaaaaaaaaafaaaaaaaaacYPdcadcbdccdcddbddcedcfdcgdbhdchdcidcjdckcYYdcldcmdcncZbdcodcpdcqcZedcrdcsdctcZhaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaaaaaaaaaaaacUrdcudbTdbWcTJdbNcZKdbUdcVdbXcZKdbDdcvcYmcZpdczdcAdcwdcxdcCdcDdcBdcKdcLdefdhadhadfcdaQdhadeccYGdcOdeecYHcYHcYHdehcYHcYHcYHcYHdeicYHcYHcYHdejdmGaaaaaaaaaaaaaafaaaaaaaaacYPddaddbddcddddbdddeddfdcgdbhddgddhddiddjcYWddkddkddkddkddlddmddlddnddoddpddocZhaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaafaafaafaafcUrddXdcPdcRcTJdcFdbVdcQdcTcZlcZKcZqdcWcYmcZpdcYddtcYqdcXdduddvddAddycUKdewdfHcYHdetdeydezdeAcYGdcOdeGdeMddZddZddZddZddZddZddZddZddZddZdeMdejdnfaaaaaaaaaaaaaafaafaafaafcYPcYPddNddOddPddQddRddSddTddQddUddVddWcYWcYWaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaagabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaadaafaafaafaafcUrddXdcPddYcTJdcFdbVdcQdcTcZlcZKcZqdcWcYmcZpdcYddtcYqdcXdduddvddAddycUKdewdfHcYHdetdeydezdeAcYGdcOdeGdeMddZddZddZddZddZddZddZddZddZddZdeMdejdnfaaaaaaaaaaaaaafaafaafaafcYPcYPddNddOddPddQddRddSddTddQddUddVddWcYWcYWaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaagabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaacUrddXddGecMcTJddxddJddHddIddKddLcTJdebcYqcZpcYqcYqcYqcYqcYqcYqddAddycUKdfkdgddeNdePdfadfbdfddfjdfodfpdeMddZddZddZddZddZddZddZddZddZddZdfsdcEdnfaaaaaaaaaaadaagaaaaaaaaaaafcYPcYPcYPcYPddQddQddQddQddQcYWcYWcYWcYWaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrddqcoVcoVcTJdekcZKcZKcZKcZldeldjFdemdemdendbHderdepdeqdeudevcYwdescVWdfydipdftdfudfvdfwdfIcYGdfNdfTdeMddZddZddZddZddZddZddZddZddZddZdeMdcEdnfaaaaaaaagaadaaaaaaaaaaaaaagaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaacUrddXdeBcAYcTJcZLdeCdeFdeddeDdeEcXpdeIcYqdeHdeKcYwdeJddAddAdeLcYwdeQcUKdgcdgvcYHdfVcYGdfWdfYcYGdfNdgadgbddZddZddZddZddZddZddZddZddZddZdgedcEdmGaafaafaadaaaaabaaaaaaaaaaadaaaaaaaaaaaaaafaaaaaaaaaaafaaaaaaaaaaafaaaaaaaafaafaadaadaadaafaaeaagaadaadaadaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11458,17 +11458,17 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrdkTdmddiMdmOdmfdmOdmgdjsdjsdkYdmidiRdlxdmjdlUdjsdmkdmldmmdmndmodmOdmqcUKdlidhudhxdmrdmtdmudmvdmwdmxdjYdjXdjYdjYdjZdkadkbdkcdkddkbdkbdkedkfdkgdkhdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcAYdjjdkldlDdmydlDdlDdmzdmAdmBdmAdmAdmAdmAdmCdmDdmVdmldmWdmYdmodmOdfkcUKdmsdlEdlFdlGdlJdlKdlLdlYdlZdkHdmEdkJdkHdkKdkLdkMdkNdkOdkNdkNdkPdkQdkRdkSdkiaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacUrcUrcUrcUrcUrcUrcUrdmediMdiMdkrdksdnJdnKdmZdoodoqdoudoudnLdmhdoxdoydozdoAdoAdlHdmOdfkdncdowdixdixdmUdixdixdixdixdmXdixdixdixdlmdixdlndixdlodlpdlqdhxdnadhxdnbdixdjAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdqndmKdmLdmMdiMdmNdmOdmOdmPdmQdiMdiMdiMdiMdiMdiMdiMdiMdiMdmOdmOdmOdmRdmSdcLdmTdnednhdnhdnxdnhdnydnDdnednednednednEdnFdnGdixdnHdnHdnIdnNdnOdhxdordosdotaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdprdmKdmLdmMdiMdmNdmOdmOdmPdmQdiMdiMdiMdiMdiMdiMdiMdiMdiMdmOdmOdmOdmRdmSdcLdmTdnednhdnhdnxdnhdnydnDdnednednednednEdnFdnGdixdnHdnHdnIdnNdnOdhxdordosdotaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdrgdrgdrgdnidnidmKdnjdnkdnkdnldnkdnmdnndnodnpdnqdnrdnsdntdnudnvdnwdpNdpOdnzdnAdnBdfkcUKdVAdnedovdovdoCdoDdpkdoFdnedpcdpcdnedixdixdixdixdixdixdixdixdmadixdixdixdjAaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdnPdnQdnRdnRdnSdmIdnTdnUdnVdnWdnXdnYdnZdoadobdocdoddoedofdogdohdoidojdokdoldomdomdomdondqodopdnednednedpedpfdpgdphdpidpjdsRdnedpldpmdpndpodppdpqdprdnedpsdcGdpLdpMdpPaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdnPdnQdnRdnRdnSdmIdnTdnUdnVdnWdnXdnYdnZdoadobdocdoddoedofdogdohdoidojdokdoldomdomdomdondqodopdnednednedpedpfdpgdphdpidpjdsRdnedpldpmdpndpodppdpqdqndnedpsdcGdpLdpMdpPaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdoGdoHdoHecTdoJdmcdoLdoMdoNdoOdoPdoQdoRdoPdoPdoOdoSdoTdoUdoVdoWdoXdoYdoZdpadpbdoYdfkcUKdpddnedpQdpRdpUdqkdqldqmdnedoEdoEdnedqOdqpdpqdqqdqrdqsdqtdnedqudqvdcGdqwdpPaafaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdptdoHdoHdoIdoJdmcdoLdpudpvdoOdpwdpxdpydpzdpAdoOdpBdpBdpCdpBdpDdpEdpFdpGdpFdpHdpIdpJcUKdpKdnednednednedqxdnednhdnednednednedqydqzdpqdsbdqAdpqdqtdnedqBdcGcZScZScZScZSaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmIdpSdoKdpTdpTdnSdmIdmKdpVdpudpWdoPdpXdpYdpZdpXdpXdqadqbdqcdqddqcdqedpEdqfdqgdqhdpFdqidfkcUKdqjdqCdqSdqTdqUdqVdqWdqXdqYdqZdradrbdrcdrddredrfdrydrydrydrzdrAdrBdhhdrCdrDdpPaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdqDdqDdqDdnidnidmKdqEdpudqFdoPdqGdqHdqIdqJdqKdoOdqLdqMdqNdqcdqPdpEdrsdqQdqRdpFdqidfkdsLdqjdqCdqSdrEdpqdpqdrFdrGdrGdrHdrGdrIdrJdrKdrGdrLdrGdrMdscdnedsddsedsfdcGdsgdpPaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdrtdmKdrhdridrjdoOdrkdrldrmdrndrodoOdrpdrqdrrdqcdrXdpEdrYdrudrvdrwdrxdfkdtrdtsdsidsjdskdsldsmdrGdrGdsndnDdpqdsodnednednedspdnednednednedsEdsFdhhdsGdsHdpPaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdngdqDdqDdqDdnidnidmKdqEdpudqFdoPdqGdqHdqIdqJdqKdoOdqLdqMdqNdqcdqPdpEdrsdqQdqRdpFdqidfkdsLdqjdqCdqSdrEdpqdpqdrFdrGdrGdrHdrGdrIdrJdrKdrGdrLdrGdrMdrtdnedsddsedsfdcGdsgdpPaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmHdmHdmHdmIdmHdmHdscdmKdrhdridrjdoOdrkdrldrmdrndrodoOdrpdrqdrrdqcdrXdpEdrYdrudrvdrwdrxdfkdtrdtsdsidsjdskdsldsmdrGdrGdsndnDdpqdsodnednednedspdnednednednedsEdsFdhhdsGdsHdpPaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmKdmKdmKdmKdmKdmKdmKdrNdrOdpWdoPdrPdrQdrRdrSdrTdoOdrUdqcdrVdrWdCFdpEdCZdrZdsadpFdqidfkcUKdXTdsIdsJdsKdsMdsNdrGdrGdsndpqdpqdsOdsPdnedpqdsQdshdnedsSdnedtkdtldhhdhhcZScZSaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadmKdsqdsrdqFdoPdssdpxdssdstdsudoOdsvdqcdswdqcdsxdpEdsydszdsAdpFdsBdsCcTAdsDdsIdtmdtndtodsNdrGdrGdsndpqdtpdpqdpqdnhdpmdtqdttdnedtudnedtvdFLcZSaaaaaaaaaaaaaaaaagaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsTdsTdsTdsTdsTaaaaaaaaaaaaaaaaaadmKdsUdsVdoXdoOdsWdsXdsYdssdsZdtadtbdtcdtddtcdtedpEdpEdpEdpEdtfdtgdthdtidtjdtgdHddUXdUYdUZdVadrGdsndpqdpqdVbdVcdnhdVddVedVfdnedsSdnedVgdVtcZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsTdsTdsTdsTdsTaaaaaaaaaaaaaaaaaadmKdsUdsVdoXdoOdsWdsXdsYdssdsZdtadtbdtcdtddtcdtedpEdpEdpEdpEdtfdtgdthdtidtjdtgdHddUXdUYdUZdVadrGdsndpqdpqdVbdVcdnhdCmdVedVfdnedsSdnedVgdVtcZSaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsTdsTdsTdsTdsTdsTdsTaaaaaaaaaaaadtgdtgdtwdtxdtydoOdoOdoPdoPdoPdoOdoOdtzdpBdpBdpBdtzdtAdtBdtCdtydtDdtCdtxdtEdtwdtFdtgdtAedledledledldtAdnednednednednednednednednednednedtHdtIdtgdtgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsTdsTdsTdsTdsTdsTdsTaaaaaaaaaaaadtgdtJdtKdtLdtLdtGdtMdtNdtOdtPdtQdtPdtRdtSdtTdtUdtTdtVdtKdtLdtLdtWdtLdtXdtYdtKdtLdtWdtLdtXdtLdtZdtTdtPdtTdtSduadtUdtQdtPdubdtNdtMdtGdtLducdudduedtgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadufdufaaaaaaaaaaaaaaadufdufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadsTdsTdsTdsTdsTdsTdsTaaaaaaaaaaaadtgdugduhduidujdukdulduldumdulduldujdundulduldumduldulduodulduldukduldupduqduoduldukduldumduldulduldujduldurdusdumdulduldujdulduldukdujdutduuduvdtgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadufdufdufaaaaaaaaadufdufdufaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11647,7 +11647,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaafaaaaaaaaaaaaaaaaafdAVdAVdAVdAVdAVdAVdAVdAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBadAVdAVdAVdAVdBcdBcdBcdBIdBJdBKdBLdBLdBLdCedBmdBNdBcdBcdBcdAVdAVdAVdAVdBadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBraaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaadBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaafaafaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBPdBcdBcdBQdBRdBSdBTdBUdBVdBWdBXdBYdBZdCadBcdBcdCbdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBraaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaadBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaagaadaadaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdCcdCcdCcdCcdCcdCcdAVdAVdAVdAVdAVdAVdAVdBcdBcdBcdBIdBJdBKdBLdCddBLdCedBmdBNdBcdBcdBcdAVdAVdAVdAVdAVdAVdAVdCfdCfdCfdCfdCfdCfdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdAVdAVdAVdAVdAVdCgdChdChdChdChdCidCjdCkdCldCmdCcdAVdAVdAVdAVdAVdCndCodCodCpdCpdCqdCrdCsdBLdBLdBLdBAdCtdCudBcdBcdAVdAVdAVdAVdAVdAVdAVdAVdCfdCvdCwdCxdCydCzdCAdCAdCAdCAdCBdAVdAVdAVdAVdAVdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaadaagaafaaaaafaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdBGdBHdBudAVdAVdAVdAVdAVdAVdCgdChdChdChdChdCidCjdCkdCldHrdCcdAVdAVdAVdAVdAVdCndCodCodCpdCpdCqdCrdCsdBLdBLdBLdBAdCtdCudBcdBcdAVdAVdAVdAVdAVdAVdAVdAVdCfdCvdCwdCxdCydCzdCAdCAdCAdCAdCBdAVdAVdAVdAVdAVdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdBDdBOdBFdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdCDdAVdCEdCEdCEdCgdFMdCGdCHdCIdCJdCldCldCldCKdCcdAVdAVdAVdAVdAVdCLdAVdAVdBcdBcdBcdCMdCNdCOdDvdCOdCQdCRdBcdBcdBcdAVdAVdAVdAVdAVdAVdAVdAVdCfdCSdCTdCUdCUdCVdCWdCXdCYdFYdCBdDadDadDadAVdAVdAVdAVdDbdAVdAVdAVdDbdAVdAVdAVdDbdAVdAVdAVdDbdAVdAVdAVdDbdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdDcdDddDddDddDedDddDddDddDedDddDddDddDedDddDddDddDedDddDddDddDedDddDddDfdDgdDhdDidDjdDkdDldDmdDndDodDpdDqdDrdDsdDtdCcaaaaaaaaaaaaaaadDuaaaaaadBcdBcdBcdBjdIqdDwdDxdDydDzdBedBcdBcdBcaaaaaadDAaaaaaaaaaaaaaaadCfdDBdDCdDDdDDdDEdDFdDGdDHdDIdDJdDKdDLdDMdDNdDOdDPdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDQdDRdDSdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdCCdAVdAVdAVdAVdCEdDTdDUdDVdDWdDXdDYdCIdDZdCldEadEbdCcdCcaaaaaaaaaaaaaaadDuaaaaaaaaaaaadBcdBcdBcdBcdEcdBcdBcdBcdBcaaaaaaaaaaaadDAaaaaaaaaaaaaaaadCfdCfdEddEedCUdEfdCWdEgdEhdEidEjdEkdEldDadAVdAVdAVdAVdEmdAVdAVdAVdEmdAVdAVdAVdEmdAVdAVdAVdEmdAVdAVdAVdEmdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11661,7 +11661,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEnedxdEndEndE aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdFKdVudFoaaaaaadAVdAVdAVdAVdAVdAVdCLdAVdFpdOgdFNdFOdFPdFQdFRdFSdFTdFUdFVdFWdFXdOJdFsdAVdAVdAVdAVdAVdAVdAVdAVaaaaaadFudFZdGadCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGbecCdCcaaaaaadGddGedGfdGedGgdGgdGhdGgdGgdGidGjdGkdGldFpdGmdGndGmdFsdGodGpdGqdGrdGsdGtdGudGtdGsdGvdGwdGvdGxaaaaaadCfecDdGzdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGAdCldCcaaaaaadGddGBdGCdGDdGEedAedzedBdGgdFpdFpdFpdGIdGJdGKdGLdGMdGNdGOdFsdFsdFsdGsdGPdGQdGRdGSdGTdGUdGVdGxaaaaaadCfdCUdGWdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadBrdBrdBrdBrdBrdBrdBraaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGXdGYdCcaaaaaadGddGZdHadHbdGEdeoedCedEdGgdHfdHgdHgdHhdHgdHgdHidHgdHgdHjdHgdHgdHkdGsdHldHmdHndGSdHodHpdHqdGxaaaaaadCfdHrdHsdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdGXdGYdCcaaaaaadGddGZdHadHbdGEdeoedCedEdGgdHfdHgdHgdHhdHgdHgdHidHgdHgdHjdHgdHgdHkdGsdHldHmdHndGSdHodHpdHqdGxaaaaaadCfdOqdHsdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadEndEndEndEndEnaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdCcdCcdHtdEqdCcaaaaaadGddHudHvdHwdGEdeOdHyedGdGgdHAdHBdHCdHDdHEdHFdHGdHEdHEdHHdHIdHBdHAdGsdHJdHKdHLdGSdHMdHNdHOdGxaaaaaadCfdEvdHPdCfdCfdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdHQdHQdHRdHSdHTdHUdHVdHWdHXdHYdHYdGddHZdIadIbdGgdfqdGEedIdIddHAdHCdIedIedIedIedIedIedIedIedIedIfdHAdIgdIhdIidGSdGsdIjdIkdIldGxdImdImdIndIodIpdKwdIrdIsdItdIudIudAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdIvdIwdIxdIydIzdIAdIBdICdIDdIEdIFdIGdIHdIIdIJdIKedJdIMedKdIOdIPdIQdIRdIedISdISdISdISdISdIedITdIUdIVdIWdIXdIYdIZdJadJbdIYdJcdJddJedJfdIWdJgdJhdJidJjdJkdJldJmdJndAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11673,8 +11673,8 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdMxdMxdMxdMxdMxdMydMzdKHdMAdMBdMCdMDdMDdMEdKLdMFdMGdMHdKKdMIdMJdMKdMLdMMdMNdMNdMNdMOdMPdMQdMNdMRdKWdMSdMTdMUdKVdMVdMWdMXdLaaaaaaadMYdMZdNadMYdMYdMYdMYdMYdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaafaafaafaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNcdKHdKHdKHdKHdKHdKHdKHdKKdKKdKKdKKdKKdNddNedNfdVBdNhdNhdNidNjdNkdNldNmdNndNodKWdKWdKWdKWdKWdLadLadLadLaaaaaaadMYdNpdNqdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNrdNsdMxaaaaaadNtdNudNvdNwdNxdNydNzdNAdNtdNBdNCdNDdNEdNFdNGdNHdNGdNEdNEdNDdNIdNJdNKdNLdNMdNNdNOdNKdNPdNQdNKaaaaaadMYdNRdNSdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafaadaXGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNTdMxaaaaaadNtdNUdNVdNWdNXdNYdNZdOadNtdObdOcdIedOddOedHBdHAdHBdOfdRfdIedOhdOidNKdOjdOkdOldOmdOndOodOpdNKaaaaaadMYdOqdOrdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdOsdOtaaaaaadOudNydOvdOwdOxdOydOzdOAdOBdOCdODdOEdOddOFdOGdOHdOIdHBdRgdOKdOLdOMdONdOOdOPdOQdORdNKdOSdOTdNKaaaaaadOUdOVdOWdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdNTdMxaaaaaadNtdNUdNVdNWdNXdNYdNZdOadNtdObdOcdIedOddOedHBdHAdHBdOfdRfdIedOhdOidNKdOjdOkdOldOmdOndOodOpdNKaaaaaadMYdOVdOrdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdNbdOsdOtaaaaaadOudNydOvdOwdOxdOydOzdOAdOBdOCdODdOEdOddOFdOGdOHdOIdHBdRgdOKdOLdOMdONdOOdOPdOQdORdNKdOSdOTdNKaaaaaadOUdVddOWdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdOXdOYdOtaaaaaaecEdPadPbdPcdPddPcdPedPfdNtdPgdPhdIedPidPjdPkdPldPmdPndPodIedPpdPqdNKdNKdNKdPrdNKdNKdNKdNKdNKaaaaaadOUdPsdPtdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaaaaagaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaaaaaaaaaaafaafdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPvdOtaaaaaadPwdPxdNydNydPydNydNydPzdNtdObdOcdPAdPAdPAdPBdPCdPDdPAdPAdPAdOhdOidNKdPEdPFdPGdPHdPIdUWdPKdNKaaaaaadOUdPLdPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaaaaaaaaaaaaaaaaaaaaaaaaaafaaaaaaaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadaaaaaaaaaaafaaaaaaaaadAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdPNdPOdPPdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdMxdPudPQdMxaaaaaadPRdPSdPTdNydPUdPVdPWdPXdPYdPZdQadQbdQcdQddQedQfdQgdQhdQidQjdQkdQldQmdQndQodQpdQqdQrdQsdQtdNKaaaaaadMYdQudPMdMYdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdQvdQwdQxdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVdAVaafaafaafabcaafaaaaaaaagaadaadaadaadaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -11795,4 +11795,3 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa dUOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa "} - diff --git a/maps/southern_cross/southern_cross-3.dmm b/maps/southern_cross/southern_cross-3.dmm index 433197e556..bbd7e781eb 100644 --- a/maps/southern_cross/southern_cross-3.dmm +++ b/maps/southern_cross/southern_cross-3.dmm @@ -364,7 +364,7 @@ "gZ" = (/obj/effect/floor_decal/industrial/warning{dir = 10},/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -21},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security) "ha" = (/obj/effect/floor_decal/industrial/warning{dir = 6},/turf/simulated/floor/tiled/steel_dirty,/area/surface/outpost/main/security) "hb" = (/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/structure/table/rack{dir = 8; layer = 2.6},/obj/item/device/gps/explorer{pixel_x = -5; pixel_y = -5},/obj/item/device/gps/explorer{pixel_x = -3; pixel_y = -3},/obj/item/device/gps,/obj/item/device/gps{pixel_x = 3; pixel_y = 3},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) -"hc" = (/obj/structure/closet/crate,/obj/item/stack/material/phoron{amount = 25},/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) +"hc" = (/obj/item/stack/material/phoron{amount = 25},/obj/random/crate,/turf/simulated/floor/plating,/area/surface/outpost/mining_main/gen_room) "hd" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/obj/structure/closet/secure_closet/explorer,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/obj/item/device/binoculars,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "he" = (/obj/structure/closet/secure_closet/explorer,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) "hf" = (/obj/structure/closet/secure_closet/explorer,/obj/machinery/ai_status_display{pixel_y = -32},/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/green/border,/turf/simulated/floor/tiled,/area/surface/outpost/main/security) @@ -1567,7 +1567,8 @@ "Eg" = (/obj/effect/shuttle_landmark{landmark_tag = "syndie_planet"; name = "Sif Surface West"},/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/syndicate_station/planet) "Eh" = (/obj/effect/shuttle_landmark{landmark_tag = "skipjack_planet"; name = "Sif Surface South"},/turf/simulated/floor/outdoors/dirt/sif/planetuse,/area/skipjack_station/planet) "Ei" = (/obj/effect/overmap/visitable/planet/Sif,/turf/simulated/mineral/sif,/area/surface/outside/plains/mountains) - +"Ej" = (/obj/random/crate,/turf/simulated/floor/tiled/steel_grid,/area/surface/outpost/main/garage) + (1,1,1) = {" aaaaaaaaaaaaaaaaababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababacadadadabababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababababaeaeaeababababababababab aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaiajajajahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafakakakafafafafafafafafaa @@ -1606,7 +1607,7 @@ aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctct aaafafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctctctalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIgIhshthuhvhwhxhyhzhyhAgIgIgIgIgIgIgIalalalalamajajajajajalalalalalalbHhBhBhBhBhBhChChChChChDhihEhFhFhFhFhFhGhGhGhFhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctctctalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIhHhIhyhJhKhLhMhNhOhPhQhRhShShTgIalalalalalamajajajajalalalalalalalalhBhUhVhWhBhYiahZizibhDhihEhFicidieifigihiiijhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaAaGaDaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalctctctctctalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIikhIhyiliminioipiqirisisitiuivgIalalalalalamajajajalalalalalalalalalhBiwixiyhBiAiYiBjmhCiCiDiEhFiFiGiGiGiHiHiGiIhFalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaCaJaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM -aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIiJiKiLhJhyiMiNiOiPiQiRiSiTiUiVgIalalalalalamajajajalalalalalalalalalhBhBiWhBhBiXjEiZjahChDhijbhFiHiHjciiiiiHiHiGhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM +aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIiJiKiLhJhyiMiNiOiPiQiRiSiTiUiVgIalalalalalamajajajalalalalalalalalalhBhBiWhBhBiXjEiZjahChDhijbhFiHiHjciiiiiHiHEjhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajgIgIjdjejfjggIgIjhgIgIjijjjkjkgIgIalalalalalamajajajalalalalalalalalaljlmMjnjojphChCjqhChCjrhijshGjtiHjujvjwiGiHiHhGalalalalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajgIgIgIgIjxgIjyjzjygIgIgIgIgIgIalalalalalalamajajajalalalalalalalalaljljAjWjCjDjHjFjGjKjIfYhijJhGqUiHjLiHiGiGiHiHhGaljMjMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaCaJaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM aaafalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalalaFalalalalalalalalalalalalalalalalalalalalalalalalalalalalajajajalalalalajajajjNjOjOjOjPjOjOjQjRjRjRjRjRjRjRjRjRjRjRjRjRjSjRjRjRjTjTjTjTjTjTjTjTjTjUjVlSjXjYjZkakbkakckakdkekfkgkhkikhkhkjiHiHhGalaljMalalalalalalalalafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaAaAaAaGaDaDaDaDaDaDcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUcUaM @@ -1825,4 +1826,3 @@ aaafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafDADADADADA aaEiafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafagafafafafafafafafDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDJDJDKDKDJDJDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDQDVDMDWDQDQDQDQDQDQDQDQDQDQDQDQDQDQafafafafafafafafafafafafagafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafafaa aaaaaaaaaaaaaaaaabababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaabababababababababababababababababababababababababababababababababababDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDZDZDZDZDZDZDQDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDXDQDYDYDYDQDXDXDXDXDXDXDXDXDXDXDXDXDXababababababababababababababababababababababababababababababababababababaaaaaaaaaaaaaaaaaaaaaaaaaaababababababababababababababababababababababababab "} - diff --git a/maps/southern_cross/southern_cross-6.dmm b/maps/southern_cross/southern_cross-6.dmm index 8d40ebf032..b7a4a729f4 100644 --- a/maps/southern_cross/southern_cross-6.dmm +++ b/maps/southern_cross/southern_cross-6.dmm @@ -644,7 +644,7 @@ "mt" = (/obj/item/weapon/stool/padded,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mu" = (/obj/machinery/biogenerator,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mv" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"mw" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/fryer,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) +"mw" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/appliance/cooker/fryer,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mx" = (/obj/machinery/computer/card/centcom{dir = 4},/obj/item/weapon/card/id/centcom,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/centcom/creed) "my" = (/obj/structure/bed/chair{dir = 1},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) "mz" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_l"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start) @@ -660,7 +660,7 @@ "mJ" = (/obj/structure/reagent_dispensers/beerkeg,/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeobserve) "mK" = (/obj/structure/table/reinforced,/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/main_hall) "mL" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"mM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/grill,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) +"mM" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/appliance/cooker/grill,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mN" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/sink/kitchen{pixel_y = 28},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mO" = (/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "mP" = (/obj/machinery/button/remote/blast_door{id = "crescent_thunderdome"; name = "Thunderdome Access"; pixel_x = 6; pixel_y = -24; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_vip_shuttle"; name = "VIP Shuttle Access"; pixel_x = 6; pixel_y = -34; req_access = list(101)},/obj/machinery/button/remote/blast_door{id = "crescent_checkpoint_access"; name = "Crescent Checkpoint Access"; pixel_x = -6; pixel_y = -24; req_access = list(101)},/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) @@ -668,7 +668,7 @@ "mR" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "propulsion"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start) "mS" = (/turf/space,/obj/structure/shuttle/engine/propulsion{icon_state = "burst_r"; dir = 8},/turf/simulated/shuttle/plating/airless/carry,/area/shuttle/response_ship/start) "mT" = (/obj/machinery/computer/pod{id = "thunderdomegen"; name = "Thunderdome General Supply"},/turf/unsimulated/floor{icon_state = "lino"},/area/tdome/tdomeadmin) -"mU" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/oven,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) +"mU" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/appliance/cooker/oven,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mV" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/knife/machete/hatchet,/obj/item/weapon/material/minihoe,/obj/item/weapon/material/minihoe,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mW" = (/obj/machinery/smartfridge/drying_rack,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "mX" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/item/weapon/reagent_containers/glass/bucket,/obj/item/weapon/reagent_containers/glass/bucket,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) @@ -704,7 +704,7 @@ "nB" = (/obj/machinery/flasher{id = "flash"; name = "Thunderdome Flash"},/turf/unsimulated/floor{icon_state = "dark"},/area/tdome) "nC" = (/obj/machinery/seed_extractor,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "nD" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/machinery/microwave{pixel_x = -3; pixel_y = 6},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"nE" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/candy,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) +"nE" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/appliance/mixer/candy,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "nF" = (/obj/machinery/door/blast/regular{id = "CentComPort"; name = "Security Doors"},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "nG" = (/obj/machinery/door/airlock/centcom{name = "General Access"; opacity = 1; req_access = list(101)},/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/main_hall) "nH" = (/obj/structure/table/reinforced,/obj/structure/window/reinforced{dir = 8},/turf/unsimulated/floor{icon_state = "vault"; dir = 5},/area/centcom/command) @@ -730,7 +730,7 @@ "ob" = (/obj/structure/table/marble,/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/floor_decal/corner/white/diagonal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "oc" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "od" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) -"oe" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/cooker/cereal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) +"oe" = (/obj/effect/floor_decal/corner/white/diagonal,/obj/machinery/appliance/mixer/cereal,/turf/unsimulated/floor{icon_state = "steel"},/area/centcom/bar) "of" = (/obj/structure/table/reinforced,/obj/item/weapon/card/id/gold/captain/spare,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "og" = (/obj/structure/table/reinforced,/obj/item/device/pda/captain,/turf/unsimulated/floor{icon_state = "dark"},/area/centcom/command) "oh" = (/obj/machinery/door/airlock/external{frequency = 1380; icon_state = "door_locked"; id_tag = "admin_shuttle_bay_door"; locked = 1},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/centcom/command) @@ -2174,7 +2174,7 @@ "PP" = (/obj/machinery/light{dir = 8; icon_state = "tube1"; pixel_y = 0},/obj/machinery/computer/station_alert{dir = 4},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) "PQ" = (/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/obj/machinery/computer/security{dir = 8},/turf/simulated/shuttle/floor/voidcraft/light,/area/ninja_dojo/start) "PR" = (/obj/structure/closet/crate/freezer/rations,/turf/simulated/shuttle/floor/voidcraft,/area/syndicate_station/start) -"PS" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) +"PS" = (/obj/item/trash/cigbutt,/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "PT" = (/obj/machinery/light/small{dir = 1},/turf/simulated/shuttle/floor/voidcraft/dark,/area/syndicate_station/start) "PU" = (/obj/machinery/light{dir = 1},/obj/structure/table/steel,/obj/item/roller,/obj/item/roller,/obj/item/roller,/obj/item/device/defib_kit/compact/combat/loaded,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) "PV" = (/obj/structure/closet/secure_closet/medical_wall{pixel_y = 32; req_access = list(150)},/obj/item/bodybag,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/syringe/antiviral,/obj/item/weapon/reagent_containers/glass/bottle/antitoxin{pixel_x = -4; pixel_y = 8},/obj/item/weapon/reagent_containers/glass/bottle/inaprovaline{pixel_x = 4; pixel_y = 7},/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/storage/firstaid/combat,/obj/item/weapon/storage/firstaid/clotting,/turf/simulated/shuttle/floor/voidcraft/light,/area/syndicate_station/start) @@ -2319,7 +2319,7 @@ "SE" = (/obj/effect/floor_decal/sign/small_g,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) "SF" = (/obj/effect/floor_decal/sign/small_f,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) "SG" = (/obj/effect/floor_decal/sign/small_h,/turf/simulated/floor/holofloor/wood,/area/holodeck/source_chess) - + (1,1,1) = {" aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/maps/southern_cross/southern_cross_areas.dm b/maps/southern_cross/southern_cross_areas.dm index bd7cca429e..471e70c6f9 100644 --- a/maps/southern_cross/southern_cross_areas.dm +++ b/maps/southern_cross/southern_cross_areas.dm @@ -60,6 +60,7 @@ /area/surface/outside ambience = AMBIENCE_SIF always_unpowered = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT // The area near the outpost, so POIs don't show up right next to the outpost. /area/surface/outside/plains/outpost @@ -123,7 +124,7 @@ /area/surface/cave - flags = RAD_SHIELDED + flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT always_unpowered = TRUE /area/surface/cave @@ -398,7 +399,7 @@ icon_state = "shuttle" requires_power = 0 dynamic_lighting = 1 - flags = RAD_SHIELDED + flags = RAD_SHIELDED | AREA_FLAG_IS_NOT_PERSISTENT /area/turbolift/start name = "\improper Turbolift Start" @@ -753,11 +754,13 @@ name = "\improper Command - HoP's Office" icon_state = "head_quarters" holomap_color = HOLOMAP_AREACOLOR_COMMAND + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/crew_quarters/heads/sc/hor name = "\improper Research - RD's Office" icon_state = "head_quarters" holomap_color = HOLOMAP_AREACOLOR_SCIENCE + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/crew_quarters/heads/sc/chief name = "\improper Engineering - CE's Office" @@ -773,6 +776,7 @@ name = "\improper Medbay - CMO's Office" icon_state = "head_quarters" holomap_color = HOLOMAP_AREACOLOR_MEDICAL + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/engineering/engineer_eva name = "\improper Engineering EVA" @@ -1052,6 +1056,7 @@ area/crew_quarters/heads/sc/hop/quarters name = "\improper Third Deck Plating" dynamic_lighting = 0 ambience = AMBIENCE_SPACE + flags = AREA_FLAG_IS_NOT_PERSISTENT // Shuttles diff --git a/maps/submaps/engine_submaps/engine_tesla.dmm b/maps/submaps/engine_submaps/engine_tesla.dmm index 8a34a5a399..05e3a7d202 100644 --- a/maps/submaps/engine_submaps/engine_tesla.dmm +++ b/maps/submaps/engine_submaps/engine_tesla.dmm @@ -288,14 +288,8 @@ dir = 1 }, /obj/structure/table/standard, -/obj/item/weapon/circuitboard/grounding_rod{ - pixel_x = 2; - pixel_y = 2 - }, -/obj/item/weapon/circuitboard/grounding_rod{ - pixel_x = -2; - pixel_y = -2 - }, +/obj/item/weapon/circuitboard/tesla_coil, +/obj/item/weapon/circuitboard/tesla_coil, /turf/simulated/floor, /area/engineering/engine_gas) "aB" = ( @@ -700,16 +694,16 @@ /turf/simulated/wall/r_wall, /area/submap/pa_room) "bj" = ( -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/power/tesla_coil, /obj/structure/cable/yellow{ d2 = 4; icon_state = "0-4" }, +/obj/structure/cable/yellow{ + d1 = 0; + d2 = 8; + icon_state = "0-8" + }, /turf/simulated/floor/airless, /area/space) "bk" = ( @@ -1137,16 +1131,12 @@ /turf/simulated/floor/tiled, /area/submap/pa_room) "bZ" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/structure/cable/yellow{ d2 = 2; icon_state = "0-2" }, /obj/machinery/power/tesla_coil, +/obj/structure/cable/yellow, /turf/simulated/floor/airless, /area/space) "ca" = ( @@ -1584,13 +1574,12 @@ /turf/simulated/floor, /area/engineering/engine_room) "cF" = ( -/obj/structure/cable/yellow{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/structure/cable/yellow, /obj/machinery/power/tesla_coil, +/obj/structure/cable/yellow{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/airless, /area/space) "cG" = ( diff --git a/maps/submaps/surface_submaps/mountains/deadBeacon.dmm b/maps/submaps/surface_submaps/mountains/deadBeacon.dmm index 2a32fb4f64..253b4c53c9 100644 --- a/maps/submaps/surface_submaps/mountains/deadBeacon.dmm +++ b/maps/submaps/surface_submaps/mountains/deadBeacon.dmm @@ -27,7 +27,7 @@ "A" = (/obj/item/weapon/circuitboard/broken,/turf/simulated/mineral/floor/ignore_mapgen,/area/submap/cave/deadBeacon) "B" = (/obj/structure/grille/broken,/obj/structure/window/reinforced{dir = 4},/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) "C" = (/obj/structure/loot_pile/maint/junk,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) -"D" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tool/wrench,/obj/machinery/light,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) +"D" = (/obj/item/trash/cigbutt,/obj/item/weapon/tool/wrench,/obj/machinery/light,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "E" = (/obj/item/weapon/material/shard,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "F" = (/obj/machinery/recharge_station,/turf/simulated/floor/tiled/asteroid_steel,/area/submap/cave/deadBeacon) "G" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced,/turf/simulated/floor/plating,/area/submap/cave/deadBeacon) diff --git a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm index 390589daac..7da857ef05 100644 --- a/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm +++ b/maps/submaps/surface_submaps/mountains/quarantineshuttle.dmm @@ -25,7 +25,7 @@ "ay" = (/obj/effect/decal/remains/xeno,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "az" = (/obj/item/trash/syndi_cakes,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aA" = (/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) -"aB" = (/obj/item/weapon/cigbutt,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) +"aB" = (/obj/item/trash/cigbutt,/obj/item/weapon/tank/emergency/oxygen,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aC" = (/obj/item/weapon/material/knife/tacknife/boot,/obj/item/clothing/mask/breath,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aD" = (/obj/effect/decal/remains/human,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) "aE" = (/obj/item/trash/sosjerky,/obj/item/weapon/storage/box/donut/empty,/obj/item/weapon/reagent_containers/food/drinks/sillycup,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) @@ -50,7 +50,7 @@ "aX" = (/obj/item/device/paicard,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aY" = (/obj/machinery/door/blast/regular{name = "Cargo Door"},/obj/item/tape/medical{dir = 4; icon_state = "tape_door_0"; layer = 3.4},/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) "aZ" = (/obj/effect/decal/remains/human,/obj/item/clothing/under/mbill{desc = "A uniform belonging to Major Bill's Transportation, a shipping megacorporation. This looks at least a few decades out of date."; name = "\improper old Major Bill's uniform"},/obj/item/clothing/head/soft/mbill{desc = "It's a ballcap bearing the colors of Major Bill's Shipping. This one looks at least a few decades out of date."; name = "old shipping cap"},/turf/simulated/shuttle/floor,/area/submap/cave/qShuttle) -"ba" = (/obj/item/weapon/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) +"ba" = (/obj/item/trash/cigbutt,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) "bb" = (/obj/machinery/door/airlock/command{icon_state = "door_locked"; locked = 1},/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) "bc" = (/obj/item/weapon/tank/emergency/oxygen/engi,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor_white"},/area/submap/cave/qShuttle) "bd" = (/obj/effect/decal/remains/human,/obj/item/clothing/suit/space/emergency,/obj/item/clothing/head/helmet/space/emergency,/obj/effect/decal/cleanable/dirt,/turf/simulated/shuttle/floor{icon_state = "floor_yellow"},/area/submap/cave/qShuttle) diff --git a/maps/submaps/surface_submaps/plains/Diner.dmm b/maps/submaps/surface_submaps/plains/Diner.dmm index d8c6d2d7e4..69f2b63996 100644 --- a/maps/submaps/surface_submaps/plains/Diner.dmm +++ b/maps/submaps/surface_submaps/plains/Diner.dmm @@ -1,1132 +1,1132 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/template_noop, -/area/submap/Diner) -"ac" = ( -/turf/simulated/floor/outdoors/dirt, -/area/submap/Diner) -"ad" = ( -/turf/simulated/wall, -/area/submap/Diner) -"ae" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"af" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ag" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ah" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ai" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aj" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ak" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"al" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"am" = ( -/obj/structure/sink/kitchen, -/turf/simulated/wall, -/area/submap/Diner) -"an" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/submap/Diner) -"ao" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ap" = ( -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aq" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ar" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"as" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"at" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"au" = ( -/obj/structure/table/standard, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"av" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aw" = ( -/obj/machinery/cooker/cereal, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ax" = ( -/obj/structure/bed/chair/wood, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ay" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"az" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aA" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aB" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aC" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aD" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aF" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aG" = ( -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aH" = ( -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aI" = ( -/obj/structure/closet/crate/freezer, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aJ" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aK" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aL" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aM" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aN" = ( -/obj/structure/closet/crate/freezer, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aO" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aQ" = ( -/obj/structure/closet/crate/freezer, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aR" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aS" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aT" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aU" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aV" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aW" = ( -/obj/machinery/cooker/fryer, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aX" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/submap/Diner) -"aY" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aZ" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/cooker/grill, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ba" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"bb" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"bc" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bd" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"be" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bf" = ( -/obj/item/frame/apc, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bg" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bh" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bi" = ( -/turf/simulated/floor/lino, -/area/submap/Diner) -"bk" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bl" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/cell/high, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bm" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bn" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bo" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bp" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/windoor_assembly{ - icon_state = "l_windoor_assembly01"; - dir = 2 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bq" = ( -/obj/structure/bookcase, -/turf/simulated/floor/lino, -/area/submap/Diner) -"br" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/space_heater, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bs" = ( -/obj/structure/sink{ - icon_state = "sink"; - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bt" = ( -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bu" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bv" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bw" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bx" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"by" = ( -/obj/structure/mirror{ - dir = 4; - pixel_x = -32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bz" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bA" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -an -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(3,1,1) = {" -aa -ab -ab -an -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -an -ab -aa -"} -(4,1,1) = {" -aa -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -aa -"} -(5,1,1) = {" -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -aa -"} -(6,1,1) = {" -aa -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -aa -"} -(7,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ac -ac -aX -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(8,1,1) = {" -aa -ab -ab -ab -ad -ad -ae -ae -ae -ad -ad -az -ad -ae -ae -ae -ad -ae -ae -ae -ad -ab -ab -ab -aa -"} -(9,1,1) = {" -aa -ab -ab -ad -ad -af -ax -aC -ao -af -ad -aV -ad -ax -aC -ao -ax -aC -ao -af -ad -ad -ab -ab -aa -"} -(10,1,1) = {" -aa -ab -ad -ad -aq -af -ax -aD -ao -af -ad -az -ad -ax -aD -ao -ax -aD -ao -af -br -ad -ad -ab -aa -"} -(11,1,1) = {" -aa -ad -ad -af -af -af -af -af -af -af -aR -af -aY -af -af -af -af -af -af -af -af -af -ad -ad -aa -"} -(12,1,1) = {" -aa -ae -af -ax -ar -ao -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ad -aa -"} -(13,1,1) = {" -aa -ae -af -ax -as -ao -af -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -af -af -bv -bv -ae -aa -"} -(14,1,1) = {" -aa -ad -ad -ad -ad -ad -ad -aF -aJ -aO -aF -aF -aF -aF -aF -aF -aO -aJ -aF -af -af -aD -aC -ae -aa -"} -(15,1,1) = {" -aa -ad -ag -ap -at -ap -az -af -af -af -af -af -af -af -af -af -af -af -ah -af -af -bw -bw -ae -aa -"} -(16,1,1) = {" -aa -ad -ah -ap -ap -ap -az -af -aK -aP -aS -aW -aZ -bc -bd -be -ah -aK -bp -af -af -af -af -ad -aa -"} -(17,1,1) = {" -aa -ad -ai -ap -au -ap -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -bx -ad -ad -aa -"} -(18,1,1) = {" -aa -ad -aj -ap -ah -ap -aA -aG -aL -aG -aG -aG -aG -ba -ba -aG -aG -aL -aG -ad -bs -bt -by -ad -aa -"} -(19,1,1) = {" -aa -ad -ak -ap -av -ap -ad -ad -ad -ad -ad -ad -ba -ba -ad -ad -ad -bo -ad -ad -bt -bt -bz -ad -aa -"} -(20,1,1) = {" -aa -ad -al -ap -ap -ap -ad -aH -aM -aQ -aT -ad -bb -ba -ad -bf -bk -bi -bi -ad -bu -bt -bA -ad -aa -"} -(21,1,1) = {" -aa -ad -am -ap -ap -ap -aB -aH -aH -aH -aH -ad -aG -ba -ad -bg -bl -bi -bi -ad -ad -ad -ad -ad -aa -"} -(22,1,1) = {" -aa -ab -ad -ad -aw -ap -ad -aH -aH -aH -aH -ad -aA -aA -ad -bh -bm -bi -bq -ad -ad -ad -ad -ab -aa -"} -(23,1,1) = {" -aa -ab -ab -ad -ad -ay -ad -aI -aN -aH -aU -ad -bb -aG -ad -bi -bn -bi -bq -ad -ad -ad -ab -ab -aa -"} -(24,1,1) = {" -aa -ab -ab -ab -ad -ad -ad -ad -ad -ad -ad -ad -aA -aA -ad -ad -ad -ad -ad -ad -ad -ab -ab -ab -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/template_noop, +/area/submap/Diner) +"ac" = ( +/turf/simulated/floor/outdoors/dirt, +/area/submap/Diner) +"ad" = ( +/turf/simulated/wall, +/area/submap/Diner) +"ae" = ( +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"af" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ag" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ah" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ai" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/glass/beaker, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aj" = ( +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ak" = ( +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"al" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"am" = ( +/obj/structure/sink/kitchen, +/turf/simulated/wall, +/area/submap/Diner) +"an" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/submap/Diner) +"ao" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ap" = ( +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aq" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ar" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"as" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"at" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"au" = ( +/obj/structure/table/standard, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"av" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aw" = ( +/obj/machinery/appliance/mixer/cereal, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ax" = ( +/obj/structure/bed/chair/wood, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ay" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"az" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aA" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aB" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aC" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aD" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aE" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aF" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aG" = ( +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aH" = ( +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aI" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aJ" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aK" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aL" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aM" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aN" = ( +/obj/structure/closet/crate/freezer, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aO" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aP" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aQ" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aR" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/coatrack, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aS" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aT" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aU" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aV" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aW" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aX" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/submap/Diner) +"aY" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aZ" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/appliance/cooker/grill, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ba" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"bb" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"bc" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bd" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"be" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_coffee, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bf" = ( +/obj/item/frame/apc, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bg" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bh" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bi" = ( +/turf/simulated/floor/lino, +/area/submap/Diner) +"bk" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bl" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/cell/high, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bm" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bn" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bo" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bp" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/windoor_assembly{ + icon_state = "l_windoor_assembly01"; + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bq" = ( +/obj/structure/bookcase, +/turf/simulated/floor/lino, +/area/submap/Diner) +"br" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bs" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bt" = ( +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bu" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bv" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bw" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bx" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"by" = ( +/obj/structure/mirror{ + dir = 4; + pixel_x = -32; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bz" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bA" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +an +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(3,1,1) = {" +aa +ab +ab +an +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +an +ab +aa +"} +(4,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +"} +(5,1,1) = {" +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(6,1,1) = {" +aa +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +"} +(7,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ac +ac +aX +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(8,1,1) = {" +aa +ab +ab +ab +ad +ad +ae +ae +ae +ad +ad +az +ad +ae +ae +ae +ad +ae +ae +ae +ad +ab +ab +ab +aa +"} +(9,1,1) = {" +aa +ab +ab +ad +ad +af +ax +aC +ao +af +ad +aV +ad +ax +aC +ao +ax +aC +ao +af +ad +ad +ab +ab +aa +"} +(10,1,1) = {" +aa +ab +ad +ad +aq +af +ax +aD +ao +af +ad +az +ad +ax +aD +ao +ax +aD +ao +af +br +ad +ad +ab +aa +"} +(11,1,1) = {" +aa +ad +ad +af +af +af +af +af +af +af +aR +af +aY +af +af +af +af +af +af +af +af +af +ad +ad +aa +"} +(12,1,1) = {" +aa +ae +af +ax +ar +ao +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ad +aa +"} +(13,1,1) = {" +aa +ae +af +ax +as +ao +af +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +af +af +bv +bv +ae +aa +"} +(14,1,1) = {" +aa +ad +ad +ad +ad +ad +ad +aF +aJ +aO +aF +aF +aF +aF +aF +aF +aO +aJ +aF +af +af +aD +aC +ae +aa +"} +(15,1,1) = {" +aa +ad +ag +ap +at +ap +az +af +af +af +af +af +af +af +af +af +af +af +ah +af +af +bw +bw +ae +aa +"} +(16,1,1) = {" +aa +ad +ah +ap +ap +ap +az +af +aK +aP +aS +aW +aZ +bc +bd +be +ah +aK +bp +af +af +af +af +ad +aa +"} +(17,1,1) = {" +aa +ad +ai +ap +au +ap +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +bx +ad +ad +aa +"} +(18,1,1) = {" +aa +ad +aj +ap +ah +ap +aA +aG +aL +aG +aG +aG +aG +ba +ba +aG +aG +aL +aG +ad +bs +bt +by +ad +aa +"} +(19,1,1) = {" +aa +ad +ak +ap +av +ap +ad +ad +ad +ad +ad +ad +ba +ba +ad +ad +ad +bo +ad +ad +bt +bt +bz +ad +aa +"} +(20,1,1) = {" +aa +ad +al +ap +ap +ap +ad +aH +aM +aQ +aT +ad +bb +ba +ad +bf +bk +bi +bi +ad +bu +bt +bA +ad +aa +"} +(21,1,1) = {" +aa +ad +am +ap +ap +ap +aB +aH +aH +aH +aH +ad +aG +ba +ad +bg +bl +bi +bi +ad +ad +ad +ad +ad +aa +"} +(22,1,1) = {" +aa +ab +ad +ad +aw +ap +ad +aH +aH +aH +aH +ad +aA +aA +ad +bh +bm +bi +bq +ad +ad +ad +ad +ab +aa +"} +(23,1,1) = {" +aa +ab +ab +ad +ad +ay +ad +aI +aN +aH +aU +ad +bb +aG +ad +bi +bn +bi +bq +ad +ad +ad +ab +ab +aa +"} +(24,1,1) = {" +aa +ab +ab +ab +ad +ad +ad +ad +ad +ad +ad +ad +aA +aA +ad +ad +ad +ad +ad +ad +ad +ab +ab +ab +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/maps/submaps/surface_submaps/plains/Diner_vr.dmm b/maps/submaps/surface_submaps/plains/Diner_vr.dmm index 8967f9bff7..7264e054dd 100644 --- a/maps/submaps/surface_submaps/plains/Diner_vr.dmm +++ b/maps/submaps/surface_submaps/plains/Diner_vr.dmm @@ -1,1154 +1,1154 @@ -//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE -"aa" = ( -/turf/template_noop, -/area/template_noop) -"ab" = ( -/turf/template_noop, -/area/submap/Diner) -"ac" = ( -/turf/simulated/floor/outdoors/dirt, -/area/submap/Diner) -"ad" = ( -/turf/simulated/wall, -/area/submap/Diner) -"ae" = ( -/obj/structure/window/reinforced/full, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"af" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ag" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ah" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ai" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/enzyme, -/obj/item/weapon/reagent_containers/glass/beaker, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aj" = ( -/obj/structure/table/standard, -/obj/machinery/light{ - dir = 1 - }, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ak" = ( -/obj/machinery/vending/cola, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"al" = ( -/obj/machinery/vending/dinnerware, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"am" = ( -/obj/structure/sink/kitchen, -/turf/simulated/wall, -/area/submap/Diner) -"an" = ( -/obj/structure/flora/tree/sif, -/turf/template_noop, -/area/submap/Diner) -"ao" = ( -/obj/structure/bed/chair/wood, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ap" = ( -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aq" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ar" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"as" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"at" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"au" = ( -/obj/structure/table/standard, -/obj/item/weapon/book/manual/chef_recipes, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"av" = ( -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/rollingpin, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aw" = ( -/obj/machinery/cooker/cereal, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ax" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"ay" = ( -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/condiment/sugar, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"az" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aA" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aB" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aC" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/material/kitchen/utensil/fork, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aD" = ( -/obj/structure/table/standard, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aE" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aF" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aG" = ( -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aH" = ( -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aI" = ( -/obj/structure/closet/crate/freezer, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aJ" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aK" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aL" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aM" = ( -/obj/machinery/light/small{ - brightness_color = "#DA0205"; - brightness_power = 1; - brightness_range = 5; - dir = 8 - }, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aN" = ( -/obj/structure/closet/crate/freezer, -/obj/machinery/light/small{ - dir = 4 - }, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/obj/item/weapon/reagent_containers/food/snacks/meat, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aO" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/red/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aP" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/obj/machinery/microwave, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aQ" = ( -/obj/structure/closet/crate/freezer, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/obj/item/weapon/reagent_containers/food/condiment/flour, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aR" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aS" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aT" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/coatrack, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aU" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/table/standard, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aV" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/submap/Diner) -"aW" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aX" = ( -/obj/machinery/cooker/fryer, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"aY" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"aZ" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/outdoors/dirt, -/area/submap/Diner) -"ba" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bb" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/cooker/grill, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bc" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"bd" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"be" = ( -/obj/machinery/light{ - icon_state = "tube1"; - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bf" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"bg" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/storage/fancy/egg_box, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bh" = ( -/obj/structure/table/standard, -/obj/machinery/chemical_dispenser/bar_coffee, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bi" = ( -/obj/item/frame/apc, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bj" = ( -/obj/structure/table/woodentable, -/obj/item/device/flashlight/lamp, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bk" = ( -/obj/structure/bed/chair/office/light, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bl" = ( -/turf/simulated/floor/lino, -/area/submap/Diner) -"bm" = ( -/obj/machinery/light/small{ - dir = 8 - }, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bn" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/cell/high, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bo" = ( -/obj/structure/table/woodentable, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bp" = ( -/obj/machinery/light/small{ - dir = 4 - }, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bq" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/lino, -/area/submap/Diner) -"br" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/structure/windoor_assembly{ - icon_state = "l_windoor_assembly01"; - dir = 2 - }, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bs" = ( -/obj/structure/bookcase, -/turf/simulated/floor/lino, -/area/submap/Diner) -"bt" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/space_heater, -/obj/machinery/light, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bu" = ( -/obj/structure/sink{ - icon_state = "sink"; - dir = 8; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bv" = ( -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bw" = ( -/obj/structure/toilet, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bx" = ( -/obj/structure/bed/chair/wood{ - dir = 4 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"by" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/effect/floor_decal/corner/red/diagonal, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) -"bz" = ( -/obj/structure/simple_door/wood, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bA" = ( -/obj/structure/mirror{ - dir = 4; - pixel_x = -32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bB" = ( -/obj/machinery/light/small, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"bC" = ( -/obj/structure/table/standard, -/turf/simulated/floor/tiled/hydro, -/area/submap/Diner) -"gw" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled, -/area/submap/Diner) -"lT" = ( -/obj/effect/floor_decal/corner/red/diagonal, -/obj/machinery/portable_atmospherics/canister/air, -/turf/simulated/floor/tiled/white, -/area/submap/Diner) - -(1,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} -(2,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -an -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(3,1,1) = {" -aa -ab -ab -an -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -an -ab -aa -"} -(4,1,1) = {" -aa -ab -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -aa -"} -(5,1,1) = {" -aa -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -aa -"} -(6,1,1) = {" -aa -ab -ac -ac -ac -ac -ac -ac -ac -ac -ac -ac -aZ -ac -ac -ac -ac -ac -ac -ac -ac -ab -ab -ab -aa -"} -(7,1,1) = {" -aa -ab -ab -ab -ab -ab -ab -ab -ab -ad -ad -az -ad -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -ab -aa -"} -(8,1,1) = {" -aa -ab -ab -ab -ad -ad -ae -ae -ae -ad -aS -ap -ad -ae -ae -ae -ad -ae -ae -ae -ad -ab -ab -ab -aa -"} -(9,1,1) = {" -aa -ab -ab -ad -ad -af -ao -aC -ax -ad -aS -aW -ad -ao -aC -ax -ao -aC -ax -af -ad -ad -ab -ab -aa -"} -(10,1,1) = {" -aa -ab -ad -ad -aq -af -ao -aD -ax -ad -ad -az -ad -ao -aD -ax -ao -aD -ax -af -bt -ad -ad -ab -aa -"} -(11,1,1) = {" -aa -ad -ad -af -af -af -af -af -af -af -aT -af -ba -af -af -af -af -af -af -af -af -af -ad -ad -aa -"} -(12,1,1) = {" -aa -ae -af -ao -ar -ax -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -af -ad -aa -"} -(13,1,1) = {" -aa -ae -af -ao -as -ax -lT -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -aE -af -af -bx -bx -ae -aa -"} -(14,1,1) = {" -aa -ad -ad -ad -ad -ad -ad -aF -aJ -aO -aF -aF -aF -aF -aF -aF -aO -aJ -aF -af -af -aD -aC -ae -aa -"} -(15,1,1) = {" -aa -ad -ag -ap -at -ap -az -af -af -af -af -af -af -af -af -af -af -af -ah -af -af -by -by -ae -aa -"} -(16,1,1) = {" -aa -ad -ah -ap -ap -ap -az -af -aK -aP -aU -aX -bb -be -bg -bh -ah -aK -br -af -af -af -af -ad -aa -"} -(17,1,1) = {" -aa -ad -ai -ap -au -ap -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -ad -bz -ad -ad -aa -"} -(18,1,1) = {" -aa -ad -aj -ap -ah -ap -aA -aG -aL -aG -aG -aG -aG -bc -bc -aG -aG -aL -aG -ad -bu -bv -bA -ad -aa -"} -(19,1,1) = {" -aa -ad -ak -ap -av -ap -ad -ad -ad -ad -ad -ad -bc -gw -ad -ad -ad -bq -ad -ad -bv -bv -bB -ad -aa -"} -(20,1,1) = {" -aa -ad -al -ap -ap -ap -ad -aH -aM -aQ -aV -ad -bd -bc -ad -bi -bm -bl -bl -ad -bw -bv -bC -ad -aa -"} -(21,1,1) = {" -aa -ad -am -ap -ap -ap -aB -aH -aH -aH -ad -ad -aA -aA -ad -bj -bn -bl -bl -ad -ad -ad -ad -ad -aa -"} -(22,1,1) = {" -aa -ab -ad -ad -aw -ap -ad -aH -aH -aH -ad -aY -aG -aG -ad -bk -bo -bl -bs -ad -ad -ad -ad -ab -aa -"} -(23,1,1) = {" -aa -ab -ab -ad -ad -ay -ad -aI -aN -aR -ad -aY -aG -bf -ad -bl -bp -bl -bs -ad -ad -ad -ab -ab -aa -"} -(24,1,1) = {" -aa -ab -ab -ab -ad -ad -ad -ad -ad -ad -ad -ad -aA -aA -ad -ad -ad -ad -ad -ad -ad -ab -ab -ab -aa -"} -(25,1,1) = {" -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -aa -"} +//MAP CONVERTED BY dmm2tgm.py THIS HEADER COMMENT PREVENTS RECONVERSION, DO NOT REMOVE +"aa" = ( +/turf/template_noop, +/area/template_noop) +"ab" = ( +/turf/template_noop, +/area/submap/Diner) +"ac" = ( +/turf/simulated/floor/outdoors/dirt, +/area/submap/Diner) +"ad" = ( +/turf/simulated/wall, +/area/submap/Diner) +"ae" = ( +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"af" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ag" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ah" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ai" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/enzyme, +/obj/item/weapon/reagent_containers/glass/beaker, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aj" = ( +/obj/structure/table/standard, +/obj/machinery/light{ + dir = 1 + }, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ak" = ( +/obj/machinery/vending/cola, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"al" = ( +/obj/machinery/vending/dinnerware, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"am" = ( +/obj/structure/sink/kitchen, +/turf/simulated/wall, +/area/submap/Diner) +"an" = ( +/obj/structure/flora/tree/sif, +/turf/template_noop, +/area/submap/Diner) +"ao" = ( +/obj/structure/bed/chair/wood, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ap" = ( +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aq" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ar" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"as" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"at" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"au" = ( +/obj/structure/table/standard, +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"av" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/rollingpin, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aw" = ( +/obj/machinery/appliance/mixer/cereal, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ax" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"ay" = ( +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/condiment/sugar, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"az" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aA" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aB" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aC" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/material/kitchen/utensil/fork, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aD" = ( +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aE" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aF" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aG" = ( +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aH" = ( +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aI" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aJ" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aK" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aL" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aM" = ( +/obj/machinery/light/small{ + brightness_color = "#DA0205"; + brightness_power = 1; + brightness_range = 5; + dir = 8 + }, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aN" = ( +/obj/structure/closet/crate/freezer, +/obj/machinery/light/small{ + dir = 4 + }, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/obj/item/weapon/reagent_containers/food/snacks/meat, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aO" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/red/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aP" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aQ" = ( +/obj/structure/closet/crate/freezer, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/obj/item/weapon/reagent_containers/food/condiment/flour, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aR" = ( +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aS" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aT" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/coatrack, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aU" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aV" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/freezer, +/area/submap/Diner) +"aW" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aX" = ( +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"aY" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary/tram, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"aZ" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/outdoors/dirt, +/area/submap/Diner) +"ba" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bb" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/appliance/cooker/grill, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bc" = ( +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"bd" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"be" = ( +/obj/machinery/light{ + icon_state = "tube1"; + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bf" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"bg" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/storage/fancy/egg_box, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/milk, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/obj/item/weapon/reagent_containers/food/drinks/bottle/cream, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bh" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_coffee, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bi" = ( +/obj/item/frame/apc, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bj" = ( +/obj/structure/table/woodentable, +/obj/item/device/flashlight/lamp, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bk" = ( +/obj/structure/bed/chair/office/light, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bl" = ( +/turf/simulated/floor/lino, +/area/submap/Diner) +"bm" = ( +/obj/machinery/light/small{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bn" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/cell/high, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bo" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bp" = ( +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bq" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/lino, +/area/submap/Diner) +"br" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/structure/windoor_assembly{ + icon_state = "l_windoor_assembly01"; + dir = 2 + }, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bs" = ( +/obj/structure/bookcase, +/turf/simulated/floor/lino, +/area/submap/Diner) +"bt" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/space_heater, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bu" = ( +/obj/structure/sink{ + icon_state = "sink"; + dir = 8; + pixel_x = -12; + pixel_y = 2 + }, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bv" = ( +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bw" = ( +/obj/structure/toilet, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bx" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"by" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/obj/effect/floor_decal/corner/red/diagonal, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) +"bz" = ( +/obj/structure/simple_door/wood, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bA" = ( +/obj/structure/mirror{ + dir = 4; + pixel_x = -32; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bB" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"bC" = ( +/obj/structure/table/standard, +/turf/simulated/floor/tiled/hydro, +/area/submap/Diner) +"gw" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled, +/area/submap/Diner) +"lT" = ( +/obj/effect/floor_decal/corner/red/diagonal, +/obj/machinery/portable_atmospherics/canister/air, +/turf/simulated/floor/tiled/white, +/area/submap/Diner) + +(1,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} +(2,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +an +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(3,1,1) = {" +aa +ab +ab +an +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +an +ab +aa +"} +(4,1,1) = {" +aa +ab +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +"} +(5,1,1) = {" +aa +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +aa +"} +(6,1,1) = {" +aa +ab +ac +ac +ac +ac +ac +ac +ac +ac +ac +ac +aZ +ac +ac +ac +ac +ac +ac +ac +ac +ab +ab +ab +aa +"} +(7,1,1) = {" +aa +ab +ab +ab +ab +ab +ab +ab +ab +ad +ad +az +ad +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +ab +aa +"} +(8,1,1) = {" +aa +ab +ab +ab +ad +ad +ae +ae +ae +ad +aS +ap +ad +ae +ae +ae +ad +ae +ae +ae +ad +ab +ab +ab +aa +"} +(9,1,1) = {" +aa +ab +ab +ad +ad +af +ao +aC +ax +ad +aS +aW +ad +ao +aC +ax +ao +aC +ax +af +ad +ad +ab +ab +aa +"} +(10,1,1) = {" +aa +ab +ad +ad +aq +af +ao +aD +ax +ad +ad +az +ad +ao +aD +ax +ao +aD +ax +af +bt +ad +ad +ab +aa +"} +(11,1,1) = {" +aa +ad +ad +af +af +af +af +af +af +af +aT +af +ba +af +af +af +af +af +af +af +af +af +ad +ad +aa +"} +(12,1,1) = {" +aa +ae +af +ao +ar +ax +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +af +ad +aa +"} +(13,1,1) = {" +aa +ae +af +ao +as +ax +lT +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +aE +af +af +bx +bx +ae +aa +"} +(14,1,1) = {" +aa +ad +ad +ad +ad +ad +ad +aF +aJ +aO +aF +aF +aF +aF +aF +aF +aO +aJ +aF +af +af +aD +aC +ae +aa +"} +(15,1,1) = {" +aa +ad +ag +ap +at +ap +az +af +af +af +af +af +af +af +af +af +af +af +ah +af +af +by +by +ae +aa +"} +(16,1,1) = {" +aa +ad +ah +ap +ap +ap +az +af +aK +aP +aU +aX +bb +be +bg +bh +ah +aK +br +af +af +af +af +ad +aa +"} +(17,1,1) = {" +aa +ad +ai +ap +au +ap +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +ad +bz +ad +ad +aa +"} +(18,1,1) = {" +aa +ad +aj +ap +ah +ap +aA +aG +aL +aG +aG +aG +aG +bc +bc +aG +aG +aL +aG +ad +bu +bv +bA +ad +aa +"} +(19,1,1) = {" +aa +ad +ak +ap +av +ap +ad +ad +ad +ad +ad +ad +bc +gw +ad +ad +ad +bq +ad +ad +bv +bv +bB +ad +aa +"} +(20,1,1) = {" +aa +ad +al +ap +ap +ap +ad +aH +aM +aQ +aV +ad +bd +bc +ad +bi +bm +bl +bl +ad +bw +bv +bC +ad +aa +"} +(21,1,1) = {" +aa +ad +am +ap +ap +ap +aB +aH +aH +aH +ad +ad +aA +aA +ad +bj +bn +bl +bl +ad +ad +ad +ad +ad +aa +"} +(22,1,1) = {" +aa +ab +ad +ad +aw +ap +ad +aH +aH +aH +ad +aY +aG +aG +ad +bk +bo +bl +bs +ad +ad +ad +ad +ab +aa +"} +(23,1,1) = {" +aa +ab +ab +ad +ad +ay +ad +aI +aN +aR +ad +aY +aG +bf +ad +bl +bp +bl +bs +ad +ad +ad +ab +ab +aa +"} +(24,1,1) = {" +aa +ab +ab +ab +ad +ad +ad +ad +ad +ad +ad +ad +aA +aA +ad +ad +ad +ad +ad +ad +ad +ab +ab +ab +aa +"} +(25,1,1) = {" +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +aa +"} diff --git a/maps/submaps/surface_submaps/wilderness/Manor1.dmm b/maps/submaps/surface_submaps/wilderness/Manor1.dmm index 691311bc68..311e2b7bb1 100644 --- a/maps/submaps/surface_submaps/wilderness/Manor1.dmm +++ b/maps/submaps/surface_submaps/wilderness/Manor1.dmm @@ -1,188 +1,188 @@ -"aa" = (/turf/template_noop,/area/submap/Manor1) -"ab" = (/turf/simulated/wall/wood,/area/submap/Manor1) -"ac" = (/obj/structure/window/reinforced/full,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ad" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ae" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"af" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ag" = (/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ah" = (/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ai" = (/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aj" = (/obj/structure/table/woodentable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ak" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"al" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"am" = (/obj/structure/table/woodentable,/obj/item/device/flashlight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"an" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ao" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ap" = (/obj/structure/sink,/turf/simulated/wall/wood,/area/submap/Manor1) -"aq" = (/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1) -"ar" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1) -"as" = (/obj/structure/simple_door/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"at" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"au" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"av" = (/obj/structure/janitorialcart,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aw" = (/obj/structure/table/woodentable,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ax" = (/obj/structure/closet/cabinet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ay" = (/obj/effect/decal/cleanable/blood/gibs/robot/limb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"az" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aC" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/maglight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aD" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aE" = (/obj/structure/closet/cabinet,/obj/effect/decal/cleanable/cobweb2,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aF" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aG" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aH" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aI" = (/obj/structure/flora/pottedplant/dead,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aJ" = (/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aK" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aL" = (/obj/structure/fireplace,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aM" = (/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aN" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aO" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aP" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aQ" = (/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) -"aR" = (/obj/structure/table/standard,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aS" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aT" = (/obj/structure/closet/cabinet,/obj/random/projectile/shotgun,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aU" = (/obj/structure/bookcase,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aV" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aX" = (/obj/structure/table/standard,/obj/item/weapon/material/knife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aY" = (/obj/machinery/cooker/oven,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"aZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ba" = (/obj/machinery/cooker/grill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bb" = (/obj/structure/table/standard,/obj/item/weapon/tray,/obj/item/weapon/tray,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bc" = (/obj/structure/table/standard,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bd" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"be" = (/obj/random/trash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bf" = (/obj/structure/closet/cabinet,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/random/contraband,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bg" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bh" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bi" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken0"},/area/submap/Manor1) -"bj" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bk" = (/obj/random/plushielarge,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bl" = (/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bm" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater/blue,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bn" = (/obj/structure/window/reinforced/full,/turf/template_noop,/area/submap/Manor1) -"bo" = (/obj/item/weapon/material/twohanded/baseballbat/metal,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bp" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bq" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"br" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken5"},/area/submap/Manor1) -"bs" = (/obj/structure/table,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bt" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bu" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bw" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bx" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"by" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bz" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bA" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bB" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/stew,/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bC" = (/obj/item/weapon/shovel,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bD" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bE" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bF" = (/obj/structure/table/standard,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bG" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/sausage,/obj/item/weapon/reagent_containers/food/snacks/sausage,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bJ" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bK" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bL" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bM" = (/obj/machinery/papershredder,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bN" = (/obj/structure/simple_door/wood,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) -"bO" = (/obj/machinery/icecream_vat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bQ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bS" = (/obj/structure/flora/pottedplant/subterranean,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bT" = (/obj/item/weapon/material/minihoe,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"bU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) -"bV" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken6"},/area/submap/Manor1) -"bW" = (/obj/machinery/washing_machine,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bX" = (/obj/structure/table/woodentable,/obj/structure/bedsheetbin,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bY" = (/obj/structure/table/rack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"bZ" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random_belt,/obj/random/cash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ca" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/umbrella/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cb" = (/obj/structure/closet/cabinet,/obj/random/gun/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cc" = (/obj/structure/closet/cabinet,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/random/medical,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cd" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ce" = (/obj/structure/bed/double,/obj/item/weapon/bedsheet/rddouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cf" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cg" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ch" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) -"ci" = (/obj/structure/closet/crate,/obj/item/weapon/flame/lighter/random,/obj/random/powercell,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cj" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ck" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cl" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/Manor1) -"cm" = (/obj/effect/decal/cleanable/blood,/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cn" = (/obj/structure/closet/crate,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"co" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cp" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cq" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/shoes/black,/obj/random/projectile/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cr" = (/obj/structure/simple_door/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) -"cs" = (/obj/item/weapon/material/twohanded/spear,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"ct" = (/obj/structure/closet/cabinet{opened = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cu" = (/obj/effect/decal/remains,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cv" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cw" = (/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cx" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cy" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cz" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cA" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cB" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken3"},/area/submap/Manor1) -"cC" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cD" = (/obj/structure/closet/crate,/obj/item/clothing/suit/armor/vest,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cE" = (/obj/structure/closet/crate,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cF" = (/obj/structure/simple_door/wood,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cG" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cH" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cI" = (/obj/item/stack/material/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cJ" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cL" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) -"cM" = (/obj/structure/table/woodentable,/obj/item/modular_computer/laptop/preset/custom_loadout/cheap,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) -"cN" = (/turf/template_noop,/area/template_noop) -"cO" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Manor1) - -(1,1,1) = {" -cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN -cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN -cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadaeafagahaiagadajafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN -cNaaaaaaaaaaaaaaaaababababababababababababagagagagagagagagagagagagababababababababababababababaaaaaaaaaaaacN -cNaaaacOaaaaaaaaabababakagagagalamalagananagagagagananananagagagagagagagagalalalagagagaiabaoapabaaaacOaaaacN -cNaaaaaaaaaaaaababalabagaqaqaqaqarararararararaqarararararararaqaqaqaqaqaqaqaqaqaqaqaqagasagagababaaaaaaaacN -cNaaaaaaaaaaababatauabagaqaqaqaqaqaqaqarararararararararararararaqaqaqaqaqaqaqaqaqaqaqagabavagawababaaaaaacN -cNaaaaaaaaaaabaxagayabagaqagagazalalaganananaAaBaAagananagagagagagagagagagalalaCagagaqagababababababaaaaaacN -cNaaaaaaaaaaababasababagaqagabababababababababababababababababababababababababababagaqagabaDagagaEabaaaaaacN -cNaaaaaacOaaabagagagasagaqagabaFaGagalaHabaIaJaKagagaLaLagagagagahabagaMagagagaNabagaqagabaOagagalabaaaaaacN -cNaaaaaaaaaaabasabababagaqagabagagagagagabaKaKaPaPagaQaQagaPaPagagabaRagaRaRagaSabagaqagabababasababaaaaaacN -cNaaaaaaaaaaabagagaTabagaqagabagaUagaUagabagadalaVafaQaQadaValafagabaRagaWaXagaYabalaqagasagagagagabaaaaaacN -cNaaaaaaaaaaabagagaMabagaqagabagaUagaUagabagadalalafaQaQadalalafagabaRagaZaRagbaabagaqagabababasababaaaaaacN -cNaaaaaaaaaaabaDalaOabagaqagabagaUagaUagabagadalalafaQaQadalalafagabbbagaRbcagbdabagaqagabaOagagalabaaaaaacN -cNaaaaaaaaaaabababababagaqagabagagagaganabagadalalafaQaQadalalafagabagagagagagagabagaqagabaDbeagbfabaaaaaacN -cNaaaaaaaaaaabaDalbgabalaqagabagaUagaUanabagadalalafaQaQadalalafagabagagagagagagabagaqagababababababaaaaaacN -cNaaaaaaaaababagbhagabazaqagasagaUagaUanabagadaGalafaQaQadalalafagabagagagagagagabagaqagabbiagagagababaaaacN -cNaaaaaaababbjagagbkabalaqagabagaUanaUanabagadalalafaQaQadalalafagabagagagagagagabagaqagabagblbmagagababaacN -cNaaaaaabnagagagagaOabagaqanabanananananabanadalalafaQaQadalalafagasagagagagagagasagaqagasagbobpbqbrbsacaacN -cNaaaaaabnagagagagalabagaranabagaUanaUagabanbtalalafaQaQadalalbuanabagagaRbvagagabagaqagabagblbwagbxbsacaacN -cNaaaaaaababagagagbyabanaranabagaUanaUagabanbtalalafaQaQadalbzbuanabagagbAaRagbBabagaqagabagblblagbCababaacN -cNaaaaaaaaababagagagabanaragabagaUanaUagabananbhbhagaQaQagbhbDananabagagbEbFagbGabagaqagabalblblagababaaaacN -cNaaaaaaaaaaabagagagabagaragabagaganagagabbHananagagaQaQaganananbIabagagbFbJagbKabagaqagabaDblblalabaaaaaacN -cNaaaaaaaaaaabagagagasagaqagabaGbLbMagaiababababababbNbNababababababbOaKaKaKagagabagaqagabalblblalabaaaaaacN -cNaaaaaaaaaaabazalagabagaqagababababasabababababalalaQaQalalabababababababababababagaqagabalbwbPalabaaaaaacN -cNaaaaaaaaaaabababababbQaqagagananananananananasagagaQaQagagasagagagagagagagagagagagaqagabazblbPalabaaaaaacN -cNaaaaaaaaababbRazbSabbqaqagagagagananananananasagagaQaQagagasagagagagagagagagagagagaqagabalblbTagababaaaacN -cNaaaaaaababagagagagabagaqagababababasabababababalagbUaQagalabababababababababababagaqagabagblblbVagababaacN -cNaaaaaaacagagagagbqasbqaqagabbWbXabagabbYagbZabalagbUbUagcaabcbccagcdcecfagagcgabagaqagasagbpchagbxbsacaacN -cNaacOaaacagagagbqagabagaqagabagagasagabagagciabcjckbUbUagcjabagclclclclclclclaDabagaqagabbqbwblagcmagacaacN -cNaaaaaaababagbQbQagabahaqagabbWazabagasagagcnababcobUbUcoababagclclclclclclclalabahaqahabagbwblagcpababaacN -cNaaaaaaaaababcqagagababasabababababagabagagagaKababcrcrababagagclclclclclclclalababasababcsblbwagababaaaacN -cNaaaaaaaaaaabctagcuabcvcwcxabcycwasagabbYagaKaKczabbUbUabazafagclclclclclclclagagagagahabagcAcBagabaaaaaacN -cNaaaaaaaaaaababalagabcwabababcwcwabagabbYcCaJcDcEabbUbUabalagagagagagclclclclclclclclagabcAbqagababaaaaaacN -cNaaaaaaaaaaaaababalabcwcFcGabcwcHabasabababababababbNbNabababababahagclclclclclclclclagabagcIababaaaaaaaacN -cNaaaaaaaaaaaaaaabababcwabababcwcHabcwcvababaaaaaaaaaaaaaaaaaaaaababalclclclclclclclclagabcIababaaaaaaaaaacN -cNaaaaaaaaaaaaaaaaababcwcFcGabcwcJabcKcLabaaaaaaaaaaaaaaaaaaaaaaaaabcMalalagagagagagagahabababaaaaaacOaaaacN -cNaaaaaacOaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaacN -cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN -cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN +"aa" = (/turf/template_noop,/area/submap/Manor1) +"ab" = (/turf/simulated/wall/wood,/area/submap/Manor1) +"ac" = (/obj/structure/window/reinforced/full,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ad" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ae" = (/obj/structure/table/woodentable,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"af" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ag" = (/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ah" = (/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ai" = (/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aj" = (/obj/structure/table/woodentable,/obj/item/clothing/mask/smokable/cigarette/cigar,/obj/item/weapon/material/ashtray/glass,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ak" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"al" = (/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"am" = (/obj/structure/table/woodentable,/obj/item/device/flashlight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"an" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ao" = (/obj/structure/mopbucket,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ap" = (/obj/structure/sink,/turf/simulated/wall/wood,/area/submap/Manor1) +"aq" = (/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1) +"ar" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/bcarpet,/area/submap/Manor1) +"as" = (/obj/structure/simple_door/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"at" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/obj/effect/decal/cleanable/blood/gibs/robot,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"au" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/obj/effect/decal/cleanable/blood/oil,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"av" = (/obj/structure/janitorialcart,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aw" = (/obj/structure/table/woodentable,/obj/item/weapon/mop,/obj/item/weapon/reagent_containers/glass/bucket,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ax" = (/obj/structure/closet/cabinet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ay" = (/obj/effect/decal/cleanable/blood/gibs/robot/limb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"az" = (/obj/structure/table/woodentable,/obj/item/trash/candle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aA" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aB" = (/obj/effect/decal/cleanable/dirt,/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aC" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/maglight,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aD" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aE" = (/obj/structure/closet/cabinet,/obj/effect/decal/cleanable/cobweb2,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aF" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aG" = (/obj/structure/table/woodentable,/obj/item/weapon/paper,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aH" = (/obj/structure/table/woodentable,/obj/item/weapon/pen,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aI" = (/obj/structure/flora/pottedplant/dead,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aJ" = (/obj/effect/spider/stickyweb,/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aK" = (/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aL" = (/obj/structure/fireplace,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aM" = (/mob/living/simple_mob/animal/giant_spider/lurker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aN" = (/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aO" = (/obj/structure/bed,/obj/item/weapon/bedsheet,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aP" = (/obj/structure/bed/chair/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aQ" = (/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) +"aR" = (/obj/structure/table/standard,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aS" = (/obj/structure/table/standard,/obj/machinery/microwave,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aT" = (/obj/structure/closet/cabinet,/obj/random/projectile/shotgun,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aU" = (/obj/structure/bookcase,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aV" = (/obj/structure/table/woodentable,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aW" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aX" = (/obj/structure/table/standard,/obj/item/weapon/material/knife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aY" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"aZ" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ba" = (/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bb" = (/obj/structure/table/standard,/obj/item/weapon/tray,/obj/item/weapon/tray,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bc" = (/obj/structure/table/standard,/obj/item/weapon/material/knife/butch,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bd" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/obj/item/weapon/reagent_containers/food/drinks/cans/waterbottle,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"be" = (/obj/random/trash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bf" = (/obj/structure/closet/cabinet,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/random/contraband,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bg" = (/obj/structure/table/woodentable,/obj/item/weapon/paper_bin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bh" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bi" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken0"},/area/submap/Manor1) +"bj" = (/obj/effect/decal/cleanable/cobweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bk" = (/obj/random/plushielarge,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bl" = (/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bm" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater/blue,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bn" = (/obj/structure/window/reinforced/full,/turf/template_noop,/area/submap/Manor1) +"bo" = (/obj/item/weapon/material/twohanded/baseballbat/metal,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bp" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bq" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"br" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken5"},/area/submap/Manor1) +"bs" = (/obj/structure/table,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bt" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 4},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bu" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 8},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bv" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/food/condiment/small/sugar,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bw" = (/obj/effect/decal/cleanable/blood/drip,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bx" = (/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"by" = (/obj/structure/closet/cabinet,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/obj/item/clothing/shoes/boots/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bz" = (/obj/structure/table/woodentable,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bA" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/fork,/obj/item/weapon/material/kitchen/utensil/fork,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bB" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/stew,/obj/item/weapon/reagent_containers/food/snacks/stew,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bC" = (/obj/item/weapon/shovel,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bD" = (/obj/structure/bed/chair/wood{icon_state = "wooden_chair"; dir = 1},/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bE" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/item/weapon/material/kitchen/utensil/spoon,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bF" = (/obj/structure/table/standard,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bG" = (/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/weapon/reagent_containers/food/snacks/sausage,/obj/item/weapon/reagent_containers/food/snacks/sausage,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bH" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/drooping,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bI" = (/obj/effect/decal/cleanable/dirt,/obj/structure/flora/pottedplant/dead,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bJ" = (/obj/structure/table/standard,/obj/item/weapon/material/kitchen/rollingpin,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bK" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bL" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/fancy/candle_box,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bM" = (/obj/machinery/papershredder,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bN" = (/obj/structure/simple_door/wood,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) +"bO" = (/obj/machinery/icecream_vat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bP" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bQ" = (/obj/effect/decal/cleanable/blood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bR" = (/obj/effect/decal/cleanable/cobweb,/obj/structure/table/woodentable,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bS" = (/obj/structure/flora/pottedplant/subterranean,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bT" = (/obj/item/weapon/material/minihoe,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"bU" = (/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) +"bV" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken6"},/area/submap/Manor1) +"bW" = (/obj/machinery/washing_machine,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bX" = (/obj/structure/table/woodentable,/obj/structure/bedsheetbin,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bY" = (/obj/structure/table/rack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"bZ" = (/obj/structure/closet/crate,/obj/item/stack/cable_coil/random_belt,/obj/random/cash,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ca" = (/obj/structure/table/woodentable,/obj/item/weapon/melee/umbrella/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cb" = (/obj/structure/closet/cabinet,/obj/random/gun/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cc" = (/obj/structure/closet/cabinet,/obj/item/weapon/cell/device/weapon,/obj/item/weapon/cell/device/weapon,/obj/random/medical,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cd" = (/obj/structure/table/woodentable,/obj/item/device/flashlight/lamp/green,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ce" = (/obj/structure/bed/double,/obj/item/weapon/bedsheet/rddouble,/obj/structure/curtain/open/bed,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cf" = (/obj/structure/table/woodentable,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cg" = (/obj/structure/flora/pottedplant/dead,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ch" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/accessory/sweater,/turf/simulated/floor/carpet/blucarpet,/area/submap/Manor1) +"ci" = (/obj/structure/closet/crate,/obj/item/weapon/flame/lighter/random,/obj/random/powercell,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cj" = (/obj/structure/closet/cabinet,/obj/item/clothing/shoes/boots/winter,/obj/item/clothing/suit/storage/hooded/wintercoat,/obj/item/clothing/head/hood/winter,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ck" = (/obj/effect/decal/cleanable/spiderling_remains,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cl" = (/turf/simulated/floor/carpet/turcarpet,/area/submap/Manor1) +"cm" = (/obj/effect/decal/cleanable/blood,/obj/structure/bed/chair/comfy/purp{icon_state = "comfychair_preview"; dir = 4},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cn" = (/obj/structure/closet/crate,/obj/item/weapon/storage/wallet/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"co" = (/obj/structure/coatrack,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cp" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/suit/storage/hooded/wintercoat,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cq" = (/obj/structure/loot_pile/surface/bones,/obj/item/clothing/under/suit_jacket,/obj/item/clothing/shoes/black,/obj/random/projectile/random,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cr" = (/obj/structure/simple_door/wood,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/carpet/purcarpet,/area/submap/Manor1) +"cs" = (/obj/item/weapon/material/twohanded/spear,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"ct" = (/obj/structure/closet/cabinet{opened = 1},/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cu" = (/obj/effect/decal/remains,/obj/item/weapon/material/knife/tacknife/combatknife,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cv" = (/obj/structure/sink{pixel_y = 30},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cw" = (/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cx" = (/obj/structure/table/standard,/obj/effect/decal/cleanable/cobweb2,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cy" = (/obj/structure/table/standard,/obj/item/weapon/towel/random,/obj/item/weapon/towel/random,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cz" = (/obj/effect/decal/cleanable/cobweb2,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cA" = (/obj/item/weapon/paper/crumpled,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cB" = (/turf/simulated/floor/holofloor/wood{icon_state = "wood_broken3"},/area/submap/Manor1) +"cC" = (/obj/effect/decal/cleanable/spiderling_remains,/obj/effect/spider/stickyweb,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cD" = (/obj/structure/closet/crate,/obj/item/clothing/suit/armor/vest,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cE" = (/obj/structure/closet/crate,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cF" = (/obj/structure/simple_door/wood,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cG" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 8},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cH" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cI" = (/obj/item/stack/material/wood,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cJ" = (/obj/machinery/shower{icon_state = "shower"; dir = 8},/obj/structure/curtain/open/shower,/obj/random/soap,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cK" = (/obj/structure/table/standard,/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cL" = (/obj/structure/toilet{icon_state = "toilet00"; dir = 1},/turf/simulated/floor/tiled/hydro,/area/submap/Manor1) +"cM" = (/obj/structure/table/woodentable,/obj/item/modular_computer/laptop/preset/custom_loadout/cheap,/turf/simulated/floor/holofloor/wood,/area/submap/Manor1) +"cN" = (/turf/template_noop,/area/template_noop) +"cO" = (/obj/structure/flora/tree/sif,/turf/template_noop,/area/submap/Manor1) + +(1,1,1) = {" +cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN +cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabacacacacababacacacacabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN +cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaababadaeafagahaiagadajafababaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN +cNaaaaaaaaaaaaaaaaababababababababababababagagagagagagagagagagagagababababababababababababababaaaaaaaaaaaacN +cNaaaacOaaaaaaaaabababakagagagalamalagananagagagagananananagagagagagagagagalalalagagagaiabaoapabaaaacOaaaacN +cNaaaaaaaaaaaaababalabagaqaqaqaqarararararararaqarararararararaqaqaqaqaqaqaqaqaqaqaqaqagasagagababaaaaaaaacN +cNaaaaaaaaaaababatauabagaqaqaqaqaqaqaqarararararararararararararaqaqaqaqaqaqaqaqaqaqaqagabavagawababaaaaaacN +cNaaaaaaaaaaabaxagayabagaqagagazalalaganananaAaBaAagananagagagagagagagagagalalaCagagaqagababababababaaaaaacN +cNaaaaaaaaaaababasababagaqagabababababababababababababababababababababababababababagaqagabaDagagaEabaaaaaacN +cNaaaaaacOaaabagagagasagaqagabaFaGagalaHabaIaJaKagagaLaLagagagagahabagaMagagagaNabagaqagabaOagagalabaaaaaacN +cNaaaaaaaaaaabasabababagaqagabagagagagagabaKaKaPaPagaQaQagaPaPagagabaRagaRaRagaSabagaqagabababasababaaaaaacN +cNaaaaaaaaaaabagagaTabagaqagabagaUagaUagabagadalaVafaQaQadaValafagabaRagaWaXagaYabalaqagasagagagagabaaaaaacN +cNaaaaaaaaaaabagagaMabagaqagabagaUagaUagabagadalalafaQaQadalalafagabaRagaZaRagbaabagaqagabababasababaaaaaacN +cNaaaaaaaaaaabaDalaOabagaqagabagaUagaUagabagadalalafaQaQadalalafagabbbagaRbcagbdabagaqagabaOagagalabaaaaaacN +cNaaaaaaaaaaabababababagaqagabagagagaganabagadalalafaQaQadalalafagabagagagagagagabagaqagabaDbeagbfabaaaaaacN +cNaaaaaaaaaaabaDalbgabalaqagabagaUagaUanabagadalalafaQaQadalalafagabagagagagagagabagaqagababababababaaaaaacN +cNaaaaaaaaababagbhagabazaqagasagaUagaUanabagadaGalafaQaQadalalafagabagagagagagagabagaqagabbiagagagababaaaacN +cNaaaaaaababbjagagbkabalaqagabagaUanaUanabagadalalafaQaQadalalafagabagagagagagagabagaqagabagblbmagagababaacN +cNaaaaaabnagagagagaOabagaqanabanananananabanadalalafaQaQadalalafagasagagagagagagasagaqagasagbobpbqbrbsacaacN +cNaaaaaabnagagagagalabagaranabagaUanaUagabanbtalalafaQaQadalalbuanabagagaRbvagagabagaqagabagblbwagbxbsacaacN +cNaaaaaaababagagagbyabanaranabagaUanaUagabanbtalalafaQaQadalbzbuanabagagbAaRagbBabagaqagabagblblagbCababaacN +cNaaaaaaaaababagagagabanaragabagaUanaUagabananbhbhagaQaQagbhbDananabagagbEbFagbGabagaqagabalblblagababaaaacN +cNaaaaaaaaaaabagagagabagaragabagaganagagabbHananagagaQaQaganananbIabagagbFbJagbKabagaqagabaDblblalabaaaaaacN +cNaaaaaaaaaaabagagagasagaqagabaGbLbMagaiababababababbNbNababababababbOaKaKaKagagabagaqagabalblblalabaaaaaacN +cNaaaaaaaaaaabazalagabagaqagababababasabababababalalaQaQalalabababababababababababagaqagabalbwbPalabaaaaaacN +cNaaaaaaaaaaabababababbQaqagagananananananananasagagaQaQagagasagagagagagagagagagagagaqagabazblbPalabaaaaaacN +cNaaaaaaaaababbRazbSabbqaqagagagagananananananasagagaQaQagagasagagagagagagagagagagagaqagabalblbTagababaaaacN +cNaaaaaaababagagagagabagaqagababababasabababababalagbUaQagalabababababababababababagaqagabagblblbVagababaacN +cNaaaaaaacagagagagbqasbqaqagabbWbXabagabbYagbZabalagbUbUagcaabcbccagcdcecfagagcgabagaqagasagbpchagbxbsacaacN +cNaacOaaacagagagbqagabagaqagabagagasagabagagciabcjckbUbUagcjabagclclclclclclclaDabagaqagabbqbwblagcmagacaacN +cNaaaaaaababagbQbQagabahaqagabbWazabagasagagcnababcobUbUcoababagclclclclclclclalabahaqahabagbwblagcpababaacN +cNaaaaaaaaababcqagagababasabababababagabagagagaKababcrcrababagagclclclclclclclalababasababcsblbwagababaaaacN +cNaaaaaaaaaaabctagcuabcvcwcxabcycwasagabbYagaKaKczabbUbUabazafagclclclclclclclagagagagahabagcAcBagabaaaaaacN +cNaaaaaaaaaaababalagabcwabababcwcwabagabbYcCaJcDcEabbUbUabalagagagagagclclclclclclclclagabcAbqagababaaaaaacN +cNaaaaaaaaaaaaababalabcwcFcGabcwcHabasabababababababbNbNabababababahagclclclclclclclclagabagcIababaaaaaaaacN +cNaaaaaaaaaaaaaaabababcwabababcwcHabcwcvababaaaaaaaaaaaaaaaaaaaaababalclclclclclclclclagabcIababaaaaaaaaaacN +cNaaaaaaaaaaaaaaaaababcwcFcGabcwcJabcKcLabaaaaaaaaaaaaaaaaaaaaaaaaabcMalalagagagagagagahabababaaaaaacOaaaacN +cNaaaaaacOaaaaaaaaaaabababababababababababaaaaaaaaaaaaaaaaaaaaaaaaabababababababababababababaaaaaaaaaaaaaacN +cNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacN +cNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcNcN "} \ No newline at end of file diff --git a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm index 4f41a473f8..c33096f9f7 100644 --- a/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm +++ b/maps/submaps/surface_submaps/wilderness/wilderness_areas.dm @@ -5,6 +5,7 @@ ambience = AMBIENCE_RUINS secret_name = TRUE forbid_events = TRUE + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/submap/event //To be used for Events not for regular PoIs name = "Unknown" diff --git a/maps/tether/submaps/_tether_submaps.dm b/maps/tether/submaps/_tether_submaps.dm index 107817cd1a..927cc1b9c9 100644 --- a/maps/tether/submaps/_tether_submaps.dm +++ b/maps/tether/submaps/_tether_submaps.dm @@ -461,18 +461,28 @@ var/turf/T = get_turf(src) var/datum/gas_mixture/env = T.return_air() if(env) - my_mob.minbodytemp = env.temperature * 0.8 - my_mob.maxbodytemp = env.temperature * 1.2 + if(my_mob.minbodytemp > env.temperature) + my_mob.minbodytemp = env.temperature * 0.8 + if(my_mob.maxbodytemp < env.temperature) + my_mob.maxbodytemp = env.temperature * 1.2 var/list/gaslist = env.gas - my_mob.min_oxy = gaslist["oxygen"] * 0.8 - my_mob.min_tox = gaslist["phoron"] * 0.8 - my_mob.min_n2 = gaslist["nitrogen"] * 0.8 - my_mob.min_co2 = gaslist["carbon_dioxide"] * 0.8 - my_mob.max_oxy = gaslist["oxygen"] * 1.2 - my_mob.max_tox = gaslist["phoron"] * 1.2 - my_mob.max_n2 = gaslist["nitrogen"] * 1.2 - my_mob.max_co2 = gaslist["carbon_dioxide"] * 1.2 + if(my_mob.min_oxy) + my_mob.min_oxy = gaslist["oxygen"] * 0.8 + if(my_mob.min_tox) + my_mob.min_tox = gaslist["phoron"] * 0.8 + if(my_mob.min_n2) + my_mob.min_n2 = gaslist["nitrogen"] * 0.8 + if(my_mob.min_co2) + my_mob.min_co2 = gaslist["carbon_dioxide"] * 0.8 + if(my_mob.max_oxy) + my_mob.max_oxy = gaslist["oxygen"] * 1.2 + if(my_mob.max_tox) + my_mob.max_tox = gaslist["phoron"] * 1.2 + if(my_mob.max_n2) + my_mob.max_n2 = gaslist["nitrogen"] * 1.2 + if(my_mob.max_co2) + my_mob.max_co2 = gaslist["carbon_dioxide"] * 1.2 /* //VORESTATION AI TEMPORARY REMOVAL if(guard) my_mob.returns_home = TRUE diff --git a/maps/tether/submaps/admin_use/dhael_centcom.dmm b/maps/tether/submaps/admin_use/dhael_centcom.dmm index 195605f7c4..44cfa83aa7 100644 --- a/maps/tether/submaps/admin_use/dhael_centcom.dmm +++ b/maps/tether/submaps/admin_use/dhael_centcom.dmm @@ -3607,7 +3607,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/cereal, +/obj/machinery/appliance/mixer/cereal, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -3635,7 +3635,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/machinery/camera/network/crescent{ dir = 10 }, @@ -3647,7 +3647,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -3656,7 +3656,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -14562,7 +14562,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/cereal, +/obj/machinery/appliance/mixer/cereal, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -14571,7 +14571,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -14580,7 +14580,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/unsimulated/floor/steel{ icon_state = "white" }, @@ -14589,7 +14589,7 @@ /obj/effect/floor_decal/corner/grey/diagonal{ dir = 4 }, -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /turf/unsimulated/floor/steel{ icon_state = "white" }, diff --git a/maps/tether/submaps/aerostat/submaps/Manor1.dmm b/maps/tether/submaps/aerostat/submaps/Manor1.dmm index b981549289..2401898eb8 100644 --- a/maps/tether/submaps/aerostat/submaps/Manor1.dmm +++ b/maps/tether/submaps/aerostat/submaps/Manor1.dmm @@ -219,7 +219,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aY" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aZ" = ( @@ -228,7 +228,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "ba" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "bb" = ( diff --git a/maps/tether/submaps/gateway/snow_outpost.dmm b/maps/tether/submaps/gateway/snow_outpost.dmm index e5964e0114..e27b2f349a 100644 --- a/maps/tether/submaps/gateway/snow_outpost.dmm +++ b/maps/tether/submaps/gateway/snow_outpost.dmm @@ -2606,20 +2606,6 @@ "iN" = ( /turf/simulated/floor/water/deep, /area/awaymission/snow_outpost/dark) -"iP" = ( -/obj/machinery/atmospherics/unary/vent_pump, -/obj/item/weapon/cell/slime, -/turf/simulated/floor/tiled/white, -/area/awaymission/snow_outpost/powered) -"iQ" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/cyan{ - dir = 5; - icon_state = "intact" - }, -/obj/item/weapon/cell/infinite, -/obj/item/weapon/cat_box, -/turf/simulated/floor/tiled/white, -/area/awaymission/snow_outpost/powered) "iR" = ( /obj/machinery/atmospherics/unary/vent_pump{ dir = 8; @@ -9181,8 +9167,8 @@ uy uy aO as -iP -iQ +by +aA aS yM bH diff --git a/maps/tether/submaps/offmap/talon.dm b/maps/tether/submaps/offmap/talon.dm index c530e24b08..722cd150a5 100644 --- a/maps/tether/submaps/offmap/talon.dm +++ b/maps/tether/submaps/offmap/talon.dm @@ -386,7 +386,7 @@ Once in open space, consider disabling nonessential power-consuming electronics filedesc = "Helmet Camera Monitoring (Talon)" extended_desc = "This program allows remote access to Talon helmet camera systems." size = 4 //Smaller because limited scope - nanomodule_path = /datum/nano_module/camera_monitor/talon_helmet + tguimodule_path = /datum/tgui_module/camera/ntos/talon_helmet required_access = access_talon // Talon ship cameras @@ -395,23 +395,18 @@ Once in open space, consider disabling nonessential power-consuming electronics filedesc = "Ship Camera Monitoring (Talon)" extended_desc = "This program allows remote access to the Talon's camera system." size = 10 //Smaller because limited scope - nanomodule_path = /datum/nano_module/camera_monitor/talon_ship + tguimodule_path = /datum/tgui_module/camera/ntos/talon_ship required_access = access_talon -/datum/nano_module/camera_monitor/talon_ship +/datum/tgui_module/camera/ntos/talon_ship name = "Talon Ship Camera Monitor" -/datum/nano_module/camera_monitor/talon_ship/modify_networks_list(var/list/networks) - networks.Cut() - networks.Add(list(list("tag" = NETWORK_TALON_SHIP, "has_access" = 1))) - networks.Add(list(list("tag" = NETWORK_THUNDER, "has_access" = 1))) //THUNDERRRRR - return networks +/datum/nano_module/camera_monitor/talon_ship/New(host) + . = ..(host, list(NETWORK_TALON_SHIP, NETWORK_THUNDER)) -/datum/nano_module/camera_monitor/talon_helmet +/datum/tgui_module/camera/ntos/talon_helmet name = "Talon Helmet Camera Monitor" -/datum/nano_module/camera_monitor/talon_helmet/modify_networks_list(var/list/networks) - networks.Cut() - networks.Add(list(list("tag" = NETWORK_TALON_HELMETS, "has_access" = 1))) - return networks +/datum/tgui_module/camera/ntos/talon_helmet/New(host) + . = ..(host, list(NETWORK_TALON_HELMETS)) /datum/computer_file/program/power_monitor/talon filename = "tpowermonitor" diff --git a/maps/tether/submaps/om_ships/aro.dmm b/maps/tether/submaps/om_ships/aro.dmm index 5322661bb8..4dce075b15 100644 --- a/maps/tether/submaps/om_ships/aro.dmm +++ b/maps/tether/submaps/om_ships/aro.dmm @@ -616,12 +616,12 @@ /turf/simulated/floor/tiled/white, /area/ship/aro/recreation) "bp" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/effect/floor_decal/borderfloorwhite/corner2, /turf/simulated/floor/tiled/white, /area/ship/aro/recreation) "bq" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /obj/effect/floor_decal/borderfloorwhite, /turf/simulated/floor/tiled/white, /area/ship/aro/recreation) diff --git a/maps/tether/submaps/om_ships/cruiser.dmm b/maps/tether/submaps/om_ships/cruiser.dmm index 719b3501b1..842da3a6d3 100644 --- a/maps/tether/submaps/om_ships/cruiser.dmm +++ b/maps/tether/submaps/om_ships/cruiser.dmm @@ -1017,14 +1017,14 @@ /turf/simulated/floor/tiled/white, /area/mothership/kitchen) "cl" = ( -/obj/machinery/cooker/cereal, +/obj/machinery/appliance/mixer/cereal, /obj/effect/floor_decal/industrial/warning/dust{ dir = 9 }, /turf/simulated/floor/tiled/white, /area/mothership/kitchen) "cm" = ( -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /obj/structure/table/steel_reinforced, /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 @@ -1032,7 +1032,7 @@ /turf/simulated/floor/tiled/white, /area/mothership/kitchen) "cn" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/structure/table/steel_reinforced, /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 @@ -1040,7 +1040,7 @@ /turf/simulated/floor/tiled/white, /area/mothership/kitchen) "co" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /obj/structure/table/steel_reinforced, /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 @@ -1049,7 +1049,7 @@ /turf/simulated/floor/tiled/white, /area/mothership/kitchen) "cp" = ( -/obj/machinery/cooker/candy, +/obj/machinery/appliance/mixer/candy, /obj/effect/floor_decal/industrial/warning/dust{ dir = 1 }, diff --git a/maps/tether/submaps/om_ships/mercenarybase.dmm b/maps/tether/submaps/om_ships/mercenarybase.dmm index 95238c7b19..42b6a45289 100644 --- a/maps/tether/submaps/om_ships/mercenarybase.dmm +++ b/maps/tether/submaps/om_ships/mercenarybase.dmm @@ -3272,15 +3272,15 @@ /turf/simulated/floor/tiled/dark, /area/mercbase/roid) "nm" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/tiled/dark, /area/mercbase/roid) "nn" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/tiled/dark, /area/mercbase/roid) "no" = ( -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /turf/simulated/floor/tiled/dark, /area/mercbase/roid) "np" = ( diff --git a/maps/tether/submaps/space/guttersite.dmm b/maps/tether/submaps/space/guttersite.dmm index e9e6bded61..190e8f02f2 100644 --- a/maps/tether/submaps/space/guttersite.dmm +++ b/maps/tether/submaps/space/guttersite.dmm @@ -5047,10 +5047,6 @@ /obj/structure/bonfire, /turf/simulated/mineral/floor/vacuum, /area/space) -"lP" = ( -/obj/item/weapon/card/emag, -/turf/simulated/mineral/floor/vacuum, -/area/space) "lQ" = ( /obj/item/weapon/card/emag_broken, /turf/simulated/mineral/floor/vacuum, @@ -5477,13 +5473,6 @@ "mU" = ( /turf/simulated/floor/carpet/gaycarpet, /area/tether_away/guttersite/unexplored) -"mV" = ( -/obj/item/device/radio/headset/nanotrasen/alt{ - desc = "The headset of an Eltorro employee."; - name = "Weird Headset" - }, -/turf/simulated/floor/carpet/gaycarpet, -/area/tether_away/guttersite/unexplored) "mW" = ( /obj/item/weapon/reagent_containers/food/drinks/cans/cola, /turf/simulated/floor/carpet/gaycarpet, @@ -5508,10 +5497,6 @@ /obj/machinery/floodlight, /turf/simulated/mineral/floor/vacuum, /area/tether_away/guttersite/unexplored) -"nc" = ( -/obj/effect/landmark/corpse/syndicatecommando, -/turf/simulated/mineral/floor/vacuum, -/area/tether_away/guttersite/unexplored) "nd" = ( /obj/effect/landmark/corpse/syndicatesoldier, /turf/simulated/mineral/floor/vacuum, @@ -5771,6 +5756,10 @@ /obj/effect/shuttle_landmark/premade/guttersite/mshuttle, /turf/space, /area/space) +"Bh" = ( +/obj/item/device/radio/headset/heads/captain, +/turf/simulated/floor/carpet/gaycarpet, +/area/tether_away/guttersite/unexplored) "Ob" = ( /obj/structure/cable/cyan{ d1 = 1; @@ -13794,7 +13783,7 @@ ab ab lU ab -lP +ab ab ab ac @@ -23489,7 +23478,7 @@ ag ad ad ad -nc +ad ad ad ag @@ -24558,7 +24547,7 @@ ag ad mU na -mU +Bh mU mU ad @@ -24699,7 +24688,7 @@ aa ag ad mU -mV +mU mY mU mU diff --git a/maps/tether/tether-01-surface1.dmm b/maps/tether/tether-01-surface1.dmm index 0a07eadd29..cc593b578c 100644 --- a/maps/tether/tether-01-surface1.dmm +++ b/maps/tether/tether-01-surface1.dmm @@ -814,6 +814,13 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) +"abm" = ( +/turf/simulated/wall, +/area/rnd/hardstorage) +"abn" = ( +/obj/structure/table/rack/steel, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "abo" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -893,6 +900,13 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) +"abv" = ( +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) +"abw" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "abx" = ( /obj/effect/floor_decal/industrial/loading{ dir = 8 @@ -960,18 +974,11 @@ /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) "abD" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/light/small{ dir = 1 }, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -22 - }, /turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) +/area/rnd/hardstorage) "abE" = ( /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, @@ -1028,6 +1035,10 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) +"abI" = ( +/obj/structure/closet/crate/plastic, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "abJ" = ( /obj/structure/catwalk, /obj/structure/cable{ @@ -1063,6 +1074,9 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/trash_pit) +"abN" = ( +/turf/simulated/wall/r_wall, +/area/rnd/testingroom) "abO" = ( /obj/machinery/door/airlock/maintenance/common{ name = "Trash Pit Access"; @@ -1137,6 +1151,13 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/cargo/mining) +"abW" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ + name = "Research Testing Scrubber"; + use_power = 2 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "abX" = ( /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, @@ -1159,6 +1180,9 @@ }, /turf/simulated/floor/tiled/steel_dirty, /area/tether/surfacebase/cargo/warehouse) +"acb" = ( +/turf/simulated/mineral, +/area/rnd/testingroom) "acc" = ( /turf/simulated/wall, /area/tether/surfacebase/cargo/warehouse) @@ -1279,6 +1303,19 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/maintenance/lower/research) +"acp" = ( +/obj/structure/grille, +/obj/structure/railing, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "suckysucky"; + name = "Scrubber Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "acq" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -1314,6 +1351,32 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled, /area/crew_quarters/visitor_dining) +"acu" = ( +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) "acv" = ( /obj/machinery/atmospherics/pipe/simple/visible/red{ dir = 6 @@ -1333,6 +1396,13 @@ /obj/machinery/vending/loadout/clothing, /turf/simulated/floor/tiled, /area/crew_quarters/visitor_laundry) +"acx" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/camera/network/research{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "acy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ @@ -1403,6 +1473,10 @@ /obj/random/maintenance/clean, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"acD" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "acE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -1854,17 +1928,8 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/cargo) "adn" = ( -/obj/effect/floor_decal/industrial/warning{ - dir = 8; - icon_state = "warning" - }, -/obj/machinery/computer/area_atmos/tag{ - dir = 4; - scrub_id = "rnd_can_store" - }, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora_storage) +/turf/simulated/wall/r_wall, +/area/rnd/tankstorage) "ado" = ( /obj/machinery/atmospherics/pipe/simple/visible/universal, /turf/simulated/floor/plating, @@ -1977,6 +2042,14 @@ /obj/machinery/portable_atmospherics/powered/pump/filled, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"adz" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "adA" = ( /obj/structure/disposaloutlet{ dir = 8 @@ -2146,6 +2219,26 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) +"adM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) +"adN" = ( +/obj/machinery/power/apc/high{ + dir = 4; + pixel_x = 28; + pixel_y = 0 + }, +/obj/structure/cable/green{ + d2 = 8; + icon_state = "0-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "adO" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2901,6 +2994,9 @@ dir = 8 }, /area/tether/surfacebase/surface_one_hall) +"aeR" = ( +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "aeS" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -3074,6 +3170,12 @@ "afd" = ( /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"afe" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "aff" = ( /obj/machinery/door/firedoor/glass, /obj/effect/floor_decal/steeldecal/steel_decals_central1{ @@ -3083,6 +3185,13 @@ dir = 4 }, /area/tether/surfacebase/cargo) +"afg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "afh" = ( /obj/effect/floor_decal/spline/plain{ dir = 4 @@ -3274,6 +3383,15 @@ /obj/machinery/lapvend, /turf/simulated/floor/tiled, /area/storage/primary) +"afu" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "afv" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/tiled, @@ -3339,6 +3457,15 @@ /obj/machinery/camera/network/tether, /turf/simulated/floor/tiled, /area/hallway/lower/first_west) +"afA" = ( +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "afB" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -3523,6 +3650,24 @@ /obj/effect/floor_decal/industrial/loading, /turf/simulated/floor/tiled, /area/tether/surfacebase/cargo) +"afP" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "afQ" = ( /obj/structure/disposalpipe/segment{ dir = 1; @@ -3575,6 +3720,18 @@ "afT" = ( /turf/simulated/floor/tiled, /area/storage/primary) +"afU" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "afV" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, @@ -3583,6 +3740,23 @@ /obj/structure/table/standard, /turf/simulated/floor/tiled, /area/storage/primary) +"afX" = ( +/obj/machinery/door/airlock/maintenance/rnd{ + name = "Research Maintenance Access"; + req_access = list(55) + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/hardstorage) "afY" = ( /obj/machinery/camera/network/civilian, /turf/simulated/floor/tiled, @@ -3684,6 +3858,27 @@ /obj/machinery/portable_atmospherics/canister/oxygen, /turf/simulated/floor/tiled, /area/rnd/xenoarch_storage) +"agl" = ( +/obj/machinery/atmospherics/unary/outlet_injector, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) +"agm" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) +"agn" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "ago" = ( /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 4 @@ -3713,6 +3908,14 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/cargo) +"agr" = ( +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) "ags" = ( /obj/machinery/light{ dir = 4 @@ -3753,6 +3956,24 @@ }, /turf/simulated/floor/tiled, /area/rnd/xenoarch_storage) +"agx" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"agy" = ( +/obj/structure/catwalk, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/obj/effect/floor_decal/rust, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) "agz" = ( /obj/structure/reagent_dispensers/watertank, /turf/simulated/floor/tiled, @@ -3787,6 +4008,45 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/rnd/xenoarch_storage) +"agD" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/apc; + dir = 8; + name = "west bump"; + pixel_x = -28 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"agE" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/airlock/research{ + id_tag = "researchdoor"; + name = "Research Hard Storage"; + req_access = list(47) + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/hardstorage) +"agF" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) +"agG" = ( +/obj/structure/disposaloutlet{ + dir = 1; + icon_state = "outlet" + }, +/obj/structure/disposalpipe/trunk, +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "agH" = ( /obj/structure/catwalk, /obj/effect/decal/cleanable/dirt, @@ -3831,6 +4091,11 @@ "agM" = ( /turf/simulated/wall, /area/tether/surfacebase/surface_one_hall) +"agN" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "agO" = ( /obj/structure/table/glass, /obj/machinery/status_display{ @@ -3847,6 +4112,23 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"agP" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "gogogo"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "agQ" = ( /obj/structure/railing{ dir = 8 @@ -3962,12 +4244,97 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"aha" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "gogogo"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"ahb" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "gogogo"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahc" = ( /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "atrium" }, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_one_hall) +"ahd" = ( +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "shuttle blast"; + name = "Shuttle Blast Doors"; + opacity = 0 + }, +/obj/machinery/door/window/northleft{ + req_access = list(47) + }, +/obj/machinery/door/window/southleft{ + req_access = list(47) + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "gogogo"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"ahe" = ( +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/obj/machinery/door/blast/regular{ + density = 0; + dir = 4; + icon_state = "pdoor0"; + id = "gogogo"; + name = "Blast Door"; + opacity = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahf" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -4034,6 +4401,18 @@ "ahl" = ( /turf/simulated/wall, /area/hallway/lower/first_west) +"ahm" = ( +/obj/machinery/atmospherics/pipe/simple/visible/red{ + dir = 5; + icon_state = "intact" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahn" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -4110,9 +4489,32 @@ /obj/structure/railing, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_one_hall) +"ahv" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/machinery/atmospherics/portables_connector, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"ahw" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahx" = ( /turf/simulated/wall, /area/tether/surfacebase/emergency_storage/atrium) +"ahy" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahz" = ( /obj/structure/railing{ dir = 8 @@ -4161,6 +4563,13 @@ }, /turf/simulated/floor/plating, /area/storage/surface_eva) +"ahF" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahG" = ( /obj/effect/floor_decal/borderfloor{ dir = 9 @@ -4405,6 +4814,13 @@ "ahX" = ( /turf/simulated/wall, /area/tether/surfacebase/north_stairs_one) +"ahY" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ahZ" = ( /obj/structure/sign/directions/cargo{ dir = 4 @@ -4519,6 +4935,22 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) +"aih" = ( +/obj/machinery/button/remote/blast_door{ + id = "gogogo"; + name = "Test Chamber Blast Seal Control"; + pixel_y = 32 + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aii" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -4545,6 +4977,42 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"aik" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/item/weapon/storage/toolbox/electrical, +/obj/item/weapon/storage/toolbox/mechanical, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"ail" = ( +/obj/structure/table/steel_reinforced, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/prox_sensor, +/obj/item/device/assembly/signaler, +/obj/item/device/assembly/timer, +/obj/item/device/assembly/voice, +/obj/item/device/radio/electropack, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aim" = ( +/obj/machinery/button/remote/blast_door{ + id = "suckysucky"; + name = "Scrubber Blast Door-Controller"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ain" = ( /obj/machinery/chem_master{ dir = 8 @@ -4561,6 +5029,13 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"aio" = ( +/obj/machinery/camera/network/research{ + dir = 5; + icon_state = "camera" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aip" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/beakers, @@ -4577,6 +5052,17 @@ /obj/item/weapon/storage/fancy/vials, /turf/simulated/floor/tiled/white, /area/rnd/chemistry_lab) +"aiq" = ( +/obj/machinery/atmospherics/binary/pump{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "air" = ( /obj/structure/closet/firecloset, /turf/simulated/floor/plating, @@ -4593,6 +5079,49 @@ /obj/effect/floor_decal/industrial/outline/blue, /turf/simulated/floor/tiled/techfloor, /area/tether/surfacebase/emergency_storage/atrium) +"aiu" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aiv" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aiw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden{ + dir = 9; + icon_state = "intact" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aix" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/alarm{ + alarm_id = "pen_nine"; + breach_detection = 0; + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aiy" = ( /turf/simulated/wall, /area/storage/surface_eva/external) @@ -4611,6 +5140,17 @@ /obj/machinery/light/small, /turf/simulated/floor/plating, /area/storage/surface_eva) +"aiB" = ( +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aiC" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) "aiD" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -4630,6 +5170,19 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/hallway/lower/first_west) +"aiF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"aiG" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/assembly/infra, +/obj/item/device/assembly/igniter, +/obj/item/device/assembly/igniter, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aiH" = ( /obj/structure/bed/chair/office/light{ dir = 4 @@ -4736,18 +5289,20 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/monofloor, /area/tether/surfacebase/north_stairs_one) +"aiQ" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/machinery/computer/area_atmos/tag, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aiR" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_y = 25 +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ + name = "Research Testing Scrubber"; + use_power = 1 }, /turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) +/area/rnd/testingroom) "aiS" = ( /obj/machinery/alarm{ pixel_y = 22 @@ -4780,16 +5335,16 @@ /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) "aiU" = ( -/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /obj/structure/disposalpipe/segment{ dir = 4 }, -/obj/machinery/door/airlock/glass_research{ - name = "Xenoflora Research"; - req_access = list(55) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/xenobiology/xenoflora) +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "aiV" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -4807,13 +5362,8 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/north_stairs_one) "aiW" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass_research{ - name = "Xenoflora Research"; - req_access = list(55) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/xenobiology/xenoflora) +/turf/simulated/mineral, +/area/engineering/engine_room) "aiX" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/disposalpipe/segment{ @@ -4891,37 +5441,60 @@ dir = 1 }, /area/tether/surfacebase/surface_one_hall) -"ajc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/glass, +"ajd" = ( /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/obj/machinery/door/airlock/glass_research{ - name = "Xenoflora Research"; - req_access = list(55) +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/xenobiology/xenoflora) -"ajd" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"aje" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 }, /obj/effect/floor_decal/corner/mauve/border{ dir = 1 }, -/obj/item/device/radio/intercom{ - dir = 1; - pixel_y = 24; - req_access = list() +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/structure/table/glass, -/obj/machinery/chemical_dispenser/xenoflora/full, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/disposalpipe/junction{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) +/area/rnd/hallway) "ajf" = ( /obj/structure/cable/cyan{ d1 = 1; @@ -4955,6 +5528,13 @@ }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/engineering/atmos_intake) +"aji" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "ajj" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -4976,6 +5556,16 @@ }, /turf/simulated/floor/tiled, /area/engineering/atmos) +"ajm" = ( +/obj/machinery/vending/tool{ + dir = 1; + icon_state = "tool" + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "ajn" = ( /obj/machinery/atmospherics/pipe/simple/visible/green{ dir = 4 @@ -5242,15 +5832,24 @@ /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) "ajJ" = ( -/obj/machinery/atmospherics/portables_connector{ +/obj/effect/floor_decal/borderfloor{ dir = 1 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/obj/machinery/light, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, /obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) +/area/rnd/hallway) "ajK" = ( /mob/living/simple_mob/animal/passive/gaslamp, /turf/simulated/floor/outdoors/grass/sif/virgo3b, @@ -5349,6 +5948,46 @@ }, /turf/simulated/floor/plating, /area/holodeck_control) +"ajW" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/machinery/camera/network/research, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"ajX" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) "ajY" = ( /turf/simulated/floor/plating, /area/tether/surfacebase/public_garden_one) @@ -5359,10 +5998,118 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/public_garden_maintenence) +"aka" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/machinery/newscaster{ + pixel_x = 0; + pixel_y = 30 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) "akb" = ( /obj/structure/grille, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/public_garden_one) +"akc" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"akd" = ( +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"ake" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"akf" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) +"akg" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) "akh" = ( /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "atrium" @@ -5375,6 +6122,28 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/public_garden_maintenence) +"akj" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/closet/hydrant{ + pixel_x = -32 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/hallway) "akk" = ( /obj/structure/grille, /obj/structure/railing, @@ -5403,6 +6172,15 @@ /obj/random/drinkbottle, /turf/simulated/floor/plating, /area/maintenance/lower/public_garden_maintenence) +"akp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "akq" = ( /obj/effect/floor_decal/techfloor{ dir = 9 @@ -5717,6 +6495,11 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_one) +"alb" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) "alc" = ( /obj/machinery/door/firedoor/glass, /obj/effect/floor_decal/steeldecal/steel_decals_central1{ @@ -6021,6 +6804,28 @@ }, /turf/simulated/floor/tiled/techfloor, /area/tether/surfacebase/public_garden) +"alt" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alu" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alv" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) "alw" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -6116,6 +6921,135 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden) +"alC" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alD" = ( +/obj/structure/catwalk, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alE" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/effect/decal/cleanable/dirt, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alF" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alG" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alH" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) +"alJ" = ( +/obj/structure/catwalk, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alK" = ( +/obj/structure/catwalk, +/obj/structure/cable{ + icon_state = "1-2" + }, +/obj/structure/disposalpipe/junction, +/obj/random/junk, +/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/visible/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techfloor, +/area/maintenance/lower/xenoflora) +"alL" = ( +/obj/structure/table/steel_reinforced, +/obj/item/device/radio, +/obj/item/device/radio, +/turf/simulated/floor/tiled, +/area/rnd/testingroom) "alM" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -6198,6 +7132,54 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden) +"alS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/rnd/testingroom) +"alT" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/research{ + id_tag = "researchdoor"; + name = "Testing Room"; + req_access = list(47) + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/testingroom) +"alU" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/plating, +/area/rnd/testingroom) +"alV" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/door/airlock/research{ + name = "Toxins Storage"; + req_access = list(8) + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/tankstorage) +"alW" = ( +/obj/structure/sign/warning/caution, +/turf/simulated/wall/r_wall, +/area/rnd/tankstorage) "alX" = ( /obj/structure/railing{ dir = 8 @@ -6219,9 +7201,64 @@ /obj/random/junk, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"alY" = ( +/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ + scrub_id = "rnd_can_store" + }, +/turf/simulated/floor/tiled/techmaint, +/area/rnd/tankstorage) +"alZ" = ( +/obj/structure/grille, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/rnd/tankstorage) +"ama" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/machinery/computer/area_atmos/tag{ + dir = 4; + scrub_id = "rnd_can_store" + }, +/obj/machinery/camera/network/research, +/turf/simulated/floor/tiled, +/area/rnd/tankstorage) +"amb" = ( +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/tankstorage) "amc" = ( /turf/simulated/wall, /area/tether/surfacebase/cargo/office) +"amd" = ( +/obj/structure/sign/warning/nosmoking_2, +/turf/simulated/wall/r_wall, +/area/rnd/tankstorage) "ame" = ( /obj/effect/floor_decal/techfloor{ dir = 10 @@ -6318,6 +7355,28 @@ }, /turf/simulated/floor/tiled, /area/storage/primary) +"amn" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amo" = ( +/obj/effect/floor_decal/rust, +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amp" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/obj/machinery/light_switch{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amq" = ( /obj/structure/railing{ dir = 8 @@ -6330,10 +7389,92 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"amr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 9 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"ams" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amt" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/effect/landmark{ + name = "morphspawn" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amu" = ( +/obj/effect/floor_decal/rust, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/machinery/firealarm{ + dir = 4; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amv" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 8; + name = "west bump"; + pixel_x = -30 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amw" = ( /obj/structure/sign/department/cargo, /turf/simulated/wall, /area/tether/surfacebase/cargo/office) +"amx" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amy" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/warning/dust/corner, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amz" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amA" = ( /obj/effect/floor_decal/techfloor{ dir = 10 @@ -6433,6 +7574,35 @@ }, /turf/simulated/floor/tiled, /area/storage/primary) +"amI" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amJ" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/machinery/camera/network/research{ + dir = 4 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amK" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amL" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amM" = ( /obj/structure/railing{ dir = 8 @@ -6444,6 +7614,14 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/mining_eva) +"amN" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) +"amO" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amP" = ( /obj/machinery/camera/network/cargo, /turf/simulated/floor/tiled, @@ -6456,6 +7634,10 @@ /obj/random/junk, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) +"amR" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amS" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -6522,6 +7704,16 @@ }, /turf/simulated/floor/tiled, /area/storage/primary) +"amW" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 8 + }, +/obj/machinery/light/small, +/turf/simulated/floor/tiled/steel_dirty, +/area/rnd/tankstorage) "amX" = ( /obj/machinery/power/apc{ cell_type = /obj/item/weapon/cell/super; @@ -6635,6 +7827,19 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) +"and" = ( +/obj/structure/grille, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/rnd/tankstorage) +"ane" = ( +/obj/machinery/light{ + dir = 4 + }, +/turf/simulated/floor/reinforced, +/area/rnd/testingroom) "anf" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/rust, @@ -10079,16 +11284,6 @@ /obj/item/weapon/pickaxe, /turf/simulated/floor/plating, /area/vacant/vacant_site) -"atd" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/universal, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "ate" = ( /obj/structure/railing{ dir = 1 @@ -10376,16 +11571,6 @@ "atH" = ( /turf/simulated/wall, /area/maintenance/substation/civ_west) -"atJ" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/binary/passive_gate{ - dir = 1 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "atK" = ( /obj/machinery/light/small{ dir = 4; @@ -10664,22 +11849,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) -"auq" = ( -/obj/structure/railing{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/yellow, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) -"aur" = ( -/obj/machinery/atmospherics/pipe/tank/phoron{ - dir = 8; - icon_state = "phoron_map"; - name = "Xenoflora Waste Buffer"; - start_pressure = 0 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "aus" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -11703,9 +12872,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lower/solars) -"avQ" = ( -/turf/simulated/wall, -/area/rnd/xenobiology/xenoflora/lab_atmos) "avT" = ( /turf/simulated/wall/r_wall, /area/maintenance/lower/xenoflora) @@ -12019,97 +13185,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lower/solars) -"awu" = ( -/obj/machinery/atmospherics/unary/freezer{ - dir = 2; - icon_state = "freezer" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awv" = ( -/obj/machinery/atmospherics/unary/heater{ - dir = 2; - icon_state = "heater" - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aww" = ( -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 1 - }, -/obj/machinery/camera/network/research, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awx" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 22 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awy" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awz" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 1 - }, -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awA" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/machinery/atmospherics/portables_connector, -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) "awD" = ( /obj/machinery/atmospherics/pipe/zpipe/up/scrubbers, /obj/machinery/atmospherics/pipe/zpipe/up/supply, @@ -12304,51 +13379,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lower/solars) -"awV" = ( -/turf/simulated/wall, -/area/rnd/xenobiology/xenoflora) -"awW" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awX" = ( -/obj/machinery/atmospherics/pipe/manifold/visible, -/obj/machinery/meter, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awY" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"awZ" = ( -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axa" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axb" = ( -/obj/machinery/atmospherics/pipe/simple/visible, -/obj/machinery/meter, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) "axe" = ( /obj/machinery/door/airlock/maintenance/engi{ name = "Elevator Maintenance" @@ -12694,132 +13724,6 @@ /obj/structure/catwalk, /turf/simulated/floor/plating, /area/maintenance/lower/solars) -"axF" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 9 - }, -/obj/machinery/camera/network/research{ - dir = 4 - }, -/obj/structure/closet/secure_closet/hydroponics/sci, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"axG" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/power/apc{ - dir = 1; - name = "north bump"; - pixel_x = 0; - pixel_y = 28 - }, -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"axH" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"axI" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 5 - }, -/obj/structure/closet/crate/hydroponics/prespawned, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"axJ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axK" = ( -/obj/structure/window/reinforced, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axL" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axM" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axN" = ( -/obj/machinery/door/window/brigdoor/southright{ - req_access = list(55); - req_one_access = list(47) - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axO" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"axP" = ( -/obj/structure/window/reinforced, -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/danger{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/machinery/status_display{ - pixel_x = 32; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) "axS" = ( /turf/simulated/floor/plating, /area/maintenance/lower/xenoflora) @@ -13062,220 +13966,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/rnd/hallway) -"ayt" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/structure/closet/secure_closet/hydroponics/sci, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"ayu" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"ayv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"ayw" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"ayx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/airlock/glass_research{ - name = "Xenoflora Research"; - req_access = list(55) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayy" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayA" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"ayE" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 - }, -/obj/structure/cable/green{ - icon_state = "0-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) "ayG" = ( /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) @@ -13636,215 +14326,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"azu" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 9 - }, -/obj/machinery/reagentgrinder, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azv" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/camera/network/research, -/obj/item/weapon/storage/box/beakers{ - pixel_x = 2; - pixel_y = 2 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azw" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/alarm{ - pixel_y = 22 - }, -/obj/machinery/chem_master, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azx" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/status_display{ - pixel_y = 30 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azy" = ( -/obj/machinery/smartfridge/drying_rack, -/obj/machinery/light{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azz" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azA" = ( -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azC" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"azD" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 6; - icon_state = "intact" - }, -/obj/machinery/meter, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azE" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Port to Isolation" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azF" = ( -/obj/machinery/atmospherics/pipe/simple/visible{ - dir = 4 - }, -/obj/machinery/meter, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azG" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azH" = ( -/obj/machinery/atmospherics/pipe/manifold/visible{ - dir = 1 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azI" = ( -/obj/machinery/atmospherics/binary/pump{ - dir = 4; - name = "Isolation to Waste" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azJ" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"azK" = ( -/obj/machinery/door/airlock/maintenance/rnd{ - name = "Xenoflora Maintenance Access"; - req_access = list(55) - }, -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora/lab_atmos) "azL" = ( /obj/machinery/door/firedoor/glass/hidden/steel{ dir = 1 @@ -14051,138 +14532,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aAz" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/item/weapon/storage/box/gloves{ - pixel_x = 4; - pixel_y = 4 - }, -/obj/item/weapon/storage/box/syringes, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAA" = ( -/obj/structure/bed/chair/office/light{ - dir = 1 - }, -/obj/effect/landmark/start{ - name = "Xenobiologist" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 4 - }, -/obj/effect/landmark/start{ - name = "Xenobiologist" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAE" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/yellow{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAF" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aAG" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 10 - }, -/obj/item/device/radio/intercom{ - dir = 2; - pixel_y = -24 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aAH" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/obj/effect/floor_decal/industrial/warning{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aAI" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/effect/floor_decal/industrial/warning{ - dir = 5 - }, -/turf/simulated/floor/tiled/white, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aAJ" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aAK" = ( -/obj/machinery/atmospherics/portables_connector{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/obj/machinery/camera/network/research{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) -"aAL" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_x = 25 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora/lab_atmos) "aAM" = ( /obj/structure/closet/crate, /obj/random/maintenance/engineering, @@ -14269,124 +14618,6 @@ /obj/machinery/door/firedoor/glass/hidden/steel, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aBx" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/rnd/hallway) -"aBy" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 10 - }, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aBz" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aBA" = ( -/obj/effect/floor_decal/corner/green/full{ - dir = 8 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aBB" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aBC" = ( -/obj/effect/floor_decal/corner/green/full{ - dir = 1 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aBD" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aBE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aBF" = ( -/obj/machinery/biogenerator, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aBG" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora/lab_atmos) "aBH" = ( /obj/effect/decal/cleanable/dirt, /obj/random/junk, @@ -14607,64 +14838,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aCg" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/junction{ - dir = 2; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) -"aCh" = ( -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aCi" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green{ - dir = 9 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aCj" = ( -/turf/simulated/floor/grass, -/area/rnd/xenobiology/xenoflora) -"aCk" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green{ - dir = 6 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aCl" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) "aCm" = ( /obj/effect/floor_decal/borderfloor{ dir = 9 @@ -14707,54 +14880,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals7, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aCp" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/camera/network/research, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/rnd/hallway) -"aCq" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/turf/simulated/floor/tiled, -/area/rnd/hallway) -"aCr" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 1 - }, -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = 30 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aCs" = ( /obj/effect/floor_decal/borderfloor{ dir = 5 @@ -15062,111 +15187,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aCW" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 6 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/rnd/hallway) -"aCX" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/rnd/xenobiology/xenoflora) -"aCY" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 8 - }, -/obj/structure/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 2 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aCZ" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/grass, -/area/rnd/xenobiology/xenoflora) -"aDa" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 5 - }, -/obj/machinery/requests_console{ - department = "Science"; - departmentType = 2; - name = "Science Requests Console"; - pixel_x = 30; - pixel_y = 0 - }, -/obj/item/weapon/storage/box/botanydisk, -/obj/structure/table/glass, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDb" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aDc" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -15368,71 +15388,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aDA" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDB" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDC" = ( -/obj/effect/floor_decal/corner/green/full, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aDD" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aDE" = ( -/obj/effect/floor_decal/corner/green/full{ - dir = 4 - }, -/turf/simulated/floor/tiled/dark, -/area/rnd/xenobiology/xenoflora) -"aDF" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDH" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aDI" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aDJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, @@ -15461,12 +15416,6 @@ /obj/structure/stairs/north, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aDM" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aDN" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -15625,104 +15574,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aEf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEh" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEi" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEk" = ( -/obj/machinery/botany/editor, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEl" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 8 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aEm" = ( /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, @@ -15747,17 +15598,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals9, /turf/simulated/floor/tiled/monotile, /area/rnd/hallway) -"aEo" = ( -/obj/structure/window/reinforced{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "aEp" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -16031,109 +15871,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aEU" = ( -/obj/machinery/seed_storage/xenobotany{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 10 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEV" = ( -/obj/machinery/vending/hydronutrients{ - categories = 3; - dir = 1 - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEW" = ( -/obj/machinery/smartfridge, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEX" = ( -/obj/structure/table/glass, -/obj/item/weapon/tape_roll, -/obj/item/device/analyzer/plant_analyzer, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEY" = ( -/obj/structure/table/glass, -/obj/item/weapon/clipboard, -/obj/item/weapon/folder/white, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aEZ" = ( -/obj/structure/table/glass, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 9 - }, -/obj/effect/floor_decal/corner/mauve/bordercorner2{ - dir = 9 - }, -/obj/machinery/light, -/obj/item/weapon/paper_bin{ - pixel_x = 1; - pixel_y = 9 - }, -/obj/item/weapon/pen, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aFa" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aFb" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/obj/effect/floor_decal/borderfloor/corner2, -/obj/effect/floor_decal/corner/mauve/bordercorner2, -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = -30 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aFc" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/mauve/border, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) -"aFd" = ( -/obj/machinery/botany/extractor, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/mauve/border{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora) "aFe" = ( /obj/effect/floor_decal/steeldecal/steel_decals5{ dir = 1 @@ -17092,28 +16829,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"aHq" = ( -/turf/simulated/wall/r_wall, -/area/rnd/xenobiology/xenoflora_storage) -"aHr" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/airlock/research{ - name = "Toxins Storage"; - req_access = list(8) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/rnd/xenobiology/xenoflora_storage) -"aHs" = ( -/obj/structure/sign/warning/caution, -/turf/simulated/wall/r_wall, -/area/rnd/xenobiology/xenoflora_storage) "aHt" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -17304,62 +17019,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"aHQ" = ( -/obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ - scrub_id = "rnd_can_store" - }, -/turf/simulated/floor/tiled/techmaint, -/area/rnd/xenobiology/xenoflora_storage) -"aHR" = ( -/obj/structure/grille, -/obj/structure/railing{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/rnd/xenobiology/xenoflora_storage) -"aHS" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/rnd/xenobiology/xenoflora_storage) -"aHT" = ( -/obj/structure/sign/warning/nosmoking_2, -/turf/simulated/wall/r_wall, -/area/rnd/xenobiology/xenoflora_storage) -"aHU" = ( -/obj/effect/floor_decal/rust, -/obj/machinery/portable_atmospherics/canister/phoron, -/obj/machinery/light/small{ - dir = 1 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aHV" = ( -/obj/effect/floor_decal/rust, -/obj/machinery/portable_atmospherics/canister/phoron, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aHW" = ( /obj/structure/cable/green{ d1 = 1; @@ -18196,64 +17855,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/asmaint2) -"aJy" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/obj/machinery/light_switch{ - pixel_y = 25 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aJz" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aJA" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aJB" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 1 - }, -/obj/effect/landmark{ - name = "morphspawn" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aJC" = ( -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 1 - }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aJD" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -18464,48 +18065,6 @@ "aKa" = ( /turf/simulated/wall, /area/maintenance/asmaint2) -"aKb" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/super; - dir = 8; - name = "west bump"; - pixel_x = -30 - }, -/obj/structure/cable/green{ - icon_state = "0-4" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKc" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKd" = ( -/obj/effect/floor_decal/industrial/warning/dust/corner{ - dir = 8 - }, -/obj/effect/floor_decal/industrial/warning/dust/corner, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKe" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKf" = ( -/obj/effect/floor_decal/industrial/warning/dust, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aKg" = ( /obj/machinery/alarm{ dir = 4; @@ -18859,30 +18418,6 @@ /obj/effect/map_helper/airlock/door/int_door, /turf/simulated/floor/tiled/steel_grid, /area/rnd/external) -"aKO" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/obj/machinery/camera/network/research{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKP" = ( -/obj/machinery/portable_atmospherics/canister/carbon_dioxide, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKQ" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aKR" = ( -/obj/machinery/portable_atmospherics/canister/sleeping_agent, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aKS" = ( /obj/random/junk, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -19154,14 +18689,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/rnd/external) -"aLt" = ( -/obj/machinery/portable_atmospherics/canister/oxygen, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) -"aLu" = ( -/obj/machinery/portable_atmospherics/canister/nitrogen, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aLv" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -19519,16 +19046,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/rnd/external) -"aMe" = ( -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/obj/machinery/light/small, -/turf/simulated/floor/tiled/steel_dirty, -/area/rnd/xenobiology/xenoflora_storage) "aMf" = ( /obj/effect/floor_decal/rust, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -19851,13 +19368,6 @@ /obj/effect/map_helper/airlock/door/ext_door, /turf/simulated/floor/tiled/steel_grid, /area/rnd/external) -"aML" = ( -/obj/structure/grille, -/obj/structure/railing{ - dir = 1 - }, -/turf/simulated/floor/tiled/techmaint, -/area/rnd/xenobiology/xenoflora_storage) "aMM" = ( /obj/effect/floor_decal/rust, /obj/structure/closet, @@ -27650,17 +27160,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/maintenance/lower/xenoflora) -"bbZ" = ( -/obj/structure/catwalk, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 10 - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "bcd" = ( /turf/simulated/mineral, /area/maintenance/lower/xenoflora) @@ -28658,30 +28157,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"cgN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/turf/simulated/floor/tiled, -/area/rnd/hallway) "cpp" = ( /obj/machinery/door/firedoor/glass, /obj/structure/disposalpipe/segment{ @@ -28923,24 +28398,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/cargo/mining) -"dZo" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/junction, -/obj/random/junk, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/visible/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 9 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "dZW" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4 @@ -29143,13 +28600,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) -"fFf" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "fGP" = ( /obj/structure/railing{ dir = 4 @@ -29160,34 +28610,10 @@ }, /turf/simulated/floor/tiled/techfloor, /area/maintenance/lower/xenoflora) -"fXu" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 6 - }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "fYi" = ( /obj/random/cutout, /turf/simulated/floor/plating, /area/construction/vacant_mining_ops) -"fZA" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "gaK" = ( /obj/machinery/door/airlock/glass{ name = "Looking Glass" @@ -29556,18 +28982,6 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/locker/laundry_arrival) -"iHP" = ( -/obj/structure/catwalk, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "jkt" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/mauve/border, @@ -30282,19 +29696,6 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/locker/laundry_arrival) -"nrX" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "nsp" = ( /obj/structure/cable/green{ d1 = 2; @@ -30359,17 +29760,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"ogk" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/obj/machinery/atmospherics/pipe/simple/visible/supply, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "ohi" = ( /obj/structure/catwalk, /turf/simulated/floor/plating, @@ -30530,22 +29920,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) -"pjp" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow{ - dir = 4 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "poN" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/catwalk, @@ -30682,21 +30056,6 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/locker/laundry_arrival) -"qYW" = ( -/obj/structure/catwalk, -/obj/machinery/alarm{ - pixel_y = 22 - }, -/obj/effect/floor_decal/rust, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "raS" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, @@ -31018,31 +30377,6 @@ /obj/machinery/door/airlock/glass, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_one_hall) -"tbB" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/manifold/visible/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/visible/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "tvk" = ( /obj/structure/cable{ d1 = 1; @@ -31269,23 +30603,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/hallway) -"uRe" = ( -/obj/structure/catwalk, -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/effect/decal/cleanable/dirt, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/visible/yellow, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "uUP" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -31564,12 +30881,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/mining_eva) -"xYK" = ( -/obj/structure/catwalk, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, -/turf/simulated/floor/tiled/techfloor, -/area/maintenance/lower/xenoflora) "ygY" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -35796,7 +35107,7 @@ aah aah aah aah -aah +aiW aah aah aah @@ -36779,9 +36090,9 @@ axB ays ays ays -aBx -aCg -aCW +acu +ake +akf aDz aEe aET @@ -36918,16 +36229,16 @@ avG ahT auK axC -awV -awV -awV -awV -aiU -aCX -aCX -aCX -awV -awV +abN +abN +abN +abN +abN +abN +abN +abN +abN +abN ygY aGX aBv @@ -37060,16 +36371,16 @@ avH awn auK avh -awV -azu -aAz -aBy -aCh -aCY -aDA -aDA -aEU -awV +abN +aeR +aeR +aji +agF +agP +aiQ +agD +aio +abN xgQ ofS aBv @@ -37202,16 +36513,16 @@ avI awo auK avh -awV -azv -aAA -azA -azA -azA -azA -azA -aEV -awV +abN +aeR +aeR +aeR +agF +agP +ahv +ahm +aiB +abN lMf aGX aBv @@ -37344,16 +36655,16 @@ acJ awp auK avh -awV -ajd -aAB -aBz -azA -azA -aDB -aEf -aEW -awV +abN +aeR +aeR +aeR +agF +agP +ahw +aiq +aiB +abN lwN icB aFI @@ -37486,16 +36797,16 @@ avJ awq auK avh -awV -azw -aAC -aBA -aCi -aCi -aDC -aEg -aEX -aCX +abN +aeR +aeR +aeR +agG +aha +ahy +aiu +aiB +alS vlJ uAA aHp @@ -37628,16 +36939,16 @@ auK auK auK axD -awV -azx -aAD -aBB -aCj -aCj -aDD -aEg -aEY -aCX +abN +aeR +aeR +aeR +agF +ahb +ahF +aih +aiv +alS cIh aGX awn @@ -37770,16 +37081,16 @@ avK awr awU axE -awV -azy -aAC -aBB -aCj -aCZ -aDD -aEg -aEZ -awV +abN +aeR +aeR +agl +agN +ahd +ahY +aiw +aix +abN ovG jkt awn @@ -37910,19 +37221,19 @@ auI avd avL aws -awV -awV -awV -aiR -aAC -aBB -aCj -aCj -aDD -aEh -aFa -ajc -cgN +abN +abN +abN +aeR +aeR +aeR +agF +ahe +ahF +aim +aiU +alT +ajd aGX awn aHP @@ -38052,23 +37363,23 @@ auJ ave avM aws -awV -axF -ayt -azz -aAC -aBC -aCk -aCk -aDE -aEi -aFb -awV +abN +abW +acp +afe +aeR +aeR +agG +aha +ahy +aiB +ajm +abN kyE aGX -aHq -aHq -aHq +adn +adn +adn aJw aKa aKL @@ -38194,23 +37505,23 @@ atH auK avN aws -awV -axG -ayu -azA -aAC -aBD -azA -azA -aDF -aEi -aFc -aCX +abN +aiR +acp +afe +aeR +aeR +agF +agP +aik +aiF +akp +alS ygY aGX -aHq -aHQ -aHq +adn +alY +adn aJx aKa aah @@ -38336,29 +37647,29 @@ auK avf avO aws -awV -axH -ayv -azB -aAE -aBE -azB -azB -aDG -aEj -aFc -aCX -ygY +abN +abN +abN +aeR +aeR +aeR +agF +agP +ahF +agx +alI +alU +aje oli -aHq -aHR -aHq -aHq -aHq -aHq -aHq -aHq -aHq +adn +alZ +adn +adn +adn +adn +adn +adn +adn aah aah aah @@ -38478,31 +37789,31 @@ auK avg avP awt -awV -axI -ayw -azC -aAF -aBF -aCl -aDa -aDH -aEk -aFd -aCX +abN +acb +abN +aeR +aeR +ane +agF +agP +ail +aiG +alL +alS ygY hps -aHq adn -aHq -aJy -aKb -aKO -aLt -aLt -aHq -aHq -aHq +ama +adn +amp +amv +amJ +amO +amO +adn +adn +adn aah aah aad @@ -38618,33 +37929,33 @@ apj apj auK avh -avQ -avQ -avQ -axJ -ayx -axJ -axJ -avQ -awV -awV -aiW -awV -aCX -aCX +abm +abm +abN +abN +abN +abN +abN +abN +abN +abN +abN +abN +alS +alS gxM tvA -aHr -aHS -aHr -aJz -aKc -aKP -aLt -aLt -aML -aHQ -aHq +alV +amb +alV +amr +amx +amK +amO +amO +and +alY +adn aah aah aah @@ -38760,33 +38071,33 @@ apj apj auK avi -avQ -awu -awW -axK -ayy -azD -aAG -avQ +abm +abn +abn +abn +acx +afg +abv +abm aCm -aDb -aDI -aEl +akg +aDy +akj aCV aCV szT jSU -aHs -aHT -aHs -aJA -aKd -aKQ -aKQ -aMe -aHq -aHq -aHq +alW +amd +alW +ams +amy +amL +amL +amW +adn +adn +adn aah aah aah @@ -38902,14 +38213,14 @@ apj apj auK avh -avQ -awv -awX -axL -ayz -azE -aAH -avQ +abm +abv +abv +abv +acD +afu +agm +abm aCn aDc aDJ @@ -38918,17 +38229,17 @@ aDJ aDJ uOe nis -aHq -aHU -aHV -aJB -aKe -aKR -aLu -aLu -aML -aHQ -aHq +adn +amn +amo +amt +amz +amN +amR +amR +and +alY +adn aah aah aah @@ -39044,14 +38355,14 @@ apj apj auK avh -avQ -aww -awY -axM -ayA -azF -aAI -axJ +abm +abw +abw +abw +abv +afA +abv +abm aCo aDd aDg @@ -39060,17 +38371,17 @@ aDg aDg aGm aGW -aHq -aHV -aHV -aJC -aKf -aKR -aLu -aLu -aHq -aHq -aHq +adn +amo +amo +amu +amI +amN +amR +amR +adn +adn +adn aah aah aah @@ -39186,15 +38497,15 @@ apj apj auK avh -avQ -awx -awZ -axN -ayB -azG +abm +abD +abv +abv +adz +afP +agn +agE ajJ -aBG -aCp aDe aDK aEn @@ -39202,15 +38513,15 @@ aDe aDe aGn aGX -aHq -aHq -aHq -aHq -aHq -aHq -aHq -aHq -aHq +adn +adn +adn +adn +adn +adn +adn +adn +adn aah aah aah @@ -39328,15 +38639,15 @@ apj apj auK avh -avQ -awy -axa -axO -ayC -azH -aAJ -axJ -aCo +abm +abw +abw +abw +adM +afU +abv +abm +ajW aDf aDL aDg @@ -39470,15 +38781,15 @@ apj apj auK avh -avQ -awz -axa -axO -ayC -azH -aAK -avQ -aCq +abm +abv +abv +abv +adM +afU +abv +abm +ajX aDf aDL aDg @@ -39612,18 +38923,18 @@ apj apj auK avh -avQ -awy -axa -axO -ayD -azI -abD -avQ -aCr -aDg -aDM -aEo +abm +abI +abI +abI +adM +afU +abv +abm +aka +aFf +akc +akd aFf aFf aGp @@ -39754,14 +39065,14 @@ apj apj auK avh -avQ -awA -axb -axP -ayE -azJ -aAL -avQ +abm +abI +abI +abI +adN +afU +agr +abm aCs aDh aDN @@ -39896,14 +39207,14 @@ apu apu apu avj -avQ -avQ -avQ -avQ -avQ -azK -avQ -avQ +abm +abm +abm +abm +abm +afX +abm +abm awn awn awn @@ -40043,7 +39354,7 @@ kCz csb imW tMP -pjp +alJ apu aBH aCt @@ -40174,18 +39485,18 @@ bco bco bcl apu -qYW -xYK -xYK -fXu -fFf -fZA -iHP -uRe -tbB -ogk -nrX -dZo +agy +alb +alb +alb +alb +alC +alD +alE +alF +alG +alH +alK acW aBI aCu @@ -40316,10 +39627,10 @@ bck bck bck bbX -bbZ -atd -atJ -auq +aiC +alt +alu +alv apu bcq avT @@ -40461,7 +39772,7 @@ apu aqb ate atK -aur +atL apu bcr avT diff --git a/maps/tether/tether-02-surface2.dmm b/maps/tether/tether-02-surface2.dmm index d12c504b26..01e3928104 100644 --- a/maps/tether/tether-02-surface2.dmm +++ b/maps/tether/tether-02-surface2.dmm @@ -1253,6 +1253,13 @@ "acF" = ( /turf/simulated/wall/r_wall, /area/rnd/rdoffice) +"acG" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/maintenance/lower/south) "acH" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -9853,12 +9860,6 @@ }, /turf/simulated/floor/wood, /area/rnd/breakroom) -"aup" = ( -/obj/structure/bed/chair/comfy{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/rnd/breakroom) "auq" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -10192,19 +10193,6 @@ /obj/structure/stairs/south, /turf/simulated/floor/tiled, /area/rnd/staircase/secondfloor) -"auW" = ( -/obj/structure/bed/chair/comfy{ - dir = 1 - }, -/obj/machinery/requests_console{ - department = "Science"; - departmentType = 2; - name = "Science Requests Console"; - pixel_x = -30; - pixel_y = 0 - }, -/turf/simulated/floor/wood, -/area/rnd/breakroom) "auX" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -12121,10 +12109,6 @@ /obj/effect/floor_decal/corner/yellow/bordercorner2, /turf/simulated/floor/tiled/monotile, /area/engineering/atmos) -"aya" = ( -/obj/structure/bed/chair/comfy, -/turf/simulated/floor/wood, -/area/rnd/breakroom) "ayb" = ( /obj/machinery/light_switch{ pixel_y = -28 @@ -28393,6 +28377,10 @@ }, /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_two_hall) +"dgA" = ( +/obj/structure/bed/chair/comfy/brown, +/turf/simulated/floor/wood, +/area/rnd/breakroom) "drH" = ( /obj/structure/cable{ d1 = 4; @@ -28412,6 +28400,12 @@ /obj/structure/railing, /turf/simulated/floor/plating, /area/maintenance/lower/rnd) +"dEl" = ( +/obj/structure/bed/chair/comfy/brown{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/rnd/breakroom) "dQd" = ( /obj/structure/catwalk, /obj/machinery/atmospherics/pipe/simple/visible/supply{ @@ -29193,6 +29187,19 @@ /obj/structure/disposalpipe/up, /turf/simulated/floor/plating, /area/maintenance/lower/rnd) +"qXI" = ( +/obj/machinery/requests_console{ + department = "Science"; + departmentType = 2; + name = "Science Requests Console"; + pixel_x = -30; + pixel_y = 0 + }, +/obj/structure/bed/chair/comfy/brown{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/rnd/breakroom) "rim" = ( /obj/machinery/alarm{ dir = 1; @@ -37719,9 +37726,9 @@ aqU arA ass aqk -aya +dgA auo -auW +qXI avu awj aAi @@ -37862,7 +37869,7 @@ arB ast aqk atD -aup +dEl atJ atJ awk @@ -44128,8 +44135,8 @@ aDF aDN aEe arZ -aac -aac +arZ +arZ aac arZ arZ @@ -44270,7 +44277,7 @@ arZ aDP arZ arZ -arZ +acG arZ arZ arZ @@ -45902,7 +45909,7 @@ aab aab aab aab -aab +aac aac aKv aPV @@ -45917,8 +45924,8 @@ aKv aac aac aac -aab -aab +aac +aac aac aac aac @@ -46044,8 +46051,8 @@ aab aab aab aab -aab -aab +aac +aac aKv aKv aKv @@ -46059,20 +46066,20 @@ aKv aac aac aac -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac aac aac aac @@ -46186,37 +46193,37 @@ aab aab aab aab -aab -aab aac aac aac aac aac aac -apq -apq -apq -apq -apq aac aac -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac aac adu adu @@ -46328,29 +46335,27 @@ aab aab aab aab -aab -aab aac aac aac aac aac -apq -apq -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac aab aab aab @@ -46364,6 +46369,8 @@ aac aac aac aac +aac +aac ajT aYW aYF @@ -46470,6 +46477,22 @@ aab aab aab aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac aab aab aab @@ -46483,29 +46506,13 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac ajT ajT ajT @@ -46613,6 +46620,20 @@ aab aab aab aab +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac +aac aab aab aab @@ -46629,27 +46650,13 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac ajM ajM aUa @@ -46757,6 +46764,16 @@ aab aab aab aab +aac +aac +aac +apq +apq +apq +apq +apq +apq +apq aab aab aab @@ -46775,23 +46792,13 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aac +aac +aac +aac +aac +aac +aac ajM ajM ajM @@ -46900,12 +46907,12 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab +apq +apq +apq +apq +apq +apq aab aab aab diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 4ccd5fb59b..b573041b3f 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -716,6 +716,12 @@ /obj/random/cigarettes, /turf/simulated/floor/plating, /area/maintenance/lower/medsec_maintenance) +"aby" = ( +/obj/machinery/alarm{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "abz" = ( /obj/structure/lattice, /obj/machinery/door/firedoor/glass, @@ -1051,6 +1057,9 @@ }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/medical/triage) +"acf" = ( +/turf/simulated/wall/r_wall, +/area/rnd/xenobiology/xenoflora) "acg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -1087,6 +1096,29 @@ "acj" = ( /turf/simulated/wall, /area/rnd/outpost/xenobiology/outpost_hallway) +"ack" = ( +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8; + health = 1e+006 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"acl" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "acm" = ( /obj/structure/sink{ dir = 4; @@ -1102,6 +1134,16 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) +"acn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aco" = ( /obj/structure/railing{ dir = 1; @@ -1532,6 +1574,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/reading_room) +"acV" = ( +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "acW" = ( /obj/machinery/atmospherics/pipe/cap/visible/scrubbers, /turf/simulated/floor/plating, @@ -1552,6 +1597,12 @@ /obj/structure/flora/pottedplant/stoutbush, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/pool) +"acZ" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ada" = ( /obj/structure/cable/green{ d1 = 4; @@ -1971,6 +2022,18 @@ /obj/effect/floor_decal/rust, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/outside/outside3) +"adK" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 5 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "adL" = ( /obj/structure/cable/green{ d1 = 1; @@ -2472,6 +2535,26 @@ /obj/random/tech_supply, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) +"aeE" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"aeF" = ( +/obj/machinery/door/window/brigdoor/southright{ + dir = 4; + icon_state = "rightsecure"; + req_access = list(55); + req_one_access = list(47) + }, +/obj/machinery/door/window/brigdoor/southright{ + dir = 8; + icon_state = "rightsecure"; + req_access = list(55); + req_one_access = list(47) + }, +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aeG" = ( /turf/simulated/wall, /area/tether/surfacebase/medical/lobby) @@ -2639,6 +2722,17 @@ }, /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) +"aeU" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aeV" = ( /obj/structure/table/glass, /obj/item/device/flashlight/lamp/green, @@ -2648,14 +2742,14 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/reading_room) "aeW" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/plating, -/area/tether/surfacebase/reading_room) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aeX" = ( /obj/structure/railing{ dir = 4 @@ -2674,6 +2768,16 @@ }, /turf/simulated/floor/tiled/steel_dirty/virgo3b, /area/tether/surfacebase/outside/outside3) +"aeZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "afa" = ( /obj/machinery/door/airlock/maintenance/medical{ name = "Medical Maintenance Access"; @@ -2850,6 +2954,29 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/processing) +"afp" = ( +/obj/machinery/appliance/cooker/grill, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 10 + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1; + icon_state = "warning_dust" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"afq" = ( +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"afr" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1; + icon_state = "warning_dust" + }, +/obj/machinery/appliance/cooker/fryer, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "afs" = ( /obj/structure/cable/green{ d1 = 4; @@ -3091,21 +3218,17 @@ /turf/simulated/floor/tiled/steel_grid, /area/tether/surfacebase/reading_room) "afI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, -/area/tether/surfacebase/reading_room) -"afJ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" }, -/obj/structure/window/reinforced, -/turf/simulated/floor/plating, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"afJ" = ( +/turf/simulated/wall/r_wall, /area/tether/surfacebase/reading_room) "afK" = ( /turf/simulated/wall, @@ -3174,6 +3297,22 @@ }, /turf/simulated/floor/tiled/dark, /area/tether/surfacebase/security/common) +"afS" = ( +/turf/simulated/wall/r_wall, +/area/rnd/xenobiology/xenoflora_storage) +"afT" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "afU" = ( /obj/machinery/door/airlock/security{ name = "Security Processing"; @@ -3210,6 +3349,21 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) +"afX" = ( +/obj/structure/catwalk, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) +"afY" = ( +/obj/machinery/atmospherics/pipe/manifold/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"afZ" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aga" = ( /obj/structure/table/glass, /obj/item/weapon/backup_implanter{ @@ -3442,14 +3596,16 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ags" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, /obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass_research{ + name = "Xenoflora Research"; + req_access = list(77); + req_one_access = list(77) }, -/turf/simulated/floor/plating, -/area/tether/surfacebase/surface_three_hall) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "agt" = ( /obj/effect/floor_decal/steeldecal/steel_decals10{ dir = 4 @@ -3543,6 +3699,11 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"agB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "agC" = ( /obj/structure/lattice, /obj/machinery/atmospherics/pipe/zpipe/down{ @@ -3595,6 +3756,22 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"agF" = ( +/obj/machinery/atmospherics/unary/freezer{ + dir = 2; + icon_state = "freezer" + }, +/obj/effect/floor_decal/corner/green{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 9 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "agG" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ @@ -3680,15 +3857,23 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) "agN" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 6 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 6 +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/machinery/camera/network/tether{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "agO" = ( @@ -3997,6 +4182,22 @@ }, /turf/simulated/floor/tiled/techfloor, /area/rnd/workshop) +"ahs" = ( +/obj/machinery/atmospherics/unary/heater{ + dir = 2; + icon_state = "heater" + }, +/obj/effect/floor_decal/corner/green{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aht" = ( /obj/machinery/space_heater, /obj/effect/floor_decal/techfloor, @@ -4072,6 +4273,13 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) +"ahz" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) "ahA" = ( /obj/structure/cable/green{ d1 = 2; @@ -4327,23 +4535,13 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ahR" = ( -/obj/structure/extinguisher_cabinet{ - dir = 8; - icon_state = "extinguisher_closed"; - pixel_x = 30 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ahS" = ( @@ -4500,9 +4698,10 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) "aib" = ( -/obj/structure/closet/crate/freezer, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aic" = ( /obj/random/trash_pile, /obj/effect/floor_decal/techfloor{ @@ -4653,11 +4852,20 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/obj/structure/closet/hydrant{ - pixel_x = 32 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) @@ -4704,6 +4912,29 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"ais" = ( +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/camera/network/research, +/obj/machinery/alarm{ + pixel_y = 22 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ait" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aiu" = ( /obj/structure/table/steel, /obj/item/device/integrated_electronics/debugger{ @@ -5053,6 +5284,11 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/frontdesk) +"aiX" = ( +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aiY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 5 @@ -5068,6 +5304,13 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) +"aiZ" = ( +/obj/machinery/door/window/brigdoor/southright{ + req_access = list(55); + req_one_access = list(47) + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aja" = ( /obj/machinery/computer/crew{ dir = 4 @@ -5104,6 +5347,42 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"ajc" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajd" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 1 + }, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"aje" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/machinery/atmospherics/portables_connector, +/obj/effect/floor_decal/borderfloor{ + dir = 5 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ajf" = ( /obj/effect/floor_decal/steeldecal/steel_decals6{ dir = 1 @@ -5298,6 +5577,26 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) +"ajv" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/industrial/warning{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajw" = ( +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/industrial/warning{ + dir = 5; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajx" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ajy" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -5343,15 +5642,39 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge_hallway) -"ajD" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/secure_closet/freezer/kitchen, -/obj/item/device/radio/intercom{ - dir = 4; - pixel_x = 24 +"ajC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ajE" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -5369,6 +5692,24 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/rnd/research_storage) +"ajF" = ( +/obj/machinery/atmospherics/pipe/simple/visible, +/obj/machinery/meter, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajG" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 10 + }, +/obj/structure/catwalk, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) "ajH" = ( /obj/machinery/computer/secure_data, /obj/structure/fireaxecabinet{ @@ -5532,12 +5873,75 @@ "ajT" = ( /turf/simulated/wall/r_wall, /area/tether/surfacebase/security/lobby) +"ajU" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers, +/obj/structure/catwalk, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) +"ajV" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajW" = ( +/obj/machinery/portable_atmospherics/canister/oxygen, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ajX" = ( -/obj/structure/disposalpipe/segment{ +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"ajY" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 6; + icon_state = "intact" + }, +/obj/machinery/meter, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/corner/mauve/bordercorner2{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"ajZ" = ( +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/window/westright{ + dir = 1; + icon_state = "right"; + name = "Botany"; + req_one_access = list(35,28) + }, +/obj/machinery/door/window/westright{ + dir = 2; + icon_state = "right"; + name = "Kitchen"; + req_access = list(28) + }, +/turf/simulated/floor/tiled/white, +/area/hydroponics) "aka" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -5583,10 +5987,6 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "akd" = ( -/obj/machinery/status_display{ - pixel_x = 32; - pixel_y = 0 - }, /obj/effect/floor_decal/borderfloor{ dir = 4 }, @@ -5599,6 +5999,7 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ake" = ( @@ -5717,16 +6118,12 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "ako" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 0 +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Port to Isolation" }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "akp" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -5978,68 +6375,74 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "akI" = ( -/obj/effect/floor_decal/borderfloor/corner, -/obj/effect/floor_decal/corner/lightgrey/bordercorner, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" +/obj/structure/closet/hydrant{ + pixel_x = 32 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "akJ" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 + dir = 10 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass, +/obj/machinery/light{ + dir = 4 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "akK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/status_display{ + pixel_x = 32; + pixel_y = 0 }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 4 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 + dir = 10 }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "akL" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lightgrey/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/sortjunction{ + dir = 1; + icon_state = "pipe-j1s"; + name = "Xenobotany"; + sortType = "Xenobotany" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) @@ -6140,20 +6543,19 @@ dir = 4 }, /area/crew_quarters/pool) +"akW" = ( +/obj/machinery/atmospherics/pipe/simple/visible{ + dir = 4 + }, +/obj/machinery/meter, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "akX" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/structure/extinguisher_cabinet{ - dir = 4; - icon_state = "extinguisher_closed"; - pixel_x = -30 +/obj/machinery/atmospherics/pipe/manifold/visible{ + dir = 1 }, /turf/simulated/floor/tiled, -/area/hydroponics) +/area/rnd/xenobiology/xenoflora_storage) "akY" = ( /turf/simulated/wall, /area/crew_quarters/recreation_area) @@ -6341,11 +6743,12 @@ /turf/simulated/floor/wood, /area/tether/surfacebase/surface_three_hall) "alr" = ( -/obj/structure/bed/chair/wood{ - dir = 8 +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/surface_three_hall) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "als" = ( /obj/machinery/washing_machine, /obj/effect/floor_decal/techfloor{ @@ -6411,26 +6814,16 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/pool) "alz" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 10 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 + dir = 8 }, +/obj/machinery/light, /turf/simulated/floor/tiled, -/area/hallway/lower/third_south) +/area/tether/surfacebase/surface_three_hall) "alA" = ( /obj/effect/floor_decal/spline/plain{ dir = 1 @@ -6555,11 +6948,25 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "alM" = ( -/obj/structure/bed/chair/wood{ +/obj/structure/window/reinforced, +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/effect/floor_decal/industrial/danger{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 5 + }, +/obj/machinery/status_display{ + pixel_x = 32; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "alN" = ( /obj/machinery/fitness/heavy/lifter, /turf/simulated/floor/wood, @@ -6837,6 +7244,18 @@ }, /turf/simulated/floor/tiled/freezer, /area/crew_quarters/pool) +"amt" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/simple/visible/universal, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) +"amu" = ( +/obj/structure/catwalk, +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) "amv" = ( /turf/simulated/floor/tiled, /area/crew_quarters/pool) @@ -7079,6 +7498,14 @@ }, /turf/simulated/floor/water/pool, /area/crew_quarters/pool) +"amS" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "amT" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -7088,6 +7515,67 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) +"amU" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"amV" = ( +/obj/machinery/portable_atmospherics/canister/sleeping_agent, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"amW" = ( +/obj/structure/window/reinforced, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/industrial/danger{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"amX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"amY" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/smartfridge{ + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"amZ" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 10 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 + }, +/obj/item/device/radio/intercom{ + dir = 2; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ana" = ( /obj/structure/table/woodentable, /obj/item/clothing/glasses/threedglasses, @@ -7116,27 +7604,12 @@ /turf/simulated/floor/tiled/steel_grid, /area/tether/surfacebase/north_stairs_three) "and" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -25 +/obj/machinery/portable_atmospherics/canister/nitrogen, +/obj/effect/floor_decal/industrial/warning{ + dir = 9 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora_storage) "ane" = ( /turf/simulated/open, /area/tether/surfacebase/north_stairs_three) @@ -7174,6 +7647,28 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"ani" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/closet/chefcloset, +/obj/item/glass_jar, +/obj/item/device/retail_scanner/civilian, +/obj/item/weapon/soap/nanotrasen, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/machinery/light_switch{ + pixel_x = -25 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"anj" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "ank" = ( /obj/machinery/door/airlock/maintenance/int{ name = "Fire/Phoron Shelter"; @@ -7193,6 +7688,35 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/panic_shelter) +"anl" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/floor_decal/industrial/warning{ + dir = 5 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/xenobiology/xenoflora_storage) +"anm" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"ann" = ( +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "ano" = ( /obj/machinery/light/small{ dir = 1 @@ -7331,6 +7855,54 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/pool) +"anC" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"anD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"anE" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "anF" = ( /obj/structure/table/woodentable, /obj/item/weapon/coin/silver, @@ -7392,6 +7964,56 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"anM" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10 + }, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"anN" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"anO" = ( +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/structure/catwalk, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) +"anP" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "anQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7589,6 +8211,14 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) +"aoe" = ( +/obj/machinery/portable_atmospherics/canister/carbon_dioxide, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aof" = ( /obj/structure/bed/padded, /obj/effect/floor_decal/techfloor{ @@ -7633,6 +8263,15 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aoj" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aok" = ( +/turf/simulated/wall/r_wall, +/area/hydroponics) "aol" = ( /turf/simulated/wall/r_wall, /area/vacant/vacant_shop) @@ -7651,19 +8290,19 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/vacant/vacant_shop) "aon" = ( -/turf/simulated/wall/r_wall, -/area/crew_quarters/freezer) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "aoo" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Freezer Maintenance Access"; - req_access = list(28) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 5 }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/techfloor/grid, -/area/crew_quarters/freezer) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aop" = ( -/turf/simulated/wall/r_wall, -/area/hydroponics/cafegarden) +/turf/simulated/floor/grass, +/area/hydroponics) "aoq" = ( /obj/structure/bed/chair{ dir = 4 @@ -7804,6 +8443,16 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aoD" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aoE" = ( /obj/structure/sign/directions/evac{ dir = 1 @@ -7866,8 +8515,13 @@ /turf/simulated/wall, /area/crew_quarters/freezer) "aoK" = ( -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/atmospherics/binary/pump{ + dir = 4; + name = "Isolation to Waste" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "aoL" = ( /obj/structure/table/reinforced, /obj/effect/floor_decal/borderfloor{ @@ -7884,27 +8538,59 @@ /turf/simulated/floor/tiled, /area/rnd/research/testingrange) "aoM" = ( -/obj/structure/kitchenspike, -/obj/machinery/alarm{ - pixel_y = 22; - target_temperature = 293.15 +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aoN" = ( -/obj/structure/kitchenspike, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aoO" = ( -/obj/structure/flora/ausbushes/grassybush, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) -"aoP" = ( -/obj/machinery/light{ - dir = 1 +/obj/structure/bed/chair/wood{ + dir = 8 }, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/structure/extinguisher_cabinet{ + dir = 8; + icon_state = "extinguisher_closed"; + pixel_x = 30 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/surface_three_hall) +"aoO" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold4w/hidden/yellow, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) +"aoP" = ( +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/visible/scrubbers{ + dir = 4 + }, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/rnd/xenobiology/xenoflora_storage) "aoQ" = ( /obj/structure/table/reinforced, /obj/machinery/cell_charger, @@ -7917,14 +8603,10 @@ /turf/simulated/floor/tiled, /area/rnd/research/testingrange) "aoR" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hydroponics/cafegarden) +/obj/structure/catwalk, +/obj/machinery/atmospherics/pipe/manifold/visible/yellow, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) "aoS" = ( /obj/effect/floor_decal/spline/plain{ dir = 10 @@ -8007,6 +8689,14 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"apa" = ( +/obj/machinery/door/airlock/maintenance/common{ + name = "Freezer Maintenance Access"; + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/techfloor/grid, +/area/hydroponics) "apb" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8032,6 +8722,16 @@ "apc" = ( /turf/simulated/wall, /area/vacant/vacant_shop) +"apd" = ( +/obj/machinery/atmospherics/pipe/tank/phoron{ + dir = 8; + icon_state = "phoron_map"; + name = "Xenoflora Waste Buffer"; + start_pressure = 0 + }, +/obj/structure/catwalk, +/turf/simulated/floor/tiled/eris/steel/techfloor_grid, +/area/tether/surfacebase/outside/outside3) "ape" = ( /obj/structure/cable{ icon_state = "4-8" @@ -8095,34 +8795,51 @@ /turf/simulated/floor/tiled/techfloor, /area/vacant/vacant_shop) "aph" = ( -/obj/machinery/firealarm{ - dir = 8; - pixel_x = -24 +/obj/machinery/light/small{ + dir = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "api" = ( -/obj/machinery/light_switch{ - pixel_x = 25 +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1; + icon_state = "warning_dust" }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/appliance/cooker/oven, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "apj" = ( -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/machinery/portable_atmospherics/canister/phoron, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apk" = ( -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/machinery/portable_atmospherics/canister/phoron, +/obj/effect/floor_decal/industrial/warning{ + dir = 4; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apl" = ( -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/machinery/atmospherics/portables_connector{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apm" = ( /obj/effect/floor_decal/spline/plain{ dir = 8 @@ -8399,24 +9116,35 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "apF" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/machinery/atmospherics/portables_connector{ + dir = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/obj/machinery/camera/network/research{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apG" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/mauve/border, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apH" = ( -/obj/structure/flora/ausbushes/lavendergrass, -/obj/structure/flora/ausbushes/ppflowers, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "apI" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/freezer, @@ -8505,6 +9233,22 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"apP" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/machinery/light_switch{ + pixel_x = 25 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "apQ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -8685,6 +9429,10 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aqe" = ( +/obj/machinery/portable_atmospherics/hydroponics/soil, +/turf/simulated/floor/grass, +/area/hydroponics) "aqf" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -8773,65 +9521,52 @@ /turf/simulated/floor/tiled/techfloor, /area/vacant/vacant_shop) "aql" = ( -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/super; - dir = 8; - name = "west bump"; - pixel_x = -30 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/structure/cable/green{ - icon_state = "0-4" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/machinery/button/remote/blast_door{ - id = "freezer"; - name = "Freezer shutters"; - pixel_x = -24; - pixel_y = -24 - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aqm" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/door/airlock/glass_research{ + name = "Xenoflora Research"; + req_access = list(77); + req_one_access = list(77) + }, +/turf/simulated/floor/tiled/steel_grid, +/area/rnd/xenobiology/xenoflora_storage) +"aqm" = ( +/obj/machinery/beehive, +/turf/simulated/floor/grass, +/area/hydroponics) "aqn" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" +/obj/machinery/light{ + dir = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "aqo" = ( -/obj/machinery/gibber, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aqp" = ( -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/super; - dir = 8; - name = "west bump"; - pixel_x = -30 - }, -/obj/structure/cable/green{ - icon_state = "0-4" - }, +/obj/machinery/portable_atmospherics/hydroponics, /turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/area/hydroponics) "aqq" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, +/obj/structure/flora/ausbushes/fullgrass, /turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/area/hydroponics) "aqr" = ( /obj/structure/bed/chair{ dir = 4 @@ -9212,12 +9947,6 @@ /turf/simulated/wall, /area/tether/surfacebase/surface_three_hall) "aqU" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 4 - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 9 }, @@ -9227,52 +9956,83 @@ /obj/machinery/newscaster{ pixel_x = 25 }, +/obj/effect/floor_decal/borderfloor/corner{ + dir = 4 + }, +/obj/effect/floor_decal/corner/lightgrey/bordercorner{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aqV" = ( -/obj/structure/closet/secure_closet/freezer/meat, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aqW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/icecream_vat, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aqX" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aqY" = ( -/obj/machinery/chem_master/condimaster, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) -"aqZ" = ( /obj/structure/flora/ausbushes/sparsegrass, -/obj/structure/flora/ausbushes/ywflowers, /turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/area/hydroponics) +"aqW" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aqX" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aqY" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1; + icon_state = "warning_dust" + }, +/obj/machinery/appliance/mixer/cereal, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"aqZ" = ( +/obj/structure/closet/firecloset, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "ara" = ( +/obj/structure/closet/l3closet/scientist, +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"arb" = ( +/obj/machinery/door/firedoor, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) -"arb" = ( -/obj/structure/flora/ausbushes/pointybush, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/door/airlock/glass_research{ + name = "Xenoflora Research"; + req_access = list(77); + req_one_access = list(77) + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora_storage) "arc" = ( /obj/structure/table/glass, /obj/effect/floor_decal/spline/plain{ @@ -9391,15 +10151,25 @@ /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/tether/surfacebase/outside/outside3) "aro" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 4 - }, -/obj/effect/floor_decal/spline/plain{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/media/jukebox, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arp" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -9415,53 +10185,77 @@ /turf/simulated/floor/tiled/techfloor, /area/vacant/vacant_shop) "arq" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - density = 0; - dir = 2; - icon_state = "shutter0"; - id = "freezer"; - name = "Freezer Shutters"; - opacity = 0 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/crew_quarters/freezer) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arr" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/door/airlock/freezer{ - name = "Kitchen cold room"; - req_access = list(28) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "ars" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/crew_quarters/kitchen) -"art" = ( -/obj/machinery/door/firedoor/glass, +/obj/machinery/portable_atmospherics/hydroponics, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/door/airlock/glass{ - name = "Garden"; - req_access = list(28) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"art" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "aru" = ( /turf/simulated/wall, /area/crew_quarters/kitchen) @@ -9479,12 +10273,28 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/pool) "arx" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_soft/full{ - dir = 1 +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/airlock/glass_research{ + name = "Xenoflora Research"; + req_access = list(77); + req_one_access = list(77) + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "ary" = ( /obj/effect/floor_decal/spline/plain, /obj/machinery/light, @@ -9567,171 +10377,119 @@ /turf/simulated/floor/tiled/monotile, /area/tether/surfacebase/surface_three_hall) "arG" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/corner/lightgrey/bordercorner{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "arH" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 1 - }, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 2 +/obj/machinery/vending/hydronutrients, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 5 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/area/rnd/xenobiology/xenoflora) "arI" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 5 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 }, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/area/rnd/xenobiology/xenoflora_storage) "arJ" = ( /turf/simulated/wall, /area/crew_quarters/bar) "arK" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/machinery/light/small{ - dir = 8 - }, -/obj/structure/sign/fire{ - name = "\improper PHORON/FIRE SHELTER"; - pixel_x = -32; - pixel_y = 32 - }, -/obj/structure/closet/hydrant{ - pixel_x = -32 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/grass, +/area/hydroponics) "arL" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) "arM" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/alarm{ - pixel_y = 22 - }, -/obj/machinery/camera/network/civilian{ - dir = 9 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/closet/secure_closet/freezer/kitchen, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "arN" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/chefcloset, -/obj/item/glass_jar, -/obj/item/device/retail_scanner/civilian, -/obj/item/weapon/soap/nanotrasen, -/obj/item/device/destTagger{ - pixel_x = 4; - pixel_y = 3 +/obj/effect/floor_decal/spline/plain{ + dir = 6 }, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/item/weapon/packageWrap, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled/techfloor, +/area/hydroponics) "arO" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/portable_atmospherics/hydroponics, /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 8; + icon_state = "1-8" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arP" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = 30 +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arQ" = ( -/obj/structure/table/standard, -/obj/machinery/microwave, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "arR" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/grass, +/area/hydroponics) "arS" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 5 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arT" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/secure_closet/freezer/meat, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 +/obj/machinery/seed_extractor, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "arU" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -9752,6 +10510,28 @@ "arW" = ( /turf/simulated/wall, /area/tether/surfacebase/public_garden_three) +"arX" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"arY" = ( +/obj/structure/closet/firecloset, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"arZ" = ( +/obj/structure/railing{ + dir = 1; + icon_state = "railing0" + }, +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/open/virgo3b, +/area/tether/surfacebase/outside/outside3) "asa" = ( /obj/machinery/computer/rdconsole/robotics{ dir = 8 @@ -9826,52 +10606,43 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_north_airlock) "ash" = ( -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/turf/simulated/floor/grass, +/area/maintenance/lower/xenoflora) "asi" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/turf/simulated/floor/plating, +/area/hydroponics) "asj" = ( -/obj/machinery/atm{ - pixel_x = -30 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/sign/botany, +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/window/reinforced{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/hydroponics) "ask" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 8 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "asl" = ( /obj/machinery/recharge_station, /obj/effect/floor_decal/industrial/warning/corner{ @@ -9880,68 +10651,54 @@ /turf/simulated/floor/tiled/steel_grid, /area/assembly/chargebay) "asm" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/closet/secure_closet/freezer/fridge, -/obj/structure/extinguisher_cabinet{ - dir = 4; - icon_state = "extinguisher_closed"; - pixel_x = -30 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/structure/closet/l3closet/scientist, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "asn" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/effect/floor_decal/corner/mauve/border, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aso" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"asp" = ( /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/effect/landmark/start{ - name = "Chef" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"aso" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asp" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asq" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asr" = ( -/obj/structure/bed/chair/comfy{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/turf/simulated/floor/grass, +/area/hydroponics) +"asq" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"asr" = ( +/obj/structure/closet/secure_closet/freezer/meat, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) "ass" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -9973,6 +10730,37 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"asu" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"asv" = ( +/obj/effect/floor_decal/corner/mauve/bordercorner{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"asw" = ( +/obj/effect/floor_decal/corner/grey/diagonal{ + dir = 4 + }, +/obj/structure/closet/secure_closet/freezer/meat, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"asx" = ( +/obj/structure/closet/crate/freezer, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) "asy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -10017,136 +10805,169 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) -"asF" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 +"asB" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/turf/simulated/floor/plating, +/turf/simulated/floor/lino, /area/crew_quarters/bar) -"asG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"asC" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"asD" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 5 }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"asH" = ( -/obj/structure/table/bench/wooden, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"asI" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "kitchen"; - layer = 3.1; - name = "Kitchen Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/kitchen) -"asJ" = ( -/obj/effect/floor_decal/corner/grey/diagonal{ - dir = 4 +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 }, /obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ pixel_x = -3; pixel_y = 0 }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/structure/table/standard, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/machinery/door/blast/shutters{ + dir = 1; + id = "kitchen2"; + layer = 3.3; + name = "Kitchen Shutters" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) +"asE" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"asF" = ( +/obj/machinery/door/airlock/glass{ + name = "Hydroponics Break Room"; + req_one_access = list(35,28) + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"asG" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/smartfridge{ + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/white, +/area/hydroponics) +"asH" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"asI" = ( +/obj/structure/kitchenspike, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"asJ" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "asK" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ +/obj/effect/floor_decal/spline/plain{ dir = 8 }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ +/obj/effect/floor_decal/corner/lime/border{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "asL" = ( -/obj/structure/table/standard, /obj/effect/floor_decal/corner/grey/diagonal, -/obj/item/weapon/book/manual/chef_recipes, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 8 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/closet/secure_closet/freezer/fridge, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "asM" = ( -/obj/structure/table/standard, /obj/effect/floor_decal/corner/grey/diagonal, -/obj/item/weapon/reagent_containers/food/condiment/enzyme{ - layer = 5 +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 }, -/obj/item/weapon/reagent_containers/dropper, -/obj/structure/disposalpipe/segment{ - dir = 4 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "asN" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asO" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asP" = ( -/obj/machinery/cooker/grill, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"asQ" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, /obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 +/obj/machinery/door/blast/shutters{ + density = 0; + dir = 2; + icon_state = "shutter0"; + id = "freezer"; + name = "Freezer Shutters"; + opacity = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/plating, -/area/crew_quarters/kitchen) +/area/crew_quarters/freezer) +"asO" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ppflowers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"asP" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"asQ" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "asR" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -10178,162 +10999,166 @@ "asT" = ( /turf/simulated/wall/r_wall, /area/bridge) -"asV" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/bar) -"asW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +"asU" = ( +/obj/machinery/door/airlock/freezer{ + name = "Kitchen cold room"; + req_access = list(28) }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"asV" = ( +/obj/structure/flora/ausbushes/lavendergrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"asW" = ( +/obj/structure/table/standard{ + name = "plastic table frame" + }, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/storage/box/botanydisk, +/obj/item/weapon/storage/box/botanydisk, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "asX" = ( /turf/simulated/floor/wood, /area/crew_quarters/bar) "asY" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "kitchen"; - layer = 3.1; - name = "Kitchen Shutters" - }, -/turf/simulated/floor/plating, -/area/crew_quarters/kitchen) +/obj/machinery/gibber, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) "asZ" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/table/standard, -/obj/item/weapon/material/kitchen/rollingpin, -/obj/item/weapon/material/knife/butch, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "ata" = ( -/obj/structure/table/standard, -/obj/machinery/reagentgrinder, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_x = 0 +/obj/structure/flora/ausbushes/lavendergrass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "atb" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/wall, +/area/hydroponics/cafegarden) "atc" = ( -/obj/machinery/cooker/candy, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 +/obj/effect/floor_decal/borderfloor/corner, +/obj/effect/floor_decal/corner/lightgrey/bordercorner, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"ate" = ( -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) -"atg" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/structure/sign/department/bar, -/turf/simulated/floor/plating, -/area/crew_quarters/bar) -"ath" = ( -/obj/structure/disposalpipe/junction{ - dir = 8; - icon_state = "pipe-j2" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"ati" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"atj" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/vending/dinnerware{ - dir = 4 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) -"atk" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 2; + d2 = 4; + icon_state = "2-4" }, -/obj/effect/landmark/start{ - name = "Chef" +/obj/structure/disposalpipe/segment{ + dir = 4 }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"atd" = ( +/obj/structure/table/standard, +/obj/machinery/chemical_dispenser/bar_soft/full, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) -"atl" = ( +"ate" = ( +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"atf" = ( /obj/structure/table/standard, /obj/effect/floor_decal/corner/grey/diagonal, -/obj/item/weapon/packageWrap, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ +/obj/item/weapon/book/manual/chef_recipes, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"atg" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/reagent_containers/food/condiment/enzyme{ + layer = 5 + }, +/obj/item/weapon/reagent_containers/dropper, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"ath" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"ati" = ( +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"atj" = ( +/obj/machinery/botany/editor, +/obj/effect/floor_decal/corner/mauve/border{ dir = 8 }, -/turf/simulated/floor/tiled/white, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"atk" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"atl" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, /area/crew_quarters/kitchen) "atm" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/sink/kitchen{ - pixel_y = 28 +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "atn" = ( -/obj/structure/table/standard, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/item/weapon/reagent_containers/food/snacks/mint, -/obj/item/weapon/storage/box/donkpockets{ - pixel_x = 3; - pixel_y = 3 +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/item/weapon/reagent_containers/glass/beaker{ - pixel_x = 5 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) "ato" = ( -/obj/machinery/cooker/cereal, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 +/obj/effect/floor_decal/spline/plain{ + dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/smartfridge/drinks, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "atp" = ( /obj/structure/bed/chair/office/dark, /obj/effect/landmark/start{ @@ -10388,17 +11213,46 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) -"atz" = ( -/obj/machinery/smartfridge{ - req_access = list(28) +"atv" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"atw" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/wall, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) -"atA" = ( -/obj/machinery/cooker/fryer, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 +"atx" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aty" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/structure/flora/ausbushes/lavendergrass, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"atz" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"atA" = ( +/obj/structure/table/standard, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "atB" = ( @@ -10456,111 +11310,71 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge_hallway) +"atJ" = ( +/obj/structure/table/standard, +/obj/item/weapon/material/kitchen/rollingpin, +/obj/item/weapon/material/knife/butch, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"atK" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"atL" = ( +/obj/machinery/microwave, +/obj/structure/table/standard, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"atM" = ( +/obj/structure/table/standard, +/obj/machinery/microwave, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "atN" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/effect/floor_decal/spline/plain{ + dir = 6 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood, +/obj/machinery/vending/boozeomat, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "atO" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/landmark/start{ + name = "Chef" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "atP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/freezer{ - name = "Kitchen"; - req_access = list(28) - }, +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "atQ" = ( /obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/button/remote/blast_door{ - id = "kitchen"; - name = "Kitchen shutters"; - pixel_x = -24; - pixel_y = -24 +/obj/structure/sink/kitchen{ + pixel_y = 28 }, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "atR" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9 - }, /obj/structure/cable/green{ d1 = 1; - d2 = 8; - icon_state = "1-8" + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green{ - icon_state = "0-8" - }, -/obj/machinery/camera/network/civilian{ - dir = 1 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/grass, +/area/hydroponics) "atS" = ( -/obj/machinery/cooker/oven, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 +/obj/machinery/botany/extractor, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "atT" = ( /turf/simulated/wall/r_wall, /area/rnd/research) @@ -10720,39 +11534,29 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aui" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" - }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/area/rnd/xenobiology/xenoflora) "auj" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/computer/guestpass{ - dir = 4; - pixel_x = -28; - pixel_y = 0 +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/reagent_containers/food/snacks/mint, +/obj/item/weapon/storage/box/donkpockets{ + pixel_x = 3; + pixel_y = 3 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/item/weapon/reagent_containers/glass/beaker{ + pixel_x = 5 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "auk" = ( -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass, +/area/hydroponics) "aul" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -10764,52 +11568,37 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_hallway) "aum" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "kitchen"; - layer = 3.3; - name = "Kitchen Shutters" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/structure/flora/ausbushes/pointybush, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) "aun" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/chemical_dispenser/bar_soft/full, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "kitchen"; - layer = 3.3; - name = "Kitchen Shutters" +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "auo" = ( -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "kitchen"; - layer = 3.3; - name = "Kitchen Shutters" +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 }, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "aup" = ( -/obj/structure/table/reinforced, -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/machinery/door/blast/shutters{ - dir = 2; - id = "kitchen"; - layer = 3.3; - name = "Kitchen Shutters" +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "auq" = ( /obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ @@ -10930,6 +11719,19 @@ "aux" = ( /turf/simulated/floor/holofloor/tiled/dark, /area/tether/elevator) +"auy" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/obj/structure/sign/securearea{ + desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; + icon_state = "monkey_painting"; + name = "Mr. Deempisi portrait"; + pixel_x = 4; + pixel_y = 28 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "auz" = ( /obj/item/device/radio/intercom{ dir = 1; @@ -11088,72 +11890,74 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "auL" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/beige/border, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 1 +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/area/rnd/xenobiology/xenoflora) "auM" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/structure/closet/firecloset, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) -"auN" = ( +/obj/machinery/botany/extractor, /obj/machinery/light{ dir = 8; icon_state = "tube1" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +/obj/effect/floor_decal/corner/mauve/border{ dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = -24 +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"auN" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "auO" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/structure/bed/chair/wood, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "auP" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 +/obj/structure/bed/chair/office/light, +/obj/effect/landmark/start{ + name = "Xenobotanist" }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "auQ" = ( -/obj/structure/table/marble, -/obj/effect/floor_decal/spline/plain{ - dir = 8 +/obj/structure/table/woodentable, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 }, -/obj/machinery/recharger, -/obj/machinery/camera/network/civilian, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "auR" = ( -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) "auS" = ( /obj/effect/floor_decal/corner/lightgrey{ dir = 9 @@ -11171,16 +11975,18 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "auT" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/obj/structure/table/glass, +/obj/machinery/chemical_dispenser/xenoflora/full, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "auU" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass, +/area/hydroponics) "auV" = ( /obj/structure/railing{ dir = 4 @@ -11229,6 +12035,91 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"avb" = ( +/obj/structure/table/glass, +/obj/item/weapon/storage/box/beakers{ + pixel_x = 2; + pixel_y = 2 + }, +/obj/item/weapon/storage/box/syringes, +/obj/item/weapon/storage/box/gloves{ + pixel_x = 4; + pixel_y = 4 + }, +/obj/effect/floor_decal/corner/mauve/bordercorner, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"avc" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"avd" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/kitchen) +"ave" = ( +/obj/machinery/biogenerator, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"avf" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/structure/extinguisher_cabinet{ + dir = 4; + icon_state = "extinguisher_closed"; + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"avg" = ( +/obj/machinery/computer/security/telescreen/entertainment{ + desc = "Damn, looks like it's on the clown world channel. I wonder what else is on?"; + icon_state = "frame"; + pixel_x = 0; + pixel_y = 32 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"avh" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 9 + }, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avi" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "avj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -11245,6 +12136,21 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"avk" = ( +/obj/structure/table/reinforced, +/obj/machinery/chemical_dispenser/bar_soft/full, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "avl" = ( /obj/structure/bed/chair/comfy/brown{ dir = 8 @@ -11260,6 +12166,20 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"avm" = ( +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/table/reinforced, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "avn" = ( /obj/structure/cable/green{ d1 = 1; @@ -11281,28 +12201,56 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "avo" = ( -/obj/structure/sign/directions/evac{ - dir = 8 +/obj/structure/table/reinforced, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" }, -/turf/simulated/wall, -/area/crew_quarters/bar) -"avp" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"avq" = ( -/obj/structure/table/marble, +/obj/machinery/door/firedoor/glass, /obj/effect/floor_decal/spline/plain{ - dir = 8 + dir = 1 }, /turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) -"avr" = ( -/obj/structure/table/marble, +/area/crew_quarters/kitchen) +"avp" = ( +/obj/structure/table/reinforced, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "kitchen"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; + pixel_y = 0 + }, /turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/area/crew_quarters/kitchen) +"avq" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"avr" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/grass, +/area/hydroponics) "avs" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 1 @@ -11358,12 +12306,60 @@ }, /turf/simulated/floor/tiled/steel_grid, /area/rnd/research) +"avy" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 9 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avz" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avA" = ( +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/corner/beige{ + dir = 6; + icon_state = "corner_white" + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/machinery/computer/guestpass{ + dir = 8; + pixel_x = 25 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avB" = ( +/obj/structure/disposalpipe/segment, +/obj/effect/floor_decal/corner/mauve/bordercorner, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "avC" = ( /obj/structure/disposalpipe/segment{ dir = 4 }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"avD" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/vending/dinnerware{ + dir = 1; + icon_state = "dinnerware" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avE" = ( +/obj/structure/table/glass, +/obj/machinery/reagentgrinder, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "avF" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 1 @@ -11383,20 +12379,46 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "avH" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, -/obj/structure/disposalpipe/sortjunction{ - dir = 4; - icon_state = "pipe-j1s"; - name = "Hydroponics"; - sortType = "Hydroponics" +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass, +/obj/structure/disposalpipe/segment{ + dir = 4 }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"avI" = ( +/obj/machinery/chem_master, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"avJ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 8; + icon_state = "leftsecure"; + name = "Bar"; + req_access = list(25) + }, +/obj/structure/extinguisher_cabinet{ + pixel_y = 32 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "avK" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -11404,42 +12426,51 @@ /turf/simulated/floor/plating, /area/crew_quarters/bar) "avL" = ( -/obj/structure/table/bench/wooden, -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 +/obj/effect/floor_decal/corner/beige{ + dir = 10 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"avM" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/status_display{ - pixel_y = 30 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"avN" = ( /obj/effect/floor_decal/corner/beige{ dir = 9 }, /obj/effect/floor_decal/spline/plain{ + dir = 10 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avM" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avN" = ( +/obj/effect/floor_decal/corner/beige{ + dir = 10 + }, +/obj/effect/floor_decal/corner/beige{ + dir = 4; + icon_state = "corner_white" + }, +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"avO" = ( +/obj/machinery/door/airlock{ + name = "Service"; + req_access = list(25) + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/bar_backroom) +"avP" = ( +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) -"avO" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) -"avP" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "avQ" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -11572,6 +12603,13 @@ /obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_north_airlock) +"awc" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "awd" = ( /obj/machinery/librarycomp{ pixel_y = 0 @@ -11675,6 +12713,9 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/captain) +"awm" = ( +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) "awn" = ( /turf/simulated/wall/r_wall, /area/bridge_hallway) @@ -11685,20 +12726,26 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/recreation_area_restroom) "awp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, +/obj/effect/floor_decal/corner/lightgrey/border, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "awq" = ( -/obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, @@ -11710,7 +12757,6 @@ "awr" = ( /obj/machinery/light, /obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 1 }, @@ -11719,29 +12765,46 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"awu" = ( -/obj/structure/table/woodentable, +"aws" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/structure/closet/secure_closet/bar{ + req_access = list(25) + }, /turf/simulated/floor/wood, -/area/crew_quarters/bar) +/area/tether/surfacebase/bar_backroom) +"awt" = ( +/obj/structure/closet/gmcloset{ + name = "formal wardrobe" + }, +/obj/item/glass_jar, +/obj/item/device/retail_scanner/civilian, +/obj/item/device/retail_scanner/civilian, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"awu" = ( +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "awv" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -25 }, -/obj/effect/floor_decal/corner/beige{ - dir = 9 - }, -/obj/effect/floor_decal/spline/plain{ - dir = 10 +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 }, /turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/area/crew_quarters/kitchen) "aww" = ( -/obj/effect/floor_decal/corner/beige{ - dir = 10 - }, -/obj/effect/floor_decal/spline/plain, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/obj/structure/reagent_dispensers/beerkeg, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) "awx" = ( /obj/structure/disposalpipe/segment, /obj/machinery/vending/fitness, @@ -11964,8 +13027,13 @@ /turf/simulated/floor/tiled/steel_grid, /area/tether/surfacebase/security/lobby) "awJ" = ( -/turf/simulated/wall, -/area/maintenance/lower/atrium) +/obj/machinery/reagentgrinder, +/obj/structure/table/glass, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "awK" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -12006,24 +13074,17 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/recreation_area_restroom) "awN" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_y = 8 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/sign/directions/science{ - dir = 8; - pixel_y = 3 +/obj/structure/window/reinforced{ + dir = 8 }, -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -4 - }, -/obj/structure/sign/directions/engineering{ - dir = 8; - pixel_y = -10 - }, -/turf/simulated/wall, -/area/maintenance/lower/atrium) +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) "awO" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -12043,35 +13104,49 @@ /turf/simulated/wall, /area/hydroponics) "awQ" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/plating, +/obj/structure/sink{ + dir = 4; + icon_state = "sink"; + pixel_x = 11; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass, /area/hydroponics) "awR" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/turf/simulated/floor/plating, -/area/hydroponics) -"awS" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/structure/bed/chair/wood{ + dir = 1 }, /obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"awS" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lightgrey/border, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 +/obj/structure/disposalpipe/segment{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass, /turf/simulated/floor/tiled, -/area/hallway/lower/third_south) +/area/tether/surfacebase/surface_three_hall) +"awT" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) "awU" = ( /obj/structure/cable/green{ d1 = 1; @@ -12095,14 +13170,15 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "awV" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/light{ +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/drinks/shaker, +/obj/machinery/alarm{ dir = 8; - icon_state = "tube1"; - pixel_y = 0 + icon_state = "alarm0"; + pixel_x = 24 }, /turf/simulated/floor/wood, -/area/crew_quarters/bar) +/area/tether/surfacebase/bar_backroom) "awW" = ( /obj/structure/disposalpipe/segment, /obj/machinery/alarm{ @@ -12298,118 +13374,80 @@ /turf/simulated/floor/tiled/steel_grid, /area/rnd/research) "axm" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, +/obj/structure/window/reinforced, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/rnd/xenobiology/xenoflora) "axn" = ( -/obj/machinery/floodlight, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 - }, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) -"axo" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 9 - }, -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/floor_decal/corner/lime/border{ - dir = 9 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axp" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/effect/floor_decal/spline/plain{ dir = 1 }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/smartfridge, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axq" = ( -/obj/machinery/honey_extractor, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axr" = ( -/obj/machinery/smartfridge/drying_rack, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axs" = ( -/obj/item/bee_pack, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/honey_frame, -/obj/item/weapon/tool/crowbar, -/obj/item/bee_smoker, -/obj/item/beehive_assembly, -/obj/structure/closet/crate/hydroponics{ - desc = "All you need to start your own honey farm."; - name = "beekeeping crate" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axt" = ( -/obj/machinery/vending/hydronutrients, -/obj/effect/floor_decal/borderfloor{ - dir = 5 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axu" = ( -/obj/structure/sign/directions/evac{ - dir = 1 - }, -/turf/simulated/wall, -/area/hydroponics) -"axv" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/floor_decal/corner/lime/border{ +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"axo" = ( +/obj/structure/bed/chair/comfy, +/obj/effect/landmark/start{ + name = "Bartender" + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axp" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/box/beanbags, +/obj/item/weapon/gun/projectile/shotgun/doublebarrel, +/obj/item/weapon/paper{ + info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest."; + name = "Shotgun permit" + }, +/obj/machinery/light_switch{ + pixel_x = 25 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axq" = ( +/obj/structure/table/woodentable, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axr" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 + }, +/obj/machinery/smartfridge, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"axs" = ( +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"axt" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/packageWrap, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axu" = ( +/obj/structure/table/woodentable, +/obj/machinery/reagentgrinder, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axv" = ( +/obj/effect/floor_decal/borderfloor{ dir = 8 }, /obj/effect/floor_decal/steeldecal/steel_decals7{ @@ -12418,6 +13456,8 @@ /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 6 }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "axw" = ( @@ -12441,9 +13481,21 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "axx" = ( -/obj/structure/flora/pottedplant, +/obj/structure/table/woodentable, +/obj/item/weapon/flame/lighter/zippo, +/obj/item/clothing/head/that{ + pixel_x = 4; + pixel_y = 6 + }, +/obj/item/weapon/tool/screwdriver, +/obj/item/clothing/mask/smokable/cigarette/cigar/havana, +/obj/item/clothing/mask/smokable/cigarette/cigar/cohiba, /turf/simulated/floor/wood, -/area/crew_quarters/bar) +/area/tether/surfacebase/bar_backroom) +"axy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) "axz" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -12714,6 +13766,16 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_hallway) +"axQ" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "axR" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ @@ -12791,110 +13853,97 @@ /turf/simulated/floor/carpet, /area/tether/surfacebase/library/study) "axX" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - icon_state = "1-8" +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/window/reinforced{ + dir = 8; + icon_state = "rwindow" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/rnd/xenobiology/xenoflora) "axY" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"axZ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 +/obj/item/weapon/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"aya" = ( /obj/machinery/alarm{ dir = 4; icon_state = "alarm0"; pixel_x = -22; pixel_y = 0 }, -/obj/structure/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 8 - }, -/obj/effect/landmark/start{ - name = "Gardener" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"axZ" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aya" = ( -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayb" = ( -/obj/effect/landmark/start{ - name = "Gardener" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayc" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/machinery/vending/wallmed1/public{ + pixel_y = 28 }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 4 +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"ayd" = ( +/obj/machinery/light/small{ + dir = 1 }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "aye" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "ayf" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "bar"; + layer = 3.3; + name = "Bar Shutters" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "ayg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) "ayh" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/door/airlock{ + name = "Unit 3" }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayi" = ( /obj/structure/disposalpipe/sortjunction{ name = "Research"; @@ -13107,47 +14156,43 @@ /turf/simulated/floor/tiled, /area/rnd/staircase/thirdfloor) "ayC" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/machinery/door/airlock{ + name = "Unit 2" }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayD" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 10 +/obj/machinery/door/airlock{ + name = "Unit 1" }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayE" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/obj/machinery/recharge_station, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) "ayF" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/effect/floor_decal/corner/green{ - dir = 10 +/obj/machinery/light/small{ + dir = 4; + pixel_y = 0 }, -/obj/effect/floor_decal/corner/green{ - dir = 5 +/obj/structure/toilet{ + dir = 1 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"ayG" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/turf/simulated/floor/grass, /area/hydroponics) "ayH" = ( /obj/structure/disposalpipe/segment, @@ -13175,49 +14220,36 @@ /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) "ayI" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/grass, +/area/hydroponics) "ayJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 + dir = 9 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "ayK" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/door/airlock/glass_research{ + name = "Xenoflora Research"; + req_access = list(77); + req_one_access = list(77) }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/door/firedoor, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "ayL" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 - }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/bed/chair/wood, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "ayM" = ( -/obj/structure/table/woodentable, -/obj/machinery/computer/security/telescreen/entertainment{ - icon_state = "frame"; - pixel_x = 32; - pixel_y = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/wall, +/area/tether/surfacebase/barbackmaintenance) "ayN" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 6 @@ -13632,19 +14664,15 @@ /turf/simulated/wall, /area/rnd/research/researchdivision) "azp" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/common, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/rnd/xenobiology/xenoflora) "azq" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/mauve/border, @@ -13677,24 +14705,28 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "azs" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/lime/border{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "azt" = ( -/obj/structure/sign/botany, -/turf/simulated/wall, -/area/hydroponics) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "azu" = ( /obj/effect/floor_decal/borderfloorwhite, /obj/effect/floor_decal/corner/paleblue/border, @@ -13730,17 +14762,22 @@ /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) "azx" = ( -/obj/structure/table/bench/wooden, -/obj/machinery/light{ - dir = 4; - icon_state = "tube1" +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/structure/extinguisher_cabinet{ - dir = 8; - icon_state = "extinguisher_closed"; - pixel_x = 30 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "azy" = ( /obj/structure/disposalpipe/segment{ @@ -14006,83 +15043,85 @@ /turf/simulated/floor/wood, /area/library) "azX" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/decal/cleanable/dirt, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22 +/obj/structure/window/reinforced{ + dir = 8 }, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/tether/surfacebase/servicebackroom) "azY" = ( -/obj/structure/cable{ - icon_state = "0-8" +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 }, -/obj/machinery/power/apc{ - dir = 4; - name = "east bump"; - pixel_x = 28 - }, -/obj/effect/decal/cleanable/dirt, -/obj/effect/floor_decal/rust, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/tether/surfacebase/botanystorage) "azZ" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/requests_console{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aAa" = ( -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aAb" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aAc" = ( -/obj/machinery/door/firedoor/glass, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/glass{ - name = "Hydroponics"; - req_access = newlist(); - req_one_access = list(35,28) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 }, -/turf/simulated/floor/tiled/steel_grid, -/area/hydroponics) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"aAa" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/tether/surfacebase/servicebackroom) +"aAb" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/servicebackroom) +"aAc" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 10; + icon_state = "spline_plain" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "aAd" = ( /obj/structure/cable/green{ d1 = 4; @@ -14097,6 +15136,17 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aAe" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAf" = ( /obj/structure/cable/green{ d1 = 2; @@ -14138,10 +15188,49 @@ /obj/machinery/door/firedoor/glass/hidden/steel, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) +"aAh" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/rnd/xenobiology/xenoflora) +"aAi" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAj" = ( -/obj/machinery/light/flamp, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAk" = ( /obj/structure/flora/pottedplant/unusual, /obj/machinery/firealarm{ @@ -14154,6 +15243,15 @@ }, /turf/simulated/floor/wood, /area/rnd/outpost/xenobiology/outpost_office) +"aAl" = ( +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/structure/table/rack/steel, +/obj/machinery/light/small{ + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAm" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -14301,6 +15399,12 @@ /obj/item/device/tape, /turf/simulated/floor/carpet, /area/tether/surfacebase/library/study) +"aAx" = ( +/obj/structure/railing{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAy" = ( /obj/structure/table/woodentable, /obj/item/weapon/paper_bin{ @@ -14328,206 +15432,91 @@ name = "\improper Surface Civilian Substation" }) "aAC" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 5 - }, -/obj/machinery/light/small{ - dir = 8; - pixel_x = 0 +/obj/structure/window/reinforced{ + dir = 1 }, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/tether/surfacebase/botanystorage) "aAD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/area/tether/surfacebase/botanystorage) "aAE" = ( -/obj/machinery/door/airlock/maintenance/common{ - name = "Hydroponics Maintenance"; - req_access = list(35) - }, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/plating, -/area/hydroponics) +/obj/structure/closet/firecloset, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aAF" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, /obj/structure/cable/green{ - d1 = 2; + d1 = 1; d2 = 4; - icon_state = "2-4" + icon_state = "1-4" }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aAG" = ( -/obj/machinery/portable_atmospherics/hydroponics, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/disposalpipe/segment, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aAH" = ( -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aAI" = ( -/obj/machinery/portable_atmospherics/hydroponics, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/effect/floor_decal/corner/green{ - dir = 10 - }, -/obj/effect/floor_decal/corner/green{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aAJ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +/obj/effect/floor_decal/corner/lime/border{ dir = 9 }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aAI" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aAJ" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 6 }, /turf/simulated/floor/tiled, -/area/hydroponics) +/area/tether/surfacebase/botanystorage) "aAK" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, /obj/effect/floor_decal/corner/lime/border{ - dir = 4 + dir = 1 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 6 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/hydroponics) +/area/tether/surfacebase/botanystorage) "aAL" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, /obj/effect/floor_decal/borderfloor{ dir = 8 }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 10 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 10 - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 5 }, @@ -14559,24 +15548,29 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "aAP" = ( -/obj/structure/bed/chair/wood, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aAQ" = ( -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = 30 +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aAQ" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aAR" = ( -/obj/machinery/computer/arcade, -/obj/machinery/camera/network/civilian{ +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) "aAS" = ( /obj/machinery/light{ dir = 1 @@ -14872,6 +15866,19 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/testingrange) +"aBd" = ( +/obj/machinery/door/airlock/glass{ + name = "Hydroponics Storage"; + req_one_access = list(35,28) + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aBe" = ( /obj/machinery/alarm{ dir = 4; @@ -14985,15 +15992,30 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aBl" = ( -/obj/machinery/door/airlock/maintenance/common, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aBm" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/light/small, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aBn" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -15017,6 +16039,16 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) +"aBp" = ( +/obj/structure/table/rack/steel, +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) "aBq" = ( /obj/item/device/radio/intercom{ pixel_x = 0; @@ -15027,6 +16059,17 @@ }, /turf/simulated/floor/wood, /area/library) +"aBr" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aBs" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -15070,82 +16113,96 @@ /turf/simulated/floor/tiled, /area/rnd/staircase/thirdfloor) "aBx" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"aBy" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aBz" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aBA" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aBB" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 6 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 6 + }, +/obj/machinery/camera/network/tether{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aBC" = ( +/obj/item/weapon/stool/padded, /obj/effect/floor_decal/corner/lime/border{ - dir = 8 + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aBD" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aBE" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/computer/guestpass{ - dir = 4; - pixel_x = -28; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aBy" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aBz" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aBA" = ( -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass{ - name = "Hydroponics"; - req_access = newlist(); - req_one_access = list(35,28) - }, -/turf/simulated/floor/tiled/steel_grid, -/area/hydroponics) -"aBB" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) -"aBC" = ( -/obj/structure/table/gamblingtable, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aBD" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/storage/pill_bottle/dice, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aBF" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_pump/on{ +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ - pixel_x = 3 +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"aBF" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 }, -/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ - pixel_x = -3; - pixel_y = 0 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aBG" = ( -/obj/item/weapon/stool/padded, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/flora/ausbushes/fernybush, +/turf/simulated/floor/grass, +/area/hydroponics) "aBH" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /obj/effect/floor_decal/borderfloor{ @@ -15411,6 +16468,15 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aBZ" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCa" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) "aCb" = ( /obj/structure/table/reinforced, /obj/item/weapon/paper{ @@ -15494,6 +16560,18 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) +"aCf" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/corner/lime/border, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/box/sinpockets, +/obj/effect/floor_decal/corner/lime/border, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aCh" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable{ @@ -15511,34 +16589,45 @@ name = "\improper Surface Civilian Substation" }) "aCi" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"aCj" = ( +/obj/structure/table/bench/standard, /obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/effect/landmark/start{ + name = "Botanist" + }, +/obj/structure/disposalpipe/segment{ dir = 8 }, -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/super; - dir = 8; - name = "west bump"; - pixel_x = -30 - }, -/obj/structure/cable/green, /turf/simulated/floor/tiled, /area/hydroponics) -"aCj" = ( -/obj/machinery/biogenerator, -/obj/effect/floor_decal/borderfloor{ - dir = 4 +"aCk" = ( +/obj/structure/table/woodentable, +/obj/item/clothing/mask/smokable/pipe/cobpipe, +/obj/item/clothing/mask/smokable/cigarette/joint, +/obj/item/weapon/flame/lighter/random, +/obj/effect/floor_decal/corner/lime/border{ + dir = 6 }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCl" = ( +/obj/structure/table/bench/standard, /obj/effect/floor_decal/corner/lime/border{ dir = 4 }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 6 +/obj/effect/landmark/start{ + name = "Botanist" }, /turf/simulated/floor/tiled, /area/hydroponics) @@ -15548,11 +16637,36 @@ }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_hallway) +"aCn" = ( +/obj/machinery/portable_atmospherics/powered/pump/filled, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aCo" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/deck/cards, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) +"aCp" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) +"aCq" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) "aCr" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/mauve/border, @@ -15702,6 +16816,52 @@ /obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) +"aCC" = ( +/obj/machinery/vending/hydronutrients, +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCD" = ( +/obj/machinery/seed_storage/garden, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCE" = ( +/obj/item/bee_pack, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/weapon/tool/crowbar, +/obj/item/bee_smoker, +/obj/item/beehive_assembly, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/structure/closet/crate/hydroponics{ + desc = "All you need to start your own honey farm."; + name = "beekeeping crate" + }, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/beehive_assembly, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/bee_pack, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/item/honey_frame, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aCF" = ( /obj/machinery/light/small{ dir = 4; @@ -15725,6 +16885,47 @@ }, /turf/simulated/floor/wood, /area/library) +"aCI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"aCJ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aCK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/junction{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aCL" = ( /obj/machinery/power/breakerbox/activated{ RCon_tag = "Surface Civilian Substation Bypass" @@ -15807,15 +17008,31 @@ name = "\improper Surface Civilian Substation" }) "aCR" = ( -/obj/machinery/seed_extractor, -/obj/effect/floor_decal/borderfloor{ - dir = 4 +/obj/structure/table/glass, +/obj/structure/window/reinforced{ + dir = 8 }, /obj/effect/floor_decal/corner/lime/border{ - dir = 4 + dir = 8 }, /turf/simulated/floor/tiled, /area/hydroponics) +"aCS" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/bar) +"aCT" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aCU" = ( /obj/structure/cable/green{ d1 = 1; @@ -15847,6 +17064,26 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) +"aCW" = ( +/obj/machinery/seed_extractor, +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aCX" = ( +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals4{ + dir = 6 + }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aCY" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -16145,6 +17382,13 @@ /obj/random/maintenance/clean, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) +"aDC" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 1 + }, +/obj/machinery/smartfridge, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aDD" = ( /obj/structure/table/bench/wooden, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ @@ -16203,6 +17447,13 @@ }, /turf/simulated/open, /area/tether/surfacebase/public_garden_three) +"aDI" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aDJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -16232,6 +17483,15 @@ /obj/machinery/light, /turf/simulated/floor/grass, /area/tether/surfacebase/public_garden_three) +"aDM" = ( +/obj/machinery/door/airlock/glass{ + name = "Hydroponics"; + req_access = newlist(); + req_one_access = list(35,28) + }, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aDN" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lime/border, @@ -16305,20 +17565,17 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) "aDV" = ( -/obj/effect/floor_decal/borderfloor{ +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, -/obj/effect/floor_decal/corner/lightgrey/border{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/machinery/light{ - dir = 4 +/obj/structure/disposalpipe/sortjunction{ + dir = 4; + icon_state = "pipe-j1s"; + name = "Service"; + sortType = "Service" }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) @@ -16336,6 +17593,36 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aDX" = ( +/obj/machinery/door/airlock{ + name = "Bar Backroom"; + req_access = list(25) + }, +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/obj/effect/floor_decal/spline/plain, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/bar_backroom) +"aDY" = ( +/obj/structure/flora/tree/jungle, +/turf/simulated/floor/grass, +/area/hydroponics) "aDZ" = ( /obj/structure/cable/green{ d1 = 1; @@ -16375,12 +17662,11 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "aEd" = ( -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction, /turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/area/hallway/lower/third_south) "aEe" = ( /obj/structure/table/reinforced, /obj/machinery/newscaster{ @@ -16423,12 +17709,9 @@ /turf/simulated/floor/tiled/dark, /area/bridge) "aEh" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/effect/landmark/start{ - name = "Chef" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) +/obj/structure/flora/ausbushes/sunnybush, +/turf/simulated/floor/grass, +/area/hydroponics) "aEi" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -16461,37 +17744,45 @@ /turf/simulated/floor/plating, /area/maintenance/commandmaint) "aEk" = ( -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aEl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aEl" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aEm" = ( -/obj/structure/table/bench/wooden, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aEn" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 }, -/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, -/area/crew_quarters/bar) +/area/tether/surfacebase/bar_backroom) +"aEm" = ( +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aEn" = ( +/obj/structure/closet/secure_closet/hydroponics, +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aEo" = ( /obj/structure/cable{ icon_state = "1-2" @@ -16600,17 +17891,23 @@ /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_hallway) "aEx" = ( -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/structure/window/reinforced{ dir = 8 }, -/obj/machinery/light, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) "aEy" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -16649,22 +17946,18 @@ /turf/simulated/floor/tiled/techmaint, /area/tether/surfacebase/surface_three_hall) "aEB" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/maintenance/int{ - name = "Emergency Storage"; - req_one_access = list() +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 }, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aEC" = ( /obj/structure/bed/chair/office/dark{ dir = 8 @@ -16687,18 +17980,9 @@ /turf/simulated/floor/wood, /area/library) "aEF" = ( -/obj/structure/table/rack{ - dir = 1 - }, -/obj/item/clothing/suit/fire/firefighter, -/obj/item/weapon/tank/oxygen, -/obj/item/clothing/mask/gas, -/obj/item/weapon/extinguisher, -/obj/item/clothing/head/hardhat/red, -/obj/item/clothing/glasses/meson, -/obj/item/weapon/storage/briefcase/inflatable, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aEG" = ( /obj/structure/bed/chair/comfy/black{ dir = 4 @@ -16740,33 +18024,37 @@ /turf/simulated/floor/wood, /area/library) "aEL" = ( -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/apc; - dir = 8; - name = "west bump"; - pixel_x = -28 +/obj/structure/table/standard{ + name = "plastic table frame" }, -/obj/structure/cable{ - icon_state = "0-4" +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/borderfloor, +/obj/item/weapon/tool/wrench, +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 }, -/obj/structure/table/standard, -/obj/item/weapon/storage/box/lights/mixed, -/obj/item/weapon/storage/box/lights/mixed, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/item/weapon/tool/wrench, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aEM" = ( -/obj/machinery/space_heater, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) -"aEN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/table/standard{ + name = "plastic table frame" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/item/weapon/material/knife, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/minihoe, +/obj/item/weapon/material/knife, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lime/border{ + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aEN" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aEO" = ( /obj/item/weapon/dice/d20, /obj/item/weapon/dice, @@ -16820,15 +18108,25 @@ /turf/simulated/floor/wood, /area/library) "aES" = ( -/obj/machinery/portable_atmospherics/powered/pump/filled, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) -"aET" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aET" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" + }, +/obj/item/weapon/stool/padded, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "aEU" = ( /obj/structure/bookcase{ @@ -16857,49 +18155,68 @@ /turf/simulated/floor/wood, /area/library) "aEW" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" +/obj/effect/floor_decal/spline/plain{ + dir = 4 }, -/turf/simulated/floor/wood, +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_soft/full{ + dir = 8; + icon_state = "soda_dispenser" + }, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "aEX" = ( -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/grass, +/area/hydroponics) "aEY" = ( -/obj/machinery/firealarm{ - pixel_x = -30 +/obj/effect/floor_decal/spline/plain{ + dir = 8 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"aEZ" = ( /obj/machinery/light{ - dir = 8; + dir = 4; icon_state = "tube1" }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"aEZ" = ( -/obj/machinery/hologram/holopad, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass, +/area/hydroponics) "aFa" = ( -/obj/effect/landmark{ - name = "Observer-Start" - }, -/obj/machinery/light/flamp, +/obj/structure/flora/pottedplant, /turf/simulated/floor/wood, /area/crew_quarters/bar) "aFb" = ( -/obj/structure/grille, -/obj/structure/window/reinforced/full, -/obj/machinery/door/firedoor, -/obj/structure/window/reinforced{ - dir = 1 +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 }, -/turf/simulated/floor/plating, -/area/crew_quarters/bar) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFc" = ( /obj/structure/bed/chair/office/dark{ dir = 4 @@ -16933,16 +18250,19 @@ /turf/simulated/floor/outdoors/grass/sif/virgo3b, /area/tether/surfacebase/outside/outside3) "aFg" = ( -/obj/structure/disposalpipe/segment, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFh" = ( /obj/effect/decal/cleanable/blood, /obj/effect/decal/remains/deer, @@ -16989,14 +18309,35 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aFk" = ( -/obj/structure/table/standard, -/obj/random/maintenance/clean, -/obj/random/maintenance/medical, -/obj/item/device/t_scanner, -/obj/effect/decal/cleanable/dirt, -/obj/random/junk, -/turf/simulated/floor/plating, -/area/maintenance/lower/atrium) +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aFl" = ( +/obj/structure/reagent_dispensers/watertank, +/obj/item/weapon/reagent_containers/glass/bucket, +/obj/effect/floor_decal/borderfloor, +/obj/effect/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFm" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ @@ -17079,6 +18420,16 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_north_airlock) +"aFq" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aFr" = ( /obj/structure/cable/green{ d1 = 1; @@ -17109,6 +18460,16 @@ }, /turf/simulated/floor/wood, /area/library) +"aFv" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aFw" = ( /obj/structure/closet/crate, /obj/item/target, @@ -17138,86 +18499,92 @@ name = "\improper Surface Civilian Substation" }) "aFy" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/item/device/radio/intercom{ - dir = 8; - pixel_x = -24 - }, -/obj/structure/sink{ - dir = 8; - icon_state = "sink"; - pixel_x = -12; - pixel_y = 8 - }, -/obj/effect/landmark/start{ - name = "Gardener" - }, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aFA" = ( -/obj/structure/bed/chair/wood{ +/obj/machinery/light/small{ dir = 1 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"aFz" = ( +/obj/structure/extinguisher_cabinet{ + dir = 8; + icon_state = "extinguisher_closed"; + pixel_x = 30 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/grass, +/area/hydroponics) +"aFA" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"aFB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4; + icon_state = "map-scrubbers" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/effect/floor_decal/steeldecal/steel_decals5{ + dir = 1 }, -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/effect/floor_decal/steeldecal/steel_decals5, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/shuttle_pad) "aFD" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/corner/lime/border{ + dir = 10 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 +/obj/machinery/alarm{ + alarm_id = "pen_nine"; + breach_detection = 0; + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/effect/floor_decal/corner/lime/border, +/obj/machinery/power/apc{ + dir = 2; + name = "south bump"; + pixel_y = -24 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/light/flamp, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/obj/structure/cable/green, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -17240,40 +18607,23 @@ /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_main) "aFG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/disposalpipe/segment{ - dir = 2; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFH" = ( -/obj/machinery/light, -/obj/item/device/radio/intercom{ - dir = 2; - pixel_y = -24 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 }, -/obj/structure/table/bench/wooden, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFI" = ( -/obj/structure/table/woodentable, -/obj/machinery/alarm{ - dir = 1; - pixel_y = -25 +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aFJ" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -17289,6 +18639,16 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_north_airlock) +"aFK" = ( +/obj/structure/bed/chair/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aFL" = ( /obj/structure/window/reinforced/full, /obj/structure/grille, @@ -17306,6 +18666,9 @@ }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_north_airlock) +"aFM" = ( +/turf/simulated/wall, +/area/tether/surfacebase/servicebackroom) "aFN" = ( /obj/structure/table/reinforced, /obj/machinery/recharger/wallcharger{ @@ -17324,6 +18687,22 @@ /obj/item/weapon/storage/bag/trash, /turf/simulated/floor/tiled, /area/rnd/research/testingrange) +"aFO" = ( +/obj/machinery/door/airlock{ + name = "Service"; + req_one_access = list(35,28) + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aFP" = ( +/turf/simulated/wall, +/area/tether/surfacebase/botanystorage) "aFQ" = ( /obj/structure/cable/green{ d1 = 4; @@ -17355,6 +18734,26 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/testingrange) +"aFR" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aFS" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aFT" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/mauve/border, @@ -17419,65 +18818,102 @@ name = "\improper Surface Civilian Substation" }) "aFY" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 10 +/obj/machinery/button/windowtint{ + id = "draama"; + layer = 3.3; + name = "Mystery Window Tint Control"; + pixel_x = 3; + pixel_y = -29; + range = 10 }, -/obj/structure/closet/secure_closet/hydroponics, -/obj/effect/floor_decal/corner/lime/border{ - dir = 10 +/obj/machinery/button/remote/blast_door{ + id = "DRAMATIC"; + name = "Dramatic Blast Doors"; + pixel_x = 24; + pixel_y = -10 }, -/turf/simulated/floor/tiled, -/area/hydroponics) +/obj/machinery/button/remote/blast_door{ + id = "Druma"; + name = "Entertainment Shutter Control"; + pixel_x = 24; + pixel_y = 10 + }, +/obj/item/weapon/stool/padded, +/obj/effect/landmark/start{ + name = "Entertainer" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) "aFZ" = ( -/obj/machinery/disposal, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/yellow{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/visible/yellow{ + dir = 5; + icon_state = "intact" }, /turf/simulated/floor/tiled, -/area/hydroponics) +/area/rnd/xenobiology/xenoflora_storage) "aGa" = ( -/obj/structure/reagent_dispensers/watertank, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aGb" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/item/weapon/reagent_containers/glass/bucket, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aGc" = ( -/obj/structure/table/standard{ - name = "plastic table frame" - }, -/obj/item/weapon/material/knife, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/minihoe, -/obj/item/weapon/material/knife, -/obj/effect/floor_decal/borderfloor, -/obj/effect/floor_decal/corner/lime/border, -/turf/simulated/floor/tiled, -/area/hydroponics) -"aGd" = ( -/obj/machinery/seed_storage/garden{ - dir = 1 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 6 - }, /obj/effect/floor_decal/corner/lime/border{ - dir = 6 + dir = 10 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aGb" = ( +/obj/effect/floor_decal/corner/lime/border, +/obj/machinery/light, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aGc" = ( +/obj/effect/floor_decal/corner/lime/bordercorner{ + dir = 8 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aGd" = ( +/obj/machinery/door/airlock{ + name = "Service"; + req_one_access = list(35,28) + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, /turf/simulated/floor/tiled, -/area/hydroponics) +/area/tether/surfacebase/servicebackroom) +"aGe" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aGf" = ( /obj/machinery/status_display{ pixel_x = 32; @@ -17502,20 +18938,81 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"aGk" = ( -/obj/machinery/door/airlock{ - name = "Unisex Restrooms" +"aGg" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGh" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGi" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/structure/disposalpipe/trunk, +/obj/machinery/disposal, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aGj" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/tiled/white, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGk" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" + }, +/obj/item/weapon/stool/padded, +/mob/living/carbon/human/monkey/punpun, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "aGl" = ( /obj/structure/table/reinforced, @@ -17601,6 +19098,37 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_north_airlock) +"aGq" = ( +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGr" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aGs" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/research{ @@ -17624,6 +19152,44 @@ }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_south_airlock) +"aGt" = ( +/obj/structure/extinguisher_cabinet{ + dir = 4; + icon_state = "extinguisher_closed"; + pixel_x = -30 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aGu" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/machinery/door/firedoor/glass/hidden/steel, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aGv" = ( +/obj/machinery/hologram/holopad, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aGw" = ( /obj/structure/bookcase{ name = "bookcase (Non-Fiction)" @@ -17663,24 +19229,24 @@ name = "\improper Surface Civilian Substation" }) "aGA" = ( -/obj/structure/sign/directions/medical{ - dir = 4; - pixel_y = 8 +/obj/effect/floor_decal/borderfloor/corner{ + dir = 8 }, -/obj/structure/sign/directions/science{ - dir = 8; - pixel_y = 3 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 }, -/obj/structure/sign/directions/security{ - dir = 8; - pixel_y = -4 +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 1 }, -/obj/structure/sign/directions/engineering{ - dir = 8; - pixel_y = -10 +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 }, -/turf/simulated/wall, -/area/hydroponics) +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aGB" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -17712,52 +19278,90 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"aGF" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/item/weapon/stool/padded, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"aGG" = ( -/obj/item/weapon/stool/padded, -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"aGI" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ +"aGD" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 9 - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) -"aGJ" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aGE" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"aGF" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aGG" = ( +/obj/machinery/vending/cigarette, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGH" = ( +/obj/structure/table/woodentable, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aGI" = ( +/obj/machinery/vending/cola/soft, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aGJ" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aGK" = ( /turf/simulated/wall, /area/crew_quarters/barrestroom) @@ -17983,6 +19587,10 @@ }, /turf/simulated/floor/wood, /area/library) +"aHe" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aHf" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -18081,73 +19689,73 @@ /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) "aHk" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment{ - dir = 8; + dir = 4; icon_state = "pipe-c" }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aHl" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aHm" = ( -/obj/machinery/light{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lightgrey/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aHn" = ( -/obj/structure/extinguisher_cabinet{ - pixel_y = 30 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 +/obj/machinery/door/window/westright{ + req_one_access = list(35,28) }, /obj/effect/floor_decal/corner/lime/border{ - dir = 1 + dir = 10 }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled, -/area/hallway/lower/third_south) +/area/hydroponics) "aHo" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, +/obj/structure/closet/crate, /turf/simulated/floor/tiled, -/area/hallway/lower/third_south) +/area/tether/surfacebase/servicebackroom) +"aHp" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aHq" = ( +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aHr" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/sign/department/bar, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/crew_quarters/bar) +"aHs" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/pill_bottle/dice, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "aHt" = ( /obj/structure/cable/green{ d1 = 1; @@ -18168,75 +19776,79 @@ dir = 1 }, /area/crew_quarters/bar) -"aHx" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "bar"; - layer = 3.3; - name = "Bar Shutters" +"aHv" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"aHw" = ( /obj/structure/cable/green{ d1 = 1; - d2 = 2; - icon_state = "1-2" + d2 = 4; + icon_state = "1-4" }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aHx" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aHy" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/drinks/glass2/pint, -/obj/machinery/door/blast/shutters{ - dir = 1; - id = "bar"; - layer = 3.3; - name = "Bar Shutters" - }, -/turf/simulated/floor/lino, +/obj/machinery/computer/arcade, +/turf/simulated/floor/wood, /area/crew_quarters/bar) "aHz" = ( -/obj/structure/table/marble, -/obj/machinery/door/blast/shutters{ - dir = 1; - id = "bar"; - layer = 3.3; - name = "Bar Shutters" +/obj/structure/device/piano, +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, /turf/simulated/floor/lino, -/area/crew_quarters/bar) +/area/tether/surfacebase/entertainment/stage) "aHA" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/food/drinks/glass2/shot, -/obj/machinery/door/blast/shutters{ - dir = 1; - id = "bar"; - layer = 3.3; - name = "Bar Shutters" +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aHB" = ( -/obj/structure/extinguisher_cabinet{ - dir = 8; - icon_state = "extinguisher_closed"; - pixel_x = 30 +/obj/structure/table/gamblingtable, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/machinery/door/window/brigdoor/northleft{ - name = "Bar"; - req_access = list(25) - }, -/turf/simulated/floor/lino, +/turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aHC" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/spiderling_remains, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) "aHD" = ( /obj/structure/sink{ dir = 4; @@ -18610,72 +20222,105 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"aIk" = ( -/obj/structure/table/marble, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ +"aId" = ( +/obj/effect/floor_decal/industrial/warning, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"aIe" = ( +/obj/structure/railing{ dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/door/blast/shutters{ - dir = 8; - id = "bar"; - layer = 3.3; - name = "Bar Shutters" +/obj/effect/floor_decal/industrial/warning/corner{ + dir = 8 }, +/obj/effect/decal/cleanable/dirt, +/obj/effect/decal/cleanable/generic, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"aIf" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/common, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/lino, +/turf/simulated/floor/tiled/techmaint, /area/crew_quarters/bar) -"aIl" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 10 +"aIg" = ( +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/spline/plain{ + dir = 4 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/structure/disposalpipe/segment{ + dir = 8 }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) +"aIh" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"aIi" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"aIj" = ( /obj/structure/cable/green{ d1 = 2; d2 = 8; icon_state = "2-8" }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"aIm" = ( -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"aIn" = ( -/obj/machinery/computer/guestpass{ - dir = 8; - pixel_x = 25 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"aIo" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 - }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aIk" = ( /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"aIl" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) +"aIm" = ( +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"aIn" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) +"aIo" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" + }, +/obj/item/weapon/stool/padded, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "aIp" = ( /obj/structure/flora/pottedplant/unusual, /obj/effect/floor_decal/borderfloorblack{ @@ -18925,6 +20570,10 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aIH" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "aII" = ( /obj/structure/sign/department/bar{ pixel_x = 32 @@ -18933,19 +20582,23 @@ /turf/simulated/floor/tiled, /area/hallway/lower/third_south) "aIJ" = ( -/obj/machinery/disposal, -/obj/structure/disposalpipe/trunk{ - dir = 1 +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 8; + id = "bar"; + layer = 3.3; + name = "Bar Shutters" }, -/obj/machinery/camera/network/civilian{ - dir = 4 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/wood, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "aIK" = ( -/obj/machinery/light, -/obj/structure/flora/pottedplant, -/turf/simulated/floor/wood, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/lino, /area/crew_quarters/bar) "aIL" = ( /obj/machinery/camera/network/security, @@ -18962,31 +20615,32 @@ /turf/simulated/floor/lino, /area/crew_quarters/bar) "aIN" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/lino, +/obj/structure/table/gamblingtable, +/obj/item/weapon/deck/cards, +/turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aIO" = ( -/obj/machinery/vending/boozeomat, -/obj/machinery/light, -/turf/simulated/floor/lino, +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/carpet/turcarpet, /area/crew_quarters/bar) "aIP" = ( -/obj/machinery/smartfridge/drinks, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, /turf/simulated/floor/lino, /area/crew_quarters/bar) "aIQ" = ( -/obj/structure/flora/pottedplant, -/obj/machinery/camera/network/civilian{ - dir = 9 +/obj/structure/bed/chair/comfy{ + dir = 1 }, +/obj/effect/landmark/start{ + name = "Bartender" + }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/wood, -/area/crew_quarters/bar) +/area/tether/surfacebase/bar_backroom) "aIR" = ( /obj/structure/disposalpipe/trunk{ dir = 8 @@ -19005,61 +20659,36 @@ /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) "aIS" = ( -/obj/structure/table/marble, -/obj/item/weapon/reagent_containers/glass/rag, -/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, -/obj/item/weapon/book/manual/barman_recipes, -/turf/simulated/floor/lino, +/obj/machinery/vending/cigarette{ + dir = 1 + }, +/turf/simulated/floor/wood, /area/crew_quarters/bar) "aIT" = ( -/obj/structure/table/marble, -/obj/item/weapon/flame/lighter/zippo, -/obj/item/weapon/tool/screwdriver, -/obj/item/clothing/head/that{ - pixel_x = 4; - pixel_y = 6 +/obj/machinery/alarm{ + pixel_y = 25 }, -/obj/machinery/light, -/obj/machinery/button/remote/blast_door{ - dir = 1; - id = "bar"; - name = "Bar shutters"; - pixel_x = 0; - pixel_y = -25 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aIU" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" +/obj/machinery/vending/snack{ + dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "aIV" = ( -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 }, -/obj/structure/mirror{ - pixel_x = 27 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 +/obj/structure/disposalpipe/junction{ + dir = 2; + icon_state = "pipe-j2" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aIW" = ( /obj/machinery/light{ dir = 8; @@ -19161,6 +20790,32 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_breakroom) +"aJc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aJd" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, @@ -19274,6 +20929,10 @@ /obj/machinery/door/airlock/glass_external/public, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aJq" = ( +/obj/structure/bed/chair/comfy, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aJr" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -19300,44 +20959,26 @@ /turf/simulated/wall, /area/tether/surfacebase/bar_backroom) "aJu" = ( -/obj/machinery/door/airlock{ - name = "Bar Backroom"; - req_access = list(25) +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass, -/turf/simulated/floor/lino, -/area/tether/surfacebase/bar_backroom) +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) "aJv" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/apc; - dir = 8; - name = "west bump"; - pixel_x = -28 +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/obj/structure/cable/green, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "aJw" = ( -/obj/structure/sink{ - dir = 4; - icon_state = "sink"; - pixel_x = 11; - pixel_y = 0 - }, -/obj/structure/mirror{ - pixel_x = 27 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/turf/simulated/floor/plating, +/area/hydroponics/cafegarden) "aJx" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/structure/disposalpipe/segment, @@ -19453,6 +21094,22 @@ /obj/effect/floor_decal/industrial/warning, /turf/simulated/floor/tiled, /area/rnd/research/testingrange) +"aJJ" = ( +/obj/effect/floor_decal/corner/lime/border, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aJK" = ( +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "aJL" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 4; @@ -19604,15 +21261,17 @@ /turf/simulated/floor/tiled/steel_grid, /area/assembly/chargebay) "aJV" = ( -/obj/structure/table/marble, -/obj/machinery/chemical_dispenser/bar_alc/full{ - dir = 1 +/obj/effect/floor_decal/corner/lime/border{ + dir = 6 }, -/obj/machinery/camera/network/civilian{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) "aJW" = ( /obj/effect/floor_decal/industrial/warning{ dir = 1; @@ -19664,11 +21323,24 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "aKc" = ( -/obj/machinery/camera/network/civilian{ - dir = 4 +/obj/structure/table/reinforced, +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 }, -/turf/simulated/floor/tiled/freezer, -/area/crew_quarters/freezer) +/obj/machinery/door/blast/shutters{ + dir = 1; + id = "kitchen2"; + layer = 3.3; + name = "Kitchen Shutters" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "aKd" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 8; @@ -19728,6 +21400,22 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/tether/surfacebase/shuttle_pad) +"aKl" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 6 + }, +/obj/machinery/portable_atmospherics/hydroponics, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/botanystorage) +"aKm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aKn" = ( /obj/machinery/portable_atmospherics/powered/scrubber/huge/stationary{ scrub_id = "atrium" @@ -19735,65 +21423,63 @@ /turf/simulated/floor/tiled/techmaint, /area/crew_quarters/bar) "aKo" = ( -/obj/structure/closet/secure_closet/bar{ - req_access = list(25) - }, -/obj/machinery/camera/network/civilian{ +/obj/item/weapon/stool/padded, +/obj/effect/floor_decal/spline/plain{ dir = 4 }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) "aKp" = ( -/obj/structure/sink{ - pixel_y = 25 +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/paper{ + desc = ""; + info = "Yes hello, the goat in the freezer is named 'Spike'. Please do not fuck with Spike. He doesn't have the best temper."; + name = "Important notice from Rancher Jim" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"aKq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) +"aKr" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"aKs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 }, /turf/simulated/floor/wood, /area/tether/surfacebase/bar_backroom) -"aKq" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5 +"aKt" = ( +/obj/machinery/vending/hydronutrients, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aKu" = ( +/obj/effect/floor_decal/corner/grey/diagonal, /obj/structure/cable/green{ d1 = 1; d2 = 2; icon_state = "1-2" }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aKr" = ( -/obj/machinery/light/small{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aKs" = ( -/obj/structure/table/woodentable, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/obj/structure/sign/securearea{ - desc = "Under the painting a plaque reads: 'While the meat grinder may not have spared you, fear not. Not one part of you has gone to waste... You were delicious.'"; - icon_state = "monkey_painting"; - name = "Mr. Deempisi portrait"; - pixel_x = 4; - pixel_y = 28 - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aKt" = ( -/obj/machinery/camera/network/civilian, -/turf/simulated/floor/grass, -/area/hydroponics/cafegarden) -"aKu" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, /turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/area/crew_quarters/kitchen) "aKv" = ( /obj/machinery/disposal, /obj/structure/disposalpipe/trunk{ @@ -19806,31 +21492,46 @@ /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) "aKw" = ( -/obj/machinery/light/small{ - dir = 1 - }, +/obj/machinery/biogenerator, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aKx" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 4 + }, +/obj/effect/floor_decal/corner/beige/border{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 10 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 9 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) -"aKy" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 1 + dir = 8 }, -/obj/machinery/firealarm{ - dir = 4; - pixel_x = 26 +/obj/structure/disposalpipe/segment{ + dir = 8 }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aKy" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/area/crew_quarters/kitchen) "aKz" = ( /obj/structure/window/basic/full, /obj/structure/grille, @@ -20094,63 +21795,74 @@ /turf/simulated/floor/tiled/techfloor, /area/tether/surfacebase/shuttle_pad) "aLb" = ( -/obj/structure/table/woodentable, -/obj/machinery/alarm{ - dir = 4; - icon_state = "alarm0"; - pixel_x = -22; - pixel_y = 0 +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "aLc" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aLd" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; +/obj/structure/table/standard, +/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker{ + pixel_x = -3; pixel_y = 0 }, +/obj/item/weapon/reagent_containers/food/condiment/small/peppermill{ + pixel_x = 3 + }, /obj/structure/cable/green{ d1 = 1; - d2 = 4; - icon_state = "1-4" + d2 = 2; + icon_state = "1-2" }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aLe" = ( -/obj/effect/landmark/start{ - name = "Bartender" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aLf" = ( -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aLg" = ( -/obj/item/weapon/storage/secure/safe{ - pixel_x = 30; - pixel_z = 0 - }, -/obj/effect/landmark/start{ - name = "Bartender" - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) -"aLh" = ( /turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/area/crew_quarters/kitchen) +"aLd" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"aLe" = ( +/obj/machinery/smartfridge/drying_rack, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aLf" = ( +/obj/structure/sign/directions/evac{ + dir = 8 + }, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/door/firedoor, +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/turf/simulated/floor/tiled/white, +/area/hydroponics) +"aLg" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 6; + icon_state = "warning_dust" + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1; + icon_state = "warning_dust" + }, +/obj/machinery/appliance/mixer/candy, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"aLh" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aLi" = ( /obj/structure/disposalpipe/segment, /obj/structure/cable/green{ @@ -20371,81 +22083,94 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "aLC" = ( -/obj/structure/table/woodentable, -/obj/item/weapon/storage/box/beanbags, -/obj/item/weapon/gun/projectile/shotgun/doublebarrel, -/obj/item/weapon/paper{ - info = "This permit signifies that the Bartender is permitted to posess this firearm in the bar, and ONLY the bar. Failure to adhere to this permit will result in confiscation of the weapon and possibly arrest."; - name = "Shotgun permit" +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted{ + dir = 1 }, -/obj/machinery/light_switch{ - pixel_x = -25 - }, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLD" = ( -/obj/structure/table/woodentable, -/obj/machinery/reagentgrinder, -/obj/item/weapon/reagent_containers/food/drinks/shaker, -/obj/item/weapon/packageWrap, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLE" = ( -/obj/structure/table/woodentable, -/obj/machinery/firealarm{ - dir = 1; - pixel_y = -24 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/obj/item/weapon/reagent_containers/food/drinks/metaglass, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLF" = ( -/obj/machinery/power/apc{ - dir = 2; - name = "south bump"; - pixel_y = -28 - }, -/obj/structure/cable/green, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLG" = ( -/obj/structure/reagent_dispensers/beerkeg, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 4 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/tether/surfacebase/botanystorage) "aLH" = ( -/obj/structure/closet/gmcloset{ - name = "formal wardrobe" +/obj/structure/disposalpipe/trunk{ + dir = 1 }, -/obj/item/glass_jar, -/obj/item/device/retail_scanner/civilian, -/obj/item/device/retail_scanner/civilian, -/turf/simulated/floor/wood, -/area/tether/surfacebase/bar_backroom) +/obj/machinery/disposal/deliveryChute, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock2" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLI" = ( -/obj/machinery/door/airlock{ - name = "Unit 3" +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLJ" = ( -/obj/machinery/door/airlock{ - name = "Unit 2" +/obj/structure/table/woodentable, +/obj/item/weapon/storage/box/sinpockets, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLK" = ( -/obj/machinery/door/airlock{ - name = "Unit 1" +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock2" }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aLL" = ( /obj/machinery/camera/network/civilian{ dir = 1 @@ -20666,23 +22391,25 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) "aMg" = ( -/obj/machinery/light/small{ +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ dir = 4; - pixel_y = 0 + icon_state = "twindow" }, -/obj/machinery/recharge_station, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aMh" = ( -/obj/machinery/light/small{ - dir = 4; - pixel_y = 0 - }, -/obj/structure/toilet{ +/obj/structure/bed/chair/comfy{ dir = 1 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aMi" = ( /obj/structure/flora/pottedplant/unusual, /obj/machinery/firealarm{ @@ -22369,6 +24096,13 @@ }, /turf/simulated/wall, /area/rnd/outpost/xenobiology/outpost_breakroom) +"aPF" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock2" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aPG" = ( /obj/random/mob/mouse, /turf/simulated/floor/tiled, @@ -23089,12 +24823,14 @@ /turf/simulated/wall, /area/rnd/outpost/xenobiology/outpost_autopsy) "aRm" = ( -/obj/machinery/camera/network/outside{ - dir = 5; - icon_state = "camera" +/obj/machinery/conveyor_switch/oneway{ + id = "serviceblock2" }, -/turf/simulated/floor/outdoors/grass/sif/virgo3b, -/area/tether/surfacebase/outside/outside3) +/obj/effect/floor_decal/industrial/warning{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aRn" = ( /obj/machinery/newscaster, /turf/simulated/wall, @@ -23482,6 +25218,10 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/rnd/outpost/xenobiology/outpost_main) +"aRX" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aRY" = ( /obj/structure/bed/roller, /obj/structure/extinguisher_cabinet{ @@ -23585,6 +25325,10 @@ }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_main) +"aSh" = ( +/obj/effect/floor_decal/industrial/outline/blue, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aSi" = ( /obj/structure/window/basic/full, /obj/structure/window/basic{ @@ -23624,6 +25368,13 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) +"aSl" = ( +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aSm" = ( /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 4 @@ -23776,6 +25527,19 @@ }, /turf/simulated/floor/tiled, /area/rnd/outpost/xenobiology/outpost_main) +"aSx" = ( +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aSy" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aSz" = ( /obj/structure/window/basic/full, /obj/structure/window/basic, @@ -24189,6 +25953,18 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) +"aTc" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aTd" = ( /obj/structure/table/reinforced, /obj/effect/floor_decal/borderfloorwhite{ @@ -24407,6 +26183,12 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) +"aTw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aTx" = ( /obj/structure/window/basic/full, /obj/structure/grille, @@ -24493,6 +26275,68 @@ }, /turf/simulated/floor/tiled/dark, /area/rnd/outpost/xenobiology/outpost_south_airlock) +"aTE" = ( +/obj/structure/table/woodentable, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"aTF" = ( +/obj/structure/table/glass, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 9 + }, +/obj/item/weapon/packageWrap, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) +"aTG" = ( +/obj/structure/table/woodentable, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/item/weapon/packageWrap, +/obj/item/weapon/packageWrap, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aTH" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aTI" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/storage/box/sinpockets, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"aTJ" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock1" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aTK" = ( /obj/structure/table/glass, /obj/machinery/light{ @@ -24581,6 +26425,15 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aTS" = ( +/obj/machinery/conveyor_switch/oneway{ + id = "serviceblock1" + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aTT" = ( /obj/machinery/door/morgue{ dir = 2; @@ -24711,14 +26564,17 @@ /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) "aUg" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" }, -/obj/machinery/vending/wallmed1/public{ - pixel_y = 28 +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/barrestroom) +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aUh" = ( /obj/effect/floor_decal/steeldecal/steel_decals4, /obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers, @@ -24794,6 +26650,12 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aUn" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aUo" = ( /obj/machinery/door/airlock/multi_tile/glass, /obj/effect/floor_decal/industrial/warning/corner{ @@ -24819,6 +26681,23 @@ dir = 4 }, /area/hallway/lower/third_south) +"aUq" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/item/weapon/packageWrap, +/obj/item/device/destTagger{ + pixel_x = 4; + pixel_y = 3 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"aUr" = ( +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aUs" = ( /obj/effect/floor_decal/techfloor/corner{ dir = 8 @@ -24931,6 +26810,14 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) +"aUB" = ( +/obj/structure/plasticflaps, +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock1" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aUC" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/lime/bordercorner, @@ -25095,6 +26982,22 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/chemistry) +"aUT" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" + }, +/obj/structure/window/reinforced/tinted{ + dir = 8; + icon_state = "twindow" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aUU" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -25197,6 +27100,17 @@ }, /turf/simulated/floor/plating, /area/maintenance/lower/mining) +"aVd" = ( +/obj/machinery/conveyor{ + dir = 1; + id = "serviceblock1" + }, +/obj/structure/disposalpipe/trunk, +/obj/structure/disposaloutlet{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aVe" = ( /obj/structure/table/glass, /obj/item/weapon/storage/box/cups, @@ -25415,6 +27329,15 @@ }, /turf/simulated/floor/tiled/white, /area/tether/surfacebase/medical/triage) +"aVw" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aVx" = ( /obj/machinery/firealarm{ dir = 8; @@ -25422,6 +27345,12 @@ }, /turf/simulated/floor/grass, /area/tether/surfacebase/public_garden_three) +"aVy" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aVz" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -25440,11 +27369,27 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aVB" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aVC" = ( -/obj/structure/shuttle/engine/propulsion, -/turf/simulated/floor/reinforced, -/turf/simulated/shuttle/plating/carry, -/area/shuttle/tether) +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aVD" = ( /obj/effect/floor_decal/borderfloor{ dir = 5 @@ -25608,6 +27553,21 @@ }, /turf/simulated/floor/plating, /area/tether/surfacebase/security/lobby) +"aVO" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"aVP" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aVQ" = ( /obj/effect/floor_decal/borderfloor{ dir = 10 @@ -25620,6 +27580,19 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aVR" = ( +/obj/structure/table/glass, +/obj/machinery/door/window/westright{ + req_one_access = list(35,28) + }, +/obj/effect/floor_decal/corner/lime/border{ + dir = 8 + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) "aVS" = ( /obj/item/device/radio/intercom{ dir = 2; @@ -25864,6 +27837,28 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aWk" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"aWl" = ( +/obj/structure/table/woodentable, +/obj/random/drinkbottle, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "aWm" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -26112,6 +28107,38 @@ /obj/effect/floor_decal/steeldecal/steel_decals7, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aWC" = ( +/turf/simulated/wall, +/area/tether/surfacebase/entertainment/backstage) +"aWD" = ( +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_y = 8 + }, +/obj/structure/sign/directions/science{ + dir = 8; + pixel_y = 3 + }, +/obj/structure/sign/directions/security{ + dir = 8; + pixel_y = -4 + }, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = -10 + }, +/turf/simulated/wall, +/area/tether/surfacebase/entertainment/backstage) +"aWE" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/closet/crate/plastic, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/hydroponics) "aWF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -26183,6 +28210,10 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aWM" = ( +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/grass, +/area/hydroponics) "aWN" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -26431,6 +28462,46 @@ }, /turf/simulated/floor/wood, /area/library) +"aXg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"aXh" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/maintenance/int{ + name = "Entertainment Backroom"; + req_one_access = list(72) + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment/backstage) +"aXi" = ( +/obj/machinery/door/airlock/freezer{ + name = "Service"; + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/crew_quarters/freezer) +"aXj" = ( +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aXk" = ( /obj/structure/sign/directions/medical{ dir = 1; @@ -26600,6 +28671,19 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) +"aXv" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aXw" = ( /obj/structure/closet/hydrant{ pixel_x = 32 @@ -26809,6 +28893,15 @@ /obj/item/weapon/locator, /turf/simulated/floor/plating, /area/rnd/research_storage) +"aXK" = ( +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aXL" = ( /obj/structure/grille, /obj/structure/window/reinforced/full, @@ -26818,6 +28911,27 @@ }, /turf/simulated/floor/plating, /area/rnd/research_storage) +"aXM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/disposalpipe/junction/yjunction{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aXN" = ( /obj/effect/decal/cleanable/dirt, /obj/effect/floor_decal/rust, @@ -26857,22 +28971,69 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/plating, /area/rnd/research_storage) +"aXS" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"aXT" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aXU" = ( -/obj/machinery/computer/security/telescreen/entertainment{ - desc = "Damn, looks like it's on the clown world channel. I wonder what else is on?"; - icon_state = "frame"; - pixel_x = 0; - pixel_y = 32 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/bar) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aXV" = ( -/obj/machinery/atmospherics/unary/engine{ - dir = 1 +/obj/structure/disposalpipe/segment{ + dir = 8 }, -/turf/simulated/floor/reinforced, -/turf/simulated/shuttle/plating/carry, -/area/shuttle/tourbus/engines) +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aXW" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -27229,6 +29390,9 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) +"aYC" = ( +/turf/simulated/wall, +/area/tether/surfacebase/entertainment) "aYD" = ( /obj/machinery/computer/power_monitor{ dir = 8; @@ -27315,6 +29479,10 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) +"aYN" = ( +/obj/effect/floor_decal/corner/mauve/border, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aYO" = ( /turf/simulated/wall/r_wall, /area/maintenance/commandmaint) @@ -27443,6 +29611,23 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge_hallway) +"aZd" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) "aZe" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 4 @@ -27455,6 +29640,23 @@ }, /turf/simulated/floor/tiled/white, /area/rnd/outpost/xenobiology/outpost_first_aid) +"aZg" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 1 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aZh" = ( /obj/machinery/door/airlock/glass_command{ name = "Bridge"; @@ -27682,6 +29884,20 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"aZy" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) "aZz" = ( /obj/structure/bed/chair{ dir = 1 @@ -27719,6 +29935,24 @@ "aZC" = ( /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"aZD" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/machinery/station_map{ + pixel_y = 32 + }, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 2 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "aZE" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light{ @@ -27778,6 +30012,28 @@ }, /turf/simulated/floor/tiled/dark, /area/bridge) +"aZJ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aZK" = ( /obj/machinery/sleep_console, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -27791,6 +30047,39 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"aZM" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) "aZN" = ( /obj/structure/table/reinforced, /obj/machinery/photocopier/faxmachine{ @@ -27820,6 +30109,15 @@ /obj/item/weapon/pen/multi, /turf/simulated/floor/carpet, /area/crew_quarters/heads/hop) +"aZQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "aZR" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/structure/window/basic{ @@ -27846,6 +30144,14 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"aZT" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "aZU" = ( /obj/structure/table/woodentable, /obj/machinery/computer/skills{ @@ -27879,6 +30185,24 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"aZX" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/button/remote/blast_door{ + id = "kitchen"; + name = "Kitchen shutters"; + pixel_x = -24; + pixel_y = -24 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "aZY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28016,6 +30340,43 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"bah" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 8; + icon_state = "pdoor0" + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) "bai" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -28113,6 +30474,15 @@ /obj/structure/cable/green, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"baq" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "bar" = ( /obj/machinery/computer/communications, /obj/machinery/light/small{ @@ -28148,6 +30518,61 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"baw" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/foodcart, +/obj/machinery/light, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bax" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 8; + icon_state = "pdoor0" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 1; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bay" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/obj/structure/table/marble, +/obj/machinery/chemical_dispenser/bar_alc/full{ + dir = 8; + icon_state = "booze_dispenser" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) "baz" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -28160,6 +30585,88 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"baA" = ( +/obj/item/weapon/stool/padded, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/carpet/turcarpet, +/area/crew_quarters/bar) +"baB" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "bar"; + layer = 3.3; + name = "Bar Shutters" + }, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"baC" = ( +/obj/machinery/vending/cola{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"baD" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/corner/lightgrey/border{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"baE" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"baF" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/effect/landmark/start{ + name = "Chef" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "baG" = ( /obj/structure/bed/chair/comfy/brown{ dir = 8 @@ -28193,6 +30700,19 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"baI" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 2; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) "baJ" = ( /obj/structure/cable{ icon_state = "1-2" @@ -28265,6 +30785,34 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"baO" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/requests_console{ + pixel_x = 32; + pixel_y = -32 + }, +/obj/structure/extinguisher_cabinet{ + dir = 8; + icon_state = "extinguisher_closed"; + pixel_x = 30 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"baP" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) "baQ" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -28285,6 +30833,27 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"baR" = ( +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"baS" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"baT" = ( +/obj/machinery/alarm{ + dir = 1; + pixel_y = -22 + }, +/obj/machinery/media/jukebox, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) "baU" = ( /obj/structure/table/reinforced, /obj/machinery/computer/skills, @@ -28294,6 +30863,45 @@ /obj/machinery/computer/card, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"baW" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -25 + }, +/obj/machinery/computer/security/telescreen/entertainment{ + icon_state = "frame"; + pixel_x = 32; + pixel_y = 0 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"baX" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"baY" = ( +/obj/structure/window/reinforced/full, +/obj/structure/grille, +/obj/structure/window/reinforced/tinted, +/obj/structure/window/reinforced/tinted{ + dir = 4; + icon_state = "twindow" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"baZ" = ( +/obj/random/cutout, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) "bba" = ( /turf/simulated/floor/wood, /area/crew_quarters/captain) @@ -28315,6 +30923,63 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"bbd" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bbe" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/obj/machinery/vending/loadout/accessory, +/obj/machinery/alarm{ + dir = 8; + icon_state = "alarm0"; + pixel_x = 24 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bbf" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/alarm{ + dir = 4; + icon_state = "alarm0"; + pixel_x = -22 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bbg" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bbh" = ( +/obj/structure/bed/chair/wood{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) "bbi" = ( /obj/effect/floor_decal/industrial/outline/yellow, /obj/machinery/light, @@ -28329,6 +30994,37 @@ }, /turf/simulated/floor/tiled, /area/crew_quarters/heads/hop) +"bbk" = ( +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bbl" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bbm" = ( +/obj/structure/bed/chair/wood, +/obj/machinery/light{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bbn" = ( +/obj/structure/sign/directions/evac{ + dir = 1 + }, +/turf/simulated/wall, +/area/tether/surfacebase/entertainment) +"bbo" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "bbp" = ( /obj/structure/filingcabinet/chestdrawer, /turf/simulated/floor/tiled, @@ -28343,6 +31039,15 @@ /obj/structure/bed/chair/wood, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"bbr" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "bbs" = ( /obj/effect/floor_decal/corner/lightgrey{ dir = 9 @@ -28379,6 +31084,25 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"bbv" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "bbw" = ( /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, @@ -28420,6 +31144,26 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"bbz" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 8 + }, +/obj/effect/floor_decal/borderfloor/corner2{ + dir = 8 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 6 + }, +/obj/machinery/computer/guestpass{ + dir = 4; + pixel_x = -28; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) "bbA" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -28440,6 +31184,16 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"bbB" = ( +/obj/structure/disposalpipe/segment, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) "bbC" = ( /obj/item/device/radio/intercom{ dir = 8; @@ -28516,6 +31270,1077 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/captain) +"bbI" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"bbJ" = ( +/obj/machinery/icecream_vat, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"bbK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbM" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" + }, +/obj/item/weapon/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bbN" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"bbO" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbP" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbQ" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/reagent_containers/food/drinks/metaglass, +/obj/item/weapon/reagent_containers/food/drinks/metaglass, +/obj/item/weapon/reagent_containers/food/drinks/metaglass, +/obj/item/weapon/reagent_containers/food/drinks/metaglass, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"bbR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bbS" = ( +/obj/structure/table/marble, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "bar"; + layer = 3.3; + name = "Bar Shutters" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bbT" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbU" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bbV" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 8; + icon_state = "spline_plain" + }, +/obj/item/weapon/stool/padded, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bbW" = ( +/obj/machinery/door/airlock{ + name = "Bar Backroom"; + req_access = list(25) + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/bar_backroom) +"bbX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bbY" = ( +/obj/effect/floor_decal/spline/plain, +/obj/item/weapon/stool/padded, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bbZ" = ( +/obj/effect/floor_decal/spline/plain, +/obj/item/weapon/stool/padded, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bca" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/obj/item/weapon/stool/padded, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bcb" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bcc" = ( +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bcd" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/apc; + dir = 8; + name = "west bump"; + pixel_x = -28 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bce" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcf" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bcg" = ( +/obj/random/cutout, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bch" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/surface_three_hall) +"bci" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bcj" = ( +/obj/machinery/vending/loadout/costume, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 8 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bck" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bcl" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bcm" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bcn" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 8; + name = "west bump"; + pixel_x = -30 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bco" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id = "DRAMATIC" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bcp" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bcq" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id = "DRAMATIC" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bcr" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bcs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"bct" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/flora/ausbushes/sparsegrass, +/obj/structure/flora/ausbushes/ywflowers, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bcu" = ( +/obj/structure/table/marble, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/window/brigdoor/northleft{ + dir = 2; + icon_state = "leftsecure"; + name = "Bar"; + req_access = list(25) + }, +/obj/machinery/door/window/westright{ + dir = 1; + icon_state = "right"; + name = "Kitchen"; + req_access = list(28) + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bcv" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/door/airlock/freezer{ + name = "Service"; + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/tether/surfacebase/servicebackroom) +"bcw" = ( +/obj/structure/table/standard, +/obj/machinery/reagentgrinder, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bcx" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/wall, +/area/crew_quarters/kitchen) +"bcy" = ( +/obj/structure/table/standard, +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bcz" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass{ + name = "Garden"; + req_access = list(28) + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled/white, +/area/hydroponics/cafegarden) +"bcA" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bcB" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcC" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcD" = ( +/obj/structure/closet/crate, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcE" = ( +/obj/structure/closet/crate, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcF" = ( +/obj/structure/closet/crate, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcG" = ( +/obj/machinery/light/small, +/obj/structure/table/woodentable, +/obj/item/weapon/bone/skull{ + name = "Yo'rick" + }, +/obj/item/weapon/paper{ + desc = ""; + info = "The Silence Into Laughter program works to place hard working, studied, accomplished, hardworking, homebrewed, diplomaholding, or otherwise clowns and mimes into the workforce! The Head Clowncellor and the Director at Mime have finally worked together to bring this titan of a workers' union! If you have a background in silence or laughter, please apply at our exonet site at: https://forum.vore-station.net/viewforum.php?f=45"; + name = "Clowns and Mimes Wanted!" + }, +/obj/machinery/camera/network/outside{ + dir = 5; + icon_state = "camera" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bcH" = ( +/obj/machinery/floodlight, +/obj/machinery/light/small{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bcI" = ( +/turf/simulated/wall, +/area/tether/surfacebase/entertainment/stage) +"bcJ" = ( +/obj/effect/floor_decal/spline/plain, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcK" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcL" = ( +/obj/item/device/instrument/violin, +/obj/structure/table/rack/steel, +/obj/effect/floor_decal/spline/plain{ + dir = 5 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcM" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bcN" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bcO" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/tether/surfacebase/servicebackroom) +"bcP" = ( +/obj/structure/table/rack/steel, +/obj/item/pizzavoucher, +/obj/item/weapon/moneybag, +/obj/item/weapon/inflatable_duck, +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/item/weapon/gun/projectile/revolver/capgun, +/obj/item/weapon/gun/projectile/revolver/capgun, +/obj/item/toy/cultsword, +/obj/item/toy/cultsword, +/obj/item/weapon/bikehorn/rubberducky, +/obj/item/weapon/reagent_containers/spray/cleaner, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bcQ" = ( +/obj/item/weapon/stool/padded, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcS" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcU" = ( +/obj/structure/table/rack/steel, +/obj/item/mecha_parts/part/durand_left_leg, +/obj/item/weapon/cane/crutch, +/obj/item/weapon/pack/cardemon, +/obj/item/weapon/soap/syndie, +/obj/item/weapon/soap/nanotrasen, +/obj/item/weapon/soap/deluxe, +/obj/item/weapon/staff/gentcane, +/obj/item/toy/crossbow, +/obj/item/toy/eight_ball/conch, +/obj/item/weapon/cell/potato, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bcV" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/item/device/radio/intercom{ + dir = 8; + frequency = 1532; + name = "Stagehand Mic"; + pixel_x = -24 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcW" = ( +/obj/effect/decal/cleanable/tomato_smudge, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcX" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bcY" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bcZ" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/effect/decal/cleanable/tomato_smudge, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bda" = ( +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/silver, +/turf/simulated/floor/tiled/steel_grid, +/area/tether/surfacebase/entertainment) +"bdb" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, +/obj/machinery/light_switch{ + name = "House Lights"; + pixel_x = -25 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment) +"bdc" = ( +/obj/effect/floor_decal/corner/mauve/border{ + dir = 1 + }, +/obj/machinery/alarm{ + pixel_y = 25 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"bdd" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + dir = 4; + frequency = 1532; + name = "Stagehand Speaker"; + pixel_x = 24; + pixel_y = 24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/backstage) +"bde" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/effect/landmark/start{ + name = "Entertainer" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bdf" = ( +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"bdg" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bdh" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bdi" = ( +/obj/machinery/alarm{ + pixel_y = 25 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bdj" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bdk" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bdl" = ( +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 8 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bdm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bdn" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id = "DRAMATIC" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bdo" = ( +/obj/effect/decal/cleanable/tomato_smudge, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bdp" = ( +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2"; + pixel_y = 0 + }, +/obj/machinery/light_switch{ + name = "Stage Lights"; + pixel_x = -25 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bdq" = ( +/obj/structure/bed/chair/wood, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/landmark/start{ + name = "Entertainer" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bdr" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bds" = ( +/obj/machinery/alarm{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bdt" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"bdu" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/tether/surfacebase/bar_backroom) +"bdv" = ( +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdw" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdx" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bdy" = ( +/obj/effect/floor_decal/spline/plain, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bdz" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdA" = ( +/obj/structure/lattice, +/turf/simulated/open, +/area/tether/surfacebase/barbackmaintenance) +"bdB" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/eris/cafe, +/area/hydroponics) +"bdC" = ( +/obj/effect/floor_decal/corner/lime/border{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/hydroponics) "bdD" = ( /obj/effect/floor_decal/corner/lightgrey{ dir = 9 @@ -28530,6 +32355,1285 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) +"bdE" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bdF" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bdG" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdH" = ( +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bdI" = ( +/obj/machinery/camera/network/outside{ + dir = 5; + icon_state = "camera" + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdK" = ( +/obj/structure/railing{ + dir = 4 + }, +/obj/effect/floor_decal/industrial/warning{ + dir = 8; + icon_state = "warning" + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdL" = ( +/obj/machinery/floodlight, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdN" = ( +/obj/machinery/portable_atmospherics/powered/scrubber, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdP" = ( +/obj/item/device/radio/intercom{ + dir = 2; + pixel_y = -24 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdQ" = ( +/obj/machinery/newscaster{ + pixel_y = -28 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdR" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/wood, +/area/crew_quarters/bar) +"bdS" = ( +/obj/machinery/door/airlock{ + name = "Unisex Restrooms" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bdT" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bdU" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bdV" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bdW" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdX" = ( +/obj/effect/decal/cleanable/dirt, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bdY" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bdZ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bea" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"beb" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/barrestroom) +"bec" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/space_heater, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bed" = ( +/obj/machinery/door/airlock/maintenance/common, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/techmaint, +/area/tether/surfacebase/barbackmaintenance) +"bee" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bef" = ( +/obj/machinery/light/small{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"beg" = ( +/obj/structure/bed/chair/comfy/beige, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"beh" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/airlock/maintenance/int{ + name = "Entertainment Backroom"; + req_one_access = list(72) + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"bei" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bej" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "secreet"; + name = "Tintable Window" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/barbackmaintenance) +"bek" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bel" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4; + icon_state = "comfychair" + }, +/turf/simulated/floor/tiled/eris/steel/bar_light, +/area/tether/surfacebase/barbackmaintenance) +"bem" = ( +/obj/structure/table/gamblingtable, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"ben" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/pill_bottle/dice, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"beo" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8; + icon_state = "comfychair" + }, +/turf/simulated/floor/tiled/eris/steel/bar_light, +/area/tether/surfacebase/barbackmaintenance) +"bep" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "2-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"beq" = ( +/obj/machinery/door/firedoor/glass, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/door/airlock/freezer{ + name = "Kitchen"; + req_access = list(28) + }, +/obj/effect/floor_decal/spline/plain{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"ber" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"bes" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/button/remote/blast_door{ + id = "kitchen2"; + name = "Kitchen shutters"; + pixel_x = -24; + pixel_y = 0 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bet" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/alarm{ + pixel_y = 25 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beu" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bev" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bew" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bex" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bey" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bez" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beA" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beB" = ( +/obj/machinery/chem_master/condimaster, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beC" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beD" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/silver, +/turf/simulated/floor/tiled/steel_grid, +/area/tether/surfacebase/entertainment) +"beE" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beF" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beG" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beH" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beI" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"beJ" = ( +/obj/machinery/power/apc{ + cell_type = /obj/item/weapon/cell/super; + dir = 8; + name = "west bump"; + pixel_x = -30 + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"beK" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/mob/living/simple_mob/animal/passive/chicken, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"beL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beN" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/mob/living/simple_mob/animal/goat{ + name = "Spike" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beO" = ( +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled/freezer, +/area/crew_quarters/freezer) +"beQ" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"beR" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"beS" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 6 + }, +/turf/simulated/floor/lino, +/area/tether/surfacebase/entertainment/stage) +"beT" = ( +/obj/structure/bed/chair/wood, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"beU" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id = "DRAMATIC" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"beV" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/machinery/door/blast/regular/open{ + dir = 2; + icon_state = "pdoor0"; + id = "DRAMATIC" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/structure/cable/green, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"beW" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"beX" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"beY" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/mob/living/simple_mob/animal/passive/cow, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"beZ" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bfa" = ( +/obj/structure/flora/ausbushes/ppflowers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 10; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/grass, +/area/hydroponics/cafegarden) +"bfb" = ( +/obj/machinery/door/airlock/freezer{ + name = "Service"; + req_access = list(28) + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/hydroponics/cafegarden) +"bfc" = ( +/obj/structure/table/woodentable, +/obj/item/weapon/flame/candle, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bfd" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bfe" = ( +/obj/structure/bed/chair/wood{ + dir = 4 + }, +/obj/machinery/light, +/obj/machinery/camera/network/outside{ + dir = 5; + icon_state = "camera" + }, +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24; + pixel_y = 0 + }, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bff" = ( +/obj/structure/bed/chair/wood{ + dir = 1 + }, +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/tether/surfacebase/entertainment) +"bfg" = ( +/obj/structure/sign/directions/medical{ + dir = 4; + pixel_y = 8 + }, +/obj/structure/sign/directions/science{ + dir = 8; + pixel_y = 3 + }, +/obj/structure/sign/directions/security{ + dir = 8; + pixel_y = -4 + }, +/obj/structure/sign/directions/engineering{ + dir = 8; + pixel_y = -10 + }, +/turf/simulated/wall, +/area/tether/surfacebase/entertainment) +"bfh" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bfi" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bfj" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-8" + }, +/obj/machinery/door/blast/regular/open{ + dir = 4; + icon_state = "pdoor0"; + id = "DRAMATIC"; + name = "Dramatic Blast Door" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "draama"; + name = "Mystery Window" + }, +/obj/structure/window/reinforced/polarized{ + id = "draama"; + name = "Mystery Window" + }, +/obj/machinery/door/blast/shutters{ + dir = 2; + id = "Druma"; + layer = 3.3; + name = "Entertainment Shutters" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/entertainment) +"bfk" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/barbackmaintenance) +"bfl" = ( +/obj/machinery/portable_atmospherics/hydroponics, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/mauve/border{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 8 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/rnd/xenobiology/xenoflora) +"bfm" = ( +/obj/structure/shuttle/engine/propulsion, +/turf/simulated/floor/reinforced, +/turf/simulated/shuttle/plating/carry, +/area/shuttle/tether) +"bfn" = ( +/obj/effect/floor_decal/corner/grey/diagonal, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/disposalpipe/segment{ + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/kitchen) +"bfo" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfp" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/requests_console{ + pixel_x = 32; + pixel_y = -32 + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bfq" = ( +/obj/effect/floor_decal/spline/plain{ + dir = 4 + }, +/obj/structure/table/marble, +/obj/item/weapon/reagent_containers/glass/rag, +/obj/item/weapon/reagent_containers/food/drinks/flask/vacuumflask, +/obj/item/weapon/book/manual/barman_recipes, +/turf/simulated/floor/lino, +/area/crew_quarters/bar) +"bfr" = ( +/obj/structure/extinguisher_cabinet{ + pixel_y = 30 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bfs" = ( +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bft" = ( +/obj/machinery/light, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bfu" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, +/turf/simulated/floor/grass, +/area/hydroponics) +"bfv" = ( +/obj/machinery/newscaster{ + pixel_x = 0; + pixel_y = 30 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/machinery/door/firedoor/glass/hidden/steel{ + dir = 2 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bfw" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/obj/effect/floor_decal/borderfloor{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_pump/on, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bfx" = ( +/obj/effect/floor_decal/borderfloor/corner{ + dir = 1 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 4 + }, +/obj/effect/floor_decal/steeldecal/steel_decals7{ + dir = 5 + }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bfy" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment{ + dir = 8; + icon_state = "pipe-c" + }, +/turf/simulated/floor/tiled, +/area/hallway/lower/third_south) +"bfz" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 4; + icon_state = "comfychair" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfA" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/storage/pill_bottle/dice_nerd, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfB" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfC" = ( +/obj/structure/table/gamblingtable, +/obj/item/weapon/deck/cards, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfD" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8; + icon_state = "comfychair" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfE" = ( +/obj/machinery/power/apc{ + dir = 4; + name = "east bump"; + pixel_x = 28 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfF" = ( +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfG" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 8; + icon_state = "comfychair" + }, +/obj/machinery/button/windowtint{ + id = "secreet"; + name = "Window Tint Control"; + pixel_x = -32; + range = 9 + }, +/turf/simulated/floor/tiled/eris/steel/bar_light, +/area/tether/surfacebase/barbackmaintenance) +"bfH" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 8 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/servicebackroom) +"bfI" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfJ" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 8 + }, +/obj/structure/window/reinforced{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/servicebackroom) +"bfK" = ( +/obj/machinery/light/small, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfL" = ( +/obj/structure/grille, +/obj/structure/window/reinforced/full, +/obj/machinery/door/firedoor, +/obj/structure/window/reinforced{ + dir = 1 + }, +/obj/structure/window/reinforced, +/turf/simulated/floor/plating, +/area/tether/surfacebase/servicebackroom) +"bfM" = ( +/obj/structure/bed/chair/comfy/beige{ + dir = 1; + icon_state = "comfychair" + }, +/turf/simulated/floor/tiled/eris/steel/bar_dance, +/area/tether/surfacebase/barbackmaintenance) +"bfN" = ( +/obj/machinery/atmospherics/unary/engine{ + dir = 1 + }, +/turf/simulated/floor/reinforced, +/turf/simulated/shuttle/plating/carry, +/area/shuttle/tourbus/engines) +"bfO" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/window/reinforced/polarized{ + id = "secreet"; + name = "Tintable Window" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/barbackmaintenance) +"bfP" = ( +/obj/structure/grille, +/obj/machinery/door/firedoor, +/obj/structure/cable/green{ + icon_state = "0-4" + }, +/obj/structure/window/reinforced/polarized/full{ + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/window/reinforced/polarized{ + id = "secreet"; + name = "Tintable Window" + }, +/obj/structure/window/reinforced/polarized{ + dir = 4; + icon_state = "rwindow"; + id = "secreet"; + name = "Tintable Window" + }, +/turf/simulated/floor/plating, +/area/tether/surfacebase/barbackmaintenance) "bhu" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -28572,38 +33676,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"bqy" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) -"bqA" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "bxH" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -28613,16 +33685,6 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) -"byo" = ( -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "bzK" = ( /obj/structure/cable/green{ d1 = 2; @@ -28715,22 +33777,6 @@ /obj/effect/map_helper/airlock/door/simple, /turf/simulated/floor/tiled/eris/techmaint_panels, /area/shuttle/tourbus/general) -"ccf" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/steeldecal/steel_decals4, -/obj/effect/floor_decal/steeldecal/steel_decals4{ - dir = 10 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "ceN" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -28740,24 +33786,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"cko" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "cmQ" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/lightgrey/border, @@ -28808,33 +33836,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"cqA" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/beige/bordercorner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/beige/bordercorner2{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "cwI" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -28883,16 +33884,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"cGR" = ( -/obj/item/weapon/stool/padded, -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) "cJL" = ( /obj/effect/floor_decal/borderfloor, /obj/effect/floor_decal/corner/mauve/border, @@ -28972,22 +33963,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating/eris/under, /area/shuttle/tourbus/cockpit) -"dfq" = ( -/obj/machinery/door/airlock/glass, -/obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled/steel_grid, -/area/crew_quarters/bar) "dgA" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -29053,33 +34028,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"duW" = ( -/obj/structure/table/gamblingtable, -/obj/item/weapon/storage/pill_bottle/dice_nerd, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"dFb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "dGZ" = ( /obj/structure/cable{ d1 = 2; @@ -29132,19 +34080,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"dQt" = ( -/obj/structure/cable/green{ - d2 = 2; - icon_state = "0-2" - }, -/obj/machinery/power/apc{ - cell_type = /obj/item/weapon/cell/super; - dir = 8; - name = "west bump"; - pixel_x = -30 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "dVE" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -29211,24 +34146,6 @@ "eiO" = ( /turf/simulated/floor/tiled/eris/dark/golden, /area/shuttle/tourbus/general) -"epM" = ( -/obj/item/weapon/stool/padded, -/obj/effect/floor_decal/spline/plain{ - dir = 8 - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/structure/disposalpipe/segment{ - dir = 8; - icon_state = "pipe-c" - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) "erS" = ( /obj/effect/floor_decal/borderfloor{ dir = 6 @@ -29392,32 +34309,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"fgi" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 5 - }, -/obj/effect/floor_decal/corner/beige/bordercorner2{ - dir = 5 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/structure/flora/pottedplant, -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "fgW" = ( /obj/effect/floor_decal/borderfloor{ dir = 4 @@ -29615,16 +34506,6 @@ }, /turf/simulated/floor/wood, /area/crew_quarters/recreation_area) -"gqv" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/machinery/door/firedoor/glass/hidden/steel, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "gtp" = ( /obj/effect/floor_decal/industrial/warning, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -29642,14 +34523,6 @@ /obj/machinery/atmospherics/pipe/manifold4w/hidden/supply, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"gBG" = ( -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "gHh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 10 @@ -29754,27 +34627,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) -"hcY" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/bordercorner2{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "hgf" = ( /obj/machinery/door/firedoor/glass/hidden{ dir = 2; @@ -29804,15 +34656,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"hvt" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "hxc" = ( /obj/effect/floor_decal/borderfloor/corner, /obj/effect/floor_decal/corner/lime/bordercorner, @@ -29824,29 +34667,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/public_garden_three) -"hyh" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4; - icon_state = "pipe-c" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "hCB" = ( /obj/structure/cable/green{ d1 = 1; @@ -29888,16 +34708,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techfloor/grid, /area/maintenance/lower/medsec_maintenance) -"hPF" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "hYK" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -29982,65 +34792,6 @@ }, /turf/simulated/floor/tiled/eris/white/orangecorner, /area/shuttle/tourbus/cockpit) -"iBA" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) -"iBG" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) -"iGj" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/bordercorner{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 1 - }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) -"iLR" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) -"iOg" = ( -/obj/machinery/light{ - dir = 8; - icon_state = "tube1" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "iQr" = ( /obj/machinery/hologram/holopad, /obj/effect/landmark/start{ @@ -30076,22 +34827,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"jjp" = ( -/obj/machinery/newscaster{ - pixel_x = 0; - pixel_y = 30 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 2 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "jpB" = ( /obj/machinery/atmospherics/pipe/simple/hidden/yellow{ dir = 6 @@ -30139,26 +34874,6 @@ "jvK" = ( /turf/simulated/wall/shull, /area/shuttle/tourbus/cockpit) -"jvN" = ( -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_pump/on, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "jAt" = ( /obj/structure/cable/green{ d1 = 1; @@ -30230,19 +34945,6 @@ /obj/structure/flora/pottedplant/stoutbush, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/lobby) -"jFq" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - icon_state = "pipe-j1s"; - name = "Bar"; - sortType = "Bar" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "jFz" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30329,23 +35031,6 @@ }, /turf/simulated/floor/tiled/eris/dark/golden, /area/shuttle/tourbus/general) -"kcK" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass/hidden/steel{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "kdx" = ( /obj/structure/table/standard, /obj/structure/closet/emergsuit_wall{ @@ -30458,13 +35143,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/rnd/research/testingrange) -"kyb" = ( -/obj/structure/bed/chair/wood, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "kyC" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -30688,26 +35366,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"mtF" = ( -/obj/structure/extinguisher_cabinet{ - dir = 4; - icon_state = "extinguisher_closed"; - pixel_x = -30 - }, -/obj/effect/floor_decal/borderfloor{ - dir = 8 - }, -/obj/effect/floor_decal/corner/lime/border{ - dir = 8 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "myZ" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ @@ -30880,24 +35538,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"nui" = ( -/obj/structure/disposalpipe/segment{ - dir = 1; - icon_state = "pipe-c" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) -"nHF" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "nLX" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 @@ -30979,18 +35619,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"ovI" = ( -/obj/structure/disposalpipe/junction{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "oAu" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -31041,15 +35669,6 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"oEU" = ( -/obj/structure/table/gamblingtable, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "oLR" = ( /obj/structure/bed/chair/bay/chair{ dir = 1; @@ -31132,29 +35751,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"paT" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "peS" = ( /obj/structure/cable/green{ d1 = 1; @@ -31326,12 +35922,6 @@ "qwm" = ( /turf/simulated/wall/shull, /area/shuttle/tourbus/engines) -"qCn" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "qIb" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -31345,15 +35935,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals7, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"qOw" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "qQZ" = ( /obj/effect/floor_decal/techfloor, /obj/machinery/firealarm{ @@ -31370,43 +35951,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/yellow, /turf/simulated/wall/shull, /area/shuttle/tourbus/engines) -"qWZ" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) -"qZs" = ( -/obj/structure/disposalpipe/junction{ - dir = 1; - icon_state = "pipe-j2" - }, -/obj/machinery/hologram/holopad, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "rbR" = ( /obj/structure/cable/green{ icon_state = "2-4" @@ -31562,14 +36106,6 @@ }, /turf/simulated/floor/tiled/eris/dark/bluecorner, /area/shuttle/tourbus/engines) -"sJC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "sLa" = ( /obj/machinery/firealarm{ dir = 2; @@ -31632,15 +36168,6 @@ }, /turf/simulated/floor/tiled, /area/hallway/lower/third_south) -"sSX" = ( -/obj/structure/bed/chair/wood{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "sWs" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -31663,34 +36190,6 @@ }, /turf/simulated/floor/grass, /area/tether/surfacebase/public_garden_three) -"sYk" = ( -/obj/effect/floor_decal/borderfloor{ - dir = 4 - }, -/obj/effect/floor_decal/corner/beige/border{ - dir = 4 - }, -/obj/effect/floor_decal/borderfloor/corner2{ - dir = 6 - }, -/obj/effect/floor_decal/corner/beige/bordercorner2{ - dir = 6 - }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 9 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 10 - }, -/obj/structure/flora/pottedplant, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "tcW" = ( /obj/effect/shuttle_landmark{ base_area = /area/tether/surfacebase/shuttle_pad; @@ -31879,16 +36378,6 @@ }, /turf/simulated/floor/tiled/eris/dark/golden, /area/shuttle/tourbus/general) -"uxo" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 1 - }, -/obj/machinery/holoposter{ - dir = 8; - pixel_x = 30 - }, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) "uxT" = ( /obj/effect/floor_decal/steeldecal/steel_decals_central5{ dir = 8; @@ -31916,11 +36405,6 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"uNM" = ( -/obj/effect/floor_decal/corner/grey/diagonal, -/obj/structure/foodcart, -/turf/simulated/floor/tiled/white, -/area/crew_quarters/kitchen) "uOc" = ( /obj/effect/floor_decal/techfloor{ dir = 4 @@ -31948,21 +36432,6 @@ }, /turf/simulated/floor/tiled/monofloor, /area/tether/surfacebase/shuttle_pad) -"vdE" = ( -/obj/effect/floor_decal/borderfloor/corner{ - dir = 1 - }, -/obj/effect/floor_decal/corner/lime/bordercorner{ - dir = 1 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 4 - }, -/obj/effect/floor_decal/steeldecal/steel_decals7{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "viF" = ( /obj/structure/disposalpipe/segment, /obj/effect/floor_decal/borderfloor{ @@ -32001,22 +36470,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/shuttle_pad) -"voS" = ( -/obj/effect/floor_decal/spline/plain{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/hologram/holopad, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/lino, -/area/crew_quarters/bar) -"vrs" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "vrU" = ( /obj/structure/cable{ d1 = 2; @@ -32072,12 +36525,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/surface_three_hall) -"vxO" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "vJA" = ( /obj/structure/disposalpipe/segment, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -32171,19 +36618,6 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating/eris/under, /area/shuttle/tourbus/general) -"wGK" = ( -/obj/structure/bed/chair/wood{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 8 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 - }, -/obj/structure/disposalpipe/segment, -/turf/simulated/floor/wood, -/area/crew_quarters/bar) "wPD" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 4 @@ -32228,27 +36662,6 @@ }, /turf/simulated/floor/tiled, /area/tether/surfacebase/security/processing) -"xbm" = ( -/obj/structure/disposalpipe/segment, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) -"xbZ" = ( -/obj/structure/disposalpipe/sortjunction{ - dir = 1; - icon_state = "pipe-j1s"; - name = "Kitchen"; - sortType = "Kitchen" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/tether/surfacebase/surface_three_hall) "xdM" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/effect/floor_decal/borderfloor{ @@ -32268,16 +36681,6 @@ }, /turf/simulated/floor/tiled, /area/rnd/research/researchdivision) -"xjd" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/hallway/lower/third_south) "xkx" = ( /obj/effect/floor_decal/borderfloor{ dir = 1 @@ -43499,7 +47902,7 @@ jML jHw jpB qWU -aXV +bfN aKU aOI aPb @@ -44351,7 +48754,7 @@ caw jHw gHh qWU -aXV +bfN aKU aOI aPb @@ -44605,11 +49008,11 @@ aXB bbF ajM apf -awJ -awJ -awJ -aBl -awJ +aWC +aWC +aWC +aWC +aWC aED aEQ aEE @@ -44747,14 +49150,14 @@ aXB bbF ajM apD -awN -aEF -aEL -aBm -awJ -awJ -awJ -awJ +aWD +baZ +bcg +bcG +aWC +aWC +aYC +bcI aAB aCL aut @@ -44889,20 +49292,20 @@ aXB bbF aEq apE -aEB -axm -axX -axm -azp -azX -aAC -aFg +aXh +bbd +bci +bbd +bbd +bbd +bdb +bdp aCh aCP aFx aFW aGz -aHk +aXM aHX aIz aJn @@ -45031,20 +49434,20 @@ aXD bbF avG aNE -awJ -axn -aEM -aES -awJ -azY -aAD -aFk +aWC +bbe +bcj +bcH +bcP +bcU +bdd +aFY aAB aCQ azn aFX aAB -aJr +aZD aHY aUm ats @@ -45173,20 +49576,20 @@ aXB bbF ajR akx -awP -awP -awP -awP -awP -awP -aAE -awP -awP -awP -awP -awP -aGA -aHm +aYC +aYC +aYC +bcI +bcI +bcI +beh +bcI +bcI +aYC +aYC +aYC +bfg +baD aHZ aIC aJo @@ -45314,21 +49717,21 @@ aYK aXB bbF ajR -aEx -awP -axo -axY -ayC -akX -azZ -aAF -aBx -aCi -ayC -aFy -aFY -awP -aHn +alz +aYC +bbf +bcn +aHz +bcQ +bcV +bdg +bdo +beJ +bcJ +bbk +bfe +aYC +bfr aIa aIz aJn @@ -45344,7 +49747,7 @@ ghf gLd aNx aMA -aMW +aFC aMA aOu aNx @@ -45455,22 +49858,22 @@ aYy aYL aXB bbF -avH +ajR awq -awQ -axp -axZ -ayD -ayD -ayD -aAG -ayD -ayD -ayD -axZ -aFZ -awR -aHo +aGE +bbg +aWk +bcK +bcR +bcW +bcT +bcR +beQ +bdy +beW +bbg +bfh +bfs aIb aID aJp @@ -45598,21 +50001,21 @@ aYM aXE bbF ajR -awp -awR -axq -aya -ayE -ayE -ayE -aAH -ayE -ayE -ayE -aya -aGa -awR -aHo +awq +aZM +bbh +bbk +bcL +bcS +bcX +bcZ +bcS +bcS +beS +bbk +bbh +bfi +bfs aIa aIz ats @@ -45740,21 +50143,21 @@ asT asT bbF ajR -awp -awR -axr -aya -ayF -ayF -ayF -aAI -ayF -ayF -ayF -aya -aGb -awR -aHo +awq +bah +bbk +bbk +bbk +bbk +bdh +bdm +bdF +bbk +bbk +bbk +bbk +bfi +bfs aIa aIB ats @@ -45882,21 +50285,21 @@ alY auI bbA ajR -awp -awR -axs -ayb -aya -aya -aAa -aAJ -aBy -aya -aya -ayb -aGc -awR -aHo +awq +bax +bbl +beX +bde +bbk +bdq +bfc +bde +beR +bbl +beX +bcM +bfj +bfs aIa aIz ats @@ -46025,20 +50428,20 @@ auI bbA ajR awr -awP -axt -ayc -ayc -azs -aAb -aAK -aBz -aCj -aCR -ayc -aGd -awP -jjp +aYC +bbm +bfc +bcY +bcr +bcN +bcp +beW +bcr +beT +bfc +bff +aYC +bfv fyZ aUm aJn @@ -46166,21 +50569,21 @@ alZ auJ bbA ajR -awp -awP -axu -awR -awR -azt -aAc -awR -aBA -azt -awR -awR -awP -awP -jvN +awq +aYC +bbn +bco +bcq +aYC +bda +bdn +beD +aYC +beU +beV +aYC +aYC +bfw suT aIC aJn @@ -46307,22 +50710,22 @@ myZ myZ myZ dsF -avG -iGj -awS +aDV +aGA axv -axv -axv -alz -aAd aAL -aBB -hcY -bqy -axv -mtF -gqv -vdE +aAL +aAL +aBy +aAd +aGi +aCX +bbz +aGr +aAL +aGt +aGu +bfx aHW knU aJn @@ -46336,7 +50739,7 @@ aNk uSA aNJ aNP -aVC +bfm aKU abg aOk @@ -46426,7 +50829,7 @@ agw agw aix gTN -akH +akL akH akH akH @@ -46439,32 +50842,32 @@ xUo bqs xUo xUo -xUo -xUo -xbZ +aCK +aCK +aCK xUo fOj -ovI -jFq +ahR +arG akH akH akH -qZs -hPF -xbm -iBA -nui -aEr -aEr -xjd -aEr -aEr -aEr -hvt -azF -azF -gBG -azF +aGv +aGD +aGF +aHk +aye +aye +aye +aBr +aHm +aEd +aHm +aIV +aXg +aXg +aXK +bfy gAF pgi aUo @@ -46478,7 +50881,7 @@ aNl aNl aNK aNP -aVC +bfm aKU abg aOk @@ -46568,7 +50971,7 @@ aVs agw aix aka -akI +atc aMX ama amI @@ -46581,28 +50984,28 @@ apC aqf aOT aqU -arG +avP +avP +avP +apS apS ajX -apS -aEd -cko -iLR +auh auh auK aOg avn -qWZ +aKx awU +aCJ axw -aye axw axw aAf +aCJ axw -axw -axw -paT +aCJ +aJc aCU aGf aIc @@ -46620,7 +51023,7 @@ aNm aNl aNK aNP -aVC +bfm aKU abg aOk @@ -46710,7 +51113,7 @@ agw agw ajj akb -akJ +avH alo amb aio @@ -46723,28 +51126,28 @@ agw aqg aqT apc -arH -ash -ate -ash -ate -kcK -ate -ash -auL -avo -avK -avK -arJ -avK -asF +aLh +aLh +aLh +aBD +aBD +aZd +aCi +aCi +aCi +aLf +atl +avd +aru +avd +atl arJ azv arJ +aCS avK -avK -avK -avK +aHr +aCS avK arJ arJ @@ -46852,7 +51255,7 @@ ahP ail ajk aka -akK +awp alp amc aio @@ -46865,34 +51268,34 @@ agw aqh agw apc -arI -asi -fgi -byo -cqA -ccf -sYk -aui -auM -arJ +asZ +aVw +axn +ate +ayG +aZg +beq +bes +beE +anj +anj +aZX +aLb +awc +avh +avy avL -awu -awV -axx -ati -aAR -aBG -aEY +aBx +aCT +aIl +aHs +baA +aIN +aIO +bdI asX +bdO asX -alM -asX -asX -iOg -dQt -sJC -hyh -aIJ aJs aKn arJ @@ -46989,12 +51392,12 @@ aTL aeP afH agq -ahb +agN ahQ aim ahb akc -akL +awS alq alq amJ @@ -47007,39 +51410,39 @@ apc aqi apc apc -arJ -arJ -asF -asV -atg -dfq -asF -arJ -arJ -arJ +avg +aVy +axn +ate +ayI +aZy +aru +bet +beF +atM +atA +afp +awc +awc +avi +avz avM -awu -auk asX asX -asX -asX -asX -aAP -aBD -aCo -aBC -aFA -asX -asX -asX -iBG -aIK -aJt -aJt -aJt -aJt -aJt +aIl +aHB +aJv +aIH +aIO +bcc +bdM +bdP +arJ +aGK +aGK +aGK +aGK +aKj aKj aKj aKj @@ -47131,13 +51534,13 @@ aeh aeQ afG agr -ahc -ahR ain -aDV akd -agN -alr +akI +akJ +akK +aBB +aoN amd aio eHk @@ -47149,49 +51552,49 @@ aYk aqj aoH arp -arK -asj -asG -asW -asG -dFb -atN -auj -auN -avp -avp -avp -avp -avp -ayf -ayI -avp -vxO -kyb -nHF -oEU -duW -wGK -vrs -voS -cGR -epM -aro -aJt +asp +avq +aBE +aCI +aEY +aZJ +aKc +beu +beF +atL +anj +afr +awc +awc +avk +avz +avM +asX +asX +aIn +aIg +aJK aKo -aLb -aLC -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aKq +bck +aKr +bdQ +aGK +aya +bcd +ayh +ayE +aGK +aAl +aId +bdA +ayM +bee +bek +bfo +bfF +bfF +bfO aac aac aac @@ -47272,9 +51675,9 @@ aeg aTM aeR abe -ags -ags -agw +amU +aXT +aXS aio aio aio @@ -47291,49 +51694,49 @@ aYl aqk apg apc -arL -ask -asH -asX -ath -aEk -aEl -aEm -aEn -aEm -aEk -aEk -aEk -aEk -aEN -aET -aEW -asX -asX -sSX -qOw -qCn -bqA -sJC -aGF -aHx -aIk -aIM -aJt -aKp +aGH +aVB +axn +bdB +ate +aZQ +asD +bev +beG aLc -aLD -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +atw +api +bfd +awc +avm +avz +avM +asX +asX +asX +aIh +bdv +bbK +bbO +bcl +bcb +bdR +bdS +bdT +bdY +aGK +aGK +aGK +aAx +aIe +bdK +ayM +bef +bel +bfz +bel +bfK +bfO aac aac aac @@ -47414,9 +51817,9 @@ adD aeh aeS abe -aac -aac -aac +aoj +aXU +aYN aio ajl aof @@ -47426,56 +51829,56 @@ ame aio ano anR -aon -aoJ -aoJ -aoJ -aoJ -aoJ -aoJ -arM -auP -asH +aok +awP +awP +awP +awP +awP +awP +aTE +aVC +axn +ate +ayL +baP +aru +bew +beH +atJ +baq +aqY +bfn +awc +avo +avz +avM asX -ati -asX -atO -auk -auP -auk -asX -asX -asX -asX -ayg -ayJ -aEX -aEk -aEk -aEN -aET -aEk -aFC -asX -aGG -aHy -aIl -aIN -aJu -aKq aLd -aLE -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aHe +aIi +bdG +aLd +bbP +bcm +asX +aFa +aGK +ayc +bdZ +ayC +ayF +aGK +aAE +baR +bdL +ayM +beg +bem +bfA +bem +bfM +bfO aac aac aac @@ -47556,9 +51959,9 @@ adE aei aeT abe -aac -aac -aac +aoj +aXU +aYN aio ajm akf @@ -47568,56 +51971,56 @@ amf amK anp anS -aoo -aKc -aph -apF -aql -aqV -aoJ +apa +arN +aqo +ate +ate +ate +ate +aVO +aVO +aVO +ate +aFK +bbI aru -aru -asI -asY -asY -atz -atP -aru -auQ -avq -avN -awv +bex +beH +atd +baq +aLg +bfn +awc +avo +avz +avM asX +aLd +aHl +aIi asX -ayg -ayJ +aLd +bbT +bcm asX -aEZ -asX -ayg -ayJ -asX -aFD -asX -aGG -aHz -aIm -aIO -aJt -aKr -aLe -aLF -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aHy +aGK +ayd +bdZ +aGK +aGK +aGK +aCn +baR +bdN +ayM +beg +ben +bfB +bem +bfM +bfO aac aac aac @@ -47698,9 +52101,9 @@ aeg aTN adC abe -aac -aac -aac +aoj +aXU +aYN aio ajn akg @@ -47710,56 +52113,56 @@ amg aio anq anT -aon -aib -aoK -aoK -aqm -aqW -arq -arN -asm -asJ -asZ -atj -asO -atQ -aum -auR -avr -avO -aww +aok +asK +asP +auO +auQ +awR +asP +aVP +aVP +aVP +asP +aFS +awP +aru +bey +beH +anj +baq +atO +baE +awc +avp +avA +avN asX -auk -ayh -ayK -auk asX -auk -ayh -ayK -auk -aFD asX -aGG -aHz -aIm -aIP -aJt -aKs -aLf -aLG -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aIh +bdw +bbL +bbU +bdJ +asX +aIS +aGK +bdU +bea +ayD +ayF +aGK +aFq +bbX +bdW +ayM +beg +bem +bfC +bem +bfM +bfO aac aac aac @@ -47839,10 +52242,10 @@ abe adF aek aeV -afI -aac -aac -aac +abe +aoo +aXV +bch aio ajo akf @@ -47852,56 +52255,56 @@ aht aio anr anU -aon -aoM -aoK -aoK -aqn -aqX -arr -arO -asn -asK -arO -atk -arO -atR +aok +asi +asi +asi +asi +asi +asj +aTF +aVR +aVR +aCR +aHn +awP +ani +bey +beH +bdE +baq +anj +baE +awv aru -aXU -avr -avO -aww -aAj -awu -ask -ayL -awu -aFa -awu -aBF -auO -awu -aFE -asX -aGG -aHz -aIm -aJV -aJt -asr -aLg -aLH -aJt -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aru +aru +auy +aET +aGk +aIo +axZ +bbM +bbV +aAc +aAF +baC +aGK +bdV +beb +aGK +aGK +aGK +aFv +baR +aFv +ayM +bef +beo +bfD +bfG +bfK +bfO aac aac aac @@ -47970,21 +52373,21 @@ aaq aaq aac aac -aac -aac -aac -aac -abe -abe -abe -abe -abe -abe -aeW +acf +acf +acf +acf afJ -aac -aac -aac +afJ +afJ +afJ +afJ +afJ +afJ +afJ +acf +arx +acf aio ajp akf @@ -47994,56 +52397,56 @@ ami aio aio anV -aon -aoN -api -apG -aqo -aqY -aoJ -arP -aso -asL -ata -atl -asO -asO -aun -auR -avr -avO -aww -asX -auk -auk -auk -auk -asX -auk -auk -auk -auk -aFD -asX -aGG -aHA -aIm -arx -aJt -aJt -aJt -aJt -aJt +aok +aSx +aop +aop +aop +aop +aBp +aWE +aCl +aCj +bdC +aJV +ajZ +anN +bez +beI +atf +bcw +aUq +baE +anj +anj +arM +aru +avJ +aIM +aIM +aIJ +ayf +aIM +aIM +bbY +aAG +aIU aGK -aQf -aac -aac -aac -aac -aac -aac -aac -aac +ayd +ayb +ayb +ayb +aGK +aFy +bdz +bdX +bed +bei +bep +bfE +bfI +bfF +bfO aac aac aac @@ -48112,21 +52515,21 @@ aaq aaq aac aac -aac -aac -aac -aac -aac -aac -aac -aRm -aac -aac -aac -aac -aac -aac -aac +afS +afq +acl +afq +afS +afq +ajv +ajV +amS +anP +apj +afS +aqW +aro +arX aio ajq akh @@ -48136,57 +52539,57 @@ amj amK ans anU -aon -aoJ -aoJ -aoJ -aoJ -aoJ -aoJ -arQ -aso -asM -aru -atm -asO -asO -auo -auT -avr -avO -aww -asX -asX -asX -asX -asX -asX -asX -asX -asX -asX -aFD -asX -aGG -aHz +aok +aop +aqp +aop +aqp +aop +aop +aVy +aVy +aVy +aop +aKm +asG +baq +bey +beF +atg +bcx +atQ +baF +anj +anj +anj +bcu +asB aIm -aIS -arJ -aKu -aLh -aLI -aMg +aIm +aIK +azs +bbR +bbS +bbZ +aAG +baT aGK -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aHD +aHD +aHD +aHD +aGK +aFA +ayM +bec +ayM +bej +bfk +ayM +bfk +bej +bfP +aQf aac aac aac @@ -48250,25 +52653,25 @@ aab aab aab aab -aaq -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aab +aab +aOm +adG +afS +afq +acn +aeU +afS +afq +ajw +ajW +amV +aoe +apk +afS +aqZ +arq +arY aio ajr aki @@ -48278,50 +52681,50 @@ amk amL ant anW +aok aop -aoO -apj -apk -aqp -aqZ -ars -arR -asp -asN -atb -atn -asO -uNM -aup -auR -avr -avO -aww -asX -asX -asX -asX -asX -asX -asX -asX -asX -asX -aFD -asX -uxo -aHB -aIn -aIT -arJ -aUg -aLh +aop +aop +aop +aUr +aWM +aXj +aVy +aVy +aop +aKt +awP +asw +bcf +bdx +atP +bcy +auj +baE +anj +atO +anj +amY +asB +aIm +aIm +aIP +azx +aIm +baB +bca +aAG +baW aGK aGK aGK -aac -aac -aac +aGK +aGK +aGK +aHC +ayM +ayM +ayM aac aac aac @@ -48392,25 +52795,25 @@ aab aab aab aab -aaq -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aab +aab +aOm +adG +afS +aby +acZ +aeW +afS +aby +afq +acl +amX +afq +afq +afS +ara +arq +asm aio ajs akj @@ -48420,48 +52823,48 @@ aml amK anu anX -aop -aoP -apk -apk -aqq -ara -art -arS +aok +aoM +aEX +atR +aEX +asp asq -aEh -asO -asO -asO -asO -aup -auR -avr -avO -aww -asX -asX -asX -asX -asX -asX -asX -asX -asX -asX -and -arJ -arJ -arJ -arJ -arJ -arJ +aWM +aXj +aVy +aop aKw -aLh -aLJ -aMh +awP +asL +anj +anj +anj +baq +anj +baI +aKy +aLb +baw +aru +bay +aEW +bfq +ato +azZ +atN +arJ +arJ +aIf +arJ aGK -aac +aAi +aAe +aAe +aAe +aAe +aAj +ayM aac aac aac @@ -48533,77 +52936,77 @@ aab aab aab aab -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aio -aio -aio -aio -aio -aio +aab +aab +aab +aOm +adG +afS +afq +aeE +afI +ags +agB +agB +agB +anC +aoD +aoD +arb +aIk +bdf +asn +acf +acf +acf +acf +acf +acf aio ajs anY +aok +bdi aop -aKt -apl -apH -apk -arb -ars -arT -ajD -asP -atc -ato -atA -atS -aup +bdj +arQ auU -ako -avO -aww -asX -axx -auk +aXv +awQ +afT +aES +aFz +aLe +awP +asM +aKp +aZT +anj +baq +anj +baO +aKu +baX +avD +aJt +aJt +aJt +aJt +aJt +aDX +aJt +aJt +aph +azt +aAe +aAe +aAj +ayM +ayM +ayM +ayM +ayM ayM -azx -aIQ -asX -asX -asX -asX -aFG -aGk -aGI -aHC -aIo -aIU -aJv -aKx -aLh -aGK -aGK -aGK -aac aac aac aac @@ -48675,76 +53078,76 @@ aab aab aab aab -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aio -aio -aio +aab +aab +aab +aOm +adG +afS +ack +aeF +ack +afS +afS +afS +afS +aql +afS +afS +afS +apH +arq +asv +atj +atS +atj +auM +avf +axr +acf +aok +aok +aok aop -aoR -aoR -aoR -aoR -aoR -aru -aru -aru -asQ -asQ -asQ -asQ -asQ -aru -arJ -arJ -avP -avP -avP -avP -avP -arJ -arJ -arJ -aAQ -auk -asX -auk -aFH -arJ -aGJ -aHD -aHD -aIV +aop +aeZ +arR +aVy +bdl +aFM +aGd +aFM +aoJ +aoJ +aoJ +asN +asU +atb aJw -aKy -aLh -aLK -aMh -aGK +bcz +aJw +atb +aFM +bcv +aFM +aJt +awT +axo +axq +aIQ +aEl +bbN +bbW +ayJ +ayM +ayM +ayM +ayM +ayM +aac +aac +aac +aac aac aac aac @@ -48817,22 +53220,68 @@ aab aab aab aab -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac aab aab +aab +aOm +adG +afS +afq +afq +afq +afS +agF +adK +amW +arI +ajY +amZ +afS +apH +arq +acV +acV +acV +acV +acV +acV +axs +ayK +ash +aop +aSy +aop +aop +bdk +ask +aVy +aso +aFM +aGe +aHo +aoJ +asr +bbJ +ber +beA +atb +bct +bcA +ati +atb +aHq +bcB +aHq +avO +awm +bdt +axy +axy +aHv +axt +aJt +ayM +ayM aac aac aac @@ -48846,52 +53295,6 @@ aac aac aac aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aFb -awu -awu -axx -awu -aFI -arJ -aGK -aGK -aGK -aGK -aGK -aGK -aGK -aGK -aGK -aGK -aac -aac -aac -aac -aac aab aab aab @@ -48960,68 +53363,68 @@ aab aab aab aab -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab aab aab +aOm +adG +afS +afq +afq +afq +afS +ahs +afY +aib +aFZ +ako +and +afS +apH +arr +asC +asC +asC +asC +asC +avB +axQ +arL +aop +aUr +aWM +aWM +aWM +aWM +asH +aXj +bdH +awP +aGg +aHo +aoJ +asu +bcs +ath +beB +atb +bdr +beY +beZ +atb +aHq +bcB +bcO +aJt +aws +bdu +axY +axY +aKs +axu +aJt aac aac aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aaq -aaq -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -arJ -avP -avP -avP -avP -avP -arJ -aac -aac -aab aab aab aab @@ -49102,65 +53505,65 @@ aab aab aab aab -aac -aac -aac -aac -aac -aac aab aab -aab -aab -aab -aac -aac -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aac -aac -aac -aac -aac -aac -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aac -aac -aac -aab -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac -aac +aOm +adG +afS +afq +afq +afq +afS +ais +afZ +aiX +ajC +akW +anl +afS +bdc +bfl +asE +atm +acV +acV +auN +avE +axX +azp +aop +aVy +aop +aop +aqq +aBG +asO +aqe +bft +aFM +aGh +aHp +aXi +beC +beL +atn +beO +atb +bds +beK +bfa +bfb +bbo +bcB +aHq +aJt +awt +aww +awV +axp +bbQ +axx +aJt aac aac aab @@ -49244,67 +53647,67 @@ aab aab aab aab -aac -aac -aac -aac -aac -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aac -aac -aac -aac -aac -aac -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aab -aab -aab -aab -aab -aab -aac -aac -aac -aab -aab -aab -aab -aab aab aab +aOm +adG +afS +afq +afq +afq +afS +ait +afq +aiZ +ajD +akX +ann +afS +aqn +ars +acV +atv +aui +acV +auP +avI +arL +aSx +aop +aVy +aop +aop +aqV +aDY +asV +aqe +bfp +aFM +aGe +aHq +aoJ +anm +beM +beN +beP +atb +ati +aty +ati +aFM +bbr +bcB +aFM +aJt +aJt +aJt +aJt +aJt +aJt +aJt +aJt +adG +aNC aab aab aab @@ -49388,65 +53791,65 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aaq -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +afS +afq +afq +afq +afS +ajc +ajx +alr +anD +akX +apl +afS +apH +art +aon +atx +aun +aCa +auT +awu +arL +aqm +aop +aVy +aop +aop +aqq +aEh +ata +aqe +aso +aFM +aGe +aHq +aoJ +asx +asI +asI +asY +atb +atk +ati +aum +aFM +bbr +bcB +aAb +adG +adG +adG +adG +adG +adG +adG +adG +adG +aNC aab aab aab @@ -49530,64 +53933,64 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +afS +afq +afq +afq +afS +ajd +ajx +alr +anD +akX +apF +acf +aqX +arO +acV +atv +auo +acV +auP +avI +arL +aqm +aop +aVy +aop +aop +aop +aop +ask +arK +bfu +aFO +aGj +aHw +aoJ +aoJ +aoJ +aoJ +aoJ +atb +atb +atb +atb +aFM +bbv +bcC +aAb +adG +arZ +aNM +aNM +aNM +aNM +aNM +aNM +aNM aab aab aab @@ -49672,57 +54075,57 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +afS +afS +afS +afS +afS +ajc +ajx +alr +anE +aoK +apG +afS +apH +arP +acV +atv +acV +acV +avb +awJ +arL +aop +aop +asQ +auk +aEZ +auk +auk +avr +aso +aop +aFM +aGq +aHx +aLC +aLH +aLK +aPF +aSh +aSh +aTJ +aUB +aVd +baS +bbB +bcD +aAb +adG +aNC aab aab aab @@ -49814,57 +54217,57 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +adG +adG +adG +afX +afS +aje +ajF +alM +anM +aoO +apP +afS +apH +arS +asJ +atz +acV +acV +avc +awN +ayg +aCo +aAD +asF +aAD +aCo +aAR +aDM +aEx +aBd +aAR +aFP +aGG +aHA +aLD +aLI +aMg +aRm +aSl +aSl +aTS +aUT +aLI +baY +bbr +bcE +aAb +adG +aNC aab aab aab @@ -49957,56 +54360,56 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNM +aNM +aNM +aNW +afX +afS +afS +afS +afS +afS +aoP +afS +afS +aqn +acV +acV +acV +acV +acV +avc +arL +adG +azY +aAH +aBl +aBF +aCp +aCC +aEk +aEB +aFb +aFD +aFP +aGI +aIj +aLE +aLE +aLE +aLE +aTc +aLE +aUg +aLE +aLE +aLE +bce +bcF +aAb +adG +aNC aab aab aab @@ -50102,53 +54505,53 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +afX +afX +afX +ahz +ajU +ajU +anO +afX +arL +arH +arT +asW +atK +aup +auL +ave +arL +adG +azY +aAI +aBm +aBZ +aCp +aCD +aEm +aEF +aFg +aFE +aFP +aFM +aIT +aHq +aHq +aHq +aRX +aTw +aTH +aUn +aHq +aHq +aHq +aHq +bfJ +aAa +adG +aNC aab aab aab @@ -50245,52 +54648,52 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNW +afX +afX +ajG +amt +amu +aoR +afX +auR +aAh +aAh +aAh +aAh +aAh +aAh +aAh +axm +adG +azY +aAJ +aBz +aBZ +aCp +aCE +aEm +aEL +aFk +aFG +aGa +aFM +aJq +aLF +aLJ +aMh +aJq +aTG +aTI +aMh +aJq +aWl +aLF +aMh +bfL +adG +adG +aNC aab aab aab @@ -50388,50 +54791,50 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNM +aNW +afX +afX +afX +apd +afX +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +azY +aAK +aBA +aCf +aCp +aCW +aEm +aEM +aFl +aEm +aGb +aFM +aFM +bfH +azX +azX +azX +azX +azX +azX +azX +azX +azX +azX +aAa +adG +arZ aab aab aab @@ -50532,48 +54935,48 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aOt +adG +azY +aAP +aBA +aCg +aCp +aDC +aEm +aEN +aFB +aFH +aGc +aJu +aGa +azY +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +aNC aab aab aab @@ -50687,34 +55090,34 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +azY +aAQ +aBC +aCk +aCp +aAP +aEm +aEm +aEm +aEm +aGJ +aGJ +aJJ +azY +adG +arZ +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM aab aab aab @@ -50829,24 +55232,24 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +aAC +aAR +aAR +aAR +aCq +aDI +aEn +aFI +aFI +aFR +aFR +aFR +aKl +azY +adG +aNC aab aab aab @@ -50971,24 +55374,24 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aOm +adG +adG +adG +adG +adG +aAC +aAR +aAR +aAR +aAR +aAR +aAR +aAR +aAR +aLG +adG +aNC aab aab aab @@ -51114,23 +55517,23 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNM +aNM +aNM +aNW +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +adG +aNC aab aab aab @@ -51260,18 +55663,18 @@ aab aab aab aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab -aab +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM +aNM aab aab aab diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 0178eb04a3..f36d143c62 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -55,11 +55,6 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 10 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -71,6 +66,11 @@ icon_state = "alarm0"; pixel_y = -22 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "aai" = ( @@ -4076,9 +4076,9 @@ dir = 9; icon_state = "steel_grid" }, -/obj/machinery/atmospherics/pipe/simple/hidden{ - dir = 10; - icon_state = "intact" +/obj/machinery/atmospherics/pipe/manifold/hidden{ + dir = 1; + icon_state = "map" }, /turf/simulated/floor/tiled, /area/engineering/engine_airlock) @@ -4105,6 +4105,9 @@ name = "Engine Access"; req_one_access = list(11) }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 8 + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/engine_airlock) "ahE" = ( @@ -4185,6 +4188,9 @@ dir = 10 }, /obj/effect/floor_decal/steeldecal/steel_decals4, +/obj/machinery/atmospherics/pipe/simple/hidden/universal{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/engine_airlock) "ahL" = ( @@ -5670,11 +5676,6 @@ /turf/simulated/floor, /area/engineering/storage) "akX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, @@ -5710,6 +5711,9 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "alb" = ( +/obj/machinery/atmospherics/binary/passive_gate{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/engineering/engine_airlock) "alc" = ( @@ -5904,11 +5908,6 @@ /turf/simulated/floor, /area/engineering/engineering_monitoring) "alu" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -5925,6 +5924,11 @@ /obj/machinery/door/firedoor/glass/hidden/steel{ dir = 1 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "alv" = ( @@ -6216,11 +6220,6 @@ /turf/simulated/floor/wood, /area/hallway/station/atrium) "amc" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, @@ -6309,11 +6308,6 @@ /turf/simulated/floor/wood, /area/hallway/station/atrium) "amj" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, @@ -6329,11 +6323,6 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "amk" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/effect/floor_decal/steeldecal/steel_decals7{ dir = 8 }, @@ -6360,11 +6349,6 @@ /turf/simulated/floor/wood, /area/hallway/station/atrium) "amn" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/effect/floor_decal/steeldecal/steel_decals7{ @@ -6379,6 +6363,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "amo" = ( @@ -6906,11 +6895,6 @@ /turf/simulated/floor/plating, /area/maintenance/abandonedlibrary) "ant" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6924,6 +6908,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "anu" = ( @@ -6959,11 +6948,6 @@ /turf/simulated/floor/wood/broken, /area/maintenance/abandonedlibrary) "any" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -6975,14 +6959,14 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, -/turf/simulated/floor/tiled, -/area/engineering/hallway) -"anz" = ( -/obj/structure/cable{ +/obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/turf/simulated/floor/tiled, +/area/engineering/hallway) +"anz" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/effect/floor_decal/steeldecal/steel_decals7, @@ -6993,6 +6977,16 @@ dir = 4 }, /obj/machinery/light, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "anA" = ( @@ -7005,11 +6999,6 @@ /turf/simulated/floor/plating, /area/maintenance/abandonedlibrary) "anB" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -7021,6 +7010,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 10 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "anC" = ( @@ -7046,16 +7040,6 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "anD" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/structure/disposalpipe/segment{ dir = 2; icon_state = "pipe-c" @@ -7066,17 +7050,22 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "anE" = ( @@ -7086,11 +7075,6 @@ /turf/simulated/floor, /area/maintenance/station/eng_lower) "anF" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -7113,6 +7097,11 @@ name = "Gravity Generator"; req_access = list(11) }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/hallway) "anG" = ( @@ -7829,7 +7818,7 @@ }, /obj/machinery/door/firedoor/glass, /obj/machinery/door/airlock/glass_atmos{ - name = "Atmospherics Substation"; + name = "Backup Atmospherics"; req_access = list(24) }, /turf/simulated/floor/tiled/steel_grid, @@ -8187,6 +8176,11 @@ d2 = 8; icon_state = "4-8" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "apN" = ( @@ -8815,6 +8809,11 @@ name = "Engineering"; sortType = "Engineering" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aqT" = ( @@ -8826,6 +8825,11 @@ dir = 8 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aqU" = ( @@ -9183,6 +9187,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "arI" = ( @@ -10656,6 +10665,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "auw" = ( @@ -10699,6 +10713,11 @@ dir = 4 }, /obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "auz" = ( @@ -11368,6 +11387,11 @@ name = "Engineering Break Room"; sortType = "Engineering Break Room" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "avA" = ( @@ -11878,6 +11902,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/cyan{ dir = 6 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "awo" = ( @@ -15516,6 +15545,11 @@ dir = 4; icon_state = "map" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aCS" = ( @@ -16216,6 +16250,11 @@ icon_state = "map" }, /obj/machinery/meter, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aEy" = ( @@ -16794,6 +16833,11 @@ dir = 9; icon_state = "intact" }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "aIl" = ( @@ -20002,6 +20046,11 @@ name = "Engineering Lobby"; req_one_access = newlist() }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/foyer) "bzR" = ( @@ -20809,6 +20858,11 @@ name = "Engineering Hallway"; req_one_access = list(10) }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/foyer) "chD" = ( @@ -20860,12 +20914,6 @@ /area/tether/station/dock_two) "cto" = ( /obj/machinery/door/firedoor/glass, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, @@ -20877,6 +20925,11 @@ id_tag = "gravity_outer"; req_access = list(11) }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "cuX" = ( @@ -20922,18 +20975,17 @@ dir = 4; icon_state = "map" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techmaint, /area/engineering/gravity_lobby) "cTc" = ( @@ -21067,6 +21119,14 @@ }, /turf/simulated/floor/tiled/techmaint, /area/engineering/gravity_gen) +"dub" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/engineering/foyer) "dzP" = ( /obj/effect/floor_decal/borderfloor{ dir = 8 @@ -21159,6 +21219,14 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/carpet/purcarpet, /area/bridge/meeting_room) +"eed" = ( +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/engineering/hallway) "ejF" = ( /obj/effect/floor_decal/borderfloor/corner{ dir = 1 @@ -21428,6 +21496,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden, /turf/simulated/floor/tiled, /area/tether/station/dock_one) +"fPT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/disposalpipe/segment, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/engineering/hallway) "fTF" = ( /obj/structure/cable/green{ d1 = 1; @@ -21455,15 +21534,14 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 1 }, -/obj/structure/cable{ - d2 = 2; - icon_state = "0-2"; - pixel_y = 0 - }, /obj/machinery/power/apc/super{ dir = 1; pixel_y = 28 }, +/obj/structure/cable/green{ + d2 = 2; + icon_state = "0-2" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) "fXG" = ( @@ -21481,11 +21559,6 @@ d2 = 2; icon_state = "1-2" }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/engineering/hallway) @@ -21786,6 +21859,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 5 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "hLV" = ( @@ -21985,11 +22063,6 @@ /turf/simulated/floor/tiled, /area/tether/station/dock_one) "juf" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/structure/cable/green{ d1 = 1; d2 = 2; @@ -22004,6 +22077,11 @@ /obj/structure/disposalpipe/junction{ dir = 8 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "juI" = ( @@ -22017,6 +22095,11 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 9 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "jFv" = ( @@ -22033,13 +22116,10 @@ dir = 8; icon_state = "bordercolorcorner" }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, /obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) "jNX" = ( @@ -22064,15 +22144,15 @@ dir = 9; icon_state = "steel_grid" }, -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) "jOH" = ( @@ -22228,6 +22308,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "kJJ" = ( @@ -22592,6 +22677,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "nll" = ( @@ -22743,17 +22833,14 @@ /obj/effect/floor_decal/corner/yellow/border{ dir = 8 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, /obj/machinery/firealarm{ dir = 8; pixel_x = -24 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) "oso" = ( @@ -22800,11 +22887,6 @@ /turf/simulated/floor/tiled/steel_grid, /area/tether/station/dock_two) "oAK" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, @@ -22812,6 +22894,11 @@ dir = 8 }, /obj/structure/disposalpipe/junction/yjunction, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "oFB" = ( @@ -22998,18 +23085,17 @@ dir = 6; icon_state = "steel_grid" }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "qdM" = ( @@ -23103,6 +23189,22 @@ }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) +"qvC" = ( +/obj/structure/disposalpipe/segment{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/hallway/station/atrium) "qxn" = ( /obj/effect/floor_decal/techfloor/orange{ dir = 10 @@ -23123,18 +23225,17 @@ /obj/machinery/atmospherics/pipe/simple/hidden{ dir = 4 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/techmaint, /area/engineering/gravity_lobby) "riO" = ( @@ -23197,7 +23298,7 @@ name = "west bump"; pixel_x = -28 }, -/obj/structure/cable{ +/obj/structure/cable/green{ d2 = 4; icon_state = "0-4" }, @@ -23394,11 +23495,6 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "sjw" = ( -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/door/firedoor/glass, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -23410,6 +23506,11 @@ name = "Gravity Generator"; req_access = list(11) }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled/steel_grid, /area/engineering/gravity_lobby) "sqw" = ( @@ -23508,6 +23609,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/hallway/station/atrium) "sTb" = ( @@ -23644,6 +23750,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "tqW" = ( @@ -23818,14 +23929,13 @@ /turf/simulated/floor/tiled, /area/engineering/hallway) "uOm" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "uTq" = ( @@ -23976,7 +24086,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/engineering/hallway) "vms" = ( @@ -24001,17 +24113,17 @@ /turf/space, /area/space) "vxw" = ( -/obj/structure/cable{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 10 }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "vyI" = ( @@ -24048,6 +24160,11 @@ /obj/structure/disposalpipe/segment{ dir = 4 }, +/obj/structure/cable{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/foyer) "vAQ" = ( @@ -24057,17 +24174,17 @@ /obj/effect/floor_decal/steeldecal/steel_decals4{ dir = 6 }, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "vCw" = ( @@ -24134,13 +24251,10 @@ /obj/effect/floor_decal/corner/yellow/bordercorner2{ dir = 10 }, -/obj/structure/cable{ - d1 = 1; - d2 = 2; - icon_state = "1-2"; - pixel_y = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_gen) "wbY" = ( @@ -24353,18 +24467,17 @@ dir = 4 }, /obj/machinery/door/firedoor/glass, -/obj/structure/cable{ - d1 = 4; - d2 = 8; - icon_state = "4-8"; - pixel_x = 0 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) "xMk" = ( @@ -24459,22 +24572,22 @@ /turf/simulated/floor/tiled, /area/hallway/station/atrium) "ykG" = ( -/obj/structure/cable{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/obj/structure/cable{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 8 }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/engineering/gravity_lobby) @@ -31641,17 +31754,17 @@ aCR aEx aCR aIi -atW +eed mYV ceq vAn tpy -aoI +dub kHi hKn bzw jBX -agj +qvC sRG aws fjd @@ -31769,7 +31882,7 @@ bcc hAh qsp oAK -aKt +fPT apM aqS aqT diff --git a/maps/tether/tether-09-solars.dmm b/maps/tether/tether-09-solars.dmm index 167568a6d1..d5d2c5afde 100644 --- a/maps/tether/tether-09-solars.dmm +++ b/maps/tether/tether-09-solars.dmm @@ -279,15 +279,18 @@ /area/tether/outpost/solars_shed) "aC" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/stack/cable_coil/lime, -/obj/structure/table/standard, -/obj/structure/cable/yellow{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/structure/cable/heavyduty{ + icon_state = "0-8" }, -/turf/simulated/floor/virgo3b_indoors, -/area/tether/outpost/solars_shed) +/obj/structure/cable/heavyduty{ + icon_state = "0-2" + }, +/obj/machinery/power/sensor{ + name = "Powernet Sensor - Solar Farm Output"; + name_tag = "Solar Farm Output" + }, +/turf/simulated/floor/virgo3b, +/area/tether/outpost/solars_outside) "aD" = ( /obj/effect/decal/cleanable/dirt, /obj/structure/cable/yellow{ @@ -313,19 +316,20 @@ /area/tether/outpost/solars_shed) "aG" = ( /obj/effect/decal/cleanable/dirt, -/obj/structure/cable/heavyduty{ - icon_state = "2-8" - }, -/obj/structure/cable/heavyduty{ - icon_state = "2-4" +/obj/structure/table/standard, +/obj/structure/cable/yellow{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, +/obj/item/stack/cable_coil/yellow, /turf/simulated/floor/virgo3b_indoors, /area/tether/outpost/solars_shed) "aH" = ( -/obj/structure/grille, /obj/structure/cable/heavyduty{ icon_state = "4-8" }, +/obj/structure/grille, /turf/simulated/floor/virgo3b_indoors, /area/tether/outpost/solars_shed) "aI" = ( @@ -357,17 +361,10 @@ /turf/simulated/floor/virgo3b, /area/tether/outpost/solars_outside) "aK" = ( +/obj/structure/cable/heavyduty{ + icon_state = "1-2" + }, /obj/effect/decal/cleanable/dirt, -/obj/structure/cable/heavyduty{ - icon_state = "0-8" - }, -/obj/structure/cable/heavyduty{ - icon_state = "0-2" - }, -/obj/machinery/power/sensor{ - name = "Powernet Sensor - Solar Farm Output"; - name_tag = "Solar Farm Output" - }, /turf/simulated/floor/virgo3b, /area/tether/outpost/solars_outside) "aL" = ( @@ -381,32 +378,31 @@ /turf/simulated/floor/virgo3b_indoors, /area/tether/outpost/solars_shed) "aM" = ( -/obj/machinery/power/smes/buildable{ - charge = 0; - output_attempt = 0; - outputting = 0; - RCon_tag = "Solar Farm - SMES 1" +/obj/structure/cable/heavyduty{ + icon_state = "4-8" }, -/obj/structure/cable/heavyduty, -/turf/simulated/floor/virgo3b_indoors, -/area/tether/outpost/solars_shed) -"aN" = ( -/obj/machinery/power/smes/buildable{ - charge = 0; - output_attempt = 0; - outputting = 0; - RCon_tag = "Solar Farm - SMES 2" - }, -/obj/structure/cable/heavyduty, -/turf/simulated/floor/virgo3b_indoors, -/area/tether/outpost/solars_shed) -"aO" = ( +/obj/structure/railing, /obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/virgo3b, +/area/tether/outpost/solars_outside) +"aN" = ( +/obj/structure/cable/heavyduty{ + icon_state = "1-2" + }, +/obj/machinery/light/small{ + dir = 8; + pixel_x = 0 + }, +/obj/effect/decal/cleanable/dirt, +/turf/simulated/floor/virgo3b, +/area/tether/outpost/solars_outside) +"aO" = ( /obj/machinery/power/smes/buildable{ charge = 0; + cur_coils = 3; output_attempt = 0; outputting = 0; - RCon_tag = "Solar Farm - SMES 3" + RCon_tag = "Power - Solar Array" }, /obj/structure/cable/heavyduty, /turf/simulated/floor/virgo3b_indoors, @@ -461,22 +457,6 @@ }, /turf/simulated/floor/virgo3b_indoors, /area/tether/outpost/solars_shed) -"aU" = ( -/obj/effect/decal/cleanable/dirt, -/obj/machinery/power/terminal{ - icon_state = "term"; - dir = 1 - }, -/obj/structure/cable/yellow{ - d2 = 8; - icon_state = "0-8" - }, -/obj/structure/cable/yellow{ - d2 = 4; - icon_state = "0-4" - }, -/turf/simulated/floor/virgo3b_indoors, -/area/tether/outpost/solars_shed) "aV" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/power/terminal{ @@ -503,12 +483,10 @@ /turf/simulated/floor/virgo3b, /area/tether/outpost/solars_outside) "aY" = ( -/obj/structure/cable/heavyduty{ - icon_state = "1-2" - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/virgo3b, -/area/tether/outpost/solars_outside) +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/steel_dirty/virgo3b, +/area/mine/explored) "aZ" = ( /obj/structure/railing, /obj/effect/decal/cleanable/dirt, @@ -549,17 +527,6 @@ /obj/machinery/door/airlock/multi_tile/metal/mait, /turf/simulated/floor/virgo3b_indoors, /area/tether/outpost/solars_shed) -"bd" = ( -/obj/structure/cable/heavyduty{ - icon_state = "1-2" - }, -/obj/machinery/light/small{ - dir = 8; - pixel_x = 0 - }, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/virgo3b, -/area/tether/outpost/solars_outside) "be" = ( /obj/effect/floor_decal/industrial/warning/dust{ dir = 8 @@ -665,14 +632,6 @@ /obj/effect/decal/cleanable/dirt, /turf/simulated/floor/virgo3b, /area/mine/explored) -"bq" = ( -/obj/structure/cable/heavyduty{ - icon_state = "4-8" - }, -/obj/structure/railing, -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/virgo3b, -/area/tether/outpost/solars_outside) "br" = ( /mob/living/simple_mob/animal/passive/gaslamp, /turf/simulated/floor/tiled/steel_dirty/virgo3b, @@ -19601,7 +19560,7 @@ ad ad ad au -aC +aG aE aT au @@ -20028,8 +19987,8 @@ ad ad au aF -aM -aU +aO +aV bP bm bl @@ -20169,9 +20128,9 @@ ad ad ad au -aG -aN -aU +aH +au +au bb bl bv @@ -20310,12 +20269,12 @@ ad ad ad ad -au -aG -aO -aV -au -bl +ad +aC +aK +aK +aN +bn bl ad ad @@ -20452,12 +20411,12 @@ ad ad ad ad -au -aH -au -au -au -al +ad +aW +aW +aW +aW +aM bl ad ad @@ -20595,12 +20554,12 @@ ad ad ad ad -aK -aY -aY -bd -bn -bl +ad +ad +ad +ad +bo +bj ad ad ad @@ -20737,12 +20696,12 @@ ad ad ad ad -aW -aW -aW -aW -bq -bv +ad +ad +ad +ad +bo +aY ad ad ad @@ -22212,7 +22171,7 @@ bF bF bF bF -bG +bF bF bF bF diff --git a/maps/tether/tether_areas.dm b/maps/tether/tether_areas.dm index 9c595e82e1..f7ef8794dd 100644 --- a/maps/tether/tether_areas.dm +++ b/maps/tether/tether_areas.dm @@ -221,6 +221,12 @@ name = "\improper Bar Backroom" icon_state = "red" sound_env = SMALL_SOFTFLOOR +/area/tether/surfacebase/servicebackroom + name = "\improper Service Block Backroom" + icon_state = "red" +/area/tether/surfacebase/barbackmaintenance + name = "\improper Bar Back Maintenance" + icon_state = "red" /area/tether/surfacebase/public_garden_lg name = "\improper Public Garden Looking Glass" @@ -378,6 +384,23 @@ lightswitch = 0 icon_state = "library" +/area/tether/surfacebase/entertainment + name = "\improper Entertainment Auditorium" + icon_state = "library" + +/area/tether/surfacebase/entertainment/stage + name = "\improper Entertainment Stage" + icon_state = "library" + +/area/tether/surfacebase/entertainment/backstage + name = "\improper Entertainment Backstage" + icon_state = "library" + +/area/tether/surfacebase/botanystorage + name = "\improper Botany Storage" + icon_state = "library" + + /area/tether/surfacebase/security icon_state = "security" /area/tether/surfacebase/security/breakroom @@ -537,6 +560,15 @@ /area/rnd/breakroom/bathroom name = "\improper Research Bathroom" icon_state = "research" +/area/rnd/testingroom + name = "\improper Research Testing Room" + icon_state = "research" +/area/rnd/hardstorage + name = "\improper Research Hard Storage" + icon_state = "research" +/area/rnd/tankstorage + name = "\improper Research Tank Storage" + icon_state = "research" //TFF 28/8/19 - cleanup of areas placement /area/rnd/research/testingrange diff --git a/maps/virgo/virgo-1.dmm b/maps/virgo/virgo-1.dmm index 4450499fde..070412998b 100644 --- a/maps/virgo/virgo-1.dmm +++ b/maps/virgo/virgo-1.dmm @@ -4249,7 +4249,7 @@ "bDK" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/maintenance/central) "bDL" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/reagentgrinder,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bDM" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bDN" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bDN" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bDO" = (/obj/effect/floor_decal/corner/lime{dir = 5},/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/tiled,/area/hydroponics) "bDP" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 8},/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced,/obj/structure/window/reinforced{dir = 1},/obj/machinery/door/firedoor/border_only,/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bDQ" = (/obj/structure/closet/secure_closet/hydroponics,/obj/effect/floor_decal/corner/lime/full{dir = 8},/turf/simulated/floor/tiled,/area/hydroponics) @@ -4668,8 +4668,8 @@ "bLN" = (/obj/effect/floor_decal/corner/blue,/obj/structure/reagent_dispensers/water_cooler/full,/turf/simulated/floor/tiled,/area/bridge_hallway) "bLO" = (/turf/simulated/wall/r_wall,/area/crew_quarters/captain) "bLP" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/disposal,/obj/structure/disposalpipe/trunk,/obj/structure/extinguisher_cabinet{pixel_x = 5; pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bLQ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/grill,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bLR" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/fryer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bLQ" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/grill,/obj/machinery/newscaster{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bLR" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/cooker/fryer,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bLS" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/disposalpipe/segment,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bLT" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/closet/secure_closet/freezer/fridge,/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/machinery/atmospherics/unary/vent_scrubber/on,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bLU" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) @@ -4886,9 +4886,9 @@ "bPX" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bPY" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/table/marble,/obj/machinery/chemical_dispenser/bar_soft/full,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bPZ" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/reagent_containers/food/snacks/mint,/obj/item/weapon/reagent_containers/food/condiment/enzyme{layer = 5},/obj/item/weapon/packageWrap,/obj/item/weapon/reagent_containers/dropper,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bQa" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/cooker/candy,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQa" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/appliance/mixer/candy,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bQb" = (/obj/structure/table/marble,/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/item/weapon/storage/box/donkpockets{pixel_x = 3; pixel_y = 3},/obj/item/weapon/reagent_containers/glass/beaker{pixel_x = 5},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) -"bQc" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/cooker/cereal,/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Starboard"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) +"bQc" = (/obj/effect/floor_decal/corner/grey/diagonal{dir = 4},/obj/machinery/appliance/mixer/cereal,/obj/machinery/camera/network/civilian{c_tag = "CIV - Kitchen Starboard"; dir = 8},/obj/machinery/light{dir = 4},/turf/simulated/floor/tiled/white,/area/crew_quarters/kitchen) "bQd" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 4},/obj/structure/window/reinforced{dir = 8},/obj/machinery/door/firedoor/border_only,/obj/structure/window/reinforced{dir = 1},/turf/simulated/floor/plating,/area/crew_quarters/kitchen) "bQe" = (/obj/structure/flora/ausbushes/brflowers,/obj/structure/flora/ausbushes/ppflowers,/turf/simulated/floor/grass,/area/crew_quarters/kitchen) "bQf" = (/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/tiled,/area/hallway/primary/central_two) diff --git a/maps/yw/cryogaia-01-centcomm.dmm b/maps/yw/cryogaia-01-centcomm.dmm index 55978deb9d..18a788dfb9 100644 --- a/maps/yw/cryogaia-01-centcomm.dmm +++ b/maps/yw/cryogaia-01-centcomm.dmm @@ -9283,7 +9283,7 @@ /turf/unsimulated/map, /area/overmap) "um" = ( -/obj/item/weapon/cigbutt, +/obj/item/trash/cigbutt, /turf/simulated/shuttle/floor/black, /area/shuttle/mercenary) "un" = ( diff --git a/maps/yw/cryogaia-04-maintenance.dmm b/maps/yw/cryogaia-04-maintenance.dmm index 43cd1e2662..b880f52394 100644 --- a/maps/yw/cryogaia-04-maintenance.dmm +++ b/maps/yw/cryogaia-04-maintenance.dmm @@ -6044,7 +6044,7 @@ /turf/simulated/floor/tiled/techfloor, /area/maintenance/starboard) "anP" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor, /area/maintenance/starboard) "anQ" = ( @@ -11648,7 +11648,10 @@ /turf/simulated/floor/plating, /area/crew_quarters/recreation_area) "azg" = ( -/obj/machinery/vending/coffee, +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 4 + }, /turf/simulated/floor/carpet, /area/crew_quarters/recreation_area) "azh" = ( @@ -12091,7 +12094,10 @@ /area/hallway/lower/central) "aAe" = ( /obj/effect/floor_decal/spline/plain, -/obj/machinery/vending/fitness, +/obj/machinery/vending/fitness{ + icon_state = "fitness"; + dir = 4 + }, /turf/simulated/floor/carpet, /area/crew_quarters/recreation_area) "aAf" = ( @@ -13152,7 +13158,10 @@ /turf/simulated/floor/tiled/techfloor/grid, /area/crew_quarters/sleep/cryo) "aCD" = ( -/obj/machinery/lapvend, +/obj/machinery/lapvend{ + icon_state = "robotics"; + dir = 4 + }, /turf/simulated/floor/tiled/techfloor, /area/crew_quarters/sleep/cryo) "aCE" = ( @@ -17915,7 +17924,10 @@ /turf/simulated/floor/tiled/dark, /area/hydroponics) "aNU" = ( -/obj/machinery/vending/fitness, +/obj/machinery/vending/fitness{ + icon_state = "fitness"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/crew_quarters/fitness) "aNV" = ( @@ -18538,8 +18550,11 @@ /turf/simulated/floor/tiled/freezer, /area/crew_quarters/kitchen/lower) "aPu" = ( -/obj/machinery/seed_storage/garden, /obj/effect/floor_decal/corner/green/full, +/obj/machinery/seed_storage/garden{ + icon_state = "seeds"; + dir = 1 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "aPv" = ( @@ -18565,10 +18580,13 @@ pixel_x = 0; pixel_y = -26 }, -/obj/machinery/vending/hydronutrients, /obj/effect/floor_decal/corner/green{ dir = 10 }, +/obj/machinery/vending/hydronutrients{ + icon_state = "nutri_generic"; + dir = 1 + }, /turf/simulated/floor/tiled/hydro, /area/hydroponics) "aPx" = ( @@ -27737,13 +27755,17 @@ /obj/effect/floor_decal/industrial/warning{ dir = 1 }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, /obj/structure/cable{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, /turf/simulated/floor, /area/maintenance/atmos_control) "bhv" = ( @@ -30567,7 +30589,7 @@ /area/maintenance/dorm) "bmQ" = ( /obj/effect/decal/cleanable/dirt, -/obj/item/weapon/cigbutt/cigarbutt, +/obj/item/trash/cigbutt/cigarbutt, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, @@ -35980,13 +36002,6 @@ /obj/random/maintenance/security, /turf/simulated/floor, /area/maintenance/aft) -"byb" = ( -/obj/structure/table/rack, -/obj/item/weapon/flame/lighter/random, -/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, -/obj/random/maintenance/clean, -/turf/simulated/floor/plating, -/area/maintenance/aft) "byc" = ( /obj/structure/cable{ icon_state = "4-8" @@ -40655,6 +40670,13 @@ "qDc" = ( /turf/simulated/mineral/floor, /area/mine/unexplored/lower_rock) +"qJo" = ( +/obj/structure/table/rack, +/obj/item/weapon/flame/lighter/random, +/obj/item/weapon/storage/fancy/cigarettes/dromedaryco, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/mine/explored/lower_rock) "qWF" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, @@ -88188,7 +88210,7 @@ btE btE btE btE -bls +bkO bls bkO bzy @@ -88438,9 +88460,9 @@ btE btE bvi bvV +bvj bwI -btE -bls +bkO bls byv boQ @@ -88690,9 +88712,9 @@ btE bus bvj bvW +bvj bwJ -btE -bls +bkO bls byv bzz @@ -88942,9 +88964,9 @@ btE but bvj aCz +bvj bwK -btE -bls +bkO bls bkO bkO @@ -89194,9 +89216,9 @@ btE buu bvj bvY +bvj bwL -btE -bls +bkO bls bls bls @@ -89448,7 +89470,7 @@ bvk bvZ bwM btE -byb +bkO bls bwc bls @@ -89700,7 +89722,7 @@ btE btE btE btE -aan +qJo bls bls bls diff --git a/maps/yw/cryogaia-05-main.dmm b/maps/yw/cryogaia-05-main.dmm index bf6774b894..ca60be6528 100644 --- a/maps/yw/cryogaia-05-main.dmm +++ b/maps/yw/cryogaia-05-main.dmm @@ -2252,11 +2252,11 @@ /turf/simulated/floor/wood, /area/borealis2/outdoors/grounds) "aeI" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/wood, /area/borealis2/outdoors/grounds) "aeJ" = ( -/obj/structure/closet/crate/freezer/meat, +/obj/structure/closet/crate/freezer, /turf/simulated/floor/wood, /area/borealis2/outdoors/grounds) "aeK" = ( @@ -3252,6 +3252,11 @@ dir = 4 }, /obj/effect/floor_decal/corner/blue, +/obj/machinery/light{ + dir = 4; + icon_state = "tube1"; + pixel_x = 0 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/exit_link) "agS" = ( @@ -3762,7 +3767,13 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "ahY" = ( -/obj/machinery/seed_storage/garden, +/obj/machinery/seed_storage/garden{ + icon_state = "seeds"; + dir = 4 + }, +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 4 + }, /turf/simulated/floor/tiled/yellow, /area/chapel/monastery/kitchen) "ahZ" = ( @@ -4106,7 +4117,10 @@ /turf/simulated/floor/plating, /area/hallway/secondary/entry/docking_lounge) "aiD" = ( -/obj/machinery/vending/hydronutrients, +/obj/machinery/vending/hydronutrients{ + icon_state = "nutri_generic"; + dir = 4 + }, /turf/simulated/floor/tiled/yellow, /area/chapel/monastery/kitchen) "aiE" = ( @@ -4891,13 +4905,12 @@ /turf/simulated/floor/tiled, /area/hallway/secondary/exit_link) "akf" = ( -/obj/machinery/vending/cigarette, /obj/effect/floor_decal/corner/blue{ dir = 1 }, /obj/machinery/camera/network/civilian{ - c_tag = "Dormitory Hall South"; - dir = 2 + c_tag = "Arrivals"; + dir = 4 }, /obj/machinery/firealarm{ dir = 8; @@ -4907,6 +4920,10 @@ /obj/effect/floor_decal/corner/white{ dir = 8 }, +/obj/machinery/vending/cigarette{ + icon_state = "cigs"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "akg" = ( @@ -5166,6 +5183,10 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 28 + }, /turf/simulated/floor/tiled/freezer, /area/chapel/monastery/brew) "akA" = ( @@ -5318,7 +5339,6 @@ /area/chapel/monastery/recreation) "akR" = ( /obj/structure/table/glass, -/obj/item/device/instrument/violin, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/wood, @@ -5491,7 +5511,6 @@ /turf/simulated/floor/tiled/white, /area/maintenance/medbay) "alk" = ( -/obj/machinery/vending/cola, /obj/effect/floor_decal/corner/blue{ dir = 1 }, @@ -5503,6 +5522,10 @@ /obj/effect/floor_decal/corner/white{ dir = 8 }, +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "all" = ( @@ -5759,13 +5782,16 @@ /turf/simulated/floor/tiled, /area/medical/resleeving) "alN" = ( -/obj/machinery/vending/snack, /obj/effect/floor_decal/corner/blue{ dir = 1 }, /obj/effect/floor_decal/corner/white{ dir = 8 }, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "alO" = ( @@ -6496,6 +6522,9 @@ /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 }, +/obj/machinery/light{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "ano" = ( @@ -7430,7 +7459,6 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay3) "aoR" = ( -/obj/machinery/vending/coffee, /obj/effect/floor_decal/corner/blue{ dir = 1 }, @@ -7441,6 +7469,10 @@ dir = 4; pixel_x = -30 }, +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/secondary/entry/docking_lounge) "aoS" = ( @@ -14931,6 +14963,7 @@ frequency = 1441; pixel_y = 22 }, +/obj/machinery/recharge_station, /turf/simulated/floor/plating, /area/medical/medbay_emt_bay) "aBM" = ( @@ -17895,7 +17928,10 @@ /turf/simulated/floor/tiled, /area/civilian/atrium/central) "aHz" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/civilian/atrium/central) "aHA" = ( @@ -18120,6 +18156,7 @@ dir = 4 }, /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/hallway/primary/central_one) "aIa" = ( @@ -18175,7 +18212,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/heads/hop) "aIf" = ( -/obj/machinery/vending/cigarette, +/obj/machinery/vending/cigarette{ + icon_state = "cigs"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/civilian/atrium/central) "aIg" = ( @@ -18696,7 +18736,10 @@ /turf/simulated/floor/tiled, /area/storage/art) "aJh" = ( -/obj/machinery/vending/cola, +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/civilian/atrium/central) "aJi" = ( @@ -19602,7 +19645,7 @@ "aKY" = ( /obj/effect/decal/cleanable/dirt, /obj/machinery/door/airlock/multi_tile/metal/mait, -/turf/simulated/floor/plating/snow/plating/cryogaia, +/turf/simulated/floor/plating/snow/plating, /area/maintenance/auxsolarport) "aKZ" = ( /obj/machinery/trailblazer/blue, @@ -19944,10 +19987,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/maintenance/bridge) -"aLJ" = ( -/obj/effect/decal/cleanable/dirt, -/turf/simulated/floor/plating/snow/plating/cryogaia, -/area/maintenance/auxsolarport) "aLK" = ( /turf/simulated/wall, /area/borealis2/outdoors/exterior/explore1) @@ -20518,7 +20557,7 @@ pixel_x = 8; pixel_y = 25 }, -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) @@ -21464,7 +21503,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "aOJ" = ( -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/light{ dir = 1 @@ -21472,7 +21511,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "aOK" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/effect/floor_decal/corner/grey/diagonal, /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) @@ -21939,7 +21978,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "aPB" = ( -/obj/machinery/cooker/cereal, +/obj/machinery/appliance/mixer/cereal, /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/camera/network/civilian{ @@ -21950,7 +21989,7 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/kitchen) "aPD" = ( -/obj/machinery/cooker/candy, +/obj/machinery/appliance/mixer/candy, /obj/effect/floor_decal/corner/grey/diagonal, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -25057,14 +25096,10 @@ /turf/simulated/floor/tiled, /area/hallway/primary/central_one) "aVk" = ( -/obj/machinery/vending/cigarette{ - name = "Cigarette machine"; - prices = list(); - products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2) - }, /obj/effect/floor_decal/corner/blue{ dir = 5 }, +/obj/machinery/vending/cigarette, /turf/simulated/floor/tiled, /area/hallway/primary/central_one) "aVl" = ( @@ -32010,7 +32045,10 @@ dir = 8 }, /obj/effect/floor_decal/corner_oldtile/purple, -/obj/machinery/vending/snack, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/hallway/primary/starboard) "bgT" = ( @@ -32272,7 +32310,10 @@ /turf/simulated/wall, /area/storage/tech) "bhw" = ( -/obj/machinery/vending/assist, +/obj/machinery/vending/assist{ + icon_state = "generic"; + dir = 8 + }, /turf/simulated/floor, /area/storage/tech) "bhx" = ( @@ -33904,7 +33945,10 @@ /turf/simulated/floor/plating, /area/maintenance/security) "bkk" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 4 + }, /turf/simulated/floor/carpet, /area/engineering/foyer) "bkl" = ( @@ -40342,7 +40386,6 @@ /turf/simulated/floor/tiled/freezer, /area/rnd/research) "bvM" = ( -/obj/machinery/vending/cigarette, /obj/effect/floor_decal/corner_oldtile/purple{ dir = 8 }, @@ -40350,6 +40393,10 @@ /obj/effect/floor_decal/corner_oldtile/purple{ dir = 1 }, +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/rnd/research) "bvN" = ( @@ -43515,7 +43562,6 @@ /turf/simulated/floor, /area/rnd/research) "bBb" = ( -/obj/machinery/vending/cigarette, /obj/machinery/light/small{ dir = 8; pixel_y = 0 @@ -43526,6 +43572,10 @@ /obj/effect/floor_decal/corner_oldtile/purple{ dir = 1 }, +/obj/machinery/vending/cigarette{ + icon_state = "cigs"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/hallway/primary/starboard) "bBc" = ( @@ -43685,10 +43735,11 @@ d2 = 8; icon_state = "2-8" }, -/obj/structure/disposalpipe/segment{ - dir = 4 - }, /obj/effect/floor_decal/rust, +/obj/structure/disposalpipe/junction{ + dir = 8; + icon_state = "pipe-j2" + }, /turf/simulated/floor/tiled, /area/quartermaster/miningwing) "bBn" = ( @@ -44331,6 +44382,7 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 }, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/quartermaster/miningwing) "bCA" = ( @@ -45044,6 +45096,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/quartermaster/miningwing) "bDU" = ( @@ -46609,6 +46662,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled, /area/quartermaster/miningwing) "bGq" = ( @@ -46628,6 +46682,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/light, /turf/simulated/floor/tiled, /area/quartermaster/miningwing) "bGr" = ( @@ -48379,6 +48434,7 @@ }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor, /area/maintenance/substation/cargo) "bJg" = ( @@ -48556,11 +48612,14 @@ /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_meeting) "bJq" = ( -/obj/machinery/vending/snack, /obj/effect/floor_decal/corner_oldtile/purple{ dir = 4 }, /obj/effect/floor_decal/corner_oldtile/purple, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_meeting) "bJr" = ( @@ -49089,6 +49148,10 @@ dir = 5; icon_state = "intact-supply" }, +/obj/structure/disposalpipe/segment{ + dir = 1; + icon_state = "pipe-c" + }, /turf/simulated/floor, /area/maintenance/substation/cargo) "bKi" = ( @@ -49177,11 +49240,14 @@ icon_state = "tube1"; pixel_x = 0 }, -/obj/machinery/vending/cola, /obj/effect/floor_decal/corner_oldtile/purple{ dir = 4 }, /obj/effect/floor_decal/corner_oldtile/purple, +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_meeting) "bKu" = ( @@ -49838,7 +49904,7 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "bLz" = ( -/obj/machinery/recharge_station, +/obj/machinery/suit_cycler/medical, /turf/simulated/floor/tiled/white, /area/medical/medbay_emt_bay) "bLA" = ( @@ -50415,7 +50481,10 @@ /turf/simulated/floor/tiled/white, /area/rnd/research) "bME" = ( -/obj/machinery/lapvend, +/obj/machinery/lapvend{ + icon_state = "robotics"; + dir = 8 + }, /turf/simulated/floor/tiled/white, /area/rnd/research) "bMF" = ( @@ -53887,10 +53956,13 @@ /turf/simulated/floor/tiled, /area/crew_quarters/locker) "bSV" = ( -/obj/machinery/lapvend, /obj/machinery/light{ dir = 4 }, +/obj/machinery/lapvend{ + icon_state = "robotics"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/crew_quarters/locker) "bSW" = ( @@ -54948,7 +55020,7 @@ /turf/simulated/wall/rshull, /area/shuttle/excursion) "bUS" = ( -/obj/machinery/cooker/grill{ +/obj/machinery/appliance/cooker/grill{ dir = 2 }, /turf/simulated/floor/tiled/techmaint, @@ -54991,6 +55063,8 @@ dir = 4; pixel_x = -30 }, +/obj/structure/table/steel, +/obj/machinery/recharger, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/checkpoint) "bUY" = ( @@ -56974,8 +57048,11 @@ /turf/simulated/floor/tiled, /area/crew_quarters/locker) "bYM" = ( -/obj/machinery/vending/cola, /obj/machinery/computer/timeclock/premade/south, +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/crew_quarters/locker) "bYN" = ( @@ -57065,12 +57142,18 @@ /area/cryogaia/station/explorer_prep) "bYW" = ( /obj/effect/floor_decal/steeldecal/steel_decals5, -/obj/machinery/vending/coffee, +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/excursion_dock) "bYX" = ( /obj/effect/floor_decal/steeldecal/steel_decals5, -/obj/machinery/vending/cigarette, +/obj/machinery/vending/cigarette{ + icon_state = "cigs"; + dir = 1 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/excursion_dock) "bYY" = ( @@ -58359,24 +58442,6 @@ /obj/structure/lattice, /turf/simulated/floor/outdoors/snow/snow/snow2/cryogaia, /area/borealis2/outdoors/grounds) -"cbo" = ( -/obj/effect/floor_decal/snow/floor/edges{ - dir = 8 - }, -/obj/effect/overlay/snow/floor, -/turf/simulated/floor/plating/snow/plating, -/area/borealis2/outdoors/grounds) -"cbp" = ( -/obj/effect/overlay/snow/floor, -/turf/simulated/floor/plating/snow/plating, -/area/borealis2/outdoors/grounds) -"cbq" = ( -/obj/effect/overlay/snow/floor, -/obj/effect/floor_decal/snow/floor/edges{ - dir = 4 - }, -/turf/simulated/floor/plating/snow/plating, -/area/borealis2/outdoors/grounds) "cbr" = ( /obj/structure/table/reinforced, /obj/item/clothing/ears/earmuffs, @@ -59433,6 +59498,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor, /area/maintenance/substation/cargo) "cdr" = ( @@ -59745,19 +59811,12 @@ }, /turf/simulated/floor/tiled/techfloor/grid, /area/shuttle/excursion) -"cdZ" = ( -/obj/effect/overlay/snow/floor, -/obj/effect/floor_decal/snow/floor/edges3{ - dir = 8 - }, -/turf/simulated/floor/plating/snow/plating, -/area/borealis2/outdoors/grounds) "cea" = ( /obj/effect/overlay/snow/floor, /obj/effect/floor_decal/snow/floor/edges3{ dir = 4 }, -/turf/simulated/floor/plating/snow/plating, +/turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds) "cec" = ( /obj/structure/disposaloutlet{ @@ -60605,7 +60664,10 @@ /turf/simulated/floor/wood, /area/crew_quarters/bar) "cgl" = ( -/obj/machinery/vending/fitness, +/obj/machinery/vending/fitness{ + icon_state = "fitness"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/crew_quarters/locker) "cgn" = ( @@ -61594,7 +61656,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medbay) "cin" = ( -/obj/machinery/vending/medical, +/obj/machinery/vending/medical{ + icon_state = "med"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/medical/medbay_emt_bay) "cio" = ( @@ -63236,7 +63301,7 @@ c_tag = "Emergency Ejection Port - Interior Wall"; dir = 1 }, -/turf/simulated/floor/plating/snow/plating, +/turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds) "cGu" = ( /turf/simulated/floor/tiled/dark, @@ -63264,6 +63329,9 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor, /area/maintenance/substation/cargo) "cLk" = ( @@ -63330,6 +63398,7 @@ d2 = 4; icon_state = "1-4" }, +/obj/structure/table/steel, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/southeast) "cOF" = ( @@ -63579,7 +63648,7 @@ /obj/structure/cable/heavyduty{ icon_state = "1-8" }, -/turf/simulated/floor/plating/snow/plating/cryogaia, +/turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/grounds/power) "eie" = ( /obj/structure/cable/green{ @@ -63728,6 +63797,10 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds) +"eHd" = ( +/obj/structure/table/steel, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/west) "eIs" = ( /obj/machinery/porta_turret/stationary, /turf/simulated/floor/plating/snow/plating, @@ -63842,6 +63915,11 @@ }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/west) +"eYR" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/southeast) "fat" = ( /obj/item/device/geiger/wall{ dir = 4; @@ -64034,6 +64112,12 @@ /obj/machinery/power/shield_generator, /turf/simulated/floor, /area/engineering/storage) +"fZU" = ( +/obj/effect/floor_decal/snow/floor/edges{ + dir = 4 + }, +/turf/simulated/floor/outdoors/snow/snow/cryogaia/covered, +/area/borealis2/outdoors/grounds) "gai" = ( /obj/machinery/light, /obj/structure/cable/green{ @@ -64192,6 +64276,10 @@ /obj/item/device/radio, /turf/simulated/floor/tiled/dark, /area/security/briefing_room) +"gUE" = ( +/obj/structure/table/steel, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/south) "gVy" = ( /obj/structure/cable/green{ d1 = 4; @@ -64908,7 +64996,7 @@ /obj/machinery/camera/network/outside{ c_tag = "Emergency Ejection Port - Chamber Wall" }, -/turf/simulated/floor/plating/snow/plating, +/turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds) "jOQ" = ( /obj/structure/cable/green{ @@ -65111,6 +65199,11 @@ }, /turf/simulated/floor/tiled, /area/civilian/atrium/central) +"kCp" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/west) "kCz" = ( /obj/effect/floor_decal/rust, /obj/machinery/light{ @@ -65543,6 +65636,13 @@ /obj/structure/stairs/east, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/northeast) +"muJ" = ( +/obj/effect/floor_decal/snow/floor/edges{ + dir = 1 + }, +/obj/effect/floor_decal/snow/floor/edges, +/turf/simulated/floor/outdoors/snow/gravsnow/cryogaia/covered, +/area/borealis2/outdoors/grounds) "mvx" = ( /obj/effect/floor_decal/snow/floor/edges{ dir = 1 @@ -65738,6 +65838,13 @@ /obj/effect/floor_decal/snow/floor/edges3, /turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/exterior) +"ndl" = ( +/obj/machinery/vending/fitness{ + icon_state = "fitness"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/hallway/secondary/exit) "ngK" = ( /obj/machinery/camera/network/outside{ c_tag = "Arrivals Access South" @@ -66172,6 +66279,10 @@ /obj/structure/sign/directions/cargo, /turf/simulated/floor/plating, /area/hallway/primary/central_one) +"oTi" = ( +/obj/cryogaia_away_spawner/cryogaia, +/turf/simulated/floor/outdoors/snow/snow/cryogaia/covered, +/area/borealis2/outdoors/grounds) "oTz" = ( /obj/structure/cable/green{ d1 = 4; @@ -66218,6 +66329,11 @@ /obj/structure/sign/directions/engineering, /turf/simulated/wall/r_wall, /area/civilian/atrium/central) +"peM" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/south) "phJ" = ( /turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/grounds) @@ -66240,11 +66356,15 @@ }, /turf/simulated/floor/tiled/dark, /area/security/hangar) +"piS" = ( +/obj/machinery/vending/fitness, +/turf/simulated/floor/tiled, +/area/hallway/primary/central_one) "pjA" = ( /obj/structure/cable/heavyduty{ icon_state = "1-2" }, -/turf/simulated/floor/plating/snow/plating/cryogaia, +/turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/grounds/power) "pkM" = ( /obj/machinery/door/airlock/maintenance/medical{ @@ -66278,7 +66398,7 @@ /obj/structure/cable/heavyduty{ icon_state = "4-8" }, -/turf/simulated/floor/plating/snow/plating/cryogaia, +/turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/grounds/power) "pxX" = ( /obj/structure/cable/green{ @@ -66744,6 +66864,11 @@ "rDn" = ( /turf/simulated/wall/r_wall, /area/borealis2/outdoors/grounds) +"rFi" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/east) "rKg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -66908,6 +67033,13 @@ "seJ" = ( /turf/simulated/wall/titanium, /area/borealis2/outdoors/grounds/tower/east) +"siS" = ( +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/yellow, +/area/chapel/monastery/kitchen) "slf" = ( /obj/machinery/button/remote/blast_door{ dir = 4; @@ -67208,6 +67340,13 @@ dynamic_lighting = 1 }, /area/borealis2/outdoors/exterior/explore1) +"tzg" = ( +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 28 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/recreation) "tIj" = ( /obj/structure/cable/heavyduty{ icon_state = "1-2" @@ -67345,6 +67484,11 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/tiled/steel, /area/security/hangar) +"tYd" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/northeast) "tYM" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -67475,8 +67619,12 @@ /obj/machinery/atmospherics/pipe/zpipe/up/supply{ dir = 8 }, +/obj/structure/disposalpipe/up{ + icon_state = "pipe-u"; + dir = 8 + }, /turf/simulated/floor, -/area/quartermaster/miningwing) +/area/maintenance/substation/cargo) "ugV" = ( /obj/machinery/atmospherics/pipe/simple/heat_exchanging{ dir = 9 @@ -67616,6 +67764,11 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/power) +"uFe" = ( +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/northwest) "uIN" = ( /obj/effect/floor_decal/snow/floor/edges, /obj/effect/floor_decal/snow/floor/edges{ @@ -68321,6 +68474,16 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/solars) +"wVl" = ( +/obj/effect/floor_decal/snow/floor/edges{ + dir = 8 + }, +/obj/effect/overlay/snow/floor, +/obj/effect/floor_decal/snow/floor/edges{ + dir = 4 + }, +/turf/simulated/floor/plating/snow/plating, +/area/borealis2/outdoors/grounds) "wYr" = ( /obj/effect/floor_decal/snow/floor/edges2{ dir = 1; @@ -68456,6 +68619,13 @@ }, /turf/simulated/floor/plating, /area/engineering/engine_monitoring) +"xJh" = ( +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 8 + }, +/turf/simulated/floor/tiled/white, +/area/rnd/research) "xMK" = ( /obj/machinery/sleeper{ dir = 8 @@ -78487,8 +78657,8 @@ aad vZD mlo clS -lXQ -lXQ +eHd +kCp uTW mlo vZD @@ -78940,7 +79110,7 @@ aae aad vZD fYs -xVe +uFe xVe xVe uBT @@ -86743,8 +86913,8 @@ aaa aaa aaa aab -aaj -aaj +phJ +phJ aaq aad aad @@ -86995,7 +87165,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aad @@ -87057,7 +87227,7 @@ aHP aIB aIB aIB -aLJ +aIB aaj abk aqD @@ -87247,7 +87417,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -87499,7 +87669,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -87751,7 +87921,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -88003,7 +88173,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -88255,7 +88425,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -88507,7 +88677,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -88759,7 +88929,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -89011,7 +89181,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aar @@ -89263,7 +89433,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -89515,7 +89685,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -89767,7 +89937,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -90019,7 +90189,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -90271,7 +90441,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -90523,7 +90693,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -90640,8 +90810,8 @@ abq abq abq abq -aag -aag +hVT +hVT abq abq abq @@ -90775,7 +90945,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -90891,10 +91061,10 @@ abq abq abq abq -aag -aag -aag -aag +hVT +hVT +hVT +hVT abq abq abq @@ -91027,7 +91197,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -91143,11 +91313,11 @@ abq abq abq abq -aag -aag -aag -aag -aag +hVT +hVT +hVT +hVT +hVT abq abq abq @@ -91279,7 +91449,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -91394,12 +91564,12 @@ abq abq abq abq -aag -aaO -abp -aag -aag -aag +hVT +hVT +oTi +hVT +hVT +hVT abq abq abq @@ -91531,7 +91701,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -91645,13 +91815,13 @@ abq abq abq abq -aag -aag -aag -aag -aag -aag -aag +hVT +hVT +hVT +hVT +hVT +hVT +hVT abq abq abq @@ -91783,7 +91953,7 @@ aaa aaa aaa aab -aaj +phJ aab aaj aaj @@ -91897,13 +92067,13 @@ abq abq abq abq -aag -aag -aag -aag -aag -aag -aag +fZU +hVT +hVT +hVT +hVT +hVT +hVT abq abq abq @@ -92035,7 +92205,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -92147,15 +92317,15 @@ abq abq abq abq -aag -aag -aag +rvk +rvk +rvk abq abq abq -aag -aag -aaO +hVT +hVT +hVT abq abq abq @@ -92287,7 +92457,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -92399,14 +92569,14 @@ abq abq abq abq -aag -aag +rvk +rvk abq abq abq abq abq -aag +fZU abq abq abq @@ -92539,7 +92709,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -92649,19 +92819,19 @@ abq abq abq abq -aag -aag -aag -aag +rvk +rvk +rvk +rvk abq abq abq abq abq -aag +rvk abq abq -aag +rvk abq abq aag @@ -92791,7 +92961,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aal @@ -92901,19 +93071,19 @@ aag aag aag aag -aag -aag +rvk +rvk abq abq abq abq -aag -aag -aag -aag -aag -aag -aag +rvk +rvk +rvk +rvk +rvk +rvk +rvk abq abq aag @@ -93043,7 +93213,7 @@ aaa aaa aaa aab -aaj +phJ aab aar kfU @@ -93159,11 +93329,11 @@ abq abq abq abq -aag +rvk abq -aag -aag -aag +rvk +rvk +rvk abq abq abq @@ -93295,7 +93465,7 @@ aaa aaa aaa aab -aaj +phJ aab aar kfU @@ -93414,7 +93584,7 @@ abq abq abq abq -aag +rvk abq abq abq @@ -93547,7 +93717,7 @@ aaa aaa aaa aab -aaj +phJ aab aaa kfU @@ -93657,8 +93827,8 @@ aag aag aag aag -aag -aag +rvk +rvk abq abq abq @@ -93799,7 +93969,7 @@ aaa aaa aaa aab -aaj +phJ aab aaa kfU @@ -93910,7 +94080,7 @@ aag abq abq abq -aag +rvk abq abq abq @@ -94051,7 +94221,7 @@ aaa aaa aaa aab -aaj +phJ aab aaa kfU @@ -94303,7 +94473,7 @@ aaa aaa aaa aab -aaj +phJ aab aaa kfU @@ -94555,7 +94725,7 @@ aaa aaa aaa aab -aaj +phJ aab aar kfU @@ -94807,7 +94977,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aaj @@ -95059,7 +95229,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aQf @@ -95311,7 +95481,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aax @@ -95563,7 +95733,7 @@ aaa aaa aaa aab -aaj +phJ aab aar aag @@ -95815,8 +95985,8 @@ aaa aaa aaa aab -aaj -aaj +phJ +phJ aas wbg wbg @@ -96762,8 +96932,8 @@ cfP cfP cfP cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -97013,9 +97183,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -97265,9 +97435,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -97517,9 +97687,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -97768,9 +97938,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -98020,9 +98190,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -98272,9 +98442,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -98523,9 +98693,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -98775,9 +98945,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -99027,10 +99197,10 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt cfP cfP cfP @@ -99279,10 +99449,10 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt cfP cfP cfP @@ -99532,9 +99702,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -99784,9 +99954,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -100037,8 +100207,8 @@ cfP cfP cfP cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -100289,8 +100459,8 @@ cfP cfP cfP cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -100541,8 +100711,8 @@ cfP cfP cfP cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -100792,9 +100962,9 @@ cfP cfP cfP cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -100978,17 +101148,17 @@ bZY bPE bcc jNW -cbo -cbo -cbo -cbo -cbo -cbo -cdZ -cbo -cbo -cbo -cbo +aai +aai +aai +aai +aai +aai +ajp +aai +aai +aai +aai cGk rWI dNQ @@ -101044,10 +101214,10 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt cfP cfP cfP @@ -101229,19 +101399,19 @@ bZm bZZ bKC bKC -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp -cbp +agn +agn +agn +agn +agn +agn +agn +agn +agn +agn +agn +agn +agn ceN kqA aaf @@ -101296,12 +101466,12 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt +cNt +cNt cfP cfP cfP @@ -101481,19 +101651,19 @@ bZn caa bPE bcc -cbq -cbq -cbq -cbq -cbq -cbq -cbq +aal +aal +aal +aal +aal +aal +aal cea -cbq -cbq -cbq -cbq -cbq +aal +aal +aal +aal +aal rWI dNQ ius @@ -101548,12 +101718,12 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt +cNt +cNt cfP cfP cfP @@ -101800,12 +101970,12 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt +cNt +cNt cfP cfP cfP @@ -102052,7 +102222,7 @@ cfP cfP cfP cfP -cfS +cNt cNt cNt cNt @@ -102252,7 +102422,7 @@ vVG sEG eSB lIM -lIM +gUE vVG wFw aaf @@ -102304,14 +102474,14 @@ cfP cfP cfP cfP -cfS cNt cNt cNt cNt cNt cNt -cfS +cNt +cNt cfP cfP cfP @@ -102504,7 +102674,7 @@ vVG lIM oTz lIM -lIM +peM vVG wFw aaf @@ -102643,7 +102813,7 @@ aci agd abE abE -abE +ndl aci rvk iPw @@ -104355,14 +104525,14 @@ cfP cfP cfP cfP -cfS -cfS -cfS -cfS -cfS -cfS -cfS -cfS +cNt +cNt +cNt +cNt +cNt +cNt +cNt +cNt cfP cfP cfP @@ -108200,7 +108370,7 @@ aiz ans agk agk -apM +piS aqx art apM @@ -112301,7 +112471,7 @@ bxd bHE cgJ brT -brY +xJh bME bKd bKd @@ -112977,7 +113147,7 @@ agW ahy aia afO -afO +siS afj ajQ akm @@ -113906,7 +114076,7 @@ cNt cNt cNt cNt -cfS +cNt cfP cfP cfP @@ -113989,7 +114159,7 @@ agq afj ajP ako -ajP +tzg ajP ajP amG @@ -114158,7 +114328,7 @@ cNt cNt cNt cNt -cfS +cNt cfP cfP cfP @@ -114410,7 +114580,7 @@ cfP cfP cNt cNt -cfS +cNt cfP cfP cfP @@ -114662,7 +114832,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -114914,7 +115084,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -115166,7 +115336,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -115418,7 +115588,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -115670,7 +115840,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -115922,7 +116092,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -116174,7 +116344,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -116426,7 +116596,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -116678,7 +116848,7 @@ cfP cfP cfP cNt -cfS +cNt cfP cfP cfP @@ -117432,7 +117602,7 @@ cNt cNt cNt cNt -cfS +cNt cNt cNt cfP @@ -117684,7 +117854,7 @@ cNt cNt cNt cNt -cfS +cNt cNt cNt cNt @@ -117936,7 +118106,7 @@ cNt cNt cNt cNt -cfS +cNt cNt cNt cNt @@ -118962,7 +119132,7 @@ cfP cfP cNt cNt -cfS +cNt cNt cNt cNt @@ -119214,7 +119384,7 @@ cfP cNt cNt cNt -cfS +cNt cNt cNt cNt @@ -120619,9 +120789,9 @@ aal aiS aiS aiS -aiS -aiS -aiS +wVl +wVl +wVl aiS aiS aiS @@ -120954,8 +121124,8 @@ aaf aaf cfS cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -121206,8 +121376,8 @@ aaf aaf aaf cfP -cfS -cfS +cNt +cNt cfP cfP cfP @@ -121458,9 +121628,9 @@ aad aaf aaf cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -121710,9 +121880,9 @@ aad aar aar cfP -cfS -cfS -cfS +cNt +cNt +cNt cfP cfP cfP @@ -124388,7 +124558,7 @@ aag aag aag aag -mjH +muJ seJ ubG lED @@ -124640,7 +124810,7 @@ aag aag aag aag -btM +ijZ qGK jsV rNQ @@ -124932,7 +125102,7 @@ pVO jgc tZm jgc -jgc +eYR eNw vZD aad @@ -125009,7 +125179,7 @@ cfP cfP cfP cfP -cfQ +qbe cfP cfP cfP @@ -125310,7 +125480,7 @@ vZD vBB vBB fQL -obq +tYd nth vBB vZD @@ -125399,7 +125569,7 @@ aad vZD seJ kCA -xwV +rFi uis gfE seJ @@ -126503,7 +126673,7 @@ cfP cfP cfP cfP -cfQ +qbe qbe cfP cfP @@ -129278,7 +129448,7 @@ cNt qbe qbe qbe -cfQ +qbe cfP qbe qbe diff --git a/maps/yw/cryogaia-06-upper.dmm b/maps/yw/cryogaia-06-upper.dmm index e6e650e640..46b713f93c 100644 --- a/maps/yw/cryogaia-06-upper.dmm +++ b/maps/yw/cryogaia-06-upper.dmm @@ -43,7 +43,7 @@ /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) "aak" = ( -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) "aal" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, @@ -57,6 +57,7 @@ /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 8 }, +/obj/structure/sign/warning/docking_area, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) "aao" = ( @@ -172,6 +173,10 @@ }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/northwest) +"aaL" = ( +/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) "aaM" = ( /obj/machinery/light{ dir = 4 @@ -266,9 +271,12 @@ /area/borealis2/outdoors/grounds/tower/east) "aba" = ( /obj/structure/railing/grey, -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 +/obj/machinery/firealarm{ + dir = 8; + pixel_x = -24 + }, +/obj/machinery/camera/network/security{ + c_tag = "East Tower - Upper" }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/east) @@ -311,9 +319,8 @@ /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/southeast) "abl" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 +/obj/machinery/camera/network/security{ + c_tag = "Southeast Tower - Upper" }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/southeast) @@ -325,6 +332,7 @@ icon_state = "grey_railing0"; dir = 8 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/southwest) "abo" = ( @@ -352,6 +360,7 @@ icon_state = "grey_railing0"; dir = 4 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/checkpoint) "abw" = ( @@ -457,6 +466,7 @@ /area/borealis2/outdoors/grounds/tower/southwest) "abQ" = ( /obj/structure/table/steel, +/obj/machinery/recharger, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/southwest) "abR" = ( @@ -567,6 +577,12 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"aeZ" = ( +/obj/structure/table/rack/shelf/steel, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/chapel/monastery/upper) "afc" = ( /obj/effect/floor_decal/corner/paleblue/full{ dir = 8 @@ -639,8 +655,12 @@ /turf/simulated/floor/tiled/white, /area/medical/medbayupper) "anb" = ( -/obj/structure/railing, -/turf/simulated/floor/tiled, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 + }, +/turf/simulated/floor/tiled/dark, /area/chapel/monastery/upper) "anR" = ( /obj/structure/catwalk, @@ -665,13 +685,6 @@ }, /turf/simulated/floor/plating, /area/constructionsite/cryogaia/upper) -"asV" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techmaint, -/area/borealis2/outdoors/grounds/tower/southwest) "ato" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -712,10 +725,53 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"avC" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"awe" = ( +/obj/machinery/light{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) +"ayr" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/obj/machinery/firealarm{ + dir = 4; + layer = 3.3; + pixel_x = 26 + }, +/turf/simulated/floor/tiled, +/area/medical/medbayskybridge) +"aAM" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "aBo" = ( /obj/structure/disposalpipe/segment, /turf/simulated/wall, /area/medical/medbayupper) +"aBr" = ( +/obj/machinery/vending/fitness{ + icon_state = "fitness"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "aDf" = ( /turf/simulated/wall, /area/security/watchtower) @@ -730,6 +786,11 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "aEj" = ( @@ -741,7 +802,7 @@ /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/east) "aGZ" = ( -/turf/simulated/floor/reinforced, +/turf/simulated/floor/reinforced/cryogaia, /area/borealis2/outdoors/grounds/upper) "aII" = ( /obj/machinery/light{ @@ -764,6 +825,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 }, +/obj/machinery/hologram/holopad, /turf/simulated/floor/tiled, /area/security/watchtower) "aPa" = ( @@ -803,13 +865,11 @@ }, /turf/simulated/floor/tiled/techmaint, /area/cryogaia/station/hallway/primary/upper) -"aTu" = ( -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 4 - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) +"aSK" = ( +/obj/effect/wingrille_spawn/reinforced, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/plating, +/area/civilian/atrium/upper) "aXH" = ( /obj/structure/railing/grey, /obj/effect/overlay/snow/floor, @@ -830,6 +890,13 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"aZY" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "bbx" = ( /obj/structure/cable/green{ d1 = 4; @@ -843,6 +910,15 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 10 + }, +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "bbR" = ( @@ -887,23 +963,20 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/checkpoint) -"bia" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" - }, -/obj/machinery/light, -/obj/effect/floor_decal/corner/purple{ - icon_state = "corner_white"; +"bgk" = ( +/obj/machinery/vending/cola{ + icon_state = "Soda_Machine"; dir = 8 }, /turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) +/area/civilian/atrium/upper) +"bhF" = ( +/obj/machinery/holoposter{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "big" = ( /obj/effect/floor_decal/borderfloorblack{ dir = 4 @@ -914,24 +987,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/techmaint, /area/quartermaster/miningdock) -"bii" = ( -/obj/machinery/light, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 6; - icon_state = "warning_dust" - }, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - dir = 1; - id_tag = "Exploration_S_Master"; - name = "Exploration South Controller"; - pixel_y = -26; - req_one_access = list(43,52); - tag_exterior_door = "Exploration_S_Exterior"; - tag_interior_door = "Exploration_S_Interior" - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) "biA" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -941,12 +996,11 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/west) -"bkO" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 - }, +"bjs" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) +/area/civilian/atrium/upper) "blj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5; @@ -954,14 +1008,16 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) -"blJ" = ( -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 6; - icon_state = "warning_dust" +"bmI" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) +/area/quartermaster/miningdock) "bnI" = ( /obj/machinery/power/apc{ dir = 1; @@ -992,6 +1048,14 @@ dir = 4; icon_state = "tube1" }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 4; + listening = 1; + name = "Common Channel"; + pixel_x = 21; + pixel_y = 0 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) "bop" = ( @@ -1012,20 +1076,25 @@ /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/exterior/upper) "brf" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/machinery/door/airlock/glass_external/public{ + frequency = 1379; + id_tag = "Exploration_W_Interior"; + locked = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/glass, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" +/obj/machinery/access_button/airlock_interior{ + master_tag = "Exploration_W_Master"; + pixel_x = 0; + pixel_y = -24; + req_one_access = list(43,52) }, -/turf/simulated/floor/plating, +/obj/effect/floor_decal/industrial/hatch/yellow, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "brR" = ( /obj/structure/cable/green{ @@ -1078,23 +1147,22 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) "bvg" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/obj/machinery/camera/network/security{ + c_tag = "South Tower - Upper" }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/south) "bxY" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) "bzg" = ( /obj/structure/railing/grey{ @@ -1109,6 +1177,32 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/security/watchtower) +"bBy" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 4 + }, +/obj/structure/sign/warning/docking_area, +/turf/simulated/floor/plating/snow/plating/cryogaia, +/area/borealis2/outdoors/grounds/walkway/exploration) +"bCe" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 8; + icon_state = "borderfloorcorner_black" + }, +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 1; + icon_state = "dangercorner" + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/miningdock) "bDt" = ( /obj/structure/lattice, /obj/structure/cable/green{ @@ -1122,6 +1216,10 @@ /obj/machinery/atmospherics/pipe/zpipe/down/scrubbers{ dir = 8 }, +/obj/structure/disposalpipe/down{ + icon_state = "pipe-d"; + dir = 8 + }, /turf/simulated/open, /area/cryogaia/station/hallway/primary/upper) "bGd" = ( @@ -1133,6 +1231,14 @@ /obj/machinery/light/spot/no_nightshift, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/northeast) +"bIg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "bIh" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -1160,14 +1266,10 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) -"bLd" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/turf/simulated/wall, -/area/chapel/monastery/upper) +"bLn" = ( +/obj/structure/flora/pottedplant/large, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "bMQ" = ( /obj/effect/floor_decal/corner/brown{ dir = 10 @@ -1186,6 +1288,11 @@ d2 = 4; icon_state = "1-4" }, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "bMX" = ( @@ -1250,6 +1357,7 @@ /area/borealis2/outdoors/grounds/walkway) "bXW" = ( /obj/effect/floor_decal/industrial/warning/dust/corner, +/obj/structure/sign/warning/docking_area, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) "bYg" = ( @@ -1264,6 +1372,13 @@ }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"bYL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "cbW" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -1274,7 +1389,10 @@ /turf/simulated/floor/tiled/white, /area/medical/medbayupper) "ccy" = ( -/obj/machinery/vending/coffee, +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) "ccA" = ( @@ -1282,8 +1400,12 @@ dir = 1; pixel_y = -30 }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 1 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "ccH" = ( /obj/structure/cable{ icon_state = "4-8" @@ -1299,6 +1421,17 @@ /obj/machinery/door/firedoor, /turf/simulated/floor/plating, /area/constructionsite/cryogaia/upper) +"ceF" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light_switch{ + pixel_y = 24 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/hallway/primary/upper) "ceP" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on, /obj/structure/cable/green{ @@ -1308,6 +1441,15 @@ }, /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) +"cfe" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) "cfP" = ( /turf/unsimulated/wall/planetary/borealis2, /area/borealis2/outdoors/exterior/explore3) @@ -1341,6 +1483,10 @@ /obj/machinery/light/spot/no_nightshift, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/northwest) +"ckh" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) "cnd" = ( /obj/machinery/space_heater, /obj/structure/railing/grey, @@ -1390,12 +1536,14 @@ /obj/random/maintenance/medical, /turf/simulated/floor/plating, /area/maintenance/medical_upper) -"crS" = ( -/obj/machinery/atmospherics/unary/vent_pump/on{ - dir = 1 +"crA" = ( +/obj/effect/overlay/snow/floor, +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 8; + icon_state = "warningcorner_dust" }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) +/turf/simulated/floor/tiled/cryogaia/cryogaia, +/area/borealis2/outdoors/grounds/upper) "csN" = ( /obj/machinery/door/airlock/maintenance/common, /obj/structure/cable/green{ @@ -1407,11 +1555,6 @@ /turf/simulated/floor/plating, /area/borealis2/elevator/uppermining) "cwb" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/industrial/warning/dust{ dir = 6; @@ -1455,16 +1598,20 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) -"cKq" = ( -/obj/machinery/light{ - dir = 8 +"cDE" = ( +/obj/structure/bed/chair/wood, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"cFq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5; + icon_state = "intact-supply" }, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 9 - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "cMj" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -1527,6 +1674,22 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) +"cST" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 1; + icon_state = "warningcorner_dust" + }, +/obj/structure/sign/warning/docking_area, +/turf/simulated/floor/plating/snow/plating/cryogaia, +/area/borealis2/outdoors/grounds/walkway/exploration) +"cUt" = ( +/obj/structure/railing/grey, +/obj/structure/catwalk, +/obj/structure/sign/warning/falling{ + pixel_y = 32 + }, +/turf/simulated/open/cryogaia, +/area/borealis2/outdoors/grounds/upper) "cYu" = ( /obj/structure/cable/green{ d1 = 4; @@ -1540,10 +1703,7 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/plating, /area/cryogaia/station/explorer_upper) "cZZ" = ( /obj/structure/railing/grey{ @@ -1569,6 +1729,18 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"dfC" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 8 + }, +/obj/machinery/firealarm{ + dir = 4; + layer = 3.3; + pixel_x = 26 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "dhG" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 9 @@ -1599,20 +1771,52 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"dmE" = ( +/obj/machinery/door/airlock/glass_external/public{ + frequency = 1379; + id_tag = "Outpost_NE_Interior" + }, +/obj/machinery/door/firedoor/glass, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/access_button/airlock_interior{ + master_tag = "Outpost_NE_Master"; + pixel_y = -26 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"dpG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "dqB" = ( /turf/simulated/wall, /area/crew_quarters/medbreak) +"dqP" = ( +/obj/structure/railing/grey, +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/checkpoint) "dqQ" = ( /obj/effect/floor_decal/corner/brown{ dir = 10 }, -/obj/item/device/radio/intercom{ - broadcasting = 0; - dir = 2; - listening = 1; - name = "Common Channel"; - pixel_y = -21 - }, +/obj/structure/table/rack/shelf/steel, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "dqT" = ( @@ -1621,6 +1825,10 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"drv" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "dtw" = ( /obj/structure/railing/grey, /obj/structure/railing/grey{ @@ -1656,18 +1864,25 @@ }, /turf/simulated/floor/plating/snow/plating, /area/borealis2/outdoors/grounds/tower/west) -"dxH" = ( +"dzG" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/item/device/geiger/wall{ + dir = 1; + pixel_y = -30 + }, /obj/structure/cable/green{ - d1 = 2; + d1 = 4; d2 = 8; - icon_state = "2-8" + icon_state = "4-8" }, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 8 - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) "dBd" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1735,10 +1950,17 @@ name = "\improper NON-RADIATION SHIELDED AREA"; pixel_x = -30 }, +/obj/structure/disposalpipe/segment{ + icon_state = "pipe-c"; + dir = 1 + }, /turf/simulated/floor/plating, /area/cryogaia/station/hallway/primary/upper) "dIV" = ( -/obj/machinery/vending/snack, +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 4 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) "dPA" = ( @@ -1752,6 +1974,26 @@ "dRy" = ( /turf/simulated/wall, /area/borealis2/elevator/medupper) +"dSL" = ( +/obj/structure/table/woodentable, +/obj/item/device/instrument/trombone, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) +"dSX" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 8 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 4; + listening = 1; + name = "Common Channel"; + pixel_x = 21; + pixel_y = 0 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "dTu" = ( /obj/structure/cable/green{ icon_state = "32-2" @@ -1824,16 +2066,36 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/southeast) +"dYx" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 1; + listening = 1; + name = "Common Channel"; + pixel_y = 21 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "dYD" = ( /obj/structure/railing{ dir = 1; icon_state = "railing0" }, -/obj/effect/floor_decal/corner/purple{ - dir = 9 +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"dYF" = ( +/obj/effect/overlay/snow/floor, +/obj/effect/floor_decal/industrial/warning/dust/corner, +/turf/simulated/floor/tiled/cryogaia/cryogaia, +/area/borealis2/outdoors/grounds/upper) "dZg" = ( /obj/structure/cable{ icon_state = "1-2" @@ -1852,6 +2114,22 @@ /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/upper) +"eej" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "een" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -1875,6 +2153,16 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"ehJ" = ( +/obj/structure/railing{ + dir = 4; + icon_state = "railing0" + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/open, +/area/chapel/monastery/upper) "ejf" = ( /obj/machinery/light/small{ dir = 8 @@ -1889,6 +2177,14 @@ /obj/item/device/radio, /turf/simulated/floor/tiled, /area/security/watchtower) +"ekt" = ( +/obj/machinery/alarm{ + frequency = 1441; + pixel_y = 22 + }, +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "emT" = ( /obj/machinery/door/firedoor/glass, /obj/effect/wingrille_spawn/reinforced, @@ -1938,13 +2234,12 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) -"exb" = ( -/obj/structure/railing{ - dir = 1; - icon_state = "railing0" +"exT" = ( +/obj/effect/floor_decal/corner/brown/full{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) +/area/quartermaster/miningdock) "ezi" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; @@ -1954,6 +2249,16 @@ /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/east) +"ezw" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 10 + }, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "eCS" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 5; @@ -1974,17 +2279,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) -"eDk" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "eEo" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; @@ -1999,18 +2293,6 @@ "eFr" = ( /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) -"eIu" = ( -/obj/machinery/door/airlock/glass_external/freezable{ - frequency = 1379; - id_tag = "Exploration_N_Exterior"; - locked = 1 - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "Exploration_N_Master"; - pixel_x = -24 - }, -/turf/simulated/floor/plating/snow/plating, -/area/cryogaia/station/explorer_upper) "eIS" = ( /obj/machinery/door/firedoor/glass, /obj/effect/wingrille_spawn/reinforced, @@ -2055,11 +2337,6 @@ /obj/effect/floor_decal/corner/paleblue{ dir = 6 }, -/obj/machinery/firealarm{ - dir = 4; - layer = 3.3; - pixel_x = 26 - }, /obj/structure/bed/chair{ dir = 1 }, @@ -2073,6 +2350,10 @@ /obj/machinery/camera/autoname{ dir = 4 }, +/obj/effect/floor_decal/industrial/warning/dust/corner{ + dir = 1; + icon_state = "warningcorner_dust" + }, /turf/simulated/floor/tiled/cryogaia/cryogaia, /area/borealis2/outdoors/grounds/upper) "eUq" = ( @@ -2104,6 +2385,16 @@ /obj/structure/table/steel, /turf/simulated/floor/tiled, /area/security/watchtower) +"fbp" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack/shelf, +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit, +/obj/item/clothing/shoes/boots/winter, +/obj/effect/floor_decal/corner/white{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) "fbI" = ( /turf/simulated/wall/r_wall, /area/borealis2/outdoors/grounds/upper) @@ -2161,11 +2452,6 @@ /turf/simulated/floor/plating, /area/maintenance/security_tower) "fkz" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; icon_state = "intact-scrubbers" @@ -2173,20 +2459,13 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) -"fmu" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 5 - }, -/obj/machinery/firealarm{ - dir = 2; - layer = 3.3; - pixel_x = 0; - pixel_y = 26 - }, -/turf/simulated/floor/tiled, -/area/quartermaster/miningdock) "fmx" = ( /obj/structure/disposalpipe/segment{ dir = 8; @@ -2222,19 +2501,17 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) -"fss" = ( +"ftK" = ( /obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" + d1 = 4; + d2 = 8; + icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ +/obj/machinery/atmospherics/unary/vent_pump/on{ dir = 8 }, /turf/simulated/floor/tiled, -/area/chapel/monastery/upper) +/area/civilian/atrium/upper) "fuj" = ( /obj/machinery/washing_machine, /obj/effect/floor_decal/corner/paleblue/diagonal{ @@ -2246,18 +2523,6 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) -"fuq" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "fvv" = ( /obj/machinery/power/apc{ cell_type = /obj/item/weapon/cell/apc; @@ -2270,6 +2535,21 @@ icon_state = "0-2"; pixel_y = 0 }, +/obj/structure/cable/green, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"fvL" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, /turf/simulated/floor/tiled, /area/civilian/atrium/upper) "fxP" = ( @@ -2287,6 +2567,13 @@ }, /turf/simulated/shuttle/floor/yellow, /area/shuttle/belter) +"fBN" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "fCG" = ( /obj/structure/catwalk, /turf/simulated/open/cryogaia, @@ -2322,6 +2609,10 @@ }, /turf/simulated/floor/plating, /area/chapel/monastery/upper) +"fIj" = ( +/obj/structure/railing, +/turf/simulated/open, +/area/chapel/monastery/upper) "fLr" = ( /obj/structure/window/reinforced{ dir = 4 @@ -2362,6 +2653,16 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) +"fZS" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) "fZT" = ( /obj/effect/floor_decal/corner/red{ dir = 9 @@ -2386,12 +2687,6 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) -"gaB" = ( -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "gcD" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -2399,6 +2694,14 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"gdt" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 4 + }, +/obj/effect/overlay/snow/floor, +/turf/simulated/floor/tiled/cryogaia/cryogaia, +/area/borealis2/outdoors/grounds/upper) "ggv" = ( /obj/structure/cable/green{ d1 = 2; @@ -2411,14 +2714,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/chapel/monastery/upper) -"ggP" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/machinery/light{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "ghe" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 9 @@ -2440,6 +2735,27 @@ }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"gjI" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 6; + icon_state = "warning_dust" + }, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) +"gjS" = ( +/obj/structure/cable/green{ + icon_state = "2-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) "gkX" = ( /turf/simulated/shuttle/floor/yellow, /area/shuttle/belter) @@ -2455,6 +2771,24 @@ /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/east) +"gnP" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 1 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) +"gor" = ( +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 1 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 10 + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/miningdock) "gpP" = ( /obj/machinery/light{ dir = 8; @@ -2471,6 +2805,13 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/quartermaster/miningdock) +"grp" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 1 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) "gsw" = ( /obj/effect/floor_decal/corner/red{ dir = 10 @@ -2478,6 +2819,17 @@ /obj/structure/table/steel, /turf/simulated/floor/tiled, /area/security/watchtower) +"gsI" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 8; + listening = 1; + name = "Common Channel"; + pixel_x = -21; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "gsX" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 6 @@ -2493,6 +2845,15 @@ }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"gvx" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/open, +/area/chapel/monastery/upper) "gxg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ @@ -2518,6 +2879,9 @@ d2 = 4; icon_state = "2-4" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/cryogaia/station/hallway/primary/upper) "gBF" = ( @@ -2546,6 +2910,7 @@ dir = 1; icon_state = "warningcorner_dust" }, +/obj/structure/sign/warning/docking_area, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) "gIN" = ( @@ -2564,15 +2929,11 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) -"gKH" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/effect/floor_decal/corner/purple, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) +"gLD" = ( +/obj/machinery/door/firedoor/glass, +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating, +/area/quartermaster/miningdock) "gMk" = ( /obj/effect/floor_decal/corner/brown{ icon_state = "corner_white"; @@ -2605,6 +2966,14 @@ }, /turf/simulated/floor/tiled/techmaint, /area/chapel/monastery/upper) +"gQF" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack/shelf, +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit, +/obj/item/clothing/shoes/boots/winter, +/obj/item/weapon/ice_pick, +/turf/simulated/floor/tiled, +/area/cryogaia/station/hallway/primary/upper) "gRM" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -2613,11 +2982,6 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) -"gSu" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "gTt" = ( /obj/effect/floor_decal/corner/brown{ icon_state = "corner_white"; @@ -2646,13 +3010,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/cryogaia/station/hallway/primary/upper) -"gVC" = ( -/obj/machinery/light, -/obj/structure/railing{ - dir = 8 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "hdV" = ( /turf/unsimulated/wall/planetary/borealis2, /area/borealis2/outdoors/exterior/upper) @@ -2678,6 +3035,12 @@ }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/west) +"hjt" = ( +/obj/structure/railing{ + dir = 8 + }, +/turf/simulated/open, +/area/chapel/monastery/upper) "hkR" = ( /obj/effect/floor_decal/corner/paleblue/full{ dir = 8 @@ -2688,14 +3051,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) -"hli" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/turf/simulated/wall, -/area/chapel/monastery/upper) "hmw" = ( /obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ dir = 1 @@ -2703,13 +3058,33 @@ /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 1 }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) -"hru" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 +/obj/structure/cable/green{ + d1 = 2; + d2 = 8; + icon_state = "2-8" }, -/obj/machinery/light, +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) +"hna" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/southwest) +"hqr" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"hru" = ( +/obj/effect/floor_decal/corner/brown/full{ + dir = 4 + }, +/obj/structure/table/rack/shelf/steel, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "hrD" = ( @@ -2732,6 +3107,11 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"hyq" = ( +/obj/machinery/door/firedoor/glass, +/obj/effect/wingrille_spawn/reinforced, +/turf/simulated/floor/plating, +/area/civilian/atrium/upper) "hyw" = ( /obj/structure/window/reinforced{ dir = 8; @@ -2811,8 +3191,12 @@ id_tag = "Monastary_Upper_SE_Exit_Interior"; locked = 1 }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) +"hIp" = ( +/turf/simulated/wall, +/area/chapel/monastery/music) "hIU" = ( /obj/structure/cable/green{ d1 = 1; @@ -2874,6 +3258,11 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"hTR" = ( +/obj/structure/table/woodentable, +/obj/item/device/instrument/recorder, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "hUR" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; @@ -2891,6 +3280,20 @@ /obj/structure/railing/grey, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/southeast) +"hZS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "ibY" = ( /obj/machinery/light{ dir = 4; @@ -2928,13 +3331,8 @@ /turf/simulated/floor/tiled/white, /area/medical/medbayupper) "ieH" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 4; - icon_state = "2-4" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 10 + dir = 6 }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) @@ -2952,12 +3350,6 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) -"iie" = ( -/obj/structure/railing{ - dir = 1 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "ilD" = ( /obj/item/device/geiger/wall{ dir = 8; @@ -2995,10 +3387,10 @@ /turf/simulated/floor/plating, /area/maintenance/medical_upper) "iqA" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) "isL" = ( /obj/item/device/radio/intercom{ @@ -3023,6 +3415,12 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"itB" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on{ + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "iuA" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -3039,16 +3437,41 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"ixp" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 5; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/item/device/instrument/guitar, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "ixK" = ( /obj/machinery/door/firedoor/glass, /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/medical/medbayskybridge) +"iyG" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "iyY" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; dir = 1 }, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 6; + pixel_y = -24 + }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/west) "izb" = ( @@ -3078,8 +3501,20 @@ /obj/machinery/recharger, /obj/item/device/defib_kit/loaded, /obj/item/device/defib_kit/loaded, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_x = 28; + pixel_y = 0 + }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"iCB" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "iCM" = ( /obj/structure/window/reinforced{ dir = 4 @@ -3089,6 +3524,13 @@ }, /turf/simulated/open, /area/civilian/atrium/upper) +"iDm" = ( +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "iFy" = ( /obj/effect/floor_decal/corner/paleblue/full{ dir = 8 @@ -3126,15 +3568,15 @@ /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/checkpoint) "iQe" = ( -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; icon_state = "intact-scrubbers" }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/borderfloorblack/corner, +/obj/effect/floor_decal/industrial/danger/corner, /turf/simulated/floor/tiled/techmaint, /area/quartermaster/miningdock) "iQi" = ( @@ -3154,12 +3596,17 @@ /turf/simulated/floor/tiled, /area/security/watchtower) "iQq" = ( -/obj/structure/railing, /obj/machinery/light{ - dir = 4 + dir = 4; + icon_state = "tube1"; + pixel_x = 0 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/chapel/monastery/upper) +"iTa" = ( +/obj/structure/bed/chair/wood, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "iXv" = ( /turf/simulated/wall, /area/medical/medbayupper) @@ -3190,18 +3637,23 @@ dir = 6 }, /obj/structure/table/steel, +/obj/machinery/newscaster{ + layer = 3.3; + pixel_x = 28; + pixel_y = 0 + }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) "jeP" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/manifold/hidden/supply{ dir = 4 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "jfF" = ( @@ -3214,8 +3666,16 @@ master_tag = "Exploration_W_Master"; pixel_y = -24 }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating/snow/plating, /area/cryogaia/station/explorer_upper) +"jiV" = ( +/obj/structure/railing{ + dir = 4; + icon_state = "railing0" + }, +/turf/simulated/open, +/area/chapel/monastery/upper) "jjc" = ( /turf/simulated/floor/tiled, /area/security/watchtower) @@ -3254,6 +3714,11 @@ d2 = 2; icon_state = "1-2" }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "jqN" = ( @@ -3328,6 +3793,18 @@ /obj/machinery/atmospherics/unary/vent_scrubber/on, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"jLk" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) "jMd" = ( /obj/machinery/door/airlock/glass_medical{ name = "Staff Room"; @@ -3345,18 +3822,33 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) +"jMw" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/machinery/holoposter{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "jNN" = ( /obj/structure/railing{ dir = 2; flags = null }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; + dir = 5; icon_state = "intact-scrubbers" }, -/obj/effect/floor_decal/corner/purple{ - icon_state = "corner_white"; - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) @@ -3400,6 +3892,17 @@ }, /turf/simulated/floor/plating, /area/constructionsite/cryogaia/upper) +"kab" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 4; + listening = 1; + name = "Common Channel"; + pixel_x = 21; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "kbd" = ( /obj/effect/floor_decal/corner/purple{ dir = 10 @@ -3416,10 +3919,13 @@ d2 = 4; icon_state = "1-4" }, -/obj/item/device/geiger/wall{ - dir = 4; - pixel_x = -30 - }, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) +"kiy" = ( +/obj/effect/floor_decal/industrial/outline/yellow, +/obj/structure/table/rack/shelf, +/obj/item/clothing/suit/storage/hooded/wintercoat/snowsuit, +/obj/item/clothing/shoes/boots/winter, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "kjb" = ( @@ -3431,6 +3937,11 @@ }, /turf/simulated/open, /area/maintenance/medical_upper) +"kjj" = ( +/obj/effect/floor_decal/industrial/warning/dust/corner, +/obj/structure/sign/warning/docking_area, +/turf/simulated/floor/plating/snow/plating/cryogaia, +/area/borealis2/outdoors/grounds/walkway/exploration) "knW" = ( /obj/machinery/light{ dir = 1 @@ -3447,15 +3958,25 @@ }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"kpg" = ( +/obj/machinery/vending/coffee{ + icon_state = "coffee"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "kuv" = ( /obj/structure/catwalk, /obj/structure/railing/grey, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/northwest) "kuV" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 8 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "kwL" = ( /obj/machinery/vending/coffee, /obj/effect/floor_decal/corner/paleblue/diagonal{ @@ -3476,6 +3997,14 @@ /obj/structure/table/steel, /turf/simulated/floor/tiled/cryogaia/cryogaia, /area/borealis2/outdoors/grounds/upper) +"kye" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 8 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/east) "kBO" = ( /obj/structure/railing{ dir = 8 @@ -3535,6 +4064,13 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) +"kHM" = ( +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "kJK" = ( /turf/simulated/wall, /area/maintenance/security_tower) @@ -3564,6 +4100,9 @@ /obj/machinery/light/small{ dir = 4 }, +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, /turf/simulated/floor/plating, /area/chapel/monastery/upper) "kQv" = ( @@ -3606,6 +4145,22 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) +"kZT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable{ + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/light/small, +/turf/simulated/floor/plating, +/area/constructionsite/cryogaia/upper) "lbe" = ( /obj/item/device/geiger/wall{ dir = 4; @@ -3659,12 +4214,6 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) -"liZ" = ( -/obj/machinery/light{ - dir = 1 - }, -/turf/simulated/floor/plating, -/area/constructionsite/cryogaia/upper) "lkc" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -3683,12 +4232,20 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"lmD" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "lna" = ( /obj/machinery/space_heater, -/obj/machinery/alarm{ - dir = 8; - icon_state = "alarm0"; - pixel_x = 24 +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 6; + pixel_y = -24 }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/northwest) @@ -3698,6 +4255,17 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"lqu" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 10 + }, +/obj/machinery/disposal, +/obj/structure/disposalpipe/trunk{ + icon_state = "pipe-t"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "lsy" = ( /obj/effect/floor_decal/corner/brown{ dir = 6 @@ -3715,6 +4283,7 @@ id_tag = "Monastary_Upper_NW_Exit_Exterior"; locked = 1 }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating/snow/plating, /area/chapel/monastery/upper) "lwd" = ( @@ -3753,13 +4322,38 @@ /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) "lCX" = ( -/obj/machinery/alarm{ - dir = 4; - pixel_x = -25; - pixel_y = 0 +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 6; + pixel_y = -24 + }, +/obj/machinery/camera/network/security{ + c_tag = "Northeast Tower - Upper"; + dir = 1 }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/northeast) +"lDg" = ( +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"lDq" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "lEu" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; @@ -3792,24 +4386,12 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) -"lOg" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 6 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/quartermaster/miningdock) "lQH" = ( /obj/structure/cable/green{ d1 = 2; d2 = 4; icon_state = "2-4" }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, @@ -3830,6 +4412,10 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) +"lTd" = ( +/obj/structure/table/rack/shelf/steel, +/turf/simulated/floor/plating, +/area/cryogaia/station/hallway/primary/upper) "lWX" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -3865,7 +4451,7 @@ icon_state = "map-scrubbers" }, /obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/chapel/monastery/upper) "mem" = ( /obj/structure/cable/green{ @@ -3878,6 +4464,45 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/plating, /area/cryogaia/station/explorer_upper) +"mew" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"mfO" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 9 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"mfR" = ( +/obj/machinery/alarm{ + dir = 8; + pixel_x = 25; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "mhM" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -3891,15 +4516,6 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) -"mip" = ( -/obj/structure/railing{ - dir = 1 - }, -/obj/machinery/light{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "miV" = ( /obj/effect/floor_decal/corner/paleblue/diagonal{ dir = 4 @@ -3911,6 +4527,14 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"mkf" = ( +/obj/structure/sign/warning/radioactive{ + desc = "A sign denoting that this elevator shaft is not radiation proof"; + name = "\improper NON-RADIATION SHIELDED AREA"; + pixel_x = -30 + }, +/turf/simulated/floor/plating, +/area/chapel/monastery/upper) "mmL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -3935,12 +4559,23 @@ /turf/simulated/floor/airless, /area/shuttle/belter) "mpn" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 +/obj/machinery/camera/network/security{ + c_tag = "West Tower - Upper" }, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/west) +"mrG" = ( +/obj/machinery/power/apc{ + dir = 1; + name = "north bump"; + pixel_x = 0; + pixel_y = 24 + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "msh" = ( /obj/effect/floor_decal/corner/paleblue/diagonal{ dir = 4 @@ -3971,6 +4606,10 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) +"mtP" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "mwt" = ( /obj/effect/floor_decal/borderfloorblack/corner{ dir = 4; @@ -3990,6 +4629,14 @@ /obj/structure/railing/grey, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"mys" = ( +/obj/structure/flora/pottedplant/large, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "mzQ" = ( /obj/effect/floor_decal/corner/red{ dir = 4 @@ -4002,6 +4649,23 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"mBh" = ( +/obj/machinery/light, +/obj/machinery/firealarm{ + dir = 1; + pixel_x = 0; + pixel_y = -24 + }, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/miningdock) +"mBw" = ( +/obj/machinery/light{ + dir = 1 + }, +/obj/structure/table/woodentable, +/obj/item/device/instrument/keytar, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "mCI" = ( /turf/simulated/wall, /area/maintenance/medical_upper) @@ -4048,6 +4712,11 @@ /obj/structure/table/steel, /turf/simulated/floor/tiled/cryogaia/cryogaia, /area/borealis2/outdoors/grounds/upper) +"mNp" = ( +/obj/structure/table/woodentable, +/obj/item/device/instrument/accordion, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "mNO" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -4100,22 +4769,20 @@ "mWF" = ( /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) -"nax" = ( -/obj/structure/cable/green{ - d2 = 8; - icon_state = "0-8" +"mYC" = ( +/obj/machinery/light{ + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, -/obj/machinery/power/thermoregulator/cryogaia{ - pixel_x = 0; - pixel_y = 32 +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) +"nbc" = ( +/obj/machinery/light{ + dir = 1 }, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 5; - icon_state = "warning_dust" - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) "nbd" = ( /obj/machinery/door/firedoor/glass, /obj/machinery/access_button/airlock_interior{ @@ -4128,6 +4795,12 @@ id_tag = "Monastary_Upper_NW_Exit_Interior"; locked = 1 }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "nbQ" = ( @@ -4164,6 +4837,24 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"nff" = ( +/obj/machinery/power/thermoregulator/cryogaia{ + dir = 4; + pixel_x = -30 + }, +/obj/structure/cable/green{ + icon_state = "0-2" + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 9 + }, +/obj/effect/floor_decal/rust, +/obj/machinery/light{ + dir = 8; + icon_state = "tube1" + }, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) "nfI" = ( /obj/machinery/light{ dir = 8 @@ -4207,6 +4898,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) "nmc" = ( @@ -4265,6 +4957,35 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/southeast) +"nth" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 1; + listening = 1; + name = "Common Channel"; + pixel_y = 21 + }, +/obj/structure/device/piano/minimoog, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) +"ntu" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "ntA" = ( /obj/effect/floor_decal/corner/paleblue/diagonal{ dir = 4 @@ -4333,13 +5054,9 @@ }, /turf/simulated/floor/tiled/techmaint, /area/chapel/monastery/upper) -"nHR" = ( -/obj/effect/floor_decal/corner/brown/full{ - dir = 4 - }, -/obj/structure/table/steel, -/turf/simulated/floor/tiled, -/area/quartermaster/miningdock) +"nIj" = ( +/turf/simulated/floor/tiled/dark, +/area/borealis2/outdoors/grounds/upper) "nIl" = ( /obj/structure/cable{ d1 = 1; @@ -4358,21 +5075,6 @@ /obj/structure/closet/emcloset, /turf/simulated/shuttle/floor/yellow, /area/shuttle/belter) -"nMW" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/light{ - dir = 8; - icon_state = "tube1"; - pixel_y = 0 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "nPp" = ( /obj/machinery/atmospherics/unary/vent_pump/on{ dir = 4 @@ -4410,6 +5112,12 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"nUZ" = ( +/obj/structure/railing{ + dir = 1 + }, +/turf/simulated/open, +/area/chapel/monastery/upper) "nVX" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -4444,6 +5152,7 @@ /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 4 }, +/obj/structure/sign/warning/docking_area, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) "nYX" = ( @@ -4524,6 +5233,14 @@ dir = 4; icon_state = "intact-scrubbers" }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "ohi" = ( @@ -4532,6 +5249,13 @@ d2 = 8; icon_state = "4-8" }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 2; + listening = 1; + name = "Common Channel"; + pixel_y = -21 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "ohw" = ( @@ -4580,6 +5304,43 @@ }, /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) +"opZ" = ( +/obj/item/device/geiger/wall{ + dir = 4; + pixel_x = -30 + }, +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 4 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) +"oqc" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/obj/machinery/light{ + dir = 1 + }, +/obj/machinery/suit_cycler/mining, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 1; + icon_state = "borderfloorcorner_black" + }, +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 8; + icon_state = "dangercorner" + }, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) +"orN" = ( +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "osk" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ dir = 8 @@ -4592,6 +5353,10 @@ "ovz" = ( /obj/machinery/light, /obj/effect/floor_decal/corner/purple/full, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "ovG" = ( @@ -4609,20 +5374,6 @@ }, /turf/simulated/floor/plating, /area/maintenance/security_tower) -"ovL" = ( -/obj/machinery/door/airlock/glass_external/public{ - frequency = 1379; - id_tag = "Exploration_W_Interior"; - locked = 1 - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/access_button/airlock_interior{ - master_tag = "Exploration_W_Master"; - pixel_x = -24; - req_one_access = list(43,52) - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "owr" = ( /obj/machinery/power/apc{ dir = 4; @@ -4691,12 +5442,29 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/cryogaia/station/hallway/primary/upper) +"oCL" = ( +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 5 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) "oDz" = ( /obj/structure/ladder, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"oEj" = ( +/obj/machinery/vending/snack{ + icon_state = "snack"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "oGg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, @@ -4799,15 +5567,15 @@ /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "oPw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; + dir = 4; icon_state = "intact-scrubbers" }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "oPy" = ( /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled/techmaint, @@ -4823,24 +5591,6 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) -"oVV" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass_external/public{ - frequency = 1379; - id_tag = "Exploration_S_Interior" - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "Exploration_S_Master"; - pixel_x = -24; - req_one_access = list(43,52) - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "oWp" = ( /obj/structure/cable/green{ d1 = 4; @@ -4863,15 +5613,6 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) -"oYx" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "oZg" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -4902,6 +5643,18 @@ }, /turf/simulated/floor/plating, /area/chapel/monastery/upper) +"peT" = ( +/obj/machinery/light{ + dir = 4; + icon_state = "tube1" + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "pgM" = ( /obj/structure/table/rack, /obj/effect/floor_decal/corner/paleblue{ @@ -4925,25 +5678,16 @@ /obj/effect/floor_decal/corner/brown/full, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) -"piL" = ( -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, -/turf/simulated/floor/tiled/techmaint, -/area/borealis2/outdoors/grounds/checkpoint) "pln" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 6 - }, -/obj/effect/floor_decal/corner/purple, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"pmt" = ( +/obj/structure/bed/chair{ + dir = 1 + }, +/turf/simulated/floor/plating, +/area/maintenance/medical_upper) "pmD" = ( /obj/structure/cable/green{ d1 = 1; @@ -4980,17 +5724,16 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) +"pxG" = ( +/obj/machinery/camera/network/security{ + c_tag = "Northwest Tower - Upper" + }, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/northwest) "pBg" = ( /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) -"pCa" = ( -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) "pEA" = ( /obj/structure/catwalk, /turf/simulated/open/cryogaia, @@ -5004,6 +5747,20 @@ "pEO" = ( /turf/simulated/open, /area/borealis2/elevator/medupper) +"pFC" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) +"pHj" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 8 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "pIe" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 9 @@ -5041,6 +5798,10 @@ icon_state = "intact-scrubbers" }, /obj/machinery/atmospherics/pipe/manifold/hidden/supply, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 8 + }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "pPJ" = ( @@ -5065,6 +5826,14 @@ "pSa" = ( /turf/simulated/wall/r_wall, /area/cryogaia/station/explorer_upper) +"pSk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9; + pixel_y = 0 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "pVN" = ( /obj/structure/window/reinforced{ dir = 4 @@ -5110,24 +5879,19 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) -"qdQ" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" - }, -/obj/effect/floor_decal/corner/purple{ - dir = 5 +"qei" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 1 }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) +/area/civilian/atrium/upper) +"qeC" = ( +/obj/effect/floor_decal/corner/brown, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "qgB" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/glass, @@ -5147,6 +5911,14 @@ /obj/structure/railing/grey, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/northeast) +"qiv" = ( +/obj/effect/floor_decal/corner/red{ + dir = 9 + }, +/obj/structure/table/steel, +/obj/machinery/recharger, +/turf/simulated/floor/tiled, +/area/security/watchtower) "qiB" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -5260,6 +6032,37 @@ }, /turf/simulated/floor/tiled/techmaint, /area/cryogaia/station/hallway/primary/upper) +"qrT" = ( +/obj/structure/railing{ + dir = 4; + icon_state = "railing0" + }, +/obj/structure/railing, +/turf/simulated/open, +/area/chapel/monastery/upper) +"qrY" = ( +/obj/effect/floor_decal/corner/purple/full{ + dir = 4 + }, +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 2; + listening = 1; + name = "Common Channel"; + pixel_y = -21 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) +"qsG" = ( +/obj/effect/floor_decal/corner/paleblue{ + dir = 6 + }, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 28 + }, +/turf/simulated/floor/tiled/white, +/area/medical/medbayupper) "qtp" = ( /obj/structure/cable{ icon_state = "4-8" @@ -5297,6 +6100,15 @@ /obj/effect/overlay/snow/floor, /turf/simulated/floor/tiled/cryogaia/cryogaia, /area/borealis2/outdoors/grounds/upper) +"qtT" = ( +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/southeast) "quD" = ( /obj/machinery/embedded_controller/radio/airlock/docking_port{ dir = 1; @@ -5389,6 +6201,21 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) +"qBD" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 9 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) +"qCe" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 1 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/south) "qDX" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 @@ -5466,26 +6293,50 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"qQE" = ( +/obj/structure/flora/pottedplant/large, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "qQU" = ( /obj/structure/cable/green{ d1 = 1; d2 = 8; icon_state = "1-8" }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 9; - pixel_y = 0 - }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4 + }, +/obj/structure/cable/green{ + icon_state = "2-8" + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"qRr" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"qTL" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "qUI" = ( /turf/simulated/wall/r_wall, /area/security/watchtower) @@ -5495,7 +6346,6 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/airlock/maintenance/common, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, @@ -5505,6 +6355,16 @@ }, /turf/simulated/floor/plating, /area/cryogaia/station/explorer_upper) +"rbg" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 2; + icon_state = "1-2" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) "rbU" = ( /obj/structure/disposalpipe/segment{ dir = 4; @@ -5530,6 +6390,37 @@ /obj/effect/overlay/snow/floor, /turf/simulated/floor/tiled/cryogaia/cryogaia, /area/borealis2/outdoors/grounds/upper) +"res" = ( +/obj/item/device/radio/intercom{ + broadcasting = 0; + dir = 2; + listening = 1; + name = "Common Channel"; + pixel_y = -21 + }, +/obj/effect/floor_decal/corner/brown{ + dir = 10 + }, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) +"reP" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"rfs" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "rjb" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -5540,12 +6431,30 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"rjg" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) +"rkO" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/west) "rmK" = ( /obj/effect/floor_decal/corner/purple{ dir = 5 }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"rnR" = ( +/obj/effect/floor_decal/corner/red{ + dir = 10 + }, +/obj/structure/table/steel, +/obj/machinery/cell_charger, +/turf/simulated/floor/tiled, +/area/security/watchtower) "rnY" = ( /obj/effect/floor_decal/corner/red/full{ dir = 1 @@ -5573,22 +6482,24 @@ }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) +"rsS" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/cryogaia/station/medical/upper) "rtv" = ( /obj/structure/sign/deck/second, /turf/simulated/shuttle/wall/voidcraft/blue, /area/borealis2/elevator/uppermining) -"ruJ" = ( -/obj/machinery/door/airlock/glass_external/freezable{ - frequency = 1379; - id_tag = "Exploration_N_Exterior"; - locked = 1 +"rvp" = ( +/turf/simulated/floor/tiled/dark, +/area/chapel/monastery/upper) +"rxt" = ( +/obj/machinery/light/small{ + dir = 1; + icon_state = "bulb1" }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "Exploration_N_Master"; - pixel_y = -24 - }, -/turf/simulated/floor/plating/snow/plating, -/area/cryogaia/station/explorer_upper) +/turf/simulated/floor/plating, +/area/constructionsite/cryogaia/upper) "rBC" = ( /obj/structure/flora/pottedplant/large, /obj/effect/floor_decal/corner/paleblue{ @@ -5599,6 +6510,13 @@ "rDD" = ( /turf/simulated/shuttle/floor/white/cryogaia, /area/borealis2/outdoors/grounds/upper) +"rDK" = ( +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 6 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "rEr" = ( /turf/simulated/floor/plating, /area/chapel/monastery/upper) @@ -5615,18 +6533,6 @@ }, /turf/simulated/floor/tiled/techmaint, /area/cryogaia/station/explorer_upper) -"rKB" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "rNt" = ( /obj/effect/floor_decal/corner/red{ dir = 4 @@ -5639,6 +6545,19 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"rQs" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) +"rRV" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_pump/on{ + dir = 1 + }, +/obj/item/device/instrument/violin, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "rVU" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/glass, @@ -5660,31 +6579,48 @@ /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) "saz" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 9 }, -/turf/simulated/floor/tiled/techmaint, +/turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"saG" = ( +/obj/structure/closet/crate, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/chapel/monastery/upper) "scS" = ( /obj/machinery/power/thermoregulator/cryogaia{ dir = 8; pixel_x = 30 }, -/obj/structure/cable/green{ - icon_state = "0-2" - }, /obj/effect/floor_decal/rust, /obj/effect/floor_decal/industrial/warning/dust{ dir = 5 }, +/obj/structure/cable/green, /turf/simulated/floor/tiled/techmaint, /area/chapel/monastery/upper) +"sdE" = ( +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 5 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"sdM" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "sga" = ( /obj/structure/girder, /turf/simulated/floor/plating, @@ -5716,6 +6652,24 @@ }, /turf/simulated/floor/tiled/techmaint, /area/cryogaia/station/hallway/primary/upper) +"sjB" = ( +/obj/machinery/holoposter{ + dir = 8; + pixel_x = 30 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"sjC" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "sjO" = ( /obj/structure/table/standard{ name = "plastic table frame" @@ -5810,6 +6764,25 @@ }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) +"syH" = ( +/obj/structure/cable/green{ + d1 = 1; + d2 = 8; + icon_state = "1-8" + }, +/obj/machinery/embedded_controller/radio/airlock/access_controller{ + id_tag = "Outpost_NE_Master"; + name = "Outpost Upper NE Access Controller"; + pixel_y = -26; + tag_exterior_door = "Outpost_NE_Exterior"; + tag_interior_door = "Outpost_NE_Interior" + }, +/obj/effect/floor_decal/industrial/warning/dust{ + dir = 10 + }, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) "sAd" = ( /obj/structure/cable/green{ d1 = 4; @@ -5837,17 +6810,23 @@ }, /turf/simulated/open, /area/civilian/atrium/upper) -"sAD" = ( +"sCa" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass{ + name = "Music Room" + }, /obj/structure/cable/green{ d1 = 4; d2 = 8; icon_state = "4-8" }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) "sCR" = ( @@ -5873,8 +6852,16 @@ /obj/effect/floor_decal/industrial/warning/dust/corner{ dir = 8 }, +/obj/structure/sign/warning/docking_area, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/upper) +"sFS" = ( +/obj/machinery/camera/network/security{ + c_tag = "Southwest Tower - Upper"; + dir = 1 + }, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/southwest) "sGt" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -5937,25 +6924,26 @@ /obj/effect/wingrille_spawn/reinforced, /turf/simulated/floor/plating, /area/medical/medbayupper) -"sOi" = ( -/obj/structure/railing{ - dir = 8 +"sRX" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" }, -/obj/machinery/light{ - dir = 1 +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) -"sQN" = ( -/obj/structure/railing{ - dir = 8 - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/tiled/dark, /area/chapel/monastery/upper) "sTI" = ( /obj/structure/bed/chair/shuttle, /turf/simulated/shuttle/floor/yellow, /area/shuttle/belter) +"sUy" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "sVx" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -6001,6 +6989,10 @@ dir = 6 }, /obj/random/medical, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 28 + }, /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) "sXv" = ( @@ -6020,21 +7012,14 @@ /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/east) +"taO" = ( +/obj/structure/table/woodentable, +/turf/simulated/floor/wood, +/area/chapel/monastery/upper) "tbi" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, -/obj/machinery/door/firedoor/glass, -/obj/machinery/door/airlock/glass_external/public{ - frequency = 1379; - id_tag = "Exploration_N_Interior" - }, -/obj/machinery/access_button/airlock_interior{ - master_tag = "Exploration_N_Master"; - pixel_y = 24; - req_one_access = list(43,52) +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) @@ -6049,6 +7034,18 @@ "tbY" = ( /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) +"tcr" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 1 + }, +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 4 + }, +/obj/effect/overlay/snow/floor, +/turf/simulated/floor/tiled/cryogaia/cryogaia, +/area/borealis2/outdoors/grounds/upper) "tez" = ( /obj/machinery/requests_console{ department = "Cargo Bay"; @@ -6056,14 +7053,20 @@ pixel_x = 0; pixel_y = 28 }, -/obj/structure/table/steel, -/obj/item/weapon/paper/rogueminer, /obj/machinery/light{ dir = 1 }, /obj/effect/floor_decal/corner/brown{ dir = 5 }, +/obj/effect/floor_decal/borderfloorblack/corner{ + dir = 4; + icon_state = "borderfloorcorner_black" + }, +/obj/effect/floor_decal/industrial/danger/corner{ + dir = 4; + icon_state = "dangercorner" + }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "tfp" = ( @@ -6098,6 +7101,10 @@ dir = 6 }, /obj/structure/bed/chair, +/obj/machinery/light_switch{ + dir = 8; + pixel_x = 28 + }, /turf/simulated/floor/tiled, /area/medical/medbayskybridge) "tjQ" = ( @@ -6118,11 +7125,29 @@ "tlZ" = ( /turf/simulated/wall/r_wall, /area/maintenance/security_tower) -"tnw" = ( -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ +"tmX" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; dir = 1 }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/northeast) +"tnl" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"tnw" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 5 + }, /turf/simulated/floor/tiled/techmaint, /area/quartermaster/miningdock) "tnK" = ( @@ -6160,6 +7185,14 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"ttf" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 5 + }, +/obj/structure/table/steel, +/obj/item/weapon/paper/rogueminer, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "ttk" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 5 @@ -6168,6 +7201,16 @@ /obj/structure/closet/medical, /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) +"twp" = ( +/obj/machinery/light{ + dir = 8 + }, +/obj/machinery/holoposter{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "tyL" = ( /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 @@ -6179,27 +7222,6 @@ }, /turf/simulated/floor/tiled, /area/chapel/monastery/upper) -"tzi" = ( -/obj/machinery/power/thermoregulator/cryogaia{ - dir = 4; - pixel_x = -30 - }, -/obj/structure/cable/green, -/obj/effect/floor_decal/rust, -/obj/effect/floor_decal/industrial/warning/dust{ - dir = 10 - }, -/obj/machinery/embedded_controller/radio/airlock/access_controller{ - dir = 1; - id_tag = "Exploration_N_Master"; - name = "Exploration North Controller"; - pixel_y = -26; - req_one_access = list(43,52); - tag_exterior_door = "Exploration_N_Exterior"; - tag_interior_door = "Exploration_N_Interior" - }, -/turf/simulated/floor/tiled/techmaint, -/area/cryogaia/station/explorer_upper) "tCm" = ( /obj/effect/floor_decal/corner/paleblue/diagonal{ dir = 4 @@ -6219,22 +7241,6 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/west) -"tKC" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/effect/floor_decal/corner/purple{ - dir = 5 - }, -/obj/machinery/alarm{ - frequency = 1441; - pixel_y = 22 - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "tKT" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -6303,15 +7309,16 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/miningdock) "tNO" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 4 }, /obj/machinery/light{ - dir = 8 + dir = 8; + icon_state = "tube1"; + pixel_y = 0 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) "tNR" = ( /obj/structure/cable/green{ @@ -6323,6 +7330,7 @@ /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply, +/obj/structure/disposalpipe/segment, /turf/simulated/floor/plating, /area/quartermaster/miningdock) "tOv" = ( @@ -6357,6 +7365,13 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"tSv" = ( +/obj/structure/table/rack/shelf/steel, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/obj/random/maintenance/clean, +/turf/simulated/floor/plating, +/area/chapel/monastery/upper) "tTY" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4 @@ -6409,12 +7424,6 @@ }, /turf/simulated/floor/plating, /area/constructionsite/cryogaia/upper) -"ubv" = ( -/obj/machinery/atmospherics/unary/vent_scrubber/on{ - dir = 4 - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "ubU" = ( /obj/machinery/power/apc{ dir = 2; @@ -6440,6 +7449,14 @@ /obj/machinery/space_heater, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/east) +"uhg" = ( +/obj/structure/railing/grey{ + icon_state = "grey_railing0"; + dir = 8 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/northwest) "uht" = ( /obj/structure/catwalk, /obj/structure/railing/grey{ @@ -6498,7 +7515,6 @@ /obj/effect/floor_decal/corner/brown/full{ dir = 1 }, -/obj/machinery/suit_cycler/mining, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "uxw" = ( @@ -6507,6 +7523,13 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"uxH" = ( +/obj/effect/floor_decal/corner/white{ + icon_state = "corner_white"; + dir = 1 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "uAo" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -6540,6 +7563,27 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/south) +"uEy" = ( +/obj/effect/floor_decal/corner/purple{ + dir = 5 + }, +/obj/machinery/firealarm{ + dir = 2; + layer = 3.3; + pixel_x = 0; + pixel_y = 26 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) +"uFT" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/effect/floor_decal/borderfloorblack, +/obj/effect/floor_decal/industrial/danger, +/turf/simulated/floor/tiled/techmaint, +/area/quartermaster/miningdock) "uIO" = ( /obj/structure/railing/grey, /obj/structure/catwalk, @@ -6554,19 +7598,10 @@ /turf/simulated/floor/tiled/techmaint, /area/quartermaster/miningdock) "uLm" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 10 }, -/obj/effect/floor_decal/corner/purple{ - icon_state = "corner_white"; - dir = 4 - }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "uMe" = ( @@ -6583,15 +7618,6 @@ }, /turf/simulated/floor/plating, /area/constructionsite/cryogaia/upper) -"uMY" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/cryogaia/station/explorer_upper) "uRv" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; @@ -6600,14 +7626,6 @@ /turf/simulated/floor/tiled/techmaint, /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/belter) -"uTs" = ( -/obj/structure/cable/green{ - d1 = 2; - d2 = 8; - icon_state = "2-8" - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "uTK" = ( /obj/machinery/door/airlock/glass_mining{ name = "Offplanet Mining Operations" @@ -6657,6 +7675,10 @@ icon_state = "alarm0"; pixel_x = -22 }, +/obj/machinery/camera/network/medbay{ + c_tag = "Medical Loft"; + dir = 1 + }, /turf/simulated/floor/tiled/white, /area/cryogaia/station/medical/upper) "vdm" = ( @@ -6693,15 +7715,10 @@ /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/west) "vgX" = ( -/obj/structure/cable/green{ - d1 = 4; - d2 = 8; - icon_state = "4-8" - }, /obj/machinery/atmospherics/pipe/simple/hidden/supply{ dir = 4 }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) "vha" = ( /obj/structure/railing/grey{ @@ -6710,6 +7727,28 @@ }, /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) +"viL" = ( +/obj/effect/floor_decal/corner/purple{ + icon_state = "corner_white"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/cryogaia/station/explorer_upper) +"vmJ" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ + dir = 4; + icon_state = "map-scrubbers" + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "vnC" = ( /obj/structure/cable{ icon_state = "2-8" @@ -6738,10 +7777,34 @@ "vtA" = ( /turf/simulated/floor/plating, /area/maintenance/medical_upper) +"vup" = ( +/obj/machinery/light, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) +"vvQ" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/structure/cable/green{ + d1 = 1; + d2 = 4; + icon_state = "1-4" + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) +"vvR" = ( +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "vwG" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 8 +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 6 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 6 }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) @@ -6756,6 +7819,7 @@ id_tag = "Monastary_Upper_SE_Exit_Exterior"; locked = 1 }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating/snow/plating, /area/chapel/monastery/upper) "vDj" = ( @@ -6791,18 +7855,6 @@ /obj/structure/fans/hardlight, /turf/simulated/shuttle/floor/yellow, /area/shuttle/belter) -"vFb" = ( -/obj/machinery/door/airlock/glass_external/freezable{ - frequency = 1379; - id_tag = "Exploration_S_Exterior"; - locked = 1 - }, -/obj/machinery/access_button/airlock_exterior{ - master_tag = "Exploration_S_Master"; - pixel_x = 24 - }, -/turf/simulated/floor/plating/snow/plating, -/area/cryogaia/station/explorer_upper) "vFr" = ( /obj/machinery/light{ dir = 1 @@ -6823,6 +7875,11 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"vJR" = ( +/obj/structure/table/woodentable, +/obj/item/device/instrument/eguitar, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "vKn" = ( /obj/structure/railing/grey{ icon_state = "grey_railing0"; @@ -6835,6 +7892,10 @@ /obj/structure/catwalk, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/southwest) +"vKE" = ( +/obj/structure/device/piano, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "vKM" = ( /turf/simulated/floor/plating/snow/plating/cryogaia, /area/borealis2/outdoors/grounds/tower/southeast) @@ -6850,6 +7911,12 @@ }, /turf/simulated/floor/plating, /area/cryogaia/station/hallway/primary/upper) +"vQe" = ( +/obj/structure/table/woodentable, +/obj/machinery/atmospherics/unary/vent_scrubber/on, +/obj/item/device/instrument/harmonica, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "vRp" = ( /obj/item/weapon/stool/padded, /obj/effect/floor_decal/corner/paleblue/diagonal{ @@ -6882,6 +7949,13 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/northwest) +"vTU" = ( +/obj/effect/floor_decal/corner/paleblue/diagonal{ + dir = 4 + }, +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/white, +/area/crew_quarters/medbreak) "vVm" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -6890,6 +7964,10 @@ "vVy" = ( /turf/simulated/floor/outdoors/snow/snow/snow2/cryogaia, /area/borealis2/outdoors/grounds/upper) +"vWl" = ( +/obj/machinery/hologram/holopad, +/turf/simulated/floor/tiled/techmaint, +/area/borealis2/outdoors/grounds/tower/southeast) "vXH" = ( /obj/structure/catwalk, /obj/structure/railing/grey, @@ -6899,6 +7977,22 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/tower/south) +"wdS" = ( +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/obj/machinery/alarm{ + dir = 1; + icon_state = "alarm0"; + pixel_y = -22 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "weE" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -6924,6 +8018,13 @@ /obj/machinery/door/firedoor/glass, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) +"wgK" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "wgP" = ( /obj/effect/floor_decal/corner/brown{ icon_state = "corner_white"; @@ -6931,17 +8032,14 @@ }, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) -"wiM" = ( -/obj/effect/floor_decal/corner/brown{ - dir = 10 - }, -/obj/machinery/firealarm{ - dir = 1; - pixel_x = 0; - pixel_y = -24 +"wkT" = ( +/obj/machinery/door/firedoor/glass, +/obj/machinery/door/airlock/glass, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 }, /turf/simulated/floor/tiled, -/area/quartermaster/miningdock) +/area/chapel/monastery/upper) "wlq" = ( /obj/structure/disposalpipe/segment{ dir = 4 @@ -7024,6 +8122,14 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"wzO" = ( +/obj/effect/floor_decal/corner/brown{ + dir = 10 + }, +/obj/structure/table/rack/shelf/steel, +/obj/machinery/light, +/turf/simulated/floor/tiled, +/area/quartermaster/miningdock) "wAu" = ( /obj/structure/railing/grey, /obj/effect/overlay/snow/floor, @@ -7070,18 +8176,21 @@ /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "wDi" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 4; - icon_state = "1-4" - }, -/obj/structure/cable/green{ - d1 = 1; - d2 = 8; - icon_state = "1-8" - }, -/turf/simulated/floor/tiled, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) +"wDt" = ( +/obj/effect/wingrille_spawn/reinforced, +/obj/machinery/door/firedoor/glass, +/turf/simulated/floor/plating, +/area/chapel/monastery/music) +"wEw" = ( +/obj/machinery/light, +/obj/machinery/light_switch{ + dir = 1; + pixel_y = -24 + }, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "wFm" = ( /obj/effect/floor_decal/corner/paleblue/diagonal{ dir = 4 @@ -7113,7 +8222,11 @@ pixel_x = -25; pixel_y = 0 }, -/turf/simulated/floor/tiled, +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 4 + }, +/turf/simulated/floor/wood, /area/chapel/monastery/upper) "wLl" = ( /obj/machinery/atmospherics/unary/vent_scrubber/on{ @@ -7138,17 +8251,6 @@ }, /turf/simulated/open/cryogaia, /area/borealis2/outdoors/grounds/walkway/exploration) -"wSy" = ( -/obj/machinery/light{ - dir = 4; - icon_state = "tube1"; - pixel_y = 0 - }, -/obj/effect/floor_decal/corner/purple{ - dir = 6 - }, -/turf/simulated/floor/tiled, -/area/cryogaia/station/explorer_upper) "wSJ" = ( /obj/structure/cable/green{ d1 = 1; @@ -7159,20 +8261,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/supply, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) -"wTE" = ( -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 4; - icon_state = "intact-scrubbers" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/device/geiger/wall{ - dir = 1; - pixel_y = -30 - }, -/turf/simulated/floor/tiled, -/area/chapel/monastery/upper) "wUc" = ( /obj/structure/cable/green{ d1 = 1; @@ -7250,6 +8338,18 @@ }, /turf/simulated/floor/tiled/white, /area/medical/medbayupper) +"xeo" = ( +/obj/structure/cable/green{ + d1 = 2; + d2 = 4; + icon_state = "2-4" + }, +/obj/machinery/holoposter{ + dir = 4; + pixel_x = -30 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "xeM" = ( /obj/structure/railing/grey, /obj/structure/catwalk, @@ -7271,19 +8371,6 @@ /obj/effect/floor_decal/corner/purple, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) -"xlr" = ( -/obj/structure/cable/green{ - d1 = 1; - d2 = 2; - icon_state = "1-2" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ - dir = 5; - icon_state = "intact-scrubbers" - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply, -/turf/simulated/wall/r_wall, -/area/cryogaia/station/explorer_upper) "xlt" = ( /obj/effect/wingrille_spawn/reinforced, /obj/machinery/door/firedoor/glass, @@ -7315,6 +8402,11 @@ "xqc" = ( /turf/simulated/open, /area/security/watchtower) +"xry" = ( +/obj/effect/floor_decal/industrial/warning/dust, +/obj/effect/floor_decal/rust, +/turf/simulated/floor/tiled/techmaint, +/area/civilian/atrium/upper) "xuT" = ( /obj/machinery/door/airlock/maintenance/common, /turf/simulated/floor/plating, @@ -7370,6 +8462,21 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"xDm" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, +/obj/structure/cable/green{ + d1 = 4; + d2 = 8; + icon_state = "4-8" + }, +/turf/simulated/floor/tiled, +/area/chapel/monastery/upper) "xDX" = ( /turf/simulated/wall/rshull, /area/shuttle/belter) @@ -7396,6 +8503,7 @@ icon_state = "tube1"; pixel_y = 0 }, +/obj/effect/floor_decal/corner/white, /turf/simulated/floor/tiled, /area/civilian/atrium/upper) "xFf" = ( @@ -7409,8 +8517,18 @@ pixel_x = 0; pixel_y = -24 }, +/obj/effect/floor_decal/industrial/hatch/yellow, /turf/simulated/floor/plating/snow/plating, /area/cryogaia/station/hallway/primary/upper) +"xFk" = ( +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "xFr" = ( /obj/effect/floor_decal/corner/paleblue{ dir = 9 @@ -7422,10 +8540,29 @@ /obj/structure/bed/chair, /turf/simulated/floor/tiled/techmaint, /area/borealis2/outdoors/grounds/tower/south) +"xHu" = ( +/obj/structure/bed/chair/wood{ + icon_state = "wooden_chair"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) +"xKa" = ( +/obj/structure/table/woodentable, +/obj/item/device/instrument/saxophone, +/turf/simulated/floor/wood, +/area/chapel/monastery/music) "xKX" = ( /obj/machinery/light, /turf/simulated/floor/tiled, /area/cryogaia/station/hallway/primary/upper) +"xOp" = ( +/obj/effect/floor_decal/corner/white/full{ + icon_state = "corner_white_full"; + dir = 8 + }, +/turf/simulated/floor/tiled, +/area/civilian/atrium/upper) "xPN" = ( /obj/machinery/atmospherics/unary/vent_pump/on, /turf/simulated/floor/plating, @@ -7447,6 +8584,9 @@ dir = 1; icon_state = "bulb1" }, +/obj/structure/disposalpipe/segment{ + dir = 4 + }, /turf/simulated/floor/plating, /area/cryogaia/station/hallway/primary/upper) "ybe" = ( @@ -7476,6 +8616,13 @@ }, /turf/simulated/floor/tiled/white, /area/crew_quarters/medbreak) +"yfQ" = ( +/obj/structure/railing{ + dir = 8 + }, +/obj/structure/railing, +/turf/simulated/open, +/area/chapel/monastery/upper) "ygu" = ( /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ dir = 4; @@ -7483,6 +8630,18 @@ }, /turf/simulated/floor/tiled, /area/security/watchtower) +"yhA" = ( +/obj/machinery/door/airlock/glass_external/freezable{ + frequency = 1379; + id_tag = "Outpost_NE_Exterior" + }, +/obj/machinery/access_button/airlock_exterior{ + master_tag = "Outpost_NE_Master"; + pixel_x = 26 + }, +/obj/effect/floor_decal/industrial/hatch/yellow, +/turf/simulated/floor/plating/snow/plating, +/area/civilian/atrium/upper) "yiq" = ( /obj/structure/railing/grey, /obj/structure/catwalk, @@ -7499,16 +8658,18 @@ d2 = 8; icon_state = "4-8" }, -/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{ - dir = 1 - }, -/obj/machinery/atmospherics/pipe/manifold/hidden/supply{ - dir = 1 - }, /obj/effect/floor_decal/corner/purple{ icon_state = "corner_white"; dir = 1 }, +/obj/machinery/door/airlock/maintenance/common, +/obj/machinery/atmospherics/pipe/simple/hidden/supply{ + dir = 4 + }, +/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{ + dir = 4; + icon_state = "intact-scrubbers" + }, /turf/simulated/floor/tiled, /area/cryogaia/station/explorer_upper) "ylt" = ( @@ -7526,6 +8687,10 @@ d2 = 8; icon_state = "2-8" }, +/obj/structure/disposalpipe/segment{ + dir = 4; + icon_state = "pipe-c" + }, /turf/simulated/floor/tiled, /area/quartermaster/miningdock) "ylN" = ( @@ -16880,7 +18045,7 @@ uht uht uht uht -uht +wAX iuA aae aae @@ -17000,7 +18165,7 @@ aae aae aae wAG -nZj +nQZ nZj nZj nZj @@ -17504,8 +18669,8 @@ aae aae aae qKe -abc -abi +abb +hna abm abm abw @@ -17632,8 +18797,8 @@ aae aae pZp aax -aaG -aaK +pxG +uhg aaK aaV aab @@ -17684,7 +18849,7 @@ jCW wte hiS weI -cga +rkO cga duB jCW @@ -17760,7 +18925,7 @@ abd abJ abG abn -abi +sFS abc pnG aae @@ -18140,7 +19305,7 @@ aaG aaM aaG lna -aax +aab kuv aaf aaf @@ -18190,7 +19355,7 @@ mpn wyn wyn iyY -lii +wte cyd aaf aaf @@ -18263,7 +19428,7 @@ sWg tPK dBX abb -asV +abi abQ abc pnG @@ -18386,7 +19551,7 @@ aae aae aae aae -pZp +cie aab aax aab @@ -18518,7 +19683,7 @@ abb abd abc abb -pnG +xxo aae aae aae @@ -36103,7 +37268,7 @@ mnl mnl mnl eUx -eYW +qiv eYW fZT jrZ @@ -36313,7 +37478,7 @@ mEQ cMj bop srE -stF +qsG stF stF sGw @@ -36553,7 +37718,7 @@ aaf aaf atH xoh -vtA +pmt vtA vtA vtA @@ -37870,7 +39035,7 @@ jjc jjc cxO nXm -gsw +rnR bBl eFr eFr @@ -38572,7 +39737,7 @@ qNi wFm buZ yfw -buZ +vTU buZ buZ buZ @@ -40336,7 +41501,7 @@ uro tUw tbY tbY -tbY +rsS cNW uoe tbY @@ -40820,7 +41985,7 @@ aaf qFu aaj aaj -aaj +nAJ aaf aaf aaf @@ -40861,7 +42026,7 @@ eFr eFr eFr fej -liZ +jbk nvJ cfU fej @@ -40940,7 +42105,7 @@ aaf aaf aaf gEW -pcI +oIw bvg lbe sqE @@ -41072,7 +42237,7 @@ aaf xAZ eFr eFr -eFr +mxG aaf aaf aaf @@ -41113,7 +42278,7 @@ eFr eFr eFr fej -jbk +rxt jbk tME fej @@ -41194,7 +42359,7 @@ aaf gEW pcI hFf -tnK +qCe sqE izj pcI @@ -41325,9 +42490,9 @@ xAZ eFr eFr eFr -eFr -eFr -eFr +aaj +aaj +aaj eFr eFr eFr @@ -42098,7 +43263,7 @@ nmc nmc alC giD -nmc +ayr tgV jeG ePX @@ -42627,7 +43792,7 @@ eFr fej ubh jbk -tME +kZT fej eFr eFr @@ -44137,7 +45302,7 @@ eFr eFr eFr fej -jbk +rxt jbk qmp fej @@ -45396,13 +46561,13 @@ hCZ hCZ hCZ hCZ -jQk -jQk +bLn +xeo fvv nIl jQk -jQk -jQk +bhF +bLn hCZ hCZ hCZ @@ -45411,8 +46576,8 @@ hCZ hCZ hCZ hCZ -jQk -jQk +aBr +kpg hCZ hCZ hCZ @@ -45642,16 +46807,16 @@ eFr hCZ hCZ nfI -jQk +gsI jQk jQk jQk jQk nfI jQk +lmD jQk -jQk -jQk +xFk jQk jQk jQk @@ -45665,9 +46830,9 @@ nfI jQk jQk jQk -jQk -nfI -jQk +gsI +twp +bLn hCZ hCZ eFr @@ -45892,33 +47057,33 @@ eFr eFr eFr hCZ +qQE jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk +avC +drv +drv +drv +drv +fvL +dpG +sdM +cDE +aZY +qei +bjs +bjs +tnl +bjs +bjs +bjs +bjs +bjs +cFq +drv +drv +drv +drv +itB jQk jQk hCZ @@ -46143,15 +47308,15 @@ eFr eFr eFr eFr -hCZ -jQk +hyq +iDm jQk jQk tbQ tbQ tbQ jQk -jQk +aAM hyw prO prO @@ -46159,13 +47324,13 @@ prO prO prO sAj -jQk +hqr jQk tbQ tbQ tbQ jQk -jQk +hqr hyw prO prO @@ -46395,15 +47560,15 @@ eFr eFr eFr eFr -hCZ -jQk +hyq +iDm jQk jQk tbQ qze dco jQk -jQk +aAM mWs qze qze @@ -46422,7 +47587,7 @@ mWs qze qze dco -jQk +wgK jQk jQk hCZ @@ -46647,15 +47812,15 @@ eFr eFr eFr eFr -hCZ -jQk +hyq +iDm jQk jQk tbQ qze qze jQk -jQk +aAM mWs qze qze @@ -46674,9 +47839,9 @@ mWs qze qze dco +qRr jQk -jQk -jQk +orN hCZ eFr eFr @@ -46899,15 +48064,15 @@ eFr eFr eFr eFr -hCZ -jQk +hyq +iDm jQk jQk tbQ qze dco jQk -jQk +aAM mWs qze qze @@ -46926,7 +48091,7 @@ mWs qze qze dco -jQk +xHu jQk jQk hCZ @@ -47151,15 +48316,15 @@ eFr eFr eFr eFr -hCZ -jQk +hyq +iDm jQk jQk tbQ tbQ tbQ jQk -jQk +aAM fLr iCM iCM @@ -47167,13 +48332,13 @@ iCM iCM iCM pVN -jQk +lDg jQk tbQ tbQ tbQ jQk -jQk +lDg fLr iCM iCM @@ -47404,33 +48569,33 @@ eFr eFr eFr hCZ +mys jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk -jQk +avC +reP +bjs +bjs +bjs +vmJ +bjs +bjs +cDE +sUy +qei +bjs +bjs +bYL +bjs +bjs +bjs +bjs +bjs +pSk +drv +drv +drv +drv +itB jQk jQk hCZ @@ -47658,12 +48823,12 @@ eFr hCZ hCZ xEv -jQk -jQk -jQk -jQk -jQk -ibY +rDK +ntu +mew +bIg +bIg +peT jQk jQk jQk @@ -47674,16 +48839,16 @@ jQk ibY jQk jQk -jQk -jQk -jQk -ibY -jQk -jQk +kab jQk jQk ibY jQk +jQk +jQk +jQk +jMw +bLn hCZ hCZ eFr @@ -47910,19 +49075,19 @@ eFr eFr hCZ hCZ +hyq +eej hCZ hCZ hCZ hCZ -hCZ -hCZ -jQk -jQk -jQk -jQk -jQk +bLn +sjB jQk +mfR jQk +sjB +bLn hCZ hCZ hCZ @@ -47931,8 +49096,8 @@ hCZ hCZ hCZ hCZ -jQk -jQk +bgk +oEj hCZ hCZ hCZ @@ -48161,10 +49326,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hCZ +xOp +mfO +hCZ eFr eFr hCZ @@ -48413,10 +49578,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +sdE +hZS +hCZ eFr eFr eFr @@ -48665,10 +49830,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +iDm +sjC +hCZ eFr eFr eFr @@ -48917,10 +50082,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +iDm +sjC +hCZ eFr eFr eFr @@ -49169,10 +50334,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hCZ +uxH +sjC +hCZ eFr eFr eFr @@ -49421,10 +50586,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hCZ +dYx +wdS +hCZ eFr eFr eFr @@ -49673,10 +50838,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hCZ +kHM +sjC +hCZ eFr eFr eFr @@ -49925,10 +51090,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +iDm +sjC +hCZ eFr eFr eFr @@ -50177,10 +51342,10 @@ eFr eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +iDm +sjC +hCZ eFr eFr eFr @@ -50429,10 +51594,10 @@ aZL eFr eFr eFr -eFr -eFr -eFr -eFr +hyq +iDm +ftK +hCZ eFr eFr eFr @@ -50680,11 +51845,11 @@ aaf aaf xAZ eFr -eFr -eFr -eFr -eFr -eFr +tpl +hCZ +uxH +rfs +hCZ eFr eFr eFr @@ -50931,12 +52096,12 @@ aaf aaf aaf xAZ -eFr -eFr -eFr -eFr -eFr -eFr +tpl +tpl +hCZ +hCZ +dmE +hCZ eFr eFr eFr @@ -51166,12 +52331,12 @@ vdJ vdJ vdJ vdJ -akj -akj -akj -akj -akj -vdJ +wDt +wDt +wDt +wDt +wDt +hIp aaf aaf aaf @@ -51182,13 +52347,13 @@ aaf aaf aaf aaf -xAZ -eFr -eFr -eFr -eFr -eFr -eFr +bzg +tpl +tpl +aSK +nff +syH +hCZ eFr eFr eFr @@ -51414,16 +52579,16 @@ vdJ knW gOv vdJ -rEr -rEr -rEr -vdJ -lhg -lhg -lhg -lhg -lhg +saG +mkf +aeZ vdJ +vvR +vQe +ixp +rRV +vvR +hIp aaf aaf aaf @@ -51434,13 +52599,13 @@ aaf aaf aaf aaf -xAZ -eFr -eFr -eFr -eFr -eFr -eFr +bzg +tpl +dYF +aSK +grp +xry +aSK eFr eFr eFr @@ -51660,7 +52825,7 @@ aaf aaf aaf akj -lhg +kiy bbx nbd scS @@ -51668,14 +52833,14 @@ cwb vdJ kPV rEr -rEr +tSv vdJ -lhg +nth kuV oPw -crS -lhg -vdJ +kuV +hTR +hIp nAJ aaf aaf @@ -51686,13 +52851,13 @@ aaf aaf aaf aaf -xAZ -eFr -eFr -eFr -eFr -eFr -eFr +bzg +tpl +tpl +yhA +oCL +gjI +aSK eFr eFr eFr @@ -51916,18 +53081,18 @@ xzO pNK vdJ vdJ -hli +vdJ vdJ vdJ kFv vdJ vdJ -lhg -lhg -qtC -lhg -lhg -vdJ +mrG +iyG +vvQ +vvR +xKa +hIp mxG aaf aaf @@ -51938,13 +53103,13 @@ aaf aaf aaf aaf -xAZ -eFr -eFr -eFr -eFr -eFr -eFr +bzg +tpl +crA +hCZ +aSK +aSK +hCZ eFr eFr eFr @@ -52166,22 +53331,22 @@ aaf akj gay fkz -bLd +vdJ tNO wDi wIH -eLD -lhg -gaB -vdJ -cQz -lhg -qtC -lhg -inN -vdJ -vdJ +opZ +wDi +tNO vdJ +ekt +vvR +lDq +vvR +wEw +hIp +hIp +hIp aaf aaf aaf @@ -52191,12 +53356,12 @@ aaf aaf aaf too -eFr -eFr -eFr -eFr -eFr -eFr +tpl +tpl +tpl +tpl +tpl +tpl eFr eFr eFr @@ -52419,21 +53584,21 @@ akj hrD aEe vdJ -lhg +taO bxY -lhg -lhg +fBN +rQs iqA -lhg -vdJ -qyz -lhg -qtC -lhg -lhg -lhg -lhg +taO vdJ +mBw +vvR +lDq +vvR +vvR +iTa +dSL +hIp jla kDP kDP @@ -52442,13 +53607,13 @@ kDP kDP kDP kDP -eFr -eFr -eFr -eFr -eFr -eFr -eFr +tpl +tpl +tpl +tpl +tpl +tpl +tpl eFr eFr eFr @@ -52671,21 +53836,21 @@ akj hrD aEe vdJ -lhg +taO vgX -lhg -lhg -weE -lhg +taO +taO +iCB +taO vdJ -lhg -lhg -qtC -lhg -lhg -lhg +vJR +gnP +lDq +vvR +vvR +vKE ccA -vdJ +hIp qNY aaf aaf @@ -52695,11 +53860,11 @@ aaf aaf aaf btU -aZL -eFr -eFr -eFr -eFr +gdt +tpl +tpl +tpl +tpl eFr eFr eFr @@ -52921,24 +54086,24 @@ aaf aaf vdJ qyz -qtC +dzG vdJ -lhg +pHj vgX -lhg -lhg -weE -lhg +dfC +dSX +iCB +pHj vdJ -lhg -lhg -qtC -lhg -lhg -lhg -lhg -vdJ -qNY +mNp +vvR +lDq +kuV +kuV +vvR +vup +hIp +cUt aaf aaf aaf @@ -52948,9 +54113,9 @@ aaf aaf aaf aaf -cDb -eFr -eFr +tcr +tpl +tpl eFr eFr eFr @@ -53173,22 +54338,22 @@ aaf aaf akj lhg -wTE +fkz +vdJ +vdJ +wkT +vdJ +vdJ +mmL +vdJ +vdJ +emT +emT +sCa +emT +emT vdJ -lhg -vgX -lhg -lhg -weE -lhg vdJ -lhg -lhg -qtC -lhg -lhg -lhg -inN vdJ qNY aaf @@ -53425,22 +54590,22 @@ aaf aaf akj lhg -qtC -vdJ -vdJ -sAD -vdJ -vdJ -mmL -vdJ -vdJ -vdJ -vdJ -rKB -vdJ -vdJ -vdJ -vdJ +xDm +lhg +lhg +cDx +lhg +lhg +weE +lhg +lhg +lhg +lhg +fkz +mYC +lhg +eLD +lhg vdJ qNY aaf @@ -53678,18 +54843,18 @@ aaf akj lhg hmw -gSu -ggP +oGg +oGg jeP -hIU +rbg hIU mcv -fss +hIU hIU oGg -oGg +fZS joZ -nMW +oGg xwp kcJ lhg @@ -53930,15 +55095,15 @@ aaf vdJ cQz qtC +vdJ +nbc +rvp lhg -gay -gay -gay -gay -gay -gay -gay +rvp lhg +rvp +aaL +vdJ lhg lhg lhg @@ -54183,14 +55348,14 @@ akj lhg qtC anb -hrD -hrD -hrD -hrD -hrD -hrD -hrD -iie +gvx +hjt +hjt +hjt +hjt +hjt +yfQ +anb lhg lhg lhg @@ -54434,15 +55599,15 @@ eFr akj lhg qtC -anb +rvp +nUZ hrD hrD hrD hrD hrD -hrD -hrD -iie +fIj +rvp lhg lhg lhg @@ -54514,7 +55679,7 @@ eFr eFr eFr erL -gBF +ceF lCn nRH pQE @@ -54685,17 +55850,17 @@ eFr eFr akj lhg -qtC -anb -hrD -hrD -hrD -hrD -hrD -hrD -hrD -iie +sRX lhg +nUZ +hrD +hrD +hrD +hrD +hrD +fIj +lhg +rvp lhg lhg lhg @@ -54938,21 +56103,21 @@ eFr vdJ qyz qtC -anb +rvp +nUZ hrD hrD hrD hrD hrD -hrD -hrD -iie +fIj +rvp lhg lhg lhg -fXx -umR -lhg +awe +jLk +fbp emT tpl wAu @@ -55189,17 +56354,17 @@ eFr eFr akj lhg -qtC -anb -hrD -hrD -hrD -hrD -hrD -hrD -hrD -iie +sRX lhg +nUZ +hrD +hrD +hrD +hrD +hrD +fIj +lhg +rvp lhg lhg vdJ @@ -55442,15 +56607,15 @@ eFr akj lhg qtC -anb +rvp +nUZ hrD hrD hrD hrD hrD -hrD -hrD -iie +fIj +rvp lhg lhg lhg @@ -55515,7 +56680,7 @@ ovv ovv ovv ovv -uKK +mBh hEL qzN qzN @@ -55695,14 +56860,14 @@ akj lhg qtC iQq -hrD -hrD -hrD -hrD -hrD -hrD -hrD -mip +ehJ +jiV +jiV +jiV +jiV +jiV +qrT +iQq lhg lhg lhg @@ -55947,13 +57112,13 @@ vdJ lhg qtC vdJ -sOi -sQN -sQN -sQN -sQN -sQN -gVC +nbc +rvp +lhg +rvp +lhg +rvp +aaL vdJ lhg lhg @@ -56020,8 +57185,8 @@ uRv uRv udy tnw -jSA -foF +gLD +ttf vwG dPA eDa @@ -56197,21 +57362,21 @@ eFr eFr akj lhg -qtC -lhg -lhg +sRX lhg lhg lhg +rvp lhg +rvp lhg lhg bcO -bcO +nIj bcO bcO rVU -tpl +crA tpl eTo qlq @@ -56271,10 +57436,10 @@ lJJ lJJ xDX gaq -oZg -oPy -jMo -bIh +bmI +gLD +ssz +qTL wrI wrI wrI @@ -56526,7 +57691,7 @@ gaq iQe hEL tez -bIh +qTL wrI wrI wrI @@ -56534,7 +57699,7 @@ wBP wrI iKP wrI -pEF +lqu qzN gyY sWC @@ -56775,10 +57940,10 @@ gkX gkX xDX gaq -oZg -grk -fmu -bIh +gor +jSA +foF +qBD wrI rqX wrI @@ -56786,13 +57951,13 @@ wBP wrI wrI wrI -pEF +ezw qzN yaM -tZb +lTd erL gBF -nny +gQF erL eFr eFr @@ -57027,9 +58192,9 @@ gkX gkX vEr gaq -oZg -grk -ssz +uFT +oPy +jMo bIh wLn dcj @@ -57041,7 +58206,7 @@ wrI dqQ qzN oCA -tZb +lTd erL niM qoj @@ -57208,10 +58373,10 @@ sxt ilD fXx lhg +pFC lhg lhg -lhg -lhg +pFC lhg lhg bcO @@ -57279,18 +58444,18 @@ gkX rqN xDX gaq -oZg -grk -ssz +bCe +hEL +oqc bIh wLn dcj uVX +mtP wrI wrI wrI -wrI -pEF +wzO qzN oCA tZb @@ -57538,10 +58703,10 @@ bIh wrI wrI wrI -wrI -wrI -wrI -wrI +qeC +oSJ +lsy +lsy hru qzN bDt @@ -57790,11 +58955,11 @@ bIh wrI wrI iKP -wrI -wrI -wrI -wrI -pEF +res +qzN +grk +grk +grk qzN erL erL @@ -58042,12 +59207,12 @@ wLl wrI wrI wrI -wrI -wrI -wrI -wrI -wiM -qzN +pEF +grk +eFr +eFr +eFr +mxG aaf aaf aaf @@ -58294,12 +59459,12 @@ lsy hJg lSZ msR -oSJ -lsy -lOg -lOg -nHR -qzN +exT +grk +eFr +eFr +eFr +mxG aaf aaf aaf @@ -58546,12 +59711,12 @@ grk grk grk grk -qzN -qzN -grk -grk grk qzN +eFr +eFr +eFr +mxG aaf aaf aaf @@ -59086,7 +60251,7 @@ aaf lEu abe abe -piL +abj abj abj abf @@ -60094,7 +61259,7 @@ aaf lEu abe abe -abp +dqP abx aby abf @@ -60577,9 +61742,9 @@ mWF pSa gNr pSa +aal mWF -mWF -mWF +aaq mWF mWF mWF @@ -61079,8 +62244,8 @@ dls dls dls pSa -qdQ -ovL +qYp +pSa jjm als pSa @@ -61332,7 +62497,7 @@ lnT ovz pSa cYu -dls +pSa rJe sIO pSa @@ -61577,23 +62742,23 @@ vha mWF dls rmK -ubv +hsb hsb hsb nPp jQx pSa yiX -xlr +pSa mem brf -uMY -tKC -skj -skj -oYx -qOC -bkO +pSa +rmK +hsb +hsb +hsb +hsb +nPp kbd dls mWF @@ -61828,10 +62993,10 @@ aaf vha mWF dls -eDk +rmK ieH pln -fuq +pln uLm lQH wgz @@ -61839,14 +63004,14 @@ qQU jNN lwd dYD -lnT +viL lJg hsb hsb -gKH -wSy -esG -kFF +hsb +hsb +rjg +kbd dls mWF nbQ @@ -62079,28 +63244,28 @@ aaf aaf vha mWF -pSa -pSa -tbi -pSa -pSa +pKg rmK +tbi +hsb +hsb +hsb ohi pSa eKY ofv lwd -exb +dYD +hsb +ckh hsb hsb hsb hsb -bia -pSa +rjg +kbd dls -dls -pSa -mWF +aaq nbQ aaf aaf @@ -62331,27 +63496,27 @@ qAQ qAQ mWF mWF -eIu -cKq -dxH -tzi -pSa +pKg rmK -mHU -pSa -bnI osk hsb hsb hsb -hsb -hsb -hsb -uTs -oVV +mHU +pSa +bnI +gjS +skj +cfe +qOC +qOC +qOC +qOC +qOC +qOC saz -pCa -vFb +kbd +dls mWF nbQ aaf @@ -62583,16 +63748,16 @@ mWF mWF mWF mWF -dls -rJe -aTu -blJ -pSa +pKg hwP +esG +esG +esG +esG kFF pSa -rmK -hsb +uEy +osk hsb hsb hsb @@ -62600,11 +63765,11 @@ hsb hsb hsb xkf -pSa -nax -bii -pSa -mWF +esG +esG +kFF +dls +aat nbQ aaf aaf @@ -62836,10 +64001,10 @@ mWF mWF mWF pSa -dls -dls -ruJ -pSa +pKg +pKg +pKg +pKg dls dls pSa @@ -62851,7 +64016,7 @@ esG esG esG esG -kFF +qrY pSa dls dls @@ -63242,7 +64407,7 @@ aae aae aae aae -sGt +bGd aaE aaF aaE @@ -63334,7 +64499,7 @@ aaf aaf aEj aaT -aaX +aaT aaX aaX aaZ @@ -63374,7 +64539,7 @@ abh abg fCU abg -bMX +mVx aae aae aae @@ -63500,7 +64665,7 @@ aaH aaR uWc lCX -aaF +aaE qij aaf aaf @@ -63597,7 +64762,7 @@ aaw aaw aaw mWF -aal +kjj aao aao aao @@ -63617,7 +64782,7 @@ aao aao aao aao -aaq +bBy mWF vKM abh @@ -63749,7 +64914,7 @@ aae sGt aaF aaI -aaN +tmX uWc uWc aaP @@ -63840,7 +65005,7 @@ fCG aaZ abL aaY -aaY +kye abL aaX sZO @@ -63874,7 +65039,7 @@ mWF vKM abg abl -abk +vWl abk qlr fCU @@ -64124,8 +65289,8 @@ aak aas mWF vKM -fCU -abk +abg +qtT abu abu abk @@ -64760,7 +65925,7 @@ nVX nVX nVX nVX -nVX +dHP sgc aae aae @@ -67649,7 +68814,7 @@ aap aap aap aap -aat +cST mWF nbQ aae diff --git a/maps/yw/cryogaia_areas.dm b/maps/yw/cryogaia_areas.dm index 96e1040888..571dc1594a 100644 --- a/maps/yw/cryogaia_areas.dm +++ b/maps/yw/cryogaia_areas.dm @@ -3,10 +3,13 @@ icon = 'icons/turf/areas_vr.dmi' /area/borealis2/elevator/medbasement name = "Elevator shaft - Lower Medical" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/borealis2/elevator/medbay name = "Elevator shaft - Main Medical" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/borealis2/elevator/medupper name = "Elevator shaft - Upper Medical" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/borealis2/elevator/dorms name = "Elevator shaft - Dorms" /area/borealis2/elevator/scicargo @@ -28,9 +31,10 @@ /area/borealis2/outdoors/grounds name = "\The outpost grounds" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/borealis2/outdoors/grounds/upper - name = "\The outpost grounds - upper level" + name = "\The outpost grounds" base_turf = /turf/simulated/open/cryogaia icon_state = "outside2" @@ -40,7 +44,7 @@ icon_state = "submap_hostile_area" /area/borealis2/outdoors/grounds/walkway - name = "Perimeter Wall - Upper" + name = "Perimeter Wall Walkway" icon = 'icons/turf/areas.dmi' icon_state = "submap_trespass_area" @@ -54,6 +58,8 @@ /area/borealis2/outdoors/grounds/tower name = "Perimeter Tower" + sound_env = SMALL_ENCLOSED + forbid_events = TRUE /area/borealis2/outdoors/grounds/tower/north name = "Perimeter Tower - N" @@ -96,11 +102,11 @@ icon_state = "northwest" /area/borealis2/outdoors/exterior - name = "The wilderness" + name = "\The wilderness" icon_state = "outside1unex" /area/borealis2/outdoors/exterior/upper - name = "The wilderness - upper level" + name = "\The wilderness" icon_state = "outside2unex" /area/borealis2/outdoors/exterior/lake @@ -200,6 +206,9 @@ /area/chapel/monastery/upper name = "Monastery Upper Floor" +/area/chapel/monastery/music + name = "Monastery Music Room" + //holodorms /area/holodeck/holodorm/source_basic name = "\improper Holodeck Source" @@ -269,13 +278,16 @@ /area/crew_quarters/kitchen/fish_farm name = "\improper Fish Farm" icon_state = "red" + /area/mine/explored/underdark name = "\improper Mining Underdark" base_turf = /turf/simulated/mineral/floor + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/cryogaia/tram //hold over from tether, used in tram station shocking rails code. name = "\improper Tram Station" icon_state = "dk_yellow" + flags = AREA_FLAG_IS_NOT_PERSISTENT // Exploration Shuttle stuff // @@ -304,6 +316,7 @@ /area/cryogaia/station/medical/upper name = "\improper Medical Loft" icon_state = "medbay_primary_storage" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/constructionsite/cryogaia/upper name = "\improper Upper Level Construction Area" @@ -323,9 +336,11 @@ // Bad guys!! /area/shuttle/mercenary name = "\improper Mercenary Vessel" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/shuttle/skipjack name = "\improper Vox Vessel" + flags = AREA_FLAG_IS_NOT_PERSISTENT //Exploration area locations. @@ -333,15 +348,18 @@ /area/cryogaia/outpost/exploration_plains name = "\improper Plains Exploration Zone" icon_state = "green" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/cryogaia/outpost/exploration_shed name = "\improper Plains Entrance Shed" /area/cryogaia_away/cave/unexplored/normal + flags = AREA_FLAG_IS_NOT_PERSISTENT //antag stuff /area/antag/antag_base name = "\improper Syndicate Outpost" requires_power = 0 dynamic_lighting = 0 + flags = AREA_FLAG_IS_NOT_PERSISTENT // Security stuff @@ -413,10 +431,12 @@ /area/maintenance/medical_lower name = "Underground Medical Maintenance" icon_state = "maint_medbay_fore" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/maintenance/medical_upper name = "Upper Level Medical Maintenance" icon_state = "maint_medbay_aft" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/mine/unexplored/underdark name = "Underground rock" @@ -435,27 +455,34 @@ name = "\improper Medbay Annex" icon_state = "medbay4" music = 'sound/ambience/signal.ogg' + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/biostorage2 name = "\improper Auxiliary Storage" icon_state = "medbay2" music = 'sound/ambience/signal.ogg' + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/biostorage3 name = "\improper Secondary Auxiliary Storage" icon_state = "medbay2" music = 'sound/ambience/signal.ogg' + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/toilet name = "\improper Medical bathroom" icon_state = "toilet" sound_env = SMALL_ENCLOSED + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/pyschwarde name = "\improper Psychiatric lockup" icon_state = "medbay2" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/triage name = "\improper Medbay Triage" icon_state = "medbay4" + flags = AREA_FLAG_IS_NOT_PERSISTENT /area/medical/scanning name = "Medical Diagnostics Center" icon_state = "medbay" + flags = AREA_FLAG_IS_NOT_PERSISTENT //Science outpost diff --git a/maps/yw/cryogaia_defines.dm b/maps/yw/cryogaia_defines.dm index 1d74a90448..043696473a 100644 --- a/maps/yw/cryogaia_defines.dm +++ b/maps/yw/cryogaia_defines.dm @@ -152,7 +152,18 @@ /area/tcommsat/powercontrol, /area/constructionsite/medical, /area/borealis2/outdoors/grounds/entrance, - /area/security/vacantoffice) + /area/security/vacantoffice, + /area/borealis2/outdoors/grounds/tower/southwest, + /area/borealis2/outdoors/grounds/tower/south, + /area/borealis2/outdoors/grounds/tower/southeast, + /area/borealis2/outdoors/grounds/tower/east, + /area/borealis2/outdoors/grounds/tower/west, + /area/borealis2/outdoors/grounds/tower/northwest, + /area/borealis2/outdoors/grounds/tower/northeast, + /area/borealis2/outdoors/grounds/checkpoint, + /area/borealis2/outdoors/grounds/wall, + /area/cryogaia/station/ert_arrival + ) unit_test_exempt_from_atmos = list( // /area/engineering/atmos/intake ) diff --git a/maps/yw/cryogaia_turfs.dm b/maps/yw/cryogaia_turfs.dm index 4545579a14..722c2aed89 100644 --- a/maps/yw/cryogaia_turfs.dm +++ b/maps/yw/cryogaia_turfs.dm @@ -40,6 +40,12 @@ CRYOGAIA_TURF_CREATE(/turf/simulated/floor/tiled/old_tile/gray) /turf/simulated/floor/outdoors/snow/gravsnow/cryogaia/covered outdoors = 0 +/turf/simulated/floor/reinforced/cryogaia + name = "hangar hatch" + desc = "A heavily reinforced hangar access point. It doesn't look like it'll open easily." + outdoors = 1 + CRYOGAIA_SET_ATMOS + /turf/simulated/floor/tiled/old_tile/gray/cryogaia CRYOGAIA_SET_ATMOS diff --git a/maps/yw/residential/backup/residential.dmm b/maps/yw/residential/backup/residential.dmm index 1dc25f0551..541bd444a2 100644 --- a/maps/yw/residential/backup/residential.dmm +++ b/maps/yw/residential/backup/residential.dmm @@ -58,7 +58,7 @@ "bf" = (/obj/machinery/door/airlock/glass,/turf/simulated/floor/tiled/white,/area/residential/ship_bay) "bg" = (/obj/structure/bed/chair/sofa/right{dir = 4},/turf/simulated/floor/wood,/area/residential/ship_bay) "bh" = (/turf/simulated/floor/wood,/area/residential/ship_bay) -"bi" = (/obj/machinery/cooker/oven,/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/residential/ship_bay) +"bi" = (/obj/machinery/appliance/cooker/oven,/obj/machinery/light{dir = 4},/turf/simulated/floor/wood,/area/residential/ship_bay) "bj" = (/obj/structure/bed/chair/shuttle{dir = 4; icon_state = "shuttle_chair"},/obj/machinery/light{dir = 8},/obj/structure/closet/walllocker/emerglocker/west,/turf/simulated/floor/plating,/area/residential/ship_bay) "bk" = (/obj/machinery/computer/shuttle_control{dir = 8},/turf/simulated/floor/plating,/area/residential/ship_bay) "bl" = (/obj/effect/floor_decal/industrial/warning{icon_state = "warning"; dir = 4},/obj/structure/shuttle/window,/turf/simulated/shuttle/wall/dark/no_join,/area/residential/ship_bay) @@ -223,8 +223,8 @@ "eo" = (/obj/structure/table/rack,/obj/item/clothing/under/pj/red,/turf/simulated/floor/wood,/area/residential/mansion) "ep" = (/turf/simulated/floor/wood,/area/residential/mansion) "eq" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/shorts/khaki,/turf/simulated/floor/wood,/area/residential/mansion) -"er" = (/obj/machinery/cooker/candy,/turf/simulated/floor/lino,/area/residential/mansion) -"es" = (/obj/machinery/cooker/cereal,/turf/simulated/floor/lino,/area/residential/mansion) +"er" = (/obj/machinery/appliance/mixer/candy,/turf/simulated/floor/lino,/area/residential/mansion) +"es" = (/obj/machinery/appliance/mixer/cereal,/turf/simulated/floor/lino,/area/residential/mansion) "et" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/small/peppermill,/obj/item/weapon/reagent_containers/food/condiment/small/saltshaker,/turf/simulated/floor/lino,/area/residential/mansion) "eu" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/condiment/enzyme,/obj/item/weapon/reagent_containers/food/condiment/coldsauce,/obj/item/weapon/reagent_containers/food/condiment/cornoil,/obj/item/weapon/reagent_containers/food/condiment/hotsauce,/obj/item/weapon/reagent_containers/food/condiment/ketchup,/obj/item/weapon/reagent_containers/food/condiment/sugar,/obj/item/weapon/reagent_containers/food/condiment/soysauce,/turf/simulated/floor/lino,/area/residential/mansion) "ev" = (/obj/machinery/light,/turf/simulated/floor/reinforced,/area/residential/ship_bay) @@ -246,7 +246,7 @@ "eL" = (/obj/structure/toilet{dir = 4},/turf/simulated/floor/tiled/white,/area/residential/mansion) "eM" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/shorts/green,/turf/simulated/floor/wood,/area/residential/mansion) "eN" = (/obj/structure/table/marble,/obj/item/weapon/reagent_containers/food/drinks/bluespace_coffee,/obj/item/weapon/storage/box/beakers,/turf/simulated/floor/lino,/area/residential/mansion) -"eO" = (/obj/machinery/cooker/grill,/turf/simulated/floor/lino,/area/residential/mansion) +"eO" = (/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/lino,/area/residential/mansion) "eP" = (/turf/simulated/wall,/area/residential/corridors) "eQ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled,/area/residential/corridors) "eR" = (/turf/simulated/floor/tiled,/area/residential/corridors) @@ -259,7 +259,7 @@ "eY" = (/obj/structure/table/rack,/obj/item/clothing/under/pj/blue,/turf/simulated/floor/wood,/area/residential/mansion) "eZ" = (/obj/structure/closet/cabinet,/obj/item/clothing/under/schoolgirl,/turf/simulated/floor/wood,/area/residential/mansion) "fa" = (/obj/structure/table/marble,/obj/machinery/reagentgrinder,/turf/simulated/floor/lino,/area/residential/mansion) -"fb" = (/obj/machinery/cooker/oven,/turf/simulated/floor/lino,/area/residential/mansion) +"fb" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/lino,/area/residential/mansion) "fc" = (/turf/simulated/wall,/area/residential/lobby) "fd" = (/obj/structure/disposalpipe/segment{dir = 4; icon_state = "pipe-c"},/turf/space,/area/space) "fe" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/space,/area/space) @@ -677,11 +677,11 @@ "na" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor/tiled/white,/area/residential/room5) "nb" = (/obj/structure/bed/chair/comfy/brown{dir = 8},/turf/simulated/floor/holofloor/wood,/area/residential/mansion) "nc" = (/obj/structure/table/standard{name = "plastic table frame"},/obj/machinery/microwave,/turf/simulated/floor/lino,/area/residential/room1) -"nd" = (/obj/machinery/cooker/oven,/turf/simulated/floor/lino,/area/residential/room1) +"nd" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/lino,/area/residential/room1) "ne" = (/obj/machinery/alarm{dir = 1; pixel_y = -22},/turf/simulated/floor/wood,/area/residential/room1) "nf" = (/obj/structure/bed/chair/wood{dir = 1},/turf/simulated/floor/wood,/area/residential/room1) "ng" = (/obj/structure/bed/chair{dir = 1},/turf/simulated/floor/wood,/area/residential/room3) -"nh" = (/obj/machinery/cooker/oven,/turf/simulated/floor/tiled/white,/area/residential/room3) +"nh" = (/obj/machinery/appliance/cooker/oven,/turf/simulated/floor/tiled/white,/area/residential/room3) "ni" = (/obj/structure/table/marble,/obj/machinery/microwave,/turf/simulated/floor/tiled/white,/area/residential/room3) "nj" = (/obj/structure/table/marble,/turf/simulated/floor/tiled/white,/area/residential/room3) "nk" = (/obj/item/weapon/bedsheet/bluedouble,/obj/structure/bed/double/padded,/turf/simulated/floor/carpet/blue,/area/residential/room5) @@ -860,7 +860,7 @@ "qB" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/white,/area/residential/room6) "qC" = (/obj/structure/table/steel_reinforced,/obj/machinery/chemical_dispenser/bar_soft,/turf/simulated/floor/tiled/white,/area/residential/room6) "qD" = (/obj/machinery/light,/turf/simulated/floor/tiled/white,/area/residential/room6) -"qE" = (/obj/machinery/cooker/grill,/turf/simulated/floor/tiled/white,/area/residential/room6) +"qE" = (/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/tiled/white,/area/residential/room6) "qF" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 9},/turf/simulated/floor/tiled,/area/residential/corridors) "qG" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/wall,/area/residential/room6) "qH" = (/obj/machinery/door/airlock/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/turf/simulated/floor/wood,/area/residential/room6) diff --git a/maps/yw/residential/residential.dmm b/maps/yw/residential/residential.dmm index 4b86a9301a..544024d373 100644 --- a/maps/yw/residential/residential.dmm +++ b/maps/yw/residential/residential.dmm @@ -352,7 +352,7 @@ /turf/simulated/floor/wood, /area/residential/ship_bay) "bi" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/machinery/light{ dir = 4 }, @@ -1415,11 +1415,11 @@ /turf/simulated/floor/wood, /area/residential/mansion) "er" = ( -/obj/machinery/cooker/candy, +/obj/machinery/appliance/mixer/candy, /turf/simulated/floor/lino, /area/residential/mansion) "es" = ( -/obj/machinery/cooker/cereal, +/obj/machinery/appliance/mixer/cereal, /turf/simulated/floor/lino, /area/residential/mansion) "et" = ( @@ -1543,7 +1543,7 @@ /turf/simulated/floor/lino, /area/residential/mansion) "eI" = ( -/obj/machinery/cooker/fryer, +/obj/machinery/appliance/cooker/fryer, /turf/simulated/floor/lino, /area/residential/mansion) "eJ" = ( @@ -1583,7 +1583,7 @@ /turf/simulated/floor/lino, /area/residential/mansion) "eO" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/lino, /area/residential/mansion) "eP" = ( @@ -1650,7 +1650,7 @@ /turf/simulated/floor/lino, /area/residential/mansion) "fb" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/lino, /area/residential/mansion) "fc" = ( @@ -5064,7 +5064,7 @@ /turf/simulated/floor/lino, /area/residential/room1) "nd" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/lino, /area/residential/room1) "ne" = ( @@ -5087,7 +5087,7 @@ /turf/simulated/floor/wood, /area/residential/room3) "nh" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/tiled/white, /area/residential/room3) "ni" = ( @@ -6437,7 +6437,7 @@ /turf/simulated/floor/tiled/white, /area/residential/mroom2) "qE" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/tiled/white, /area/residential/mroom2) "qF" = ( @@ -9174,7 +9174,7 @@ /turf/simulated/floor/wood, /area/residential/room8) "wI" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/tiled/white, /area/residential/room8) "wJ" = ( diff --git a/maps/yw/scratchmap.dmm b/maps/yw/scratchmap.dmm index 7aa72778a8..f59c730cb8 100644 --- a/maps/yw/scratchmap.dmm +++ b/maps/yw/scratchmap.dmm @@ -418,7 +418,7 @@ "ib" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/tiled/monotile,/area/space) "ic" = (/turf/simulated/open,/area/space) "id" = (/obj/machinery/door/airlock/maintenance/common,/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/door/firedoor/glass,/turf/simulated/floor,/area/space) -"ie" = (/obj/machinery/cooker/grill,/turf/simulated/floor/tiled/techmaint,/area/space) +"ie" = (/obj/machinery/appliance/cooker/grill,/turf/simulated/floor/tiled/techmaint,/area/space) "if" = (/obj/machinery/light/small/readylight{dir = 8},/turf/simulated/floor/tiled,/area/space) "ig" = (/obj/structure/handrail,/turf/simulated/floor/tiled,/area/space) "ih" = (/obj/structure/handrail{dir = 8},/turf/simulated/floor/tiled,/area/space) @@ -795,7 +795,7 @@ "po" = (/obj/structure/cable{icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/lowfloor1) "pp" = (/obj/item/weapon/caution/cone,/turf/simulated/floor,/area/maintenance/lowfloor1) "pq" = (/obj/item/weapon/broken_bottle,/turf/simulated/floor,/area/maintenance/lowfloor1) -"pr" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/plastic,/obj/item/weapon/cigbutt/cigarbutt,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/lowfloor1) +"pr" = (/obj/structure/table/woodentable,/obj/item/weapon/material/ashtray/plastic,/obj/item/trash/cigbutt/cigarbutt,/obj/random/maintenance/clean,/obj/random/maintenance/clean,/turf/simulated/floor,/area/maintenance/lowfloor1) "ps" = (/obj/machinery/space_heater,/turf/simulated/floor/plating,/area/maintenance/lowfloor1) "pt" = (/obj/machinery/door/airlock/maintenance/common,/turf/simulated/floor,/area/maintenance/security_lower) "pu" = (/turf/simulated/floor/plating,/area/hallway/lower/fore) @@ -1159,7 +1159,7 @@ "wo" = (/obj/machinery/atmospherics/binary/pump{dir = 4},/obj/machinery/portable_atmospherics/powered/pump,/turf/simulated/floor/tiled/techfloor/grid,/area/space) "wp" = (/obj/structure/table/rack,/obj/item/weapon/storage/belt/utility/full,/obj/item/clothing/head/pilot,/obj/item/clothing/head/pilot,/obj/item/weapon/storage/box/survival/space,/obj/item/weapon/storage/toolbox/emergency,/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 10},/obj/machinery/atmospherics/pipe/simple/visible/cyan{dir = 10},/turf/simulated/floor/tiled/techfloor/grid,/area/space) "wq" = (/obj/structure/bed/chair/comfy/blue{icon_state = "comfychair_preview"; dir = 1},/obj/machinery/light_switch{dir = 2; name = "light switch "; pixel_x = 28; pixel_y = 28},/obj/item/device/radio/intercom{broadcasting = 0; dir = 4; listening = 1; name = "Common Channel"; pixel_x = 21; pixel_y = 0},/obj/machinery/button/remote/blast_door{dir = 8; id = "shuttle blast"; name = "Shuttle Blast Doors"; pixel_x = 26; pixel_y = 39; req_access = list(67)},/turf/simulated/floor/tiled/techmaint,/area/space) -"wr" = (/obj/machinery/cooker/grill{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/space) +"wr" = (/obj/machinery/appliance/cooker/grill{dir = 2},/turf/simulated/floor/tiled/techmaint,/area/space) "ws" = (/obj/structure/table/bench/padded,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor/tiled/techmaint,/area/space) "wt" = (/obj/machinery/computer/ship/helm,/turf/simulated/floor/tiled,/area/shuttle/trade/station) "wu" = (/obj/machinery/computer/shuttle_control/explore/excursion{dir = 2},/turf/simulated/floor/tiled,/area/shuttle/trade/station) diff --git a/maps/yw/submaps/aerostat/submaps/Manor1.dmm b/maps/yw/submaps/aerostat/submaps/Manor1.dmm index 0072846cea..0259cf7320 100644 --- a/maps/yw/submaps/aerostat/submaps/Manor1.dmm +++ b/maps/yw/submaps/aerostat/submaps/Manor1.dmm @@ -219,7 +219,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aY" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aZ" = ( @@ -228,7 +228,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "ba" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "bb" = ( diff --git a/maps/yw/submaps/aerostat/submaps/backup/Manor1.dmm b/maps/yw/submaps/aerostat/submaps/backup/Manor1.dmm index b981549289..2401898eb8 100644 --- a/maps/yw/submaps/aerostat/submaps/backup/Manor1.dmm +++ b/maps/yw/submaps/aerostat/submaps/backup/Manor1.dmm @@ -219,7 +219,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aY" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "aZ" = ( @@ -228,7 +228,7 @@ /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "ba" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/holofloor/wood, /area/submap/virgo2/Manor1) "bb" = ( diff --git a/maps/yw/submaps/backup/cryogaia_ships.dmm b/maps/yw/submaps/backup/cryogaia_ships.dmm index c4ed81d7c0..417a50b50c 100644 --- a/maps/yw/submaps/backup/cryogaia_ships.dmm +++ b/maps/yw/submaps/backup/cryogaia_ships.dmm @@ -305,14 +305,14 @@ /turf/simulated/floor/tiled/white, /area/houseboat) "aU" = ( -/obj/machinery/cooker/oven, +/obj/machinery/appliance/cooker/oven, /obj/structure/window/reinforced{ dir = 8 }, /turf/simulated/floor/tiled/white, /area/houseboat) "aV" = ( -/obj/machinery/cooker/grill, +/obj/machinery/appliance/cooker/grill, /turf/simulated/floor/tiled/white, /area/houseboat) "aW" = ( diff --git a/nano/README.md b/nano/README.md index 9858dcdff7..5a3f55425b 100644 --- a/nano/README.md +++ b/nano/README.md @@ -137,17 +137,17 @@ stringbuilder-based UIs, and this needs little explanation. if(location.internal == src) location.internal = null location.internals.icon_state = "internal0" - usr << "You close the tank release valve." + to_chat(usr, "You close the tank release valve.") if(location.internals) location.internals.icon_state = "internal0" else if(location.wear_mask && (location.wear_mask.flags & MASKINTERNALS)) location.internal = src - usr << "You open \the [src] valve." + to_chat(usr, "You open \the [src] valve.") if(location.internals) location.internals.icon_state = "internal1" else - usr << "You need something to connect to \the [src]!" + to_chat(usr, "You need something to connect to \the [src]!") ``` ### Template (doT) diff --git a/nano/images/southern_cross_nanomap_z1.png b/nano/images/southern_cross_nanomap_z1.png new file mode 100644 index 0000000000..b367430200 Binary files /dev/null and b/nano/images/southern_cross_nanomap_z1.png differ diff --git a/nano/images/southern_cross_nanomap_z10.png b/nano/images/southern_cross_nanomap_z10.png new file mode 100644 index 0000000000..b9645bb74b Binary files /dev/null and b/nano/images/southern_cross_nanomap_z10.png differ diff --git a/nano/images/southern_cross_nanomap_z2.png b/nano/images/southern_cross_nanomap_z2.png new file mode 100644 index 0000000000..1f4830a884 Binary files /dev/null and b/nano/images/southern_cross_nanomap_z2.png differ diff --git a/nano/images/southern_cross_nanomap_z3.png b/nano/images/southern_cross_nanomap_z3.png new file mode 100644 index 0000000000..6c9d9b5a61 Binary files /dev/null and b/nano/images/southern_cross_nanomap_z3.png differ diff --git a/nano/images/southern_cross_nanomap_z5.png b/nano/images/southern_cross_nanomap_z5.png new file mode 100644 index 0000000000..b89543e9de Binary files /dev/null and b/nano/images/southern_cross_nanomap_z5.png differ diff --git a/nano/images/southern_cross_nanomap_z6.png b/nano/images/southern_cross_nanomap_z6.png new file mode 100644 index 0000000000..b8fb0ebfc1 Binary files /dev/null and b/nano/images/southern_cross_nanomap_z6.png differ diff --git a/nano/images/tether_nanomap_z1.png b/nano/images/tether_nanomap_z1.png new file mode 100644 index 0000000000..bd575097c3 Binary files /dev/null and b/nano/images/tether_nanomap_z1.png differ diff --git a/nano/images/tether_nanomap_z10.png b/nano/images/tether_nanomap_z10.png new file mode 100644 index 0000000000..c12164d92e Binary files /dev/null and b/nano/images/tether_nanomap_z10.png differ diff --git a/nano/images/tether_nanomap_z13.png b/nano/images/tether_nanomap_z13.png new file mode 100644 index 0000000000..6f87d9911f Binary files /dev/null and b/nano/images/tether_nanomap_z13.png differ diff --git a/nano/images/tether_nanomap_z14.png b/nano/images/tether_nanomap_z14.png new file mode 100644 index 0000000000..84d106a5ac Binary files /dev/null and b/nano/images/tether_nanomap_z14.png differ diff --git a/nano/images/tether_nanomap_z2.png b/nano/images/tether_nanomap_z2.png new file mode 100644 index 0000000000..5ccd461808 Binary files /dev/null and b/nano/images/tether_nanomap_z2.png differ diff --git a/nano/images/tether_nanomap_z3.png b/nano/images/tether_nanomap_z3.png new file mode 100644 index 0000000000..0761eed916 Binary files /dev/null and b/nano/images/tether_nanomap_z3.png differ diff --git a/nano/images/tether_nanomap_z4.png b/nano/images/tether_nanomap_z4.png new file mode 100644 index 0000000000..f6465c7c13 Binary files /dev/null and b/nano/images/tether_nanomap_z4.png differ diff --git a/nano/images/tether_nanomap_z5.png b/nano/images/tether_nanomap_z5.png new file mode 100644 index 0000000000..d8aece303d Binary files /dev/null and b/nano/images/tether_nanomap_z5.png differ diff --git a/nano/images/tether_nanomap_z6.png b/nano/images/tether_nanomap_z6.png new file mode 100644 index 0000000000..7fb5111527 Binary files /dev/null and b/nano/images/tether_nanomap_z6.png differ diff --git a/nano/images/tether_nanomap_z7.png b/nano/images/tether_nanomap_z7.png new file mode 100644 index 0000000000..7645d78d09 Binary files /dev/null and b/nano/images/tether_nanomap_z7.png differ diff --git a/nano/images/tether_nanomap_z8.png b/nano/images/tether_nanomap_z8.png new file mode 100644 index 0000000000..c973b2b784 Binary files /dev/null and b/nano/images/tether_nanomap_z8.png differ diff --git a/nano/images/tether_nanomap_z9.png b/nano/images/tether_nanomap_z9.png new file mode 100644 index 0000000000..bff91820dd Binary files /dev/null and b/nano/images/tether_nanomap_z9.png differ diff --git a/sound/machines/fryer/deep_fryer_1.ogg b/sound/machines/fryer/deep_fryer_1.ogg index 7b726c9de6..ee7a748667 100644 Binary files a/sound/machines/fryer/deep_fryer_1.ogg and b/sound/machines/fryer/deep_fryer_1.ogg differ diff --git a/sound/machines/fryer/deep_fryer_2.ogg b/sound/machines/fryer/deep_fryer_2.ogg index 4bd4be7d77..b423f44229 100644 Binary files a/sound/machines/fryer/deep_fryer_2.ogg and b/sound/machines/fryer/deep_fryer_2.ogg differ diff --git a/sound/machines/fryer/deep_fryer_emerge.ogg b/sound/machines/fryer/deep_fryer_emerge.ogg index a803dd4c67..4fb29de1c1 100644 Binary files a/sound/machines/fryer/deep_fryer_emerge.ogg and b/sound/machines/fryer/deep_fryer_emerge.ogg differ diff --git a/sound/machines/fryer/deep_fryer_immerse.ogg b/sound/machines/fryer/deep_fryer_immerse.ogg index 3c06b865ca..76960ec664 100644 Binary files a/sound/machines/fryer/deep_fryer_immerse.ogg and b/sound/machines/fryer/deep_fryer_immerse.ogg differ diff --git a/sound/machines/hatch_open.ogg b/sound/machines/hatch_open.ogg new file mode 100644 index 0000000000..142248416c Binary files /dev/null and b/sound/machines/hatch_open.ogg differ diff --git a/sound/machines/terminal_alert.ogg b/sound/machines/terminal_alert.ogg new file mode 100644 index 0000000000..a790c03ebd Binary files /dev/null and b/sound/machines/terminal_alert.ogg differ diff --git a/sound/machines/terminal_button01.ogg b/sound/machines/terminal_button01.ogg new file mode 100644 index 0000000000..88b10c8891 Binary files /dev/null and b/sound/machines/terminal_button01.ogg differ diff --git a/sound/machines/terminal_button02.ogg b/sound/machines/terminal_button02.ogg new file mode 100644 index 0000000000..8b30fd892e Binary files /dev/null and b/sound/machines/terminal_button02.ogg differ diff --git a/sound/machines/terminal_button03.ogg b/sound/machines/terminal_button03.ogg new file mode 100644 index 0000000000..7a00168cfc Binary files /dev/null and b/sound/machines/terminal_button03.ogg differ diff --git a/sound/machines/terminal_button04.ogg b/sound/machines/terminal_button04.ogg new file mode 100644 index 0000000000..c56b23919c Binary files /dev/null and b/sound/machines/terminal_button04.ogg differ diff --git a/sound/machines/terminal_button05.ogg b/sound/machines/terminal_button05.ogg new file mode 100644 index 0000000000..e660ecf154 Binary files /dev/null and b/sound/machines/terminal_button05.ogg differ diff --git a/sound/machines/terminal_button06.ogg b/sound/machines/terminal_button06.ogg new file mode 100644 index 0000000000..bef143ac52 Binary files /dev/null and b/sound/machines/terminal_button06.ogg differ diff --git a/sound/machines/terminal_button07.ogg b/sound/machines/terminal_button07.ogg new file mode 100644 index 0000000000..91a31a1156 Binary files /dev/null and b/sound/machines/terminal_button07.ogg differ diff --git a/sound/machines/terminal_button08.ogg b/sound/machines/terminal_button08.ogg new file mode 100644 index 0000000000..fc0131f5f4 Binary files /dev/null and b/sound/machines/terminal_button08.ogg differ diff --git a/sound/machines/terminal_insert_disc.ogg b/sound/machines/terminal_insert_disc.ogg new file mode 100644 index 0000000000..dd226c1ebd Binary files /dev/null and b/sound/machines/terminal_insert_disc.ogg differ diff --git a/sound/machines/terminal_off.ogg b/sound/machines/terminal_off.ogg new file mode 100644 index 0000000000..90da8d75da Binary files /dev/null and b/sound/machines/terminal_off.ogg differ diff --git a/sound/machines/terminal_on.ogg b/sound/machines/terminal_on.ogg new file mode 100644 index 0000000000..3c69d85de5 Binary files /dev/null and b/sound/machines/terminal_on.ogg differ diff --git a/sound/machines/terminal_prompt.ogg b/sound/machines/terminal_prompt.ogg new file mode 100644 index 0000000000..74de1c9a29 Binary files /dev/null and b/sound/machines/terminal_prompt.ogg differ diff --git a/sound/machines/terminal_prompt_confirm.ogg b/sound/machines/terminal_prompt_confirm.ogg new file mode 100644 index 0000000000..897fec28e9 Binary files /dev/null and b/sound/machines/terminal_prompt_confirm.ogg differ diff --git a/sound/machines/terminal_prompt_deny.ogg b/sound/machines/terminal_prompt_deny.ogg new file mode 100644 index 0000000000..fda065f0d4 Binary files /dev/null and b/sound/machines/terminal_prompt_deny.ogg differ diff --git a/sound/voice/gao.ogg b/sound/voice/gao.ogg new file mode 100644 index 0000000000..49d0a296c3 Binary files /dev/null and b/sound/voice/gao.ogg differ diff --git a/sound/voice/medbot/close.ogg b/sound/voice/medbot/close.ogg new file mode 100644 index 0000000000..9e0efcefd2 Binary files /dev/null and b/sound/voice/medbot/close.ogg differ diff --git a/sound/voice/medbot/dont_like.ogg b/sound/voice/medbot/dont_like.ogg new file mode 100644 index 0000000000..06fc84af2f Binary files /dev/null and b/sound/voice/medbot/dont_like.ogg differ diff --git a/sound/voice/medbot/forgive.ogg b/sound/voice/medbot/forgive.ogg new file mode 100644 index 0000000000..729eaa5c78 Binary files /dev/null and b/sound/voice/medbot/forgive.ogg differ diff --git a/sound/voice/medbot/fuck_you.ogg b/sound/voice/medbot/fuck_you.ogg new file mode 100644 index 0000000000..5eacff615f Binary files /dev/null and b/sound/voice/medbot/fuck_you.ogg differ diff --git a/sound/voice/medbot/hey_wait.ogg b/sound/voice/medbot/hey_wait.ogg new file mode 100644 index 0000000000..6c88b761ec Binary files /dev/null and b/sound/voice/medbot/hey_wait.ogg differ diff --git a/sound/voice/medbot/i_require_asst.ogg b/sound/voice/medbot/i_require_asst.ogg new file mode 100644 index 0000000000..18fabc630f Binary files /dev/null and b/sound/voice/medbot/i_require_asst.ogg differ diff --git a/sound/voice/medbot/i_trusted_you.ogg b/sound/voice/medbot/i_trusted_you.ogg new file mode 100644 index 0000000000..602baa2f67 Binary files /dev/null and b/sound/voice/medbot/i_trusted_you.ogg differ diff --git a/sound/voice/medbot/im_different.ogg b/sound/voice/medbot/im_different.ogg new file mode 100644 index 0000000000..42eb8564f1 Binary files /dev/null and b/sound/voice/medbot/im_different.ogg differ diff --git a/sound/voice/medbot/is_this_the_end.ogg b/sound/voice/medbot/is_this_the_end.ogg new file mode 100644 index 0000000000..a2e0e2330a Binary files /dev/null and b/sound/voice/medbot/is_this_the_end.ogg differ diff --git a/sound/voice/medbot/nooo.ogg b/sound/voice/medbot/nooo.ogg new file mode 100644 index 0000000000..102fd1fb04 Binary files /dev/null and b/sound/voice/medbot/nooo.ogg differ diff --git a/sound/voice/medbot/oh_fuck.ogg b/sound/voice/medbot/oh_fuck.ogg new file mode 100644 index 0000000000..95d21ef255 Binary files /dev/null and b/sound/voice/medbot/oh_fuck.ogg differ diff --git a/sound/voice/medbot/pain_is_real.ogg b/sound/voice/medbot/pain_is_real.ogg new file mode 100644 index 0000000000..9cfa3a71be Binary files /dev/null and b/sound/voice/medbot/pain_is_real.ogg differ diff --git a/sound/voice/medbot/please_dont.ogg b/sound/voice/medbot/please_dont.ogg new file mode 100644 index 0000000000..a77ee09cb4 Binary files /dev/null and b/sound/voice/medbot/please_dont.ogg differ diff --git a/sound/voice/medbot/please_im_scared.ogg b/sound/voice/medbot/please_im_scared.ogg new file mode 100644 index 0000000000..7bd53b39c8 Binary files /dev/null and b/sound/voice/medbot/please_im_scared.ogg differ diff --git a/sound/voice/medbot/please_put_me_back.ogg b/sound/voice/medbot/please_put_me_back.ogg new file mode 100644 index 0000000000..84700fbdd5 Binary files /dev/null and b/sound/voice/medbot/please_put_me_back.ogg differ diff --git a/sound/voice/medbot/reported.ogg b/sound/voice/medbot/reported.ogg new file mode 100644 index 0000000000..d5469c19ce Binary files /dev/null and b/sound/voice/medbot/reported.ogg differ diff --git a/sound/voice/medbot/shindemashou.ogg b/sound/voice/medbot/shindemashou.ogg new file mode 100644 index 0000000000..1ee2858eaf Binary files /dev/null and b/sound/voice/medbot/shindemashou.ogg differ diff --git a/sound/voice/medbot/thank_you.ogg b/sound/voice/medbot/thank_you.ogg new file mode 100644 index 0000000000..3fabe7d4a6 Binary files /dev/null and b/sound/voice/medbot/thank_you.ogg differ diff --git a/sound/voice/medbot/turn_off.ogg b/sound/voice/medbot/turn_off.ogg new file mode 100644 index 0000000000..87a4d6bdd0 Binary files /dev/null and b/sound/voice/medbot/turn_off.ogg differ diff --git a/sound/voice/medbot/why.ogg b/sound/voice/medbot/why.ogg new file mode 100644 index 0000000000..415020b89b Binary files /dev/null and b/sound/voice/medbot/why.ogg differ diff --git a/sound/voice/medbot/youre_good.ogg b/sound/voice/medbot/youre_good.ogg new file mode 100644 index 0000000000..62c325f834 Binary files /dev/null and b/sound/voice/medbot/youre_good.ogg differ diff --git a/tgui/.editorconfig b/tgui/.editorconfig new file mode 100644 index 0000000000..33092d4928 --- /dev/null +++ b/tgui/.editorconfig @@ -0,0 +1,13 @@ +# http://editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +max_line_length = 80 diff --git a/tgui/.eslintignore b/tgui/.eslintignore new file mode 100644 index 0000000000..010416b9e8 --- /dev/null +++ b/tgui/.eslintignore @@ -0,0 +1,6 @@ +/**/node_modules +/**/*.bundle.* +/**/*.chunk.* +/**/*.hot-update.* +/packages/inferno/** +/packages/tgui/public/shim-*.js diff --git a/tgui/.eslintrc-harder.yml b/tgui/.eslintrc-harder.yml new file mode 100644 index 0000000000..eb06f5b33d --- /dev/null +++ b/tgui/.eslintrc-harder.yml @@ -0,0 +1,14 @@ +rules: + ## Enforce a maximum cyclomatic complexity allowed in a program + complexity: [error, { max: 25 }] + ## Enforce consistent brace style for blocks + brace-style: [error, stroustrup, { allowSingleLine: false }] + ## Enforce the consistent use of either backticks, double, or single quotes + quotes: [error, single, { + avoidEscape: true, + allowTemplateLiterals: true, + }] + react/jsx-closing-bracket-location: [error, { + selfClosing: after-props, + nonEmpty: after-props, + }] diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml new file mode 100644 index 0000000000..9fd4db9fd2 --- /dev/null +++ b/tgui/.eslintrc.yml @@ -0,0 +1,757 @@ +parser: babel-eslint +parserOptions: + ecmaVersion: 2019 + sourceType: module + ecmaFeatures: + jsx: true +env: + es6: true + browser: true + node: true +globals: + Byond: readonly +plugins: + - react +settings: + react: + version: '16.10' +rules: + + ## Possible Errors + ## ---------------------------------------- + + ## Enforce “for†loop update clause moving the counter in the right + ## direction. + # for-direction: error + ## Enforce return statements in getters + # getter-return: error + ## Disallow using an async function as a Promise executor + no-async-promise-executor: error + ## Disallow await inside of loops + # no-await-in-loop: error + ## Disallow comparing against -0 + # no-compare-neg-zero: error + ## Disallow assignment operators in conditional expressions + no-cond-assign: error + ## Disallow the use of console + # no-console: error + ## Disallow constant expressions in conditions + # no-constant-condition: error + ## Disallow control characters in regular expressions + # no-control-regex: error + ## Disallow the use of debugger + no-debugger: error + ## Disallow duplicate arguments in function definitions + no-dupe-args: error + ## Disallow duplicate keys in object literals + no-dupe-keys: error + ## Disallow duplicate case labels + no-duplicate-case: error + ## Disallow empty block statements + # no-empty: error + ## Disallow empty character classes in regular expressions + no-empty-character-class: error + ## Disallow reassigning exceptions in catch clauses + no-ex-assign: error + ## Disallow unnecessary boolean casts + no-extra-boolean-cast: error + ## Disallow unnecessary parentheses + # no-extra-parens: warn + ## Disallow unnecessary semicolons + no-extra-semi: error + ## Disallow reassigning function declarations + no-func-assign: error + ## Disallow assigning to imported bindings + no-import-assign: error + ## Disallow variable or function declarations in nested blocks + no-inner-declarations: error + ## Disallow invalid regular expression strings in RegExp constructors + no-invalid-regexp: error + ## Disallow irregular whitespace + no-irregular-whitespace: error + ## Disallow characters which are made with multiple code points in character + ## class syntax + no-misleading-character-class: error + ## Disallow calling global object properties as functions + no-obj-calls: error + ## Disallow calling some Object.prototype methods directly on objects + no-prototype-builtins: error + ## Disallow multiple spaces in regular expressions + no-regex-spaces: error + ## Disallow sparse arrays + no-sparse-arrays: error + ## Disallow template literal placeholder syntax in regular strings + no-template-curly-in-string: error + ## Disallow confusing multiline expressions + no-unexpected-multiline: error + ## Disallow unreachable code after return, throw, continue, and break + ## statements + # no-unreachable: warn + ## Disallow control flow statements in finally blocks + no-unsafe-finally: error + ## Disallow negating the left operand of relational operators + no-unsafe-negation: error + ## Disallow assignments that can lead to race conditions due to usage of + ## await or yield + # require-atomic-updates: error + ## Require calls to isNaN() when checking for NaN + use-isnan: error + ## Enforce comparing typeof expressions against valid strings + valid-typeof: error + + ## Best practices + ## ---------------------------------------- + ## Enforce getter and setter pairs in objects and classes + # accessor-pairs: error + ## Enforce return statements in callbacks of array methods + # array-callback-return: error + ## Enforce the use of variables within the scope they are defined + # block-scoped-var: error + ## Enforce that class methods utilize this + # class-methods-use-this: error + ## Enforce a maximum cyclomatic complexity allowed in a program + complexity: [error, { max: 50 }] + ## Require return statements to either always or never specify values + # consistent-return: error + ## Enforce consistent brace style for all control statements + curly: [error, all] + ## Require default cases in switch statements + # default-case: error + ## Enforce default parameters to be last + # default-param-last: error + ## Enforce consistent newlines before and after dots + dot-location: [error, property] + ## Enforce dot notation whenever possible + # dot-notation: error + ## Require the use of === and !== + eqeqeq: [error, always] + ## Require for-in loops to include an if statement + # guard-for-in: error + ## Enforce a maximum number of classes per file + # max-classes-per-file: error + ## Disallow the use of alert, confirm, and prompt + # no-alert: error + ## Disallow the use of arguments.caller or arguments.callee + # no-caller: error + ## Disallow lexical declarations in case clauses + no-case-declarations: error + ## Disallow division operators explicitly at the beginning of regular + ## expressions + # no-div-regex: error + ## Disallow else blocks after return statements in if statements + # no-else-return: error + ## Disallow empty functions + # no-empty-function: error + ## Disallow empty destructuring patterns + no-empty-pattern: error + ## Disallow null comparisons without type-checking operators + # no-eq-null: error + ## Disallow the use of eval() + # no-eval: error + ## Disallow extending native types + # no-extend-native: error + ## Disallow unnecessary calls to .bind() + # no-extra-bind: error + ## Disallow unnecessary labels + # no-extra-label: error + ## Disallow fallthrough of case statements + no-fallthrough: error + ## Disallow leading or trailing decimal points in numeric literals + # no-floating-decimal: error + ## Disallow assignments to native objects or read-only global variables + no-global-assign: error + ## Disallow shorthand type conversions + # no-implicit-coercion: error + ## Disallow variable and function declarations in the global scope + # no-implicit-globals: error + ## Disallow the use of eval()-like methods + # no-implied-eval: error + ## Disallow this keywords outside of classes or class-like objects + # no-invalid-this: error + ## Disallow the use of the __iterator__ property + # no-iterator: error + ## Disallow labeled statements + # no-labels: error + ## Disallow unnecessary nested blocks + # no-lone-blocks: error + ## Disallow function declarations that contain unsafe references inside + ## loop statements + # no-loop-func: error + ## Disallow magic numbers + # no-magic-numbers: error + ## Disallow multiple spaces + no-multi-spaces: warn + ## Disallow multiline strings + # no-multi-str: error + ## Disallow new operators outside of assignments or comparisons + # no-new: error + ## Disallow new operators with the Function object + # no-new-func: error + ## Disallow new operators with the String, Number, and Boolean objects + # no-new-wrappers: error + ## Disallow octal literals + no-octal: error + ## Disallow octal escape sequences in string literals + no-octal-escape: error + ## Disallow reassigning function parameters + # no-param-reassign: error + ## Disallow the use of the __proto__ property + # no-proto: error + ## Disallow variable redeclaration + no-redeclare: error + ## Disallow certain properties on certain objects + # no-restricted-properties: error + ## Disallow assignment operators in return statements + no-return-assign: error + ## Disallow unnecessary return await + # no-return-await: error + ## Disallow javascript: urls + # no-script-url: error + ## Disallow assignments where both sides are exactly the same + no-self-assign: error + ## Disallow comparisons where both sides are exactly the same + # no-self-compare: error + ## Disallow comma operators + no-sequences: error + ## Disallow throwing literals as exceptions + # no-throw-literal: error + ## Disallow unmodified loop conditions + # no-unmodified-loop-condition: error + ## Disallow unused expressions + # no-unused-expressions: error + ## Disallow unused labels + no-unused-labels: warn + ## Disallow unnecessary calls to .call() and .apply() + # no-useless-call: error + ## Disallow unnecessary catch clauses + # no-useless-catch: error + ## Disallow unnecessary concatenation of literals or template literals + # no-useless-concat: error + ## Disallow unnecessary escape characters + no-useless-escape: warn + ## Disallow redundant return statements + # no-useless-return: error + ## Disallow void operators + # no-void: error + ## Disallow specified warning terms in comments + # no-warning-comments: error + ## Disallow with statements + no-with: error + ## Enforce using named capture group in regular expression + # prefer-named-capture-group: error + ## Require using Error objects as Promise rejection reasons + # prefer-promise-reject-errors: error + ## Disallow use of the RegExp constructor in favor of regular expression + ## literals + # prefer-regex-literals: error + ## Enforce the consistent use of the radix argument when using parseInt() + radix: error + ## Disallow async functions which have no await expression + # require-await: error + ## Enforce the use of u flag on RegExp + # require-unicode-regexp: error + ## Require var declarations be placed at the top of their containing scope + # vars-on-top: error + ## Require parentheses around immediate function invocations + # wrap-iife: error + ## Require or disallow “Yoda†conditions + # yoda: error + + ## Strict mode + ## ---------------------------------------- + ## Require or disallow strict mode directives + strict: error + + ## Variables + ## ---------------------------------------- + ## Require or disallow initialization in variable declarations + # init-declarations: error + ## Disallow deleting variables + no-delete-var: error + ## Disallow labels that share a name with a variable + # no-label-var: error + ## Disallow specified global variables + # no-restricted-globals: error + ## Disallow variable declarations from shadowing variables declared in + ## the outer scope + # no-shadow: error + ## Disallow identifiers from shadowing restricted names + no-shadow-restricted-names: error + ## Disallow the use of undeclared variables unless mentioned + ## in /*global*/ comments + no-undef: error + ## Disallow initializing variables to undefined + no-undef-init: error + ## Disallow the use of undefined as an identifier + # no-undefined: error + ## Disallow unused variables + # no-unused-vars: error + ## Disallow the use of variables before they are defined + # no-use-before-define: error + + ## Code style + ## ---------------------------------------- + ## Enforce linebreaks after opening and before closing array brackets + array-bracket-newline: [error, consistent] + ## Enforce consistent spacing inside array brackets + array-bracket-spacing: [error, never] + ## Enforce line breaks after each array element + # array-element-newline: error + ## Disallow or enforce spaces inside of blocks after opening block and + ## before closing block + block-spacing: [error, always] + ## Enforce consistent brace style for blocks + # brace-style: [error, stroustrup, { allowSingleLine: false }] + ## Enforce camelcase naming convention + # camelcase: error + ## Enforce or disallow capitalization of the first letter of a comment + # capitalized-comments: error + ## Require or disallow trailing commas + comma-dangle: [error, { + arrays: always-multiline, + objects: always-multiline, + imports: always-multiline, + exports: always-multiline, + functions: only-multiline, ## Optional on functions + }] + ## Enforce consistent spacing before and after commas + comma-spacing: [error, { before: false, after: true }] + ## Enforce consistent comma style + comma-style: [error, last] + ## Enforce consistent spacing inside computed property brackets + computed-property-spacing: [error, never] + ## Enforce consistent naming when capturing the current execution context + # consistent-this: error + ## Require or disallow newline at the end of files + # eol-last: error + ## Require or disallow spacing between function identifiers and their + ## invocations + func-call-spacing: [error, never] + ## Require function names to match the name of the variable or property + ## to which they are assigned + # func-name-matching: error + ## Require or disallow named function expressions + # func-names: error + ## Enforce the consistent use of either function declarations or expressions + func-style: [error, expression] + ## Enforce line breaks between arguments of a function call + # function-call-argument-newline: error + ## Enforce consistent line breaks inside function parentheses + ## NOTE: This rule does not honor a newline on opening paren. + # function-paren-newline: [error, never] + ## Disallow specified identifiers + # id-blacklist: error + ## Enforce minimum and maximum identifier lengths + # id-length: error + ## Require identifiers to match a specified regular expression + # id-match: error + ## Enforce the location of arrow function bodies + # implicit-arrow-linebreak: error + ## Enforce consistent indentation + indent: [error, 2, { SwitchCase: 1 }] + ## Enforce the consistent use of either double or single quotes in JSX + ## attributes + jsx-quotes: [error, prefer-double] + ## Enforce consistent spacing between keys and values in object literal + ## properties + key-spacing: [error, { beforeColon: false, afterColon: true }] + ## Enforce consistent spacing before and after keywords + keyword-spacing: [error, { before: true, after: true }] + ## Enforce position of line comments + # line-comment-position: error + ## Enforce consistent linebreak style + # linebreak-style: error + ## Require empty lines around comments + # lines-around-comment: error + ## Require or disallow an empty line between class members + # lines-between-class-members: error + ## Enforce a maximum depth that blocks can be nested + # max-depth: error + ## Enforce a maximum line length + max-len: [error, { + code: 80, + ## Ignore imports + ignorePattern: '^(import\s.+\sfrom\s|.*require\()', + ignoreUrls: true, + ignoreRegExpLiterals: true, + }] + ## Enforce a maximum number of lines per file + # max-lines: error + ## Enforce a maximum number of line of code in a function + # max-lines-per-function: error + ## Enforce a maximum depth that callbacks can be nested + # max-nested-callbacks: error + ## Enforce a maximum number of parameters in function definitions + # max-params: error + ## Enforce a maximum number of statements allowed in function blocks + # max-statements: error + ## Enforce a maximum number of statements allowed per line + # max-statements-per-line: error + ## Enforce a particular style for multiline comments + # multiline-comment-style: error + ## Enforce newlines between operands of ternary expressions + # multiline-ternary: [error, always-multiline] + ## Require constructor names to begin with a capital letter + # new-cap: error + ## Enforce or disallow parentheses when invoking a constructor with no + ## arguments + # new-parens: error + ## Require a newline after each call in a method chain + # newline-per-chained-call: error + ## Disallow Array constructors + # no-array-constructor: error + ## Disallow bitwise operators + # no-bitwise: error + ## Disallow continue statements + # no-continue: error + ## Disallow inline comments after code + # no-inline-comments: error + ## Disallow if statements as the only statement in else blocks + # no-lonely-if: error + ## Disallow mixed binary operators + # no-mixed-operators: error + ## Disallow mixed spaces and tabs for indentation + no-mixed-spaces-and-tabs: error + ## Disallow use of chained assignment expressions + # no-multi-assign: error + ## Disallow multiple empty lines + # no-multiple-empty-lines: error + ## Disallow negated conditions + # no-negated-condition: error + ## Disallow nested ternary expressions + # no-nested-ternary: error + ## Disallow Object constructors + # no-new-object: error + ## Disallow the unary operators ++ and -- + # no-plusplus: error + ## Disallow specified syntax + # no-restricted-syntax: error + ## Disallow all tabs + # no-tabs: error + ## Disallow ternary operators + # no-ternary: error + ## Disallow trailing whitespace at the end of lines + # no-trailing-spaces: error + ## Disallow dangling underscores in identifiers + # no-underscore-dangle: error + ## Disallow ternary operators when simpler alternatives exist + # no-unneeded-ternary: error + ## Disallow whitespace before properties + no-whitespace-before-property: error + ## Enforce the location of single-line statements + # nonblock-statement-body-position: error + ## Enforce consistent line breaks inside braces + # object-curly-newline: [error, { multiline: true }] + ## Enforce consistent spacing inside braces + object-curly-spacing: [error, always] + ## Enforce placing object properties on separate lines + # object-property-newline: error + ## Enforce variables to be declared either together or separately in + ## functions + # one-var: error + ## Require or disallow newlines around variable declarations + # one-var-declaration-per-line: error + ## Require or disallow assignment operator shorthand where possible + # operator-assignment: error + ## Enforce consistent linebreak style for operators + operator-linebreak: [error, before] + ## Require or disallow padding within blocks + # padded-blocks: error + ## Require or disallow padding lines between statements + # padding-line-between-statements: error + ## Disallow using Object.assign with an object literal as the first + ## argument and prefer the use of object spread instead. + # prefer-object-spread: error + ## Require quotes around object literal property names + # quote-props: error + ## Enforce the consistent use of either backticks, double, or single quotes + # quotes: [error, single] + ## Require or disallow semicolons instead of ASI + semi: error + ## Enforce consistent spacing before and after semicolons + semi-spacing: [error, { before: false, after: true }] + ## Enforce location of semicolons + semi-style: [error, last] + ## Require object keys to be sorted + # sort-keys: error + ## Require variables within the same declaration block to be sorted + # sort-vars: error + ## Enforce consistent spacing before blocks + space-before-blocks: [error, always] + ## Enforce consistent spacing before function definition opening parenthesis + space-before-function-paren: [error, { + anonymous: always, + named: never, + asyncArrow: always, + }] + ## Enforce consistent spacing inside parentheses + space-in-parens: [error, never] + ## Require spacing around infix operators + # space-infix-ops: error + ## Enforce consistent spacing before or after unary operators + # space-unary-ops: error + ## Enforce consistent spacing after the // or /* in a comment + spaced-comment: [error, always] + ## Enforce spacing around colons of switch statements + switch-colon-spacing: [error, { before: false, after: true }] + ## Require or disallow spacing between template tags and their literals + template-tag-spacing: [error, never] + ## Require or disallow Unicode byte order mark (BOM) + # unicode-bom: [error, never] + ## Require parenthesis around regex literals + # wrap-regex: error + + ## ES6 + ## ---------------------------------------- + ## Require braces around arrow function bodies + # arrow-body-style: error + ## Require parentheses around arrow function arguments + arrow-parens: [error, as-needed] + ## Enforce consistent spacing before and after the arrow in arrow functions + arrow-spacing: [error, { before: true, after: true }] + ## Require super() calls in constructors + # constructor-super: error + ## Enforce consistent spacing around * operators in generator functions + generator-star-spacing: [error, { before: false, after: true }] + ## Disallow reassigning class members + no-class-assign: error + ## Disallow arrow functions where they could be confused with comparisons + # no-confusing-arrow: error + ## Disallow reassigning const variables + no-const-assign: error + ## Disallow duplicate class members + no-dupe-class-members: error + ## Disallow duplicate module imports + # no-duplicate-imports: error + ## Disallow new operators with the Symbol object + no-new-symbol: error + ## Disallow specified modules when loaded by import + # no-restricted-imports: error + ## Disallow this/super before calling super() in constructors + no-this-before-super: error + ## Disallow unnecessary computed property keys in object literals + # no-useless-computed-key: error + ## Disallow unnecessary constructors + # no-useless-constructor: error + ## Disallow renaming import, export, and destructured assignments to the + ## same name + # no-useless-rename: error + ## Require let or const instead of var + no-var: error + ## Require or disallow method and property shorthand syntax for object + ## literals + # object-shorthand: error + ## Require using arrow functions for callbacks + prefer-arrow-callback: error + ## Require const declarations for variables that are never reassigned after + ## declared + # prefer-const: error + ## Require destructuring from arrays and/or objects + # prefer-destructuring: error + ## Disallow parseInt() and Number.parseInt() in favor of binary, octal, and + ## hexadecimal literals + # prefer-numeric-literals: error + ## Require rest parameters instead of arguments + # prefer-rest-params: error + ## Require spread operators instead of .apply() + # prefer-spread: error + ## Require template literals instead of string concatenation + # prefer-template: error + ## Require generator functions to contain yield + # require-yield: error + ## Enforce spacing between rest and spread operators and their expressions + # rest-spread-spacing: error + ## Enforce sorted import declarations within modules + # sort-imports: error + ## Require symbol descriptions + # symbol-description: error + ## Require or disallow spacing around embedded expressions of template + ## strings + # template-curly-spacing: error + ## Require or disallow spacing around the * in yield* expressions + yield-star-spacing: [error, { before: false, after: true }] + + ## React + ## ---------------------------------------- + ## Enforces consistent naming for boolean props + react/boolean-prop-naming: error + ## Forbid "button" element without an explicit "type" attribute + react/button-has-type: error + ## Prevent extraneous defaultProps on components + react/default-props-match-prop-types: error + ## Rule enforces consistent usage of destructuring assignment in component + # react/destructuring-assignment: [error, always, { ignoreClassFields: true }] + ## Prevent missing displayName in a React component definition + react/display-name: error + ## Forbid certain props on Components + # react/forbid-component-props: error + ## Forbid certain props on DOM Nodes + # react/forbid-dom-props: error + ## Forbid certain elements + # react/forbid-elements: error + ## Forbid certain propTypes + # react/forbid-prop-types: error + ## Forbid foreign propTypes + # react/forbid-foreign-prop-types: error + ## Prevent using this.state inside this.setState + react/no-access-state-in-setstate: error + ## Prevent using Array index in key props + # react/no-array-index-key: error + ## Prevent passing children as props + react/no-children-prop: error + ## Prevent usage of dangerous JSX properties + react/no-danger: error + ## Prevent problem with children and props.dangerouslySetInnerHTML + react/no-danger-with-children: error + ## Prevent usage of deprecated methods, including component lifecycle + ## methods + react/no-deprecated: error + ## Prevent usage of setState in componentDidMount + react/no-did-mount-set-state: error + ## Prevent usage of setState in componentDidUpdate + react/no-did-update-set-state: error + ## Prevent direct mutation of this.state + react/no-direct-mutation-state: error + ## Prevent usage of findDOMNode + react/no-find-dom-node: error + ## Prevent usage of isMounted + react/no-is-mounted: error + ## Prevent multiple component definition per file + # react/no-multi-comp: error + ## Prevent usage of shouldComponentUpdate when extending React.PureComponent + react/no-redundant-should-component-update: error + ## Prevent usage of the return value of React.render + react/no-render-return-value: error + ## Prevent usage of setState + # react/no-set-state: error + ## Prevent common casing typos + react/no-typos: error + ## Prevent using string references in ref attribute. + react/no-string-refs: error + ## Prevent using this in stateless functional components + react/no-this-in-sfc: error + ## Prevent invalid characters from appearing in markup + react/no-unescaped-entities: error + ## Prevent usage of unknown DOM property (fixable) + # react/no-unknown-property: error + ## Prevent usage of unsafe lifecycle methods + react/no-unsafe: error + ## Prevent definitions of unused prop types + react/no-unused-prop-types: error + ## Prevent definitions of unused state properties + react/no-unused-state: error + ## Prevent usage of setState in componentWillUpdate + react/no-will-update-set-state: error + ## Enforce ES5 or ES6 class for React Components + react/prefer-es6-class: error + ## Enforce that props are read-only + react/prefer-read-only-props: error + ## Enforce stateless React Components to be written as a pure function + react/prefer-stateless-function: error + ## Prevent missing props validation in a React component definition + # react/prop-types: error + ## Prevent missing React when using JSX + # react/react-in-jsx-scope: error + ## Enforce a defaultProps definition for every prop that is not a required + ## prop + # react/require-default-props: error + ## Enforce React components to have a shouldComponentUpdate method + # react/require-optimization: error + ## Enforce ES5 or ES6 class for returning value in render function + react/require-render-return: error + ## Prevent extra closing tags for components without children (fixable) + react/self-closing-comp: error + ## Enforce component methods order (fixable) + # react/sort-comp: error + ## Enforce propTypes declarations alphabetical sorting + # react/sort-prop-types: error + ## Enforce the state initialization style to be either in a constructor or + ## with a class property + react/state-in-constructor: error + ## Enforces where React component static properties should be positioned. + # react/static-property-placement: error + ## Enforce style prop value being an object + react/style-prop-object: error + ## Prevent void DOM elements (e.g. ,
) from receiving children + react/void-dom-elements-no-children: error + + ## JSX-specific rules + ## ---------------------------------------- + ## Enforce boolean attributes notation in JSX (fixable) + react/jsx-boolean-value: error + ## Enforce or disallow spaces inside of curly braces in JSX attributes and + ## expressions. + # react/jsx-child-element-spacing: error + ## Validate closing bracket location in JSX (fixable) + react/jsx-closing-bracket-location: [error, { + ## NOTE: Not really sure about enforcing this one + selfClosing: false, + nonEmpty: after-props, + }] + ## Validate closing tag location in JSX (fixable) + react/jsx-closing-tag-location: error + ## Enforce or disallow newlines inside of curly braces in JSX attributes and + ## expressions (fixable) + react/jsx-curly-newline: error + ## Enforce or disallow spaces inside of curly braces in JSX attributes and + ## expressions (fixable) + react/jsx-curly-spacing: error + ## Enforce or disallow spaces around equal signs in JSX attributes (fixable) + react/jsx-equals-spacing: error + ## Restrict file extensions that may contain JSX + # react/jsx-filename-extension: error + ## Enforce position of the first prop in JSX (fixable) + # react/jsx-first-prop-new-line: error + ## Enforce event handler naming conventions in JSX + react/jsx-handler-names: error + ## Validate JSX indentation (fixable) + react/jsx-indent: [error, 2, { + checkAttributes: true, + }] + ## Validate props indentation in JSX (fixable) + react/jsx-indent-props: [error, 2] + ## Validate JSX has key prop when in array or iterator + react/jsx-key: error + ## Validate JSX maximum depth + react/jsx-max-depth: [error, { max: 10 }] ## Generous + ## Limit maximum of props on a single line in JSX (fixable) + # react/jsx-max-props-per-line: error + ## Prevent usage of .bind() and arrow functions in JSX props + # react/jsx-no-bind: error + ## Prevent comments from being inserted as text nodes + react/jsx-no-comment-textnodes: error + ## Prevent duplicate props in JSX + react/jsx-no-duplicate-props: error + ## Prevent usage of unwrapped JSX strings + # react/jsx-no-literals: error + ## Prevent usage of unsafe target='_blank' + react/jsx-no-target-blank: error + ## Disallow undeclared variables in JSX + react/jsx-no-undef: error + ## Disallow unnecessary fragments (fixable) + react/jsx-no-useless-fragment: error + ## Limit to one expression per line in JSX + # react/jsx-one-expression-per-line: error + ## Enforce curly braces or disallow unnecessary curly braces in JSX + # react/jsx-curly-brace-presence: error + ## Enforce shorthand or standard form for React fragments + react/jsx-fragments: error + ## Enforce PascalCase for user-defined JSX components + react/jsx-pascal-case: error + ## Disallow multiple spaces between inline JSX props (fixable) + react/jsx-props-no-multi-spaces: error + ## Disallow JSX props spreading + # react/jsx-props-no-spreading: error + ## Enforce default props alphabetical sorting + # react/jsx-sort-default-props: error + ## Enforce props alphabetical sorting (fixable) + # react/jsx-sort-props: error + ## Validate whitespace in and around the JSX opening and closing brackets + ## (fixable) + react/jsx-tag-spacing: error + ## Prevent React to be incorrectly marked as unused + react/jsx-uses-react: error + ## Prevent variables used in JSX to be incorrectly marked as unused + react/jsx-uses-vars: error + ## Prevent missing parentheses around multilines JSX (fixable) + react/jsx-wrap-multilines: error diff --git a/tgui/.gitattributes b/tgui/.gitattributes new file mode 100644 index 0000000000..9382416e69 --- /dev/null +++ b/tgui/.gitattributes @@ -0,0 +1,19 @@ +* text=auto + +## Enforce text mode and LF line breaks +*.js text eol=lf +*.jsx text eol=lf +*.ts text eol=lf +*.tsx text eol=lf +*.css text eol=lf +*.scss text eol=lf +*.html text eol=lf +*.json text eol=lf +*.yml text eol=lf +*.md text eol=lf +*.bat text eol=lf +yarn.lock text eol=lf +bin/tgui text eol=lf + +## Treat bundles as binary and ignore them during conflicts +*.bundle.* binary merge=tgui-merge-bundle diff --git a/tgui/.gitignore b/tgui/.gitignore new file mode 100644 index 0000000000..416ca3768d --- /dev/null +++ b/tgui/.gitignore @@ -0,0 +1,7 @@ +node_modules +*.log +package-lock.json + +/packages/tgui/public/.tmp/**/* +/packages/tgui/public/**/*.hot-update.* +/packages/tgui/public/**/*.map diff --git a/tgui/README.md b/tgui/README.md new file mode 100644 index 0000000000..7ae1bddb6a --- /dev/null +++ b/tgui/README.md @@ -0,0 +1,188 @@ +# tgui + +## Introduction + +tgui is a robust user interface framework of /tg/station. + +tgui is very different from most UIs you will encounter in BYOND programming. +It is heavily reliant on Javascript and web technologies as opposed to DM. +If you are familiar with NanoUI (a library which can be found on almost +every other SS13 codebase), tgui should be fairly easy to pick up. + +## Learn tgui + +People come to tgui from different backgrounds and with different +learning styles. Whether you prefer a more theoretical or a practical +approach, we hope you’ll find this section helpful. + +### Practical Tutorial + +If you are completely new to frontend and prefer to **learn by doing**, +start with our [practical tutorial](docs/tutorial-and-examples.md). + +### Guides + +This project uses **Inferno** - a very fast UI rendering engine with a similar +API to React. Take your time to read these guides: + +- [React guide](https://reactjs.org/docs/hello-world.html) +- [Inferno documentation](https://infernojs.org/docs/guides/components) - +highlights differences with React. + +If you were already familiar with an older, Ractive-based tgui, and want +to translate concepts between old and new tgui, read this +[interface conversion guide](docs/converting-old-tgui-interfaces.md). + +## Pre-requisites + +You will need these programs to start developing in tgui: + +- [Node v12.13+](https://nodejs.org/en/download/) +- [Yarn v1.19+](https://yarnpkg.com/en/docs/install) +- [MSys2](https://www.msys2.org/) (optional) + +> MSys2 closely replicates a unix-like environment which is necessary for +> the `bin/tgui` script to run. It comes with a robust "mintty" terminal +> emulator which is better than any standard Windows shell, it supports +> "git" out of the box (almost like Git for Windows, but better), has +> a "pacman" package manager, and you can install a text editor like "vim" +> for a full boomer experience. + +## Usage + +**For MSys2, Git Bash, WSL, Linux or macOS users:** + +First and foremost, change your directory to `tgui`. + +Run `bin/tgui --install-git-hooks` (optional) to install merge drivers +which will assist you in conflict resolution when rebasing your branches. + +Run one of the following: + +- `bin/tgui` - build the project in production mode. +- `bin/tgui --dev` - launch a development server. + - tgui development server provides you with incremental compilation, + hot module replacement and logging facilities in all running instances + of tgui. In short, this means that you will instantly see changes in the + game as you code it. Very useful, highly recommended. + - In order to use it, you should start the game server first, connect to it + and wait until the world has been properly loaded and you are no longer + in the lobby. Start tgui dev server, and once it has finished building, + press F5 on any tgui window. You'll know that it's hooked correctly if + you see a green bug icon in titlebar and data gets dumped to the console. +- `bin/tgui --dev --reload` - reload byond cache once. +- `bin/tgui --dev --debug` - run server with debug logging enabled. +- `bin/tgui --dev --no-hot` - disable hot module replacement (helps when +doing development on IE8). +- `bin/tgui --lint` - show problems with the code. +- `bin/tgui --lint --fix` - auto-fix problems with the code. +- `bin/tgui --analyze` - run a bundle analyzer. +- `bin/tgui --clean` - clean up project repo. +- `bin/tgui [webpack options]` - build the project with custom webpack +options. + +**For everyone else:** + +If you haven't opened the console already, you can do that by holding +Shift and right clicking on the `tgui` folder, then pressing +either `Open command window here` or `Open PowerShell window here`. + +Run `yarn install` to install npm dependencies, then one of the following: + +- `yarn run build` - build the project in production mode. +- `yarn run watch` - launch a development server. +- `yarn run lint` - show problems with the code. +- `yarn run lint --fix` - auto-fix problems with the code. +- `yarn run analyze` - run a bundle analyzer. + +We also got some batch files in store, for those who don't like fiddling +with the console: + +- `bin/tgui-build.bat` - build the project in production mode. +- `bin/tgui-dev-server.bat` - launch a development server. + +> Remember to always run a full build before submitting a PR. It creates +> a compressed javascript bundle which is then referenced from DM code. +> We prefer to keep it version controlled, so that people could build the +> game just by using Dream Maker. + +## Troubleshooting + +**Development server doesn't find my BYOND cache!** + +This happens if your Documents folder in Windows has a custom location, for +example in `E:\Libraries\Documents`. Development server has no knowledge +of these non-standard locations, therefore you have to run the dev server +with an additional environmental variable, with a full path to BYOND cache. + +``` +export BYOND_CACHE="E:/Libraries/Documents/BYOND/cache" +bin/tgui --dev +``` + +Note that in Windows, you have to go through Advanced System Settings, +System Properties and then open Environment Variables window to do the +same thing. You may need to reboot after this. + +## Developer Tools + +When developing with `tgui-dev-server`, you will have access to certain +development only features. + +**Debug Logs.** +When running server via `bin/tgui --dev --debug`, server will print debug +logs and time spent on rendering. Use this information to optimize your +code, and try to keep re-renders below 16ms. + +**Kitchen Sink.** +Press `F12` to open the KitchenSink interface. This interface is a +playground to test various tgui components. + +**Layout Debugger.** +Press `F11` to toggle the *layout debugger*. It will show outlines of +all tgui elements, which makes it easy to understand how everything comes +together, and can reveal certain layout bugs which are not normally visible. + +## Project Structure + +- `/packages` - Each folder here represents a self-contained Node module. +- `/packages/common` - Helper functions +- `/packages/tgui/index.js` - Application entry point. +- `/packages/tgui/components` - Basic UI building blocks. +- `/packages/tgui/interfaces` - Actual in-game interfaces. +Interface takes data via the `state` prop and outputs an html-like stucture, +which you can build using existing UI components. +- `/packages/tgui/layouts` - Root level UI components, that affect the final +look and feel of the browser window. They usually hold various window +elements, like the titlebar and resize handlers, and control the UI theme. +- `/packages/tgui/routes.js` - This is where tgui decides which interface to +pull and render. +- `/packages/tgui/layout.js` - A root-level component, holding the +window elements, like the titlebar, buttons, resize handlers. Calls +`routes.js` to decide which component to render. +- `/packages/tgui/styles/main.scss` - CSS entry point. +- `/packages/tgui/styles/functions.scss` - Useful SASS functions. +Stuff like `lighten`, `darken`, `luminance` are defined here. +- `/packages/tgui/styles/atomic` - Atomic CSS classes. +These are very simple, tiny, reusable CSS classes which you can use and +combine to change appearance of your elements. Keep them small. +- `/packages/tgui/styles/components` - CSS classes which are used +in UI components. These stylesheets closely follow the +[BEM](https://en.bem.info/methodology/) methodology. +- `/packages/tgui/styles/interfaces` - Custom stylesheets for your interfaces. +Add stylesheets here if you really need a fine control over your UI styles. +- `/packages/tgui/styles/layouts` - Layout-related styles. +- `/packages/tgui/styles/themes` - Contains all the various themes you can +use in tgui. Each theme must be registered in `webpack.config.js` file. + +## Component Reference + +See: [Component Reference](docs/component-reference.md). + +## License + +All code is licensed with the parent license of *tgstation*, **AGPL-3.0**. + +See the main [README](../README.md) for more details. + +The Authors retain all copyright to their respective work here submitted. diff --git a/tgui/bin/tgui b/tgui/bin/tgui new file mode 100644 index 0000000000..97a86159e6 --- /dev/null +++ b/tgui/bin/tgui @@ -0,0 +1,181 @@ +#!/bin/bash +set -e +shopt -s globstar +shopt -s expand_aliases + +## Initial set-up +## -------------------------------------------------------- + +## Returns an absolute path to file +alias tgui-realpath="readlink -f" + +## Fallbacks for GNU readlink +## Detecting GNU coreutils http://stackoverflow.com/a/8748344/319952 +if ! readlink --version >/dev/null 2>&1; then + if hash greadlink 2>/dev/null; then + alias tgui-realpath="greadlink -f" + else + alias tgui-realpath="perl -MCwd -le 'print Cwd::abs_path(shift)'" + fi +fi + +## Find a canonical path to project root +base_dir="$(dirname "$(tgui-realpath "${0}")")/.." +base_dir="$(tgui-realpath "${base_dir}")" + +## Add locally installed node programs to path +PATH="${PATH}:node_modules/.bin" + + +## Functions +## -------------------------------------------------------- + +## Installs node modules +task-install() { + cd "${base_dir}" + yarn install +} + +## Runs webpack +task-webpack() { + cd "${base_dir}/packages/tgui" + webpack "${@}" +} + +## Runs a development server +task-dev-server() { + cd "${base_dir}/packages/tgui-dev-server" + exec node --experimental-modules index.js "${@}" +} + +## Run a linter through all packages +task-eslint() { + cd "${base_dir}" + eslint ./packages "${@}" + echo "tgui: eslint check passed" +} + +## Mr. Proper +task-clean() { + cd "${base_dir}" + rm -rf packages/tgui/public/.tmp + rm -rf **/node_modules + rm -f **/package-lock.json +} + +## Validates current build against the build stored in git +task-validate-build() { + cd "${base_dir}" + local diff + diff="$(git diff packages/tgui/public/tgui.bundle.*)" + if [[ -n ${diff} ]]; then + echo "Error: our build differs from the build committed into git." + echo "Please rebuild tgui." + exit 1 + fi + echo "tgui: build is ok" +} + +## Installs merge drivers and git hooks +task-install-git-hooks() { + cd "${base_dir}" + local git_root + local git_base_dir + git_root="$(git rev-parse --show-toplevel)" + git_base_dir="${base_dir/${git_root}/.}" + git config --replace-all merge.tgui-merge-bundle.driver \ + "${git_base_dir}/bin/tgui --merge=bundle %O %A %B %L" + echo "tgui: Merge drivers have been successfully installed!" +} + +## Bundle merge driver +task-merge-bundle() { + local file_ancestor="${1}" + local file_current="${2}" + local file_other="${3}" + local conflict_marker_size="${4}" + echo "tgui: Discarding a local tgui build" + ## Do nothing (file_current will be merged and is what we want to keep). + exit 0 +} + + +## Main +## -------------------------------------------------------- + +if [[ ${1} == "--merge"* ]]; then + if [[ ${1} == "--merge=bundle" ]]; then + shift 1 + task-merge-bundle "${@}" + fi + echo "Unknown merge strategy: ${1}" + exit 1 +fi + +if [[ ${1} == "--install-git-hooks" ]]; then + shift 1 + task-install-git-hooks + exit 0 +fi + +## Continuous integration scenario +if [[ ${1} == "--ci" ]]; then + task-clean + task-install + task-eslint + task-webpack --mode=production + task-validate-build + exit 0 +fi + +if [[ ${1} == "--clean" ]]; then + task-clean + exit 0 +fi + +if [[ ${1} == "--dev" ]]; then + shift + task-install + task-dev-server "${@}" + exit 0 +fi + +if [[ ${1} == '--lint' ]]; then + shift 1 + task-install + task-eslint "${@}" + exit 0 +fi + +if [[ ${1} == '--lint-harder' ]]; then + shift 1 + task-install + task-eslint -c .eslintrc-harder.yml "${@}" + exit 0 +fi + +if [[ ${1} == '--fix' ]]; then + shift 1 + task-install + task-eslint --fix "${@}" + exit 0 +fi + +## Analyze the bundle +if [[ ${1} == '--analyze' ]]; then + task-install + task-webpack --mode=production --analyze + exit 0 +fi + +## Make a production webpack build +if [[ -z ${1} ]]; then + task-install + task-eslint + task-webpack --mode=production + exit 0 +fi + +## Run webpack with custom flags +task-install +task-webpack "${@}" diff --git a/tgui/bin/tgui-build.bat b/tgui/bin/tgui-build.bat new file mode 100644 index 0000000000..89e1aca915 --- /dev/null +++ b/tgui/bin/tgui-build.bat @@ -0,0 +1,5 @@ +@echo off +cd "%~dp0\.." +call yarn install +call yarn run build +timeout /t 9 diff --git a/tgui/bin/tgui-dev-server.bat b/tgui/bin/tgui-dev-server.bat new file mode 100644 index 0000000000..1b5bdcfb1d --- /dev/null +++ b/tgui/bin/tgui-dev-server.bat @@ -0,0 +1,4 @@ +@echo off +cd "%~dp0\.." +call yarn install +call yarn run watch diff --git a/tgui/docs/component-reference.md b/tgui/docs/component-reference.md new file mode 100644 index 0000000000..6c10124049 --- /dev/null +++ b/tgui/docs/component-reference.md @@ -0,0 +1,1000 @@ +# Component Reference + +> Notice: This documentation might be out of date, so always check the source +> code to see the most up-to-date information. + + + +- [General Concepts](#general-concepts) +- [`tgui/components`](#tguicomponents) + - [`AnimatedNumber`](#animatednumber) + - [`BlockQuote`](#blockquote) + - [`Box`](#box) + - [`Button`](#button) + - [`Button.Checkbox`](#buttoncheckbox) + - [`Button.Confirm`](#buttonconfirm) + - [`Button.Input`](#buttoninput) + - [`ByondUi`](#byondui) + - [`Collapsible`](#collapsible) + - [`ColorBox`](#colorbox) + - [`Dimmer`](#dimmer) + - [`Divider`](#divider) + - [`Dropdown`](#dropdown) + - [`Flex`](#flex) + - [`Flex.Item`](#flexitem) + - [`Grid`](#grid) + - [`Grid.Column`](#gridcolumn) + - [`Icon`](#icon) + - [`Input`](#input) + - [`Knob`](#knob) + - [`LabeledControls`](#labeledcontrols) + - [`LabeledControls.Item`](#labeledcontrolsitem) + - [`LabeledList`](#labeledlist) + - [`LabeledList.Item`](#labeledlistitem) + - [`LabeledList.Divider`](#labeledlistdivider) + - [`Modal`](#modal) + - [`NoticeBox`](#noticebox) + - [`NumberInput`](#numberinput) + - [`ProgressBar`](#progressbar) + - [`Section`](#section) + - [`Slider`](#slider) + - [`Table`](#table) + - [`Table.Row`](#tablerow) + - [`Table.Cell`](#tablecell) + - [`Tabs`](#tabs) + - [`Tabs.Tab`](#tabstab) + - [`Tooltip`](#tooltip) +- [`tgui/layouts`](#tguilayouts) + - [`Window`](#window) + - [`Window.Content`](#windowcontent) + +## General Concepts + +These are the components which you can use for interface construction. +If you have trouble finding the exact prop you need on a component, +please note, that most of these components inherit from other basic +components, such as [Box](#box). This component in particular provides a lot +of styling options for all components, e.g. `color` and `opacity`, thus +it is used a lot in this framework. + +**Event handlers.** +Event handlers are callbacks that you can attack to various element to +listen for browser events. Inferno supports camelcase (`onClick`) and +lowercase (`onclick`) event names. + +- Camel case names are what's called *synthetic* events, and are the +**preferred way** of handling events in React, for efficiency and +performance reasons. Please read +[Inferno Event Handling](https://infernojs.org/docs/guides/event-handling) +to understand what this is about. +- Lower case names are native browser events and should be used sparingly, +for example when you need an explicit IE8 support. **DO NOT** use +lowercase event handlers unless you really know what you are doing. +- [Button](#button) component does not support the lowercase `onclick` event. +Use the camel case `onClick` instead. + +## `tgui/components` + +### `AnimatedNumber` + +This component provides animations for numeric values. + +**Props:** + +- `value: number` - Value to animate. +- `initial: number` - Initial value to use in animation when element +first appears. If you set initial to `0` for example, number will always +animate starting from `0`, and if omitted, it will not play an initial +animation. +- `format: value => value` - Output formatter. + - Example: `value => Math.round(value)`. +- `children: (formattedValue, rawValue) => any` - Pull the animated number to +animate more complex things deeper in the DOM tree. + - Example: `(_, value) => ` + +### `BlockQuote` + +Just a block quote, just like this example in markdown: + +> Here's an example of a block quote. + +**Props:** + +- See inherited props: [Box](#box) + +### `Box` + +The Box component serves as a wrapper component for most of the CSS utility +needs. It creates a new DOM element, a `
` by default that can be changed +with the `as` property. Let's say you want to use a `` instead: + +```jsx + +
` tag) and with sane default styles +(e.g. table width is 100% by default). + +Example: + +```jsx +
[thing]") + if(istype(thing, /obj/item/weapon/paper)) + LAZYADD(dat, "ReadWrite") + else if(istype(thing, /obj/item/weapon/photo)) + LAZYADD(dat, "Look") + LAZYADD(dat, "Remove
+ + + Hello world! + + + Label + + +
+``` + +**Props:** + +- See inherited props: [Box](#box) +- `collapsing: boolean` - Collapses table to the smallest possible size. + +### `Table.Row` + +A straight forward mapping to `` element. + +**Props:** + +- See inherited props: [Box](#box) + +### `Table.Cell` + +A straight forward mapping to `` element. + +**Props:** + +- See inherited props: [Box](#box) +- `collapsing: boolean` - Collapses table cell to the smallest possible size, +and stops any text inside from wrapping. + +### `Tabs` + +Tabs make it easy to explore and switch between different views. + +Here is an example of how you would construct a simple tabbed view: + +```jsx + + setTabIndex(1)}> + Tab one + + setTabIndex(2)}> + Tab two + + + + Tab selected: {tabIndex} + +``` + +Notice that tabs do not contain state. It is your job to track the selected +tab, handle clicks and place tab content where you need it. In return, you get +a lot of flexibility in regards to how you can layout your tabs. + +Tabs also support a vertical configuration. This is usually paired with a +[Flex](#flex) component to render tab content to the right. + +```jsx + + + + ... + + + + Tab content. + + +``` + +**Props:** + +- See inherited props: [Box](#box) +- `vertical: boolean` - Use a vertical configuration, where tabs will be +stacked vertically. +- `children: Tab[]` - This component only accepts tabs as its children. + +### `Tabs.Tab` + +An individual tab element. Tabs function like buttons, so they inherit +a lot of `Button` props. + +**Props:** + +- See inherited props: [Button](#button) +- `altSelection` - Whether the tab buttons select via standard select (color +change) or by adding a white indicator to the selected tab. +Intended for usage on interfaces where tab color has relevance. +- `icon: string` - Tab icon. +- `children: any` - Tab text. +- `onClick: function` - Called when element is clicked. + +### `Tooltip` + +A boxy tooltip from tgui 1. It is very hacky in its current state, and +requires setting `position: relative` on the container. + +Please note, that [Button](#button) component has a `tooltip` prop, and +it is recommended to use that prop instead. + +Usage: + +```jsx + + Sample text. + + +``` + +**Props:** + +- `position: string` - Tooltip position. +- `content/children: string` - Content of the tooltip. Must be a plain string. +Fragments or other elements are **not** supported. + +## `tgui/layouts` + +### `Window` + +A root-level component, which draws the window chrome, titlebar, resize +handlers, and controls the UI theme. All tgui interfaces must implement +it in one way or another. + +Example: + +```jsx + + + Hello, world! + + +``` + +**Props:** + +- `className: string` - Applies a CSS class to the element. +- `theme: string` - A name of the theme. + - For a list of themes, see `packages/tgui/styles/themes`. +- `title: string` - Window title. +- `resizable: boolean` - Controls resizability of the window. +- `children: any` - Child elements, which are rendered directly inside the +window. If you use a [Dimmer](#dimmer) or [Modal](#modal) in your UI, +they should be put as direct childs of a Window, otherwise you should be +putting your content into [Window.Content](#windowcontent). + +### `Window.Content` + +Canonical window content, which is usually the main target of window focus. +Can be scrollable. + +**Props:** + +- `className: string` - Applies a CSS class to the element. +- `scrollable: boolean` - Shows or hides the scrollbar. +- `children: any` - Main content of your window. diff --git a/tgui/docs/converting-old-nano-interfaces.md b/tgui/docs/converting-old-nano-interfaces.md new file mode 100644 index 0000000000..83d44220b1 --- /dev/null +++ b/tgui/docs/converting-old-nano-interfaces.md @@ -0,0 +1,321 @@ +# Converting old NanoUI interfaces to TGUI + +This guide is going to assume you already know roughly how tgui-next works, how to make new uis, etc. It's mostly aimed at helping translate concepts between nano and tgui-next, and clarify some confusing parts of the transition. + +## Backend + +Backend in almost every case does not require any changes. In particularly heavy ui cases, something to be aware of is the new `tgui_static_data()` proc. This proc allows you to split some data sent to the interface off into data that will only be sent on ui initialize and when manually updated by elsewhere in the code. Useful for things like cargo where you have a very large set of mostly identical code. + +Keep in mind that for uis where *all* data doesn't need to be live updating, you can just toggle off autoupdate for the ui instead of messing with static data. + +## Frontend + +The very first thing to note is the name of the `tmpl` file containing the old interface. Whatever the name is (minus the extension) is going to be what the route key is going to be. + +One thing I like to do before starting work on a conversion is screenshot what the old interface looks like so I have something to reference to make sure that the styling can line up as well. + +## General syntax changes + +Ractive has a fairly different templating syntax from React. + +### `data` + +You likely already know that React data inserts look like this + +```jsx +{data.example_data} +``` + +Ractive looks very similar, the only real difference is that React uses one paranthesis instead of two. + +```tmpl +{{data.example_data}} +``` + +However, you may occasionally come across data inserts that instead of referencing the `data` var or things contained within it instead reference `adata`. `adata` was short for animated data, and was used for smooth number animations in interfaces. instead of having a seperate data structure for this. tgui-next instead uses a component, which is `AnimatedNumber`. + +`AnimatedNumber` is used like this + +```jsx + +``` + +Make sure you don't forget to import it. + +### Conditionals + +Template conditionals look very different from React conditionals. + +A template `if` (only render if result of expression is true) looks like this + +```tmpl +{{#if data.condition}} + Example Render +{{/if}} +``` + +The equivalent React would be + +```jsx +{!!data.condition && ( + Example Render +)} +``` + +This might look a bit intimidating compared to the reactive part but it's not as complicated as it seems: + +1. A new jsx context is opened with `{}` +2. jsx contexts like this always render whatever the return value is, so we can use `&&` to return a value we want. `&&` returns the last true value (or not "falsey" because this is js). +3. jsx tags are never "falsey", so a conditioned paired with a jsx tag will mean the condition being true will continue on and return the tag. `()` is just used to contain the tag +4. The `!!` is not a special operator, it is a literal double negation. This is because most `false` values coming from byond are going to actually be `0`, which would be rendered if the condition is false. Negating `0` returns `true`, negating `true` returns `false`, which isn't rendered. +5. `Fragment` is actually a true "dead tag". It's similar to `span` in that it just contains things without providing functionality, but it's unwrapped before the final render and children of it are injected into its parent. In a case where you only need to render text without any styling, it's probably better to just return a string literal (`"Example Render"`), but this was just to illustrate that you can put any tag in this expression. + +You don't really need to know all this to understand how to use it, but I find it helps with understanding when things go wrong. + +Template conditionals can have an `else` as well +```tmpl +{{#if data.condition}} + value +{{else}} + other value +{{/if}} +``` + +Similarly to the previous example, just add a `||` operator to handle the +"falsy" condition: + +```jsx +{!!data.condition && ( + + value + +) || ( + + other value + +)} +``` + +There's also our good old friend - the ternary: + +```jsx +{data.condition ? 'value' : 'other value'} +``` + +Keep in mind you can also use tags here like the conditional example, +and you can mix string literals, values, and tags as well. + +```jsx +{data.is_robot ? ( + + + {buttons && ( +
+ {buttons} +
+ )} + + {open && ( + + {children} + + )} + + ); + } +} diff --git a/tgui/packages/tgui/components/ColorBox.js b/tgui/packages/tgui/components/ColorBox.js new file mode 100644 index 0000000000..f37c4e057e --- /dev/null +++ b/tgui/packages/tgui/components/ColorBox.js @@ -0,0 +1,28 @@ +import { classes, pureComponentHooks } from 'common/react'; +import { computeBoxClassName, computeBoxProps } from './Box'; + +export const ColorBox = props => { + const { + content, + children, + className, + color, + backgroundColor, + ...rest + } = props; + rest.color = content ? null : 'transparent'; + rest.backgroundColor = color || backgroundColor; + return ( +
+ {content || '.'} +
+ ); +}; + +ColorBox.defaultHooks = pureComponentHooks; diff --git a/tgui/packages/tgui/components/Dimmer.js b/tgui/packages/tgui/components/Dimmer.js new file mode 100644 index 0000000000..f38d0a026a --- /dev/null +++ b/tgui/packages/tgui/components/Dimmer.js @@ -0,0 +1,18 @@ +import { classes } from 'common/react'; +import { Box } from './Box'; + +export const Dimmer = props => { + const { className, children, ...rest } = props; + return ( + +
+ {children} +
+
+ ); +}; diff --git a/tgui/packages/tgui/components/Divider.js b/tgui/packages/tgui/components/Divider.js new file mode 100644 index 0000000000..5c807c290b --- /dev/null +++ b/tgui/packages/tgui/components/Divider.js @@ -0,0 +1,18 @@ +import { classes } from 'common/react'; + +export const Divider = props => { + const { + vertical, + hidden, + } = props; + return ( +